Name: series-workflowrx4gb Phase: Succeeded StartedAt: 2026-09-06 15:01:29 +0000 UTC FinishedAt: 2026-09-06 19:07:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4gb[0] Phase: Succeeded StartedAt: 2026-09-06 15:01:29 +0000 UTC FinishedAt: 2026-09-06 15:21:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4gb[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 15:01:29 +0000 UTC FinishedAt: 2026-09-06 15:21:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVMEM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVMEM" ], "series_id": "72f3e33c-28f4-4b63-a17d-ff14375f31f8" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "generic_access_phys", "access_remote_vm", "access_process_vm" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVk1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbmVyaWNfYWNjZXNzX3BoeXMmIzM0OywKICAgICYjMzQ7YWNjZXNzX3JlbW90ZV92bSYjMzQ7LAogICAgJiMzNDthY2Nlc3NfcHJvY2Vzc192bSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBnZW5lcmljX2FjY2Vzc19waHlzKClgIGFuZCBgX19hY2Nlc3NfcmVtb3RlX3ZtKClgIGluIGBtbS9tZW1vcnkuY2AgdG8gY2xhbXAgYWNjZXNzIGxlbmd0aHMgdG8gcGFnZSBib3VuZGFyaWVzIChgUEFHRV9TSVpFIC0gb2Zmc2V0YCksIG1hcCBvbmx5IGEgc2luZ2xlIHBhZ2UgdmlhIGBpb3JlbWFwX3Byb3QoKWAsIGNhc3QgYGFyZ3MucGZuYCB0byBgcmVzb3VyY2Vfc2l6ZV90YCBiZWZvcmUgc2hpZnRpbmcsIGFuZCByZXR1cm4gZWFybHkgd2hlbiBgbGVuIFx1MDAzYz0gMGAuXG5cblRoZXNlIGNoYW5nZXMgZml4IGJvdW5kYXJ5IGNhbGN1bGF0aW9ucyBhbmQgcHJldmVudCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgLyBhcml0aG1ldGljIHRydW5jYXRpb24uIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZXMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBpbiB0aGlzIGNvZGUgcGF0aCAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsZW5ndGggY2FsY3VsYXRpb24sIGJvdW5kcyBjaGVja2luZywgYW5kIHBoeXNpY2FsIGFkZHJlc3MgdHlwZWNhc3RpbmcgaW4gZ2VuZXJpY19hY2Nlc3NfcGh5cygpIGFzIHdlbGwgYXMgdGhlIGxlbmd0aCBjbGFtcGluZyBwYXNzZWQgdG8gdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VhY2Nlc3MoKSBpbiBfX2FjY2Vzc19yZW1vdGVfdm0oKS4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcHRyYWNlIChQVFJBQ0VfUEVFS0RBVEEvUE9LRURBVEEpIGFuZCAvcHJvYy8kcGlkL21lbSBhY2Nlc3NlcyB0byBWTV9JTy9WTV9QRk5NQVAgVk1BcyAoc3VjaCBhcyAvZGV2L21lbSkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgYm91bmRhcnkgYW5kIHBhZ2UtY3Jvc3NpbmcgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg2ZmUzOTYxZGJkYTYxYWUwYjI1MjhjNmFlYWE0YjRkNzU5NjljMmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDE1OjE5OjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IDhiMGMyYzczNWQzZGUuLjA5MzkwZTUxNDMyZjIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmNcbkBAIC03MTY0LDYgJiM0Mzs3MTY0LDExIEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRib29sIHdyaXRhYmxlO1xuIFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGFkZHIgfTtcbiBcbiYjNDM7XHRpZiAobGVuIFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRsZW4gPSBtaW5fdChpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2Zmc2V0KTtcbiYjNDM7XG4gcmV0cnk6XG4gXHRpZiAoZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtNzE3NSw3ICYjNDM7NzE4MCw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpZiAoKHdyaXRlIFx1MDAyNiBGT0xMX1dSSVRFKSBcdTAwMjZcdTAwMjYgIXdyaXRhYmxlKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9BTElHTihsZW4gJiM0Mzsgb2Zmc2V0KSwgcHJvdCk7XG4mIzQzO1x0bWFkZHIgPSBpb3JlbWFwX3Byb3QocGh5c19hZGRyLCBQQUdFX1NJWkUsIHByb3QpO1xuIFx0aWYgKCFtYWRkcilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtNzE4Myw3ICYjNDM7NzE4OCw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGdvdG8gb3V0X3VubWFwO1xuIFxuIFx0aWYgKChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoYXJncy5wZ3Byb3QpKSB8fFxuLVx0ICAgIChwaHlzX2FkZHIgIT0gKGFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSkgfHxcbiYjNDM7XHQgICAgKHBoeXNfYWRkciAhPSAoKHJlc291cmNlX3NpemVfdClhcmdzLnBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpIHx8XG4gXHQgICAgKHdyaXRhYmxlICE9IGFyZ3Mud3JpdGFibGUpKSB7XG4gXHRcdGZvbGxvd19wZm5tYXBfZW5kKFx1MDAyNmFyZ3MpO1xuIFx0XHRpb3VubWFwKG1hZGRyKTtcbkBAIC03MjU0LDcgJiM0Mzs3MjU5LDggQEAgc3RhdGljIGludCBfX2FjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiAjaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG4gXHRcdFx0aWYgKHZtYS1cdTAwM2V2bV9vcHMgXHUwMDI2XHUwMDI2IHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlYWNjZXNzKVxuIFx0XHRcdFx0Ynl0ZXMgPSB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2Vzcyh2bWEsIGFkZHIsIGJ1Zixcbi1cdFx0XHRcdFx0XHRcdCAgICBsZW4sIHdyaXRlKTtcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKGFkZHIpKSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgd3JpdGUpO1xuICNlbmRpZlxuIFx0XHRcdGlmIChieXRlcyBcdTAwM2M9IDApXG4gXHRcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERVZNRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZW5lcmljX2FjY2Vzc19waHlzJiMzNDssCiAgICAmIzM0O2FjY2Vzc19yZW1vdGVfdm0mIzM0OywKICAgICYjMzQ7YWNjZXNzX3Byb2Nlc3Nfdm0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbGVuZ3RoIGNhbGN1bGF0aW9uLCBib3VuZHMgY2hlY2tpbmcsIGFuZCBwaHlzaWNhbCBhZGRyZXNzIHR5cGVjYXN0aW5nIGluIGdlbmVyaWNfYWNjZXNzX3BoeXMoKSBhcyB3ZWxsIGFzIHRoZSBsZW5ndGggY2xhbXBpbmcgcGFzc2VkIHRvIHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlYWNjZXNzKCkgaW4gX19hY2Nlc3NfcmVtb3RlX3ZtKCkuIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHB0cmFjZSAoUFRSQUNFX1BFRUtEQVRBL1BPS0VEQVRBKSBhbmQgL3Byb2MvJHBpZC9tZW0gYWNjZXNzZXMgdG8gVk1fSU8vVk1fUEZOTUFQIFZNQXMgKHN1Y2ggYXMgL2Rldi9tZW0pLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGJvdW5kYXJ5IGFuZCBwYWdlLWNyb3NzaW5nIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NmZlMzk2MWRiZGE2MWFlMGIyNTI4YzZhZWFhNGI0ZDc1OTY5YzJlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAxNToxOTo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggOGIwYzJjNzM1ZDNkZS4uMDkzOTBlNTE0MzJmMiAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTcxNjQsNiAmIzQzOzcxNjQsMTEgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlib29sIHdyaXRhYmxlOwogCXN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSBhZGRyIH07CiAKJiM0MzsJaWYgKGxlbiAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWxlbiA9IG1pbl90KGludCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXQpOwomIzQzOwogcmV0cnk6CiAJaWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoJmFtcDthcmdzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03MTc1LDcgJiM0Mzs3MTgwLDcgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlpZiAoKHdyaXRlICZhbXA7IEZPTExfV1JJVEUpICZhbXA7JmFtcDsgIXdyaXRhYmxlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9BTElHTihsZW4gJiM0Mzsgb2Zmc2V0KSwgcHJvdCk7CiYjNDM7CW1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9TSVpFLCBwcm90KTsKIAlpZiAoIW1hZGRyKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNzE4Myw3ICYjNDM7NzE4OCw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCWdvdG8gb3V0X3VubWFwOwogCiAJaWYgKChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoYXJncy5wZ3Byb3QpKSB8fAotCSAgICAocGh5c19hZGRyICE9IChhcmdzLnBmbiAmbHQ7Jmx0OyBQQUdFX1NISUZUKSkgfHwKJiM0MzsJICAgIChwaHlzX2FkZHIgIT0gKChyZXNvdXJjZV9zaXplX3QpYXJncy5wZm4gJmx0OyZsdDsgUEFHRV9TSElGVCkpIHx8CiAJICAgICh3cml0YWJsZSAhPSBhcmdzLndyaXRhYmxlKSkgewogCQlmb2xsb3dfcGZubWFwX2VuZCgmYW1wO2FyZ3MpOwogCQlpb3VubWFwKG1hZGRyKTsKQEAgLTcyNTQsNyAmIzQzOzcyNTksOCBAQCBzdGF0aWMgaW50IF9fYWNjZXNzX3JlbW90ZV92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVAogCQkJaWYgKHZtYS0mZ3Q7dm1fb3BzICZhbXA7JmFtcDsgdm1hLSZndDt2bV9vcHMtJmd0O2FjY2VzcykKIAkJCQlieXRlcyA9IHZtYS0mZ3Q7dm1fb3BzLSZndDthY2Nlc3Modm1hLCBhZGRyLCBidWYsCi0JCQkJCQkJICAgIGxlbiwgd3JpdGUpOwomIzQzOwkJCQkJCQkgICAgbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKGFkZHIpKSwKJiM0MzsJCQkJCQkJICAgIHdyaXRlKTsKICNlbmRpZgogCQkJaWYgKGJ5dGVzICZsdDs9IDApCiAJCQkJYnJlYWs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMDQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdGhlIGFzc29jaWF0ZWQgdG9vbHMuIEZpcnN0LCBhIHF1aWNrIG92ZXJ2aWV3IHRvIGdldCBvcmllbnRlZDogbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgY2hhbmdlIHdpdGhpbiB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gYG1tL21lbW9yeS5jYC4gTXkgaW5pdGlhbCBzY2FuIGhpZ2hsaWdodHMgdHdvIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZDogYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGFuZCBgX19hY2Nlc3NfcmVtb3RlX3ZtYC4gTm93LCBJIHdhbnQgdG8gem9vbSBpbiBhbmQgZXhhbWluZSB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGVzZSBjaGFuZ2VzIGluIGBtbS9tZW1vcnkuY2AgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaW1wYWN0IGJldHRlci4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZnJhbWV3b3JrIGFuZCBjb250ZXh0IHRvIGFuYWx5emUgYW55IGZ1bmN0aW9uYWwgdXBkYXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzE1MDpcdCAqIEB3cml0ZTogc2V0IHRvIEZPTExfV1JJVEUgd2hlbiB3cml0aW5nLCBvdGhlcndpc2UgcmVhZGluZ1xuNzE1MTpcdCAqXG43MTUyOlx0ICogVGhpcyBpcyBhIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIFx1MDAyNnZtX29wZXJhdGlvbnNfc3RydWN0LmFjY2VzcyBmb3IgYW5cbjcxNTM6XHQgKiBpb21lbSBtYXBwaW5nLiBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgYnkgYWNjZXNzX3Byb2Nlc3Nfdm0oKSB3aGVuIHRoZSBAdm1hIGlzXG43MTU0Olx0ICogbm90IHBhZ2UgYmFzZWQuXG43MTU1Olx0ICovXG43MTU2Olx0aW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbjcxNTc6XHRcdFx0XHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSlcbjcxNTg6XHR7XG43MTU5Olx0XHRyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyO1xuNzE2MDpcdFx0cGdwcm90X3QgcHJvdCA9IF9fcGdwcm90KDApO1xuNzE2MTpcdFx0dm9pZCBfX2lvbWVtICptYWRkcjtcbjcxNjI6XHRcdGludCBvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShhZGRyKTtcbjcxNjM6XHRcdGludCByZXQgPSAtRUlOVkFMO1xuNzE2NDpcdFx0Ym9vbCB3cml0YWJsZTtcbjcxNjU6XHRcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSBhZGRyIH07XG43MTY2Olx0XG43MTY3Olx0XHRpZiAobGVuIFx1MDAzYz0gMClcbjcxNjg6XHRcdFx0cmV0dXJuIDA7XG43MTY5Olx0XG43MTcwOlx0XHRsZW4gPSBtaW5fdChpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2Zmc2V0KTtcbjcxNzE6XHRcbjcxNzI6XHRyZXRyeTpcbjcxNzM6XHRcdGlmIChmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpKVxuNzE3NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjcxNzU6XHRcdHByb3QgPSBhcmdzLnBncHJvdDtcbjcxNzY6XHRcdHBoeXNfYWRkciA9IChyZXNvdXJjZV9zaXplX3QpYXJncy5wZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG43MTc3Olx0XHR3cml0YWJsZSA9IGFyZ3Mud3JpdGFibGU7XG43MTc4Olx0XHRmb2xsb3dfcGZubWFwX2VuZChcdTAwMjZhcmdzKTtcbjcxNzk6XHRcbjcxODA6XHRcdGlmICgod3JpdGUgXHUwMDI2IEZPTExfV1JJVEUpIFx1MDAyNlx1MDAyNiAhd3JpdGFibGUpXG43MTgxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzE4MjpcdFxuNzE4MzpcdFx0bWFkZHIgPSBpb3JlbWFwX3Byb3QocGh5c19hZGRyLCBQQUdFX1NJWkUsIHByb3QpO1xuNzE4NDpcdFx0aWYgKCFtYWRkcilcbjcxODU6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG43MTg2Olx0XG43MTg3Olx0XHRpZiAoZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKSlcbjcxODg6XHRcdFx0Z290byBvdXRfdW5tYXA7XG43MTg5Olx0XG43MTkwOlx0XHRpZiAoKHBncHJvdF92YWwocHJvdCkgIT0gcGdwcm90X3ZhbChhcmdzLnBncHJvdCkpIHx8XG43MTkxOlx0XHQgICAgKHBoeXNfYWRkciAhPSAoKHJlc291cmNlX3NpemVfdClhcmdzLnBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpIHx8XG43MTkyOlx0XHQgICAgKHdyaXRhYmxlICE9IGFyZ3Mud3JpdGFibGUpKSB7XG43MTkzOlx0XHRcdGZvbGxvd19wZm5tYXBfZW5kKFx1MDAyNmFyZ3MpO1xuNzE5NDpcdFx0XHRpb3VubWFwKG1hZGRyKTtcbjcxOTU6XHRcdFx0Z290byByZXRyeTtcbjcxOTY6XHRcdH1cbjcxOTc6XHRcbjcxOTg6XHRcdGlmICh3cml0ZSlcbjcxOTk6XHRcdFx0bWVtY3B5X3RvaW8obWFkZHIgJiM0Mzsgb2Zmc2V0LCBidWYsIGxlbik7XG43MjAwOlx0XHRlbHNlXG43MjAxOlx0XHRcdG1lbWNweV9mcm9taW8oYnVmLCBtYWRkciAmIzQzOyBvZmZzZXQsIGxlbik7XG43MjAyOlx0XHRyZXQgPSBsZW47XG43MjAzOlx0XHRmb2xsb3dfcGZubWFwX2VuZChcdTAwMjZhcmdzKTtcbjcyMDQ6XHRvdXRfdW5tYXA6XG43MjA1Olx0XHRpb3VubWFwKG1hZGRyKTtcbjcyMDY6XHRcbjcyMDc6XHRcdHJldHVybiByZXQ7XG43MjA4Olx0fVxuNzIwOTpcdEVYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfYWNjZXNzX3BoeXMpO1xuNzIxMDpcdCNlbmRpZlxuNzIxMTpcdFxuNzIxMjpcdC8qXG43MjEzOlx0ICogQWNjZXNzIGFub3RoZXIgcHJvY2VzcyYjMzk7IGFkZHJlc3Mgc3BhY2UgYXMgZ2l2ZW4gaW4gbW0uXG43MjE0Olx0ICovXG43MjE1Olx0c3RhdGljIGludCBfX2FjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbjcyMTY6XHRcdFx0XHQgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG43MjE3Olx0e1xuNzIxODpcdFx0dm9pZCAqb2xkX2J1ZiA9IGJ1ZjtcbjcyMTk6XHRcdGludCB3cml0ZSA9IGd1cF9mbGFncyBcdTAwMjYgRk9MTF9XUklURTtcbjcyMjA6XHRcbjcyMjE6XHRcdGlmIChtbWFwX3JlYWRfbG9ja19raWxsYWJsZShtbSkpXG43MjIyOlx0XHRcdHJldHVybiAwO1xuNzIyMzpcdFxuNzIyNDpcdFx0LyogVW50YWcgdGhlIGFkZHJlc3MgYmVmb3JlIGxvb2tpbmcgdXAgdGhlIFZNQSAqL1xuNzIyNTpcdFx0YWRkciA9IHVudGFnZ2VkX2FkZHJfcmVtb3RlKG1tLCBhZGRyKTtcbjcyMjY6XHRcbjcyMjc6XHRcdC8qIEF2b2lkIHRyaWdnZXJpbmcgdGhlIHRlbXBvcmFyeSB3YXJuaW5nIGluIF9fZ2V0X3VzZXJfcGFnZXMgKi9cbjcyMjg6XHRcdGlmICghdm1hX2xvb2t1cChtbSwgYWRkcikgXHUwMDI2XHUwMDI2ICFleHBhbmRfc3RhY2sobW0sIGFkZHIpKVxuNzIyOTpcdFx0XHRyZXR1cm4gMDtcbjcyMzA6XHRcbjcyMzE6XHRcdC8qIGlnbm9yZSBlcnJvcnMsIGp1c3QgY2hlY2sgaG93IG11Y2ggd2FzIHN1Y2Nlc3NmdWxseSB0cmFuc2ZlcnJlZCAqL1xuNzIzMjpcdFx0d2hpbGUgKGxlbikge1xuNzIzMzpcdFx0XHRpbnQgYnl0ZXMsIG9mZnNldDtcbjcyMzQ6XHRcdFx0dm9pZCAqbWFkZHI7XG43MjM1Olx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG43MjM2Olx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gTlVMTDtcbjcyMzc6XHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBnZXRfdXNlcl9wYWdlX3ZtYV9yZW1vdGUobW0sIGFkZHIsXG43MjM4Olx0XHRcdFx0XHRcdFx0XHQgICAgIGd1cF9mbGFncywgXHUwMDI2dm1hKTtcbjcyMzk6XHRcbjcyNDA6XHRcdFx0aWYgKElTX0VSUihwYWdlKSkge1xuNzI0MTpcdFx0XHRcdC8qIFdlIG1pZ2h0IG5lZWQgdG8gZXhwYW5kIHRoZSBzdGFjayB0byBhY2Nlc3MgaXQgKi9cbjcyNDI6XHRcdFx0XHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyKTtcbjcyNDM6XHRcdFx0XHRpZiAoIXZtYSkge1xuNzI0NDpcdFx0XHRcdFx0dm1hID0gZXhwYW5kX3N0YWNrKG1tLCBhZGRyKTtcbjcyNDU6XHRcbjcyNDY6XHRcdFx0XHRcdC8qIG1tYXBfbG9jayB3YXMgZHJvcHBlZCBvbiBmYWlsdXJlICovXG43MjQ3Olx0XHRcdFx0XHRpZiAoIXZtYSlcbjcyNDg6XHRcdFx0XHRcdFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XG43MjQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAzMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyBDb25kaXRpb25hbCBDb21waWxhdGlvbiBpbiB0aGUgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBjZXJ0YWluIHNlY3Rpb25zIG9mIHRoaXMgY29kZSBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZC4gVG8gZG8gdGhhdCwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGZpbGUgYW5kIHNwZWNpZmljYWxseSBmb2N1cyBvbiBsaW5lcyBhcm91bmQgdGhlIDcxNDAgbWFyay4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYCNpZmRlZmAgZGlyZWN0aXZlcyBvciBhbnl0aGluZyB0aGF0IGxvb2tzIGxpa2UgcHJlcHJvY2Vzc29yIGd1YXJkcyB0aGF0IGNvbnRyb2wgd2hldGhlciBhIHBhcnRpY3VsYXIgYmxvY2sgb2YgY29kZSBnZXRzIGluY2x1ZGVkIGR1cmluZyBjb21waWxhdGlvbi4gVGhlc2UgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBkaWZmZXJlbnQgYnVpbGQgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMgdGhhdCBhcmUgYmVpbmcgc2VsZWN0aXZlbHkgZW5hYmxlZCBvciBkaXNhYmxlZC4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHNlbnNlIG9mIHdoaWNoIHBhcnRzIG9mIHRoZSBjb2RlIGFyZSBhY3RpdmUgdW5kZXIgYSBwYXJ0aWN1bGFyIHNldCBvZiBjb21waWxlciBmbGFncyBvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHdoaWNoIHdpbGwgYmUgdml0YWwgZm9yIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MTM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcxMzU6XHR7XG43MTM2Olx0XHRpZiAoYXJncy1cdTAwM2Vsb2NrKVxuNzEzNzpcdFx0XHRzcGluX3VubG9jayhhcmdzLVx1MDAzZWxvY2spO1xuNzEzODpcdFx0aWYgKGFyZ3MtXHUwMDNlcHRlcClcbjcxMzk6XHRcdFx0cHRlX3VubWFwKGFyZ3MtXHUwMDNlcHRlcCk7XG43MTQwOlx0fVxuNzE0MTpcdEVYUE9SVF9TWU1CT0xfR1BMKGZvbGxvd19wZm5tYXBfZW5kKTtcbjcxNDI6XHRcbjcxNDM6XHQjaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG43MTQ0Olx0LyoqXG43MTQ1Olx0ICogZ2VuZXJpY19hY2Nlc3NfcGh5cyAtIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIGlvbWVtIG1tYXAgYWNjZXNzXG43MTQ2Olx0ICogQHZtYTogdGhlIHZtYSB0byBhY2Nlc3NcbjcxNDc6XHQgKiBAYWRkcjogdXNlcnNwYWNlIGFkZHJlc3MsIG5vdCByZWxhdGl2ZSBvZmZzZXQgd2l0aGluIEB2bWFcbjcxNDg6XHQgKiBAYnVmOiBidWZmZXIgdG8gcmVhZC93cml0ZVxuNzE0OTpcdCAqIEBsZW46IGxlbmd0aCBvZiB0cmFuc2ZlclxuNzE1MDpcdCAqIEB3cml0ZTogc2V0IHRvIEZPTExfV1JJVEUgd2hlbiB3cml0aW5nLCBvdGhlcndpc2UgcmVhZGluZ1xuNzE1MTpcdCAqXG43MTUyOlx0ICogVGhpcyBpcyBhIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIFx1MDAyNnZtX29wZXJhdGlvbnNfc3RydWN0LmFjY2VzcyBmb3IgYW5cbjcxNTM6XHQgKiBpb21lbSBtYXBwaW5nLiBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgYnkgYWNjZXNzX3Byb2Nlc3Nfdm0oKSB3aGVuIHRoZSBAdm1hIGlzXG43MTU0Olx0ICogbm90IHBhZ2UgYmFzZWQuXG43MTU1Olx0ICovXG43MTU2Olx0aW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbjcxNTc6XHRcdFx0XHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSlcbjcxNTg6XHR7XG43MTU5Olx0XHRyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyO1xuNzE2MDpcdFx0cGdwcm90X3QgcHJvdCA9IF9fcGdwcm90KDApO1xuNzE2MTpcdFx0dm9pZCBfX2lvbWVtICptYWRkcjtcbjcxNjI6XHRcdGludCBvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShhZGRyKTtcbjcxNjM6XHRcdGludCByZXQgPSAtRUlOVkFMO1xuNzE2NDpcdFx0Ym9vbCB3cml0YWJsZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzMwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHJlcXVlc3QsIHRoaW5raW5nIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IEFjY2VzcyBQYXR0ZXJucyoqCgpPa2F5LCBzbyB0aGUgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucyB3aXRoaW4gdGhlIHN5c3RlbS4gSSBuZWVkIHRvIHRyYWNlIGFuZCBhbmFseXplIGNhbGxzIHRvIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHJlbW90ZSBtZW1vcnkgYWNjZXNzLiBTcGVjaWZpY2FsbHksIHRoZSByZXF1ZXN0IHdhbnRzIG1lIHRvIGxvb2sgZm9yIHVzYWdlcyBvZiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AuIFRoaXMgbGlrZWx5IGluZGljYXRlcyBpbnRlcmFjdGlvbnMgd2l0aCBwaHlzaWNhbCBtZW1vcnksIHBlcmhhcHMgZGV2aWNlIGludGVyYWN0aW9uIG9yIGRpcmVjdCBtZW1vcnkgYWNjZXNzLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2FsbHMuCgpCZXlvbmQgdGhhdCwgdGhlIHJlcXVlc3QgZXhwYW5kcyB0aGUgc2NvcGUgdG8gaW5jbHVkZSB2YXJpYXRpb25zIG9mIHJlbW90ZSBWTSBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGJlIGluY2x1c2l2ZSBhbmQgbG9vayBmb3IgYF9fYWNjZXNzX3JlbW90ZV92bWAsIGBhY2Nlc3NfcmVtb3RlX3ZtYCwgYW5kIGBhY2Nlc3NfcHJvY2Vzc192bWAuIFRoZXNlIGFsbCBwb2ludCB0byB0aGUgcmV0cmlldmFsIG9yIG1vZGlmaWNhdGlvbiBvZiBtZW1vcnkgZnJvbSBhIHZpcnR1YWwgbWFjaGluZSBvciBhIHNlcGFyYXRlIHByb2Nlc3MuIFRoZSBnb2FsIGlzIGxpa2VseSB0byBmaW5kIGNhc2VzIG9mIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIGRlYnVnZ2luZyBvcHBvcnR1bml0aWVzLCBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyByZWxhdGVkIHRvIHRoZXNlIGZ1bmN0aW9ucy4gSXQmIzM5O3MgYWJvdXQgYnVpbGRpbmcgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgYW5kIGhvdyByZW1vdGUgbWVtb3J5IGFjY2VzcyBpcyBiZWluZyB1c2VkLiBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHBlcm11dGF0aW9ucyBvZiBob3cgdGhlc2UgY2FsbHMgYXJlIGhhbmRsZWQgYW5kIHdoYXQgc2VjdXJpdHkgZmVhdHVyZXMgbWF5IGJlIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2VuZXJpY19hY2Nlc3NfcGh5cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NkeC9jZHguYz02NjI9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBjZHhfcGh5c192bV9vcHMgPSB7XG5kcml2ZXJzL2NkeC9jZHguYy02NjMtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy9jZHgvY2R4LmM6NjY0Olx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXG5kcml2ZXJzL2NkeC9jZHguYy02NjUtI2VuZGlmXG4tLVxuZHJpdmVycy9jaGFyL21lbS5jPTMxOT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1tYXBfbWVtX29wcyA9IHtcbmRyaXZlcnMvY2hhci9tZW0uYy0zMjAtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy9jaGFyL21lbS5jOjMyMTpcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzXG5kcml2ZXJzL2NoYXIvbWVtLmMtMzIyLSNlbmRpZlxuLS1cbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYz04MDU9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhZnVfdm1hX29wcyA9IHtcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYy04MDYtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jOjgwNzpcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jLTgwOC0jZW5kaWZcbi0tXG5kcml2ZXJzL3BjaS9tbWFwLmM9MTg9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBwY2lfcGh5c192bV9vcHMgPSB7XG5kcml2ZXJzL3BjaS9tbWFwLmMtMTktI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy9wY2kvbW1hcC5jOjIwOlx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXG5kcml2ZXJzL3BjaS9tbWFwLmMtMjEtI2VuZGlmXG4tLVxuZHJpdmVycy91aW8vdWlvLmM9NzM2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdWlvX3BoeXNpY2FsX3ZtX29wcyA9IHtcbmRyaXZlcnMvdWlvL3Vpby5jLTczNy0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL3Vpby91aW8uYzo3Mzg6XHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcbmRyaXZlcnMvdWlvL3Vpby5jLTczOS0jZW5kaWZcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9ODA2PXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB7XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTg1OC1cdC8qIGNhbGxlZCBieSBhY2Nlc3NfcHJvY2Vzc192bSB3aGVuIGdldF91c2VyX3BhZ2VzKCkgZmFpbHMsIHR5cGljYWxseVxuaW5jbHVkZS9saW51eC9tbS5oOjg1OTpcdCAqIGZvciB1c2UgYnkgc3BlY2lhbCBWTUFzLiBTZWUgYWxzbyBnZW5lcmljX2FjY2Vzc19waHlzKCkgZm9yIGEgZ2VuZXJpY1xuaW5jbHVkZS9saW51eC9tbS5oLTg2MC1cdCAqIGltcGxlbWVudGF0aW9uIHVzZWZ1bCBmb3IgYW55IGlvbWVtIG1hcHBpbmcuXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTMyMzQ9Y29weV9wYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hKTtcbmluY2x1ZGUvbGludXgvbW0uaDozMjM1OmludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5pbmNsdWRlL2xpbnV4L21tLmgtMzIzNi1cdFx0XHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSk7XG4tLVxubW0vbWVtb3J5LmM9NzE0MT1FWFBPUlRfU1lNQk9MX0dQTChmb2xsb3dfcGZubWFwX2VuZCk7XG4tLVxubW0vbWVtb3J5LmMtNzE0NC0vKipcbm1tL21lbW9yeS5jOjcxNDU6ICogZ2VuZXJpY19hY2Nlc3NfcGh5cyAtIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIGlvbWVtIG1tYXAgYWNjZXNzXG5tbS9tZW1vcnkuYy03MTQ2LSAqIEB2bWE6IHRoZSB2bWEgdG8gYWNjZXNzXG4tLVxubW0vbWVtb3J5LmMtNzE1NS0gKi9cbm1tL21lbW9yeS5jOjcxNTY6aW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL21lbW9yeS5jLTcxNTctXHRcdFx0dm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpXG4tLVxubW0vbWVtb3J5LmMtNzIwOC19XG5tbS9tZW1vcnkuYzo3MjA5OkVYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfYWNjZXNzX3BoeXMpO1xubW0vbWVtb3J5LmMtNzIxMC0jZW5kaWZcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oPTY0MD1zdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgtNjkyLVx0LyogY2FsbGVkIGJ5IGFjY2Vzc19wcm9jZXNzX3ZtIHdoZW4gZ2V0X3VzZXJfcGFnZXMoKSBmYWlscywgdHlwaWNhbGx5XG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oOjY5MzpcdCAqIGZvciB1c2UgYnkgc3BlY2lhbCBWTUFzLiBTZWUgYWxzbyBnZW5lcmljX2FjY2Vzc19waHlzKCkgZm9yIGEgZ2VuZXJpY1xudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC02OTQtXHQgKiBpbXBsZW1lbnRhdGlvbiB1c2VmdWwgZm9yIGFueSBpb21lbSBtYXBwaW5nLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFJlbW90ZSBWTSBBY2Nlc3MgUGF0aCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyB3aGVuIGBfX2FjY2Vzc19yZW1vdGVfdm1gIGdldHMgaW52b2x2ZWQsIHNwZWNpZmljYWxseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHZpcnR1YWwgbWVtb3J5IGFyZWEgKGB2bWFgKSBhbmQgaXRzIG9wZXJhdGlvbnMgKGB2bV9vcHNgKS4gSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBjYWxscyB0byBgdm1hLSZndDt2bV9vcHMtJmd0O2FjY2Vzc2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBuYXZpZ2F0ZSB0byBgbW0vbWVtb3J5LmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZXMgNzI0MCB0byA3MzAwLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlc2UgdHlwZXMgb2YgbWVtb3J5IGFjY2VzcyBpbnRlcmFjdGlvbnMgYXJlIGhhbmRsZWQuIEkgZXhwZWN0IHRvIHNlZSB0aGUgY29yZSBsb2dpYyB0aGVyZSwgd2hlcmUgdGhlIFZNIG9wZXJhdGlvbiBpcyBkaXNwYXRjaGVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludCBJIG5lZWQgdG8gZm9sbG93IHRoZSB0aHJlYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcyNDA6XHRcdFx0aWYgKElTX0VSUihwYWdlKSkge1xuNzI0MTpcdFx0XHRcdC8qIFdlIG1pZ2h0IG5lZWQgdG8gZXhwYW5kIHRoZSBzdGFjayB0byBhY2Nlc3MgaXQgKi9cbjcyNDI6XHRcdFx0XHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyKTtcbjcyNDM6XHRcdFx0XHRpZiAoIXZtYSkge1xuNzI0NDpcdFx0XHRcdFx0dm1hID0gZXhwYW5kX3N0YWNrKG1tLCBhZGRyKTtcbjcyNDU6XHRcbjcyNDY6XHRcdFx0XHRcdC8qIG1tYXBfbG9jayB3YXMgZHJvcHBlZCBvbiBmYWlsdXJlICovXG43MjQ3Olx0XHRcdFx0XHRpZiAoIXZtYSlcbjcyNDg6XHRcdFx0XHRcdFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XG43MjQ5Olx0XG43MjUwOlx0XHRcdFx0XHQvKiBUcnkgYWdhaW4gaWYgc3RhY2sgZXhwYW5zaW9uIHdvcmtlZCAqL1xuNzI1MTpcdFx0XHRcdFx0Y29udGludWU7XG43MjUyOlx0XHRcdFx0fVxuNzI1MzpcdFxuNzI1NDpcdFx0XHRcdC8qXG43MjU1Olx0XHRcdFx0ICogQ2hlY2sgaWYgdGhpcyBpcyBhIFZNX0lPIHwgVk1fUEZOTUFQIFZNQSwgd2hpY2hcbjcyNTY6XHRcdFx0XHQgKiB3ZSBjYW4gYWNjZXNzIHVzaW5nIHNsaWdodGx5IGRpZmZlcmVudCBjb2RlLlxuNzI1NzpcdFx0XHRcdCAqL1xuNzI1ODpcdFx0XHRcdGJ5dGVzID0gMDtcbjcyNTk6XHQjaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG43MjYwOlx0XHRcdFx0aWYgKHZtYS1cdTAwM2V2bV9vcHMgXHUwMDI2XHUwMDI2IHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlYWNjZXNzKVxuNzI2MTpcdFx0XHRcdFx0Ynl0ZXMgPSB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2Vzcyh2bWEsIGFkZHIsIGJ1ZixcbjcyNjI6XHRcdFx0XHRcdFx0XHRcdCAgICBtaW5fdChpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2UoYWRkcikpLFxuNzI2MzpcdFx0XHRcdFx0XHRcdFx0ICAgIHdyaXRlKTtcbjcyNjQ6XHQjZW5kaWZcbjcyNjU6XHRcdFx0XHRpZiAoYnl0ZXMgXHUwMDNjPSAwKVxuNzI2NjpcdFx0XHRcdFx0YnJlYWs7XG43MjY3Olx0XHRcdH0gZWxzZSB7XG43MjY4Olx0XHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuNzI2OTpcdFx0XHRcdGJ5dGVzID0gbGVuO1xuNzI3MDpcdFx0XHRcdG9mZnNldCA9IGFkZHIgXHUwMDI2IChQQUdFX1NJWkUtMSk7XG43MjcxOlx0XHRcdFx0aWYgKGJ5dGVzIFx1MDAzZSBQQUdFX1NJWkUtb2Zmc2V0KVxuNzI3MjpcdFx0XHRcdFx0Ynl0ZXMgPSBQQUdFX1NJWkUtb2Zmc2V0O1xuNzI3MzpcdFxuNzI3NDpcdFx0XHRcdG1hZGRyID0ga21hcF9sb2NhbF9mb2xpbyhmb2xpbywgZm9saW9fcGFnZV9pZHgoZm9saW8sIHBhZ2UpICogUEFHRV9TSVpFKTtcbjcyNzU6XHRcdFx0XHRpZiAod3JpdGUpIHtcbjcyNzY6XHRcdFx0XHRcdGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgYWRkcixcbjcyNzc6XHRcdFx0XHRcdFx0XHQgIG1hZGRyICYjNDM7IG9mZnNldCwgYnVmLCBieXRlcyk7XG43Mjc4Olx0XHRcdFx0XHRmb2xpb19tYXJrX2RpcnR5X2xvY2soZm9saW8pO1xuNzI3OTpcdFx0XHRcdH0gZWxzZSB7XG43MjgwOlx0XHRcdFx0XHRjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgYWRkcixcbjcyODE6XHRcdFx0XHRcdFx0XHQgICAgYnVmLCBtYWRkciAmIzQzOyBvZmZzZXQsIGJ5dGVzKTtcbjcyODI6XHRcdFx0XHR9XG43MjgzOlx0XHRcdFx0Zm9saW9fcmVsZWFzZV9rbWFwKGZvbGlvLCBtYWRkcik7XG43Mjg0Olx0XHRcdH1cbjcyODU6XHRcdFx0bGVuIC09IGJ5dGVzO1xuNzI4NjpcdFx0XHRidWYgJiM0Mzs9IGJ5dGVzO1xuNzI4NzpcdFx0XHRhZGRyICYjNDM7PSBieXRlcztcbjcyODg6XHRcdH1cbjcyODk6XHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuNzI5MDpcdFxuNzI5MTpcdFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XG43MjkyOlx0fVxuNzI5MzpcdFxuNzI5NDpcdC8qKlxuNzI5NTpcdCAqIGFjY2Vzc19yZW1vdGVfdm0gLSBhY2Nlc3MgYW5vdGhlciBwcm9jZXNzJiMzOTsgYWRkcmVzcyBzcGFjZVxuNzI5NjpcdCAqIEBtbTpcdFx0dGhlIG1tX3N0cnVjdCBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2VcbjcyOTc6XHQgKiBAYWRkcjpcdHN0YXJ0IGFkZHJlc3MgdG8gYWNjZXNzXG43Mjk4Olx0ICogQGJ1ZjpcdHNvdXJjZSBvciBkZXN0aW5hdGlvbiBidWZmZXJcbjcyOTk6XHQgKiBAbGVuOlx0bnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJlbW90ZSBWTSBBY2Nlc3MgTWVjaGFuaXNtcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB0aGUgZnVuY3Rpb24gYF9fYWNjZXNzX3JlbW90ZV92bWAgaXMgYXQgdGhlIGhlYXJ0IG9mIHJlbW90ZSBWTSBhY2Nlc3MsIGFuZCBpdCYjMzk7cyBiZWluZyBjYWxsZWQgYnkgYSB2YXJpZXR5IG9mIG1ldGhvZHM6IGBhY2Nlc3NfcmVtb3RlX3ZtYCBpdHNlbGYsIGBhY2Nlc3NfcHJvY2Vzc192bWAsIGBwdHJhY2VgLCByZWFkaW5nIGRpcmVjdGx5IGZyb20gYC9wcm9jLyRwaWQvbWVtYCwgYW5kIHNvIG9uLgoKVGhlIGNyaXRpY2FsIHBvaW50IGlzIGhvdyB0aGlzIGFjY2VzcyBiZWhhdmVzIHdoZW4gaXQgdG91Y2hlcyBhIFZpcnR1YWwgTWVtb3J5IEFyZWEgKFZNQSkgdGhhdCBoYXMgYSBzcGVjaWZpYyBgLmFjY2Vzc2AgbWV0aG9kIGFzc2lnbmVkIHRvIGl0LiAgVGhhdCBpbmNsdWRlcyBhcmVhcyBsaWtlIGAvZGV2L21lbWAsIG1lbW9yeSBtYXBwZWQgUENJIGRldmljZXMsIFVzZXIgSS9PIChVSU8pIHJlZ2lvbnMsIGFuZCBwb3RlbnRpYWxseSB0aG9zZSBoYW5kbGVkIGJ5IGBnZW5lcmljX2FjY2Vzc19waHlzYC4gSW4gdGhlc2UgY2FzZXMsIHRoZSBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgZnVuY3Rpb24sIG9yIHRoZSBWTUHigJlzIGB2bV9vcHMtJmd0O2FjY2Vzc2AgZnVuY3Rpb24gaXMgZXhlY3V0ZWQuCgpTaW5jZSBJJiMzOTttIHdvcmtpbmcgd2l0aCBhbiBBTUQ2NCBzeXN0ZW0sIGFuZCBhbHNvIGF3YXJlIG9mIG90aGVyIGFyY2hpdGVjdHVyZXMsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcXVpY2tseTogRG9lcyB0aGUgYXJjaGl0ZWN0dXJlIGluIHF1ZXN0aW9uICphY3R1YWxseSogZGVmaW5lIGBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RgPyAgVGhpcyBpcyBhbiBpbXBvcnRhbnQgZGV0YWlsLCBhcyBpdCBwbGF5cyBhIHJvbGUgaW4gcHJvdGVjdGVkIEkvTyByZW1hcHBpbmcuIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZGVmaW5pdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEFWRV9JT1JFTUFQX1BST1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9mZWF0dXJlcy92bS9pb3JlbWFwX3Byb3QvYXJjaC1zdXBwb3J0LnR4dC0yLSMgRmVhdHVyZSBuYW1lOiAgICAgICAgICBpb3JlbWFwX3Byb3RcbkRvY3VtZW50YXRpb24vZmVhdHVyZXMvdm0vaW9yZW1hcF9wcm90L2FyY2gtc3VwcG9ydC50eHQ6MzojICAgICAgICAgS2NvbmZpZzogICAgICAgSEFWRV9JT1JFTUFQX1BST1RcbkRvY3VtZW50YXRpb24vZmVhdHVyZXMvdm0vaW9yZW1hcF9wcm90L2FyY2gtc3VwcG9ydC50eHQtNC0jICAgICAgICAgZGVzY3JpcHRpb246ICAgYXJjaCBoYXMgaW9yZW1hcF9wcm90KClcbi0tXG5hcmNoL0tjb25maWc9MjcyPWNvbmZpZyBVU0VSX1JFVFVSTl9OT1RJRklFUlxuLS1cbmFyY2gvS2NvbmZpZy0yNzgtXG5hcmNoL0tjb25maWc6Mjc5OmNvbmZpZyBIQVZFX0lPUkVNQVBfUFJPVFxuYXJjaC9LY29uZmlnLTI4MC1cdGJvb2xcbi0tXG5hcmNoL2FyYy9LY29uZmlnPTY9Y29uZmlnIEFSQ1xuLS1cbmFyY2gvYXJjL0tjb25maWctMzgtXHRzZWxlY3QgSEFWRV9ERUJVR19LTUVNTEVBS1xuYXJjaC9hcmMvS2NvbmZpZzozOTpcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVFxuYXJjaC9hcmMvS2NvbmZpZy00MC1cdHNlbGVjdCBIQVZFX0tFUk5FTF9HWklQXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTIxMC1cdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlQgaWYgUEVSRl9FVkVOVFNcbmFyY2gvYXJtNjQvS2NvbmZpZzoyMTE6XHRzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1RcbmFyY2gvYXJtNjQvS2NvbmZpZy0yMTItXHRzZWxlY3QgSEFWRV9JUlFfVElNRV9BQ0NPVU5USU5HXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE1Ny1cdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlQgaWYgUEVSRl9FVkVOVFNcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6MTU4Olx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE1OS1cdHNlbGVjdCBIQVZFX0lSUV9FWElUX09OX0lSUV9TVEFDS1xuLS1cbmFyY2gvbWlwcy9LY29uZmlnPTI9Y29uZmlnIE1JUFNcbi0tXG5hcmNoL21pcHMvS2NvbmZpZy03Ni1cdHNlbGVjdCBIQVZFX0dDQ19QTFVHSU5TXG5hcmNoL21pcHMvS2NvbmZpZzo3NzpcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVFxuYXJjaC9taXBzL0tjb25maWctNzgtXHRzZWxlY3QgSEFWRV9JUlFfRVhJVF9PTl9JUlFfU1RBQ0tcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTI2MS1cdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlRcdFx0aWYgUEVSRl9FVkVOVFMgXHUwMDI2XHUwMDI2IChQUENfQk9PSzNTIHx8IFBQQ184eHgpXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoyNjI6XHRzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1RcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTI2My1cdHNlbGVjdCBIQVZFX0lSUV9USU1FX0FDQ09VTlRJTkdcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTExOC1cdHNlbGVjdCBHRU5FUklDX0lPUkVNQVAgaWYgTU1VXG5hcmNoL3Jpc2N2L0tjb25maWc6MTE5Olx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UIGlmIE1NVVxuYXJjaC9yaXNjdi9LY29uZmlnLTEyMC1cdHNlbGVjdCBHRU5FUklDX0lSUV9JUEkgaWYgU01QXG4tLVxuYXJjaC9zMzkwL0tjb25maWc9Nzg9Y29uZmlnIFMzOTBcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy0yMjUtXHRzZWxlY3QgSEFWRV9HQ0NfUExVR0lOU1xuYXJjaC9zMzkwL0tjb25maWc6MjI2Olx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UIGlmIFBDSVxuYXJjaC9zMzkwL0tjb25maWctMjI3LVx0c2VsZWN0IEhBVkVfS0VSTkVMX0JaSVAyXG4tLVxuYXJjaC9zaC9LY29uZmlnPTI9Y29uZmlnIFNVUEVSSFxuLS1cbmFyY2gvc2gvS2NvbmZpZy00My1cdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlRcbmFyY2gvc2gvS2NvbmZpZzo0NDpcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVCBpZiBNTVUgXHUwMDI2XHUwMDI2ICFYMlRMQlxuYXJjaC9zaC9LY29uZmlnLTQ1LVx0c2VsZWN0IEhBVkVfS0VSTkVMX0JaSVAyXG4tLVxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yNTEtXHRzZWxlY3QgSEFWRV9IV19CUkVBS1BPSU5UXG5hcmNoL3g4Ni9LY29uZmlnOjI1MjpcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVFxuYXJjaC94ODYvS2NvbmZpZy0yNTMtXHRzZWxlY3QgSEFWRV9JUlFfRVhJVF9PTl9JUlFfU1RBQ0tcdGlmIFg4Nl82NFxuLS1cbmRyaXZlcnMvY2R4L2NkeC5jPTY2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGNkeF9waHlzX3ZtX29wcyA9IHtcbmRyaXZlcnMvY2R4L2NkeC5jOjY2MzojaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL2NkeC9jZHguYy02NjQtXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcbi0tXG5kcml2ZXJzL2NoYXIvbWVtLmM9MzE5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF9tZW1fb3BzID0ge1xuZHJpdmVycy9jaGFyL21lbS5jOjMyMDojaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL2NoYXIvbWVtLmMtMzIxLVx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXNcbi0tXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmM9ODA1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYWZ1X3ZtYV9vcHMgPSB7XG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmM6ODA2OiNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYy04MDctXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcbi0tXG5kcml2ZXJzL3BjaS9tbWFwLmM9MTg9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBwY2lfcGh5c192bV9vcHMgPSB7XG5kcml2ZXJzL3BjaS9tbWFwLmM6MTk6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy9wY2kvbW1hcC5jLTIwLVx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXG4tLVxuZHJpdmVycy91aW8vdWlvLmM9NzM2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdWlvX3BoeXNpY2FsX3ZtX29wcyA9IHtcbmRyaXZlcnMvdWlvL3Vpby5jOjczNzojaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL3Vpby91aW8uYy03MzgtXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcbi0tXG5tbS9tZW1vcnkuYz03MTQxPUVYUE9SVF9TWU1CT0xfR1BMKGZvbGxvd19wZm5tYXBfZW5kKTtcbm1tL21lbW9yeS5jLTcxNDItXG5tbS9tZW1vcnkuYzo3MTQzOiNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Rcbm1tL21lbW9yeS5jLTcxNDQtLyoqXG4tLVxubW0vbWVtb3J5LmM9NzIxNT1zdGF0aWMgaW50IF9fYWNjZXNzX3JlbW90ZV92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL21lbW9yeS5jLTcyNTgtXHRcdFx0Ynl0ZXMgPSAwO1xubW0vbWVtb3J5LmM6NzI1OTojaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5tbS9tZW1vcnkuYy03MjYwLVx0XHRcdGlmICh2bWEtXHUwMDNldm1fb3BzIFx1MDAyNlx1MDAyNiB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2Vzcylcbi0tXG5tbS9tZW1vcnkuYz03MzQwPXN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1vcnkuYy03MzY5LVx0XHRcdCAqIFRyZWF0IGFzIGEgdG90YWwgZmFpbHVyZSBmb3Igbm93IHVudGlsIHdlIGRlY2lkZSBob3dcbm1tL21lbW9yeS5jOjczNzA6XHRcdFx0ICogdG8gaGFuZGxlIHRoZSBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgY2FzZSBhbmRcbm1tL21lbW9yeS5jLTczNzEtXHRcdFx0ICogc3RhY2sgZXhwYW5zaW9uLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQxNwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDgwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldDogTU0vTWVtb3J5LmMgLSBWdWxuZXJhYmlsaXR5IEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gT24geDg2XzY0LCBgSEFWRV9JT1JFTUFQX1BST1RgIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQuIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsIHRvIGtlZXAgaW4gbWluZCwgcmlnaHQ/IE5vdywgdGhlIGNvcmUgb2YgdGhpcyBpbnZlc3RpZ2F0aW9uIGZvY3VzZXMgb24gdGhlc2UgY29kZSBjaGFuZ2VzIEkgc2VlIGluIGBnZW5lcmljX2FjY2Vzc19waHlzYCBhbmQgYF9fYWNjZXNzX3JlbW90ZV92bWAsIGJvdGggaW4gYG1tL21lbW9yeS5jYC4KCkZpcnN0LCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2Ag4oCTIGl0JiMzOTtzIGJlZW4gbW9kaWZpZWQgaW4gdHdvIHNpZ25pZmljYW50IHdheXMuIFRoZSBsZW5ndGggY2FsY3VsYXRpb25zIGFuZCB0aGUgYGlvcmVtYXBfcHJvdGAgY2FsbCBoYXZlIGJlZW4gdG91Y2hlZC4gVGhlcmUgaXMgYSBgbWluX3RgIGNhbGwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBpcyB0cnlpbmcgdG8gc2ltcGxpZnkgdGhlIGlvcmVtYXBwaW5nLCBidXQgaXQgaW50cm9kdWNlcyBhIHN1YnRsZSBzaGlmdCB0aGF0IGNvdWxkIGJlIGltcG9ydGFudC4KClRoZW4gdGhlcmUmIzM5O3MgYF9fYWNjZXNzX3JlbW90ZV92bWAuIFRoZSBpbnRlcmVzdGluZyBjaGFuZ2UgaGVyZSBpbnZvbHZlcyBsaW1pdGluZyB0aGUgbGVuZ3RoIGluIGB2bWEtJmd0O3ZtX29wcy0mZ3Q7YWNjZXNzYC4gVGhlIHVzZSBvZiBgbWluX3RgIGFnYWluIGlzIGludGVyZXN0aW5nLCBlc3BlY2lhbGx5IHdoZW4gY29tYmluZWQgd2l0aCB0aGUgb2Zmc2V0IGNhbGN1bGF0aW9uLiBUaGlzIHBvdGVudGlhbGx5IGludHJvZHVjZXMgc3VidGxlIGludGVnZXIgb3ZlcmZsb3csIG91dC1vZi1ib3VuZHMsIG9yIGxlbmd0aCBjYWxjdWxhdGlvbiBpc3N1ZXMuCgpSZWFjaGFiaWxpdHk/IFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb2RlIGFjY2Vzc2libGUgdmlhIGBwdHJhY2UoUFRSQUNFX1BFRUtEQVRBL1BUUkFDRV9QT0tFREFUQSlgIG9yIGAvcHJvYy9waWQvbWVtYC4gVGhpbmsgYC9kZXYvbWVtYCwgcGh5c2ljYWwgVk1BcywgUEZOTUFQIFZNQXMg4oCTIHRoZXNlIGFyZSBhbGwgcmVhZGlseSBhdmFpbGFibGUgYXR0YWNrIHN1cmZhY2VzLiBUaGlzIG1ha2VzIGl0IGFuIGF0dHJhY3RpdmUgdGFyZ2V0LgoKSXMgaXQgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlIGZhY3QgdGhhdCB0aGUgY2hhbmdlcyBhZmZlY3QgcmVtb3RlIFZNIGFjY2VzcyBhbmQgcGh5c2ljYWwgSS9PIG1lbW9yeSBtYXBwaW5nLCB3aXRoIGxlbmd0aCBjYWxjdWxhdGlvbnMsIHBhZ2UgYm91bmRhcnkgY3Jvc3NpbmdzLCBhbmQgdHlwZSBjYXN0cywgc2NyZWFtcyAmIzM0O2Z1enogbWUuJiMzNDsgU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBjYW4gaW50cm9kdWNlIHN1YnRsZSBidWdzLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBzeW1ib2xzLiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgaXMgZGlyZWN0bHkgbW9kaWZpZWQsIGFuZCBgX19hY2Nlc3NfcmVtb3RlX3ZtYCAoc3RhdGljLCBzbyBhIGxpdHRsZSBsZXNzIHZpc2libGUpIGlzIHVzZWQuIEl0cyBjYWxsZXJzIGFyZSBgYWNjZXNzX3JlbW90ZV92bWAgYW5kIGBhY2Nlc3NfcHJvY2Vzc192bWAuIEFsdGhvdWdoIGBnZW5lcmljX2FjY2Vzc19waHlzYCBhcHBlYXJzIHRvIGJlIHNwZWNpZmljIHRvIGlvbWVtL3Bmbm1hcCBWTUFzLCB0aGF0IHN0aWxsIG1ha2VzIGl0IHF1aXRlIGFjY2Vzc2libGUuCgpObyB1YmlxdWl0b3VzIGNhbGxzIGVpdGhlci4gVGhpcyBhbHNvIG1lYW5zLCBsZXNzIHBsYWNlcyB0byBpbmplY3QgYnVncy4KCkNvbmZpZ3VyYXRpb24gZmxhZ3M/IGBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RgIGlzIGhhbmRsZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSAoeDg2KSwgYnV0IHdlIHNob3VsZCBjaGVjayBpZiBhbnkgZHJpdmVyIGlzIHJlcXVpcmVkIGZvciBWTUEgY3JlYXRpb24gKGUuZy4sIGBDT05GSUdfREVWTUVNYCwgYENPTkZJR19VSU9gKSwgYnV0IGZyb20gd2hhdCBJIHJlbWVtYmVyLCBzdGFuZGFyZCBjb25maWd1cmF0aW9ucyBzaG91bGQgYWxyZWFkeSBlbmFibGUgdGhpcy4gV2Ugc2hvdWxkIGNoZWNrIHRoZXNlLCB0aG91Z2guIEFsc28sIGxldCYjMzk7cyBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGxpa2UgYERFVk1FTWAuCgpUaGlzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBjb2RlIGNoYW5nZXMsIHRoZSByZWFjaGFiaWxpdHksIGFuZCB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgYnVncyBhbGwgcG9pbnQgdG8gYSB3b3J0aHdoaWxlIHRhcmdldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERFVk1FTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NoYXIvS2NvbmZpZz0yNDk9Y29uZmlnIE5TQ19HUElPXG4tLVxuZHJpdmVycy9jaGFyL0tjb25maWctMjU4LVxuZHJpdmVycy9jaGFyL0tjb25maWc6MjU5OmNvbmZpZyBERVZNRU1cbmRyaXZlcnMvY2hhci9LY29uZmlnLTI2MC1cdGJvb2wgXCYjMzQ7L2Rldi9tZW0gdmlydHVhbCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkzMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgdXNhZ2Ugb2YgYGdlbmVyaWNfYWNjZXNzX3BoeXNgLiBGaXJzdCwgbGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IHRoZSBjb2RlYmFzZSB0byBzZWUgd2hlcmUgaXQmIzM5O3MgY3VycmVudGx5IHV0aWxpemVkIG9yIHJlZmVyZW5jZWQuIEkmIzM5O3ZlIGZvdW5kIGl0JiMzOTtzIHVzZWQgaW4gdGhlc2UgZHJpdmVyczogYGRyaXZlcnMvY2hhci9tZW0uY2AgKGBERVZNRU1gKSwgYGRyaXZlcnMvdWlvL3Vpby5jYCAoYFVJT2ApLCBgZHJpdmVycy9wY2kvbW1hcC5jYCAoYFBDSWApLCBgZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jYCAoYEZQR0FfREZMX0FGVWApLCBhbmQgYGRyaXZlcnMvY2R4L2NkeC5jYCAoYENEWF9CVVNgKS4gU2VlbXMgbGlrZSBhIGRlY2VudCBzcHJlYWQuCgpOb3csIHdoZXJlIGlzIGBnZW5lcmljX2FjY2Vzc19waHlzYCBhY3R1YWxseSBkZWZpbmVkPyBJdCYjMzk7cyBzaXR0aW5nIGluIGBtbS9tZW1vcnkuY2AuIEdpdmVuIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgYWNjZXNzLCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBJIGFsc28gbm90ZWQgdGhhdCBgYXJjaC94ODYvS2NvbmZpZ2AgaGFzIGBIQVZFX0lPUkVNQVBfUFJPVGAgc2VsZWN0ZWQsIHdoaWNoIG1pZ2h0IGJlIHJlbGV2YW50IGxhdGVyIG9uLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGFuYWx5c2lzLiBUaGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBmbGFnIGlzIHNldCwgYW5kIHRoZSAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OyBsaXN0IGluY2x1ZGVzICYjMzQ7REVWTUVNLiYjMzQ7IFNlZW1zIGxpa2Ugd2UmIzM5O3JlIGludGVyZXN0ZWQgaW4gdGhlIGBERVZNRU1gIGNvbmZpZ3VyYXRpb24gYXMgYSBzdGFydGluZyBwb2ludC4gVGhlICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsgbGlzdCBoYXMgZmxhZ2dlZCBib3RoIGBnZW5lcmljX2FjY2Vzc19waHlzYCBhbmQgYF9fYWNjZXNzX3JlbW90ZV92bWAsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZXkgaW50ZXJyZWxhdGUuCgpOZXh0LCBJIHdhbnQgdG8gY2xhcmlmeSBpZiBgX19hY2Nlc3NfcmVtb3RlX3ZtYCBpcyB2aXNpYmxlIGluIHRoZSBzeW1ib2wgdGFibGUgb3IgaWYgaXQmIzM5O3Mgc3RhdGljLiBMb29rcyBsaWtlIGl0JiMzOTtzIGRlZmluZWQgaW4gYG1tL21lbW9yeS5jYDogYHN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKC4uLilgIGFuZCBgaW50IGFjY2Vzc19yZW1vdGVfdm0oLi4uKWAuIEFuZCBhbHNvIGBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyguLi4pYC4gU28sIGl0JiMzOTtzIGEgc3RhdGljIGlubGluZSwgd2hpY2ggbWVhbnMgaXQgbGlrZWx5IGhhcyBzb21lIHNjb3BlIGxpbWl0YXRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIExldCYjMzk7cyBub3QgZm9yZ2V0IGFib3V0IHRoZSByZWxhdGVkLCB2aXNpYmxlLCBgYWNjZXNzX3JlbW90ZV92bWAuCgpGaW5hbGx5LCBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBsaW5lcyA3MjkwLTczMzAgaW4gYG1tL21lbW9yeS5jYCDigJMgdGhhdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhlc2UgZnVuY3Rpb25zIHJlc2lkZXMuIEdvdCBpdC4gVGhpcyB3aWxsIGJlIG15IG5leHQgc3RlcCwgSSBuZWVkIHRvIGdvIG92ZXIgdGhlIGxvZ2ljIHRvIHNlZSBob3cgaXQgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcyOTA6XHRcbjcyOTE6XHRcdHJldHVybiBidWYgLSBvbGRfYnVmO1xuNzI5MjpcdH1cbjcyOTM6XHRcbjcyOTQ6XHQvKipcbjcyOTU6XHQgKiBhY2Nlc3NfcmVtb3RlX3ZtIC0gYWNjZXNzIGFub3RoZXIgcHJvY2VzcyYjMzk7IGFkZHJlc3Mgc3BhY2VcbjcyOTY6XHQgKiBAbW06XHRcdHRoZSBtbV9zdHJ1Y3Qgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlXG43Mjk3Olx0ICogQGFkZHI6XHRzdGFydCBhZGRyZXNzIHRvIGFjY2Vzc1xuNzI5ODpcdCAqIEBidWY6XHRzb3VyY2Ugb3IgZGVzdGluYXRpb24gYnVmZmVyXG43Mjk5Olx0ICogQGxlbjpcdG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlclxuNzMwMDpcdCAqIEBndXBfZmxhZ3M6XHRmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91clxuNzMwMTpcdCAqXG43MzAyOlx0ICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gQG1tLlxuNzMwMzpcdCAqXG43MzA0Olx0ICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gc291cmNlIHRvIGRlc3RpbmF0aW9uLlxuNzMwNTpcdCAqL1xuNzMwNjpcdGludCBhY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG43MzA3Olx0XHRcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbjczMDg6XHR7XG43MzA5Olx0XHRyZXR1cm4gX19hY2Nlc3NfcmVtb3RlX3ZtKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbjczMTA6XHR9XG43MzExOlx0XG43MzEyOlx0LypcbjczMTM6XHQgKiBBY2Nlc3MgYW5vdGhlciBwcm9jZXNzJiMzOTsgYWRkcmVzcyBzcGFjZS5cbjczMTQ6XHQgKiBTb3VyY2UvdGFyZ2V0IGJ1ZmZlciBtdXN0IGJlIGtlcm5lbCBzcGFjZSxcbjczMTU6XHQgKiBEbyBub3Qgd2FsayB0aGUgcGFnZSB0YWJsZSBkaXJlY3RseSwgdXNlIGdldF91c2VyX3BhZ2VzXG43MzE2Olx0ICovXG43MzE3Olx0aW50IGFjY2Vzc19wcm9jZXNzX3ZtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG43MzE4Olx0XHRcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbjczMTk6XHR7XG43MzIwOlx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbjczMjE6XHRcdGludCByZXQ7XG43MzIyOlx0XG43MzIzOlx0XHRtbSA9IGdldF90YXNrX21tKHRzayk7XG43MzI0Olx0XHRpZiAoIW1tKVxuNzMyNTpcdFx0XHRyZXR1cm4gMDtcbjczMjY6XHRcbjczMjc6XHRcdHJldCA9IF9fYWNjZXNzX3JlbW90ZV92bShtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7XG43MzI4Olx0XG43MzI5Olx0XHRtbXB1dChtbSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzg5CgkJCQkJCQlvdXRwdXQ6IDE3MwoJCQkJCQkJdGhvdWdodHM6IDEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEZvY3VzKioKCk9rYXksIHNvIEkmIzM5O3ZlIHplcm9lZCBpbiBvbiBzb21lIHJlYWxseSBwcm9taXNpbmcgc3ltYm9scyBoZXJlOiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AsIGBhY2Nlc3NfcmVtb3RlX3ZtYCwgYW5kIGBhY2Nlc3NfcHJvY2Vzc192bWAuIFRob3NlIGZlZWwgbGlrZSBrZXkgYXJlYXMgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIHRocmVlIGFyZSBsb2NrZWQgaW4gYXMgbXkgZm9jdXMuCgpCZWZvcmUgSSBwdXNoIHRoaW5ncyBmdXJ0aGVyLCBJIG5lZWQgdG8gZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgb2YgbXkgcmVhc29uaW5nIGFuZCB0aGUgcGFyYW1ldGVycyB0aGF0IEkmIzM5O20gdXNpbmcgYmVmb3JlIGNvbW1pdHRpbmcgdG8gdGhlIG5leHQgc3RlcCwgd2hpY2ggd2lsbCBiZSBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuCgpMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gY2xlYXIgaGVyZToKCiogICBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgc2V0IHRvIGB0cnVlYCDigJMgdGhhdCBmZWVscyByaWdodCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24uCiogICBgRm9jdXNTeW1ib2xzYCBpcyBjb3JyZWN0bHkgcG9wdWxhdGVkIHdpdGggdGhlIHRocmVlIHN5bWJvbHM6IGBnZW5lcmljX2FjY2Vzc19waHlzYCwgYGFjY2Vzc19yZW1vdGVfdm1gLCBgYWNjZXNzX3Byb2Nlc3Nfdm1gLiBFeGNlbGxlbnQhCiogICBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGNvbnRhaW4gYERFVk1FTWAg4oCTIHllcywgdGhhdCBhbGlnbnMgd2l0aCB0aGUgY3VycmVudCBnb2Fscy4KKiAgIFRoZSBgUmVhc29uaW5nYCBuZWVkcyB0byBiZSBhIGNvbmNpc2UgYW5kIGNsZWFyIGV4cGxhbmF0aW9uIG9mIHRoZSB2ZXJkaWN0LiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgaXMgdGhlIGNhc2UuCgpXaXRoIGFsbCB0aGF0IGluIHBsYWNlLCBJIGZlZWwgY29uZmlkZW50IGFib3V0IGNhbGxpbmcgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVk1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbmVyaWNfYWNjZXNzX3BoeXMmIzM0OywKICAgICYjMzQ7YWNjZXNzX3JlbW90ZV92bSYjMzQ7LAogICAgJiMzNDthY2Nlc3NfcHJvY2Vzc192bSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsZW5ndGggY2FsY3VsYXRpb24sIGJvdW5kcyBjaGVja2luZywgYW5kIHBoeXNpY2FsIGFkZHJlc3MgdHlwZWNhc3RpbmcgaW4gZ2VuZXJpY19hY2Nlc3NfcGh5cygpIGFzIHdlbGwgYXMgdGhlIGxlbmd0aCBjbGFtcGluZyBwYXNzZWQgdG8gdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VhY2Nlc3MoKSBpbiBfX2FjY2Vzc19yZW1vdGVfdm0oKS4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcHRyYWNlIChQVFJBQ0VfUEVFS0RBVEEvUE9LRURBVEEpIGFuZCAvcHJvYy8kcGlkL21lbSBhY2Nlc3NlcyB0byBWTV9JTy9WTV9QRk5NQVAgVk1BcyAoc3VjaCBhcyAvZGV2L21lbSkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgYm91bmRhcnkgYW5kIHBhZ2UtY3Jvc3NpbmcgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVWTUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VuZXJpY19hY2Nlc3NfcGh5cyYjMzQ7LAogICAgJiMzNDthY2Nlc3NfcmVtb3RlX3ZtJiMzNDssCiAgICAmIzM0O2FjY2Vzc19wcm9jZXNzX3ZtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxlbmd0aCBjYWxjdWxhdGlvbiwgYm91bmRzIGNoZWNraW5nLCBhbmQgcGh5c2ljYWwgYWRkcmVzcyB0eXBlY2FzdGluZyBpbiBnZW5lcmljX2FjY2Vzc19waHlzKCkgYXMgd2VsbCBhcyB0aGUgbGVuZ3RoIGNsYW1waW5nIHBhc3NlZCB0byB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2VzcygpIGluIF9fYWNjZXNzX3JlbW90ZV92bSgpLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBwdHJhY2UgKFBUUkFDRV9QRUVLREFUQS9QT0tFREFUQSkgYW5kIC9wcm9jLyRwaWQvbWVtIGFjY2Vzc2VzIHRvIFZNX0lPL1ZNX1BGTk1BUCBWTUFzIChzdWNoIGFzIC9kZXYvbWVtKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBib3VuZGFyeSBhbmQgcGFnZS1jcm9zc2luZyBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGdlbmVyaWNfYWNjZXNzX3BoeXMoKWAgYW5kIGBfX2FjY2Vzc19yZW1vdGVfdm0oKWAgaW4gYG1tL21lbW9yeS5jYCB0byBjbGFtcCBhY2Nlc3MgbGVuZ3RocyB0byBwYWdlIGJvdW5kYXJpZXMgKGBQQUdFX1NJWkUgLSBvZmZzZXRgKSwgbWFwIG9ubHkgYSBzaW5nbGUgcGFnZSB2aWEgYGlvcmVtYXBfcHJvdCgpYCwgY2FzdCBgYXJncy5wZm5gIHRvIGByZXNvdXJjZV9zaXplX3RgIGJlZm9yZSBzaGlmdGluZywgYW5kIHJldHVybiBlYXJseSB3aGVuIGBsZW4gXHUwMDNjPSAwYC5cblxuVGhlc2UgY2hhbmdlcyBmaXggYm91bmRhcnkgY2FsY3VsYXRpb25zIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAvIGFyaXRobWV0aWMgdHJ1bmNhdGlvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGluIHRoaXMgY29kZSBwYXRoIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NmZlMzk2MWRiZGE2MWFlMGIyNTI4YzZhZWFhNGI0ZDc1OTY5YzJlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAxNToxOTo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggOGIwYzJjNzM1ZDNkZS4uMDkzOTBlNTE0MzJmMiAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTcxNjQsNiAmIzQzOzcxNjQsMTEgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlib29sIHdyaXRhYmxlOwogCXN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSBhZGRyIH07CiAKJiM0MzsJaWYgKGxlbiAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWxlbiA9IG1pbl90KGludCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXQpOwomIzQzOwogcmV0cnk6CiAJaWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoJmFtcDthcmdzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03MTc1LDcgJiM0Mzs3MTgwLDcgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlpZiAoKHdyaXRlICZhbXA7IEZPTExfV1JJVEUpICZhbXA7JmFtcDsgIXdyaXRhYmxlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9BTElHTihsZW4gJiM0Mzsgb2Zmc2V0KSwgcHJvdCk7CiYjNDM7CW1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9TSVpFLCBwcm90KTsKIAlpZiAoIW1hZGRyKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNzE4Myw3ICYjNDM7NzE4OCw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCWdvdG8gb3V0X3VubWFwOwogCiAJaWYgKChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoYXJncy5wZ3Byb3QpKSB8fAotCSAgICAocGh5c19hZGRyICE9IChhcmdzLnBmbiAmbHQ7Jmx0OyBQQUdFX1NISUZUKSkgfHwKJiM0MzsJICAgIChwaHlzX2FkZHIgIT0gKChyZXNvdXJjZV9zaXplX3QpYXJncy5wZm4gJmx0OyZsdDsgUEFHRV9TSElGVCkpIHx8CiAJICAgICh3cml0YWJsZSAhPSBhcmdzLndyaXRhYmxlKSkgewogCQlmb2xsb3dfcGZubWFwX2VuZCgmYW1wO2FyZ3MpOwogCQlpb3VubWFwKG1hZGRyKTsKQEAgLTcyNTQsNyAmIzQzOzcyNTksOCBAQCBzdGF0aWMgaW50IF9fYWNjZXNzX3JlbW90ZV92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVAogCQkJaWYgKHZtYS0mZ3Q7dm1fb3BzICZhbXA7JmFtcDsgdm1hLSZndDt2bV9vcHMtJmd0O2FjY2VzcykKIAkJCQlieXRlcyA9IHZtYS0mZ3Q7dm1fb3BzLSZndDthY2Nlc3Modm1hLCBhZGRyLCBidWYsCi0JCQkJCQkJICAgIGxlbiwgd3JpdGUpOwomIzQzOwkJCQkJCQkgICAgbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKGFkZHIpKSwKJiM0MzsJCQkJCQkJICAgIHdyaXRlKTsKICNlbmRpZgogCQkJaWYgKGJ5dGVzICZsdDs9IDApCiAJCQkJYnJlYWs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IFN1YnN5c3RlbSBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggaXMgZm9jdXNpbmcgb24gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWEsIHNwZWNpZmljYWxseSBgbW0vbWVtb3J5LmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGF0IGZpbGUgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBUaGUgYXJlYSB0aGF0IGludGVyZXN0cyBtZSB0aGUgbW9zdCBpcyBnb2luZyB0byBiZSBjZW50ZXJlZCBhcm91bmQgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGFuZCBgX19hY2Nlc3NfcmVtb3RlX3ZtYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjb3JlIHRvIGhvdyB3ZSBoYW5kbGUgcGh5c2ljYWwgbWVtb3J5IGFjY2VzcywgYW5kIEkgc3VzcGVjdCB0aGUgY2hhbmdlcyB3aWxsIGJlIGFyb3VuZCB0aG9zZSBmdW5jdGlvbnMsIG9yIHJlbGF0ZWQgb25lcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtb2RpZmljYXRpb24gYWZmZWN0cyB0aG9zZSBmdW5jdGlvbnMsIGFuZCB3aGF0IGltcGFjdCB0aGF0IGhhcyBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIEkmIzM5O2xsIHJlYWQgYXJvdW5kIHRob3NlIGZ1bmN0aW9ucyBpbiBgbW0vbWVtb3J5LmNgIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgYW5kIGNvbnRleHQgb2YgdGhlIGNoYW5nZXMuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGxvdy1sZXZlbCBhY2Nlc3MgbWVjaGFuaXNtcyBhcmUgYmVpbmcgYWx0ZXJlZCBhbmQgd2h5LCBlc3BlY2lhbGx5IGhvdyB0aGlzIGFmZmVjdHMgcmVtb3RlIGFjY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcxNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcxNTU6XHQgKi9cbjcxNTY6XHRpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuNzE1NzpcdFx0XHRcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKVxuNzE1ODpcdHtcbjcxNTk6XHRcdHJlc291cmNlX3NpemVfdCBwaHlzX2FkZHI7XG43MTYwOlx0XHRwZ3Byb3RfdCBwcm90ID0gX19wZ3Byb3QoMCk7XG43MTYxOlx0XHR2b2lkIF9faW9tZW0gKm1hZGRyO1xuNzE2MjpcdFx0aW50IG9mZnNldCA9IG9mZnNldF9pbl9wYWdlKGFkZHIpO1xuNzE2MzpcdFx0aW50IHJldCA9IC1FSU5WQUw7XG43MTY0Olx0XHRib29sIHdyaXRhYmxlO1xuNzE2NTpcdFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGFkZHIgfTtcbjcxNjY6XHRcbjcxNjc6XHRcdGlmIChsZW4gXHUwMDNjPSAwKVxuNzE2ODpcdFx0XHRyZXR1cm4gMDtcbjcxNjk6XHRcbjcxNzA6XHRcdGxlbiA9IG1pbl90KGludCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXQpO1xuNzE3MTpcdFxuNzE3MjpcdHJldHJ5OlxuNzE3MzpcdFx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncykpXG43MTc0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzE3NTpcdFx0cHJvdCA9IGFyZ3MucGdwcm90O1xuNzE3NjpcdFx0cGh5c19hZGRyID0gKHJlc291cmNlX3NpemVfdClhcmdzLnBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbjcxNzc6XHRcdHdyaXRhYmxlID0gYXJncy53cml0YWJsZTtcbjcxNzg6XHRcdGZvbGxvd19wZm5tYXBfZW5kKFx1MDAyNmFyZ3MpO1xuNzE3OTpcdFxuNzE4MDpcdFx0aWYgKCh3cml0ZSBcdTAwMjYgRk9MTF9XUklURSkgXHUwMDI2XHUwMDI2ICF3cml0YWJsZSlcbjcxODE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43MTgyOlx0XG43MTgzOlx0XHRtYWRkciA9IGlvcmVtYXBfcHJvdChwaHlzX2FkZHIsIFBBR0VfU0laRSwgcHJvdCk7XG43MTg0Olx0XHRpZiAoIW1hZGRyKVxuNzE4NTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjcxODY6XHRcbjcxODc6XHRcdGlmIChmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpKVxuNzE4ODpcdFx0XHRnb3RvIG91dF91bm1hcDtcbjcxODk6XHRcbjcxOTA6XHRcdGlmICgocGdwcm90X3ZhbChwcm90KSAhPSBwZ3Byb3RfdmFsKGFyZ3MucGdwcm90KSkgfHxcbjcxOTE6XHRcdCAgICAocGh5c19hZGRyICE9ICgocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSkgfHxcbjcxOTI6XHRcdCAgICAod3JpdGFibGUgIT0gYXJncy53cml0YWJsZSkpIHtcbjcxOTM6XHRcdFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG43MTk0Olx0XHRcdGlvdW5tYXAobWFkZHIpO1xuNzE5NTpcdFx0XHRnb3RvIHJldHJ5O1xuNzE5NjpcdFx0fVxuNzE5NzpcdFxuNzE5ODpcdFx0aWYgKHdyaXRlKVxuNzE5OTpcdFx0XHRtZW1jcHlfdG9pbyhtYWRkciAmIzQzOyBvZmZzZXQsIGJ1ZiwgbGVuKTtcbjcyMDA6XHRcdGVsc2VcbjcyMDE6XHRcdFx0bWVtY3B5X2Zyb21pbyhidWYsIG1hZGRyICYjNDM7IG9mZnNldCwgbGVuKTtcbjcyMDI6XHRcdHJldCA9IGxlbjtcbjcyMDM6XHRcdGZvbGxvd19wZm5tYXBfZW5kKFx1MDAyNmFyZ3MpO1xuNzIwNDpcdG91dF91bm1hcDpcbjcyMDU6XHRcdGlvdW5tYXAobWFkZHIpO1xuNzIwNjpcdFxuNzIwNzpcdFx0cmV0dXJuIHJldDtcbjcyMDg6XHR9XG43MjA5Olx0RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19hY2Nlc3NfcGh5cyk7XG43MjEwOlx0I2VuZGlmXG43MjExOlx0XG43MjEyOlx0LypcbjcyMTM6XHQgKiBBY2Nlc3MgYW5vdGhlciBwcm9jZXNzJiMzOTsgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cbjcyMTQ6XHQgKi9cbjcyMTU6XHRzdGF0aWMgaW50IF9fYWNjZXNzX3JlbW90ZV92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuNzIxNjpcdFx0XHRcdCAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbjcyMTc6XHR7XG43MjE4Olx0XHR2b2lkICpvbGRfYnVmID0gYnVmO1xuNzIxOTpcdFx0aW50IHdyaXRlID0gZ3VwX2ZsYWdzIFx1MDAyNiBGT0xMX1dSSVRFO1xuNzIyMDpcdFxuNzIyMTpcdFx0aWYgKG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKSlcbjcyMjI6XHRcdFx0cmV0dXJuIDA7XG43MjIzOlx0XG43MjI0Olx0XHQvKiBVbnRhZyB0aGUgYWRkcmVzcyBiZWZvcmUgbG9va2luZyB1cCB0aGUgVk1BICovXG43MjI1Olx0XHRhZGRyID0gdW50YWdnZWRfYWRkcl9yZW1vdGUobW0sIGFkZHIpO1xuNzIyNjpcdFxuNzIyNzpcdFx0LyogQXZvaWQgdHJpZ2dlcmluZyB0aGUgdGVtcG9yYXJ5IHdhcm5pbmcgaW4gX19nZXRfdXNlcl9wYWdlcyAqL1xuNzIyODpcdFx0aWYgKCF2bWFfbG9va3VwKG1tLCBhZGRyKSBcdTAwMjZcdTAwMjYgIWV4cGFuZF9zdGFjayhtbSwgYWRkcikpXG43MjI5Olx0XHRcdHJldHVybiAwO1xuNzIzMDpcdFxuNzIzMTpcdFx0LyogaWdub3JlIGVycm9ycywganVzdCBjaGVjayBob3cgbXVjaCB3YXMgc3VjY2Vzc2Z1bGx5IHRyYW5zZmVycmVkICovXG43MjMyOlx0XHR3aGlsZSAobGVuKSB7XG43MjMzOlx0XHRcdGludCBieXRlcywgb2Zmc2V0O1xuNzIzNDpcdFx0XHR2b2lkICptYWRkcjtcbjcyMzU6XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbjcyMzY6XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBOVUxMO1xuNzIzNzpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGdldF91c2VyX3BhZ2Vfdm1hX3JlbW90ZShtbSwgYWRkcixcbjcyMzg6XHRcdFx0XHRcdFx0XHRcdCAgICAgZ3VwX2ZsYWdzLCBcdTAwMjZ2bWEpO1xuNzIzOTpcdFxuNzI0MDpcdFx0XHRpZiAoSVNfRVJSKHBhZ2UpKSB7XG43MjQxOlx0XHRcdFx0LyogV2UgbWlnaHQgbmVlZCB0byBleHBhbmQgdGhlIHN0YWNrIHRvIGFjY2VzcyBpdCAqL1xuNzI0MjpcdFx0XHRcdHZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpO1xuNzI0MzpcdFx0XHRcdGlmICghdm1hKSB7XG43MjQ0Olx0XHRcdFx0XHR2bWEgPSBleHBhbmRfc3RhY2sobW0sIGFkZHIpO1xuNzI0NTpcdFxuNzI0NjpcdFx0XHRcdFx0LyogbW1hcF9sb2NrIHdhcyBkcm9wcGVkIG9uIGZhaWx1cmUgKi9cbjcyNDc6XHRcdFx0XHRcdGlmICghdm1hKVxuNzI0ODpcdFx0XHRcdFx0XHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcbjcyNDk6XHRcbjcyNTA6XHRcdFx0XHRcdC8qIFRyeSBhZ2FpbiBpZiBzdGFjayBleHBhbnNpb24gd29ya2VkICovXG43MjUxOlx0XHRcdFx0XHRjb250aW51ZTtcbjcyNTI6XHRcdFx0XHR9XG43MjUzOlx0XG43MjU0Olx0XHRcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI0NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGl2aW5nIERlZXBlciBpbnRvIGBfX2FjY2Vzc19yZW1vdGVfdm1gKioKCkFscmlnaHQsIEkmIzM5O20gYXQgdGhlIHBvaW50IHdoZXJlIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGBfX2FjY2Vzc19yZW1vdGVfdm1gLiBJJiMzOTt2ZSBwcm9iYWJseSBnb3Qgc29tZSBjb250ZXh0IGFscmVhZHkg4oCTIG1heWJlIEkmIzM5O20gbG9va2luZyBhdCBhbiBlcnJvciB0cmFjZWJhY2ssIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgb3IgSSYjMzk7bSBzaW1wbHkgdHJ5aW5nIHRvIGFyY2hpdGVjdCBhIG5ldyBzb2x1dGlvbiBhcm91bmQgdGhpcyBmdW5jdGlvbi4gUmVnYXJkbGVzcywgdGhlIGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBncmFzcCAqYWxsKiBvZiBpdC4gSSB3YW50IHRvIHNlZSBob3cgaXQgaW50ZWdyYXRlcyB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIFRoaXMgY291bGQgYmUgYSBjb21wbGV4IGNhbGwgc3RhY2ssIGEgZGlzdHJpYnV0ZWQgc3lzdGVtIGNvbXBvbmVudCwgb3IgbWF5YmUganVzdCBhIHNwZWNpZmljIHBpZWNlIG9mIGEgbGFyZ2VyIGNvZGUgcGF0aCwgSSBuZWVkIHRvIHpvb20gb3V0IGEgYml0IGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gbGl2ZXMgd2l0aGluIHRoZSBvdmVyYWxsIGRlc2lnbi4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIGNoZWNrIHRoZSBwYXJhbWV0ZXJzIGl0IGFjY2VwdHMsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMsIGFuZCwgY3JpdGljYWxseSwgaG93IGl0IGhhbmRsZXMgZXJyb3JzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCByZXNvdXJjZSBsZWFrcywgb3IgYW55dGhpbmcgdGhhdCBjb3VsZCBjYXVzZSBzY2FsYWJpbGl0eSBpc3N1ZXMuIFNvLCBsZXQmIzM5O3MgZ2V0IHRoYXQgZnVsbCB2aWV3IGFuZCBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzI1MDpcdFx0XHRcdFx0LyogVHJ5IGFnYWluIGlmIHN0YWNrIGV4cGFuc2lvbiB3b3JrZWQgKi9cbjcyNTE6XHRcdFx0XHRcdGNvbnRpbnVlO1xuNzI1MjpcdFx0XHRcdH1cbjcyNTM6XHRcbjcyNTQ6XHRcdFx0XHQvKlxuNzI1NTpcdFx0XHRcdCAqIENoZWNrIGlmIHRoaXMgaXMgYSBWTV9JTyB8IFZNX1BGTk1BUCBWTUEsIHdoaWNoXG43MjU2Olx0XHRcdFx0ICogd2UgY2FuIGFjY2VzcyB1c2luZyBzbGlnaHRseSBkaWZmZXJlbnQgY29kZS5cbjcyNTc6XHRcdFx0XHQgKi9cbjcyNTg6XHRcdFx0XHRieXRlcyA9IDA7XG43MjU5Olx0I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuNzI2MDpcdFx0XHRcdGlmICh2bWEtXHUwMDNldm1fb3BzIFx1MDAyNlx1MDAyNiB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2VzcylcbjcyNjE6XHRcdFx0XHRcdGJ5dGVzID0gdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VhY2Nlc3Modm1hLCBhZGRyLCBidWYsXG43MjYyOlx0XHRcdFx0XHRcdFx0XHQgICAgbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKGFkZHIpKSxcbjcyNjM6XHRcdFx0XHRcdFx0XHRcdCAgICB3cml0ZSk7XG43MjY0Olx0I2VuZGlmXG43MjY1Olx0XHRcdFx0aWYgKGJ5dGVzIFx1MDAzYz0gMClcbjcyNjY6XHRcdFx0XHRcdGJyZWFrO1xuNzI2NzpcdFx0XHR9IGVsc2Uge1xuNzI2ODpcdFx0XHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbjcyNjk6XHRcdFx0XHRieXRlcyA9IGxlbjtcbjcyNzA6XHRcdFx0XHRvZmZzZXQgPSBhZGRyIFx1MDAyNiAoUEFHRV9TSVpFLTEpO1xuNzI3MTpcdFx0XHRcdGlmIChieXRlcyBcdTAwM2UgUEFHRV9TSVpFLW9mZnNldClcbjcyNzI6XHRcdFx0XHRcdGJ5dGVzID0gUEFHRV9TSVpFLW9mZnNldDtcbjcyNzM6XHRcbjcyNzQ6XHRcdFx0XHRtYWRkciA9IGttYXBfbG9jYWxfZm9saW8oZm9saW8sIGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwYWdlKSAqIFBBR0VfU0laRSk7XG43Mjc1Olx0XHRcdFx0aWYgKHdyaXRlKSB7XG43Mjc2Olx0XHRcdFx0XHRjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXG43Mjc3Olx0XHRcdFx0XHRcdFx0ICBtYWRkciAmIzQzOyBvZmZzZXQsIGJ1ZiwgYnl0ZXMpO1xuNzI3ODpcdFx0XHRcdFx0Zm9saW9fbWFya19kaXJ0eV9sb2NrKGZvbGlvKTtcbjcyNzk6XHRcdFx0XHR9IGVsc2Uge1xuNzI4MDpcdFx0XHRcdFx0Y29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXG43MjgxOlx0XHRcdFx0XHRcdFx0ICAgIGJ1ZiwgbWFkZHIgJiM0Mzsgb2Zmc2V0LCBieXRlcyk7XG43MjgyOlx0XHRcdFx0fVxuNzI4MzpcdFx0XHRcdGZvbGlvX3JlbGVhc2Vfa21hcChmb2xpbywgbWFkZHIpO1xuNzI4NDpcdFx0XHR9XG43Mjg1Olx0XHRcdGxlbiAtPSBieXRlcztcbjcyODY6XHRcdFx0YnVmICYjNDM7PSBieXRlcztcbjcyODc6XHRcdFx0YWRkciAmIzQzOz0gYnl0ZXM7XG43Mjg4Olx0XHR9XG43Mjg5Olx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbjcyOTA6XHRcbjcyOTE6XHRcdHJldHVybiBidWYgLSBvbGRfYnVmO1xuNzI5MjpcdH1cbjcyOTM6XHRcbjcyOTQ6XHQvKipcbjcyOTU6XHQgKiBhY2Nlc3NfcmVtb3RlX3ZtIC0gYWNjZXNzIGFub3RoZXIgcHJvY2VzcyYjMzk7IGFkZHJlc3Mgc3BhY2VcbjcyOTY6XHQgKiBAbW06XHRcdHRoZSBtbV9zdHJ1Y3Qgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlXG43Mjk3Olx0ICogQGFkZHI6XHRzdGFydCBhZGRyZXNzIHRvIGFjY2Vzc1xuNzI5ODpcdCAqIEBidWY6XHRzb3VyY2Ugb3IgZGVzdGluYXRpb24gYnVmZmVyXG43Mjk5Olx0ICogQGxlbjpcdG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlclxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mjc3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGh5c2ljYWwgTWVtb3J5IEFjY2VzcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggZm9yIGBnZW5lcmljX2FjY2Vzc19waHlzYCBpbiBgbW0vbWVtb3J5LmNgLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIHJlYWxseSBleGFtaW5lIHRoZSBjaGFuZ2VzIGNhcmVmdWxseS4gSSBzZWUgYSBjb3VwbGUgb2Yga2V5IGFkanVzdG1lbnRzLiBGaXJzdCwgdGhlcmUgYXJlIGFkZGVkIGNoZWNrcyB0byBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlIHJlcXVlc3RlZCBsZW5ndGggYGxlbmAgaXMgemVybyBvciBuZWdhdGl2ZS4gVGhhdCYjMzk7cyBhIHNlbnNpYmxlIGFkZGl0aW9uLCBndWFyZGluZyBhZ2FpbnN0IHBvdGVudGlhbCBpc3N1ZXMgbGF0ZXIuIFdlIGFyZSBhbHNvIGV4cGxpY2l0bHkgbGltaXRpbmcgdGhlIGxlbmd0aCB0byB0aGUgcGFnZSBzaXplIG5vdywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHRoZSB1bmRlcmx5aW5nIHJlbWFwcGluZyBvcGVyYXRpb25zIHdlIGFyZSB1c2luZy4gSXQgYXBwZWFycyB0aGUgcHJpb3IgY2FsY3VsYXRpb24gd2FzIGZsYXdlZCBhbmQgY291bGQgcmVxdWVzdCBtb3JlIG1lbW9yeSB0aGFuIG5lY2Vzc2FyeSwgcGVyaGFwcyBsZWFkaW5nIHRvIHVuaW50ZW5kZWQgYmVoYXZpb3Igd2l0aCB0aGUgYGlvcmVtYXBgIGNhbGwuCgpUaGUgYGlvcmVtYXBfcHJvdGAgY2FsbCBpcyBub3cgcmVxdWVzdGluZyBvbmx5IGBQQUdFX1NJWkVgLCB3aGljaCBhbGlnbnMgd2l0aCB0aGUgbW9kaWZpZWQgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciBhc3N1bXB0aW9ucyB0aGF0IHdlcmUgcHJldmlvdXNseSBoYW5kbGVkIGltcGxpY2l0bHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBicmVhayBhbnkgdmFsaWQgdXNlIGNhc2VzLiBJIHdpbGwgcmV2aWV3IHRoZSBwcmV2aW91cyB2ZXJzaW9uLCB0byBlbnN1cmUgdGhlIG5ldyBgbWluX3RgIGNhbGN1bGF0aW9ucyBkb24mIzM5O3QgaGF2ZSB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBhbmQgdGhhdCB3ZSBhcmUgc3RpbGwgYWNjZXNzaW5nIHRoZSBhcHByb3ByaWF0ZSBtZW1vcnkgcmVnaW9uLgoKVGhlcmUgYXJlIGFsc28gY2hhbmdlcyB0byB0aGUgY29uZGl0aW9uYWxzIGxhdGVyIG9uIGluIHRoZSBjb2RlLCB3aGljaCBsb29rIGxpa2UgdGhleSBhcmUgdG8gYXZvaWQgZXh0cmEgd29yayBpZiB0aGUgcGFyYW1ldGVycyBkbyBub3QgYWxpZ24gd2l0aCB0aGUgcmVtYXBwZWQgbWVtb3J5LgoKVG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBwYXRjaCwgSSYjMzk7bGwgbmVlZCB0byBnbyBiZXlvbmQganVzdCB0aGUgY29kZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvbW1pdHMuIEkgd2lsbCBzZWFyY2ggZm9yIGNvbW1pdHMgcmVsYXRlZCB0byBgZ2VuZXJpY19hY2Nlc3NfcGh5c2Agb3IgcmVsYXRlZCBmdW5jdGlvbnMgdG8gZ3Jhc3AgdGhlIGJyb2FkZXIgY29udGV4dCwgdGhlIHJlcG9ydGVkIHByb2JsZW0sIGFuZCBhbnkgZGlzY3Vzc2lvbnMgdGhhdCBtaWdodCBoYXZlIGxlZCB0byB0aGlzIGNoYW5nZS4gUGVyaGFwcyBhIGJ1ZyByZXBvcnQgb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMgZHJvdmUgdGhpcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBwcm9tcHRlZCB0aGVzZSBtb2RpZmljYXRpb25zIGFuZCB3aGF0IHByb2JsZW1zIGl0JiMzOTtzIHRyeWluZyB0byBzb2x2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2VuZXJpY19hY2Nlc3NfcGh5cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnkuYz03MTQxPUVYUE9SVF9TWU1CT0xfR1BMKGZvbGxvd19wZm5tYXBfZW5kKTtcbi0tXG5tbS9tZW1vcnkuYy03MTQ0LS8qKlxubW0vbWVtb3J5LmM6NzE0NTogKiBnZW5lcmljX2FjY2Vzc19waHlzIC0gZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgaW9tZW0gbW1hcCBhY2Nlc3Ncbm1tL21lbW9yeS5jLTcxNDYtICogQHZtYTogdGhlIHZtYSB0byBhY2Nlc3Ncbi0tXG5tbS9tZW1vcnkuYy03MTU1LSAqL1xubW0vbWVtb3J5LmM6NzE1NjppbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vbWVtb3J5LmMtNzE1Ny1cdFx0XHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSlcbi0tXG5tbS9tZW1vcnkuYy03MjA4LX1cbm1tL21lbW9yeS5jOjcyMDk6RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19hY2Nlc3NfcGh5cyk7XG5tbS9tZW1vcnkuYy03MjEwLSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjE1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTQ4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50IG9mIGBnZW5lcmljX2FjY2Vzc19waHlzYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGluZyBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AsIHNwZWNpZmljYWxseSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHZtX29wcy0mZ3Q7YWNjZXNzYCBmb3IgUEZOTUFQL0lPIG1lbW9yeSBWTUFzLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFib3V0IHRpZ2h0ZW5pbmcgdXAgaG93IHdlIGhhbmRsZSBsZW5ndGggY2FsY3VsYXRpb25zIGFuZCBwaHlzaWNhbCBhZGRyZXNzIG1hcHBpbmcgdG8gcHJldmVudCBwb3RlbnRpYWwgaXNzdWVzLCBlc3BlY2lhbGx5IG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzIHdpdGggNjQtYml0IHBoeXNpY2FsIGFkZHJlc3Nlcy4gVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGhhZCBhIGZldyBnb3RjaGFzOiBhbiBpbnRlZ2VyIHRydW5jYXRpb24gb3Igb3ZlcmZsb3cgcmlzayB3aGVuIGNvbXBhcmluZyBwaHlzaWNhbCBhZGRyZXNzZXMsIGFuZCBsZW5ndGggaXNzdWVzIHdoZXJlIGBsZW5gIHdhc24mIzM5O3QgYmVpbmcgY29ycmVjdGx5IGJvdW5kZWQgdG8gYSBzaW5nbGUgcGFnZSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBpbmNvbnNpc3RlbmNpZXMgaW4gdGhlIGlvcmVtYXAmIzM5O2QgcmVnaW9uLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoZXNlIGJ5IGNsYW1waW5nIGBsZW5gLCBmaXhpbmcgdGhlIGlvcmVtYXAgc2l6ZSwgYW5kIHByb3Blcmx5IGNhc3RpbmcgcGZuIGJlZm9yZSBzaGlmdGluZyBpdC4gSXQgYWxzbyByZWZhY3RvcnMgdGhlIGxlbmd0aCBwYXNzZWQgdG8gYHZtYS0mZ3Q7dm1fb3BzLSZndDthY2Nlc3NgIGluIGBfX2FjY2Vzc19yZW1vdGVfdm1gLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayB0aGF0IHJlcXVpcmVzIEtNU0FOPyBJIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0IGNhcmVmdWxseS4gV2UgYWxyZWFkeSBoYXZlIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gIEtNU0FOIGlzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcywgc28gaXQmIzM5O3Mgbm90IG5lZWRlZCBpZiBLQVNBTiBjYW4gY2F0Y2ggdGhlIGJ1Zy4KCkxldCYjMzk7cyBicmVhayBpdCBkb3duOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgaXMgY29weWluZyBkYXRhIGJldHdlZW4gdXNlci9yZW1vdGUgYnVmZmVyIGBidWZgIGFuZCBpb21lbSB1c2luZyBgbWVtY3B5X3RvaW9gIC8gYG1lbWNweV9mcm9taW9gLCB3aGljaCB3b3VsZCB1c2UgdGhlIGNhbGxlciBzdXBwbGllZCBkYXRhLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogSSYjMzk7dmUgdHJhY2VkIHRoZSB2YXJpYWJsZXMgaW4gYGdlbmVyaWNfYWNjZXNzX3BoeXNgLCBhbmQgYWxsIG9mIHRoZW0gYXJlIGluaXRpYWxpemVkLiBgZm9sbG93X3Bmbm1hcF9zdGFydGAgaW5pdGlhbGl6ZXMgdGhlIGZvbGxvd19wZm5tYXBfYXJncyBzdHJ1Y3QsIGFuZCB3ZSByZWNoZWNrIHRob3NlIHZhcmlhYmxlcy4gTm8gaXNzdWVzIGhlcmUuCjMuICAqKkFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXM/KiogTm90IGluIHRoaXMgcGF0Y2guCjQuICAqKkJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgZW5hYmxlcyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcz8qKiBBaCwgdGhpcyBpcyB3aGVyZSB0aGUgY2hhbmdlcyBhcmUgZm9jdXNlZC4gVGhlIHBhdGNoIHJlc3RyaWN0cyBgbGVuYCBpbiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AsIHRvIGBQQUdFX1NJWkUgLSBvZmZzZXRgIHdoaWNoIHNob3VsZCBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGUgZXhpc3RpbmcgaXNzdWUgd2FzIHRoYXQgIGBfX2FjY2Vzc19yZW1vdGVfdm1gIG1pZ2h0IGhhdmUgYmVlbiBwYXNzaW5nIGEgbGFyZ2UgYGxlbmAgdG8gdGhlIGZ1bmN0aW9uIHdoaWNoIGFjY2Vzc2VkIG1lbW9yeSBiZXlvbmQgcGFnZSBib3VuZGFyaWVzLiBUaGVzZSBib3VuZGFyeSBhbmQgb3V0LW9mLWJvdW5kcyBjaGVja3MsIGhvd2V2ZXIsIGFyZSBzcXVhcmVseSBpbiBLQVNBTiYjMzk7cyBkb21haW4gKE9PQiBhY2Nlc3MgYnVncyksIG5vdCBLTVNBTi4KClNvLCBpcyB0aGVyZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm8tbGVhayBjcmVhdGVkPyBOby4gYGJ1ZmAgaXMgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci4gYG1lbWNweV9mcm9taW9gIHJlYWRzIGZyb20gdGhlIEkvTyBtZW1vcnkgYW5kIHdyaXRlcyB0byB0aGUgc3VwcGxpZWQgYnVmZmVyLCBhbmQgYG1lbWNweV90b2lvYCBpcyB0aGUgb3Bwb3NpdGUuIFRoZSBzaXplIG9mIHRoZSByZWFkIG9yIHdyaXRlIGlzIG5vdyBjb3JyZWN0bHkgYm91bmRlZCBieSB0aGUgcGF0Y2guCgpJJiMzOTttIGNvbmZpZGVudC4gVGhpcyBwYXRjaCBpcyBhYm91dCBib3VuZHMgY2hlY2tpbmcsIHdoaWNoIGZhbGxzIHVuZGVyIEtBU0FOLCBub3QgS01TQU4uIFRoZSBsb2dpYyBpcyBkZXNpZ25lZCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLgoKSnVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgdXNlcyBvZiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2Agb3IgYGZvbGxvd19wZm5tYXBfYXJnc2AgdG8gZW5zdXJlIG5vIG90aGVyIGFyZWEgaXMgYWZmZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dlbmVyaWNfYWNjZXNzX3BoeXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jZHgvY2R4LmM9NjYyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgY2R4X3BoeXNfdm1fb3BzID0ge1xuZHJpdmVycy9jZHgvY2R4LmMtNjYzLSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcbmRyaXZlcnMvY2R4L2NkeC5jOjY2NDpcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxuZHJpdmVycy9jZHgvY2R4LmMtNjY1LSNlbmRpZlxuLS1cbmRyaXZlcnMvY2hhci9tZW0uYz0zMTk9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBtbWFwX21lbV9vcHMgPSB7XG5kcml2ZXJzL2NoYXIvbWVtLmMtMzIwLSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcbmRyaXZlcnMvY2hhci9tZW0uYzozMjE6XHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5c1xuZHJpdmVycy9jaGFyL21lbS5jLTMyMi0jZW5kaWZcbi0tXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmM9ODA1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYWZ1X3ZtYV9vcHMgPSB7XG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmMtODA2LSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYzo4MDc6XHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYy04MDgtI2VuZGlmXG4tLVxuZHJpdmVycy9wY2kvbW1hcC5jPTE4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGNpX3BoeXNfdm1fb3BzID0ge1xuZHJpdmVycy9wY2kvbW1hcC5jLTE5LSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcbmRyaXZlcnMvcGNpL21tYXAuYzoyMDpcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxuZHJpdmVycy9wY2kvbW1hcC5jLTIxLSNlbmRpZlxuLS1cbmRyaXZlcnMvdWlvL3Vpby5jPTczNj1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHVpb19waHlzaWNhbF92bV9vcHMgPSB7XG5kcml2ZXJzL3Vpby91aW8uYy03MzctI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy91aW8vdWlvLmM6NzM4Olx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXG5kcml2ZXJzL3Vpby91aW8uYy03MzktI2VuZGlmXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTgwNj1zdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qge1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaC04NTgtXHQvKiBjYWxsZWQgYnkgYWNjZXNzX3Byb2Nlc3Nfdm0gd2hlbiBnZXRfdXNlcl9wYWdlcygpIGZhaWxzLCB0eXBpY2FsbHlcbmluY2x1ZGUvbGludXgvbW0uaDo4NTk6XHQgKiBmb3IgdXNlIGJ5IHNwZWNpYWwgVk1Bcy4gU2VlIGFsc28gZ2VuZXJpY19hY2Nlc3NfcGh5cygpIGZvciBhIGdlbmVyaWNcbmluY2x1ZGUvbGludXgvbW0uaC04NjAtXHQgKiBpbXBsZW1lbnRhdGlvbiB1c2VmdWwgZm9yIGFueSBpb21lbSBtYXBwaW5nLlxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0zMjM0PWNvcHlfcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSk7XG5pbmNsdWRlL2xpbnV4L21tLmg6MzIzNTppbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuaW5jbHVkZS9saW51eC9tbS5oLTMyMzYtXHRcdFx0dm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpO1xuLS1cbm1tL21lbW9yeS5jPTcxNDE9RVhQT1JUX1NZTUJPTF9HUEwoZm9sbG93X3Bmbm1hcF9lbmQpO1xuLS1cbm1tL21lbW9yeS5jLTcxNDQtLyoqXG5tbS9tZW1vcnkuYzo3MTQ1OiAqIGdlbmVyaWNfYWNjZXNzX3BoeXMgLSBnZW5lcmljIGltcGxlbWVudGF0aW9uIGZvciBpb21lbSBtbWFwIGFjY2Vzc1xubW0vbWVtb3J5LmMtNzE0Ni0gKiBAdm1hOiB0aGUgdm1hIHRvIGFjY2Vzc1xuLS1cbm1tL21lbW9yeS5jLTcxNTUtICovXG5tbS9tZW1vcnkuYzo3MTU2OmludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9tZW1vcnkuYy03MTU3LVx0XHRcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKVxuLS1cbm1tL21lbW9yeS5jLTcyMDgtfVxubW0vbWVtb3J5LmM6NzIwOTpFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2FjY2Vzc19waHlzKTtcbm1tL21lbW9yeS5jLTcyMTAtI2VuZGlmXG4tLVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaD02NDA9c3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHtcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTY5Mi1cdC8qIGNhbGxlZCBieSBhY2Nlc3NfcHJvY2Vzc192bSB3aGVuIGdldF91c2VyX3BhZ2VzKCkgZmFpbHMsIHR5cGljYWxseVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaDo2OTM6XHQgKiBmb3IgdXNlIGJ5IHNwZWNpYWwgVk1Bcy4gU2VlIGFsc28gZ2VuZXJpY19hY2Nlc3NfcGh5cygpIGZvciBhIGdlbmVyaWNcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgtNjk0LVx0ICogaW1wbGVtZW50YXRpb24gdXNlZnVsIGZvciBhbnkgaW9tZW0gbWFwcGluZy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk1NwoJCQkJCQkJb3V0cHV0OiAxOTcKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUmVjZW50IENoYW5nZXMqKgoKT2theSwgc28gdGhlIG1vZGlmaWNhdGlvbnMgSSYjMzk7dmUganVzdCByZXZpZXdlZCBhcmUgbGFzZXItZm9jdXNlZCBvbiBoYXJkZW5pbmcgdGhlIGNvZGUgYWdhaW5zdCBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY2Vzcy4gU3BlY2lmaWNhbGx5LCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhZGRyZXNzaW5nIHZ1bG5lcmFiaWxpdGllcyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gaW5jb3JyZWN0IGxlbmd0aCBvciBib3VuZHMgY2hlY2tzLiBUaGlzIHNlZW1zIHBhcnRpY3VsYXJseSByZWxldmFudCB3aXRoaW4gdGhlIGBnZW5lcmljX2FjY2Vzc19waHlzYCBhbmQgYF9fYWNjZXNzX3JlbW90ZV92bWAgZnVuY3Rpb25zLCB3aGljaCwgYXMgSSByZWNhbGwsIGFyZSBpbnZvbHZlZCBpbiBzaW5nbGUtcGFnZSBtYXBwaW5nIG9wZXJhdGlvbnMuIFRoZSBzaGlmdCB0byBjYXN0aW5nIGBhcmdzLnBmbmAgdG8gYHJlc291cmNlX3NpemVfdGAgYmVmb3JlIGJpdC1zaGlmdGluZyBpcyBhIHNtYXJ0IG1vdmUg4oCTIGl0IGVsZWdhbnRseSBzaWRlc3RlcHMgdGhlIHBvdGVudGlhbCBmb3IgYSAzMi1iaXQgb3ZlcmZsb3cgc2NlbmFyaW8sIHdoaWNoIGNvdWxkIGhhdmUgYWxsb3dlZCBmb3Igc29tZSB2ZXJ5IG5hc3R5IGFuZCBkaWZmaWN1bHQtdG8tZGV0ZWN0IG1lbW9yeSBjb3JydXB0aW9uLgoKVGhlIGdvb2QgbmV3cyBpcyB0aGF0IHRoZXNlIGNoYW5nZXMsIHdoaWxlIGNydWNpYWwgZm9yIHNlY3VyaXR5LCBzZWVtIHRvIGJlIGJ1aWxkaW5nIHVwb24gYSBmb3VuZGF0aW9uIG9mIGV4aXN0aW5nIHNhZmVndWFyZHMuIEl0IGFwcGVhcnMgdGhhdCBhbnkgbHVya2luZyBidWZmZXIgb3ZlcmZsb3dzIG9yIG91dC1vZi1ib3VuZHMgcmVhZHMgdGhhdCBtaWdodCBoYXZlIHNsaXBwZWQgdGhyb3VnaCB0aGUgY3JhY2tzIHByZXZpb3VzbHkgKnNob3VsZCogYmUgY2F1Z2h0IGJ5IHRoZSBzdGFuZGFyZCBzYW5pdGl6ZXJzIHdlJiMzOTt2ZSBnb3QgaW4gcGxhY2UsIGxpa2UgS0FTQU4uIFNvLCB3ZSYjMzk7cmUgbm90IHN0YXJ0aW5nIGZyb20gc2NyYXRjaCBoZXJlLiBXZSYjMzk7cmUgbGF5ZXJpbmcgZGVmZW5zZSBpbiBkZXB0aC4KCkFuZCwgb2YgY291cnNlLCBubyBldmlkZW5jZSBvZiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgLSB3aGljaCBpcyBhIGh1Z2UgcmVsaWVmLiBHb29kLgoKQWxsIGluIGFsbCwgaXQgbG9va3MgbGlrZSBhIGNsZWFuLCBmb2N1c2VkLCBhbmQgd2VsbC1jb25zaWRlcmVkIHNldCBvZiBhZGp1c3RtZW50cy4gVGltZSB0byBjb25maWRlbnRseSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZ2VuZXJpY19hY2Nlc3NfcGh5cygpYCBhbmQgYF9fYWNjZXNzX3JlbW90ZV92bSgpYCBpbiBgbW0vbWVtb3J5LmNgIHRvIGNsYW1wIGFjY2VzcyBsZW5ndGhzIHRvIHBhZ2UgYm91bmRhcmllcyAoYFBBR0VfU0laRSAtIG9mZnNldGApLCBtYXAgb25seSBhIHNpbmdsZSBwYWdlIHZpYSBgaW9yZW1hcF9wcm90KClgLCBjYXN0IGBhcmdzLnBmbmAgdG8gYHJlc291cmNlX3NpemVfdGAgYmVmb3JlIHNoaWZ0aW5nLCBhbmQgcmV0dXJuIGVhcmx5IHdoZW4gYGxlbiBcdTAwM2M9IDBgLlxuXG5UaGVzZSBjaGFuZ2VzIGZpeCBib3VuZGFyeSBjYWxjdWxhdGlvbnMgYW5kIHByZXZlbnQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIC8gYXJpdGhtZXRpYyB0cnVuY2F0aW9uLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcywgc3RydWN0IHBhZGRpbmcgZXhwb3N1cmVzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IG1lbW9yeSBzYWZldHkgY29uY2VybnMgaW4gdGhpcyBjb2RlIHBhdGggKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBnZW5lcmljX2FjY2Vzc19waHlzKClgIGFuZCBgX19hY2Nlc3NfcmVtb3RlX3ZtKClgIGluIGBtbS9tZW1vcnkuY2AgdG8gY2xhbXAgYWNjZXNzIGxlbmd0aHMgdG8gcGFnZSBib3VuZGFyaWVzIChgUEFHRV9TSVpFIC0gb2Zmc2V0YCksIG1hcCBvbmx5IGEgc2luZ2xlIHBhZ2UgdmlhIGBpb3JlbWFwX3Byb3QoKWAsIGNhc3QgYGFyZ3MucGZuYCB0byBgcmVzb3VyY2Vfc2l6ZV90YCBiZWZvcmUgc2hpZnRpbmcsIGFuZCByZXR1cm4gZWFybHkgd2hlbiBgbGVuIFx1MDAzYz0gMGAuXG5cblRoZXNlIGNoYW5nZXMgZml4IGJvdW5kYXJ5IGNhbGN1bGF0aW9ucyBhbmQgcHJldmVudCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgLyBhcml0aG1ldGljIHRydW5jYXRpb24uIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZXMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBpbiB0aGlzIGNvZGUgcGF0aCAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMDowMC4yOTg5NDkwMDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTg1MzgwODUwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5lcmljX2FjY2Vzc19waHlzXCIsXG4gICAgXCJhY2Nlc3NfcmVtb3RlX3ZtXCIsXG4gICAgXCJhY2Nlc3NfcHJvY2Vzc192bVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGdlbmVyaWNfYWNjZXNzX3BoeXMoKWAgYW5kIGBfX2FjY2Vzc19yZW1vdGVfdm0oKWAgaW4gYG1tL21lbW9yeS5jYCB0byBjbGFtcCBhY2Nlc3MgbGVuZ3RocyB0byBwYWdlIGJvdW5kYXJpZXMgKGBQQUdFX1NJWkUgLSBvZmZzZXRgKSwgbWFwIG9ubHkgYSBzaW5nbGUgcGFnZSB2aWEgYGlvcmVtYXBfcHJvdCgpYCwgY2FzdCBgYXJncy5wZm5gIHRvIGByZXNvdXJjZV9zaXplX3RgIGJlZm9yZSBzaGlmdGluZywgYW5kIHJldHVybiBlYXJseSB3aGVuIGBsZW4gXFx1MDAzYz0gMGAuXFxuXFxuVGhlc2UgY2hhbmdlcyBmaXggYm91bmRhcnkgY2FsY3VsYXRpb25zIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAvIGFyaXRobWV0aWMgdHJ1bmNhdGlvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGluIHRoaXMgY29kZSBwYXRoIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbGVuZ3RoIGNhbGN1bGF0aW9uLCBib3VuZHMgY2hlY2tpbmcsIGFuZCBwaHlzaWNhbCBhZGRyZXNzIHR5cGVjYXN0aW5nIGluIGdlbmVyaWNfYWNjZXNzX3BoeXMoKSBhcyB3ZWxsIGFzIHRoZSBsZW5ndGggY2xhbXBpbmcgcGFzc2VkIHRvIHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VhY2Nlc3MoKSBpbiBfX2FjY2Vzc19yZW1vdGVfdm0oKS4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcHRyYWNlIChQVFJBQ0VfUEVFS0RBVEEvUE9LRURBVEEpIGFuZCAvcHJvYy8kcGlkL21lbSBhY2Nlc3NlcyB0byBWTV9JTy9WTV9QRk5NQVAgVk1BcyAoc3VjaCBhcyAvZGV2L21lbSkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgYm91bmRhcnkgYW5kIHBhZ2UtY3Jvc3NpbmcgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6MDAuMjk4OTYyNzY1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTIzMzc4NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4NmZlMzk2MWRiZGE2MWFlMGIyNTI4YzZhZWFhNGI0ZDc1OTY5YzJlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMTU6MTk6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xcbmluZGV4IDhiMGMyYzczNWQzZGUuLjA5MzkwZTUxNDMyZjIgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LmNcXG4rKysgYi9tbS9tZW1vcnkuY1xcbkBAIC03MTY0LDYgKzcxNjQsMTEgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0Ym9vbCB3cml0YWJsZTtcXG4gXFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGFkZHIgfTtcXG4gXFxuK1xcdGlmIChsZW4gXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRsZW4gPSBtaW5fdChpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2Zmc2V0KTtcXG4rXFxuIHJldHJ5OlxcbiBcXHRpZiAoZm9sbG93X3Bmbm1hcF9zdGFydChcXHUwMDI2YXJncykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC03MTc1LDcgKzcxODAsNyBAQCBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRpZiAoKHdyaXRlIFxcdTAwMjYgRk9MTF9XUklURSkgXFx1MDAyNlxcdTAwMjYgIXdyaXRhYmxlKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9BTElHTihsZW4gKyBvZmZzZXQpLCBwcm90KTtcXG4rXFx0bWFkZHIgPSBpb3JlbWFwX3Byb3QocGh5c19hZGRyLCBQQUdFX1NJWkUsIHByb3QpO1xcbiBcXHRpZiAoIW1hZGRyKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTcxODMsNyArNzE4OCw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdGdvdG8gb3V0X3VubWFwO1xcbiBcXG4gXFx0aWYgKChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoYXJncy5wZ3Byb3QpKSB8fFxcbi1cXHQgICAgKHBoeXNfYWRkciAhPSAoYXJncy5wZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkpIHx8XFxuK1xcdCAgICAocGh5c19hZGRyICE9ICgocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKSB8fFxcbiBcXHQgICAgKHdyaXRhYmxlICE9IGFyZ3Mud3JpdGFibGUpKSB7XFxuIFxcdFxcdGZvbGxvd19wZm5tYXBfZW5kKFxcdTAwMjZhcmdzKTtcXG4gXFx0XFx0aW91bm1hcChtYWRkcik7XFxuQEAgLTcyNTQsNyArNzI1OSw4IEBAIHN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuICNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG4gXFx0XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fb3BzIFxcdTAwMjZcXHUwMDI2IHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VhY2Nlc3MpXFxuIFxcdFxcdFxcdFxcdGJ5dGVzID0gdm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZWFjY2Vzcyh2bWEsIGFkZHIsIGJ1ZixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGxlbiwgd3JpdGUpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKGFkZHIpKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHdyaXRlKTtcXG4gI2VuZGlmXFxuIFxcdFxcdFxcdGlmIChieXRlcyBcXHUwMDNjPSAwKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6MDAuODUyMTE3ODU3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MjQ5NDIzODAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5lcmljX2FjY2Vzc19waHlzXCIsXG4gICAgXCJhY2Nlc3NfcmVtb3RlX3ZtXCIsXG4gICAgXCJhY2Nlc3NfcHJvY2Vzc192bVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxlbmd0aCBjYWxjdWxhdGlvbiwgYm91bmRzIGNoZWNraW5nLCBhbmQgcGh5c2ljYWwgYWRkcmVzcyB0eXBlY2FzdGluZyBpbiBnZW5lcmljX2FjY2Vzc19waHlzKCkgYXMgd2VsbCBhcyB0aGUgbGVuZ3RoIGNsYW1waW5nIHBhc3NlZCB0byB2bWEtXFx1MDAzZXZtX29wcy1cXHUwMDNlYWNjZXNzKCkgaW4gX19hY2Nlc3NfcmVtb3RlX3ZtKCkuIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHB0cmFjZSAoUFRSQUNFX1BFRUtEQVRBL1BPS0VEQVRBKSBhbmQgL3Byb2MvJHBpZC9tZW0gYWNjZXNzZXMgdG8gVk1fSU8vVk1fUEZOTUFQIFZNQXMgKHN1Y2ggYXMgL2Rldi9tZW0pLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGJvdW5kYXJ5IGFuZCBwYWdlLWNyb3NzaW5nIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODZmZTM5NjFkYmRhNjFhZTBiMjUyOGM2YWVhYTRiNGQ3NTk2OWMyZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTU6MTk6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA4YjBjMmM3MzVkM2RlLi4wOTM5MGU1MTQzMmYyIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNzE2NCw2ICs3MTY0LDExIEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRib29sIHdyaXRhYmxlO1xuIFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGFkZHIgfTtcbiBcbitcdGlmIChsZW4gXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGxlbiA9IG1pbl90KGludCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXQpO1xuK1xuIHJldHJ5OlxuIFx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTcxNzUsNyArNzE4MCw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpZiAoKHdyaXRlIFx1MDAyNiBGT0xMX1dSSVRFKSBcdTAwMjZcdTAwMjYgIXdyaXRhYmxlKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9BTElHTihsZW4gKyBvZmZzZXQpLCBwcm90KTtcbitcdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9TSVpFLCBwcm90KTtcbiBcdGlmICghbWFkZHIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTcxODMsNyArNzE4OCw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGdvdG8gb3V0X3VubWFwO1xuIFxuIFx0aWYgKChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoYXJncy5wZ3Byb3QpKSB8fFxuLVx0ICAgIChwaHlzX2FkZHIgIT0gKGFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSkgfHxcbitcdCAgICAocGh5c19hZGRyICE9ICgocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSkgfHxcbiBcdCAgICAod3JpdGFibGUgIT0gYXJncy53cml0YWJsZSkpIHtcbiBcdFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG4gXHRcdGlvdW5tYXAobWFkZHIpO1xuQEAgLTcyNTQsNyArNzI1OSw4IEBAIHN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuIFx0XHRcdGlmICh2bWEtXHUwMDNldm1fb3BzIFx1MDAyNlx1MDAyNiB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2VzcylcbiBcdFx0XHRcdGJ5dGVzID0gdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VhY2Nlc3Modm1hLCBhZGRyLCBidWYsXG4tXHRcdFx0XHRcdFx0XHQgICAgbGVuLCB3cml0ZSk7XG4rXHRcdFx0XHRcdFx0XHQgICAgbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKGFkZHIpKSxcbitcdFx0XHRcdFx0XHRcdCAgICB3cml0ZSk7XG4gI2VuZGlmXG4gXHRcdFx0aWYgKGJ5dGVzIFx1MDAzYz0gMClcbiBcdFx0XHRcdGJyZWFrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6MDAuODUyMTE5MjA4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODU5MTc0MjE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIHRvb2xzLiBGaXJzdCwgYSBxdWljayBvdmVydmlldyB0byBnZXQgb3JpZW50ZWQ6IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGEgY2hhbmdlIHdpdGhpbiB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gYG1tL21lbW9yeS5jYC4gTXkgaW5pdGlhbCBzY2FuIGhpZ2hsaWdodHMgdHdvIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZDogYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGFuZCBgX19hY2Nlc3NfcmVtb3RlX3ZtYC4gTm93LCBJIHdhbnQgdG8gem9vbSBpbiBhbmQgZXhhbWluZSB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGVzZSBjaGFuZ2VzIGluIGBtbS9tZW1vcnkuY2AgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaW1wYWN0IGJldHRlci4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZnJhbWV3b3JrIGFuZCBjb250ZXh0IHRvIGFuYWx5emUgYW55IGZ1bmN0aW9uYWwgdXBkYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMwNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6MDkuNDQzODY1NTc4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE2MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcxNTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MTUwOlxcdCAqIEB3cml0ZTogc2V0IHRvIEZPTExfV1JJVEUgd2hlbiB3cml0aW5nLCBvdGhlcndpc2UgcmVhZGluZ1xcbjcxNTE6XFx0ICpcXG43MTUyOlxcdCAqIFRoaXMgaXMgYSBnZW5lcmljIGltcGxlbWVudGF0aW9uIGZvciBcXHUwMDI2dm1fb3BlcmF0aW9uc19zdHJ1Y3QuYWNjZXNzIGZvciBhblxcbjcxNTM6XFx0ICogaW9tZW0gbWFwcGluZy4gVGhpcyBjYWxsYmFjayBpcyB1c2VkIGJ5IGFjY2Vzc19wcm9jZXNzX3ZtKCkgd2hlbiB0aGUgQHZtYSBpc1xcbjcxNTQ6XFx0ICogbm90IHBhZ2UgYmFzZWQuXFxuNzE1NTpcXHQgKi9cXG43MTU2OlxcdGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuNzE1NzpcXHRcXHRcXHRcXHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSlcXG43MTU4OlxcdHtcXG43MTU5OlxcdFxcdHJlc291cmNlX3NpemVfdCBwaHlzX2FkZHI7XFxuNzE2MDpcXHRcXHRwZ3Byb3RfdCBwcm90ID0gX19wZ3Byb3QoMCk7XFxuNzE2MTpcXHRcXHR2b2lkIF9faW9tZW0gKm1hZGRyO1xcbjcxNjI6XFx0XFx0aW50IG9mZnNldCA9IG9mZnNldF9pbl9wYWdlKGFkZHIpO1xcbjcxNjM6XFx0XFx0aW50IHJldCA9IC1FSU5WQUw7XFxuNzE2NDpcXHRcXHRib29sIHdyaXRhYmxlO1xcbjcxNjU6XFx0XFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGFkZHIgfTtcXG43MTY2OlxcdFxcbjcxNjc6XFx0XFx0aWYgKGxlbiBcXHUwMDNjPSAwKVxcbjcxNjg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNzE2OTpcXHRcXG43MTcwOlxcdFxcdGxlbiA9IG1pbl90KGludCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXQpO1xcbjcxNzE6XFx0XFxuNzE3MjpcXHRyZXRyeTpcXG43MTczOlxcdFxcdGlmIChmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKSlcXG43MTc0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjcxNzU6XFx0XFx0cHJvdCA9IGFyZ3MucGdwcm90O1xcbjcxNzY6XFx0XFx0cGh5c19hZGRyID0gKHJlc291cmNlX3NpemVfdClhcmdzLnBmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbjcxNzc6XFx0XFx0d3JpdGFibGUgPSBhcmdzLndyaXRhYmxlO1xcbjcxNzg6XFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbjcxNzk6XFx0XFxuNzE4MDpcXHRcXHRpZiAoKHdyaXRlIFxcdTAwMjYgRk9MTF9XUklURSkgXFx1MDAyNlxcdTAwMjYgIXdyaXRhYmxlKVxcbjcxODE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzE4MjpcXHRcXG43MTgzOlxcdFxcdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9TSVpFLCBwcm90KTtcXG43MTg0OlxcdFxcdGlmICghbWFkZHIpXFxuNzE4NTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG43MTg2OlxcdFxcbjcxODc6XFx0XFx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpKVxcbjcxODg6XFx0XFx0XFx0Z290byBvdXRfdW5tYXA7XFxuNzE4OTpcXHRcXG43MTkwOlxcdFxcdGlmICgocGdwcm90X3ZhbChwcm90KSAhPSBwZ3Byb3RfdmFsKGFyZ3MucGdwcm90KSkgfHxcXG43MTkxOlxcdFxcdCAgICAocGh5c19hZGRyICE9ICgocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKSB8fFxcbjcxOTI6XFx0XFx0ICAgICh3cml0YWJsZSAhPSBhcmdzLndyaXRhYmxlKSkge1xcbjcxOTM6XFx0XFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbjcxOTQ6XFx0XFx0XFx0aW91bm1hcChtYWRkcik7XFxuNzE5NTpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjcxOTY6XFx0XFx0fVxcbjcxOTc6XFx0XFxuNzE5ODpcXHRcXHRpZiAod3JpdGUpXFxuNzE5OTpcXHRcXHRcXHRtZW1jcHlfdG9pbyhtYWRkciArIG9mZnNldCwgYnVmLCBsZW4pO1xcbjcyMDA6XFx0XFx0ZWxzZVxcbjcyMDE6XFx0XFx0XFx0bWVtY3B5X2Zyb21pbyhidWYsIG1hZGRyICsgb2Zmc2V0LCBsZW4pO1xcbjcyMDI6XFx0XFx0cmV0ID0gbGVuO1xcbjcyMDM6XFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbjcyMDQ6XFx0b3V0X3VubWFwOlxcbjcyMDU6XFx0XFx0aW91bm1hcChtYWRkcik7XFxuNzIwNjpcXHRcXG43MjA3OlxcdFxcdHJldHVybiByZXQ7XFxuNzIwODpcXHR9XFxuNzIwOTpcXHRFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2FjY2Vzc19waHlzKTtcXG43MjEwOlxcdCNlbmRpZlxcbjcyMTE6XFx0XFxuNzIxMjpcXHQvKlxcbjcyMTM6XFx0ICogQWNjZXNzIGFub3RoZXIgcHJvY2VzcycgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cXG43MjE0OlxcdCAqL1xcbjcyMTU6XFx0c3RhdGljIGludCBfX2FjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG43MjE2OlxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcXG43MjE3OlxcdHtcXG43MjE4OlxcdFxcdHZvaWQgKm9sZF9idWYgPSBidWY7XFxuNzIxOTpcXHRcXHRpbnQgd3JpdGUgPSBndXBfZmxhZ3MgXFx1MDAyNiBGT0xMX1dSSVRFO1xcbjcyMjA6XFx0XFxuNzIyMTpcXHRcXHRpZiAobW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobW0pKVxcbjcyMjI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNzIyMzpcXHRcXG43MjI0OlxcdFxcdC8qIFVudGFnIHRoZSBhZGRyZXNzIGJlZm9yZSBsb29raW5nIHVwIHRoZSBWTUEgKi9cXG43MjI1OlxcdFxcdGFkZHIgPSB1bnRhZ2dlZF9hZGRyX3JlbW90ZShtbSwgYWRkcik7XFxuNzIyNjpcXHRcXG43MjI3OlxcdFxcdC8qIEF2b2lkIHRyaWdnZXJpbmcgdGhlIHRlbXBvcmFyeSB3YXJuaW5nIGluIF9fZ2V0X3VzZXJfcGFnZXMgKi9cXG43MjI4OlxcdFxcdGlmICghdm1hX2xvb2t1cChtbSwgYWRkcikgXFx1MDAyNlxcdTAwMjYgIWV4cGFuZF9zdGFjayhtbSwgYWRkcikpXFxuNzIyOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG43MjMwOlxcdFxcbjcyMzE6XFx0XFx0LyogaWdub3JlIGVycm9ycywganVzdCBjaGVjayBob3cgbXVjaCB3YXMgc3VjY2Vzc2Z1bGx5IHRyYW5zZmVycmVkICovXFxuNzIzMjpcXHRcXHR3aGlsZSAobGVuKSB7XFxuNzIzMzpcXHRcXHRcXHRpbnQgYnl0ZXMsIG9mZnNldDtcXG43MjM0OlxcdFxcdFxcdHZvaWQgKm1hZGRyO1xcbjcyMzU6XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG43MjM2OlxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gTlVMTDtcXG43MjM3OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gZ2V0X3VzZXJfcGFnZV92bWFfcmVtb3RlKG1tLCBhZGRyLFxcbjcyMzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBndXBfZmxhZ3MsIFxcdTAwMjZ2bWEpO1xcbjcyMzk6XFx0XFxuNzI0MDpcXHRcXHRcXHRpZiAoSVNfRVJSKHBhZ2UpKSB7XFxuNzI0MTpcXHRcXHRcXHRcXHQvKiBXZSBtaWdodCBuZWVkIHRvIGV4cGFuZCB0aGUgc3RhY2sgdG8gYWNjZXNzIGl0ICovXFxuNzI0MjpcXHRcXHRcXHRcXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyKTtcXG43MjQzOlxcdFxcdFxcdFxcdGlmICghdm1hKSB7XFxuNzI0NDpcXHRcXHRcXHRcXHRcXHR2bWEgPSBleHBhbmRfc3RhY2sobW0sIGFkZHIpO1xcbjcyNDU6XFx0XFxuNzI0NjpcXHRcXHRcXHRcXHRcXHQvKiBtbWFwX2xvY2sgd2FzIGRyb3BwZWQgb24gZmFpbHVyZSAqL1xcbjcyNDc6XFx0XFx0XFx0XFx0XFx0aWYgKCF2bWEpXFxuNzI0ODpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcXG43MjQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMDowOS40NDQxODUwODhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjczMTI1NTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gdGhlIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGNlcnRhaW4gc2VjdGlvbnMgb2YgdGhpcyBjb2RlIGFyZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBUbyBkbyB0aGF0LCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gbGluZXMgYXJvdW5kIHRoZSA3MTQwIG1hcmsuIEknbGwgYmUgbG9va2luZyBmb3IgYCNpZmRlZmAgZGlyZWN0aXZlcyBvciBhbnl0aGluZyB0aGF0IGxvb2tzIGxpa2UgcHJlcHJvY2Vzc29yIGd1YXJkcyB0aGF0IGNvbnRyb2wgd2hldGhlciBhIHBhcnRpY3VsYXIgYmxvY2sgb2YgY29kZSBnZXRzIGluY2x1ZGVkIGR1cmluZyBjb21waWxhdGlvbi4gVGhlc2UgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBkaWZmZXJlbnQgYnVpbGQgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMgdGhhdCBhcmUgYmVpbmcgc2VsZWN0aXZlbHkgZW5hYmxlZCBvciBkaXNhYmxlZC4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHNlbnNlIG9mIHdoaWNoIHBhcnRzIG9mIHRoZSBjb2RlIGFyZSBhY3RpdmUgdW5kZXIgYSBwYXJ0aWN1bGFyIHNldCBvZiBjb21waWxlciBmbGFncyBvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHdoaWNoIHdpbGwgYmUgdml0YWwgZm9yIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDMzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMDoxNC4xMTczMTI4NDNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjEzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzEzNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzEzNTpcXHR7XFxuNzEzNjpcXHRcXHRpZiAoYXJncy1cXHUwMDNlbG9jaylcXG43MTM3OlxcdFxcdFxcdHNwaW5fdW5sb2NrKGFyZ3MtXFx1MDAzZWxvY2spO1xcbjcxMzg6XFx0XFx0aWYgKGFyZ3MtXFx1MDAzZXB0ZXApXFxuNzEzOTpcXHRcXHRcXHRwdGVfdW5tYXAoYXJncy1cXHUwMDNlcHRlcCk7XFxuNzE0MDpcXHR9XFxuNzE0MTpcXHRFWFBPUlRfU1lNQk9MX0dQTChmb2xsb3dfcGZubWFwX2VuZCk7XFxuNzE0MjpcXHRcXG43MTQzOlxcdCNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG43MTQ0OlxcdC8qKlxcbjcxNDU6XFx0ICogZ2VuZXJpY19hY2Nlc3NfcGh5cyAtIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIGlvbWVtIG1tYXAgYWNjZXNzXFxuNzE0NjpcXHQgKiBAdm1hOiB0aGUgdm1hIHRvIGFjY2Vzc1xcbjcxNDc6XFx0ICogQGFkZHI6IHVzZXJzcGFjZSBhZGRyZXNzLCBub3QgcmVsYXRpdmUgb2Zmc2V0IHdpdGhpbiBAdm1hXFxuNzE0ODpcXHQgKiBAYnVmOiBidWZmZXIgdG8gcmVhZC93cml0ZVxcbjcxNDk6XFx0ICogQGxlbjogbGVuZ3RoIG9mIHRyYW5zZmVyXFxuNzE1MDpcXHQgKiBAd3JpdGU6IHNldCB0byBGT0xMX1dSSVRFIHdoZW4gd3JpdGluZywgb3RoZXJ3aXNlIHJlYWRpbmdcXG43MTUxOlxcdCAqXFxuNzE1MjpcXHQgKiBUaGlzIGlzIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgXFx1MDAyNnZtX29wZXJhdGlvbnNfc3RydWN0LmFjY2VzcyBmb3IgYW5cXG43MTUzOlxcdCAqIGlvbWVtIG1hcHBpbmcuIFRoaXMgY2FsbGJhY2sgaXMgdXNlZCBieSBhY2Nlc3NfcHJvY2Vzc192bSgpIHdoZW4gdGhlIEB2bWEgaXNcXG43MTU0OlxcdCAqIG5vdCBwYWdlIGJhc2VkLlxcbjcxNTU6XFx0ICovXFxuNzE1NjpcXHRpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbjcxNTc6XFx0XFx0XFx0XFx0dm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpXFxuNzE1ODpcXHR7XFxuNzE1OTpcXHRcXHRyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyO1xcbjcxNjA6XFx0XFx0cGdwcm90X3QgcHJvdCA9IF9fcGdwcm90KDApO1xcbjcxNjE6XFx0XFx0dm9pZCBfX2lvbWVtICptYWRkcjtcXG43MTYyOlxcdFxcdGludCBvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShhZGRyKTtcXG43MTYzOlxcdFxcdGludCByZXQgPSAtRUlOVkFMO1xcbjcxNjQ6XFx0XFx0Ym9vbCB3cml0YWJsZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6MTQuMTE3NTc2NTIzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU0MTA0ODAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSByZXF1ZXN0LCB0aGlua2luZyBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IEFjY2VzcyBQYXR0ZXJucyoqXG5cbk9rYXksIHNvIHRoZSBnb2FsIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zIHdpdGhpbiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gdHJhY2UgYW5kIGFuYWx5emUgY2FsbHMgdG8gZnVuY3Rpb25zIHJlbGF0ZWQgdG8gcmVtb3RlIG1lbW9yeSBhY2Nlc3MuIFNwZWNpZmljYWxseSwgdGhlIHJlcXVlc3Qgd2FudHMgbWUgdG8gbG9vayBmb3IgdXNhZ2VzIG9mIGBnZW5lcmljX2FjY2Vzc19waHlzYC4gVGhpcyBsaWtlbHkgaW5kaWNhdGVzIGludGVyYWN0aW9ucyB3aXRoIHBoeXNpY2FsIG1lbW9yeSwgcGVyaGFwcyBkZXZpY2UgaW50ZXJhY3Rpb24gb3IgZGlyZWN0IG1lbW9yeSBhY2Nlc3MuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNhbGxzLlxuXG5CZXlvbmQgdGhhdCwgdGhlIHJlcXVlc3QgZXhwYW5kcyB0aGUgc2NvcGUgdG8gaW5jbHVkZSB2YXJpYXRpb25zIG9mIHJlbW90ZSBWTSBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGJlIGluY2x1c2l2ZSBhbmQgbG9vayBmb3IgYF9fYWNjZXNzX3JlbW90ZV92bWAsIGBhY2Nlc3NfcmVtb3RlX3ZtYCwgYW5kIGBhY2Nlc3NfcHJvY2Vzc192bWAuIFRoZXNlIGFsbCBwb2ludCB0byB0aGUgcmV0cmlldmFsIG9yIG1vZGlmaWNhdGlvbiBvZiBtZW1vcnkgZnJvbSBhIHZpcnR1YWwgbWFjaGluZSBvciBhIHNlcGFyYXRlIHByb2Nlc3MuIFRoZSBnb2FsIGlzIGxpa2VseSB0byBmaW5kIGNhc2VzIG9mIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIGRlYnVnZ2luZyBvcHBvcnR1bml0aWVzLCBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyByZWxhdGVkIHRvIHRoZXNlIGZ1bmN0aW9ucy4gSXQncyBhYm91dCBidWlsZGluZyBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSBhbmQgaG93IHJlbW90ZSBtZW1vcnkgYWNjZXNzIGlzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byBjb25zaWRlciBhbGwgcGVybXV0YXRpb25zIG9mIGhvdyB0aGVzZSBjYWxscyBhcmUgaGFuZGxlZCBhbmQgd2hhdCBzZWN1cml0eSBmZWF0dXJlcyBtYXkgYmUgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTczMCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6MTYuNjU4NjI2ODcyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODIxODY2MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2VuZXJpY19hY2Nlc3NfcGh5c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NkeC9jZHguYz02NjI9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBjZHhfcGh5c192bV9vcHMgPSB7XFxuZHJpdmVycy9jZHgvY2R4LmMtNjYzLSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL2NkeC9jZHguYzo2NjQ6XFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXFxuZHJpdmVycy9jZHgvY2R4LmMtNjY1LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9jaGFyL21lbS5jPTMxOT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1tYXBfbWVtX29wcyA9IHtcXG5kcml2ZXJzL2NoYXIvbWVtLmMtMzIwLSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL2NoYXIvbWVtLmM6MzIxOlxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzXFxuZHJpdmVycy9jaGFyL21lbS5jLTMyMi0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYz04MDU9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhZnVfdm1hX29wcyA9IHtcXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmMtODA2LSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmM6ODA3OlxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYy04MDgtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL3BjaS9tbWFwLmM9MTg9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBwY2lfcGh5c192bV9vcHMgPSB7XFxuZHJpdmVycy9wY2kvbW1hcC5jLTE5LSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL3BjaS9tbWFwLmM6MjA6XFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXFxuZHJpdmVycy9wY2kvbW1hcC5jLTIxLSNlbmRpZlxcbi0tXFxuZHJpdmVycy91aW8vdWlvLmM9NzM2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdWlvX3BoeXNpY2FsX3ZtX29wcyA9IHtcXG5kcml2ZXJzL3Vpby91aW8uYy03MzctI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvdWlvL3Vpby5jOjczODpcXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcXG5kcml2ZXJzL3Vpby91aW8uYy03MzktI2VuZGlmXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9ODA2PXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtODU4LVxcdC8qIGNhbGxlZCBieSBhY2Nlc3NfcHJvY2Vzc192bSB3aGVuIGdldF91c2VyX3BhZ2VzKCkgZmFpbHMsIHR5cGljYWxseVxcbmluY2x1ZGUvbGludXgvbW0uaDo4NTk6XFx0ICogZm9yIHVzZSBieSBzcGVjaWFsIFZNQXMuIFNlZSBhbHNvIGdlbmVyaWNfYWNjZXNzX3BoeXMoKSBmb3IgYSBnZW5lcmljXFxuaW5jbHVkZS9saW51eC9tbS5oLTg2MC1cXHQgKiBpbXBsZW1lbnRhdGlvbiB1c2VmdWwgZm9yIGFueSBpb21lbSBtYXBwaW5nLlxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTMyMzQ9Y29weV9wYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hKTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MzIzNTppbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmluY2x1ZGUvbGludXgvbW0uaC0zMjM2LVxcdFxcdFxcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKTtcXG4tLVxcbm1tL21lbW9yeS5jPTcxNDE9RVhQT1JUX1NZTUJPTF9HUEwoZm9sbG93X3Bmbm1hcF9lbmQpO1xcbi0tXFxubW0vbWVtb3J5LmMtNzE0NC0vKipcXG5tbS9tZW1vcnkuYzo3MTQ1OiAqIGdlbmVyaWNfYWNjZXNzX3BoeXMgLSBnZW5lcmljIGltcGxlbWVudGF0aW9uIGZvciBpb21lbSBtbWFwIGFjY2Vzc1xcbm1tL21lbW9yeS5jLTcxNDYtICogQHZtYTogdGhlIHZtYSB0byBhY2Nlc3NcXG4tLVxcbm1tL21lbW9yeS5jLTcxNTUtICovXFxubW0vbWVtb3J5LmM6NzE1NjppbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL21lbW9yeS5jLTcxNTctXFx0XFx0XFx0dm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpXFxuLS1cXG5tbS9tZW1vcnkuYy03MjA4LX1cXG5tbS9tZW1vcnkuYzo3MjA5OkVYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfYWNjZXNzX3BoeXMpO1xcbm1tL21lbW9yeS5jLTcyMTAtI2VuZGlmXFxuLS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oPTY0MD1zdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qge1xcbi0tXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC02OTItXFx0LyogY2FsbGVkIGJ5IGFjY2Vzc19wcm9jZXNzX3ZtIHdoZW4gZ2V0X3VzZXJfcGFnZXMoKSBmYWlscywgdHlwaWNhbGx5XFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaDo2OTM6XFx0ICogZm9yIHVzZSBieSBzcGVjaWFsIFZNQXMuIFNlZSBhbHNvIGdlbmVyaWNfYWNjZXNzX3BoeXMoKSBmb3IgYSBnZW5lcmljXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC02OTQtXFx0ICogaW1wbGVtZW50YXRpb24gdXNlZnVsIGZvciBhbnkgaW9tZW0gbWFwcGluZy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6MTguNDQwODIwMjMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAxMzY0MjM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFJlbW90ZSBWTSBBY2Nlc3MgUGF0aCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgd2hlbiBgX19hY2Nlc3NfcmVtb3RlX3ZtYCBnZXRzIGludm9sdmVkLCBzcGVjaWZpY2FsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB2aXJ0dWFsIG1lbW9yeSBhcmVhIChgdm1hYCkgYW5kIGl0cyBvcGVyYXRpb25zIChgdm1fb3BzYCkuIEknbSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBjYWxscyB0byBgdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VhY2Nlc3NgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmF2aWdhdGUgdG8gYG1tL21lbW9yeS5jYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmVzIDcyNDAgdG8gNzMwMC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlc2UgdHlwZXMgb2YgbWVtb3J5IGFjY2VzcyBpbnRlcmFjdGlvbnMgYXJlIGhhbmRsZWQuIEkgZXhwZWN0IHRvIHNlZSB0aGUgY29yZSBsb2dpYyB0aGVyZSwgd2hlcmUgdGhlIFZNIG9wZXJhdGlvbiBpcyBkaXNwYXRjaGVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludCBJIG5lZWQgdG8gZm9sbG93IHRoZSB0aHJlYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMDoyMC40NTQ0NjU2NzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyNDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjcyNDA6XFx0XFx0XFx0aWYgKElTX0VSUihwYWdlKSkge1xcbjcyNDE6XFx0XFx0XFx0XFx0LyogV2UgbWlnaHQgbmVlZCB0byBleHBhbmQgdGhlIHN0YWNrIHRvIGFjY2VzcyBpdCAqL1xcbjcyNDI6XFx0XFx0XFx0XFx0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XFxuNzI0MzpcXHRcXHRcXHRcXHRpZiAoIXZtYSkge1xcbjcyNDQ6XFx0XFx0XFx0XFx0XFx0dm1hID0gZXhwYW5kX3N0YWNrKG1tLCBhZGRyKTtcXG43MjQ1OlxcdFxcbjcyNDY6XFx0XFx0XFx0XFx0XFx0LyogbW1hcF9sb2NrIHdhcyBkcm9wcGVkIG9uIGZhaWx1cmUgKi9cXG43MjQ3OlxcdFxcdFxcdFxcdFxcdGlmICghdm1hKVxcbjcyNDg6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XFxuNzI0OTpcXHRcXG43MjUwOlxcdFxcdFxcdFxcdFxcdC8qIFRyeSBhZ2FpbiBpZiBzdGFjayBleHBhbnNpb24gd29ya2VkICovXFxuNzI1MTpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43MjUyOlxcdFxcdFxcdFxcdH1cXG43MjUzOlxcdFxcbjcyNTQ6XFx0XFx0XFx0XFx0LypcXG43MjU1OlxcdFxcdFxcdFxcdCAqIENoZWNrIGlmIHRoaXMgaXMgYSBWTV9JTyB8IFZNX1BGTk1BUCBWTUEsIHdoaWNoXFxuNzI1NjpcXHRcXHRcXHRcXHQgKiB3ZSBjYW4gYWNjZXNzIHVzaW5nIHNsaWdodGx5IGRpZmZlcmVudCBjb2RlLlxcbjcyNTc6XFx0XFx0XFx0XFx0ICovXFxuNzI1ODpcXHRcXHRcXHRcXHRieXRlcyA9IDA7XFxuNzI1OTpcXHQjaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxuNzI2MDpcXHRcXHRcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9vcHMgXFx1MDAyNlxcdTAwMjYgdm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZWFjY2VzcylcXG43MjYxOlxcdFxcdFxcdFxcdFxcdGJ5dGVzID0gdm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZWFjY2Vzcyh2bWEsIGFkZHIsIGJ1ZixcXG43MjYyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBtaW5fdChpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2UoYWRkcikpLFxcbjcyNjM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHdyaXRlKTtcXG43MjY0OlxcdCNlbmRpZlxcbjcyNjU6XFx0XFx0XFx0XFx0aWYgKGJ5dGVzIFxcdTAwM2M9IDApXFxuNzI2NjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG43MjY3OlxcdFxcdFxcdH0gZWxzZSB7XFxuNzI2ODpcXHRcXHRcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuNzI2OTpcXHRcXHRcXHRcXHRieXRlcyA9IGxlbjtcXG43MjcwOlxcdFxcdFxcdFxcdG9mZnNldCA9IGFkZHIgXFx1MDAyNiAoUEFHRV9TSVpFLTEpO1xcbjcyNzE6XFx0XFx0XFx0XFx0aWYgKGJ5dGVzIFxcdTAwM2UgUEFHRV9TSVpFLW9mZnNldClcXG43MjcyOlxcdFxcdFxcdFxcdFxcdGJ5dGVzID0gUEFHRV9TSVpFLW9mZnNldDtcXG43MjczOlxcdFxcbjcyNzQ6XFx0XFx0XFx0XFx0bWFkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBmb2xpb19wYWdlX2lkeChmb2xpbywgcGFnZSkgKiBQQUdFX1NJWkUpO1xcbjcyNzU6XFx0XFx0XFx0XFx0aWYgKHdyaXRlKSB7XFxuNzI3NjpcXHRcXHRcXHRcXHRcXHRjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXFxuNzI3NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIG1hZGRyICsgb2Zmc2V0LCBidWYsIGJ5dGVzKTtcXG43Mjc4OlxcdFxcdFxcdFxcdFxcdGZvbGlvX21hcmtfZGlydHlfbG9jayhmb2xpbyk7XFxuNzI3OTpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjcyODA6XFx0XFx0XFx0XFx0XFx0Y29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXFxuNzI4MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgYnVmLCBtYWRkciArIG9mZnNldCwgYnl0ZXMpO1xcbjcyODI6XFx0XFx0XFx0XFx0fVxcbjcyODM6XFx0XFx0XFx0XFx0Zm9saW9fcmVsZWFzZV9rbWFwKGZvbGlvLCBtYWRkcik7XFxuNzI4NDpcXHRcXHRcXHR9XFxuNzI4NTpcXHRcXHRcXHRsZW4gLT0gYnl0ZXM7XFxuNzI4NjpcXHRcXHRcXHRidWYgKz0gYnl0ZXM7XFxuNzI4NzpcXHRcXHRcXHRhZGRyICs9IGJ5dGVzO1xcbjcyODg6XFx0XFx0fVxcbjcyODk6XFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuNzI5MDpcXHRcXG43MjkxOlxcdFxcdHJldHVybiBidWYgLSBvbGRfYnVmO1xcbjcyOTI6XFx0fVxcbjcyOTM6XFx0XFxuNzI5NDpcXHQvKipcXG43Mjk1OlxcdCAqIGFjY2Vzc19yZW1vdGVfdm0gLSBhY2Nlc3MgYW5vdGhlciBwcm9jZXNzJyBhZGRyZXNzIHNwYWNlXFxuNzI5NjpcXHQgKiBAbW06XFx0XFx0dGhlIG1tX3N0cnVjdCBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2VcXG43Mjk3OlxcdCAqIEBhZGRyOlxcdHN0YXJ0IGFkZHJlc3MgdG8gYWNjZXNzXFxuNzI5ODpcXHQgKiBAYnVmOlxcdHNvdXJjZSBvciBkZXN0aW5hdGlvbiBidWZmZXJcXG43Mjk5OlxcdCAqIEBsZW46XFx0bnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIwOjIwLjQ1NDczODYwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODQwMDc1NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZW1vdGUgVk0gQWNjZXNzIE1lY2hhbmlzbXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBmdW5jdGlvbiBgX19hY2Nlc3NfcmVtb3RlX3ZtYCBpcyBhdCB0aGUgaGVhcnQgb2YgcmVtb3RlIFZNIGFjY2VzcywgYW5kIGl0J3MgYmVpbmcgY2FsbGVkIGJ5IGEgdmFyaWV0eSBvZiBtZXRob2RzOiBgYWNjZXNzX3JlbW90ZV92bWAgaXRzZWxmLCBgYWNjZXNzX3Byb2Nlc3Nfdm1gLCBgcHRyYWNlYCwgcmVhZGluZyBkaXJlY3RseSBmcm9tIGAvcHJvYy8kcGlkL21lbWAsIGFuZCBzbyBvbi5cblxuVGhlIGNyaXRpY2FsIHBvaW50IGlzIGhvdyB0aGlzIGFjY2VzcyBiZWhhdmVzIHdoZW4gaXQgdG91Y2hlcyBhIFZpcnR1YWwgTWVtb3J5IEFyZWEgKFZNQSkgdGhhdCBoYXMgYSBzcGVjaWZpYyBgLmFjY2Vzc2AgbWV0aG9kIGFzc2lnbmVkIHRvIGl0LiAgVGhhdCBpbmNsdWRlcyBhcmVhcyBsaWtlIGAvZGV2L21lbWAsIG1lbW9yeSBtYXBwZWQgUENJIGRldmljZXMsIFVzZXIgSS9PIChVSU8pIHJlZ2lvbnMsIGFuZCBwb3RlbnRpYWxseSB0aG9zZSBoYW5kbGVkIGJ5IGBnZW5lcmljX2FjY2Vzc19waHlzYC4gSW4gdGhlc2UgY2FzZXMsIHRoZSBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgZnVuY3Rpb24sIG9yIHRoZSBWTUHigJlzIGB2bV9vcHMtXHUwMDNlYWNjZXNzYCBmdW5jdGlvbiBpcyBleGVjdXRlZC5cblxuU2luY2UgSSdtIHdvcmtpbmcgd2l0aCBhbiBBTUQ2NCBzeXN0ZW0sIGFuZCBhbHNvIGF3YXJlIG9mIG90aGVyIGFyY2hpdGVjdHVyZXMsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcXVpY2tseTogRG9lcyB0aGUgYXJjaGl0ZWN0dXJlIGluIHF1ZXN0aW9uICphY3R1YWxseSogZGVmaW5lIGBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RgPyAgVGhpcyBpcyBhbiBpbXBvcnRhbnQgZGV0YWlsLCBhcyBpdCBwbGF5cyBhIHJvbGUgaW4gcHJvdGVjdGVkIEkvTyByZW1hcHBpbmcuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBkZWZpbml0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjMwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6MjYuMjk0ODE3ODkyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc3NTAwMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkhBVkVfSU9SRU1BUF9QUk9UXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZmVhdHVyZXMvdm0vaW9yZW1hcF9wcm90L2FyY2gtc3VwcG9ydC50eHQtMi0jIEZlYXR1cmUgbmFtZTogICAgICAgICAgaW9yZW1hcF9wcm90XFxuRG9jdW1lbnRhdGlvbi9mZWF0dXJlcy92bS9pb3JlbWFwX3Byb3QvYXJjaC1zdXBwb3J0LnR4dDozOiMgICAgICAgICBLY29uZmlnOiAgICAgICBIQVZFX0lPUkVNQVBfUFJPVFxcbkRvY3VtZW50YXRpb24vZmVhdHVyZXMvdm0vaW9yZW1hcF9wcm90L2FyY2gtc3VwcG9ydC50eHQtNC0jICAgICAgICAgZGVzY3JpcHRpb246ICAgYXJjaCBoYXMgaW9yZW1hcF9wcm90KClcXG4tLVxcbmFyY2gvS2NvbmZpZz0yNzI9Y29uZmlnIFVTRVJfUkVUVVJOX05PVElGSUVSXFxuLS1cXG5hcmNoL0tjb25maWctMjc4LVxcbmFyY2gvS2NvbmZpZzoyNzk6Y29uZmlnIEhBVkVfSU9SRU1BUF9QUk9UXFxuYXJjaC9LY29uZmlnLTI4MC1cXHRib29sXFxuLS1cXG5hcmNoL2FyYy9LY29uZmlnPTY9Y29uZmlnIEFSQ1xcbi0tXFxuYXJjaC9hcmMvS2NvbmZpZy0zOC1cXHRzZWxlY3QgSEFWRV9ERUJVR19LTUVNTEVBS1xcbmFyY2gvYXJjL0tjb25maWc6Mzk6XFx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UXFxuYXJjaC9hcmMvS2NvbmZpZy00MC1cXHRzZWxlY3QgSEFWRV9LRVJORUxfR1pJUFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMjEwLVxcdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlQgaWYgUEVSRl9FVkVOVFNcXG5hcmNoL2FybTY0L0tjb25maWc6MjExOlxcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVFxcbmFyY2gvYXJtNjQvS2NvbmZpZy0yMTItXFx0c2VsZWN0IEhBVkVfSVJRX1RJTUVfQUNDT1VOVElOR1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctMTU3LVxcdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlQgaWYgUEVSRl9FVkVOVFNcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjE1ODpcXHRzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1RcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE1OS1cXHRzZWxlY3QgSEFWRV9JUlFfRVhJVF9PTl9JUlFfU1RBQ0tcXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnPTI9Y29uZmlnIE1JUFNcXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnLTc2LVxcdHNlbGVjdCBIQVZFX0dDQ19QTFVHSU5TXFxuYXJjaC9taXBzL0tjb25maWc6Nzc6XFx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UXFxuYXJjaC9taXBzL0tjb25maWctNzgtXFx0c2VsZWN0IEhBVkVfSVJRX0VYSVRfT05fSVJRX1NUQUNLXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMjYxLVxcdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlRcXHRcXHRpZiBQRVJGX0VWRU5UUyBcXHUwMDI2XFx1MDAyNiAoUFBDX0JPT0szUyB8fCBQUENfOHh4KVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjI2MjpcXHRzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1RcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0yNjMtXFx0c2VsZWN0IEhBVkVfSVJRX1RJTUVfQUNDT1VOVElOR1xcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTExOC1cXHRzZWxlY3QgR0VORVJJQ19JT1JFTUFQIGlmIE1NVVxcbmFyY2gvcmlzY3YvS2NvbmZpZzoxMTk6XFx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UIGlmIE1NVVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMjAtXFx0c2VsZWN0IEdFTkVSSUNfSVJRX0lQSSBpZiBTTVBcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTc4PWNvbmZpZyBTMzkwXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy0yMjUtXFx0c2VsZWN0IEhBVkVfR0NDX1BMVUdJTlNcXG5hcmNoL3MzOTAvS2NvbmZpZzoyMjY6XFx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UIGlmIFBDSVxcbmFyY2gvczM5MC9LY29uZmlnLTIyNy1cXHRzZWxlY3QgSEFWRV9LRVJORUxfQlpJUDJcXG4tLVxcbmFyY2gvc2gvS2NvbmZpZz0yPWNvbmZpZyBTVVBFUkhcXG4tLVxcbmFyY2gvc2gvS2NvbmZpZy00My1cXHRzZWxlY3QgSEFWRV9IV19CUkVBS1BPSU5UXFxuYXJjaC9zaC9LY29uZmlnOjQ0OlxcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVCBpZiBNTVUgXFx1MDAyNlxcdTAwMjYgIVgyVExCXFxuYXJjaC9zaC9LY29uZmlnLTQ1LVxcdHNlbGVjdCBIQVZFX0tFUk5FTF9CWklQMlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTI1MS1cXHRzZWxlY3QgSEFWRV9IV19CUkVBS1BPSU5UXFxuYXJjaC94ODYvS2NvbmZpZzoyNTI6XFx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UXFxuYXJjaC94ODYvS2NvbmZpZy0yNTMtXFx0c2VsZWN0IEhBVkVfSVJRX0VYSVRfT05fSVJRX1NUQUNLXFx0aWYgWDg2XzY0XFxuLS1cXG5kcml2ZXJzL2NkeC9jZHguYz02NjI9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBjZHhfcGh5c192bV9vcHMgPSB7XFxuZHJpdmVycy9jZHgvY2R4LmM6NjYzOiNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL2NkeC9jZHguYy02NjQtXFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXFxuLS1cXG5kcml2ZXJzL2NoYXIvbWVtLmM9MzE5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF9tZW1fb3BzID0ge1xcbmRyaXZlcnMvY2hhci9tZW0uYzozMjA6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvY2hhci9tZW0uYy0zMjEtXFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXNcXG4tLVxcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYz04MDU9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhZnVfdm1hX29wcyA9IHtcXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmM6ODA2OiNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmMtODA3LVxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxcbi0tXFxuZHJpdmVycy9wY2kvbW1hcC5jPTE4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGNpX3BoeXNfdm1fb3BzID0ge1xcbmRyaXZlcnMvcGNpL21tYXAuYzoxOTojaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxuZHJpdmVycy9wY2kvbW1hcC5jLTIwLVxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxcbi0tXFxuZHJpdmVycy91aW8vdWlvLmM9NzM2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdWlvX3BoeXNpY2FsX3ZtX29wcyA9IHtcXG5kcml2ZXJzL3Vpby91aW8uYzo3Mzc6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvdWlvL3Vpby5jLTczOC1cXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcXG4tLVxcbm1tL21lbW9yeS5jPTcxNDE9RVhQT1JUX1NZTUJPTF9HUEwoZm9sbG93X3Bmbm1hcF9lbmQpO1xcbm1tL21lbW9yeS5jLTcxNDItXFxubW0vbWVtb3J5LmM6NzE0MzojaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxubW0vbWVtb3J5LmMtNzE0NC0vKipcXG4tLVxcbm1tL21lbW9yeS5jPTcyMTU9c3RhdGljIGludCBfX2FjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbW9yeS5jLTcyNTgtXFx0XFx0XFx0Ynl0ZXMgPSAwO1xcbm1tL21lbW9yeS5jOjcyNTk6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbm1tL21lbW9yeS5jLTcyNjAtXFx0XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fb3BzIFxcdTAwMjZcXHUwMDI2IHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VhY2Nlc3MpXFxuLS1cXG5tbS9tZW1vcnkuYz03MzQwPXN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbW9yeS5jLTczNjktXFx0XFx0XFx0ICogVHJlYXQgYXMgYSB0b3RhbCBmYWlsdXJlIGZvciBub3cgdW50aWwgd2UgZGVjaWRlIGhvd1xcbm1tL21lbW9yeS5jOjczNzA6XFx0XFx0XFx0ICogdG8gaGFuZGxlIHRoZSBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgY2FzZSBhbmRcXG5tbS9tZW1vcnkuYy03MzcxLVxcdFxcdFxcdCAqIHN0YWNrIGV4cGFuc2lvbi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6MjguMDcyMzI2NjEyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxODI0MDA4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQ6IE1NL01lbW9yeS5jIC0gVnVsbmVyYWJpbGl0eSBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBPbiB4ODZfNjQsIGBIQVZFX0lPUkVNQVBfUFJPVGAgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZC4gVGhhdCdzIGEga2V5IGRldGFpbCB0byBrZWVwIGluIG1pbmQsIHJpZ2h0PyBOb3csIHRoZSBjb3JlIG9mIHRoaXMgaW52ZXN0aWdhdGlvbiBmb2N1c2VzIG9uIHRoZXNlIGNvZGUgY2hhbmdlcyBJIHNlZSBpbiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgYW5kIGBfX2FjY2Vzc19yZW1vdGVfdm1gLCBib3RoIGluIGBtbS9tZW1vcnkuY2AuXG5cbkZpcnN0LCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2Ag4oCTIGl0J3MgYmVlbiBtb2RpZmllZCBpbiB0d28gc2lnbmlmaWNhbnQgd2F5cy4gVGhlIGxlbmd0aCBjYWxjdWxhdGlvbnMgYW5kIHRoZSBgaW9yZW1hcF9wcm90YCBjYWxsIGhhdmUgYmVlbiB0b3VjaGVkLiBUaGVyZSBpcyBhIGBtaW5fdGAgY2FsbCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIGlzIHRyeWluZyB0byBzaW1wbGlmeSB0aGUgaW9yZW1hcHBpbmcsIGJ1dCBpdCBpbnRyb2R1Y2VzIGEgc3VidGxlIHNoaWZ0IHRoYXQgY291bGQgYmUgaW1wb3J0YW50LlxuXG5UaGVuIHRoZXJlJ3MgYF9fYWNjZXNzX3JlbW90ZV92bWAuIFRoZSBpbnRlcmVzdGluZyBjaGFuZ2UgaGVyZSBpbnZvbHZlcyBsaW1pdGluZyB0aGUgbGVuZ3RoIGluIGB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2Vzc2AuIFRoZSB1c2Ugb2YgYG1pbl90YCBhZ2FpbiBpcyBpbnRlcmVzdGluZywgZXNwZWNpYWxseSB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIG9mZnNldCBjYWxjdWxhdGlvbi4gVGhpcyBwb3RlbnRpYWxseSBpbnRyb2R1Y2VzIHN1YnRsZSBpbnRlZ2VyIG92ZXJmbG93LCBvdXQtb2YtYm91bmRzLCBvciBsZW5ndGggY2FsY3VsYXRpb24gaXNzdWVzLlxuXG5SZWFjaGFiaWxpdHk/IFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkLiBXZSdyZSB0YWxraW5nIGFib3V0IGNvZGUgYWNjZXNzaWJsZSB2aWEgYHB0cmFjZShQVFJBQ0VfUEVFS0RBVEEvUFRSQUNFX1BPS0VEQVRBKWAgb3IgYC9wcm9jL3BpZC9tZW1gLiBUaGluayBgL2Rldi9tZW1gLCBwaHlzaWNhbCBWTUFzLCBQRk5NQVAgVk1BcyDigJMgdGhlc2UgYXJlIGFsbCByZWFkaWx5IGF2YWlsYWJsZSBhdHRhY2sgc3VyZmFjZXMuIFRoaXMgbWFrZXMgaXQgYW4gYXR0cmFjdGl2ZSB0YXJnZXQuXG5cbklzIGl0IHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFRoZSBmYWN0IHRoYXQgdGhlIGNoYW5nZXMgYWZmZWN0IHJlbW90ZSBWTSBhY2Nlc3MgYW5kIHBoeXNpY2FsIEkvTyBtZW1vcnkgbWFwcGluZywgd2l0aCBsZW5ndGggY2FsY3VsYXRpb25zLCBwYWdlIGJvdW5kYXJ5IGNyb3NzaW5ncywgYW5kIHR5cGUgY2FzdHMsIHNjcmVhbXMgXCJmdXp6IG1lLlwiIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZXMgY2FuIGludHJvZHVjZSBzdWJ0bGUgYnVncy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIHN5bWJvbHMuIGBnZW5lcmljX2FjY2Vzc19waHlzYCBpcyBkaXJlY3RseSBtb2RpZmllZCwgYW5kIGBfX2FjY2Vzc19yZW1vdGVfdm1gIChzdGF0aWMsIHNvIGEgbGl0dGxlIGxlc3MgdmlzaWJsZSkgaXMgdXNlZC4gSXRzIGNhbGxlcnMgYXJlIGBhY2Nlc3NfcmVtb3RlX3ZtYCBhbmQgYGFjY2Vzc19wcm9jZXNzX3ZtYC4gQWx0aG91Z2ggYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGFwcGVhcnMgdG8gYmUgc3BlY2lmaWMgdG8gaW9tZW0vcGZubWFwIFZNQXMsIHRoYXQgc3RpbGwgbWFrZXMgaXQgcXVpdGUgYWNjZXNzaWJsZS5cblxuTm8gdWJpcXVpdG91cyBjYWxscyBlaXRoZXIuIFRoaXMgYWxzbyBtZWFucywgbGVzcyBwbGFjZXMgdG8gaW5qZWN0IGJ1Z3MuXG5cbkNvbmZpZ3VyYXRpb24gZmxhZ3M/IGBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RgIGlzIGhhbmRsZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSAoeDg2KSwgYnV0IHdlIHNob3VsZCBjaGVjayBpZiBhbnkgZHJpdmVyIGlzIHJlcXVpcmVkIGZvciBWTUEgY3JlYXRpb24gKGUuZy4sIGBDT05GSUdfREVWTUVNYCwgYENPTkZJR19VSU9gKSwgYnV0IGZyb20gd2hhdCBJIHJlbWVtYmVyLCBzdGFuZGFyZCBjb25maWd1cmF0aW9ucyBzaG91bGQgYWxyZWFkeSBlbmFibGUgdGhpcy4gV2Ugc2hvdWxkIGNoZWNrIHRoZXNlLCB0aG91Z2guIEFsc28sIGxldCdzIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgbGlrZSBgREVWTUVNYC5cblxuVGhpcyBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgY29kZSBjaGFuZ2VzLCB0aGUgcmVhY2hhYmlsaXR5LCBhbmQgdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGJ1Z3MgYWxsIHBvaW50IHRvIGEgd29ydGh3aGlsZSB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDE3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIwOjM0LjI1NDczMDM2NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0MzU4NjM2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVWTUVNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY2hhci9LY29uZmlnPTI0OT1jb25maWcgTlNDX0dQSU9cXG4tLVxcbmRyaXZlcnMvY2hhci9LY29uZmlnLTI1OC1cXG5kcml2ZXJzL2NoYXIvS2NvbmZpZzoyNTk6Y29uZmlnIERFVk1FTVxcbmRyaXZlcnMvY2hhci9LY29uZmlnLTI2MC1cXHRib29sIFxcXCIvZGV2L21lbSB2aXJ0dWFsIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMDozNS44OTgzMjU3NDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk0NDQzMjk4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIHVzYWdlIG9mIGBnZW5lcmljX2FjY2Vzc19waHlzYC4gRmlyc3QsIGxldCdzIHF1aWNrbHkgcmV2aWV3IHRoZSBjb2RlYmFzZSB0byBzZWUgd2hlcmUgaXQncyBjdXJyZW50bHkgdXRpbGl6ZWQgb3IgcmVmZXJlbmNlZC4gSSd2ZSBmb3VuZCBpdCdzIHVzZWQgaW4gdGhlc2UgZHJpdmVyczogYGRyaXZlcnMvY2hhci9tZW0uY2AgKGBERVZNRU1gKSwgYGRyaXZlcnMvdWlvL3Vpby5jYCAoYFVJT2ApLCBgZHJpdmVycy9wY2kvbW1hcC5jYCAoYFBDSWApLCBgZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jYCAoYEZQR0FfREZMX0FGVWApLCBhbmQgYGRyaXZlcnMvY2R4L2NkeC5jYCAoYENEWF9CVVNgKS4gU2VlbXMgbGlrZSBhIGRlY2VudCBzcHJlYWQuXG5cbk5vdywgd2hlcmUgaXMgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGFjdHVhbGx5IGRlZmluZWQ/IEl0J3Mgc2l0dGluZyBpbiBgbW0vbWVtb3J5LmNgLiBHaXZlbiB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgYWNjZXNzLCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBJIGFsc28gbm90ZWQgdGhhdCBgYXJjaC94ODYvS2NvbmZpZ2AgaGFzIGBIQVZFX0lPUkVNQVBfUFJPVGAgc2VsZWN0ZWQsIHdoaWNoIG1pZ2h0IGJlIHJlbGV2YW50IGxhdGVyIG9uLlxuXG5Ob3csIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSByZXF1aXJlbWVudHMgZm9yIHRoaXMgcGFydGljdWxhciBhbmFseXNpcy4gVGhlIFwiV29ydGhGdXp6aW5nXCIgZmxhZyBpcyBzZXQsIGFuZCB0aGUgXCJFbmFibGVDb25maWdzXCIgbGlzdCBpbmNsdWRlcyBcIkRFVk1FTS5cIiBTZWVtcyBsaWtlIHdlJ3JlIGludGVyZXN0ZWQgaW4gdGhlIGBERVZNRU1gIGNvbmZpZ3VyYXRpb24gYXMgYSBzdGFydGluZyBwb2ludC4gVGhlIFwiRm9jdXNTeW1ib2xzXCIgbGlzdCBoYXMgZmxhZ2dlZCBib3RoIGBnZW5lcmljX2FjY2Vzc19waHlzYCBhbmQgYF9fYWNjZXNzX3JlbW90ZV92bWAsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZXkgaW50ZXJyZWxhdGUuXG5cbk5leHQsIEkgd2FudCB0byBjbGFyaWZ5IGlmIGBfX2FjY2Vzc19yZW1vdGVfdm1gIGlzIHZpc2libGUgaW4gdGhlIHN5bWJvbCB0YWJsZSBvciBpZiBpdCdzIHN0YXRpYy4gTG9va3MgbGlrZSBpdCdzIGRlZmluZWQgaW4gYG1tL21lbW9yeS5jYDogYHN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKC4uLilgIGFuZCBgaW50IGFjY2Vzc19yZW1vdGVfdm0oLi4uKWAuIEFuZCBhbHNvIGBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyguLi4pYC4gU28sIGl0J3MgYSBzdGF0aWMgaW5saW5lLCB3aGljaCBtZWFucyBpdCBsaWtlbHkgaGFzIHNvbWUgc2NvcGUgbGltaXRhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gTGV0J3Mgbm90IGZvcmdldCBhYm91dCB0aGUgcmVsYXRlZCwgdmlzaWJsZSwgYGFjY2Vzc19yZW1vdGVfdm1gLlxuXG5GaW5hbGx5LCBJJ2xsIHRha2UgYSBxdWljayBsb29rIGF0IGxpbmVzIDcyOTAtNzMzMCBpbiBgbW0vbWVtb3J5LmNgIOKAkyB0aGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZXNlIGZ1bmN0aW9ucyByZXNpZGVzLiBHb3QgaXQuIFRoaXMgd2lsbCBiZSBteSBuZXh0IHN0ZXAsIEkgbmVlZCB0byBnbyBvdmVyIHRoZSBsb2dpYyB0byBzZWUgaG93IGl0IHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTkzMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMDozOS44NDI3NjE1NzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg1NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyOTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjcyOTA6XFx0XFxuNzI5MTpcXHRcXHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcXG43MjkyOlxcdH1cXG43MjkzOlxcdFxcbjcyOTQ6XFx0LyoqXFxuNzI5NTpcXHQgKiBhY2Nlc3NfcmVtb3RlX3ZtIC0gYWNjZXNzIGFub3RoZXIgcHJvY2VzcycgYWRkcmVzcyBzcGFjZVxcbjcyOTY6XFx0ICogQG1tOlxcdFxcdHRoZSBtbV9zdHJ1Y3Qgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlXFxuNzI5NzpcXHQgKiBAYWRkcjpcXHRzdGFydCBhZGRyZXNzIHRvIGFjY2Vzc1xcbjcyOTg6XFx0ICogQGJ1ZjpcXHRzb3VyY2Ugb3IgZGVzdGluYXRpb24gYnVmZmVyXFxuNzI5OTpcXHQgKiBAbGVuOlxcdG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlclxcbjczMDA6XFx0ICogQGd1cF9mbGFnczpcXHRmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91clxcbjczMDE6XFx0ICpcXG43MzAyOlxcdCAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS5cXG43MzAzOlxcdCAqXFxuNzMwNDpcXHQgKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24uXFxuNzMwNTpcXHQgKi9cXG43MzA2OlxcdGludCBhY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuNzMwNzpcXHRcXHRcXHR2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuNzMwODpcXHR7XFxuNzMwOTpcXHRcXHRyZXR1cm4gX19hY2Nlc3NfcmVtb3RlX3ZtKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcXG43MzEwOlxcdH1cXG43MzExOlxcdFxcbjczMTI6XFx0LypcXG43MzEzOlxcdCAqIEFjY2VzcyBhbm90aGVyIHByb2Nlc3MnIGFkZHJlc3Mgc3BhY2UuXFxuNzMxNDpcXHQgKiBTb3VyY2UvdGFyZ2V0IGJ1ZmZlciBtdXN0IGJlIGtlcm5lbCBzcGFjZSxcXG43MzE1OlxcdCAqIERvIG5vdCB3YWxrIHRoZSBwYWdlIHRhYmxlIGRpcmVjdGx5LCB1c2UgZ2V0X3VzZXJfcGFnZXNcXG43MzE2OlxcdCAqL1xcbjczMTc6XFx0aW50IGFjY2Vzc19wcm9jZXNzX3ZtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuNzMxODpcXHRcXHRcXHR2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuNzMxOTpcXHR7XFxuNzMyMDpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG43MzIxOlxcdFxcdGludCByZXQ7XFxuNzMyMjpcXHRcXG43MzIzOlxcdFxcdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcXG43MzI0OlxcdFxcdGlmICghbW0pXFxuNzMyNTpcXHRcXHRcXHRyZXR1cm4gMDtcXG43MzI2OlxcdFxcbjczMjc6XFx0XFx0cmV0ID0gX19hY2Nlc3NfcmVtb3RlX3ZtKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcXG43MzI4OlxcdFxcbjczMjk6XFx0XFx0bW1wdXQobW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMDozOS44NDMwNDk5OTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQyNjY2MDUzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEZvY3VzKipcblxuT2theSwgc28gSSd2ZSB6ZXJvZWQgaW4gb24gc29tZSByZWFsbHkgcHJvbWlzaW5nIHN5bWJvbHMgaGVyZTogYGdlbmVyaWNfYWNjZXNzX3BoeXNgLCBgYWNjZXNzX3JlbW90ZV92bWAsIGFuZCBgYWNjZXNzX3Byb2Nlc3Nfdm1gLiBUaG9zZSBmZWVsIGxpa2Uga2V5IGFyZWFzIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSB0aHJlZSBhcmUgbG9ja2VkIGluIGFzIG15IGZvY3VzLlxuXG5CZWZvcmUgSSBwdXNoIHRoaW5ncyBmdXJ0aGVyLCBJIG5lZWQgdG8gZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgb2YgbXkgcmVhc29uaW5nIGFuZCB0aGUgcGFyYW1ldGVycyB0aGF0IEknbSB1c2luZyBiZWZvcmUgY29tbWl0dGluZyB0byB0aGUgbmV4dCBzdGVwLCB3aGljaCB3aWxsIGJlIGNhbGxpbmcgYHNldC1yZXN1bHRzYC5cblxuTGV0J3MgbWFrZSBzdXJlIEknbSBjbGVhciBoZXJlOlxuXG4qICAgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgdHJ1ZWAg4oCTIHRoYXQgZmVlbHMgcmlnaHQgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLlxuKiAgIGBGb2N1c1N5bWJvbHNgIGlzIGNvcnJlY3RseSBwb3B1bGF0ZWQgd2l0aCB0aGUgdGhyZWUgc3ltYm9sczogYGdlbmVyaWNfYWNjZXNzX3BoeXNgLCBgYWNjZXNzX3JlbW90ZV92bWAsIGBhY2Nlc3NfcHJvY2Vzc192bWAuIEV4Y2VsbGVudCFcbiogICBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGNvbnRhaW4gYERFVk1FTWAg4oCTIHllcywgdGhhdCBhbGlnbnMgd2l0aCB0aGUgY3VycmVudCBnb2Fscy5cbiogICBUaGUgYFJlYXNvbmluZ2AgbmVlZHMgdG8gYmUgYSBjb25jaXNlIGFuZCBjbGVhciBleHBsYW5hdGlvbiBvZiB0aGUgdmVyZGljdC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGlzIHRoZSBjYXNlLlxuXG5XaXRoIGFsbCB0aGF0IGluIHBsYWNlLCBJIGZlZWwgY29uZmlkZW50IGFib3V0IGNhbGxpbmcgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzODksIk91dHB1dFRva2VucyI6MTczLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6NDMuMjY5NzEyNTU3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY2Mzk1ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFVk1FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbmVyaWNfYWNjZXNzX3BoeXNcIixcbiAgICBcImFjY2Vzc19yZW1vdGVfdm1cIixcbiAgICBcImFjY2Vzc19wcm9jZXNzX3ZtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbGVuZ3RoIGNhbGN1bGF0aW9uLCBib3VuZHMgY2hlY2tpbmcsIGFuZCBwaHlzaWNhbCBhZGRyZXNzIHR5cGVjYXN0aW5nIGluIGdlbmVyaWNfYWNjZXNzX3BoeXMoKSBhcyB3ZWxsIGFzIHRoZSBsZW5ndGggY2xhbXBpbmcgcGFzc2VkIHRvIHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VhY2Nlc3MoKSBpbiBfX2FjY2Vzc19yZW1vdGVfdm0oKS4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcHRyYWNlIChQVFJBQ0VfUEVFS0RBVEEvUE9LRURBVEEpIGFuZCAvcHJvYy8kcGlkL21lbSBhY2Nlc3NlcyB0byBWTV9JTy9WTV9QRk5NQVAgVk1BcyAoc3VjaCBhcyAvZGV2L21lbSkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgYm91bmRhcnkgYW5kIHBhZ2UtY3Jvc3NpbmcgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5lcmljX2FjY2Vzc19waHlzXCIsXG4gICAgXCJhY2Nlc3NfcmVtb3RlX3ZtXCIsXG4gICAgXCJhY2Nlc3NfcHJvY2Vzc192bVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxlbmd0aCBjYWxjdWxhdGlvbiwgYm91bmRzIGNoZWNraW5nLCBhbmQgcGh5c2ljYWwgYWRkcmVzcyB0eXBlY2FzdGluZyBpbiBnZW5lcmljX2FjY2Vzc19waHlzKCkgYXMgd2VsbCBhcyB0aGUgbGVuZ3RoIGNsYW1waW5nIHBhc3NlZCB0byB2bWEtXFx1MDAzZXZtX29wcy1cXHUwMDNlYWNjZXNzKCkgaW4gX19hY2Nlc3NfcmVtb3RlX3ZtKCkuIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHB0cmFjZSAoUFRSQUNFX1BFRUtEQVRBL1BPS0VEQVRBKSBhbmQgL3Byb2MvJHBpZC9tZW0gYWNjZXNzZXMgdG8gVk1fSU8vVk1fUEZOTUFQIFZNQXMgKHN1Y2ggYXMgL2Rldi9tZW0pLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGJvdW5kYXJ5IGFuZCBwYWdlLWNyb3NzaW5nIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIwOjQzLjM0NjM2MDk3MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4MDYzODYxNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMDo0My4zNDY5MDYzNjJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNjgwNTgzNTk0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGdlbmVyaWNfYWNjZXNzX3BoeXMoKWAgYW5kIGBfX2FjY2Vzc19yZW1vdGVfdm0oKWAgaW4gYG1tL21lbW9yeS5jYCB0byBjbGFtcCBhY2Nlc3MgbGVuZ3RocyB0byBwYWdlIGJvdW5kYXJpZXMgKGBQQUdFX1NJWkUgLSBvZmZzZXRgKSwgbWFwIG9ubHkgYSBzaW5nbGUgcGFnZSB2aWEgYGlvcmVtYXBfcHJvdCgpYCwgY2FzdCBgYXJncy5wZm5gIHRvIGByZXNvdXJjZV9zaXplX3RgIGJlZm9yZSBzaGlmdGluZywgYW5kIHJldHVybiBlYXJseSB3aGVuIGBsZW4gXFx1MDAzYz0gMGAuXFxuXFxuVGhlc2UgY2hhbmdlcyBmaXggYm91bmRhcnkgY2FsY3VsYXRpb25zIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAvIGFyaXRobWV0aWMgdHJ1bmNhdGlvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGluIHRoaXMgY29kZSBwYXRoIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODZmZTM5NjFkYmRhNjFhZTBiMjUyOGM2YWVhYTRiNGQ3NTk2OWMyZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTU6MTk6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA4YjBjMmM3MzVkM2RlLi4wOTM5MGU1MTQzMmYyIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNzE2NCw2ICs3MTY0LDExIEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRib29sIHdyaXRhYmxlO1xuIFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGFkZHIgfTtcbiBcbitcdGlmIChsZW4gXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGxlbiA9IG1pbl90KGludCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXQpO1xuK1xuIHJldHJ5OlxuIFx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTcxNzUsNyArNzE4MCw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpZiAoKHdyaXRlIFx1MDAyNiBGT0xMX1dSSVRFKSBcdTAwMjZcdTAwMjYgIXdyaXRhYmxlKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9BTElHTihsZW4gKyBvZmZzZXQpLCBwcm90KTtcbitcdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9TSVpFLCBwcm90KTtcbiBcdGlmICghbWFkZHIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTcxODMsNyArNzE4OCw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGdvdG8gb3V0X3VubWFwO1xuIFxuIFx0aWYgKChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoYXJncy5wZ3Byb3QpKSB8fFxuLVx0ICAgIChwaHlzX2FkZHIgIT0gKGFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSkgfHxcbitcdCAgICAocGh5c19hZGRyICE9ICgocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSkgfHxcbiBcdCAgICAod3JpdGFibGUgIT0gYXJncy53cml0YWJsZSkpIHtcbiBcdFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG4gXHRcdGlvdW5tYXAobWFkZHIpO1xuQEAgLTcyNTQsNyArNzI1OSw4IEBAIHN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuIFx0XHRcdGlmICh2bWEtXHUwMDNldm1fb3BzIFx1MDAyNlx1MDAyNiB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2VzcylcbiBcdFx0XHRcdGJ5dGVzID0gdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VhY2Nlc3Modm1hLCBhZGRyLCBidWYsXG4tXHRcdFx0XHRcdFx0XHQgICAgbGVuLCB3cml0ZSk7XG4rXHRcdFx0XHRcdFx0XHQgICAgbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKGFkZHIpKSxcbitcdFx0XHRcdFx0XHRcdCAgICB3cml0ZSk7XG4gI2VuZGlmXG4gXHRcdFx0aWYgKGJ5dGVzIFx1MDAzYz0gMClcbiBcdFx0XHRcdGJyZWFrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6NDMuMzQ2OTA3MzUyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNDQzNjI3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IFN1YnN5c3RlbSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBpcyBmb2N1c2luZyBvbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYXJlYSwgc3BlY2lmaWNhbGx5IGBtbS9tZW1vcnkuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoYXQgZmlsZSB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGNoYW5nZWQgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhlIGFyZWEgdGhhdCBpbnRlcmVzdHMgbWUgdGhlIG1vc3QgaXMgZ29pbmcgdG8gYmUgY2VudGVyZWQgYXJvdW5kIGBnZW5lcmljX2FjY2Vzc19waHlzYCBhbmQgYF9fYWNjZXNzX3JlbW90ZV92bWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY29yZSB0byBob3cgd2UgaGFuZGxlIHBoeXNpY2FsIG1lbW9yeSBhY2Nlc3MsIGFuZCBJIHN1c3BlY3QgdGhlIGNoYW5nZXMgd2lsbCBiZSBhcm91bmQgdGhvc2UgZnVuY3Rpb25zLCBvciByZWxhdGVkIG9uZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbW9kaWZpY2F0aW9uIGFmZmVjdHMgdGhvc2UgZnVuY3Rpb25zLCBhbmQgd2hhdCBpbXBhY3QgdGhhdCBoYXMgb24gdGhlIG92ZXJhbGwgc3lzdGVtLiBJJ2xsIHJlYWQgYXJvdW5kIHRob3NlIGZ1bmN0aW9ucyBpbiBgbW0vbWVtb3J5LmNgIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgYW5kIGNvbnRleHQgb2YgdGhlIGNoYW5nZXMuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGxvdy1sZXZlbCBhY2Nlc3MgbWVjaGFuaXNtcyBhcmUgYmVpbmcgYWx0ZXJlZCBhbmQgd2h5LCBlc3BlY2lhbGx5IGhvdyB0aGlzIGFmZmVjdHMgcmVtb3RlIGFjY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6NDkuMzkxMjczMTU1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMDg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MTU1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzE1NTpcXHQgKi9cXG43MTU2OlxcdGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuNzE1NzpcXHRcXHRcXHRcXHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSlcXG43MTU4OlxcdHtcXG43MTU5OlxcdFxcdHJlc291cmNlX3NpemVfdCBwaHlzX2FkZHI7XFxuNzE2MDpcXHRcXHRwZ3Byb3RfdCBwcm90ID0gX19wZ3Byb3QoMCk7XFxuNzE2MTpcXHRcXHR2b2lkIF9faW9tZW0gKm1hZGRyO1xcbjcxNjI6XFx0XFx0aW50IG9mZnNldCA9IG9mZnNldF9pbl9wYWdlKGFkZHIpO1xcbjcxNjM6XFx0XFx0aW50IHJldCA9IC1FSU5WQUw7XFxuNzE2NDpcXHRcXHRib29sIHdyaXRhYmxlO1xcbjcxNjU6XFx0XFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGFkZHIgfTtcXG43MTY2OlxcdFxcbjcxNjc6XFx0XFx0aWYgKGxlbiBcXHUwMDNjPSAwKVxcbjcxNjg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNzE2OTpcXHRcXG43MTcwOlxcdFxcdGxlbiA9IG1pbl90KGludCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXQpO1xcbjcxNzE6XFx0XFxuNzE3MjpcXHRyZXRyeTpcXG43MTczOlxcdFxcdGlmIChmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKSlcXG43MTc0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjcxNzU6XFx0XFx0cHJvdCA9IGFyZ3MucGdwcm90O1xcbjcxNzY6XFx0XFx0cGh5c19hZGRyID0gKHJlc291cmNlX3NpemVfdClhcmdzLnBmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbjcxNzc6XFx0XFx0d3JpdGFibGUgPSBhcmdzLndyaXRhYmxlO1xcbjcxNzg6XFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbjcxNzk6XFx0XFxuNzE4MDpcXHRcXHRpZiAoKHdyaXRlIFxcdTAwMjYgRk9MTF9XUklURSkgXFx1MDAyNlxcdTAwMjYgIXdyaXRhYmxlKVxcbjcxODE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzE4MjpcXHRcXG43MTgzOlxcdFxcdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9TSVpFLCBwcm90KTtcXG43MTg0OlxcdFxcdGlmICghbWFkZHIpXFxuNzE4NTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG43MTg2OlxcdFxcbjcxODc6XFx0XFx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpKVxcbjcxODg6XFx0XFx0XFx0Z290byBvdXRfdW5tYXA7XFxuNzE4OTpcXHRcXG43MTkwOlxcdFxcdGlmICgocGdwcm90X3ZhbChwcm90KSAhPSBwZ3Byb3RfdmFsKGFyZ3MucGdwcm90KSkgfHxcXG43MTkxOlxcdFxcdCAgICAocGh5c19hZGRyICE9ICgocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKSB8fFxcbjcxOTI6XFx0XFx0ICAgICh3cml0YWJsZSAhPSBhcmdzLndyaXRhYmxlKSkge1xcbjcxOTM6XFx0XFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbjcxOTQ6XFx0XFx0XFx0aW91bm1hcChtYWRkcik7XFxuNzE5NTpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjcxOTY6XFx0XFx0fVxcbjcxOTc6XFx0XFxuNzE5ODpcXHRcXHRpZiAod3JpdGUpXFxuNzE5OTpcXHRcXHRcXHRtZW1jcHlfdG9pbyhtYWRkciArIG9mZnNldCwgYnVmLCBsZW4pO1xcbjcyMDA6XFx0XFx0ZWxzZVxcbjcyMDE6XFx0XFx0XFx0bWVtY3B5X2Zyb21pbyhidWYsIG1hZGRyICsgb2Zmc2V0LCBsZW4pO1xcbjcyMDI6XFx0XFx0cmV0ID0gbGVuO1xcbjcyMDM6XFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbjcyMDQ6XFx0b3V0X3VubWFwOlxcbjcyMDU6XFx0XFx0aW91bm1hcChtYWRkcik7XFxuNzIwNjpcXHRcXG43MjA3OlxcdFxcdHJldHVybiByZXQ7XFxuNzIwODpcXHR9XFxuNzIwOTpcXHRFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2FjY2Vzc19waHlzKTtcXG43MjEwOlxcdCNlbmRpZlxcbjcyMTE6XFx0XFxuNzIxMjpcXHQvKlxcbjcyMTM6XFx0ICogQWNjZXNzIGFub3RoZXIgcHJvY2VzcycgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cXG43MjE0OlxcdCAqL1xcbjcyMTU6XFx0c3RhdGljIGludCBfX2FjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG43MjE2OlxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcXG43MjE3OlxcdHtcXG43MjE4OlxcdFxcdHZvaWQgKm9sZF9idWYgPSBidWY7XFxuNzIxOTpcXHRcXHRpbnQgd3JpdGUgPSBndXBfZmxhZ3MgXFx1MDAyNiBGT0xMX1dSSVRFO1xcbjcyMjA6XFx0XFxuNzIyMTpcXHRcXHRpZiAobW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobW0pKVxcbjcyMjI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNzIyMzpcXHRcXG43MjI0OlxcdFxcdC8qIFVudGFnIHRoZSBhZGRyZXNzIGJlZm9yZSBsb29raW5nIHVwIHRoZSBWTUEgKi9cXG43MjI1OlxcdFxcdGFkZHIgPSB1bnRhZ2dlZF9hZGRyX3JlbW90ZShtbSwgYWRkcik7XFxuNzIyNjpcXHRcXG43MjI3OlxcdFxcdC8qIEF2b2lkIHRyaWdnZXJpbmcgdGhlIHRlbXBvcmFyeSB3YXJuaW5nIGluIF9fZ2V0X3VzZXJfcGFnZXMgKi9cXG43MjI4OlxcdFxcdGlmICghdm1hX2xvb2t1cChtbSwgYWRkcikgXFx1MDAyNlxcdTAwMjYgIWV4cGFuZF9zdGFjayhtbSwgYWRkcikpXFxuNzIyOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG43MjMwOlxcdFxcbjcyMzE6XFx0XFx0LyogaWdub3JlIGVycm9ycywganVzdCBjaGVjayBob3cgbXVjaCB3YXMgc3VjY2Vzc2Z1bGx5IHRyYW5zZmVycmVkICovXFxuNzIzMjpcXHRcXHR3aGlsZSAobGVuKSB7XFxuNzIzMzpcXHRcXHRcXHRpbnQgYnl0ZXMsIG9mZnNldDtcXG43MjM0OlxcdFxcdFxcdHZvaWQgKm1hZGRyO1xcbjcyMzU6XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG43MjM2OlxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gTlVMTDtcXG43MjM3OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gZ2V0X3VzZXJfcGFnZV92bWFfcmVtb3RlKG1tLCBhZGRyLFxcbjcyMzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBndXBfZmxhZ3MsIFxcdTAwMjZ2bWEpO1xcbjcyMzk6XFx0XFxuNzI0MDpcXHRcXHRcXHRpZiAoSVNfRVJSKHBhZ2UpKSB7XFxuNzI0MTpcXHRcXHRcXHRcXHQvKiBXZSBtaWdodCBuZWVkIHRvIGV4cGFuZCB0aGUgc3RhY2sgdG8gYWNjZXNzIGl0ICovXFxuNzI0MjpcXHRcXHRcXHRcXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyKTtcXG43MjQzOlxcdFxcdFxcdFxcdGlmICghdm1hKSB7XFxuNzI0NDpcXHRcXHRcXHRcXHRcXHR2bWEgPSBleHBhbmRfc3RhY2sobW0sIGFkZHIpO1xcbjcyNDU6XFx0XFxuNzI0NjpcXHRcXHRcXHRcXHRcXHQvKiBtbWFwX2xvY2sgd2FzIGRyb3BwZWQgb24gZmFpbHVyZSAqL1xcbjcyNDc6XFx0XFx0XFx0XFx0XFx0aWYgKCF2bWEpXFxuNzI0ODpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcXG43MjQ5OlxcdFxcbjcyNTA6XFx0XFx0XFx0XFx0XFx0LyogVHJ5IGFnYWluIGlmIHN0YWNrIGV4cGFuc2lvbiB3b3JrZWQgKi9cXG43MjUxOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjcyNTI6XFx0XFx0XFx0XFx0fVxcbjcyNTM6XFx0XFxuNzI1NDpcXHRcXHRcXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMDo0OS4zOTE3MDY4MDVaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE3MDc5MjI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gYF9fYWNjZXNzX3JlbW90ZV92bWAqKlxuXG5BbHJpZ2h0LCBJJ20gYXQgdGhlIHBvaW50IHdoZXJlIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGBfX2FjY2Vzc19yZW1vdGVfdm1gLiBJJ3ZlIHByb2JhYmx5IGdvdCBzb21lIGNvbnRleHQgYWxyZWFkeSDigJMgbWF5YmUgSSdtIGxvb2tpbmcgYXQgYW4gZXJyb3IgdHJhY2ViYWNrLCBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIG9yIEknbSBzaW1wbHkgdHJ5aW5nIHRvIGFyY2hpdGVjdCBhIG5ldyBzb2x1dGlvbiBhcm91bmQgdGhpcyBmdW5jdGlvbi4gUmVnYXJkbGVzcywgdGhlIGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBncmFzcCAqYWxsKiBvZiBpdC4gSSB3YW50IHRvIHNlZSBob3cgaXQgaW50ZWdyYXRlcyB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIFRoaXMgY291bGQgYmUgYSBjb21wbGV4IGNhbGwgc3RhY2ssIGEgZGlzdHJpYnV0ZWQgc3lzdGVtIGNvbXBvbmVudCwgb3IgbWF5YmUganVzdCBhIHNwZWNpZmljIHBpZWNlIG9mIGEgbGFyZ2VyIGNvZGUgcGF0aCwgSSBuZWVkIHRvIHpvb20gb3V0IGEgYml0IGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gbGl2ZXMgd2l0aGluIHRoZSBvdmVyYWxsIGRlc2lnbi4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gY2hlY2sgdGhlIHBhcmFtZXRlcnMgaXQgYWNjZXB0cywgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW5kLCBjcml0aWNhbGx5LCBob3cgaXQgaGFuZGxlcyBlcnJvcnMuIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgcmVzb3VyY2UgbGVha3MsIG9yIGFueXRoaW5nIHRoYXQgY291bGQgY2F1c2Ugc2NhbGFiaWxpdHkgaXNzdWVzLiBTbywgbGV0J3MgZ2V0IHRoYXQgZnVsbCB2aWV3IGFuZCBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI0NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6NTEuNTYyNTAxMTc4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5ODQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MjUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MjUwOlxcdFxcdFxcdFxcdFxcdC8qIFRyeSBhZ2FpbiBpZiBzdGFjayBleHBhbnNpb24gd29ya2VkICovXFxuNzI1MTpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43MjUyOlxcdFxcdFxcdFxcdH1cXG43MjUzOlxcdFxcbjcyNTQ6XFx0XFx0XFx0XFx0LypcXG43MjU1OlxcdFxcdFxcdFxcdCAqIENoZWNrIGlmIHRoaXMgaXMgYSBWTV9JTyB8IFZNX1BGTk1BUCBWTUEsIHdoaWNoXFxuNzI1NjpcXHRcXHRcXHRcXHQgKiB3ZSBjYW4gYWNjZXNzIHVzaW5nIHNsaWdodGx5IGRpZmZlcmVudCBjb2RlLlxcbjcyNTc6XFx0XFx0XFx0XFx0ICovXFxuNzI1ODpcXHRcXHRcXHRcXHRieXRlcyA9IDA7XFxuNzI1OTpcXHQjaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxuNzI2MDpcXHRcXHRcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9vcHMgXFx1MDAyNlxcdTAwMjYgdm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZWFjY2VzcylcXG43MjYxOlxcdFxcdFxcdFxcdFxcdGJ5dGVzID0gdm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZWFjY2Vzcyh2bWEsIGFkZHIsIGJ1ZixcXG43MjYyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBtaW5fdChpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2UoYWRkcikpLFxcbjcyNjM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHdyaXRlKTtcXG43MjY0OlxcdCNlbmRpZlxcbjcyNjU6XFx0XFx0XFx0XFx0aWYgKGJ5dGVzIFxcdTAwM2M9IDApXFxuNzI2NjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG43MjY3OlxcdFxcdFxcdH0gZWxzZSB7XFxuNzI2ODpcXHRcXHRcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuNzI2OTpcXHRcXHRcXHRcXHRieXRlcyA9IGxlbjtcXG43MjcwOlxcdFxcdFxcdFxcdG9mZnNldCA9IGFkZHIgXFx1MDAyNiAoUEFHRV9TSVpFLTEpO1xcbjcyNzE6XFx0XFx0XFx0XFx0aWYgKGJ5dGVzIFxcdTAwM2UgUEFHRV9TSVpFLW9mZnNldClcXG43MjcyOlxcdFxcdFxcdFxcdFxcdGJ5dGVzID0gUEFHRV9TSVpFLW9mZnNldDtcXG43MjczOlxcdFxcbjcyNzQ6XFx0XFx0XFx0XFx0bWFkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBmb2xpb19wYWdlX2lkeChmb2xpbywgcGFnZSkgKiBQQUdFX1NJWkUpO1xcbjcyNzU6XFx0XFx0XFx0XFx0aWYgKHdyaXRlKSB7XFxuNzI3NjpcXHRcXHRcXHRcXHRcXHRjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXFxuNzI3NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIG1hZGRyICsgb2Zmc2V0LCBidWYsIGJ5dGVzKTtcXG43Mjc4OlxcdFxcdFxcdFxcdFxcdGZvbGlvX21hcmtfZGlydHlfbG9jayhmb2xpbyk7XFxuNzI3OTpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjcyODA6XFx0XFx0XFx0XFx0XFx0Y29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXFxuNzI4MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgYnVmLCBtYWRkciArIG9mZnNldCwgYnl0ZXMpO1xcbjcyODI6XFx0XFx0XFx0XFx0fVxcbjcyODM6XFx0XFx0XFx0XFx0Zm9saW9fcmVsZWFzZV9rbWFwKGZvbGlvLCBtYWRkcik7XFxuNzI4NDpcXHRcXHRcXHR9XFxuNzI4NTpcXHRcXHRcXHRsZW4gLT0gYnl0ZXM7XFxuNzI4NjpcXHRcXHRcXHRidWYgKz0gYnl0ZXM7XFxuNzI4NzpcXHRcXHRcXHRhZGRyICs9IGJ5dGVzO1xcbjcyODg6XFx0XFx0fVxcbjcyODk6XFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuNzI5MDpcXHRcXG43MjkxOlxcdFxcdHJldHVybiBidWYgLSBvbGRfYnVmO1xcbjcyOTI6XFx0fVxcbjcyOTM6XFx0XFxuNzI5NDpcXHQvKipcXG43Mjk1OlxcdCAqIGFjY2Vzc19yZW1vdGVfdm0gLSBhY2Nlc3MgYW5vdGhlciBwcm9jZXNzJyBhZGRyZXNzIHNwYWNlXFxuNzI5NjpcXHQgKiBAbW06XFx0XFx0dGhlIG1tX3N0cnVjdCBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2VcXG43Mjk3OlxcdCAqIEBhZGRyOlxcdHN0YXJ0IGFkZHJlc3MgdG8gYWNjZXNzXFxuNzI5ODpcXHQgKiBAYnVmOlxcdHNvdXJjZSBvciBkZXN0aW5hdGlvbiBidWZmZXJcXG43Mjk5OlxcdCAqIEBsZW46XFx0bnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIwOjUxLjU2MjkwMjYyOVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTk1OTgyOTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGh5c2ljYWwgTWVtb3J5IEFjY2VzcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgaW4gYG1tL21lbW9yeS5jYC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byByZWFsbHkgZXhhbWluZSB0aGUgY2hhbmdlcyBjYXJlZnVsbHkuIEkgc2VlIGEgY291cGxlIG9mIGtleSBhZGp1c3RtZW50cy4gRmlyc3QsIHRoZXJlIGFyZSBhZGRlZCBjaGVja3MgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoIGBsZW5gIGlzIHplcm8gb3IgbmVnYXRpdmUuIFRoYXQncyBhIHNlbnNpYmxlIGFkZGl0aW9uLCBndWFyZGluZyBhZ2FpbnN0IHBvdGVudGlhbCBpc3N1ZXMgbGF0ZXIuIFdlIGFyZSBhbHNvIGV4cGxpY2l0bHkgbGltaXRpbmcgdGhlIGxlbmd0aCB0byB0aGUgcGFnZSBzaXplIG5vdywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHRoZSB1bmRlcmx5aW5nIHJlbWFwcGluZyBvcGVyYXRpb25zIHdlIGFyZSB1c2luZy4gSXQgYXBwZWFycyB0aGUgcHJpb3IgY2FsY3VsYXRpb24gd2FzIGZsYXdlZCBhbmQgY291bGQgcmVxdWVzdCBtb3JlIG1lbW9yeSB0aGFuIG5lY2Vzc2FyeSwgcGVyaGFwcyBsZWFkaW5nIHRvIHVuaW50ZW5kZWQgYmVoYXZpb3Igd2l0aCB0aGUgYGlvcmVtYXBgIGNhbGwuXG5cblRoZSBgaW9yZW1hcF9wcm90YCBjYWxsIGlzIG5vdyByZXF1ZXN0aW5nIG9ubHkgYFBBR0VfU0laRWAsIHdoaWNoIGFsaWducyB3aXRoIHRoZSBtb2RpZmllZCBsZW5ndGggY2FsY3VsYXRpb25zLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciBhc3N1bXB0aW9ucyB0aGF0IHdlcmUgcHJldmlvdXNseSBoYW5kbGVkIGltcGxpY2l0bHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGJyZWFrIGFueSB2YWxpZCB1c2UgY2FzZXMuIEkgd2lsbCByZXZpZXcgdGhlIHByZXZpb3VzIHZlcnNpb24sIHRvIGVuc3VyZSB0aGUgbmV3IGBtaW5fdGAgY2FsY3VsYXRpb25zIGRvbid0IGhhdmUgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgYW5kIHRoYXQgd2UgYXJlIHN0aWxsIGFjY2Vzc2luZyB0aGUgYXBwcm9wcmlhdGUgbWVtb3J5IHJlZ2lvbi5cblxuVGhlcmUgYXJlIGFsc28gY2hhbmdlcyB0byB0aGUgY29uZGl0aW9uYWxzIGxhdGVyIG9uIGluIHRoZSBjb2RlLCB3aGljaCBsb29rIGxpa2UgdGhleSBhcmUgdG8gYXZvaWQgZXh0cmEgd29yayBpZiB0aGUgcGFyYW1ldGVycyBkbyBub3QgYWxpZ24gd2l0aCB0aGUgcmVtYXBwZWQgbWVtb3J5LlxuXG5UbyBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIHBhdGNoLCBJJ2xsIG5lZWQgdG8gZ28gYmV5b25kIGp1c3QgdGhlIGNvZGUgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvbW1pdHMuIEkgd2lsbCBzZWFyY2ggZm9yIGNvbW1pdHMgcmVsYXRlZCB0byBgZ2VuZXJpY19hY2Nlc3NfcGh5c2Agb3IgcmVsYXRlZCBmdW5jdGlvbnMgdG8gZ3Jhc3AgdGhlIGJyb2FkZXIgY29udGV4dCwgdGhlIHJlcG9ydGVkIHByb2JsZW0sIGFuZCBhbnkgZGlzY3Vzc2lvbnMgdGhhdCBtaWdodCBoYXZlIGxlZCB0byB0aGlzIGNoYW5nZS4gUGVyaGFwcyBhIGJ1ZyByZXBvcnQgb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMgZHJvdmUgdGhpcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBwcm9tcHRlZCB0aGVzZSBtb2RpZmljYXRpb25zIGFuZCB3aGF0IHByb2JsZW1zIGl0J3MgdHJ5aW5nIHRvIHNvbHZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mjc3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6NTYuMTU4ODg5NjA4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTI1ODcyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5lcmljX2FjY2Vzc19waHlzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnkuYz03MTQxPUVYUE9SVF9TWU1CT0xfR1BMKGZvbGxvd19wZm5tYXBfZW5kKTtcXG4tLVxcbm1tL21lbW9yeS5jLTcxNDQtLyoqXFxubW0vbWVtb3J5LmM6NzE0NTogKiBnZW5lcmljX2FjY2Vzc19waHlzIC0gZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgaW9tZW0gbW1hcCBhY2Nlc3NcXG5tbS9tZW1vcnkuYy03MTQ2LSAqIEB2bWE6IHRoZSB2bWEgdG8gYWNjZXNzXFxuLS1cXG5tbS9tZW1vcnkuYy03MTU1LSAqL1xcbm1tL21lbW9yeS5jOjcxNTY6aW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9tZW1vcnkuYy03MTU3LVxcdFxcdFxcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKVxcbi0tXFxubW0vbWVtb3J5LmMtNzIwOC19XFxubW0vbWVtb3J5LmM6NzIwOTpFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2FjY2Vzc19waHlzKTtcXG5tbS9tZW1vcnkuYy03MjEwLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMDo1Ni4yMDgxNTI5OTVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODU0NTYyNTI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50IG9mIGBnZW5lcmljX2FjY2Vzc19waHlzYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AsIHNwZWNpZmljYWxseSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHZtX29wcy1cdTAwM2VhY2Nlc3NgIGZvciBQRk5NQVAvSU8gbWVtb3J5IFZNQXMuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgdGlnaHRlbmluZyB1cCBob3cgd2UgaGFuZGxlIGxlbmd0aCBjYWxjdWxhdGlvbnMgYW5kIHBoeXNpY2FsIGFkZHJlc3MgbWFwcGluZyB0byBwcmV2ZW50IHBvdGVudGlhbCBpc3N1ZXMsIGVzcGVjaWFsbHkgb24gMzItYml0IGFyY2hpdGVjdHVyZXMgd2l0aCA2NC1iaXQgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gaGFkIGEgZmV3IGdvdGNoYXM6IGFuIGludGVnZXIgdHJ1bmNhdGlvbiBvciBvdmVyZmxvdyByaXNrIHdoZW4gY29tcGFyaW5nIHBoeXNpY2FsIGFkZHJlc3NlcywgYW5kIGxlbmd0aCBpc3N1ZXMgd2hlcmUgYGxlbmAgd2Fzbid0IGJlaW5nIGNvcnJlY3RseSBib3VuZGVkIHRvIGEgc2luZ2xlIHBhZ2UsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaW5jb25zaXN0ZW5jaWVzIGluIHRoZSBpb3JlbWFwJ2QgcmVnaW9uLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoZXNlIGJ5IGNsYW1waW5nIGBsZW5gLCBmaXhpbmcgdGhlIGlvcmVtYXAgc2l6ZSwgYW5kIHByb3Blcmx5IGNhc3RpbmcgcGZuIGJlZm9yZSBzaGlmdGluZyBpdC4gSXQgYWxzbyByZWZhY3RvcnMgdGhlIGxlbmd0aCBwYXNzZWQgdG8gYHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlYWNjZXNzYCBpbiBgX19hY2Nlc3NfcmVtb3RlX3ZtYC5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayB0aGF0IHJlcXVpcmVzIEtNU0FOPyBJIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0IGNhcmVmdWxseS4gV2UgYWxyZWFkeSBoYXZlIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gIEtNU0FOIGlzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcywgc28gaXQncyBub3QgbmVlZGVkIGlmIEtBU0FOIGNhbiBjYXRjaCB0aGUgYnVnLlxuXG5MZXQncyBicmVhayBpdCBkb3duOlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/KiogTm8uIGBnZW5lcmljX2FjY2Vzc19waHlzYCBpcyBjb3B5aW5nIGRhdGEgYmV0d2VlbiB1c2VyL3JlbW90ZSBidWZmZXIgYGJ1ZmAgYW5kIGlvbWVtIHVzaW5nIGBtZW1jcHlfdG9pb2AgLyBgbWVtY3B5X2Zyb21pb2AsIHdoaWNoIHdvdWxkIHVzZSB0aGUgY2FsbGVyIHN1cHBsaWVkIGRhdGEuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogSSd2ZSB0cmFjZWQgdGhlIHZhcmlhYmxlcyBpbiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AsIGFuZCBhbGwgb2YgdGhlbSBhcmUgaW5pdGlhbGl6ZWQuIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCBpbml0aWFsaXplcyB0aGUgZm9sbG93X3Bmbm1hcF9hcmdzIHN0cnVjdCwgYW5kIHdlIHJlY2hlY2sgdGhvc2UgdmFyaWFibGVzLiBObyBpc3N1ZXMgaGVyZS5cbjMuICAqKkFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXM/KiogTm90IGluIHRoaXMgcGF0Y2guXG40LiAgKipCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGVuYWJsZXMgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/KiogQWgsIHRoaXMgaXMgd2hlcmUgdGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQuIFRoZSBwYXRjaCByZXN0cmljdHMgYGxlbmAgaW4gYGdlbmVyaWNfYWNjZXNzX3BoeXNgLCB0byBgUEFHRV9TSVpFIC0gb2Zmc2V0YCB3aGljaCBzaG91bGQgcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIGV4aXN0aW5nIGlzc3VlIHdhcyB0aGF0ICBgX19hY2Nlc3NfcmVtb3RlX3ZtYCBtaWdodCBoYXZlIGJlZW4gcGFzc2luZyBhIGxhcmdlIGBsZW5gIHRvIHRoZSBmdW5jdGlvbiB3aGljaCBhY2Nlc3NlZCBtZW1vcnkgYmV5b25kIHBhZ2UgYm91bmRhcmllcy4gVGhlc2UgYm91bmRhcnkgYW5kIG91dC1vZi1ib3VuZHMgY2hlY2tzLCBob3dldmVyLCBhcmUgc3F1YXJlbHkgaW4gS0FTQU4ncyBkb21haW4gKE9PQiBhY2Nlc3MgYnVncyksIG5vdCBLTVNBTi5cblxuU28sIGlzIHRoZXJlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mby1sZWFrIGNyZWF0ZWQ/IE5vLiBgYnVmYCBpcyBwcm92aWRlZCBieSB0aGUgY2FsbGVyLiBgbWVtY3B5X2Zyb21pb2AgcmVhZHMgZnJvbSB0aGUgSS9PIG1lbW9yeSBhbmQgd3JpdGVzIHRvIHRoZSBzdXBwbGllZCBidWZmZXIsIGFuZCBgbWVtY3B5X3RvaW9gIGlzIHRoZSBvcHBvc2l0ZS4gVGhlIHNpemUgb2YgdGhlIHJlYWQgb3Igd3JpdGUgaXMgbm93IGNvcnJlY3RseSBib3VuZGVkIGJ5IHRoZSBwYXRjaC5cblxuSSdtIGNvbmZpZGVudC4gVGhpcyBwYXRjaCBpcyBhYm91dCBib3VuZHMgY2hlY2tpbmcsIHdoaWNoIGZhbGxzIHVuZGVyIEtBU0FOLCBub3QgS01TQU4uIFRoZSBsb2dpYyBpcyBkZXNpZ25lZCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgdXNlcyBvZiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2Agb3IgYGZvbGxvd19wZm5tYXBfYXJnc2AgdG8gZW5zdXJlIG5vIG90aGVyIGFyZWEgaXMgYWZmZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MTUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIxOjA0Ljc1Mzc4MTQ3OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMTU5MjMwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5lcmljX2FjY2Vzc19waHlzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY2R4L2NkeC5jPTY2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGNkeF9waHlzX3ZtX29wcyA9IHtcXG5kcml2ZXJzL2NkeC9jZHguYy02NjMtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvY2R4L2NkeC5jOjY2NDpcXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcXG5kcml2ZXJzL2NkeC9jZHguYy02NjUtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL2NoYXIvbWVtLmM9MzE5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF9tZW1fb3BzID0ge1xcbmRyaXZlcnMvY2hhci9tZW0uYy0zMjAtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvY2hhci9tZW0uYzozMjE6XFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXNcXG5kcml2ZXJzL2NoYXIvbWVtLmMtMzIyLSNlbmRpZlxcbi0tXFxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jPTgwNT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFmdV92bWFfb3BzID0ge1xcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYy04MDYtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYzo4MDc6XFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXFxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jLTgwOC0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvcGNpL21tYXAuYz0xOD1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBjaV9waHlzX3ZtX29wcyA9IHtcXG5kcml2ZXJzL3BjaS9tbWFwLmMtMTktI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvcGNpL21tYXAuYzoyMDpcXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcXG5kcml2ZXJzL3BjaS9tbWFwLmMtMjEtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL3Vpby91aW8uYz03MzY9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB1aW9fcGh5c2ljYWxfdm1fb3BzID0ge1xcbmRyaXZlcnMvdWlvL3Vpby5jLTczNy0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxuZHJpdmVycy91aW8vdWlvLmM6NzM4OlxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxcbmRyaXZlcnMvdWlvL3Vpby5jLTczOS0jZW5kaWZcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD04MDY9c3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC04NTgtXFx0LyogY2FsbGVkIGJ5IGFjY2Vzc19wcm9jZXNzX3ZtIHdoZW4gZ2V0X3VzZXJfcGFnZXMoKSBmYWlscywgdHlwaWNhbGx5XFxuaW5jbHVkZS9saW51eC9tbS5oOjg1OTpcXHQgKiBmb3IgdXNlIGJ5IHNwZWNpYWwgVk1Bcy4gU2VlIGFsc28gZ2VuZXJpY19hY2Nlc3NfcGh5cygpIGZvciBhIGdlbmVyaWNcXG5pbmNsdWRlL2xpbnV4L21tLmgtODYwLVxcdCAqIGltcGxlbWVudGF0aW9uIHVzZWZ1bCBmb3IgYW55IGlvbWVtIG1hcHBpbmcuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MzIzND1jb3B5X3BhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEpO1xcbmluY2x1ZGUvbGludXgvbW0uaDozMjM1OmludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuaW5jbHVkZS9saW51eC9tbS5oLTMyMzYtXFx0XFx0XFx0dm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpO1xcbi0tXFxubW0vbWVtb3J5LmM9NzE0MT1FWFBPUlRfU1lNQk9MX0dQTChmb2xsb3dfcGZubWFwX2VuZCk7XFxuLS1cXG5tbS9tZW1vcnkuYy03MTQ0LS8qKlxcbm1tL21lbW9yeS5jOjcxNDU6ICogZ2VuZXJpY19hY2Nlc3NfcGh5cyAtIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIGlvbWVtIG1tYXAgYWNjZXNzXFxubW0vbWVtb3J5LmMtNzE0Ni0gKiBAdm1hOiB0aGUgdm1hIHRvIGFjY2Vzc1xcbi0tXFxubW0vbWVtb3J5LmMtNzE1NS0gKi9cXG5tbS9tZW1vcnkuYzo3MTU2OmludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vbWVtb3J5LmMtNzE1Ny1cXHRcXHRcXHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSlcXG4tLVxcbm1tL21lbW9yeS5jLTcyMDgtfVxcbm1tL21lbW9yeS5jOjcyMDk6RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19hY2Nlc3NfcGh5cyk7XFxubW0vbWVtb3J5LmMtNzIxMC0jZW5kaWZcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg9NjQwPXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB7XFxuLS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTY5Mi1cXHQvKiBjYWxsZWQgYnkgYWNjZXNzX3Byb2Nlc3Nfdm0gd2hlbiBnZXRfdXNlcl9wYWdlcygpIGZhaWxzLCB0eXBpY2FsbHlcXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oOjY5MzpcXHQgKiBmb3IgdXNlIGJ5IHNwZWNpYWwgVk1Bcy4gU2VlIGFsc28gZ2VuZXJpY19hY2Nlc3NfcGh5cygpIGZvciBhIGdlbmVyaWNcXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTY5NC1cXHQgKiBpbXBsZW1lbnRhdGlvbiB1c2VmdWwgZm9yIGFueSBpb21lbSBtYXBwaW5nLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMTowNi4zNTUzODE3NzFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc5NzMzODY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSZWNlbnQgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHRoZSBtb2RpZmljYXRpb25zIEkndmUganVzdCByZXZpZXdlZCBhcmUgbGFzZXItZm9jdXNlZCBvbiBoYXJkZW5pbmcgdGhlIGNvZGUgYWdhaW5zdCBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY2Vzcy4gU3BlY2lmaWNhbGx5LCB3ZSdyZSB0YWxraW5nIGFib3V0IGFkZHJlc3NpbmcgdnVsbmVyYWJpbGl0aWVzIHRoYXQgY291bGQgYXJpc2UgZnJvbSBpbmNvcnJlY3QgbGVuZ3RoIG9yIGJvdW5kcyBjaGVja3MuIFRoaXMgc2VlbXMgcGFydGljdWxhcmx5IHJlbGV2YW50IHdpdGhpbiB0aGUgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGFuZCBgX19hY2Nlc3NfcmVtb3RlX3ZtYCBmdW5jdGlvbnMsIHdoaWNoLCBhcyBJIHJlY2FsbCwgYXJlIGludm9sdmVkIGluIHNpbmdsZS1wYWdlIG1hcHBpbmcgb3BlcmF0aW9ucy4gVGhlIHNoaWZ0IHRvIGNhc3RpbmcgYGFyZ3MucGZuYCB0byBgcmVzb3VyY2Vfc2l6ZV90YCBiZWZvcmUgYml0LXNoaWZ0aW5nIGlzIGEgc21hcnQgbW92ZSDigJMgaXQgZWxlZ2FudGx5IHNpZGVzdGVwcyB0aGUgcG90ZW50aWFsIGZvciBhIDMyLWJpdCBvdmVyZmxvdyBzY2VuYXJpbywgd2hpY2ggY291bGQgaGF2ZSBhbGxvd2VkIGZvciBzb21lIHZlcnkgbmFzdHkgYW5kIGRpZmZpY3VsdC10by1kZXRlY3QgbWVtb3J5IGNvcnJ1cHRpb24uXG5cblRoZSBnb29kIG5ld3MgaXMgdGhhdCB0aGVzZSBjaGFuZ2VzLCB3aGlsZSBjcnVjaWFsIGZvciBzZWN1cml0eSwgc2VlbSB0byBiZSBidWlsZGluZyB1cG9uIGEgZm91bmRhdGlvbiBvZiBleGlzdGluZyBzYWZlZ3VhcmRzLiBJdCBhcHBlYXJzIHRoYXQgYW55IGx1cmtpbmcgYnVmZmVyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIHJlYWRzIHRoYXQgbWlnaHQgaGF2ZSBzbGlwcGVkIHRocm91Z2ggdGhlIGNyYWNrcyBwcmV2aW91c2x5ICpzaG91bGQqIGJlIGNhdWdodCBieSB0aGUgc3RhbmRhcmQgc2FuaXRpemVycyB3ZSd2ZSBnb3QgaW4gcGxhY2UsIGxpa2UgS0FTQU4uIFNvLCB3ZSdyZSBub3Qgc3RhcnRpbmcgZnJvbSBzY3JhdGNoIGhlcmUuIFdlJ3JlIGxheWVyaW5nIGRlZmVuc2UgaW4gZGVwdGguXG5cbkFuZCwgb2YgY291cnNlLCBubyBldmlkZW5jZSBvZiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgLSB3aGljaCBpcyBhIGh1Z2UgcmVsaWVmLiBHb29kLlxuXG5BbGwgaW4gYWxsLCBpdCBsb29rcyBsaWtlIGEgY2xlYW4sIGZvY3VzZWQsIGFuZCB3ZWxsLWNvbnNpZGVyZWQgc2V0IG9mIGFkanVzdG1lbnRzLiBUaW1lIHRvIGNvbmZpZGVudGx5IGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NTcsIk91dHB1dFRva2VucyI6MTk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIxOjEwLjE1MjcyMjY5NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGdlbmVyaWNfYWNjZXNzX3BoeXMoKWAgYW5kIGBfX2FjY2Vzc19yZW1vdGVfdm0oKWAgaW4gYG1tL21lbW9yeS5jYCB0byBjbGFtcCBhY2Nlc3MgbGVuZ3RocyB0byBwYWdlIGJvdW5kYXJpZXMgKGBQQUdFX1NJWkUgLSBvZmZzZXRgKSwgbWFwIG9ubHkgYSBzaW5nbGUgcGFnZSB2aWEgYGlvcmVtYXBfcHJvdCgpYCwgY2FzdCBgYXJncy5wZm5gIHRvIGByZXNvdXJjZV9zaXplX3RgIGJlZm9yZSBzaGlmdGluZywgYW5kIHJldHVybiBlYXJseSB3aGVuIGBsZW4gXFx1MDAzYz0gMGAuXFxuXFxuVGhlc2UgY2hhbmdlcyBmaXggYm91bmRhcnkgY2FsY3VsYXRpb25zIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAvIGFyaXRobWV0aWMgdHJ1bmNhdGlvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGluIHRoaXMgY29kZSBwYXRoIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGdlbmVyaWNfYWNjZXNzX3BoeXMoKWAgYW5kIGBfX2FjY2Vzc19yZW1vdGVfdm0oKWAgaW4gYG1tL21lbW9yeS5jYCB0byBjbGFtcCBhY2Nlc3MgbGVuZ3RocyB0byBwYWdlIGJvdW5kYXJpZXMgKGBQQUdFX1NJWkUgLSBvZmZzZXRgKSwgbWFwIG9ubHkgYSBzaW5nbGUgcGFnZSB2aWEgYGlvcmVtYXBfcHJvdCgpYCwgY2FzdCBgYXJncy5wZm5gIHRvIGByZXNvdXJjZV9zaXplX3RgIGJlZm9yZSBzaGlmdGluZywgYW5kIHJldHVybiBlYXJseSB3aGVuIGBsZW4gXFx1MDAzYz0gMGAuXFxuXFxuVGhlc2UgY2hhbmdlcyBmaXggYm91bmRhcnkgY2FsY3VsYXRpb25zIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAvIGFyaXRobWV0aWMgdHJ1bmNhdGlvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGluIHRoaXMgY29kZSBwYXRoIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowrx4gb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 15:01:29 +0000 UTC FinishedAt: 2026-09-06 15:21:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVMEM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVMEM" ], "series_id": "72f3e33c-28f4-4b63-a17d-ff14375f31f8" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "generic_access_phys", "access_remote_vm", "access_process_vm" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVk1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbmVyaWNfYWNjZXNzX3BoeXMmIzM0OywKICAgICYjMzQ7YWNjZXNzX3JlbW90ZV92bSYjMzQ7LAogICAgJiMzNDthY2Nlc3NfcHJvY2Vzc192bSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBnZW5lcmljX2FjY2Vzc19waHlzKClgIGFuZCBgX19hY2Nlc3NfcmVtb3RlX3ZtKClgIGluIGBtbS9tZW1vcnkuY2AgdG8gY2xhbXAgYWNjZXNzIGxlbmd0aHMgdG8gcGFnZSBib3VuZGFyaWVzIChgUEFHRV9TSVpFIC0gb2Zmc2V0YCksIG1hcCBvbmx5IGEgc2luZ2xlIHBhZ2UgdmlhIGBpb3JlbWFwX3Byb3QoKWAsIGNhc3QgYGFyZ3MucGZuYCB0byBgcmVzb3VyY2Vfc2l6ZV90YCBiZWZvcmUgc2hpZnRpbmcsIGFuZCByZXR1cm4gZWFybHkgd2hlbiBgbGVuIFx1MDAzYz0gMGAuXG5cblRoZXNlIGNoYW5nZXMgZml4IGJvdW5kYXJ5IGNhbGN1bGF0aW9ucyBhbmQgcHJldmVudCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgLyBhcml0aG1ldGljIHRydW5jYXRpb24uIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZXMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBpbiB0aGlzIGNvZGUgcGF0aCAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsZW5ndGggY2FsY3VsYXRpb24sIGJvdW5kcyBjaGVja2luZywgYW5kIHBoeXNpY2FsIGFkZHJlc3MgdHlwZWNhc3RpbmcgaW4gZ2VuZXJpY19hY2Nlc3NfcGh5cygpIGFzIHdlbGwgYXMgdGhlIGxlbmd0aCBjbGFtcGluZyBwYXNzZWQgdG8gdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VhY2Nlc3MoKSBpbiBfX2FjY2Vzc19yZW1vdGVfdm0oKS4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcHRyYWNlIChQVFJBQ0VfUEVFS0RBVEEvUE9LRURBVEEpIGFuZCAvcHJvYy8kcGlkL21lbSBhY2Nlc3NlcyB0byBWTV9JTy9WTV9QRk5NQVAgVk1BcyAoc3VjaCBhcyAvZGV2L21lbSkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgYm91bmRhcnkgYW5kIHBhZ2UtY3Jvc3NpbmcgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg2ZmUzOTYxZGJkYTYxYWUwYjI1MjhjNmFlYWE0YjRkNzU5NjljMmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDE1OjE5OjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IDhiMGMyYzczNWQzZGUuLjA5MzkwZTUxNDMyZjIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmNcbkBAIC03MTY0LDYgJiM0Mzs3MTY0LDExIEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRib29sIHdyaXRhYmxlO1xuIFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGFkZHIgfTtcbiBcbiYjNDM7XHRpZiAobGVuIFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRsZW4gPSBtaW5fdChpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2Zmc2V0KTtcbiYjNDM7XG4gcmV0cnk6XG4gXHRpZiAoZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtNzE3NSw3ICYjNDM7NzE4MCw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpZiAoKHdyaXRlIFx1MDAyNiBGT0xMX1dSSVRFKSBcdTAwMjZcdTAwMjYgIXdyaXRhYmxlKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9BTElHTihsZW4gJiM0Mzsgb2Zmc2V0KSwgcHJvdCk7XG4mIzQzO1x0bWFkZHIgPSBpb3JlbWFwX3Byb3QocGh5c19hZGRyLCBQQUdFX1NJWkUsIHByb3QpO1xuIFx0aWYgKCFtYWRkcilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtNzE4Myw3ICYjNDM7NzE4OCw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGdvdG8gb3V0X3VubWFwO1xuIFxuIFx0aWYgKChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoYXJncy5wZ3Byb3QpKSB8fFxuLVx0ICAgIChwaHlzX2FkZHIgIT0gKGFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSkgfHxcbiYjNDM7XHQgICAgKHBoeXNfYWRkciAhPSAoKHJlc291cmNlX3NpemVfdClhcmdzLnBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpIHx8XG4gXHQgICAgKHdyaXRhYmxlICE9IGFyZ3Mud3JpdGFibGUpKSB7XG4gXHRcdGZvbGxvd19wZm5tYXBfZW5kKFx1MDAyNmFyZ3MpO1xuIFx0XHRpb3VubWFwKG1hZGRyKTtcbkBAIC03MjU0LDcgJiM0Mzs3MjU5LDggQEAgc3RhdGljIGludCBfX2FjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiAjaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG4gXHRcdFx0aWYgKHZtYS1cdTAwM2V2bV9vcHMgXHUwMDI2XHUwMDI2IHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlYWNjZXNzKVxuIFx0XHRcdFx0Ynl0ZXMgPSB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2Vzcyh2bWEsIGFkZHIsIGJ1Zixcbi1cdFx0XHRcdFx0XHRcdCAgICBsZW4sIHdyaXRlKTtcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKGFkZHIpKSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgd3JpdGUpO1xuICNlbmRpZlxuIFx0XHRcdGlmIChieXRlcyBcdTAwM2M9IDApXG4gXHRcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERVZNRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZW5lcmljX2FjY2Vzc19waHlzJiMzNDssCiAgICAmIzM0O2FjY2Vzc19yZW1vdGVfdm0mIzM0OywKICAgICYjMzQ7YWNjZXNzX3Byb2Nlc3Nfdm0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbGVuZ3RoIGNhbGN1bGF0aW9uLCBib3VuZHMgY2hlY2tpbmcsIGFuZCBwaHlzaWNhbCBhZGRyZXNzIHR5cGVjYXN0aW5nIGluIGdlbmVyaWNfYWNjZXNzX3BoeXMoKSBhcyB3ZWxsIGFzIHRoZSBsZW5ndGggY2xhbXBpbmcgcGFzc2VkIHRvIHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlYWNjZXNzKCkgaW4gX19hY2Nlc3NfcmVtb3RlX3ZtKCkuIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHB0cmFjZSAoUFRSQUNFX1BFRUtEQVRBL1BPS0VEQVRBKSBhbmQgL3Byb2MvJHBpZC9tZW0gYWNjZXNzZXMgdG8gVk1fSU8vVk1fUEZOTUFQIFZNQXMgKHN1Y2ggYXMgL2Rldi9tZW0pLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGJvdW5kYXJ5IGFuZCBwYWdlLWNyb3NzaW5nIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NmZlMzk2MWRiZGE2MWFlMGIyNTI4YzZhZWFhNGI0ZDc1OTY5YzJlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAxNToxOTo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggOGIwYzJjNzM1ZDNkZS4uMDkzOTBlNTE0MzJmMiAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTcxNjQsNiAmIzQzOzcxNjQsMTEgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlib29sIHdyaXRhYmxlOwogCXN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSBhZGRyIH07CiAKJiM0MzsJaWYgKGxlbiAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWxlbiA9IG1pbl90KGludCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXQpOwomIzQzOwogcmV0cnk6CiAJaWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoJmFtcDthcmdzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03MTc1LDcgJiM0Mzs3MTgwLDcgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlpZiAoKHdyaXRlICZhbXA7IEZPTExfV1JJVEUpICZhbXA7JmFtcDsgIXdyaXRhYmxlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9BTElHTihsZW4gJiM0Mzsgb2Zmc2V0KSwgcHJvdCk7CiYjNDM7CW1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9TSVpFLCBwcm90KTsKIAlpZiAoIW1hZGRyKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNzE4Myw3ICYjNDM7NzE4OCw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCWdvdG8gb3V0X3VubWFwOwogCiAJaWYgKChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoYXJncy5wZ3Byb3QpKSB8fAotCSAgICAocGh5c19hZGRyICE9IChhcmdzLnBmbiAmbHQ7Jmx0OyBQQUdFX1NISUZUKSkgfHwKJiM0MzsJICAgIChwaHlzX2FkZHIgIT0gKChyZXNvdXJjZV9zaXplX3QpYXJncy5wZm4gJmx0OyZsdDsgUEFHRV9TSElGVCkpIHx8CiAJICAgICh3cml0YWJsZSAhPSBhcmdzLndyaXRhYmxlKSkgewogCQlmb2xsb3dfcGZubWFwX2VuZCgmYW1wO2FyZ3MpOwogCQlpb3VubWFwKG1hZGRyKTsKQEAgLTcyNTQsNyAmIzQzOzcyNTksOCBAQCBzdGF0aWMgaW50IF9fYWNjZXNzX3JlbW90ZV92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVAogCQkJaWYgKHZtYS0mZ3Q7dm1fb3BzICZhbXA7JmFtcDsgdm1hLSZndDt2bV9vcHMtJmd0O2FjY2VzcykKIAkJCQlieXRlcyA9IHZtYS0mZ3Q7dm1fb3BzLSZndDthY2Nlc3Modm1hLCBhZGRyLCBidWYsCi0JCQkJCQkJICAgIGxlbiwgd3JpdGUpOwomIzQzOwkJCQkJCQkgICAgbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKGFkZHIpKSwKJiM0MzsJCQkJCQkJICAgIHdyaXRlKTsKICNlbmRpZgogCQkJaWYgKGJ5dGVzICZsdDs9IDApCiAJCQkJYnJlYWs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMDQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdGhlIGFzc29jaWF0ZWQgdG9vbHMuIEZpcnN0LCBhIHF1aWNrIG92ZXJ2aWV3IHRvIGdldCBvcmllbnRlZDogbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgY2hhbmdlIHdpdGhpbiB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gYG1tL21lbW9yeS5jYC4gTXkgaW5pdGlhbCBzY2FuIGhpZ2hsaWdodHMgdHdvIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZDogYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGFuZCBgX19hY2Nlc3NfcmVtb3RlX3ZtYC4gTm93LCBJIHdhbnQgdG8gem9vbSBpbiBhbmQgZXhhbWluZSB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGVzZSBjaGFuZ2VzIGluIGBtbS9tZW1vcnkuY2AgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaW1wYWN0IGJldHRlci4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZnJhbWV3b3JrIGFuZCBjb250ZXh0IHRvIGFuYWx5emUgYW55IGZ1bmN0aW9uYWwgdXBkYXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzE1MDpcdCAqIEB3cml0ZTogc2V0IHRvIEZPTExfV1JJVEUgd2hlbiB3cml0aW5nLCBvdGhlcndpc2UgcmVhZGluZ1xuNzE1MTpcdCAqXG43MTUyOlx0ICogVGhpcyBpcyBhIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIFx1MDAyNnZtX29wZXJhdGlvbnNfc3RydWN0LmFjY2VzcyBmb3IgYW5cbjcxNTM6XHQgKiBpb21lbSBtYXBwaW5nLiBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgYnkgYWNjZXNzX3Byb2Nlc3Nfdm0oKSB3aGVuIHRoZSBAdm1hIGlzXG43MTU0Olx0ICogbm90IHBhZ2UgYmFzZWQuXG43MTU1Olx0ICovXG43MTU2Olx0aW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbjcxNTc6XHRcdFx0XHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSlcbjcxNTg6XHR7XG43MTU5Olx0XHRyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyO1xuNzE2MDpcdFx0cGdwcm90X3QgcHJvdCA9IF9fcGdwcm90KDApO1xuNzE2MTpcdFx0dm9pZCBfX2lvbWVtICptYWRkcjtcbjcxNjI6XHRcdGludCBvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShhZGRyKTtcbjcxNjM6XHRcdGludCByZXQgPSAtRUlOVkFMO1xuNzE2NDpcdFx0Ym9vbCB3cml0YWJsZTtcbjcxNjU6XHRcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSBhZGRyIH07XG43MTY2Olx0XG43MTY3Olx0XHRpZiAobGVuIFx1MDAzYz0gMClcbjcxNjg6XHRcdFx0cmV0dXJuIDA7XG43MTY5Olx0XG43MTcwOlx0XHRsZW4gPSBtaW5fdChpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2Zmc2V0KTtcbjcxNzE6XHRcbjcxNzI6XHRyZXRyeTpcbjcxNzM6XHRcdGlmIChmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpKVxuNzE3NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjcxNzU6XHRcdHByb3QgPSBhcmdzLnBncHJvdDtcbjcxNzY6XHRcdHBoeXNfYWRkciA9IChyZXNvdXJjZV9zaXplX3QpYXJncy5wZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG43MTc3Olx0XHR3cml0YWJsZSA9IGFyZ3Mud3JpdGFibGU7XG43MTc4Olx0XHRmb2xsb3dfcGZubWFwX2VuZChcdTAwMjZhcmdzKTtcbjcxNzk6XHRcbjcxODA6XHRcdGlmICgod3JpdGUgXHUwMDI2IEZPTExfV1JJVEUpIFx1MDAyNlx1MDAyNiAhd3JpdGFibGUpXG43MTgxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzE4MjpcdFxuNzE4MzpcdFx0bWFkZHIgPSBpb3JlbWFwX3Byb3QocGh5c19hZGRyLCBQQUdFX1NJWkUsIHByb3QpO1xuNzE4NDpcdFx0aWYgKCFtYWRkcilcbjcxODU6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG43MTg2Olx0XG43MTg3Olx0XHRpZiAoZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKSlcbjcxODg6XHRcdFx0Z290byBvdXRfdW5tYXA7XG43MTg5Olx0XG43MTkwOlx0XHRpZiAoKHBncHJvdF92YWwocHJvdCkgIT0gcGdwcm90X3ZhbChhcmdzLnBncHJvdCkpIHx8XG43MTkxOlx0XHQgICAgKHBoeXNfYWRkciAhPSAoKHJlc291cmNlX3NpemVfdClhcmdzLnBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpIHx8XG43MTkyOlx0XHQgICAgKHdyaXRhYmxlICE9IGFyZ3Mud3JpdGFibGUpKSB7XG43MTkzOlx0XHRcdGZvbGxvd19wZm5tYXBfZW5kKFx1MDAyNmFyZ3MpO1xuNzE5NDpcdFx0XHRpb3VubWFwKG1hZGRyKTtcbjcxOTU6XHRcdFx0Z290byByZXRyeTtcbjcxOTY6XHRcdH1cbjcxOTc6XHRcbjcxOTg6XHRcdGlmICh3cml0ZSlcbjcxOTk6XHRcdFx0bWVtY3B5X3RvaW8obWFkZHIgJiM0Mzsgb2Zmc2V0LCBidWYsIGxlbik7XG43MjAwOlx0XHRlbHNlXG43MjAxOlx0XHRcdG1lbWNweV9mcm9taW8oYnVmLCBtYWRkciAmIzQzOyBvZmZzZXQsIGxlbik7XG43MjAyOlx0XHRyZXQgPSBsZW47XG43MjAzOlx0XHRmb2xsb3dfcGZubWFwX2VuZChcdTAwMjZhcmdzKTtcbjcyMDQ6XHRvdXRfdW5tYXA6XG43MjA1Olx0XHRpb3VubWFwKG1hZGRyKTtcbjcyMDY6XHRcbjcyMDc6XHRcdHJldHVybiByZXQ7XG43MjA4Olx0fVxuNzIwOTpcdEVYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfYWNjZXNzX3BoeXMpO1xuNzIxMDpcdCNlbmRpZlxuNzIxMTpcdFxuNzIxMjpcdC8qXG43MjEzOlx0ICogQWNjZXNzIGFub3RoZXIgcHJvY2VzcyYjMzk7IGFkZHJlc3Mgc3BhY2UgYXMgZ2l2ZW4gaW4gbW0uXG43MjE0Olx0ICovXG43MjE1Olx0c3RhdGljIGludCBfX2FjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbjcyMTY6XHRcdFx0XHQgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG43MjE3Olx0e1xuNzIxODpcdFx0dm9pZCAqb2xkX2J1ZiA9IGJ1ZjtcbjcyMTk6XHRcdGludCB3cml0ZSA9IGd1cF9mbGFncyBcdTAwMjYgRk9MTF9XUklURTtcbjcyMjA6XHRcbjcyMjE6XHRcdGlmIChtbWFwX3JlYWRfbG9ja19raWxsYWJsZShtbSkpXG43MjIyOlx0XHRcdHJldHVybiAwO1xuNzIyMzpcdFxuNzIyNDpcdFx0LyogVW50YWcgdGhlIGFkZHJlc3MgYmVmb3JlIGxvb2tpbmcgdXAgdGhlIFZNQSAqL1xuNzIyNTpcdFx0YWRkciA9IHVudGFnZ2VkX2FkZHJfcmVtb3RlKG1tLCBhZGRyKTtcbjcyMjY6XHRcbjcyMjc6XHRcdC8qIEF2b2lkIHRyaWdnZXJpbmcgdGhlIHRlbXBvcmFyeSB3YXJuaW5nIGluIF9fZ2V0X3VzZXJfcGFnZXMgKi9cbjcyMjg6XHRcdGlmICghdm1hX2xvb2t1cChtbSwgYWRkcikgXHUwMDI2XHUwMDI2ICFleHBhbmRfc3RhY2sobW0sIGFkZHIpKVxuNzIyOTpcdFx0XHRyZXR1cm4gMDtcbjcyMzA6XHRcbjcyMzE6XHRcdC8qIGlnbm9yZSBlcnJvcnMsIGp1c3QgY2hlY2sgaG93IG11Y2ggd2FzIHN1Y2Nlc3NmdWxseSB0cmFuc2ZlcnJlZCAqL1xuNzIzMjpcdFx0d2hpbGUgKGxlbikge1xuNzIzMzpcdFx0XHRpbnQgYnl0ZXMsIG9mZnNldDtcbjcyMzQ6XHRcdFx0dm9pZCAqbWFkZHI7XG43MjM1Olx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG43MjM2Olx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gTlVMTDtcbjcyMzc6XHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBnZXRfdXNlcl9wYWdlX3ZtYV9yZW1vdGUobW0sIGFkZHIsXG43MjM4Olx0XHRcdFx0XHRcdFx0XHQgICAgIGd1cF9mbGFncywgXHUwMDI2dm1hKTtcbjcyMzk6XHRcbjcyNDA6XHRcdFx0aWYgKElTX0VSUihwYWdlKSkge1xuNzI0MTpcdFx0XHRcdC8qIFdlIG1pZ2h0IG5lZWQgdG8gZXhwYW5kIHRoZSBzdGFjayB0byBhY2Nlc3MgaXQgKi9cbjcyNDI6XHRcdFx0XHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyKTtcbjcyNDM6XHRcdFx0XHRpZiAoIXZtYSkge1xuNzI0NDpcdFx0XHRcdFx0dm1hID0gZXhwYW5kX3N0YWNrKG1tLCBhZGRyKTtcbjcyNDU6XHRcbjcyNDY6XHRcdFx0XHRcdC8qIG1tYXBfbG9jayB3YXMgZHJvcHBlZCBvbiBmYWlsdXJlICovXG43MjQ3Olx0XHRcdFx0XHRpZiAoIXZtYSlcbjcyNDg6XHRcdFx0XHRcdFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XG43MjQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAzMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyBDb25kaXRpb25hbCBDb21waWxhdGlvbiBpbiB0aGUgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBjZXJ0YWluIHNlY3Rpb25zIG9mIHRoaXMgY29kZSBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZC4gVG8gZG8gdGhhdCwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGZpbGUgYW5kIHNwZWNpZmljYWxseSBmb2N1cyBvbiBsaW5lcyBhcm91bmQgdGhlIDcxNDAgbWFyay4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYCNpZmRlZmAgZGlyZWN0aXZlcyBvciBhbnl0aGluZyB0aGF0IGxvb2tzIGxpa2UgcHJlcHJvY2Vzc29yIGd1YXJkcyB0aGF0IGNvbnRyb2wgd2hldGhlciBhIHBhcnRpY3VsYXIgYmxvY2sgb2YgY29kZSBnZXRzIGluY2x1ZGVkIGR1cmluZyBjb21waWxhdGlvbi4gVGhlc2UgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBkaWZmZXJlbnQgYnVpbGQgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMgdGhhdCBhcmUgYmVpbmcgc2VsZWN0aXZlbHkgZW5hYmxlZCBvciBkaXNhYmxlZC4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHNlbnNlIG9mIHdoaWNoIHBhcnRzIG9mIHRoZSBjb2RlIGFyZSBhY3RpdmUgdW5kZXIgYSBwYXJ0aWN1bGFyIHNldCBvZiBjb21waWxlciBmbGFncyBvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHdoaWNoIHdpbGwgYmUgdml0YWwgZm9yIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MTM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcxMzU6XHR7XG43MTM2Olx0XHRpZiAoYXJncy1cdTAwM2Vsb2NrKVxuNzEzNzpcdFx0XHRzcGluX3VubG9jayhhcmdzLVx1MDAzZWxvY2spO1xuNzEzODpcdFx0aWYgKGFyZ3MtXHUwMDNlcHRlcClcbjcxMzk6XHRcdFx0cHRlX3VubWFwKGFyZ3MtXHUwMDNlcHRlcCk7XG43MTQwOlx0fVxuNzE0MTpcdEVYUE9SVF9TWU1CT0xfR1BMKGZvbGxvd19wZm5tYXBfZW5kKTtcbjcxNDI6XHRcbjcxNDM6XHQjaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG43MTQ0Olx0LyoqXG43MTQ1Olx0ICogZ2VuZXJpY19hY2Nlc3NfcGh5cyAtIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIGlvbWVtIG1tYXAgYWNjZXNzXG43MTQ2Olx0ICogQHZtYTogdGhlIHZtYSB0byBhY2Nlc3NcbjcxNDc6XHQgKiBAYWRkcjogdXNlcnNwYWNlIGFkZHJlc3MsIG5vdCByZWxhdGl2ZSBvZmZzZXQgd2l0aGluIEB2bWFcbjcxNDg6XHQgKiBAYnVmOiBidWZmZXIgdG8gcmVhZC93cml0ZVxuNzE0OTpcdCAqIEBsZW46IGxlbmd0aCBvZiB0cmFuc2ZlclxuNzE1MDpcdCAqIEB3cml0ZTogc2V0IHRvIEZPTExfV1JJVEUgd2hlbiB3cml0aW5nLCBvdGhlcndpc2UgcmVhZGluZ1xuNzE1MTpcdCAqXG43MTUyOlx0ICogVGhpcyBpcyBhIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIFx1MDAyNnZtX29wZXJhdGlvbnNfc3RydWN0LmFjY2VzcyBmb3IgYW5cbjcxNTM6XHQgKiBpb21lbSBtYXBwaW5nLiBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgYnkgYWNjZXNzX3Byb2Nlc3Nfdm0oKSB3aGVuIHRoZSBAdm1hIGlzXG43MTU0Olx0ICogbm90IHBhZ2UgYmFzZWQuXG43MTU1Olx0ICovXG43MTU2Olx0aW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbjcxNTc6XHRcdFx0XHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSlcbjcxNTg6XHR7XG43MTU5Olx0XHRyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyO1xuNzE2MDpcdFx0cGdwcm90X3QgcHJvdCA9IF9fcGdwcm90KDApO1xuNzE2MTpcdFx0dm9pZCBfX2lvbWVtICptYWRkcjtcbjcxNjI6XHRcdGludCBvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShhZGRyKTtcbjcxNjM6XHRcdGludCByZXQgPSAtRUlOVkFMO1xuNzE2NDpcdFx0Ym9vbCB3cml0YWJsZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzMwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHJlcXVlc3QsIHRoaW5raW5nIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IEFjY2VzcyBQYXR0ZXJucyoqCgpPa2F5LCBzbyB0aGUgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucyB3aXRoaW4gdGhlIHN5c3RlbS4gSSBuZWVkIHRvIHRyYWNlIGFuZCBhbmFseXplIGNhbGxzIHRvIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHJlbW90ZSBtZW1vcnkgYWNjZXNzLiBTcGVjaWZpY2FsbHksIHRoZSByZXF1ZXN0IHdhbnRzIG1lIHRvIGxvb2sgZm9yIHVzYWdlcyBvZiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AuIFRoaXMgbGlrZWx5IGluZGljYXRlcyBpbnRlcmFjdGlvbnMgd2l0aCBwaHlzaWNhbCBtZW1vcnksIHBlcmhhcHMgZGV2aWNlIGludGVyYWN0aW9uIG9yIGRpcmVjdCBtZW1vcnkgYWNjZXNzLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2FsbHMuCgpCZXlvbmQgdGhhdCwgdGhlIHJlcXVlc3QgZXhwYW5kcyB0aGUgc2NvcGUgdG8gaW5jbHVkZSB2YXJpYXRpb25zIG9mIHJlbW90ZSBWTSBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGJlIGluY2x1c2l2ZSBhbmQgbG9vayBmb3IgYF9fYWNjZXNzX3JlbW90ZV92bWAsIGBhY2Nlc3NfcmVtb3RlX3ZtYCwgYW5kIGBhY2Nlc3NfcHJvY2Vzc192bWAuIFRoZXNlIGFsbCBwb2ludCB0byB0aGUgcmV0cmlldmFsIG9yIG1vZGlmaWNhdGlvbiBvZiBtZW1vcnkgZnJvbSBhIHZpcnR1YWwgbWFjaGluZSBvciBhIHNlcGFyYXRlIHByb2Nlc3MuIFRoZSBnb2FsIGlzIGxpa2VseSB0byBmaW5kIGNhc2VzIG9mIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIGRlYnVnZ2luZyBvcHBvcnR1bml0aWVzLCBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyByZWxhdGVkIHRvIHRoZXNlIGZ1bmN0aW9ucy4gSXQmIzM5O3MgYWJvdXQgYnVpbGRpbmcgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgYW5kIGhvdyByZW1vdGUgbWVtb3J5IGFjY2VzcyBpcyBiZWluZyB1c2VkLiBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHBlcm11dGF0aW9ucyBvZiBob3cgdGhlc2UgY2FsbHMgYXJlIGhhbmRsZWQgYW5kIHdoYXQgc2VjdXJpdHkgZmVhdHVyZXMgbWF5IGJlIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2VuZXJpY19hY2Nlc3NfcGh5cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NkeC9jZHguYz02NjI9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBjZHhfcGh5c192bV9vcHMgPSB7XG5kcml2ZXJzL2NkeC9jZHguYy02NjMtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy9jZHgvY2R4LmM6NjY0Olx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXG5kcml2ZXJzL2NkeC9jZHguYy02NjUtI2VuZGlmXG4tLVxuZHJpdmVycy9jaGFyL21lbS5jPTMxOT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1tYXBfbWVtX29wcyA9IHtcbmRyaXZlcnMvY2hhci9tZW0uYy0zMjAtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy9jaGFyL21lbS5jOjMyMTpcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzXG5kcml2ZXJzL2NoYXIvbWVtLmMtMzIyLSNlbmRpZlxuLS1cbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYz04MDU9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhZnVfdm1hX29wcyA9IHtcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYy04MDYtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jOjgwNzpcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jLTgwOC0jZW5kaWZcbi0tXG5kcml2ZXJzL3BjaS9tbWFwLmM9MTg9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBwY2lfcGh5c192bV9vcHMgPSB7XG5kcml2ZXJzL3BjaS9tbWFwLmMtMTktI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy9wY2kvbW1hcC5jOjIwOlx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXG5kcml2ZXJzL3BjaS9tbWFwLmMtMjEtI2VuZGlmXG4tLVxuZHJpdmVycy91aW8vdWlvLmM9NzM2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdWlvX3BoeXNpY2FsX3ZtX29wcyA9IHtcbmRyaXZlcnMvdWlvL3Vpby5jLTczNy0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL3Vpby91aW8uYzo3Mzg6XHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcbmRyaXZlcnMvdWlvL3Vpby5jLTczOS0jZW5kaWZcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9ODA2PXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB7XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTg1OC1cdC8qIGNhbGxlZCBieSBhY2Nlc3NfcHJvY2Vzc192bSB3aGVuIGdldF91c2VyX3BhZ2VzKCkgZmFpbHMsIHR5cGljYWxseVxuaW5jbHVkZS9saW51eC9tbS5oOjg1OTpcdCAqIGZvciB1c2UgYnkgc3BlY2lhbCBWTUFzLiBTZWUgYWxzbyBnZW5lcmljX2FjY2Vzc19waHlzKCkgZm9yIGEgZ2VuZXJpY1xuaW5jbHVkZS9saW51eC9tbS5oLTg2MC1cdCAqIGltcGxlbWVudGF0aW9uIHVzZWZ1bCBmb3IgYW55IGlvbWVtIG1hcHBpbmcuXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTMyMzQ9Y29weV9wYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hKTtcbmluY2x1ZGUvbGludXgvbW0uaDozMjM1OmludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5pbmNsdWRlL2xpbnV4L21tLmgtMzIzNi1cdFx0XHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSk7XG4tLVxubW0vbWVtb3J5LmM9NzE0MT1FWFBPUlRfU1lNQk9MX0dQTChmb2xsb3dfcGZubWFwX2VuZCk7XG4tLVxubW0vbWVtb3J5LmMtNzE0NC0vKipcbm1tL21lbW9yeS5jOjcxNDU6ICogZ2VuZXJpY19hY2Nlc3NfcGh5cyAtIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIGlvbWVtIG1tYXAgYWNjZXNzXG5tbS9tZW1vcnkuYy03MTQ2LSAqIEB2bWE6IHRoZSB2bWEgdG8gYWNjZXNzXG4tLVxubW0vbWVtb3J5LmMtNzE1NS0gKi9cbm1tL21lbW9yeS5jOjcxNTY6aW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL21lbW9yeS5jLTcxNTctXHRcdFx0dm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpXG4tLVxubW0vbWVtb3J5LmMtNzIwOC19XG5tbS9tZW1vcnkuYzo3MjA5OkVYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfYWNjZXNzX3BoeXMpO1xubW0vbWVtb3J5LmMtNzIxMC0jZW5kaWZcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oPTY0MD1zdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgtNjkyLVx0LyogY2FsbGVkIGJ5IGFjY2Vzc19wcm9jZXNzX3ZtIHdoZW4gZ2V0X3VzZXJfcGFnZXMoKSBmYWlscywgdHlwaWNhbGx5XG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oOjY5MzpcdCAqIGZvciB1c2UgYnkgc3BlY2lhbCBWTUFzLiBTZWUgYWxzbyBnZW5lcmljX2FjY2Vzc19waHlzKCkgZm9yIGEgZ2VuZXJpY1xudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC02OTQtXHQgKiBpbXBsZW1lbnRhdGlvbiB1c2VmdWwgZm9yIGFueSBpb21lbSBtYXBwaW5nLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFJlbW90ZSBWTSBBY2Nlc3MgUGF0aCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyB3aGVuIGBfX2FjY2Vzc19yZW1vdGVfdm1gIGdldHMgaW52b2x2ZWQsIHNwZWNpZmljYWxseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHZpcnR1YWwgbWVtb3J5IGFyZWEgKGB2bWFgKSBhbmQgaXRzIG9wZXJhdGlvbnMgKGB2bV9vcHNgKS4gSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBjYWxscyB0byBgdm1hLSZndDt2bV9vcHMtJmd0O2FjY2Vzc2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBuYXZpZ2F0ZSB0byBgbW0vbWVtb3J5LmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZXMgNzI0MCB0byA3MzAwLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlc2UgdHlwZXMgb2YgbWVtb3J5IGFjY2VzcyBpbnRlcmFjdGlvbnMgYXJlIGhhbmRsZWQuIEkgZXhwZWN0IHRvIHNlZSB0aGUgY29yZSBsb2dpYyB0aGVyZSwgd2hlcmUgdGhlIFZNIG9wZXJhdGlvbiBpcyBkaXNwYXRjaGVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludCBJIG5lZWQgdG8gZm9sbG93IHRoZSB0aHJlYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcyNDA6XHRcdFx0aWYgKElTX0VSUihwYWdlKSkge1xuNzI0MTpcdFx0XHRcdC8qIFdlIG1pZ2h0IG5lZWQgdG8gZXhwYW5kIHRoZSBzdGFjayB0byBhY2Nlc3MgaXQgKi9cbjcyNDI6XHRcdFx0XHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyKTtcbjcyNDM6XHRcdFx0XHRpZiAoIXZtYSkge1xuNzI0NDpcdFx0XHRcdFx0dm1hID0gZXhwYW5kX3N0YWNrKG1tLCBhZGRyKTtcbjcyNDU6XHRcbjcyNDY6XHRcdFx0XHRcdC8qIG1tYXBfbG9jayB3YXMgZHJvcHBlZCBvbiBmYWlsdXJlICovXG43MjQ3Olx0XHRcdFx0XHRpZiAoIXZtYSlcbjcyNDg6XHRcdFx0XHRcdFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XG43MjQ5Olx0XG43MjUwOlx0XHRcdFx0XHQvKiBUcnkgYWdhaW4gaWYgc3RhY2sgZXhwYW5zaW9uIHdvcmtlZCAqL1xuNzI1MTpcdFx0XHRcdFx0Y29udGludWU7XG43MjUyOlx0XHRcdFx0fVxuNzI1MzpcdFxuNzI1NDpcdFx0XHRcdC8qXG43MjU1Olx0XHRcdFx0ICogQ2hlY2sgaWYgdGhpcyBpcyBhIFZNX0lPIHwgVk1fUEZOTUFQIFZNQSwgd2hpY2hcbjcyNTY6XHRcdFx0XHQgKiB3ZSBjYW4gYWNjZXNzIHVzaW5nIHNsaWdodGx5IGRpZmZlcmVudCBjb2RlLlxuNzI1NzpcdFx0XHRcdCAqL1xuNzI1ODpcdFx0XHRcdGJ5dGVzID0gMDtcbjcyNTk6XHQjaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG43MjYwOlx0XHRcdFx0aWYgKHZtYS1cdTAwM2V2bV9vcHMgXHUwMDI2XHUwMDI2IHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlYWNjZXNzKVxuNzI2MTpcdFx0XHRcdFx0Ynl0ZXMgPSB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2Vzcyh2bWEsIGFkZHIsIGJ1ZixcbjcyNjI6XHRcdFx0XHRcdFx0XHRcdCAgICBtaW5fdChpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2UoYWRkcikpLFxuNzI2MzpcdFx0XHRcdFx0XHRcdFx0ICAgIHdyaXRlKTtcbjcyNjQ6XHQjZW5kaWZcbjcyNjU6XHRcdFx0XHRpZiAoYnl0ZXMgXHUwMDNjPSAwKVxuNzI2NjpcdFx0XHRcdFx0YnJlYWs7XG43MjY3Olx0XHRcdH0gZWxzZSB7XG43MjY4Olx0XHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuNzI2OTpcdFx0XHRcdGJ5dGVzID0gbGVuO1xuNzI3MDpcdFx0XHRcdG9mZnNldCA9IGFkZHIgXHUwMDI2IChQQUdFX1NJWkUtMSk7XG43MjcxOlx0XHRcdFx0aWYgKGJ5dGVzIFx1MDAzZSBQQUdFX1NJWkUtb2Zmc2V0KVxuNzI3MjpcdFx0XHRcdFx0Ynl0ZXMgPSBQQUdFX1NJWkUtb2Zmc2V0O1xuNzI3MzpcdFxuNzI3NDpcdFx0XHRcdG1hZGRyID0ga21hcF9sb2NhbF9mb2xpbyhmb2xpbywgZm9saW9fcGFnZV9pZHgoZm9saW8sIHBhZ2UpICogUEFHRV9TSVpFKTtcbjcyNzU6XHRcdFx0XHRpZiAod3JpdGUpIHtcbjcyNzY6XHRcdFx0XHRcdGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgYWRkcixcbjcyNzc6XHRcdFx0XHRcdFx0XHQgIG1hZGRyICYjNDM7IG9mZnNldCwgYnVmLCBieXRlcyk7XG43Mjc4Olx0XHRcdFx0XHRmb2xpb19tYXJrX2RpcnR5X2xvY2soZm9saW8pO1xuNzI3OTpcdFx0XHRcdH0gZWxzZSB7XG43MjgwOlx0XHRcdFx0XHRjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgYWRkcixcbjcyODE6XHRcdFx0XHRcdFx0XHQgICAgYnVmLCBtYWRkciAmIzQzOyBvZmZzZXQsIGJ5dGVzKTtcbjcyODI6XHRcdFx0XHR9XG43MjgzOlx0XHRcdFx0Zm9saW9fcmVsZWFzZV9rbWFwKGZvbGlvLCBtYWRkcik7XG43Mjg0Olx0XHRcdH1cbjcyODU6XHRcdFx0bGVuIC09IGJ5dGVzO1xuNzI4NjpcdFx0XHRidWYgJiM0Mzs9IGJ5dGVzO1xuNzI4NzpcdFx0XHRhZGRyICYjNDM7PSBieXRlcztcbjcyODg6XHRcdH1cbjcyODk6XHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuNzI5MDpcdFxuNzI5MTpcdFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XG43MjkyOlx0fVxuNzI5MzpcdFxuNzI5NDpcdC8qKlxuNzI5NTpcdCAqIGFjY2Vzc19yZW1vdGVfdm0gLSBhY2Nlc3MgYW5vdGhlciBwcm9jZXNzJiMzOTsgYWRkcmVzcyBzcGFjZVxuNzI5NjpcdCAqIEBtbTpcdFx0dGhlIG1tX3N0cnVjdCBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2VcbjcyOTc6XHQgKiBAYWRkcjpcdHN0YXJ0IGFkZHJlc3MgdG8gYWNjZXNzXG43Mjk4Olx0ICogQGJ1ZjpcdHNvdXJjZSBvciBkZXN0aW5hdGlvbiBidWZmZXJcbjcyOTk6XHQgKiBAbGVuOlx0bnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJlbW90ZSBWTSBBY2Nlc3MgTWVjaGFuaXNtcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB0aGUgZnVuY3Rpb24gYF9fYWNjZXNzX3JlbW90ZV92bWAgaXMgYXQgdGhlIGhlYXJ0IG9mIHJlbW90ZSBWTSBhY2Nlc3MsIGFuZCBpdCYjMzk7cyBiZWluZyBjYWxsZWQgYnkgYSB2YXJpZXR5IG9mIG1ldGhvZHM6IGBhY2Nlc3NfcmVtb3RlX3ZtYCBpdHNlbGYsIGBhY2Nlc3NfcHJvY2Vzc192bWAsIGBwdHJhY2VgLCByZWFkaW5nIGRpcmVjdGx5IGZyb20gYC9wcm9jLyRwaWQvbWVtYCwgYW5kIHNvIG9uLgoKVGhlIGNyaXRpY2FsIHBvaW50IGlzIGhvdyB0aGlzIGFjY2VzcyBiZWhhdmVzIHdoZW4gaXQgdG91Y2hlcyBhIFZpcnR1YWwgTWVtb3J5IEFyZWEgKFZNQSkgdGhhdCBoYXMgYSBzcGVjaWZpYyBgLmFjY2Vzc2AgbWV0aG9kIGFzc2lnbmVkIHRvIGl0LiAgVGhhdCBpbmNsdWRlcyBhcmVhcyBsaWtlIGAvZGV2L21lbWAsIG1lbW9yeSBtYXBwZWQgUENJIGRldmljZXMsIFVzZXIgSS9PIChVSU8pIHJlZ2lvbnMsIGFuZCBwb3RlbnRpYWxseSB0aG9zZSBoYW5kbGVkIGJ5IGBnZW5lcmljX2FjY2Vzc19waHlzYC4gSW4gdGhlc2UgY2FzZXMsIHRoZSBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgZnVuY3Rpb24sIG9yIHRoZSBWTUHigJlzIGB2bV9vcHMtJmd0O2FjY2Vzc2AgZnVuY3Rpb24gaXMgZXhlY3V0ZWQuCgpTaW5jZSBJJiMzOTttIHdvcmtpbmcgd2l0aCBhbiBBTUQ2NCBzeXN0ZW0sIGFuZCBhbHNvIGF3YXJlIG9mIG90aGVyIGFyY2hpdGVjdHVyZXMsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcXVpY2tseTogRG9lcyB0aGUgYXJjaGl0ZWN0dXJlIGluIHF1ZXN0aW9uICphY3R1YWxseSogZGVmaW5lIGBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RgPyAgVGhpcyBpcyBhbiBpbXBvcnRhbnQgZGV0YWlsLCBhcyBpdCBwbGF5cyBhIHJvbGUgaW4gcHJvdGVjdGVkIEkvTyByZW1hcHBpbmcuIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZGVmaW5pdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEFWRV9JT1JFTUFQX1BST1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9mZWF0dXJlcy92bS9pb3JlbWFwX3Byb3QvYXJjaC1zdXBwb3J0LnR4dC0yLSMgRmVhdHVyZSBuYW1lOiAgICAgICAgICBpb3JlbWFwX3Byb3RcbkRvY3VtZW50YXRpb24vZmVhdHVyZXMvdm0vaW9yZW1hcF9wcm90L2FyY2gtc3VwcG9ydC50eHQ6MzojICAgICAgICAgS2NvbmZpZzogICAgICAgSEFWRV9JT1JFTUFQX1BST1RcbkRvY3VtZW50YXRpb24vZmVhdHVyZXMvdm0vaW9yZW1hcF9wcm90L2FyY2gtc3VwcG9ydC50eHQtNC0jICAgICAgICAgZGVzY3JpcHRpb246ICAgYXJjaCBoYXMgaW9yZW1hcF9wcm90KClcbi0tXG5hcmNoL0tjb25maWc9MjcyPWNvbmZpZyBVU0VSX1JFVFVSTl9OT1RJRklFUlxuLS1cbmFyY2gvS2NvbmZpZy0yNzgtXG5hcmNoL0tjb25maWc6Mjc5OmNvbmZpZyBIQVZFX0lPUkVNQVBfUFJPVFxuYXJjaC9LY29uZmlnLTI4MC1cdGJvb2xcbi0tXG5hcmNoL2FyYy9LY29uZmlnPTY9Y29uZmlnIEFSQ1xuLS1cbmFyY2gvYXJjL0tjb25maWctMzgtXHRzZWxlY3QgSEFWRV9ERUJVR19LTUVNTEVBS1xuYXJjaC9hcmMvS2NvbmZpZzozOTpcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVFxuYXJjaC9hcmMvS2NvbmZpZy00MC1cdHNlbGVjdCBIQVZFX0tFUk5FTF9HWklQXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTIxMC1cdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlQgaWYgUEVSRl9FVkVOVFNcbmFyY2gvYXJtNjQvS2NvbmZpZzoyMTE6XHRzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1RcbmFyY2gvYXJtNjQvS2NvbmZpZy0yMTItXHRzZWxlY3QgSEFWRV9JUlFfVElNRV9BQ0NPVU5USU5HXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE1Ny1cdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlQgaWYgUEVSRl9FVkVOVFNcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6MTU4Olx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE1OS1cdHNlbGVjdCBIQVZFX0lSUV9FWElUX09OX0lSUV9TVEFDS1xuLS1cbmFyY2gvbWlwcy9LY29uZmlnPTI9Y29uZmlnIE1JUFNcbi0tXG5hcmNoL21pcHMvS2NvbmZpZy03Ni1cdHNlbGVjdCBIQVZFX0dDQ19QTFVHSU5TXG5hcmNoL21pcHMvS2NvbmZpZzo3NzpcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVFxuYXJjaC9taXBzL0tjb25maWctNzgtXHRzZWxlY3QgSEFWRV9JUlFfRVhJVF9PTl9JUlFfU1RBQ0tcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTI2MS1cdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlRcdFx0aWYgUEVSRl9FVkVOVFMgXHUwMDI2XHUwMDI2IChQUENfQk9PSzNTIHx8IFBQQ184eHgpXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoyNjI6XHRzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1RcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTI2My1cdHNlbGVjdCBIQVZFX0lSUV9USU1FX0FDQ09VTlRJTkdcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTExOC1cdHNlbGVjdCBHRU5FUklDX0lPUkVNQVAgaWYgTU1VXG5hcmNoL3Jpc2N2L0tjb25maWc6MTE5Olx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UIGlmIE1NVVxuYXJjaC9yaXNjdi9LY29uZmlnLTEyMC1cdHNlbGVjdCBHRU5FUklDX0lSUV9JUEkgaWYgU01QXG4tLVxuYXJjaC9zMzkwL0tjb25maWc9Nzg9Y29uZmlnIFMzOTBcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy0yMjUtXHRzZWxlY3QgSEFWRV9HQ0NfUExVR0lOU1xuYXJjaC9zMzkwL0tjb25maWc6MjI2Olx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UIGlmIFBDSVxuYXJjaC9zMzkwL0tjb25maWctMjI3LVx0c2VsZWN0IEhBVkVfS0VSTkVMX0JaSVAyXG4tLVxuYXJjaC9zaC9LY29uZmlnPTI9Y29uZmlnIFNVUEVSSFxuLS1cbmFyY2gvc2gvS2NvbmZpZy00My1cdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlRcbmFyY2gvc2gvS2NvbmZpZzo0NDpcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVCBpZiBNTVUgXHUwMDI2XHUwMDI2ICFYMlRMQlxuYXJjaC9zaC9LY29uZmlnLTQ1LVx0c2VsZWN0IEhBVkVfS0VSTkVMX0JaSVAyXG4tLVxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yNTEtXHRzZWxlY3QgSEFWRV9IV19CUkVBS1BPSU5UXG5hcmNoL3g4Ni9LY29uZmlnOjI1MjpcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVFxuYXJjaC94ODYvS2NvbmZpZy0yNTMtXHRzZWxlY3QgSEFWRV9JUlFfRVhJVF9PTl9JUlFfU1RBQ0tcdGlmIFg4Nl82NFxuLS1cbmRyaXZlcnMvY2R4L2NkeC5jPTY2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGNkeF9waHlzX3ZtX29wcyA9IHtcbmRyaXZlcnMvY2R4L2NkeC5jOjY2MzojaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL2NkeC9jZHguYy02NjQtXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcbi0tXG5kcml2ZXJzL2NoYXIvbWVtLmM9MzE5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF9tZW1fb3BzID0ge1xuZHJpdmVycy9jaGFyL21lbS5jOjMyMDojaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL2NoYXIvbWVtLmMtMzIxLVx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXNcbi0tXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmM9ODA1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYWZ1X3ZtYV9vcHMgPSB7XG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmM6ODA2OiNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYy04MDctXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcbi0tXG5kcml2ZXJzL3BjaS9tbWFwLmM9MTg9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBwY2lfcGh5c192bV9vcHMgPSB7XG5kcml2ZXJzL3BjaS9tbWFwLmM6MTk6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy9wY2kvbW1hcC5jLTIwLVx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXG4tLVxuZHJpdmVycy91aW8vdWlvLmM9NzM2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdWlvX3BoeXNpY2FsX3ZtX29wcyA9IHtcbmRyaXZlcnMvdWlvL3Vpby5jOjczNzojaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL3Vpby91aW8uYy03MzgtXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcbi0tXG5tbS9tZW1vcnkuYz03MTQxPUVYUE9SVF9TWU1CT0xfR1BMKGZvbGxvd19wZm5tYXBfZW5kKTtcbm1tL21lbW9yeS5jLTcxNDItXG5tbS9tZW1vcnkuYzo3MTQzOiNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Rcbm1tL21lbW9yeS5jLTcxNDQtLyoqXG4tLVxubW0vbWVtb3J5LmM9NzIxNT1zdGF0aWMgaW50IF9fYWNjZXNzX3JlbW90ZV92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL21lbW9yeS5jLTcyNTgtXHRcdFx0Ynl0ZXMgPSAwO1xubW0vbWVtb3J5LmM6NzI1OTojaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5tbS9tZW1vcnkuYy03MjYwLVx0XHRcdGlmICh2bWEtXHUwMDNldm1fb3BzIFx1MDAyNlx1MDAyNiB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2Vzcylcbi0tXG5tbS9tZW1vcnkuYz03MzQwPXN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1vcnkuYy03MzY5LVx0XHRcdCAqIFRyZWF0IGFzIGEgdG90YWwgZmFpbHVyZSBmb3Igbm93IHVudGlsIHdlIGRlY2lkZSBob3dcbm1tL21lbW9yeS5jOjczNzA6XHRcdFx0ICogdG8gaGFuZGxlIHRoZSBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgY2FzZSBhbmRcbm1tL21lbW9yeS5jLTczNzEtXHRcdFx0ICogc3RhY2sgZXhwYW5zaW9uLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQxNwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDgwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldDogTU0vTWVtb3J5LmMgLSBWdWxuZXJhYmlsaXR5IEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gT24geDg2XzY0LCBgSEFWRV9JT1JFTUFQX1BST1RgIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQuIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsIHRvIGtlZXAgaW4gbWluZCwgcmlnaHQ/IE5vdywgdGhlIGNvcmUgb2YgdGhpcyBpbnZlc3RpZ2F0aW9uIGZvY3VzZXMgb24gdGhlc2UgY29kZSBjaGFuZ2VzIEkgc2VlIGluIGBnZW5lcmljX2FjY2Vzc19waHlzYCBhbmQgYF9fYWNjZXNzX3JlbW90ZV92bWAsIGJvdGggaW4gYG1tL21lbW9yeS5jYC4KCkZpcnN0LCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2Ag4oCTIGl0JiMzOTtzIGJlZW4gbW9kaWZpZWQgaW4gdHdvIHNpZ25pZmljYW50IHdheXMuIFRoZSBsZW5ndGggY2FsY3VsYXRpb25zIGFuZCB0aGUgYGlvcmVtYXBfcHJvdGAgY2FsbCBoYXZlIGJlZW4gdG91Y2hlZC4gVGhlcmUgaXMgYSBgbWluX3RgIGNhbGwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBpcyB0cnlpbmcgdG8gc2ltcGxpZnkgdGhlIGlvcmVtYXBwaW5nLCBidXQgaXQgaW50cm9kdWNlcyBhIHN1YnRsZSBzaGlmdCB0aGF0IGNvdWxkIGJlIGltcG9ydGFudC4KClRoZW4gdGhlcmUmIzM5O3MgYF9fYWNjZXNzX3JlbW90ZV92bWAuIFRoZSBpbnRlcmVzdGluZyBjaGFuZ2UgaGVyZSBpbnZvbHZlcyBsaW1pdGluZyB0aGUgbGVuZ3RoIGluIGB2bWEtJmd0O3ZtX29wcy0mZ3Q7YWNjZXNzYC4gVGhlIHVzZSBvZiBgbWluX3RgIGFnYWluIGlzIGludGVyZXN0aW5nLCBlc3BlY2lhbGx5IHdoZW4gY29tYmluZWQgd2l0aCB0aGUgb2Zmc2V0IGNhbGN1bGF0aW9uLiBUaGlzIHBvdGVudGlhbGx5IGludHJvZHVjZXMgc3VidGxlIGludGVnZXIgb3ZlcmZsb3csIG91dC1vZi1ib3VuZHMsIG9yIGxlbmd0aCBjYWxjdWxhdGlvbiBpc3N1ZXMuCgpSZWFjaGFiaWxpdHk/IFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb2RlIGFjY2Vzc2libGUgdmlhIGBwdHJhY2UoUFRSQUNFX1BFRUtEQVRBL1BUUkFDRV9QT0tFREFUQSlgIG9yIGAvcHJvYy9waWQvbWVtYC4gVGhpbmsgYC9kZXYvbWVtYCwgcGh5c2ljYWwgVk1BcywgUEZOTUFQIFZNQXMg4oCTIHRoZXNlIGFyZSBhbGwgcmVhZGlseSBhdmFpbGFibGUgYXR0YWNrIHN1cmZhY2VzLiBUaGlzIG1ha2VzIGl0IGFuIGF0dHJhY3RpdmUgdGFyZ2V0LgoKSXMgaXQgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlIGZhY3QgdGhhdCB0aGUgY2hhbmdlcyBhZmZlY3QgcmVtb3RlIFZNIGFjY2VzcyBhbmQgcGh5c2ljYWwgSS9PIG1lbW9yeSBtYXBwaW5nLCB3aXRoIGxlbmd0aCBjYWxjdWxhdGlvbnMsIHBhZ2UgYm91bmRhcnkgY3Jvc3NpbmdzLCBhbmQgdHlwZSBjYXN0cywgc2NyZWFtcyAmIzM0O2Z1enogbWUuJiMzNDsgU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBjYW4gaW50cm9kdWNlIHN1YnRsZSBidWdzLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBzeW1ib2xzLiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgaXMgZGlyZWN0bHkgbW9kaWZpZWQsIGFuZCBgX19hY2Nlc3NfcmVtb3RlX3ZtYCAoc3RhdGljLCBzbyBhIGxpdHRsZSBsZXNzIHZpc2libGUpIGlzIHVzZWQuIEl0cyBjYWxsZXJzIGFyZSBgYWNjZXNzX3JlbW90ZV92bWAgYW5kIGBhY2Nlc3NfcHJvY2Vzc192bWAuIEFsdGhvdWdoIGBnZW5lcmljX2FjY2Vzc19waHlzYCBhcHBlYXJzIHRvIGJlIHNwZWNpZmljIHRvIGlvbWVtL3Bmbm1hcCBWTUFzLCB0aGF0IHN0aWxsIG1ha2VzIGl0IHF1aXRlIGFjY2Vzc2libGUuCgpObyB1YmlxdWl0b3VzIGNhbGxzIGVpdGhlci4gVGhpcyBhbHNvIG1lYW5zLCBsZXNzIHBsYWNlcyB0byBpbmplY3QgYnVncy4KCkNvbmZpZ3VyYXRpb24gZmxhZ3M/IGBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RgIGlzIGhhbmRsZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSAoeDg2KSwgYnV0IHdlIHNob3VsZCBjaGVjayBpZiBhbnkgZHJpdmVyIGlzIHJlcXVpcmVkIGZvciBWTUEgY3JlYXRpb24gKGUuZy4sIGBDT05GSUdfREVWTUVNYCwgYENPTkZJR19VSU9gKSwgYnV0IGZyb20gd2hhdCBJIHJlbWVtYmVyLCBzdGFuZGFyZCBjb25maWd1cmF0aW9ucyBzaG91bGQgYWxyZWFkeSBlbmFibGUgdGhpcy4gV2Ugc2hvdWxkIGNoZWNrIHRoZXNlLCB0aG91Z2guIEFsc28sIGxldCYjMzk7cyBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGxpa2UgYERFVk1FTWAuCgpUaGlzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBjb2RlIGNoYW5nZXMsIHRoZSByZWFjaGFiaWxpdHksIGFuZCB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgYnVncyBhbGwgcG9pbnQgdG8gYSB3b3J0aHdoaWxlIHRhcmdldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERFVk1FTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NoYXIvS2NvbmZpZz0yNDk9Y29uZmlnIE5TQ19HUElPXG4tLVxuZHJpdmVycy9jaGFyL0tjb25maWctMjU4LVxuZHJpdmVycy9jaGFyL0tjb25maWc6MjU5OmNvbmZpZyBERVZNRU1cbmRyaXZlcnMvY2hhci9LY29uZmlnLTI2MC1cdGJvb2wgXCYjMzQ7L2Rldi9tZW0gdmlydHVhbCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkzMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgdXNhZ2Ugb2YgYGdlbmVyaWNfYWNjZXNzX3BoeXNgLiBGaXJzdCwgbGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IHRoZSBjb2RlYmFzZSB0byBzZWUgd2hlcmUgaXQmIzM5O3MgY3VycmVudGx5IHV0aWxpemVkIG9yIHJlZmVyZW5jZWQuIEkmIzM5O3ZlIGZvdW5kIGl0JiMzOTtzIHVzZWQgaW4gdGhlc2UgZHJpdmVyczogYGRyaXZlcnMvY2hhci9tZW0uY2AgKGBERVZNRU1gKSwgYGRyaXZlcnMvdWlvL3Vpby5jYCAoYFVJT2ApLCBgZHJpdmVycy9wY2kvbW1hcC5jYCAoYFBDSWApLCBgZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jYCAoYEZQR0FfREZMX0FGVWApLCBhbmQgYGRyaXZlcnMvY2R4L2NkeC5jYCAoYENEWF9CVVNgKS4gU2VlbXMgbGlrZSBhIGRlY2VudCBzcHJlYWQuCgpOb3csIHdoZXJlIGlzIGBnZW5lcmljX2FjY2Vzc19waHlzYCBhY3R1YWxseSBkZWZpbmVkPyBJdCYjMzk7cyBzaXR0aW5nIGluIGBtbS9tZW1vcnkuY2AuIEdpdmVuIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgYWNjZXNzLCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBJIGFsc28gbm90ZWQgdGhhdCBgYXJjaC94ODYvS2NvbmZpZ2AgaGFzIGBIQVZFX0lPUkVNQVBfUFJPVGAgc2VsZWN0ZWQsIHdoaWNoIG1pZ2h0IGJlIHJlbGV2YW50IGxhdGVyIG9uLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGFuYWx5c2lzLiBUaGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBmbGFnIGlzIHNldCwgYW5kIHRoZSAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OyBsaXN0IGluY2x1ZGVzICYjMzQ7REVWTUVNLiYjMzQ7IFNlZW1zIGxpa2Ugd2UmIzM5O3JlIGludGVyZXN0ZWQgaW4gdGhlIGBERVZNRU1gIGNvbmZpZ3VyYXRpb24gYXMgYSBzdGFydGluZyBwb2ludC4gVGhlICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsgbGlzdCBoYXMgZmxhZ2dlZCBib3RoIGBnZW5lcmljX2FjY2Vzc19waHlzYCBhbmQgYF9fYWNjZXNzX3JlbW90ZV92bWAsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZXkgaW50ZXJyZWxhdGUuCgpOZXh0LCBJIHdhbnQgdG8gY2xhcmlmeSBpZiBgX19hY2Nlc3NfcmVtb3RlX3ZtYCBpcyB2aXNpYmxlIGluIHRoZSBzeW1ib2wgdGFibGUgb3IgaWYgaXQmIzM5O3Mgc3RhdGljLiBMb29rcyBsaWtlIGl0JiMzOTtzIGRlZmluZWQgaW4gYG1tL21lbW9yeS5jYDogYHN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKC4uLilgIGFuZCBgaW50IGFjY2Vzc19yZW1vdGVfdm0oLi4uKWAuIEFuZCBhbHNvIGBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyguLi4pYC4gU28sIGl0JiMzOTtzIGEgc3RhdGljIGlubGluZSwgd2hpY2ggbWVhbnMgaXQgbGlrZWx5IGhhcyBzb21lIHNjb3BlIGxpbWl0YXRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIExldCYjMzk7cyBub3QgZm9yZ2V0IGFib3V0IHRoZSByZWxhdGVkLCB2aXNpYmxlLCBgYWNjZXNzX3JlbW90ZV92bWAuCgpGaW5hbGx5LCBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBsaW5lcyA3MjkwLTczMzAgaW4gYG1tL21lbW9yeS5jYCDigJMgdGhhdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhlc2UgZnVuY3Rpb25zIHJlc2lkZXMuIEdvdCBpdC4gVGhpcyB3aWxsIGJlIG15IG5leHQgc3RlcCwgSSBuZWVkIHRvIGdvIG92ZXIgdGhlIGxvZ2ljIHRvIHNlZSBob3cgaXQgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcyOTA6XHRcbjcyOTE6XHRcdHJldHVybiBidWYgLSBvbGRfYnVmO1xuNzI5MjpcdH1cbjcyOTM6XHRcbjcyOTQ6XHQvKipcbjcyOTU6XHQgKiBhY2Nlc3NfcmVtb3RlX3ZtIC0gYWNjZXNzIGFub3RoZXIgcHJvY2VzcyYjMzk7IGFkZHJlc3Mgc3BhY2VcbjcyOTY6XHQgKiBAbW06XHRcdHRoZSBtbV9zdHJ1Y3Qgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlXG43Mjk3Olx0ICogQGFkZHI6XHRzdGFydCBhZGRyZXNzIHRvIGFjY2Vzc1xuNzI5ODpcdCAqIEBidWY6XHRzb3VyY2Ugb3IgZGVzdGluYXRpb24gYnVmZmVyXG43Mjk5Olx0ICogQGxlbjpcdG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlclxuNzMwMDpcdCAqIEBndXBfZmxhZ3M6XHRmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91clxuNzMwMTpcdCAqXG43MzAyOlx0ICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gQG1tLlxuNzMwMzpcdCAqXG43MzA0Olx0ICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gc291cmNlIHRvIGRlc3RpbmF0aW9uLlxuNzMwNTpcdCAqL1xuNzMwNjpcdGludCBhY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG43MzA3Olx0XHRcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbjczMDg6XHR7XG43MzA5Olx0XHRyZXR1cm4gX19hY2Nlc3NfcmVtb3RlX3ZtKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbjczMTA6XHR9XG43MzExOlx0XG43MzEyOlx0LypcbjczMTM6XHQgKiBBY2Nlc3MgYW5vdGhlciBwcm9jZXNzJiMzOTsgYWRkcmVzcyBzcGFjZS5cbjczMTQ6XHQgKiBTb3VyY2UvdGFyZ2V0IGJ1ZmZlciBtdXN0IGJlIGtlcm5lbCBzcGFjZSxcbjczMTU6XHQgKiBEbyBub3Qgd2FsayB0aGUgcGFnZSB0YWJsZSBkaXJlY3RseSwgdXNlIGdldF91c2VyX3BhZ2VzXG43MzE2Olx0ICovXG43MzE3Olx0aW50IGFjY2Vzc19wcm9jZXNzX3ZtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG43MzE4Olx0XHRcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbjczMTk6XHR7XG43MzIwOlx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbjczMjE6XHRcdGludCByZXQ7XG43MzIyOlx0XG43MzIzOlx0XHRtbSA9IGdldF90YXNrX21tKHRzayk7XG43MzI0Olx0XHRpZiAoIW1tKVxuNzMyNTpcdFx0XHRyZXR1cm4gMDtcbjczMjY6XHRcbjczMjc6XHRcdHJldCA9IF9fYWNjZXNzX3JlbW90ZV92bShtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7XG43MzI4Olx0XG43MzI5Olx0XHRtbXB1dChtbSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzg5CgkJCQkJCQlvdXRwdXQ6IDE3MwoJCQkJCQkJdGhvdWdodHM6IDEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEZvY3VzKioKCk9rYXksIHNvIEkmIzM5O3ZlIHplcm9lZCBpbiBvbiBzb21lIHJlYWxseSBwcm9taXNpbmcgc3ltYm9scyBoZXJlOiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AsIGBhY2Nlc3NfcmVtb3RlX3ZtYCwgYW5kIGBhY2Nlc3NfcHJvY2Vzc192bWAuIFRob3NlIGZlZWwgbGlrZSBrZXkgYXJlYXMgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIHRocmVlIGFyZSBsb2NrZWQgaW4gYXMgbXkgZm9jdXMuCgpCZWZvcmUgSSBwdXNoIHRoaW5ncyBmdXJ0aGVyLCBJIG5lZWQgdG8gZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgb2YgbXkgcmVhc29uaW5nIGFuZCB0aGUgcGFyYW1ldGVycyB0aGF0IEkmIzM5O20gdXNpbmcgYmVmb3JlIGNvbW1pdHRpbmcgdG8gdGhlIG5leHQgc3RlcCwgd2hpY2ggd2lsbCBiZSBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuCgpMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gY2xlYXIgaGVyZToKCiogICBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgc2V0IHRvIGB0cnVlYCDigJMgdGhhdCBmZWVscyByaWdodCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24uCiogICBgRm9jdXNTeW1ib2xzYCBpcyBjb3JyZWN0bHkgcG9wdWxhdGVkIHdpdGggdGhlIHRocmVlIHN5bWJvbHM6IGBnZW5lcmljX2FjY2Vzc19waHlzYCwgYGFjY2Vzc19yZW1vdGVfdm1gLCBgYWNjZXNzX3Byb2Nlc3Nfdm1gLiBFeGNlbGxlbnQhCiogICBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGNvbnRhaW4gYERFVk1FTWAg4oCTIHllcywgdGhhdCBhbGlnbnMgd2l0aCB0aGUgY3VycmVudCBnb2Fscy4KKiAgIFRoZSBgUmVhc29uaW5nYCBuZWVkcyB0byBiZSBhIGNvbmNpc2UgYW5kIGNsZWFyIGV4cGxhbmF0aW9uIG9mIHRoZSB2ZXJkaWN0LiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgaXMgdGhlIGNhc2UuCgpXaXRoIGFsbCB0aGF0IGluIHBsYWNlLCBJIGZlZWwgY29uZmlkZW50IGFib3V0IGNhbGxpbmcgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVk1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbmVyaWNfYWNjZXNzX3BoeXMmIzM0OywKICAgICYjMzQ7YWNjZXNzX3JlbW90ZV92bSYjMzQ7LAogICAgJiMzNDthY2Nlc3NfcHJvY2Vzc192bSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsZW5ndGggY2FsY3VsYXRpb24sIGJvdW5kcyBjaGVja2luZywgYW5kIHBoeXNpY2FsIGFkZHJlc3MgdHlwZWNhc3RpbmcgaW4gZ2VuZXJpY19hY2Nlc3NfcGh5cygpIGFzIHdlbGwgYXMgdGhlIGxlbmd0aCBjbGFtcGluZyBwYXNzZWQgdG8gdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VhY2Nlc3MoKSBpbiBfX2FjY2Vzc19yZW1vdGVfdm0oKS4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcHRyYWNlIChQVFJBQ0VfUEVFS0RBVEEvUE9LRURBVEEpIGFuZCAvcHJvYy8kcGlkL21lbSBhY2Nlc3NlcyB0byBWTV9JTy9WTV9QRk5NQVAgVk1BcyAoc3VjaCBhcyAvZGV2L21lbSkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgYm91bmRhcnkgYW5kIHBhZ2UtY3Jvc3NpbmcgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVWTUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VuZXJpY19hY2Nlc3NfcGh5cyYjMzQ7LAogICAgJiMzNDthY2Nlc3NfcmVtb3RlX3ZtJiMzNDssCiAgICAmIzM0O2FjY2Vzc19wcm9jZXNzX3ZtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxlbmd0aCBjYWxjdWxhdGlvbiwgYm91bmRzIGNoZWNraW5nLCBhbmQgcGh5c2ljYWwgYWRkcmVzcyB0eXBlY2FzdGluZyBpbiBnZW5lcmljX2FjY2Vzc19waHlzKCkgYXMgd2VsbCBhcyB0aGUgbGVuZ3RoIGNsYW1waW5nIHBhc3NlZCB0byB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2VzcygpIGluIF9fYWNjZXNzX3JlbW90ZV92bSgpLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBwdHJhY2UgKFBUUkFDRV9QRUVLREFUQS9QT0tFREFUQSkgYW5kIC9wcm9jLyRwaWQvbWVtIGFjY2Vzc2VzIHRvIFZNX0lPL1ZNX1BGTk1BUCBWTUFzIChzdWNoIGFzIC9kZXYvbWVtKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBib3VuZGFyeSBhbmQgcGFnZS1jcm9zc2luZyBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGdlbmVyaWNfYWNjZXNzX3BoeXMoKWAgYW5kIGBfX2FjY2Vzc19yZW1vdGVfdm0oKWAgaW4gYG1tL21lbW9yeS5jYCB0byBjbGFtcCBhY2Nlc3MgbGVuZ3RocyB0byBwYWdlIGJvdW5kYXJpZXMgKGBQQUdFX1NJWkUgLSBvZmZzZXRgKSwgbWFwIG9ubHkgYSBzaW5nbGUgcGFnZSB2aWEgYGlvcmVtYXBfcHJvdCgpYCwgY2FzdCBgYXJncy5wZm5gIHRvIGByZXNvdXJjZV9zaXplX3RgIGJlZm9yZSBzaGlmdGluZywgYW5kIHJldHVybiBlYXJseSB3aGVuIGBsZW4gXHUwMDNjPSAwYC5cblxuVGhlc2UgY2hhbmdlcyBmaXggYm91bmRhcnkgY2FsY3VsYXRpb25zIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAvIGFyaXRobWV0aWMgdHJ1bmNhdGlvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGluIHRoaXMgY29kZSBwYXRoIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NmZlMzk2MWRiZGE2MWFlMGIyNTI4YzZhZWFhNGI0ZDc1OTY5YzJlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAxNToxOTo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggOGIwYzJjNzM1ZDNkZS4uMDkzOTBlNTE0MzJmMiAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTcxNjQsNiAmIzQzOzcxNjQsMTEgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlib29sIHdyaXRhYmxlOwogCXN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSBhZGRyIH07CiAKJiM0MzsJaWYgKGxlbiAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWxlbiA9IG1pbl90KGludCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXQpOwomIzQzOwogcmV0cnk6CiAJaWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoJmFtcDthcmdzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03MTc1LDcgJiM0Mzs3MTgwLDcgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlpZiAoKHdyaXRlICZhbXA7IEZPTExfV1JJVEUpICZhbXA7JmFtcDsgIXdyaXRhYmxlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9BTElHTihsZW4gJiM0Mzsgb2Zmc2V0KSwgcHJvdCk7CiYjNDM7CW1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9TSVpFLCBwcm90KTsKIAlpZiAoIW1hZGRyKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNzE4Myw3ICYjNDM7NzE4OCw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCWdvdG8gb3V0X3VubWFwOwogCiAJaWYgKChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoYXJncy5wZ3Byb3QpKSB8fAotCSAgICAocGh5c19hZGRyICE9IChhcmdzLnBmbiAmbHQ7Jmx0OyBQQUdFX1NISUZUKSkgfHwKJiM0MzsJICAgIChwaHlzX2FkZHIgIT0gKChyZXNvdXJjZV9zaXplX3QpYXJncy5wZm4gJmx0OyZsdDsgUEFHRV9TSElGVCkpIHx8CiAJICAgICh3cml0YWJsZSAhPSBhcmdzLndyaXRhYmxlKSkgewogCQlmb2xsb3dfcGZubWFwX2VuZCgmYW1wO2FyZ3MpOwogCQlpb3VubWFwKG1hZGRyKTsKQEAgLTcyNTQsNyAmIzQzOzcyNTksOCBAQCBzdGF0aWMgaW50IF9fYWNjZXNzX3JlbW90ZV92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVAogCQkJaWYgKHZtYS0mZ3Q7dm1fb3BzICZhbXA7JmFtcDsgdm1hLSZndDt2bV9vcHMtJmd0O2FjY2VzcykKIAkJCQlieXRlcyA9IHZtYS0mZ3Q7dm1fb3BzLSZndDthY2Nlc3Modm1hLCBhZGRyLCBidWYsCi0JCQkJCQkJICAgIGxlbiwgd3JpdGUpOwomIzQzOwkJCQkJCQkgICAgbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKGFkZHIpKSwKJiM0MzsJCQkJCQkJICAgIHdyaXRlKTsKICNlbmRpZgogCQkJaWYgKGJ5dGVzICZsdDs9IDApCiAJCQkJYnJlYWs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IFN1YnN5c3RlbSBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggaXMgZm9jdXNpbmcgb24gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWEsIHNwZWNpZmljYWxseSBgbW0vbWVtb3J5LmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGF0IGZpbGUgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBUaGUgYXJlYSB0aGF0IGludGVyZXN0cyBtZSB0aGUgbW9zdCBpcyBnb2luZyB0byBiZSBjZW50ZXJlZCBhcm91bmQgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGFuZCBgX19hY2Nlc3NfcmVtb3RlX3ZtYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjb3JlIHRvIGhvdyB3ZSBoYW5kbGUgcGh5c2ljYWwgbWVtb3J5IGFjY2VzcywgYW5kIEkgc3VzcGVjdCB0aGUgY2hhbmdlcyB3aWxsIGJlIGFyb3VuZCB0aG9zZSBmdW5jdGlvbnMsIG9yIHJlbGF0ZWQgb25lcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtb2RpZmljYXRpb24gYWZmZWN0cyB0aG9zZSBmdW5jdGlvbnMsIGFuZCB3aGF0IGltcGFjdCB0aGF0IGhhcyBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIEkmIzM5O2xsIHJlYWQgYXJvdW5kIHRob3NlIGZ1bmN0aW9ucyBpbiBgbW0vbWVtb3J5LmNgIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgYW5kIGNvbnRleHQgb2YgdGhlIGNoYW5nZXMuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGxvdy1sZXZlbCBhY2Nlc3MgbWVjaGFuaXNtcyBhcmUgYmVpbmcgYWx0ZXJlZCBhbmQgd2h5LCBlc3BlY2lhbGx5IGhvdyB0aGlzIGFmZmVjdHMgcmVtb3RlIGFjY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcxNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcxNTU6XHQgKi9cbjcxNTY6XHRpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuNzE1NzpcdFx0XHRcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKVxuNzE1ODpcdHtcbjcxNTk6XHRcdHJlc291cmNlX3NpemVfdCBwaHlzX2FkZHI7XG43MTYwOlx0XHRwZ3Byb3RfdCBwcm90ID0gX19wZ3Byb3QoMCk7XG43MTYxOlx0XHR2b2lkIF9faW9tZW0gKm1hZGRyO1xuNzE2MjpcdFx0aW50IG9mZnNldCA9IG9mZnNldF9pbl9wYWdlKGFkZHIpO1xuNzE2MzpcdFx0aW50IHJldCA9IC1FSU5WQUw7XG43MTY0Olx0XHRib29sIHdyaXRhYmxlO1xuNzE2NTpcdFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGFkZHIgfTtcbjcxNjY6XHRcbjcxNjc6XHRcdGlmIChsZW4gXHUwMDNjPSAwKVxuNzE2ODpcdFx0XHRyZXR1cm4gMDtcbjcxNjk6XHRcbjcxNzA6XHRcdGxlbiA9IG1pbl90KGludCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXQpO1xuNzE3MTpcdFxuNzE3MjpcdHJldHJ5OlxuNzE3MzpcdFx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncykpXG43MTc0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzE3NTpcdFx0cHJvdCA9IGFyZ3MucGdwcm90O1xuNzE3NjpcdFx0cGh5c19hZGRyID0gKHJlc291cmNlX3NpemVfdClhcmdzLnBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbjcxNzc6XHRcdHdyaXRhYmxlID0gYXJncy53cml0YWJsZTtcbjcxNzg6XHRcdGZvbGxvd19wZm5tYXBfZW5kKFx1MDAyNmFyZ3MpO1xuNzE3OTpcdFxuNzE4MDpcdFx0aWYgKCh3cml0ZSBcdTAwMjYgRk9MTF9XUklURSkgXHUwMDI2XHUwMDI2ICF3cml0YWJsZSlcbjcxODE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43MTgyOlx0XG43MTgzOlx0XHRtYWRkciA9IGlvcmVtYXBfcHJvdChwaHlzX2FkZHIsIFBBR0VfU0laRSwgcHJvdCk7XG43MTg0Olx0XHRpZiAoIW1hZGRyKVxuNzE4NTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjcxODY6XHRcbjcxODc6XHRcdGlmIChmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpKVxuNzE4ODpcdFx0XHRnb3RvIG91dF91bm1hcDtcbjcxODk6XHRcbjcxOTA6XHRcdGlmICgocGdwcm90X3ZhbChwcm90KSAhPSBwZ3Byb3RfdmFsKGFyZ3MucGdwcm90KSkgfHxcbjcxOTE6XHRcdCAgICAocGh5c19hZGRyICE9ICgocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSkgfHxcbjcxOTI6XHRcdCAgICAod3JpdGFibGUgIT0gYXJncy53cml0YWJsZSkpIHtcbjcxOTM6XHRcdFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG43MTk0Olx0XHRcdGlvdW5tYXAobWFkZHIpO1xuNzE5NTpcdFx0XHRnb3RvIHJldHJ5O1xuNzE5NjpcdFx0fVxuNzE5NzpcdFxuNzE5ODpcdFx0aWYgKHdyaXRlKVxuNzE5OTpcdFx0XHRtZW1jcHlfdG9pbyhtYWRkciAmIzQzOyBvZmZzZXQsIGJ1ZiwgbGVuKTtcbjcyMDA6XHRcdGVsc2VcbjcyMDE6XHRcdFx0bWVtY3B5X2Zyb21pbyhidWYsIG1hZGRyICYjNDM7IG9mZnNldCwgbGVuKTtcbjcyMDI6XHRcdHJldCA9IGxlbjtcbjcyMDM6XHRcdGZvbGxvd19wZm5tYXBfZW5kKFx1MDAyNmFyZ3MpO1xuNzIwNDpcdG91dF91bm1hcDpcbjcyMDU6XHRcdGlvdW5tYXAobWFkZHIpO1xuNzIwNjpcdFxuNzIwNzpcdFx0cmV0dXJuIHJldDtcbjcyMDg6XHR9XG43MjA5Olx0RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19hY2Nlc3NfcGh5cyk7XG43MjEwOlx0I2VuZGlmXG43MjExOlx0XG43MjEyOlx0LypcbjcyMTM6XHQgKiBBY2Nlc3MgYW5vdGhlciBwcm9jZXNzJiMzOTsgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cbjcyMTQ6XHQgKi9cbjcyMTU6XHRzdGF0aWMgaW50IF9fYWNjZXNzX3JlbW90ZV92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuNzIxNjpcdFx0XHRcdCAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbjcyMTc6XHR7XG43MjE4Olx0XHR2b2lkICpvbGRfYnVmID0gYnVmO1xuNzIxOTpcdFx0aW50IHdyaXRlID0gZ3VwX2ZsYWdzIFx1MDAyNiBGT0xMX1dSSVRFO1xuNzIyMDpcdFxuNzIyMTpcdFx0aWYgKG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKSlcbjcyMjI6XHRcdFx0cmV0dXJuIDA7XG43MjIzOlx0XG43MjI0Olx0XHQvKiBVbnRhZyB0aGUgYWRkcmVzcyBiZWZvcmUgbG9va2luZyB1cCB0aGUgVk1BICovXG43MjI1Olx0XHRhZGRyID0gdW50YWdnZWRfYWRkcl9yZW1vdGUobW0sIGFkZHIpO1xuNzIyNjpcdFxuNzIyNzpcdFx0LyogQXZvaWQgdHJpZ2dlcmluZyB0aGUgdGVtcG9yYXJ5IHdhcm5pbmcgaW4gX19nZXRfdXNlcl9wYWdlcyAqL1xuNzIyODpcdFx0aWYgKCF2bWFfbG9va3VwKG1tLCBhZGRyKSBcdTAwMjZcdTAwMjYgIWV4cGFuZF9zdGFjayhtbSwgYWRkcikpXG43MjI5Olx0XHRcdHJldHVybiAwO1xuNzIzMDpcdFxuNzIzMTpcdFx0LyogaWdub3JlIGVycm9ycywganVzdCBjaGVjayBob3cgbXVjaCB3YXMgc3VjY2Vzc2Z1bGx5IHRyYW5zZmVycmVkICovXG43MjMyOlx0XHR3aGlsZSAobGVuKSB7XG43MjMzOlx0XHRcdGludCBieXRlcywgb2Zmc2V0O1xuNzIzNDpcdFx0XHR2b2lkICptYWRkcjtcbjcyMzU6XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbjcyMzY6XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBOVUxMO1xuNzIzNzpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGdldF91c2VyX3BhZ2Vfdm1hX3JlbW90ZShtbSwgYWRkcixcbjcyMzg6XHRcdFx0XHRcdFx0XHRcdCAgICAgZ3VwX2ZsYWdzLCBcdTAwMjZ2bWEpO1xuNzIzOTpcdFxuNzI0MDpcdFx0XHRpZiAoSVNfRVJSKHBhZ2UpKSB7XG43MjQxOlx0XHRcdFx0LyogV2UgbWlnaHQgbmVlZCB0byBleHBhbmQgdGhlIHN0YWNrIHRvIGFjY2VzcyBpdCAqL1xuNzI0MjpcdFx0XHRcdHZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpO1xuNzI0MzpcdFx0XHRcdGlmICghdm1hKSB7XG43MjQ0Olx0XHRcdFx0XHR2bWEgPSBleHBhbmRfc3RhY2sobW0sIGFkZHIpO1xuNzI0NTpcdFxuNzI0NjpcdFx0XHRcdFx0LyogbW1hcF9sb2NrIHdhcyBkcm9wcGVkIG9uIGZhaWx1cmUgKi9cbjcyNDc6XHRcdFx0XHRcdGlmICghdm1hKVxuNzI0ODpcdFx0XHRcdFx0XHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcbjcyNDk6XHRcbjcyNTA6XHRcdFx0XHRcdC8qIFRyeSBhZ2FpbiBpZiBzdGFjayBleHBhbnNpb24gd29ya2VkICovXG43MjUxOlx0XHRcdFx0XHRjb250aW51ZTtcbjcyNTI6XHRcdFx0XHR9XG43MjUzOlx0XG43MjU0Olx0XHRcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI0NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGl2aW5nIERlZXBlciBpbnRvIGBfX2FjY2Vzc19yZW1vdGVfdm1gKioKCkFscmlnaHQsIEkmIzM5O20gYXQgdGhlIHBvaW50IHdoZXJlIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGBfX2FjY2Vzc19yZW1vdGVfdm1gLiBJJiMzOTt2ZSBwcm9iYWJseSBnb3Qgc29tZSBjb250ZXh0IGFscmVhZHkg4oCTIG1heWJlIEkmIzM5O20gbG9va2luZyBhdCBhbiBlcnJvciB0cmFjZWJhY2ssIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgb3IgSSYjMzk7bSBzaW1wbHkgdHJ5aW5nIHRvIGFyY2hpdGVjdCBhIG5ldyBzb2x1dGlvbiBhcm91bmQgdGhpcyBmdW5jdGlvbi4gUmVnYXJkbGVzcywgdGhlIGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBncmFzcCAqYWxsKiBvZiBpdC4gSSB3YW50IHRvIHNlZSBob3cgaXQgaW50ZWdyYXRlcyB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIFRoaXMgY291bGQgYmUgYSBjb21wbGV4IGNhbGwgc3RhY2ssIGEgZGlzdHJpYnV0ZWQgc3lzdGVtIGNvbXBvbmVudCwgb3IgbWF5YmUganVzdCBhIHNwZWNpZmljIHBpZWNlIG9mIGEgbGFyZ2VyIGNvZGUgcGF0aCwgSSBuZWVkIHRvIHpvb20gb3V0IGEgYml0IGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gbGl2ZXMgd2l0aGluIHRoZSBvdmVyYWxsIGRlc2lnbi4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIGNoZWNrIHRoZSBwYXJhbWV0ZXJzIGl0IGFjY2VwdHMsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMsIGFuZCwgY3JpdGljYWxseSwgaG93IGl0IGhhbmRsZXMgZXJyb3JzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCByZXNvdXJjZSBsZWFrcywgb3IgYW55dGhpbmcgdGhhdCBjb3VsZCBjYXVzZSBzY2FsYWJpbGl0eSBpc3N1ZXMuIFNvLCBsZXQmIzM5O3MgZ2V0IHRoYXQgZnVsbCB2aWV3IGFuZCBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzI1MDpcdFx0XHRcdFx0LyogVHJ5IGFnYWluIGlmIHN0YWNrIGV4cGFuc2lvbiB3b3JrZWQgKi9cbjcyNTE6XHRcdFx0XHRcdGNvbnRpbnVlO1xuNzI1MjpcdFx0XHRcdH1cbjcyNTM6XHRcbjcyNTQ6XHRcdFx0XHQvKlxuNzI1NTpcdFx0XHRcdCAqIENoZWNrIGlmIHRoaXMgaXMgYSBWTV9JTyB8IFZNX1BGTk1BUCBWTUEsIHdoaWNoXG43MjU2Olx0XHRcdFx0ICogd2UgY2FuIGFjY2VzcyB1c2luZyBzbGlnaHRseSBkaWZmZXJlbnQgY29kZS5cbjcyNTc6XHRcdFx0XHQgKi9cbjcyNTg6XHRcdFx0XHRieXRlcyA9IDA7XG43MjU5Olx0I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuNzI2MDpcdFx0XHRcdGlmICh2bWEtXHUwMDNldm1fb3BzIFx1MDAyNlx1MDAyNiB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2VzcylcbjcyNjE6XHRcdFx0XHRcdGJ5dGVzID0gdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VhY2Nlc3Modm1hLCBhZGRyLCBidWYsXG43MjYyOlx0XHRcdFx0XHRcdFx0XHQgICAgbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKGFkZHIpKSxcbjcyNjM6XHRcdFx0XHRcdFx0XHRcdCAgICB3cml0ZSk7XG43MjY0Olx0I2VuZGlmXG43MjY1Olx0XHRcdFx0aWYgKGJ5dGVzIFx1MDAzYz0gMClcbjcyNjY6XHRcdFx0XHRcdGJyZWFrO1xuNzI2NzpcdFx0XHR9IGVsc2Uge1xuNzI2ODpcdFx0XHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbjcyNjk6XHRcdFx0XHRieXRlcyA9IGxlbjtcbjcyNzA6XHRcdFx0XHRvZmZzZXQgPSBhZGRyIFx1MDAyNiAoUEFHRV9TSVpFLTEpO1xuNzI3MTpcdFx0XHRcdGlmIChieXRlcyBcdTAwM2UgUEFHRV9TSVpFLW9mZnNldClcbjcyNzI6XHRcdFx0XHRcdGJ5dGVzID0gUEFHRV9TSVpFLW9mZnNldDtcbjcyNzM6XHRcbjcyNzQ6XHRcdFx0XHRtYWRkciA9IGttYXBfbG9jYWxfZm9saW8oZm9saW8sIGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwYWdlKSAqIFBBR0VfU0laRSk7XG43Mjc1Olx0XHRcdFx0aWYgKHdyaXRlKSB7XG43Mjc2Olx0XHRcdFx0XHRjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXG43Mjc3Olx0XHRcdFx0XHRcdFx0ICBtYWRkciAmIzQzOyBvZmZzZXQsIGJ1ZiwgYnl0ZXMpO1xuNzI3ODpcdFx0XHRcdFx0Zm9saW9fbWFya19kaXJ0eV9sb2NrKGZvbGlvKTtcbjcyNzk6XHRcdFx0XHR9IGVsc2Uge1xuNzI4MDpcdFx0XHRcdFx0Y29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXG43MjgxOlx0XHRcdFx0XHRcdFx0ICAgIGJ1ZiwgbWFkZHIgJiM0Mzsgb2Zmc2V0LCBieXRlcyk7XG43MjgyOlx0XHRcdFx0fVxuNzI4MzpcdFx0XHRcdGZvbGlvX3JlbGVhc2Vfa21hcChmb2xpbywgbWFkZHIpO1xuNzI4NDpcdFx0XHR9XG43Mjg1Olx0XHRcdGxlbiAtPSBieXRlcztcbjcyODY6XHRcdFx0YnVmICYjNDM7PSBieXRlcztcbjcyODc6XHRcdFx0YWRkciAmIzQzOz0gYnl0ZXM7XG43Mjg4Olx0XHR9XG43Mjg5Olx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbjcyOTA6XHRcbjcyOTE6XHRcdHJldHVybiBidWYgLSBvbGRfYnVmO1xuNzI5MjpcdH1cbjcyOTM6XHRcbjcyOTQ6XHQvKipcbjcyOTU6XHQgKiBhY2Nlc3NfcmVtb3RlX3ZtIC0gYWNjZXNzIGFub3RoZXIgcHJvY2VzcyYjMzk7IGFkZHJlc3Mgc3BhY2VcbjcyOTY6XHQgKiBAbW06XHRcdHRoZSBtbV9zdHJ1Y3Qgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlXG43Mjk3Olx0ICogQGFkZHI6XHRzdGFydCBhZGRyZXNzIHRvIGFjY2Vzc1xuNzI5ODpcdCAqIEBidWY6XHRzb3VyY2Ugb3IgZGVzdGluYXRpb24gYnVmZmVyXG43Mjk5Olx0ICogQGxlbjpcdG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlclxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mjc3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGh5c2ljYWwgTWVtb3J5IEFjY2VzcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggZm9yIGBnZW5lcmljX2FjY2Vzc19waHlzYCBpbiBgbW0vbWVtb3J5LmNgLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIHJlYWxseSBleGFtaW5lIHRoZSBjaGFuZ2VzIGNhcmVmdWxseS4gSSBzZWUgYSBjb3VwbGUgb2Yga2V5IGFkanVzdG1lbnRzLiBGaXJzdCwgdGhlcmUgYXJlIGFkZGVkIGNoZWNrcyB0byBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlIHJlcXVlc3RlZCBsZW5ndGggYGxlbmAgaXMgemVybyBvciBuZWdhdGl2ZS4gVGhhdCYjMzk7cyBhIHNlbnNpYmxlIGFkZGl0aW9uLCBndWFyZGluZyBhZ2FpbnN0IHBvdGVudGlhbCBpc3N1ZXMgbGF0ZXIuIFdlIGFyZSBhbHNvIGV4cGxpY2l0bHkgbGltaXRpbmcgdGhlIGxlbmd0aCB0byB0aGUgcGFnZSBzaXplIG5vdywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHRoZSB1bmRlcmx5aW5nIHJlbWFwcGluZyBvcGVyYXRpb25zIHdlIGFyZSB1c2luZy4gSXQgYXBwZWFycyB0aGUgcHJpb3IgY2FsY3VsYXRpb24gd2FzIGZsYXdlZCBhbmQgY291bGQgcmVxdWVzdCBtb3JlIG1lbW9yeSB0aGFuIG5lY2Vzc2FyeSwgcGVyaGFwcyBsZWFkaW5nIHRvIHVuaW50ZW5kZWQgYmVoYXZpb3Igd2l0aCB0aGUgYGlvcmVtYXBgIGNhbGwuCgpUaGUgYGlvcmVtYXBfcHJvdGAgY2FsbCBpcyBub3cgcmVxdWVzdGluZyBvbmx5IGBQQUdFX1NJWkVgLCB3aGljaCBhbGlnbnMgd2l0aCB0aGUgbW9kaWZpZWQgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciBhc3N1bXB0aW9ucyB0aGF0IHdlcmUgcHJldmlvdXNseSBoYW5kbGVkIGltcGxpY2l0bHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBicmVhayBhbnkgdmFsaWQgdXNlIGNhc2VzLiBJIHdpbGwgcmV2aWV3IHRoZSBwcmV2aW91cyB2ZXJzaW9uLCB0byBlbnN1cmUgdGhlIG5ldyBgbWluX3RgIGNhbGN1bGF0aW9ucyBkb24mIzM5O3QgaGF2ZSB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBhbmQgdGhhdCB3ZSBhcmUgc3RpbGwgYWNjZXNzaW5nIHRoZSBhcHByb3ByaWF0ZSBtZW1vcnkgcmVnaW9uLgoKVGhlcmUgYXJlIGFsc28gY2hhbmdlcyB0byB0aGUgY29uZGl0aW9uYWxzIGxhdGVyIG9uIGluIHRoZSBjb2RlLCB3aGljaCBsb29rIGxpa2UgdGhleSBhcmUgdG8gYXZvaWQgZXh0cmEgd29yayBpZiB0aGUgcGFyYW1ldGVycyBkbyBub3QgYWxpZ24gd2l0aCB0aGUgcmVtYXBwZWQgbWVtb3J5LgoKVG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBwYXRjaCwgSSYjMzk7bGwgbmVlZCB0byBnbyBiZXlvbmQganVzdCB0aGUgY29kZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvbW1pdHMuIEkgd2lsbCBzZWFyY2ggZm9yIGNvbW1pdHMgcmVsYXRlZCB0byBgZ2VuZXJpY19hY2Nlc3NfcGh5c2Agb3IgcmVsYXRlZCBmdW5jdGlvbnMgdG8gZ3Jhc3AgdGhlIGJyb2FkZXIgY29udGV4dCwgdGhlIHJlcG9ydGVkIHByb2JsZW0sIGFuZCBhbnkgZGlzY3Vzc2lvbnMgdGhhdCBtaWdodCBoYXZlIGxlZCB0byB0aGlzIGNoYW5nZS4gUGVyaGFwcyBhIGJ1ZyByZXBvcnQgb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMgZHJvdmUgdGhpcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBwcm9tcHRlZCB0aGVzZSBtb2RpZmljYXRpb25zIGFuZCB3aGF0IHByb2JsZW1zIGl0JiMzOTtzIHRyeWluZyB0byBzb2x2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2VuZXJpY19hY2Nlc3NfcGh5cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnkuYz03MTQxPUVYUE9SVF9TWU1CT0xfR1BMKGZvbGxvd19wZm5tYXBfZW5kKTtcbi0tXG5tbS9tZW1vcnkuYy03MTQ0LS8qKlxubW0vbWVtb3J5LmM6NzE0NTogKiBnZW5lcmljX2FjY2Vzc19waHlzIC0gZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgaW9tZW0gbW1hcCBhY2Nlc3Ncbm1tL21lbW9yeS5jLTcxNDYtICogQHZtYTogdGhlIHZtYSB0byBhY2Nlc3Ncbi0tXG5tbS9tZW1vcnkuYy03MTU1LSAqL1xubW0vbWVtb3J5LmM6NzE1NjppbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vbWVtb3J5LmMtNzE1Ny1cdFx0XHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSlcbi0tXG5tbS9tZW1vcnkuYy03MjA4LX1cbm1tL21lbW9yeS5jOjcyMDk6RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19hY2Nlc3NfcGh5cyk7XG5tbS9tZW1vcnkuYy03MjEwLSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjE1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTQ4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50IG9mIGBnZW5lcmljX2FjY2Vzc19waHlzYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGluZyBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AsIHNwZWNpZmljYWxseSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHZtX29wcy0mZ3Q7YWNjZXNzYCBmb3IgUEZOTUFQL0lPIG1lbW9yeSBWTUFzLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFib3V0IHRpZ2h0ZW5pbmcgdXAgaG93IHdlIGhhbmRsZSBsZW5ndGggY2FsY3VsYXRpb25zIGFuZCBwaHlzaWNhbCBhZGRyZXNzIG1hcHBpbmcgdG8gcHJldmVudCBwb3RlbnRpYWwgaXNzdWVzLCBlc3BlY2lhbGx5IG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzIHdpdGggNjQtYml0IHBoeXNpY2FsIGFkZHJlc3Nlcy4gVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGhhZCBhIGZldyBnb3RjaGFzOiBhbiBpbnRlZ2VyIHRydW5jYXRpb24gb3Igb3ZlcmZsb3cgcmlzayB3aGVuIGNvbXBhcmluZyBwaHlzaWNhbCBhZGRyZXNzZXMsIGFuZCBsZW5ndGggaXNzdWVzIHdoZXJlIGBsZW5gIHdhc24mIzM5O3QgYmVpbmcgY29ycmVjdGx5IGJvdW5kZWQgdG8gYSBzaW5nbGUgcGFnZSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBpbmNvbnNpc3RlbmNpZXMgaW4gdGhlIGlvcmVtYXAmIzM5O2QgcmVnaW9uLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoZXNlIGJ5IGNsYW1waW5nIGBsZW5gLCBmaXhpbmcgdGhlIGlvcmVtYXAgc2l6ZSwgYW5kIHByb3Blcmx5IGNhc3RpbmcgcGZuIGJlZm9yZSBzaGlmdGluZyBpdC4gSXQgYWxzbyByZWZhY3RvcnMgdGhlIGxlbmd0aCBwYXNzZWQgdG8gYHZtYS0mZ3Q7dm1fb3BzLSZndDthY2Nlc3NgIGluIGBfX2FjY2Vzc19yZW1vdGVfdm1gLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayB0aGF0IHJlcXVpcmVzIEtNU0FOPyBJIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0IGNhcmVmdWxseS4gV2UgYWxyZWFkeSBoYXZlIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gIEtNU0FOIGlzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcywgc28gaXQmIzM5O3Mgbm90IG5lZWRlZCBpZiBLQVNBTiBjYW4gY2F0Y2ggdGhlIGJ1Zy4KCkxldCYjMzk7cyBicmVhayBpdCBkb3duOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgaXMgY29weWluZyBkYXRhIGJldHdlZW4gdXNlci9yZW1vdGUgYnVmZmVyIGBidWZgIGFuZCBpb21lbSB1c2luZyBgbWVtY3B5X3RvaW9gIC8gYG1lbWNweV9mcm9taW9gLCB3aGljaCB3b3VsZCB1c2UgdGhlIGNhbGxlciBzdXBwbGllZCBkYXRhLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogSSYjMzk7dmUgdHJhY2VkIHRoZSB2YXJpYWJsZXMgaW4gYGdlbmVyaWNfYWNjZXNzX3BoeXNgLCBhbmQgYWxsIG9mIHRoZW0gYXJlIGluaXRpYWxpemVkLiBgZm9sbG93X3Bmbm1hcF9zdGFydGAgaW5pdGlhbGl6ZXMgdGhlIGZvbGxvd19wZm5tYXBfYXJncyBzdHJ1Y3QsIGFuZCB3ZSByZWNoZWNrIHRob3NlIHZhcmlhYmxlcy4gTm8gaXNzdWVzIGhlcmUuCjMuICAqKkFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXM/KiogTm90IGluIHRoaXMgcGF0Y2guCjQuICAqKkJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgZW5hYmxlcyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcz8qKiBBaCwgdGhpcyBpcyB3aGVyZSB0aGUgY2hhbmdlcyBhcmUgZm9jdXNlZC4gVGhlIHBhdGNoIHJlc3RyaWN0cyBgbGVuYCBpbiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AsIHRvIGBQQUdFX1NJWkUgLSBvZmZzZXRgIHdoaWNoIHNob3VsZCBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGUgZXhpc3RpbmcgaXNzdWUgd2FzIHRoYXQgIGBfX2FjY2Vzc19yZW1vdGVfdm1gIG1pZ2h0IGhhdmUgYmVlbiBwYXNzaW5nIGEgbGFyZ2UgYGxlbmAgdG8gdGhlIGZ1bmN0aW9uIHdoaWNoIGFjY2Vzc2VkIG1lbW9yeSBiZXlvbmQgcGFnZSBib3VuZGFyaWVzLiBUaGVzZSBib3VuZGFyeSBhbmQgb3V0LW9mLWJvdW5kcyBjaGVja3MsIGhvd2V2ZXIsIGFyZSBzcXVhcmVseSBpbiBLQVNBTiYjMzk7cyBkb21haW4gKE9PQiBhY2Nlc3MgYnVncyksIG5vdCBLTVNBTi4KClNvLCBpcyB0aGVyZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm8tbGVhayBjcmVhdGVkPyBOby4gYGJ1ZmAgaXMgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci4gYG1lbWNweV9mcm9taW9gIHJlYWRzIGZyb20gdGhlIEkvTyBtZW1vcnkgYW5kIHdyaXRlcyB0byB0aGUgc3VwcGxpZWQgYnVmZmVyLCBhbmQgYG1lbWNweV90b2lvYCBpcyB0aGUgb3Bwb3NpdGUuIFRoZSBzaXplIG9mIHRoZSByZWFkIG9yIHdyaXRlIGlzIG5vdyBjb3JyZWN0bHkgYm91bmRlZCBieSB0aGUgcGF0Y2guCgpJJiMzOTttIGNvbmZpZGVudC4gVGhpcyBwYXRjaCBpcyBhYm91dCBib3VuZHMgY2hlY2tpbmcsIHdoaWNoIGZhbGxzIHVuZGVyIEtBU0FOLCBub3QgS01TQU4uIFRoZSBsb2dpYyBpcyBkZXNpZ25lZCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLgoKSnVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgdXNlcyBvZiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2Agb3IgYGZvbGxvd19wZm5tYXBfYXJnc2AgdG8gZW5zdXJlIG5vIG90aGVyIGFyZWEgaXMgYWZmZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dlbmVyaWNfYWNjZXNzX3BoeXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jZHgvY2R4LmM9NjYyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgY2R4X3BoeXNfdm1fb3BzID0ge1xuZHJpdmVycy9jZHgvY2R4LmMtNjYzLSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcbmRyaXZlcnMvY2R4L2NkeC5jOjY2NDpcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxuZHJpdmVycy9jZHgvY2R4LmMtNjY1LSNlbmRpZlxuLS1cbmRyaXZlcnMvY2hhci9tZW0uYz0zMTk9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBtbWFwX21lbV9vcHMgPSB7XG5kcml2ZXJzL2NoYXIvbWVtLmMtMzIwLSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcbmRyaXZlcnMvY2hhci9tZW0uYzozMjE6XHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5c1xuZHJpdmVycy9jaGFyL21lbS5jLTMyMi0jZW5kaWZcbi0tXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmM9ODA1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYWZ1X3ZtYV9vcHMgPSB7XG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmMtODA2LSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYzo4MDc6XHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYy04MDgtI2VuZGlmXG4tLVxuZHJpdmVycy9wY2kvbW1hcC5jPTE4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGNpX3BoeXNfdm1fb3BzID0ge1xuZHJpdmVycy9wY2kvbW1hcC5jLTE5LSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcbmRyaXZlcnMvcGNpL21tYXAuYzoyMDpcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxuZHJpdmVycy9wY2kvbW1hcC5jLTIxLSNlbmRpZlxuLS1cbmRyaXZlcnMvdWlvL3Vpby5jPTczNj1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHVpb19waHlzaWNhbF92bV9vcHMgPSB7XG5kcml2ZXJzL3Vpby91aW8uYy03MzctI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy91aW8vdWlvLmM6NzM4Olx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXG5kcml2ZXJzL3Vpby91aW8uYy03MzktI2VuZGlmXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTgwNj1zdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qge1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaC04NTgtXHQvKiBjYWxsZWQgYnkgYWNjZXNzX3Byb2Nlc3Nfdm0gd2hlbiBnZXRfdXNlcl9wYWdlcygpIGZhaWxzLCB0eXBpY2FsbHlcbmluY2x1ZGUvbGludXgvbW0uaDo4NTk6XHQgKiBmb3IgdXNlIGJ5IHNwZWNpYWwgVk1Bcy4gU2VlIGFsc28gZ2VuZXJpY19hY2Nlc3NfcGh5cygpIGZvciBhIGdlbmVyaWNcbmluY2x1ZGUvbGludXgvbW0uaC04NjAtXHQgKiBpbXBsZW1lbnRhdGlvbiB1c2VmdWwgZm9yIGFueSBpb21lbSBtYXBwaW5nLlxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0zMjM0PWNvcHlfcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSk7XG5pbmNsdWRlL2xpbnV4L21tLmg6MzIzNTppbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuaW5jbHVkZS9saW51eC9tbS5oLTMyMzYtXHRcdFx0dm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpO1xuLS1cbm1tL21lbW9yeS5jPTcxNDE9RVhQT1JUX1NZTUJPTF9HUEwoZm9sbG93X3Bmbm1hcF9lbmQpO1xuLS1cbm1tL21lbW9yeS5jLTcxNDQtLyoqXG5tbS9tZW1vcnkuYzo3MTQ1OiAqIGdlbmVyaWNfYWNjZXNzX3BoeXMgLSBnZW5lcmljIGltcGxlbWVudGF0aW9uIGZvciBpb21lbSBtbWFwIGFjY2Vzc1xubW0vbWVtb3J5LmMtNzE0Ni0gKiBAdm1hOiB0aGUgdm1hIHRvIGFjY2Vzc1xuLS1cbm1tL21lbW9yeS5jLTcxNTUtICovXG5tbS9tZW1vcnkuYzo3MTU2OmludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9tZW1vcnkuYy03MTU3LVx0XHRcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKVxuLS1cbm1tL21lbW9yeS5jLTcyMDgtfVxubW0vbWVtb3J5LmM6NzIwOTpFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2FjY2Vzc19waHlzKTtcbm1tL21lbW9yeS5jLTcyMTAtI2VuZGlmXG4tLVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaD02NDA9c3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHtcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTY5Mi1cdC8qIGNhbGxlZCBieSBhY2Nlc3NfcHJvY2Vzc192bSB3aGVuIGdldF91c2VyX3BhZ2VzKCkgZmFpbHMsIHR5cGljYWxseVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaDo2OTM6XHQgKiBmb3IgdXNlIGJ5IHNwZWNpYWwgVk1Bcy4gU2VlIGFsc28gZ2VuZXJpY19hY2Nlc3NfcGh5cygpIGZvciBhIGdlbmVyaWNcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgtNjk0LVx0ICogaW1wbGVtZW50YXRpb24gdXNlZnVsIGZvciBhbnkgaW9tZW0gbWFwcGluZy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk1NwoJCQkJCQkJb3V0cHV0OiAxOTcKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUmVjZW50IENoYW5nZXMqKgoKT2theSwgc28gdGhlIG1vZGlmaWNhdGlvbnMgSSYjMzk7dmUganVzdCByZXZpZXdlZCBhcmUgbGFzZXItZm9jdXNlZCBvbiBoYXJkZW5pbmcgdGhlIGNvZGUgYWdhaW5zdCBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY2Vzcy4gU3BlY2lmaWNhbGx5LCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhZGRyZXNzaW5nIHZ1bG5lcmFiaWxpdGllcyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gaW5jb3JyZWN0IGxlbmd0aCBvciBib3VuZHMgY2hlY2tzLiBUaGlzIHNlZW1zIHBhcnRpY3VsYXJseSByZWxldmFudCB3aXRoaW4gdGhlIGBnZW5lcmljX2FjY2Vzc19waHlzYCBhbmQgYF9fYWNjZXNzX3JlbW90ZV92bWAgZnVuY3Rpb25zLCB3aGljaCwgYXMgSSByZWNhbGwsIGFyZSBpbnZvbHZlZCBpbiBzaW5nbGUtcGFnZSBtYXBwaW5nIG9wZXJhdGlvbnMuIFRoZSBzaGlmdCB0byBjYXN0aW5nIGBhcmdzLnBmbmAgdG8gYHJlc291cmNlX3NpemVfdGAgYmVmb3JlIGJpdC1zaGlmdGluZyBpcyBhIHNtYXJ0IG1vdmUg4oCTIGl0IGVsZWdhbnRseSBzaWRlc3RlcHMgdGhlIHBvdGVudGlhbCBmb3IgYSAzMi1iaXQgb3ZlcmZsb3cgc2NlbmFyaW8sIHdoaWNoIGNvdWxkIGhhdmUgYWxsb3dlZCBmb3Igc29tZSB2ZXJ5IG5hc3R5IGFuZCBkaWZmaWN1bHQtdG8tZGV0ZWN0IG1lbW9yeSBjb3JydXB0aW9uLgoKVGhlIGdvb2QgbmV3cyBpcyB0aGF0IHRoZXNlIGNoYW5nZXMsIHdoaWxlIGNydWNpYWwgZm9yIHNlY3VyaXR5LCBzZWVtIHRvIGJlIGJ1aWxkaW5nIHVwb24gYSBmb3VuZGF0aW9uIG9mIGV4aXN0aW5nIHNhZmVndWFyZHMuIEl0IGFwcGVhcnMgdGhhdCBhbnkgbHVya2luZyBidWZmZXIgb3ZlcmZsb3dzIG9yIG91dC1vZi1ib3VuZHMgcmVhZHMgdGhhdCBtaWdodCBoYXZlIHNsaXBwZWQgdGhyb3VnaCB0aGUgY3JhY2tzIHByZXZpb3VzbHkgKnNob3VsZCogYmUgY2F1Z2h0IGJ5IHRoZSBzdGFuZGFyZCBzYW5pdGl6ZXJzIHdlJiMzOTt2ZSBnb3QgaW4gcGxhY2UsIGxpa2UgS0FTQU4uIFNvLCB3ZSYjMzk7cmUgbm90IHN0YXJ0aW5nIGZyb20gc2NyYXRjaCBoZXJlLiBXZSYjMzk7cmUgbGF5ZXJpbmcgZGVmZW5zZSBpbiBkZXB0aC4KCkFuZCwgb2YgY291cnNlLCBubyBldmlkZW5jZSBvZiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgLSB3aGljaCBpcyBhIGh1Z2UgcmVsaWVmLiBHb29kLgoKQWxsIGluIGFsbCwgaXQgbG9va3MgbGlrZSBhIGNsZWFuLCBmb2N1c2VkLCBhbmQgd2VsbC1jb25zaWRlcmVkIHNldCBvZiBhZGp1c3RtZW50cy4gVGltZSB0byBjb25maWRlbnRseSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZ2VuZXJpY19hY2Nlc3NfcGh5cygpYCBhbmQgYF9fYWNjZXNzX3JlbW90ZV92bSgpYCBpbiBgbW0vbWVtb3J5LmNgIHRvIGNsYW1wIGFjY2VzcyBsZW5ndGhzIHRvIHBhZ2UgYm91bmRhcmllcyAoYFBBR0VfU0laRSAtIG9mZnNldGApLCBtYXAgb25seSBhIHNpbmdsZSBwYWdlIHZpYSBgaW9yZW1hcF9wcm90KClgLCBjYXN0IGBhcmdzLnBmbmAgdG8gYHJlc291cmNlX3NpemVfdGAgYmVmb3JlIHNoaWZ0aW5nLCBhbmQgcmV0dXJuIGVhcmx5IHdoZW4gYGxlbiBcdTAwM2M9IDBgLlxuXG5UaGVzZSBjaGFuZ2VzIGZpeCBib3VuZGFyeSBjYWxjdWxhdGlvbnMgYW5kIHByZXZlbnQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIC8gYXJpdGhtZXRpYyB0cnVuY2F0aW9uLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcywgc3RydWN0IHBhZGRpbmcgZXhwb3N1cmVzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IG1lbW9yeSBzYWZldHkgY29uY2VybnMgaW4gdGhpcyBjb2RlIHBhdGggKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBnZW5lcmljX2FjY2Vzc19waHlzKClgIGFuZCBgX19hY2Nlc3NfcmVtb3RlX3ZtKClgIGluIGBtbS9tZW1vcnkuY2AgdG8gY2xhbXAgYWNjZXNzIGxlbmd0aHMgdG8gcGFnZSBib3VuZGFyaWVzIChgUEFHRV9TSVpFIC0gb2Zmc2V0YCksIG1hcCBvbmx5IGEgc2luZ2xlIHBhZ2UgdmlhIGBpb3JlbWFwX3Byb3QoKWAsIGNhc3QgYGFyZ3MucGZuYCB0byBgcmVzb3VyY2Vfc2l6ZV90YCBiZWZvcmUgc2hpZnRpbmcsIGFuZCByZXR1cm4gZWFybHkgd2hlbiBgbGVuIFx1MDAzYz0gMGAuXG5cblRoZXNlIGNoYW5nZXMgZml4IGJvdW5kYXJ5IGNhbGN1bGF0aW9ucyBhbmQgcHJldmVudCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgLyBhcml0aG1ldGljIHRydW5jYXRpb24uIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZXMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBpbiB0aGlzIGNvZGUgcGF0aCAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMDowMC4yOTg5NDkwMDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTg1MzgwODUwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5lcmljX2FjY2Vzc19waHlzXCIsXG4gICAgXCJhY2Nlc3NfcmVtb3RlX3ZtXCIsXG4gICAgXCJhY2Nlc3NfcHJvY2Vzc192bVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGdlbmVyaWNfYWNjZXNzX3BoeXMoKWAgYW5kIGBfX2FjY2Vzc19yZW1vdGVfdm0oKWAgaW4gYG1tL21lbW9yeS5jYCB0byBjbGFtcCBhY2Nlc3MgbGVuZ3RocyB0byBwYWdlIGJvdW5kYXJpZXMgKGBQQUdFX1NJWkUgLSBvZmZzZXRgKSwgbWFwIG9ubHkgYSBzaW5nbGUgcGFnZSB2aWEgYGlvcmVtYXBfcHJvdCgpYCwgY2FzdCBgYXJncy5wZm5gIHRvIGByZXNvdXJjZV9zaXplX3RgIGJlZm9yZSBzaGlmdGluZywgYW5kIHJldHVybiBlYXJseSB3aGVuIGBsZW4gXFx1MDAzYz0gMGAuXFxuXFxuVGhlc2UgY2hhbmdlcyBmaXggYm91bmRhcnkgY2FsY3VsYXRpb25zIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAvIGFyaXRobWV0aWMgdHJ1bmNhdGlvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGluIHRoaXMgY29kZSBwYXRoIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbGVuZ3RoIGNhbGN1bGF0aW9uLCBib3VuZHMgY2hlY2tpbmcsIGFuZCBwaHlzaWNhbCBhZGRyZXNzIHR5cGVjYXN0aW5nIGluIGdlbmVyaWNfYWNjZXNzX3BoeXMoKSBhcyB3ZWxsIGFzIHRoZSBsZW5ndGggY2xhbXBpbmcgcGFzc2VkIHRvIHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VhY2Nlc3MoKSBpbiBfX2FjY2Vzc19yZW1vdGVfdm0oKS4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcHRyYWNlIChQVFJBQ0VfUEVFS0RBVEEvUE9LRURBVEEpIGFuZCAvcHJvYy8kcGlkL21lbSBhY2Nlc3NlcyB0byBWTV9JTy9WTV9QRk5NQVAgVk1BcyAoc3VjaCBhcyAvZGV2L21lbSkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgYm91bmRhcnkgYW5kIHBhZ2UtY3Jvc3NpbmcgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6MDAuMjk4OTYyNzY1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTIzMzc4NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4NmZlMzk2MWRiZGE2MWFlMGIyNTI4YzZhZWFhNGI0ZDc1OTY5YzJlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMTU6MTk6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xcbmluZGV4IDhiMGMyYzczNWQzZGUuLjA5MzkwZTUxNDMyZjIgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LmNcXG4rKysgYi9tbS9tZW1vcnkuY1xcbkBAIC03MTY0LDYgKzcxNjQsMTEgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0Ym9vbCB3cml0YWJsZTtcXG4gXFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGFkZHIgfTtcXG4gXFxuK1xcdGlmIChsZW4gXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRsZW4gPSBtaW5fdChpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2Zmc2V0KTtcXG4rXFxuIHJldHJ5OlxcbiBcXHRpZiAoZm9sbG93X3Bmbm1hcF9zdGFydChcXHUwMDI2YXJncykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC03MTc1LDcgKzcxODAsNyBAQCBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRpZiAoKHdyaXRlIFxcdTAwMjYgRk9MTF9XUklURSkgXFx1MDAyNlxcdTAwMjYgIXdyaXRhYmxlKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9BTElHTihsZW4gKyBvZmZzZXQpLCBwcm90KTtcXG4rXFx0bWFkZHIgPSBpb3JlbWFwX3Byb3QocGh5c19hZGRyLCBQQUdFX1NJWkUsIHByb3QpO1xcbiBcXHRpZiAoIW1hZGRyKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTcxODMsNyArNzE4OCw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdGdvdG8gb3V0X3VubWFwO1xcbiBcXG4gXFx0aWYgKChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoYXJncy5wZ3Byb3QpKSB8fFxcbi1cXHQgICAgKHBoeXNfYWRkciAhPSAoYXJncy5wZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkpIHx8XFxuK1xcdCAgICAocGh5c19hZGRyICE9ICgocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKSB8fFxcbiBcXHQgICAgKHdyaXRhYmxlICE9IGFyZ3Mud3JpdGFibGUpKSB7XFxuIFxcdFxcdGZvbGxvd19wZm5tYXBfZW5kKFxcdTAwMjZhcmdzKTtcXG4gXFx0XFx0aW91bm1hcChtYWRkcik7XFxuQEAgLTcyNTQsNyArNzI1OSw4IEBAIHN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuICNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG4gXFx0XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fb3BzIFxcdTAwMjZcXHUwMDI2IHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VhY2Nlc3MpXFxuIFxcdFxcdFxcdFxcdGJ5dGVzID0gdm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZWFjY2Vzcyh2bWEsIGFkZHIsIGJ1ZixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGxlbiwgd3JpdGUpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKGFkZHIpKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHdyaXRlKTtcXG4gI2VuZGlmXFxuIFxcdFxcdFxcdGlmIChieXRlcyBcXHUwMDNjPSAwKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6MDAuODUyMTE3ODU3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MjQ5NDIzODAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5lcmljX2FjY2Vzc19waHlzXCIsXG4gICAgXCJhY2Nlc3NfcmVtb3RlX3ZtXCIsXG4gICAgXCJhY2Nlc3NfcHJvY2Vzc192bVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxlbmd0aCBjYWxjdWxhdGlvbiwgYm91bmRzIGNoZWNraW5nLCBhbmQgcGh5c2ljYWwgYWRkcmVzcyB0eXBlY2FzdGluZyBpbiBnZW5lcmljX2FjY2Vzc19waHlzKCkgYXMgd2VsbCBhcyB0aGUgbGVuZ3RoIGNsYW1waW5nIHBhc3NlZCB0byB2bWEtXFx1MDAzZXZtX29wcy1cXHUwMDNlYWNjZXNzKCkgaW4gX19hY2Nlc3NfcmVtb3RlX3ZtKCkuIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHB0cmFjZSAoUFRSQUNFX1BFRUtEQVRBL1BPS0VEQVRBKSBhbmQgL3Byb2MvJHBpZC9tZW0gYWNjZXNzZXMgdG8gVk1fSU8vVk1fUEZOTUFQIFZNQXMgKHN1Y2ggYXMgL2Rldi9tZW0pLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGJvdW5kYXJ5IGFuZCBwYWdlLWNyb3NzaW5nIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODZmZTM5NjFkYmRhNjFhZTBiMjUyOGM2YWVhYTRiNGQ3NTk2OWMyZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTU6MTk6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA4YjBjMmM3MzVkM2RlLi4wOTM5MGU1MTQzMmYyIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNzE2NCw2ICs3MTY0LDExIEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRib29sIHdyaXRhYmxlO1xuIFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGFkZHIgfTtcbiBcbitcdGlmIChsZW4gXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGxlbiA9IG1pbl90KGludCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXQpO1xuK1xuIHJldHJ5OlxuIFx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTcxNzUsNyArNzE4MCw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpZiAoKHdyaXRlIFx1MDAyNiBGT0xMX1dSSVRFKSBcdTAwMjZcdTAwMjYgIXdyaXRhYmxlKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9BTElHTihsZW4gKyBvZmZzZXQpLCBwcm90KTtcbitcdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9TSVpFLCBwcm90KTtcbiBcdGlmICghbWFkZHIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTcxODMsNyArNzE4OCw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGdvdG8gb3V0X3VubWFwO1xuIFxuIFx0aWYgKChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoYXJncy5wZ3Byb3QpKSB8fFxuLVx0ICAgIChwaHlzX2FkZHIgIT0gKGFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSkgfHxcbitcdCAgICAocGh5c19hZGRyICE9ICgocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSkgfHxcbiBcdCAgICAod3JpdGFibGUgIT0gYXJncy53cml0YWJsZSkpIHtcbiBcdFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG4gXHRcdGlvdW5tYXAobWFkZHIpO1xuQEAgLTcyNTQsNyArNzI1OSw4IEBAIHN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuIFx0XHRcdGlmICh2bWEtXHUwMDNldm1fb3BzIFx1MDAyNlx1MDAyNiB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2VzcylcbiBcdFx0XHRcdGJ5dGVzID0gdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VhY2Nlc3Modm1hLCBhZGRyLCBidWYsXG4tXHRcdFx0XHRcdFx0XHQgICAgbGVuLCB3cml0ZSk7XG4rXHRcdFx0XHRcdFx0XHQgICAgbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKGFkZHIpKSxcbitcdFx0XHRcdFx0XHRcdCAgICB3cml0ZSk7XG4gI2VuZGlmXG4gXHRcdFx0aWYgKGJ5dGVzIFx1MDAzYz0gMClcbiBcdFx0XHRcdGJyZWFrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6MDAuODUyMTE5MjA4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODU5MTc0MjE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIHRvb2xzLiBGaXJzdCwgYSBxdWljayBvdmVydmlldyB0byBnZXQgb3JpZW50ZWQ6IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGEgY2hhbmdlIHdpdGhpbiB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gYG1tL21lbW9yeS5jYC4gTXkgaW5pdGlhbCBzY2FuIGhpZ2hsaWdodHMgdHdvIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZDogYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGFuZCBgX19hY2Nlc3NfcmVtb3RlX3ZtYC4gTm93LCBJIHdhbnQgdG8gem9vbSBpbiBhbmQgZXhhbWluZSB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGVzZSBjaGFuZ2VzIGluIGBtbS9tZW1vcnkuY2AgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaW1wYWN0IGJldHRlci4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZnJhbWV3b3JrIGFuZCBjb250ZXh0IHRvIGFuYWx5emUgYW55IGZ1bmN0aW9uYWwgdXBkYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMwNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6MDkuNDQzODY1NTc4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE2MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcxNTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MTUwOlxcdCAqIEB3cml0ZTogc2V0IHRvIEZPTExfV1JJVEUgd2hlbiB3cml0aW5nLCBvdGhlcndpc2UgcmVhZGluZ1xcbjcxNTE6XFx0ICpcXG43MTUyOlxcdCAqIFRoaXMgaXMgYSBnZW5lcmljIGltcGxlbWVudGF0aW9uIGZvciBcXHUwMDI2dm1fb3BlcmF0aW9uc19zdHJ1Y3QuYWNjZXNzIGZvciBhblxcbjcxNTM6XFx0ICogaW9tZW0gbWFwcGluZy4gVGhpcyBjYWxsYmFjayBpcyB1c2VkIGJ5IGFjY2Vzc19wcm9jZXNzX3ZtKCkgd2hlbiB0aGUgQHZtYSBpc1xcbjcxNTQ6XFx0ICogbm90IHBhZ2UgYmFzZWQuXFxuNzE1NTpcXHQgKi9cXG43MTU2OlxcdGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuNzE1NzpcXHRcXHRcXHRcXHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSlcXG43MTU4OlxcdHtcXG43MTU5OlxcdFxcdHJlc291cmNlX3NpemVfdCBwaHlzX2FkZHI7XFxuNzE2MDpcXHRcXHRwZ3Byb3RfdCBwcm90ID0gX19wZ3Byb3QoMCk7XFxuNzE2MTpcXHRcXHR2b2lkIF9faW9tZW0gKm1hZGRyO1xcbjcxNjI6XFx0XFx0aW50IG9mZnNldCA9IG9mZnNldF9pbl9wYWdlKGFkZHIpO1xcbjcxNjM6XFx0XFx0aW50IHJldCA9IC1FSU5WQUw7XFxuNzE2NDpcXHRcXHRib29sIHdyaXRhYmxlO1xcbjcxNjU6XFx0XFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGFkZHIgfTtcXG43MTY2OlxcdFxcbjcxNjc6XFx0XFx0aWYgKGxlbiBcXHUwMDNjPSAwKVxcbjcxNjg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNzE2OTpcXHRcXG43MTcwOlxcdFxcdGxlbiA9IG1pbl90KGludCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXQpO1xcbjcxNzE6XFx0XFxuNzE3MjpcXHRyZXRyeTpcXG43MTczOlxcdFxcdGlmIChmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKSlcXG43MTc0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjcxNzU6XFx0XFx0cHJvdCA9IGFyZ3MucGdwcm90O1xcbjcxNzY6XFx0XFx0cGh5c19hZGRyID0gKHJlc291cmNlX3NpemVfdClhcmdzLnBmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbjcxNzc6XFx0XFx0d3JpdGFibGUgPSBhcmdzLndyaXRhYmxlO1xcbjcxNzg6XFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbjcxNzk6XFx0XFxuNzE4MDpcXHRcXHRpZiAoKHdyaXRlIFxcdTAwMjYgRk9MTF9XUklURSkgXFx1MDAyNlxcdTAwMjYgIXdyaXRhYmxlKVxcbjcxODE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzE4MjpcXHRcXG43MTgzOlxcdFxcdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9TSVpFLCBwcm90KTtcXG43MTg0OlxcdFxcdGlmICghbWFkZHIpXFxuNzE4NTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG43MTg2OlxcdFxcbjcxODc6XFx0XFx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpKVxcbjcxODg6XFx0XFx0XFx0Z290byBvdXRfdW5tYXA7XFxuNzE4OTpcXHRcXG43MTkwOlxcdFxcdGlmICgocGdwcm90X3ZhbChwcm90KSAhPSBwZ3Byb3RfdmFsKGFyZ3MucGdwcm90KSkgfHxcXG43MTkxOlxcdFxcdCAgICAocGh5c19hZGRyICE9ICgocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKSB8fFxcbjcxOTI6XFx0XFx0ICAgICh3cml0YWJsZSAhPSBhcmdzLndyaXRhYmxlKSkge1xcbjcxOTM6XFx0XFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbjcxOTQ6XFx0XFx0XFx0aW91bm1hcChtYWRkcik7XFxuNzE5NTpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjcxOTY6XFx0XFx0fVxcbjcxOTc6XFx0XFxuNzE5ODpcXHRcXHRpZiAod3JpdGUpXFxuNzE5OTpcXHRcXHRcXHRtZW1jcHlfdG9pbyhtYWRkciArIG9mZnNldCwgYnVmLCBsZW4pO1xcbjcyMDA6XFx0XFx0ZWxzZVxcbjcyMDE6XFx0XFx0XFx0bWVtY3B5X2Zyb21pbyhidWYsIG1hZGRyICsgb2Zmc2V0LCBsZW4pO1xcbjcyMDI6XFx0XFx0cmV0ID0gbGVuO1xcbjcyMDM6XFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbjcyMDQ6XFx0b3V0X3VubWFwOlxcbjcyMDU6XFx0XFx0aW91bm1hcChtYWRkcik7XFxuNzIwNjpcXHRcXG43MjA3OlxcdFxcdHJldHVybiByZXQ7XFxuNzIwODpcXHR9XFxuNzIwOTpcXHRFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2FjY2Vzc19waHlzKTtcXG43MjEwOlxcdCNlbmRpZlxcbjcyMTE6XFx0XFxuNzIxMjpcXHQvKlxcbjcyMTM6XFx0ICogQWNjZXNzIGFub3RoZXIgcHJvY2VzcycgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cXG43MjE0OlxcdCAqL1xcbjcyMTU6XFx0c3RhdGljIGludCBfX2FjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG43MjE2OlxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcXG43MjE3OlxcdHtcXG43MjE4OlxcdFxcdHZvaWQgKm9sZF9idWYgPSBidWY7XFxuNzIxOTpcXHRcXHRpbnQgd3JpdGUgPSBndXBfZmxhZ3MgXFx1MDAyNiBGT0xMX1dSSVRFO1xcbjcyMjA6XFx0XFxuNzIyMTpcXHRcXHRpZiAobW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobW0pKVxcbjcyMjI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNzIyMzpcXHRcXG43MjI0OlxcdFxcdC8qIFVudGFnIHRoZSBhZGRyZXNzIGJlZm9yZSBsb29raW5nIHVwIHRoZSBWTUEgKi9cXG43MjI1OlxcdFxcdGFkZHIgPSB1bnRhZ2dlZF9hZGRyX3JlbW90ZShtbSwgYWRkcik7XFxuNzIyNjpcXHRcXG43MjI3OlxcdFxcdC8qIEF2b2lkIHRyaWdnZXJpbmcgdGhlIHRlbXBvcmFyeSB3YXJuaW5nIGluIF9fZ2V0X3VzZXJfcGFnZXMgKi9cXG43MjI4OlxcdFxcdGlmICghdm1hX2xvb2t1cChtbSwgYWRkcikgXFx1MDAyNlxcdTAwMjYgIWV4cGFuZF9zdGFjayhtbSwgYWRkcikpXFxuNzIyOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG43MjMwOlxcdFxcbjcyMzE6XFx0XFx0LyogaWdub3JlIGVycm9ycywganVzdCBjaGVjayBob3cgbXVjaCB3YXMgc3VjY2Vzc2Z1bGx5IHRyYW5zZmVycmVkICovXFxuNzIzMjpcXHRcXHR3aGlsZSAobGVuKSB7XFxuNzIzMzpcXHRcXHRcXHRpbnQgYnl0ZXMsIG9mZnNldDtcXG43MjM0OlxcdFxcdFxcdHZvaWQgKm1hZGRyO1xcbjcyMzU6XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG43MjM2OlxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gTlVMTDtcXG43MjM3OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gZ2V0X3VzZXJfcGFnZV92bWFfcmVtb3RlKG1tLCBhZGRyLFxcbjcyMzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBndXBfZmxhZ3MsIFxcdTAwMjZ2bWEpO1xcbjcyMzk6XFx0XFxuNzI0MDpcXHRcXHRcXHRpZiAoSVNfRVJSKHBhZ2UpKSB7XFxuNzI0MTpcXHRcXHRcXHRcXHQvKiBXZSBtaWdodCBuZWVkIHRvIGV4cGFuZCB0aGUgc3RhY2sgdG8gYWNjZXNzIGl0ICovXFxuNzI0MjpcXHRcXHRcXHRcXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyKTtcXG43MjQzOlxcdFxcdFxcdFxcdGlmICghdm1hKSB7XFxuNzI0NDpcXHRcXHRcXHRcXHRcXHR2bWEgPSBleHBhbmRfc3RhY2sobW0sIGFkZHIpO1xcbjcyNDU6XFx0XFxuNzI0NjpcXHRcXHRcXHRcXHRcXHQvKiBtbWFwX2xvY2sgd2FzIGRyb3BwZWQgb24gZmFpbHVyZSAqL1xcbjcyNDc6XFx0XFx0XFx0XFx0XFx0aWYgKCF2bWEpXFxuNzI0ODpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcXG43MjQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMDowOS40NDQxODUwODhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjczMTI1NTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gdGhlIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGNlcnRhaW4gc2VjdGlvbnMgb2YgdGhpcyBjb2RlIGFyZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBUbyBkbyB0aGF0LCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gbGluZXMgYXJvdW5kIHRoZSA3MTQwIG1hcmsuIEknbGwgYmUgbG9va2luZyBmb3IgYCNpZmRlZmAgZGlyZWN0aXZlcyBvciBhbnl0aGluZyB0aGF0IGxvb2tzIGxpa2UgcHJlcHJvY2Vzc29yIGd1YXJkcyB0aGF0IGNvbnRyb2wgd2hldGhlciBhIHBhcnRpY3VsYXIgYmxvY2sgb2YgY29kZSBnZXRzIGluY2x1ZGVkIGR1cmluZyBjb21waWxhdGlvbi4gVGhlc2UgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBkaWZmZXJlbnQgYnVpbGQgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMgdGhhdCBhcmUgYmVpbmcgc2VsZWN0aXZlbHkgZW5hYmxlZCBvciBkaXNhYmxlZC4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHNlbnNlIG9mIHdoaWNoIHBhcnRzIG9mIHRoZSBjb2RlIGFyZSBhY3RpdmUgdW5kZXIgYSBwYXJ0aWN1bGFyIHNldCBvZiBjb21waWxlciBmbGFncyBvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHdoaWNoIHdpbGwgYmUgdml0YWwgZm9yIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDMzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMDoxNC4xMTczMTI4NDNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjEzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzEzNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzEzNTpcXHR7XFxuNzEzNjpcXHRcXHRpZiAoYXJncy1cXHUwMDNlbG9jaylcXG43MTM3OlxcdFxcdFxcdHNwaW5fdW5sb2NrKGFyZ3MtXFx1MDAzZWxvY2spO1xcbjcxMzg6XFx0XFx0aWYgKGFyZ3MtXFx1MDAzZXB0ZXApXFxuNzEzOTpcXHRcXHRcXHRwdGVfdW5tYXAoYXJncy1cXHUwMDNlcHRlcCk7XFxuNzE0MDpcXHR9XFxuNzE0MTpcXHRFWFBPUlRfU1lNQk9MX0dQTChmb2xsb3dfcGZubWFwX2VuZCk7XFxuNzE0MjpcXHRcXG43MTQzOlxcdCNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG43MTQ0OlxcdC8qKlxcbjcxNDU6XFx0ICogZ2VuZXJpY19hY2Nlc3NfcGh5cyAtIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIGlvbWVtIG1tYXAgYWNjZXNzXFxuNzE0NjpcXHQgKiBAdm1hOiB0aGUgdm1hIHRvIGFjY2Vzc1xcbjcxNDc6XFx0ICogQGFkZHI6IHVzZXJzcGFjZSBhZGRyZXNzLCBub3QgcmVsYXRpdmUgb2Zmc2V0IHdpdGhpbiBAdm1hXFxuNzE0ODpcXHQgKiBAYnVmOiBidWZmZXIgdG8gcmVhZC93cml0ZVxcbjcxNDk6XFx0ICogQGxlbjogbGVuZ3RoIG9mIHRyYW5zZmVyXFxuNzE1MDpcXHQgKiBAd3JpdGU6IHNldCB0byBGT0xMX1dSSVRFIHdoZW4gd3JpdGluZywgb3RoZXJ3aXNlIHJlYWRpbmdcXG43MTUxOlxcdCAqXFxuNzE1MjpcXHQgKiBUaGlzIGlzIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgXFx1MDAyNnZtX29wZXJhdGlvbnNfc3RydWN0LmFjY2VzcyBmb3IgYW5cXG43MTUzOlxcdCAqIGlvbWVtIG1hcHBpbmcuIFRoaXMgY2FsbGJhY2sgaXMgdXNlZCBieSBhY2Nlc3NfcHJvY2Vzc192bSgpIHdoZW4gdGhlIEB2bWEgaXNcXG43MTU0OlxcdCAqIG5vdCBwYWdlIGJhc2VkLlxcbjcxNTU6XFx0ICovXFxuNzE1NjpcXHRpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbjcxNTc6XFx0XFx0XFx0XFx0dm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpXFxuNzE1ODpcXHR7XFxuNzE1OTpcXHRcXHRyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyO1xcbjcxNjA6XFx0XFx0cGdwcm90X3QgcHJvdCA9IF9fcGdwcm90KDApO1xcbjcxNjE6XFx0XFx0dm9pZCBfX2lvbWVtICptYWRkcjtcXG43MTYyOlxcdFxcdGludCBvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShhZGRyKTtcXG43MTYzOlxcdFxcdGludCByZXQgPSAtRUlOVkFMO1xcbjcxNjQ6XFx0XFx0Ym9vbCB3cml0YWJsZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6MTQuMTE3NTc2NTIzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU0MTA0ODAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSByZXF1ZXN0LCB0aGlua2luZyBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IEFjY2VzcyBQYXR0ZXJucyoqXG5cbk9rYXksIHNvIHRoZSBnb2FsIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zIHdpdGhpbiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gdHJhY2UgYW5kIGFuYWx5emUgY2FsbHMgdG8gZnVuY3Rpb25zIHJlbGF0ZWQgdG8gcmVtb3RlIG1lbW9yeSBhY2Nlc3MuIFNwZWNpZmljYWxseSwgdGhlIHJlcXVlc3Qgd2FudHMgbWUgdG8gbG9vayBmb3IgdXNhZ2VzIG9mIGBnZW5lcmljX2FjY2Vzc19waHlzYC4gVGhpcyBsaWtlbHkgaW5kaWNhdGVzIGludGVyYWN0aW9ucyB3aXRoIHBoeXNpY2FsIG1lbW9yeSwgcGVyaGFwcyBkZXZpY2UgaW50ZXJhY3Rpb24gb3IgZGlyZWN0IG1lbW9yeSBhY2Nlc3MuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNhbGxzLlxuXG5CZXlvbmQgdGhhdCwgdGhlIHJlcXVlc3QgZXhwYW5kcyB0aGUgc2NvcGUgdG8gaW5jbHVkZSB2YXJpYXRpb25zIG9mIHJlbW90ZSBWTSBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGJlIGluY2x1c2l2ZSBhbmQgbG9vayBmb3IgYF9fYWNjZXNzX3JlbW90ZV92bWAsIGBhY2Nlc3NfcmVtb3RlX3ZtYCwgYW5kIGBhY2Nlc3NfcHJvY2Vzc192bWAuIFRoZXNlIGFsbCBwb2ludCB0byB0aGUgcmV0cmlldmFsIG9yIG1vZGlmaWNhdGlvbiBvZiBtZW1vcnkgZnJvbSBhIHZpcnR1YWwgbWFjaGluZSBvciBhIHNlcGFyYXRlIHByb2Nlc3MuIFRoZSBnb2FsIGlzIGxpa2VseSB0byBmaW5kIGNhc2VzIG9mIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIGRlYnVnZ2luZyBvcHBvcnR1bml0aWVzLCBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyByZWxhdGVkIHRvIHRoZXNlIGZ1bmN0aW9ucy4gSXQncyBhYm91dCBidWlsZGluZyBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSBhbmQgaG93IHJlbW90ZSBtZW1vcnkgYWNjZXNzIGlzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byBjb25zaWRlciBhbGwgcGVybXV0YXRpb25zIG9mIGhvdyB0aGVzZSBjYWxscyBhcmUgaGFuZGxlZCBhbmQgd2hhdCBzZWN1cml0eSBmZWF0dXJlcyBtYXkgYmUgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTczMCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6MTYuNjU4NjI2ODcyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODIxODY2MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2VuZXJpY19hY2Nlc3NfcGh5c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NkeC9jZHguYz02NjI9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBjZHhfcGh5c192bV9vcHMgPSB7XFxuZHJpdmVycy9jZHgvY2R4LmMtNjYzLSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL2NkeC9jZHguYzo2NjQ6XFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXFxuZHJpdmVycy9jZHgvY2R4LmMtNjY1LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9jaGFyL21lbS5jPTMxOT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1tYXBfbWVtX29wcyA9IHtcXG5kcml2ZXJzL2NoYXIvbWVtLmMtMzIwLSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL2NoYXIvbWVtLmM6MzIxOlxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzXFxuZHJpdmVycy9jaGFyL21lbS5jLTMyMi0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYz04MDU9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhZnVfdm1hX29wcyA9IHtcXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmMtODA2LSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmM6ODA3OlxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYy04MDgtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL3BjaS9tbWFwLmM9MTg9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBwY2lfcGh5c192bV9vcHMgPSB7XFxuZHJpdmVycy9wY2kvbW1hcC5jLTE5LSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL3BjaS9tbWFwLmM6MjA6XFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXFxuZHJpdmVycy9wY2kvbW1hcC5jLTIxLSNlbmRpZlxcbi0tXFxuZHJpdmVycy91aW8vdWlvLmM9NzM2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdWlvX3BoeXNpY2FsX3ZtX29wcyA9IHtcXG5kcml2ZXJzL3Vpby91aW8uYy03MzctI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvdWlvL3Vpby5jOjczODpcXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcXG5kcml2ZXJzL3Vpby91aW8uYy03MzktI2VuZGlmXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9ODA2PXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtODU4LVxcdC8qIGNhbGxlZCBieSBhY2Nlc3NfcHJvY2Vzc192bSB3aGVuIGdldF91c2VyX3BhZ2VzKCkgZmFpbHMsIHR5cGljYWxseVxcbmluY2x1ZGUvbGludXgvbW0uaDo4NTk6XFx0ICogZm9yIHVzZSBieSBzcGVjaWFsIFZNQXMuIFNlZSBhbHNvIGdlbmVyaWNfYWNjZXNzX3BoeXMoKSBmb3IgYSBnZW5lcmljXFxuaW5jbHVkZS9saW51eC9tbS5oLTg2MC1cXHQgKiBpbXBsZW1lbnRhdGlvbiB1c2VmdWwgZm9yIGFueSBpb21lbSBtYXBwaW5nLlxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTMyMzQ9Y29weV9wYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hKTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MzIzNTppbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmluY2x1ZGUvbGludXgvbW0uaC0zMjM2LVxcdFxcdFxcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKTtcXG4tLVxcbm1tL21lbW9yeS5jPTcxNDE9RVhQT1JUX1NZTUJPTF9HUEwoZm9sbG93X3Bmbm1hcF9lbmQpO1xcbi0tXFxubW0vbWVtb3J5LmMtNzE0NC0vKipcXG5tbS9tZW1vcnkuYzo3MTQ1OiAqIGdlbmVyaWNfYWNjZXNzX3BoeXMgLSBnZW5lcmljIGltcGxlbWVudGF0aW9uIGZvciBpb21lbSBtbWFwIGFjY2Vzc1xcbm1tL21lbW9yeS5jLTcxNDYtICogQHZtYTogdGhlIHZtYSB0byBhY2Nlc3NcXG4tLVxcbm1tL21lbW9yeS5jLTcxNTUtICovXFxubW0vbWVtb3J5LmM6NzE1NjppbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL21lbW9yeS5jLTcxNTctXFx0XFx0XFx0dm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpXFxuLS1cXG5tbS9tZW1vcnkuYy03MjA4LX1cXG5tbS9tZW1vcnkuYzo3MjA5OkVYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfYWNjZXNzX3BoeXMpO1xcbm1tL21lbW9yeS5jLTcyMTAtI2VuZGlmXFxuLS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oPTY0MD1zdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qge1xcbi0tXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC02OTItXFx0LyogY2FsbGVkIGJ5IGFjY2Vzc19wcm9jZXNzX3ZtIHdoZW4gZ2V0X3VzZXJfcGFnZXMoKSBmYWlscywgdHlwaWNhbGx5XFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaDo2OTM6XFx0ICogZm9yIHVzZSBieSBzcGVjaWFsIFZNQXMuIFNlZSBhbHNvIGdlbmVyaWNfYWNjZXNzX3BoeXMoKSBmb3IgYSBnZW5lcmljXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC02OTQtXFx0ICogaW1wbGVtZW50YXRpb24gdXNlZnVsIGZvciBhbnkgaW9tZW0gbWFwcGluZy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6MTguNDQwODIwMjMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAxMzY0MjM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFJlbW90ZSBWTSBBY2Nlc3MgUGF0aCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgd2hlbiBgX19hY2Nlc3NfcmVtb3RlX3ZtYCBnZXRzIGludm9sdmVkLCBzcGVjaWZpY2FsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB2aXJ0dWFsIG1lbW9yeSBhcmVhIChgdm1hYCkgYW5kIGl0cyBvcGVyYXRpb25zIChgdm1fb3BzYCkuIEknbSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBjYWxscyB0byBgdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VhY2Nlc3NgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmF2aWdhdGUgdG8gYG1tL21lbW9yeS5jYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmVzIDcyNDAgdG8gNzMwMC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlc2UgdHlwZXMgb2YgbWVtb3J5IGFjY2VzcyBpbnRlcmFjdGlvbnMgYXJlIGhhbmRsZWQuIEkgZXhwZWN0IHRvIHNlZSB0aGUgY29yZSBsb2dpYyB0aGVyZSwgd2hlcmUgdGhlIFZNIG9wZXJhdGlvbiBpcyBkaXNwYXRjaGVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludCBJIG5lZWQgdG8gZm9sbG93IHRoZSB0aHJlYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMDoyMC40NTQ0NjU2NzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyNDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjcyNDA6XFx0XFx0XFx0aWYgKElTX0VSUihwYWdlKSkge1xcbjcyNDE6XFx0XFx0XFx0XFx0LyogV2UgbWlnaHQgbmVlZCB0byBleHBhbmQgdGhlIHN0YWNrIHRvIGFjY2VzcyBpdCAqL1xcbjcyNDI6XFx0XFx0XFx0XFx0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XFxuNzI0MzpcXHRcXHRcXHRcXHRpZiAoIXZtYSkge1xcbjcyNDQ6XFx0XFx0XFx0XFx0XFx0dm1hID0gZXhwYW5kX3N0YWNrKG1tLCBhZGRyKTtcXG43MjQ1OlxcdFxcbjcyNDY6XFx0XFx0XFx0XFx0XFx0LyogbW1hcF9sb2NrIHdhcyBkcm9wcGVkIG9uIGZhaWx1cmUgKi9cXG43MjQ3OlxcdFxcdFxcdFxcdFxcdGlmICghdm1hKVxcbjcyNDg6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XFxuNzI0OTpcXHRcXG43MjUwOlxcdFxcdFxcdFxcdFxcdC8qIFRyeSBhZ2FpbiBpZiBzdGFjayBleHBhbnNpb24gd29ya2VkICovXFxuNzI1MTpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43MjUyOlxcdFxcdFxcdFxcdH1cXG43MjUzOlxcdFxcbjcyNTQ6XFx0XFx0XFx0XFx0LypcXG43MjU1OlxcdFxcdFxcdFxcdCAqIENoZWNrIGlmIHRoaXMgaXMgYSBWTV9JTyB8IFZNX1BGTk1BUCBWTUEsIHdoaWNoXFxuNzI1NjpcXHRcXHRcXHRcXHQgKiB3ZSBjYW4gYWNjZXNzIHVzaW5nIHNsaWdodGx5IGRpZmZlcmVudCBjb2RlLlxcbjcyNTc6XFx0XFx0XFx0XFx0ICovXFxuNzI1ODpcXHRcXHRcXHRcXHRieXRlcyA9IDA7XFxuNzI1OTpcXHQjaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxuNzI2MDpcXHRcXHRcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9vcHMgXFx1MDAyNlxcdTAwMjYgdm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZWFjY2VzcylcXG43MjYxOlxcdFxcdFxcdFxcdFxcdGJ5dGVzID0gdm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZWFjY2Vzcyh2bWEsIGFkZHIsIGJ1ZixcXG43MjYyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBtaW5fdChpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2UoYWRkcikpLFxcbjcyNjM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHdyaXRlKTtcXG43MjY0OlxcdCNlbmRpZlxcbjcyNjU6XFx0XFx0XFx0XFx0aWYgKGJ5dGVzIFxcdTAwM2M9IDApXFxuNzI2NjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG43MjY3OlxcdFxcdFxcdH0gZWxzZSB7XFxuNzI2ODpcXHRcXHRcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuNzI2OTpcXHRcXHRcXHRcXHRieXRlcyA9IGxlbjtcXG43MjcwOlxcdFxcdFxcdFxcdG9mZnNldCA9IGFkZHIgXFx1MDAyNiAoUEFHRV9TSVpFLTEpO1xcbjcyNzE6XFx0XFx0XFx0XFx0aWYgKGJ5dGVzIFxcdTAwM2UgUEFHRV9TSVpFLW9mZnNldClcXG43MjcyOlxcdFxcdFxcdFxcdFxcdGJ5dGVzID0gUEFHRV9TSVpFLW9mZnNldDtcXG43MjczOlxcdFxcbjcyNzQ6XFx0XFx0XFx0XFx0bWFkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBmb2xpb19wYWdlX2lkeChmb2xpbywgcGFnZSkgKiBQQUdFX1NJWkUpO1xcbjcyNzU6XFx0XFx0XFx0XFx0aWYgKHdyaXRlKSB7XFxuNzI3NjpcXHRcXHRcXHRcXHRcXHRjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXFxuNzI3NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIG1hZGRyICsgb2Zmc2V0LCBidWYsIGJ5dGVzKTtcXG43Mjc4OlxcdFxcdFxcdFxcdFxcdGZvbGlvX21hcmtfZGlydHlfbG9jayhmb2xpbyk7XFxuNzI3OTpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjcyODA6XFx0XFx0XFx0XFx0XFx0Y29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXFxuNzI4MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgYnVmLCBtYWRkciArIG9mZnNldCwgYnl0ZXMpO1xcbjcyODI6XFx0XFx0XFx0XFx0fVxcbjcyODM6XFx0XFx0XFx0XFx0Zm9saW9fcmVsZWFzZV9rbWFwKGZvbGlvLCBtYWRkcik7XFxuNzI4NDpcXHRcXHRcXHR9XFxuNzI4NTpcXHRcXHRcXHRsZW4gLT0gYnl0ZXM7XFxuNzI4NjpcXHRcXHRcXHRidWYgKz0gYnl0ZXM7XFxuNzI4NzpcXHRcXHRcXHRhZGRyICs9IGJ5dGVzO1xcbjcyODg6XFx0XFx0fVxcbjcyODk6XFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuNzI5MDpcXHRcXG43MjkxOlxcdFxcdHJldHVybiBidWYgLSBvbGRfYnVmO1xcbjcyOTI6XFx0fVxcbjcyOTM6XFx0XFxuNzI5NDpcXHQvKipcXG43Mjk1OlxcdCAqIGFjY2Vzc19yZW1vdGVfdm0gLSBhY2Nlc3MgYW5vdGhlciBwcm9jZXNzJyBhZGRyZXNzIHNwYWNlXFxuNzI5NjpcXHQgKiBAbW06XFx0XFx0dGhlIG1tX3N0cnVjdCBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2VcXG43Mjk3OlxcdCAqIEBhZGRyOlxcdHN0YXJ0IGFkZHJlc3MgdG8gYWNjZXNzXFxuNzI5ODpcXHQgKiBAYnVmOlxcdHNvdXJjZSBvciBkZXN0aW5hdGlvbiBidWZmZXJcXG43Mjk5OlxcdCAqIEBsZW46XFx0bnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIwOjIwLjQ1NDczODYwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODQwMDc1NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZW1vdGUgVk0gQWNjZXNzIE1lY2hhbmlzbXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBmdW5jdGlvbiBgX19hY2Nlc3NfcmVtb3RlX3ZtYCBpcyBhdCB0aGUgaGVhcnQgb2YgcmVtb3RlIFZNIGFjY2VzcywgYW5kIGl0J3MgYmVpbmcgY2FsbGVkIGJ5IGEgdmFyaWV0eSBvZiBtZXRob2RzOiBgYWNjZXNzX3JlbW90ZV92bWAgaXRzZWxmLCBgYWNjZXNzX3Byb2Nlc3Nfdm1gLCBgcHRyYWNlYCwgcmVhZGluZyBkaXJlY3RseSBmcm9tIGAvcHJvYy8kcGlkL21lbWAsIGFuZCBzbyBvbi5cblxuVGhlIGNyaXRpY2FsIHBvaW50IGlzIGhvdyB0aGlzIGFjY2VzcyBiZWhhdmVzIHdoZW4gaXQgdG91Y2hlcyBhIFZpcnR1YWwgTWVtb3J5IEFyZWEgKFZNQSkgdGhhdCBoYXMgYSBzcGVjaWZpYyBgLmFjY2Vzc2AgbWV0aG9kIGFzc2lnbmVkIHRvIGl0LiAgVGhhdCBpbmNsdWRlcyBhcmVhcyBsaWtlIGAvZGV2L21lbWAsIG1lbW9yeSBtYXBwZWQgUENJIGRldmljZXMsIFVzZXIgSS9PIChVSU8pIHJlZ2lvbnMsIGFuZCBwb3RlbnRpYWxseSB0aG9zZSBoYW5kbGVkIGJ5IGBnZW5lcmljX2FjY2Vzc19waHlzYC4gSW4gdGhlc2UgY2FzZXMsIHRoZSBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgZnVuY3Rpb24sIG9yIHRoZSBWTUHigJlzIGB2bV9vcHMtXHUwMDNlYWNjZXNzYCBmdW5jdGlvbiBpcyBleGVjdXRlZC5cblxuU2luY2UgSSdtIHdvcmtpbmcgd2l0aCBhbiBBTUQ2NCBzeXN0ZW0sIGFuZCBhbHNvIGF3YXJlIG9mIG90aGVyIGFyY2hpdGVjdHVyZXMsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcXVpY2tseTogRG9lcyB0aGUgYXJjaGl0ZWN0dXJlIGluIHF1ZXN0aW9uICphY3R1YWxseSogZGVmaW5lIGBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RgPyAgVGhpcyBpcyBhbiBpbXBvcnRhbnQgZGV0YWlsLCBhcyBpdCBwbGF5cyBhIHJvbGUgaW4gcHJvdGVjdGVkIEkvTyByZW1hcHBpbmcuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBkZWZpbml0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjMwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6MjYuMjk0ODE3ODkyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc3NTAwMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkhBVkVfSU9SRU1BUF9QUk9UXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZmVhdHVyZXMvdm0vaW9yZW1hcF9wcm90L2FyY2gtc3VwcG9ydC50eHQtMi0jIEZlYXR1cmUgbmFtZTogICAgICAgICAgaW9yZW1hcF9wcm90XFxuRG9jdW1lbnRhdGlvbi9mZWF0dXJlcy92bS9pb3JlbWFwX3Byb3QvYXJjaC1zdXBwb3J0LnR4dDozOiMgICAgICAgICBLY29uZmlnOiAgICAgICBIQVZFX0lPUkVNQVBfUFJPVFxcbkRvY3VtZW50YXRpb24vZmVhdHVyZXMvdm0vaW9yZW1hcF9wcm90L2FyY2gtc3VwcG9ydC50eHQtNC0jICAgICAgICAgZGVzY3JpcHRpb246ICAgYXJjaCBoYXMgaW9yZW1hcF9wcm90KClcXG4tLVxcbmFyY2gvS2NvbmZpZz0yNzI9Y29uZmlnIFVTRVJfUkVUVVJOX05PVElGSUVSXFxuLS1cXG5hcmNoL0tjb25maWctMjc4LVxcbmFyY2gvS2NvbmZpZzoyNzk6Y29uZmlnIEhBVkVfSU9SRU1BUF9QUk9UXFxuYXJjaC9LY29uZmlnLTI4MC1cXHRib29sXFxuLS1cXG5hcmNoL2FyYy9LY29uZmlnPTY9Y29uZmlnIEFSQ1xcbi0tXFxuYXJjaC9hcmMvS2NvbmZpZy0zOC1cXHRzZWxlY3QgSEFWRV9ERUJVR19LTUVNTEVBS1xcbmFyY2gvYXJjL0tjb25maWc6Mzk6XFx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UXFxuYXJjaC9hcmMvS2NvbmZpZy00MC1cXHRzZWxlY3QgSEFWRV9LRVJORUxfR1pJUFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMjEwLVxcdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlQgaWYgUEVSRl9FVkVOVFNcXG5hcmNoL2FybTY0L0tjb25maWc6MjExOlxcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVFxcbmFyY2gvYXJtNjQvS2NvbmZpZy0yMTItXFx0c2VsZWN0IEhBVkVfSVJRX1RJTUVfQUNDT1VOVElOR1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctMTU3LVxcdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlQgaWYgUEVSRl9FVkVOVFNcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjE1ODpcXHRzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1RcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE1OS1cXHRzZWxlY3QgSEFWRV9JUlFfRVhJVF9PTl9JUlFfU1RBQ0tcXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnPTI9Y29uZmlnIE1JUFNcXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnLTc2LVxcdHNlbGVjdCBIQVZFX0dDQ19QTFVHSU5TXFxuYXJjaC9taXBzL0tjb25maWc6Nzc6XFx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UXFxuYXJjaC9taXBzL0tjb25maWctNzgtXFx0c2VsZWN0IEhBVkVfSVJRX0VYSVRfT05fSVJRX1NUQUNLXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMjYxLVxcdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlRcXHRcXHRpZiBQRVJGX0VWRU5UUyBcXHUwMDI2XFx1MDAyNiAoUFBDX0JPT0szUyB8fCBQUENfOHh4KVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjI2MjpcXHRzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1RcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0yNjMtXFx0c2VsZWN0IEhBVkVfSVJRX1RJTUVfQUNDT1VOVElOR1xcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTExOC1cXHRzZWxlY3QgR0VORVJJQ19JT1JFTUFQIGlmIE1NVVxcbmFyY2gvcmlzY3YvS2NvbmZpZzoxMTk6XFx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UIGlmIE1NVVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMjAtXFx0c2VsZWN0IEdFTkVSSUNfSVJRX0lQSSBpZiBTTVBcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTc4PWNvbmZpZyBTMzkwXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy0yMjUtXFx0c2VsZWN0IEhBVkVfR0NDX1BMVUdJTlNcXG5hcmNoL3MzOTAvS2NvbmZpZzoyMjY6XFx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UIGlmIFBDSVxcbmFyY2gvczM5MC9LY29uZmlnLTIyNy1cXHRzZWxlY3QgSEFWRV9LRVJORUxfQlpJUDJcXG4tLVxcbmFyY2gvc2gvS2NvbmZpZz0yPWNvbmZpZyBTVVBFUkhcXG4tLVxcbmFyY2gvc2gvS2NvbmZpZy00My1cXHRzZWxlY3QgSEFWRV9IV19CUkVBS1BPSU5UXFxuYXJjaC9zaC9LY29uZmlnOjQ0OlxcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVCBpZiBNTVUgXFx1MDAyNlxcdTAwMjYgIVgyVExCXFxuYXJjaC9zaC9LY29uZmlnLTQ1LVxcdHNlbGVjdCBIQVZFX0tFUk5FTF9CWklQMlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTI1MS1cXHRzZWxlY3QgSEFWRV9IV19CUkVBS1BPSU5UXFxuYXJjaC94ODYvS2NvbmZpZzoyNTI6XFx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UXFxuYXJjaC94ODYvS2NvbmZpZy0yNTMtXFx0c2VsZWN0IEhBVkVfSVJRX0VYSVRfT05fSVJRX1NUQUNLXFx0aWYgWDg2XzY0XFxuLS1cXG5kcml2ZXJzL2NkeC9jZHguYz02NjI9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBjZHhfcGh5c192bV9vcHMgPSB7XFxuZHJpdmVycy9jZHgvY2R4LmM6NjYzOiNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL2NkeC9jZHguYy02NjQtXFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXFxuLS1cXG5kcml2ZXJzL2NoYXIvbWVtLmM9MzE5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF9tZW1fb3BzID0ge1xcbmRyaXZlcnMvY2hhci9tZW0uYzozMjA6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvY2hhci9tZW0uYy0zMjEtXFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXNcXG4tLVxcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYz04MDU9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhZnVfdm1hX29wcyA9IHtcXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmM6ODA2OiNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmMtODA3LVxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxcbi0tXFxuZHJpdmVycy9wY2kvbW1hcC5jPTE4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGNpX3BoeXNfdm1fb3BzID0ge1xcbmRyaXZlcnMvcGNpL21tYXAuYzoxOTojaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxuZHJpdmVycy9wY2kvbW1hcC5jLTIwLVxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxcbi0tXFxuZHJpdmVycy91aW8vdWlvLmM9NzM2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdWlvX3BoeXNpY2FsX3ZtX29wcyA9IHtcXG5kcml2ZXJzL3Vpby91aW8uYzo3Mzc6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvdWlvL3Vpby5jLTczOC1cXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcXG4tLVxcbm1tL21lbW9yeS5jPTcxNDE9RVhQT1JUX1NZTUJPTF9HUEwoZm9sbG93X3Bmbm1hcF9lbmQpO1xcbm1tL21lbW9yeS5jLTcxNDItXFxubW0vbWVtb3J5LmM6NzE0MzojaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxubW0vbWVtb3J5LmMtNzE0NC0vKipcXG4tLVxcbm1tL21lbW9yeS5jPTcyMTU9c3RhdGljIGludCBfX2FjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbW9yeS5jLTcyNTgtXFx0XFx0XFx0Ynl0ZXMgPSAwO1xcbm1tL21lbW9yeS5jOjcyNTk6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbm1tL21lbW9yeS5jLTcyNjAtXFx0XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fb3BzIFxcdTAwMjZcXHUwMDI2IHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VhY2Nlc3MpXFxuLS1cXG5tbS9tZW1vcnkuYz03MzQwPXN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbW9yeS5jLTczNjktXFx0XFx0XFx0ICogVHJlYXQgYXMgYSB0b3RhbCBmYWlsdXJlIGZvciBub3cgdW50aWwgd2UgZGVjaWRlIGhvd1xcbm1tL21lbW9yeS5jOjczNzA6XFx0XFx0XFx0ICogdG8gaGFuZGxlIHRoZSBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgY2FzZSBhbmRcXG5tbS9tZW1vcnkuYy03MzcxLVxcdFxcdFxcdCAqIHN0YWNrIGV4cGFuc2lvbi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6MjguMDcyMzI2NjEyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxODI0MDA4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQ6IE1NL01lbW9yeS5jIC0gVnVsbmVyYWJpbGl0eSBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBPbiB4ODZfNjQsIGBIQVZFX0lPUkVNQVBfUFJPVGAgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZC4gVGhhdCdzIGEga2V5IGRldGFpbCB0byBrZWVwIGluIG1pbmQsIHJpZ2h0PyBOb3csIHRoZSBjb3JlIG9mIHRoaXMgaW52ZXN0aWdhdGlvbiBmb2N1c2VzIG9uIHRoZXNlIGNvZGUgY2hhbmdlcyBJIHNlZSBpbiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgYW5kIGBfX2FjY2Vzc19yZW1vdGVfdm1gLCBib3RoIGluIGBtbS9tZW1vcnkuY2AuXG5cbkZpcnN0LCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2Ag4oCTIGl0J3MgYmVlbiBtb2RpZmllZCBpbiB0d28gc2lnbmlmaWNhbnQgd2F5cy4gVGhlIGxlbmd0aCBjYWxjdWxhdGlvbnMgYW5kIHRoZSBgaW9yZW1hcF9wcm90YCBjYWxsIGhhdmUgYmVlbiB0b3VjaGVkLiBUaGVyZSBpcyBhIGBtaW5fdGAgY2FsbCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIGlzIHRyeWluZyB0byBzaW1wbGlmeSB0aGUgaW9yZW1hcHBpbmcsIGJ1dCBpdCBpbnRyb2R1Y2VzIGEgc3VidGxlIHNoaWZ0IHRoYXQgY291bGQgYmUgaW1wb3J0YW50LlxuXG5UaGVuIHRoZXJlJ3MgYF9fYWNjZXNzX3JlbW90ZV92bWAuIFRoZSBpbnRlcmVzdGluZyBjaGFuZ2UgaGVyZSBpbnZvbHZlcyBsaW1pdGluZyB0aGUgbGVuZ3RoIGluIGB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2Vzc2AuIFRoZSB1c2Ugb2YgYG1pbl90YCBhZ2FpbiBpcyBpbnRlcmVzdGluZywgZXNwZWNpYWxseSB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIG9mZnNldCBjYWxjdWxhdGlvbi4gVGhpcyBwb3RlbnRpYWxseSBpbnRyb2R1Y2VzIHN1YnRsZSBpbnRlZ2VyIG92ZXJmbG93LCBvdXQtb2YtYm91bmRzLCBvciBsZW5ndGggY2FsY3VsYXRpb24gaXNzdWVzLlxuXG5SZWFjaGFiaWxpdHk/IFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkLiBXZSdyZSB0YWxraW5nIGFib3V0IGNvZGUgYWNjZXNzaWJsZSB2aWEgYHB0cmFjZShQVFJBQ0VfUEVFS0RBVEEvUFRSQUNFX1BPS0VEQVRBKWAgb3IgYC9wcm9jL3BpZC9tZW1gLiBUaGluayBgL2Rldi9tZW1gLCBwaHlzaWNhbCBWTUFzLCBQRk5NQVAgVk1BcyDigJMgdGhlc2UgYXJlIGFsbCByZWFkaWx5IGF2YWlsYWJsZSBhdHRhY2sgc3VyZmFjZXMuIFRoaXMgbWFrZXMgaXQgYW4gYXR0cmFjdGl2ZSB0YXJnZXQuXG5cbklzIGl0IHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFRoZSBmYWN0IHRoYXQgdGhlIGNoYW5nZXMgYWZmZWN0IHJlbW90ZSBWTSBhY2Nlc3MgYW5kIHBoeXNpY2FsIEkvTyBtZW1vcnkgbWFwcGluZywgd2l0aCBsZW5ndGggY2FsY3VsYXRpb25zLCBwYWdlIGJvdW5kYXJ5IGNyb3NzaW5ncywgYW5kIHR5cGUgY2FzdHMsIHNjcmVhbXMgXCJmdXp6IG1lLlwiIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZXMgY2FuIGludHJvZHVjZSBzdWJ0bGUgYnVncy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIHN5bWJvbHMuIGBnZW5lcmljX2FjY2Vzc19waHlzYCBpcyBkaXJlY3RseSBtb2RpZmllZCwgYW5kIGBfX2FjY2Vzc19yZW1vdGVfdm1gIChzdGF0aWMsIHNvIGEgbGl0dGxlIGxlc3MgdmlzaWJsZSkgaXMgdXNlZC4gSXRzIGNhbGxlcnMgYXJlIGBhY2Nlc3NfcmVtb3RlX3ZtYCBhbmQgYGFjY2Vzc19wcm9jZXNzX3ZtYC4gQWx0aG91Z2ggYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGFwcGVhcnMgdG8gYmUgc3BlY2lmaWMgdG8gaW9tZW0vcGZubWFwIFZNQXMsIHRoYXQgc3RpbGwgbWFrZXMgaXQgcXVpdGUgYWNjZXNzaWJsZS5cblxuTm8gdWJpcXVpdG91cyBjYWxscyBlaXRoZXIuIFRoaXMgYWxzbyBtZWFucywgbGVzcyBwbGFjZXMgdG8gaW5qZWN0IGJ1Z3MuXG5cbkNvbmZpZ3VyYXRpb24gZmxhZ3M/IGBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RgIGlzIGhhbmRsZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSAoeDg2KSwgYnV0IHdlIHNob3VsZCBjaGVjayBpZiBhbnkgZHJpdmVyIGlzIHJlcXVpcmVkIGZvciBWTUEgY3JlYXRpb24gKGUuZy4sIGBDT05GSUdfREVWTUVNYCwgYENPTkZJR19VSU9gKSwgYnV0IGZyb20gd2hhdCBJIHJlbWVtYmVyLCBzdGFuZGFyZCBjb25maWd1cmF0aW9ucyBzaG91bGQgYWxyZWFkeSBlbmFibGUgdGhpcy4gV2Ugc2hvdWxkIGNoZWNrIHRoZXNlLCB0aG91Z2guIEFsc28sIGxldCdzIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgbGlrZSBgREVWTUVNYC5cblxuVGhpcyBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgY29kZSBjaGFuZ2VzLCB0aGUgcmVhY2hhYmlsaXR5LCBhbmQgdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGJ1Z3MgYWxsIHBvaW50IHRvIGEgd29ydGh3aGlsZSB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDE3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIwOjM0LjI1NDczMDM2NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0MzU4NjM2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVWTUVNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY2hhci9LY29uZmlnPTI0OT1jb25maWcgTlNDX0dQSU9cXG4tLVxcbmRyaXZlcnMvY2hhci9LY29uZmlnLTI1OC1cXG5kcml2ZXJzL2NoYXIvS2NvbmZpZzoyNTk6Y29uZmlnIERFVk1FTVxcbmRyaXZlcnMvY2hhci9LY29uZmlnLTI2MC1cXHRib29sIFxcXCIvZGV2L21lbSB2aXJ0dWFsIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMDozNS44OTgzMjU3NDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk0NDQzMjk4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIHVzYWdlIG9mIGBnZW5lcmljX2FjY2Vzc19waHlzYC4gRmlyc3QsIGxldCdzIHF1aWNrbHkgcmV2aWV3IHRoZSBjb2RlYmFzZSB0byBzZWUgd2hlcmUgaXQncyBjdXJyZW50bHkgdXRpbGl6ZWQgb3IgcmVmZXJlbmNlZC4gSSd2ZSBmb3VuZCBpdCdzIHVzZWQgaW4gdGhlc2UgZHJpdmVyczogYGRyaXZlcnMvY2hhci9tZW0uY2AgKGBERVZNRU1gKSwgYGRyaXZlcnMvdWlvL3Vpby5jYCAoYFVJT2ApLCBgZHJpdmVycy9wY2kvbW1hcC5jYCAoYFBDSWApLCBgZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jYCAoYEZQR0FfREZMX0FGVWApLCBhbmQgYGRyaXZlcnMvY2R4L2NkeC5jYCAoYENEWF9CVVNgKS4gU2VlbXMgbGlrZSBhIGRlY2VudCBzcHJlYWQuXG5cbk5vdywgd2hlcmUgaXMgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGFjdHVhbGx5IGRlZmluZWQ/IEl0J3Mgc2l0dGluZyBpbiBgbW0vbWVtb3J5LmNgLiBHaXZlbiB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgYWNjZXNzLCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBJIGFsc28gbm90ZWQgdGhhdCBgYXJjaC94ODYvS2NvbmZpZ2AgaGFzIGBIQVZFX0lPUkVNQVBfUFJPVGAgc2VsZWN0ZWQsIHdoaWNoIG1pZ2h0IGJlIHJlbGV2YW50IGxhdGVyIG9uLlxuXG5Ob3csIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSByZXF1aXJlbWVudHMgZm9yIHRoaXMgcGFydGljdWxhciBhbmFseXNpcy4gVGhlIFwiV29ydGhGdXp6aW5nXCIgZmxhZyBpcyBzZXQsIGFuZCB0aGUgXCJFbmFibGVDb25maWdzXCIgbGlzdCBpbmNsdWRlcyBcIkRFVk1FTS5cIiBTZWVtcyBsaWtlIHdlJ3JlIGludGVyZXN0ZWQgaW4gdGhlIGBERVZNRU1gIGNvbmZpZ3VyYXRpb24gYXMgYSBzdGFydGluZyBwb2ludC4gVGhlIFwiRm9jdXNTeW1ib2xzXCIgbGlzdCBoYXMgZmxhZ2dlZCBib3RoIGBnZW5lcmljX2FjY2Vzc19waHlzYCBhbmQgYF9fYWNjZXNzX3JlbW90ZV92bWAsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZXkgaW50ZXJyZWxhdGUuXG5cbk5leHQsIEkgd2FudCB0byBjbGFyaWZ5IGlmIGBfX2FjY2Vzc19yZW1vdGVfdm1gIGlzIHZpc2libGUgaW4gdGhlIHN5bWJvbCB0YWJsZSBvciBpZiBpdCdzIHN0YXRpYy4gTG9va3MgbGlrZSBpdCdzIGRlZmluZWQgaW4gYG1tL21lbW9yeS5jYDogYHN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKC4uLilgIGFuZCBgaW50IGFjY2Vzc19yZW1vdGVfdm0oLi4uKWAuIEFuZCBhbHNvIGBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyguLi4pYC4gU28sIGl0J3MgYSBzdGF0aWMgaW5saW5lLCB3aGljaCBtZWFucyBpdCBsaWtlbHkgaGFzIHNvbWUgc2NvcGUgbGltaXRhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gTGV0J3Mgbm90IGZvcmdldCBhYm91dCB0aGUgcmVsYXRlZCwgdmlzaWJsZSwgYGFjY2Vzc19yZW1vdGVfdm1gLlxuXG5GaW5hbGx5LCBJJ2xsIHRha2UgYSBxdWljayBsb29rIGF0IGxpbmVzIDcyOTAtNzMzMCBpbiBgbW0vbWVtb3J5LmNgIOKAkyB0aGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZXNlIGZ1bmN0aW9ucyByZXNpZGVzLiBHb3QgaXQuIFRoaXMgd2lsbCBiZSBteSBuZXh0IHN0ZXAsIEkgbmVlZCB0byBnbyBvdmVyIHRoZSBsb2dpYyB0byBzZWUgaG93IGl0IHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTkzMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMDozOS44NDI3NjE1NzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg1NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyOTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjcyOTA6XFx0XFxuNzI5MTpcXHRcXHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcXG43MjkyOlxcdH1cXG43MjkzOlxcdFxcbjcyOTQ6XFx0LyoqXFxuNzI5NTpcXHQgKiBhY2Nlc3NfcmVtb3RlX3ZtIC0gYWNjZXNzIGFub3RoZXIgcHJvY2VzcycgYWRkcmVzcyBzcGFjZVxcbjcyOTY6XFx0ICogQG1tOlxcdFxcdHRoZSBtbV9zdHJ1Y3Qgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlXFxuNzI5NzpcXHQgKiBAYWRkcjpcXHRzdGFydCBhZGRyZXNzIHRvIGFjY2Vzc1xcbjcyOTg6XFx0ICogQGJ1ZjpcXHRzb3VyY2Ugb3IgZGVzdGluYXRpb24gYnVmZmVyXFxuNzI5OTpcXHQgKiBAbGVuOlxcdG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlclxcbjczMDA6XFx0ICogQGd1cF9mbGFnczpcXHRmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91clxcbjczMDE6XFx0ICpcXG43MzAyOlxcdCAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS5cXG43MzAzOlxcdCAqXFxuNzMwNDpcXHQgKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24uXFxuNzMwNTpcXHQgKi9cXG43MzA2OlxcdGludCBhY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuNzMwNzpcXHRcXHRcXHR2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuNzMwODpcXHR7XFxuNzMwOTpcXHRcXHRyZXR1cm4gX19hY2Nlc3NfcmVtb3RlX3ZtKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcXG43MzEwOlxcdH1cXG43MzExOlxcdFxcbjczMTI6XFx0LypcXG43MzEzOlxcdCAqIEFjY2VzcyBhbm90aGVyIHByb2Nlc3MnIGFkZHJlc3Mgc3BhY2UuXFxuNzMxNDpcXHQgKiBTb3VyY2UvdGFyZ2V0IGJ1ZmZlciBtdXN0IGJlIGtlcm5lbCBzcGFjZSxcXG43MzE1OlxcdCAqIERvIG5vdCB3YWxrIHRoZSBwYWdlIHRhYmxlIGRpcmVjdGx5LCB1c2UgZ2V0X3VzZXJfcGFnZXNcXG43MzE2OlxcdCAqL1xcbjczMTc6XFx0aW50IGFjY2Vzc19wcm9jZXNzX3ZtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuNzMxODpcXHRcXHRcXHR2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuNzMxOTpcXHR7XFxuNzMyMDpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG43MzIxOlxcdFxcdGludCByZXQ7XFxuNzMyMjpcXHRcXG43MzIzOlxcdFxcdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcXG43MzI0OlxcdFxcdGlmICghbW0pXFxuNzMyNTpcXHRcXHRcXHRyZXR1cm4gMDtcXG43MzI2OlxcdFxcbjczMjc6XFx0XFx0cmV0ID0gX19hY2Nlc3NfcmVtb3RlX3ZtKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcXG43MzI4OlxcdFxcbjczMjk6XFx0XFx0bW1wdXQobW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMDozOS44NDMwNDk5OTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQyNjY2MDUzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEZvY3VzKipcblxuT2theSwgc28gSSd2ZSB6ZXJvZWQgaW4gb24gc29tZSByZWFsbHkgcHJvbWlzaW5nIHN5bWJvbHMgaGVyZTogYGdlbmVyaWNfYWNjZXNzX3BoeXNgLCBgYWNjZXNzX3JlbW90ZV92bWAsIGFuZCBgYWNjZXNzX3Byb2Nlc3Nfdm1gLiBUaG9zZSBmZWVsIGxpa2Uga2V5IGFyZWFzIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSB0aHJlZSBhcmUgbG9ja2VkIGluIGFzIG15IGZvY3VzLlxuXG5CZWZvcmUgSSBwdXNoIHRoaW5ncyBmdXJ0aGVyLCBJIG5lZWQgdG8gZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgb2YgbXkgcmVhc29uaW5nIGFuZCB0aGUgcGFyYW1ldGVycyB0aGF0IEknbSB1c2luZyBiZWZvcmUgY29tbWl0dGluZyB0byB0aGUgbmV4dCBzdGVwLCB3aGljaCB3aWxsIGJlIGNhbGxpbmcgYHNldC1yZXN1bHRzYC5cblxuTGV0J3MgbWFrZSBzdXJlIEknbSBjbGVhciBoZXJlOlxuXG4qICAgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgdHJ1ZWAg4oCTIHRoYXQgZmVlbHMgcmlnaHQgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLlxuKiAgIGBGb2N1c1N5bWJvbHNgIGlzIGNvcnJlY3RseSBwb3B1bGF0ZWQgd2l0aCB0aGUgdGhyZWUgc3ltYm9sczogYGdlbmVyaWNfYWNjZXNzX3BoeXNgLCBgYWNjZXNzX3JlbW90ZV92bWAsIGBhY2Nlc3NfcHJvY2Vzc192bWAuIEV4Y2VsbGVudCFcbiogICBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGNvbnRhaW4gYERFVk1FTWAg4oCTIHllcywgdGhhdCBhbGlnbnMgd2l0aCB0aGUgY3VycmVudCBnb2Fscy5cbiogICBUaGUgYFJlYXNvbmluZ2AgbmVlZHMgdG8gYmUgYSBjb25jaXNlIGFuZCBjbGVhciBleHBsYW5hdGlvbiBvZiB0aGUgdmVyZGljdC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGlzIHRoZSBjYXNlLlxuXG5XaXRoIGFsbCB0aGF0IGluIHBsYWNlLCBJIGZlZWwgY29uZmlkZW50IGFib3V0IGNhbGxpbmcgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzODksIk91dHB1dFRva2VucyI6MTczLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6NDMuMjY5NzEyNTU3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY2Mzk1ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFVk1FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbmVyaWNfYWNjZXNzX3BoeXNcIixcbiAgICBcImFjY2Vzc19yZW1vdGVfdm1cIixcbiAgICBcImFjY2Vzc19wcm9jZXNzX3ZtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbGVuZ3RoIGNhbGN1bGF0aW9uLCBib3VuZHMgY2hlY2tpbmcsIGFuZCBwaHlzaWNhbCBhZGRyZXNzIHR5cGVjYXN0aW5nIGluIGdlbmVyaWNfYWNjZXNzX3BoeXMoKSBhcyB3ZWxsIGFzIHRoZSBsZW5ndGggY2xhbXBpbmcgcGFzc2VkIHRvIHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VhY2Nlc3MoKSBpbiBfX2FjY2Vzc19yZW1vdGVfdm0oKS4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcHRyYWNlIChQVFJBQ0VfUEVFS0RBVEEvUE9LRURBVEEpIGFuZCAvcHJvYy8kcGlkL21lbSBhY2Nlc3NlcyB0byBWTV9JTy9WTV9QRk5NQVAgVk1BcyAoc3VjaCBhcyAvZGV2L21lbSkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgYm91bmRhcnkgYW5kIHBhZ2UtY3Jvc3NpbmcgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5lcmljX2FjY2Vzc19waHlzXCIsXG4gICAgXCJhY2Nlc3NfcmVtb3RlX3ZtXCIsXG4gICAgXCJhY2Nlc3NfcHJvY2Vzc192bVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxlbmd0aCBjYWxjdWxhdGlvbiwgYm91bmRzIGNoZWNraW5nLCBhbmQgcGh5c2ljYWwgYWRkcmVzcyB0eXBlY2FzdGluZyBpbiBnZW5lcmljX2FjY2Vzc19waHlzKCkgYXMgd2VsbCBhcyB0aGUgbGVuZ3RoIGNsYW1waW5nIHBhc3NlZCB0byB2bWEtXFx1MDAzZXZtX29wcy1cXHUwMDNlYWNjZXNzKCkgaW4gX19hY2Nlc3NfcmVtb3RlX3ZtKCkuIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHB0cmFjZSAoUFRSQUNFX1BFRUtEQVRBL1BPS0VEQVRBKSBhbmQgL3Byb2MvJHBpZC9tZW0gYWNjZXNzZXMgdG8gVk1fSU8vVk1fUEZOTUFQIFZNQXMgKHN1Y2ggYXMgL2Rldi9tZW0pLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGJvdW5kYXJ5IGFuZCBwYWdlLWNyb3NzaW5nIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIwOjQzLjM0NjM2MDk3MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4MDYzODYxNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMDo0My4zNDY5MDYzNjJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNjgwNTgzNTk0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGdlbmVyaWNfYWNjZXNzX3BoeXMoKWAgYW5kIGBfX2FjY2Vzc19yZW1vdGVfdm0oKWAgaW4gYG1tL21lbW9yeS5jYCB0byBjbGFtcCBhY2Nlc3MgbGVuZ3RocyB0byBwYWdlIGJvdW5kYXJpZXMgKGBQQUdFX1NJWkUgLSBvZmZzZXRgKSwgbWFwIG9ubHkgYSBzaW5nbGUgcGFnZSB2aWEgYGlvcmVtYXBfcHJvdCgpYCwgY2FzdCBgYXJncy5wZm5gIHRvIGByZXNvdXJjZV9zaXplX3RgIGJlZm9yZSBzaGlmdGluZywgYW5kIHJldHVybiBlYXJseSB3aGVuIGBsZW4gXFx1MDAzYz0gMGAuXFxuXFxuVGhlc2UgY2hhbmdlcyBmaXggYm91bmRhcnkgY2FsY3VsYXRpb25zIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAvIGFyaXRobWV0aWMgdHJ1bmNhdGlvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGluIHRoaXMgY29kZSBwYXRoIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODZmZTM5NjFkYmRhNjFhZTBiMjUyOGM2YWVhYTRiNGQ3NTk2OWMyZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTU6MTk6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA4YjBjMmM3MzVkM2RlLi4wOTM5MGU1MTQzMmYyIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNzE2NCw2ICs3MTY0LDExIEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRib29sIHdyaXRhYmxlO1xuIFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGFkZHIgfTtcbiBcbitcdGlmIChsZW4gXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGxlbiA9IG1pbl90KGludCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXQpO1xuK1xuIHJldHJ5OlxuIFx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTcxNzUsNyArNzE4MCw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpZiAoKHdyaXRlIFx1MDAyNiBGT0xMX1dSSVRFKSBcdTAwMjZcdTAwMjYgIXdyaXRhYmxlKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9BTElHTihsZW4gKyBvZmZzZXQpLCBwcm90KTtcbitcdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9TSVpFLCBwcm90KTtcbiBcdGlmICghbWFkZHIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTcxODMsNyArNzE4OCw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGdvdG8gb3V0X3VubWFwO1xuIFxuIFx0aWYgKChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoYXJncy5wZ3Byb3QpKSB8fFxuLVx0ICAgIChwaHlzX2FkZHIgIT0gKGFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSkgfHxcbitcdCAgICAocGh5c19hZGRyICE9ICgocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSkgfHxcbiBcdCAgICAod3JpdGFibGUgIT0gYXJncy53cml0YWJsZSkpIHtcbiBcdFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG4gXHRcdGlvdW5tYXAobWFkZHIpO1xuQEAgLTcyNTQsNyArNzI1OSw4IEBAIHN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuIFx0XHRcdGlmICh2bWEtXHUwMDNldm1fb3BzIFx1MDAyNlx1MDAyNiB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2VzcylcbiBcdFx0XHRcdGJ5dGVzID0gdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VhY2Nlc3Modm1hLCBhZGRyLCBidWYsXG4tXHRcdFx0XHRcdFx0XHQgICAgbGVuLCB3cml0ZSk7XG4rXHRcdFx0XHRcdFx0XHQgICAgbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKGFkZHIpKSxcbitcdFx0XHRcdFx0XHRcdCAgICB3cml0ZSk7XG4gI2VuZGlmXG4gXHRcdFx0aWYgKGJ5dGVzIFx1MDAzYz0gMClcbiBcdFx0XHRcdGJyZWFrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6NDMuMzQ2OTA3MzUyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNDQzNjI3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IFN1YnN5c3RlbSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBpcyBmb2N1c2luZyBvbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYXJlYSwgc3BlY2lmaWNhbGx5IGBtbS9tZW1vcnkuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoYXQgZmlsZSB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGNoYW5nZWQgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhlIGFyZWEgdGhhdCBpbnRlcmVzdHMgbWUgdGhlIG1vc3QgaXMgZ29pbmcgdG8gYmUgY2VudGVyZWQgYXJvdW5kIGBnZW5lcmljX2FjY2Vzc19waHlzYCBhbmQgYF9fYWNjZXNzX3JlbW90ZV92bWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY29yZSB0byBob3cgd2UgaGFuZGxlIHBoeXNpY2FsIG1lbW9yeSBhY2Nlc3MsIGFuZCBJIHN1c3BlY3QgdGhlIGNoYW5nZXMgd2lsbCBiZSBhcm91bmQgdGhvc2UgZnVuY3Rpb25zLCBvciByZWxhdGVkIG9uZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbW9kaWZpY2F0aW9uIGFmZmVjdHMgdGhvc2UgZnVuY3Rpb25zLCBhbmQgd2hhdCBpbXBhY3QgdGhhdCBoYXMgb24gdGhlIG92ZXJhbGwgc3lzdGVtLiBJJ2xsIHJlYWQgYXJvdW5kIHRob3NlIGZ1bmN0aW9ucyBpbiBgbW0vbWVtb3J5LmNgIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgYW5kIGNvbnRleHQgb2YgdGhlIGNoYW5nZXMuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGxvdy1sZXZlbCBhY2Nlc3MgbWVjaGFuaXNtcyBhcmUgYmVpbmcgYWx0ZXJlZCBhbmQgd2h5LCBlc3BlY2lhbGx5IGhvdyB0aGlzIGFmZmVjdHMgcmVtb3RlIGFjY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6NDkuMzkxMjczMTU1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMDg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MTU1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzE1NTpcXHQgKi9cXG43MTU2OlxcdGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuNzE1NzpcXHRcXHRcXHRcXHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSlcXG43MTU4OlxcdHtcXG43MTU5OlxcdFxcdHJlc291cmNlX3NpemVfdCBwaHlzX2FkZHI7XFxuNzE2MDpcXHRcXHRwZ3Byb3RfdCBwcm90ID0gX19wZ3Byb3QoMCk7XFxuNzE2MTpcXHRcXHR2b2lkIF9faW9tZW0gKm1hZGRyO1xcbjcxNjI6XFx0XFx0aW50IG9mZnNldCA9IG9mZnNldF9pbl9wYWdlKGFkZHIpO1xcbjcxNjM6XFx0XFx0aW50IHJldCA9IC1FSU5WQUw7XFxuNzE2NDpcXHRcXHRib29sIHdyaXRhYmxlO1xcbjcxNjU6XFx0XFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGFkZHIgfTtcXG43MTY2OlxcdFxcbjcxNjc6XFx0XFx0aWYgKGxlbiBcXHUwMDNjPSAwKVxcbjcxNjg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNzE2OTpcXHRcXG43MTcwOlxcdFxcdGxlbiA9IG1pbl90KGludCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXQpO1xcbjcxNzE6XFx0XFxuNzE3MjpcXHRyZXRyeTpcXG43MTczOlxcdFxcdGlmIChmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKSlcXG43MTc0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjcxNzU6XFx0XFx0cHJvdCA9IGFyZ3MucGdwcm90O1xcbjcxNzY6XFx0XFx0cGh5c19hZGRyID0gKHJlc291cmNlX3NpemVfdClhcmdzLnBmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbjcxNzc6XFx0XFx0d3JpdGFibGUgPSBhcmdzLndyaXRhYmxlO1xcbjcxNzg6XFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbjcxNzk6XFx0XFxuNzE4MDpcXHRcXHRpZiAoKHdyaXRlIFxcdTAwMjYgRk9MTF9XUklURSkgXFx1MDAyNlxcdTAwMjYgIXdyaXRhYmxlKVxcbjcxODE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzE4MjpcXHRcXG43MTgzOlxcdFxcdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9TSVpFLCBwcm90KTtcXG43MTg0OlxcdFxcdGlmICghbWFkZHIpXFxuNzE4NTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG43MTg2OlxcdFxcbjcxODc6XFx0XFx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpKVxcbjcxODg6XFx0XFx0XFx0Z290byBvdXRfdW5tYXA7XFxuNzE4OTpcXHRcXG43MTkwOlxcdFxcdGlmICgocGdwcm90X3ZhbChwcm90KSAhPSBwZ3Byb3RfdmFsKGFyZ3MucGdwcm90KSkgfHxcXG43MTkxOlxcdFxcdCAgICAocGh5c19hZGRyICE9ICgocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKSB8fFxcbjcxOTI6XFx0XFx0ICAgICh3cml0YWJsZSAhPSBhcmdzLndyaXRhYmxlKSkge1xcbjcxOTM6XFx0XFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbjcxOTQ6XFx0XFx0XFx0aW91bm1hcChtYWRkcik7XFxuNzE5NTpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjcxOTY6XFx0XFx0fVxcbjcxOTc6XFx0XFxuNzE5ODpcXHRcXHRpZiAod3JpdGUpXFxuNzE5OTpcXHRcXHRcXHRtZW1jcHlfdG9pbyhtYWRkciArIG9mZnNldCwgYnVmLCBsZW4pO1xcbjcyMDA6XFx0XFx0ZWxzZVxcbjcyMDE6XFx0XFx0XFx0bWVtY3B5X2Zyb21pbyhidWYsIG1hZGRyICsgb2Zmc2V0LCBsZW4pO1xcbjcyMDI6XFx0XFx0cmV0ID0gbGVuO1xcbjcyMDM6XFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbjcyMDQ6XFx0b3V0X3VubWFwOlxcbjcyMDU6XFx0XFx0aW91bm1hcChtYWRkcik7XFxuNzIwNjpcXHRcXG43MjA3OlxcdFxcdHJldHVybiByZXQ7XFxuNzIwODpcXHR9XFxuNzIwOTpcXHRFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2FjY2Vzc19waHlzKTtcXG43MjEwOlxcdCNlbmRpZlxcbjcyMTE6XFx0XFxuNzIxMjpcXHQvKlxcbjcyMTM6XFx0ICogQWNjZXNzIGFub3RoZXIgcHJvY2VzcycgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cXG43MjE0OlxcdCAqL1xcbjcyMTU6XFx0c3RhdGljIGludCBfX2FjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG43MjE2OlxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcXG43MjE3OlxcdHtcXG43MjE4OlxcdFxcdHZvaWQgKm9sZF9idWYgPSBidWY7XFxuNzIxOTpcXHRcXHRpbnQgd3JpdGUgPSBndXBfZmxhZ3MgXFx1MDAyNiBGT0xMX1dSSVRFO1xcbjcyMjA6XFx0XFxuNzIyMTpcXHRcXHRpZiAobW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobW0pKVxcbjcyMjI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNzIyMzpcXHRcXG43MjI0OlxcdFxcdC8qIFVudGFnIHRoZSBhZGRyZXNzIGJlZm9yZSBsb29raW5nIHVwIHRoZSBWTUEgKi9cXG43MjI1OlxcdFxcdGFkZHIgPSB1bnRhZ2dlZF9hZGRyX3JlbW90ZShtbSwgYWRkcik7XFxuNzIyNjpcXHRcXG43MjI3OlxcdFxcdC8qIEF2b2lkIHRyaWdnZXJpbmcgdGhlIHRlbXBvcmFyeSB3YXJuaW5nIGluIF9fZ2V0X3VzZXJfcGFnZXMgKi9cXG43MjI4OlxcdFxcdGlmICghdm1hX2xvb2t1cChtbSwgYWRkcikgXFx1MDAyNlxcdTAwMjYgIWV4cGFuZF9zdGFjayhtbSwgYWRkcikpXFxuNzIyOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG43MjMwOlxcdFxcbjcyMzE6XFx0XFx0LyogaWdub3JlIGVycm9ycywganVzdCBjaGVjayBob3cgbXVjaCB3YXMgc3VjY2Vzc2Z1bGx5IHRyYW5zZmVycmVkICovXFxuNzIzMjpcXHRcXHR3aGlsZSAobGVuKSB7XFxuNzIzMzpcXHRcXHRcXHRpbnQgYnl0ZXMsIG9mZnNldDtcXG43MjM0OlxcdFxcdFxcdHZvaWQgKm1hZGRyO1xcbjcyMzU6XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG43MjM2OlxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gTlVMTDtcXG43MjM3OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gZ2V0X3VzZXJfcGFnZV92bWFfcmVtb3RlKG1tLCBhZGRyLFxcbjcyMzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBndXBfZmxhZ3MsIFxcdTAwMjZ2bWEpO1xcbjcyMzk6XFx0XFxuNzI0MDpcXHRcXHRcXHRpZiAoSVNfRVJSKHBhZ2UpKSB7XFxuNzI0MTpcXHRcXHRcXHRcXHQvKiBXZSBtaWdodCBuZWVkIHRvIGV4cGFuZCB0aGUgc3RhY2sgdG8gYWNjZXNzIGl0ICovXFxuNzI0MjpcXHRcXHRcXHRcXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyKTtcXG43MjQzOlxcdFxcdFxcdFxcdGlmICghdm1hKSB7XFxuNzI0NDpcXHRcXHRcXHRcXHRcXHR2bWEgPSBleHBhbmRfc3RhY2sobW0sIGFkZHIpO1xcbjcyNDU6XFx0XFxuNzI0NjpcXHRcXHRcXHRcXHRcXHQvKiBtbWFwX2xvY2sgd2FzIGRyb3BwZWQgb24gZmFpbHVyZSAqL1xcbjcyNDc6XFx0XFx0XFx0XFx0XFx0aWYgKCF2bWEpXFxuNzI0ODpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcXG43MjQ5OlxcdFxcbjcyNTA6XFx0XFx0XFx0XFx0XFx0LyogVHJ5IGFnYWluIGlmIHN0YWNrIGV4cGFuc2lvbiB3b3JrZWQgKi9cXG43MjUxOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjcyNTI6XFx0XFx0XFx0XFx0fVxcbjcyNTM6XFx0XFxuNzI1NDpcXHRcXHRcXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMDo0OS4zOTE3MDY4MDVaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE3MDc5MjI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gYF9fYWNjZXNzX3JlbW90ZV92bWAqKlxuXG5BbHJpZ2h0LCBJJ20gYXQgdGhlIHBvaW50IHdoZXJlIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGBfX2FjY2Vzc19yZW1vdGVfdm1gLiBJJ3ZlIHByb2JhYmx5IGdvdCBzb21lIGNvbnRleHQgYWxyZWFkeSDigJMgbWF5YmUgSSdtIGxvb2tpbmcgYXQgYW4gZXJyb3IgdHJhY2ViYWNrLCBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIG9yIEknbSBzaW1wbHkgdHJ5aW5nIHRvIGFyY2hpdGVjdCBhIG5ldyBzb2x1dGlvbiBhcm91bmQgdGhpcyBmdW5jdGlvbi4gUmVnYXJkbGVzcywgdGhlIGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBncmFzcCAqYWxsKiBvZiBpdC4gSSB3YW50IHRvIHNlZSBob3cgaXQgaW50ZWdyYXRlcyB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIFRoaXMgY291bGQgYmUgYSBjb21wbGV4IGNhbGwgc3RhY2ssIGEgZGlzdHJpYnV0ZWQgc3lzdGVtIGNvbXBvbmVudCwgb3IgbWF5YmUganVzdCBhIHNwZWNpZmljIHBpZWNlIG9mIGEgbGFyZ2VyIGNvZGUgcGF0aCwgSSBuZWVkIHRvIHpvb20gb3V0IGEgYml0IGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gbGl2ZXMgd2l0aGluIHRoZSBvdmVyYWxsIGRlc2lnbi4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gY2hlY2sgdGhlIHBhcmFtZXRlcnMgaXQgYWNjZXB0cywgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW5kLCBjcml0aWNhbGx5LCBob3cgaXQgaGFuZGxlcyBlcnJvcnMuIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgcmVzb3VyY2UgbGVha3MsIG9yIGFueXRoaW5nIHRoYXQgY291bGQgY2F1c2Ugc2NhbGFiaWxpdHkgaXNzdWVzLiBTbywgbGV0J3MgZ2V0IHRoYXQgZnVsbCB2aWV3IGFuZCBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI0NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6NTEuNTYyNTAxMTc4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5ODQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MjUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MjUwOlxcdFxcdFxcdFxcdFxcdC8qIFRyeSBhZ2FpbiBpZiBzdGFjayBleHBhbnNpb24gd29ya2VkICovXFxuNzI1MTpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43MjUyOlxcdFxcdFxcdFxcdH1cXG43MjUzOlxcdFxcbjcyNTQ6XFx0XFx0XFx0XFx0LypcXG43MjU1OlxcdFxcdFxcdFxcdCAqIENoZWNrIGlmIHRoaXMgaXMgYSBWTV9JTyB8IFZNX1BGTk1BUCBWTUEsIHdoaWNoXFxuNzI1NjpcXHRcXHRcXHRcXHQgKiB3ZSBjYW4gYWNjZXNzIHVzaW5nIHNsaWdodGx5IGRpZmZlcmVudCBjb2RlLlxcbjcyNTc6XFx0XFx0XFx0XFx0ICovXFxuNzI1ODpcXHRcXHRcXHRcXHRieXRlcyA9IDA7XFxuNzI1OTpcXHQjaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxuNzI2MDpcXHRcXHRcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9vcHMgXFx1MDAyNlxcdTAwMjYgdm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZWFjY2VzcylcXG43MjYxOlxcdFxcdFxcdFxcdFxcdGJ5dGVzID0gdm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZWFjY2Vzcyh2bWEsIGFkZHIsIGJ1ZixcXG43MjYyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBtaW5fdChpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2UoYWRkcikpLFxcbjcyNjM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHdyaXRlKTtcXG43MjY0OlxcdCNlbmRpZlxcbjcyNjU6XFx0XFx0XFx0XFx0aWYgKGJ5dGVzIFxcdTAwM2M9IDApXFxuNzI2NjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG43MjY3OlxcdFxcdFxcdH0gZWxzZSB7XFxuNzI2ODpcXHRcXHRcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuNzI2OTpcXHRcXHRcXHRcXHRieXRlcyA9IGxlbjtcXG43MjcwOlxcdFxcdFxcdFxcdG9mZnNldCA9IGFkZHIgXFx1MDAyNiAoUEFHRV9TSVpFLTEpO1xcbjcyNzE6XFx0XFx0XFx0XFx0aWYgKGJ5dGVzIFxcdTAwM2UgUEFHRV9TSVpFLW9mZnNldClcXG43MjcyOlxcdFxcdFxcdFxcdFxcdGJ5dGVzID0gUEFHRV9TSVpFLW9mZnNldDtcXG43MjczOlxcdFxcbjcyNzQ6XFx0XFx0XFx0XFx0bWFkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBmb2xpb19wYWdlX2lkeChmb2xpbywgcGFnZSkgKiBQQUdFX1NJWkUpO1xcbjcyNzU6XFx0XFx0XFx0XFx0aWYgKHdyaXRlKSB7XFxuNzI3NjpcXHRcXHRcXHRcXHRcXHRjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXFxuNzI3NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIG1hZGRyICsgb2Zmc2V0LCBidWYsIGJ5dGVzKTtcXG43Mjc4OlxcdFxcdFxcdFxcdFxcdGZvbGlvX21hcmtfZGlydHlfbG9jayhmb2xpbyk7XFxuNzI3OTpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjcyODA6XFx0XFx0XFx0XFx0XFx0Y29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXFxuNzI4MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgYnVmLCBtYWRkciArIG9mZnNldCwgYnl0ZXMpO1xcbjcyODI6XFx0XFx0XFx0XFx0fVxcbjcyODM6XFx0XFx0XFx0XFx0Zm9saW9fcmVsZWFzZV9rbWFwKGZvbGlvLCBtYWRkcik7XFxuNzI4NDpcXHRcXHRcXHR9XFxuNzI4NTpcXHRcXHRcXHRsZW4gLT0gYnl0ZXM7XFxuNzI4NjpcXHRcXHRcXHRidWYgKz0gYnl0ZXM7XFxuNzI4NzpcXHRcXHRcXHRhZGRyICs9IGJ5dGVzO1xcbjcyODg6XFx0XFx0fVxcbjcyODk6XFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuNzI5MDpcXHRcXG43MjkxOlxcdFxcdHJldHVybiBidWYgLSBvbGRfYnVmO1xcbjcyOTI6XFx0fVxcbjcyOTM6XFx0XFxuNzI5NDpcXHQvKipcXG43Mjk1OlxcdCAqIGFjY2Vzc19yZW1vdGVfdm0gLSBhY2Nlc3MgYW5vdGhlciBwcm9jZXNzJyBhZGRyZXNzIHNwYWNlXFxuNzI5NjpcXHQgKiBAbW06XFx0XFx0dGhlIG1tX3N0cnVjdCBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2VcXG43Mjk3OlxcdCAqIEBhZGRyOlxcdHN0YXJ0IGFkZHJlc3MgdG8gYWNjZXNzXFxuNzI5ODpcXHQgKiBAYnVmOlxcdHNvdXJjZSBvciBkZXN0aW5hdGlvbiBidWZmZXJcXG43Mjk5OlxcdCAqIEBsZW46XFx0bnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIwOjUxLjU2MjkwMjYyOVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTk1OTgyOTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGh5c2ljYWwgTWVtb3J5IEFjY2VzcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgaW4gYG1tL21lbW9yeS5jYC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byByZWFsbHkgZXhhbWluZSB0aGUgY2hhbmdlcyBjYXJlZnVsbHkuIEkgc2VlIGEgY291cGxlIG9mIGtleSBhZGp1c3RtZW50cy4gRmlyc3QsIHRoZXJlIGFyZSBhZGRlZCBjaGVja3MgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoIGBsZW5gIGlzIHplcm8gb3IgbmVnYXRpdmUuIFRoYXQncyBhIHNlbnNpYmxlIGFkZGl0aW9uLCBndWFyZGluZyBhZ2FpbnN0IHBvdGVudGlhbCBpc3N1ZXMgbGF0ZXIuIFdlIGFyZSBhbHNvIGV4cGxpY2l0bHkgbGltaXRpbmcgdGhlIGxlbmd0aCB0byB0aGUgcGFnZSBzaXplIG5vdywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHRoZSB1bmRlcmx5aW5nIHJlbWFwcGluZyBvcGVyYXRpb25zIHdlIGFyZSB1c2luZy4gSXQgYXBwZWFycyB0aGUgcHJpb3IgY2FsY3VsYXRpb24gd2FzIGZsYXdlZCBhbmQgY291bGQgcmVxdWVzdCBtb3JlIG1lbW9yeSB0aGFuIG5lY2Vzc2FyeSwgcGVyaGFwcyBsZWFkaW5nIHRvIHVuaW50ZW5kZWQgYmVoYXZpb3Igd2l0aCB0aGUgYGlvcmVtYXBgIGNhbGwuXG5cblRoZSBgaW9yZW1hcF9wcm90YCBjYWxsIGlzIG5vdyByZXF1ZXN0aW5nIG9ubHkgYFBBR0VfU0laRWAsIHdoaWNoIGFsaWducyB3aXRoIHRoZSBtb2RpZmllZCBsZW5ndGggY2FsY3VsYXRpb25zLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciBhc3N1bXB0aW9ucyB0aGF0IHdlcmUgcHJldmlvdXNseSBoYW5kbGVkIGltcGxpY2l0bHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGJyZWFrIGFueSB2YWxpZCB1c2UgY2FzZXMuIEkgd2lsbCByZXZpZXcgdGhlIHByZXZpb3VzIHZlcnNpb24sIHRvIGVuc3VyZSB0aGUgbmV3IGBtaW5fdGAgY2FsY3VsYXRpb25zIGRvbid0IGhhdmUgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgYW5kIHRoYXQgd2UgYXJlIHN0aWxsIGFjY2Vzc2luZyB0aGUgYXBwcm9wcmlhdGUgbWVtb3J5IHJlZ2lvbi5cblxuVGhlcmUgYXJlIGFsc28gY2hhbmdlcyB0byB0aGUgY29uZGl0aW9uYWxzIGxhdGVyIG9uIGluIHRoZSBjb2RlLCB3aGljaCBsb29rIGxpa2UgdGhleSBhcmUgdG8gYXZvaWQgZXh0cmEgd29yayBpZiB0aGUgcGFyYW1ldGVycyBkbyBub3QgYWxpZ24gd2l0aCB0aGUgcmVtYXBwZWQgbWVtb3J5LlxuXG5UbyBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIHBhdGNoLCBJJ2xsIG5lZWQgdG8gZ28gYmV5b25kIGp1c3QgdGhlIGNvZGUgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvbW1pdHMuIEkgd2lsbCBzZWFyY2ggZm9yIGNvbW1pdHMgcmVsYXRlZCB0byBgZ2VuZXJpY19hY2Nlc3NfcGh5c2Agb3IgcmVsYXRlZCBmdW5jdGlvbnMgdG8gZ3Jhc3AgdGhlIGJyb2FkZXIgY29udGV4dCwgdGhlIHJlcG9ydGVkIHByb2JsZW0sIGFuZCBhbnkgZGlzY3Vzc2lvbnMgdGhhdCBtaWdodCBoYXZlIGxlZCB0byB0aGlzIGNoYW5nZS4gUGVyaGFwcyBhIGJ1ZyByZXBvcnQgb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMgZHJvdmUgdGhpcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBwcm9tcHRlZCB0aGVzZSBtb2RpZmljYXRpb25zIGFuZCB3aGF0IHByb2JsZW1zIGl0J3MgdHJ5aW5nIHRvIHNvbHZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mjc3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjA6NTYuMTU4ODg5NjA4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTI1ODcyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5lcmljX2FjY2Vzc19waHlzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnkuYz03MTQxPUVYUE9SVF9TWU1CT0xfR1BMKGZvbGxvd19wZm5tYXBfZW5kKTtcXG4tLVxcbm1tL21lbW9yeS5jLTcxNDQtLyoqXFxubW0vbWVtb3J5LmM6NzE0NTogKiBnZW5lcmljX2FjY2Vzc19waHlzIC0gZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgaW9tZW0gbW1hcCBhY2Nlc3NcXG5tbS9tZW1vcnkuYy03MTQ2LSAqIEB2bWE6IHRoZSB2bWEgdG8gYWNjZXNzXFxuLS1cXG5tbS9tZW1vcnkuYy03MTU1LSAqL1xcbm1tL21lbW9yeS5jOjcxNTY6aW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9tZW1vcnkuYy03MTU3LVxcdFxcdFxcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKVxcbi0tXFxubW0vbWVtb3J5LmMtNzIwOC19XFxubW0vbWVtb3J5LmM6NzIwOTpFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2FjY2Vzc19waHlzKTtcXG5tbS9tZW1vcnkuYy03MjEwLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMDo1Ni4yMDgxNTI5OTVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODU0NTYyNTI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50IG9mIGBnZW5lcmljX2FjY2Vzc19waHlzYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AsIHNwZWNpZmljYWxseSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHZtX29wcy1cdTAwM2VhY2Nlc3NgIGZvciBQRk5NQVAvSU8gbWVtb3J5IFZNQXMuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgdGlnaHRlbmluZyB1cCBob3cgd2UgaGFuZGxlIGxlbmd0aCBjYWxjdWxhdGlvbnMgYW5kIHBoeXNpY2FsIGFkZHJlc3MgbWFwcGluZyB0byBwcmV2ZW50IHBvdGVudGlhbCBpc3N1ZXMsIGVzcGVjaWFsbHkgb24gMzItYml0IGFyY2hpdGVjdHVyZXMgd2l0aCA2NC1iaXQgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gaGFkIGEgZmV3IGdvdGNoYXM6IGFuIGludGVnZXIgdHJ1bmNhdGlvbiBvciBvdmVyZmxvdyByaXNrIHdoZW4gY29tcGFyaW5nIHBoeXNpY2FsIGFkZHJlc3NlcywgYW5kIGxlbmd0aCBpc3N1ZXMgd2hlcmUgYGxlbmAgd2Fzbid0IGJlaW5nIGNvcnJlY3RseSBib3VuZGVkIHRvIGEgc2luZ2xlIHBhZ2UsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaW5jb25zaXN0ZW5jaWVzIGluIHRoZSBpb3JlbWFwJ2QgcmVnaW9uLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoZXNlIGJ5IGNsYW1waW5nIGBsZW5gLCBmaXhpbmcgdGhlIGlvcmVtYXAgc2l6ZSwgYW5kIHByb3Blcmx5IGNhc3RpbmcgcGZuIGJlZm9yZSBzaGlmdGluZyBpdC4gSXQgYWxzbyByZWZhY3RvcnMgdGhlIGxlbmd0aCBwYXNzZWQgdG8gYHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlYWNjZXNzYCBpbiBgX19hY2Nlc3NfcmVtb3RlX3ZtYC5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayB0aGF0IHJlcXVpcmVzIEtNU0FOPyBJIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0IGNhcmVmdWxseS4gV2UgYWxyZWFkeSBoYXZlIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gIEtNU0FOIGlzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcywgc28gaXQncyBub3QgbmVlZGVkIGlmIEtBU0FOIGNhbiBjYXRjaCB0aGUgYnVnLlxuXG5MZXQncyBicmVhayBpdCBkb3duOlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/KiogTm8uIGBnZW5lcmljX2FjY2Vzc19waHlzYCBpcyBjb3B5aW5nIGRhdGEgYmV0d2VlbiB1c2VyL3JlbW90ZSBidWZmZXIgYGJ1ZmAgYW5kIGlvbWVtIHVzaW5nIGBtZW1jcHlfdG9pb2AgLyBgbWVtY3B5X2Zyb21pb2AsIHdoaWNoIHdvdWxkIHVzZSB0aGUgY2FsbGVyIHN1cHBsaWVkIGRhdGEuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogSSd2ZSB0cmFjZWQgdGhlIHZhcmlhYmxlcyBpbiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AsIGFuZCBhbGwgb2YgdGhlbSBhcmUgaW5pdGlhbGl6ZWQuIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCBpbml0aWFsaXplcyB0aGUgZm9sbG93X3Bmbm1hcF9hcmdzIHN0cnVjdCwgYW5kIHdlIHJlY2hlY2sgdGhvc2UgdmFyaWFibGVzLiBObyBpc3N1ZXMgaGVyZS5cbjMuICAqKkFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXM/KiogTm90IGluIHRoaXMgcGF0Y2guXG40LiAgKipCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGVuYWJsZXMgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/KiogQWgsIHRoaXMgaXMgd2hlcmUgdGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQuIFRoZSBwYXRjaCByZXN0cmljdHMgYGxlbmAgaW4gYGdlbmVyaWNfYWNjZXNzX3BoeXNgLCB0byBgUEFHRV9TSVpFIC0gb2Zmc2V0YCB3aGljaCBzaG91bGQgcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIGV4aXN0aW5nIGlzc3VlIHdhcyB0aGF0ICBgX19hY2Nlc3NfcmVtb3RlX3ZtYCBtaWdodCBoYXZlIGJlZW4gcGFzc2luZyBhIGxhcmdlIGBsZW5gIHRvIHRoZSBmdW5jdGlvbiB3aGljaCBhY2Nlc3NlZCBtZW1vcnkgYmV5b25kIHBhZ2UgYm91bmRhcmllcy4gVGhlc2UgYm91bmRhcnkgYW5kIG91dC1vZi1ib3VuZHMgY2hlY2tzLCBob3dldmVyLCBhcmUgc3F1YXJlbHkgaW4gS0FTQU4ncyBkb21haW4gKE9PQiBhY2Nlc3MgYnVncyksIG5vdCBLTVNBTi5cblxuU28sIGlzIHRoZXJlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mby1sZWFrIGNyZWF0ZWQ/IE5vLiBgYnVmYCBpcyBwcm92aWRlZCBieSB0aGUgY2FsbGVyLiBgbWVtY3B5X2Zyb21pb2AgcmVhZHMgZnJvbSB0aGUgSS9PIG1lbW9yeSBhbmQgd3JpdGVzIHRvIHRoZSBzdXBwbGllZCBidWZmZXIsIGFuZCBgbWVtY3B5X3RvaW9gIGlzIHRoZSBvcHBvc2l0ZS4gVGhlIHNpemUgb2YgdGhlIHJlYWQgb3Igd3JpdGUgaXMgbm93IGNvcnJlY3RseSBib3VuZGVkIGJ5IHRoZSBwYXRjaC5cblxuSSdtIGNvbmZpZGVudC4gVGhpcyBwYXRjaCBpcyBhYm91dCBib3VuZHMgY2hlY2tpbmcsIHdoaWNoIGZhbGxzIHVuZGVyIEtBU0FOLCBub3QgS01TQU4uIFRoZSBsb2dpYyBpcyBkZXNpZ25lZCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgdXNlcyBvZiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2Agb3IgYGZvbGxvd19wZm5tYXBfYXJnc2AgdG8gZW5zdXJlIG5vIG90aGVyIGFyZWEgaXMgYWZmZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MTUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIxOjA0Ljc1Mzc4MTQ3OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMTU5MjMwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5lcmljX2FjY2Vzc19waHlzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY2R4L2NkeC5jPTY2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGNkeF9waHlzX3ZtX29wcyA9IHtcXG5kcml2ZXJzL2NkeC9jZHguYy02NjMtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvY2R4L2NkeC5jOjY2NDpcXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcXG5kcml2ZXJzL2NkeC9jZHguYy02NjUtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL2NoYXIvbWVtLmM9MzE5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF9tZW1fb3BzID0ge1xcbmRyaXZlcnMvY2hhci9tZW0uYy0zMjAtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvY2hhci9tZW0uYzozMjE6XFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXNcXG5kcml2ZXJzL2NoYXIvbWVtLmMtMzIyLSNlbmRpZlxcbi0tXFxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jPTgwNT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFmdV92bWFfb3BzID0ge1xcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYy04MDYtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYzo4MDc6XFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXFxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jLTgwOC0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvcGNpL21tYXAuYz0xOD1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBjaV9waHlzX3ZtX29wcyA9IHtcXG5kcml2ZXJzL3BjaS9tbWFwLmMtMTktI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvcGNpL21tYXAuYzoyMDpcXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcXG5kcml2ZXJzL3BjaS9tbWFwLmMtMjEtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL3Vpby91aW8uYz03MzY9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB1aW9fcGh5c2ljYWxfdm1fb3BzID0ge1xcbmRyaXZlcnMvdWlvL3Vpby5jLTczNy0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxuZHJpdmVycy91aW8vdWlvLmM6NzM4OlxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxcbmRyaXZlcnMvdWlvL3Vpby5jLTczOS0jZW5kaWZcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD04MDY9c3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC04NTgtXFx0LyogY2FsbGVkIGJ5IGFjY2Vzc19wcm9jZXNzX3ZtIHdoZW4gZ2V0X3VzZXJfcGFnZXMoKSBmYWlscywgdHlwaWNhbGx5XFxuaW5jbHVkZS9saW51eC9tbS5oOjg1OTpcXHQgKiBmb3IgdXNlIGJ5IHNwZWNpYWwgVk1Bcy4gU2VlIGFsc28gZ2VuZXJpY19hY2Nlc3NfcGh5cygpIGZvciBhIGdlbmVyaWNcXG5pbmNsdWRlL2xpbnV4L21tLmgtODYwLVxcdCAqIGltcGxlbWVudGF0aW9uIHVzZWZ1bCBmb3IgYW55IGlvbWVtIG1hcHBpbmcuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MzIzND1jb3B5X3BhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEpO1xcbmluY2x1ZGUvbGludXgvbW0uaDozMjM1OmludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuaW5jbHVkZS9saW51eC9tbS5oLTMyMzYtXFx0XFx0XFx0dm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpO1xcbi0tXFxubW0vbWVtb3J5LmM9NzE0MT1FWFBPUlRfU1lNQk9MX0dQTChmb2xsb3dfcGZubWFwX2VuZCk7XFxuLS1cXG5tbS9tZW1vcnkuYy03MTQ0LS8qKlxcbm1tL21lbW9yeS5jOjcxNDU6ICogZ2VuZXJpY19hY2Nlc3NfcGh5cyAtIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIGlvbWVtIG1tYXAgYWNjZXNzXFxubW0vbWVtb3J5LmMtNzE0Ni0gKiBAdm1hOiB0aGUgdm1hIHRvIGFjY2Vzc1xcbi0tXFxubW0vbWVtb3J5LmMtNzE1NS0gKi9cXG5tbS9tZW1vcnkuYzo3MTU2OmludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vbWVtb3J5LmMtNzE1Ny1cXHRcXHRcXHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSlcXG4tLVxcbm1tL21lbW9yeS5jLTcyMDgtfVxcbm1tL21lbW9yeS5jOjcyMDk6RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19hY2Nlc3NfcGh5cyk7XFxubW0vbWVtb3J5LmMtNzIxMC0jZW5kaWZcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg9NjQwPXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB7XFxuLS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTY5Mi1cXHQvKiBjYWxsZWQgYnkgYWNjZXNzX3Byb2Nlc3Nfdm0gd2hlbiBnZXRfdXNlcl9wYWdlcygpIGZhaWxzLCB0eXBpY2FsbHlcXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oOjY5MzpcXHQgKiBmb3IgdXNlIGJ5IHNwZWNpYWwgVk1Bcy4gU2VlIGFsc28gZ2VuZXJpY19hY2Nlc3NfcGh5cygpIGZvciBhIGdlbmVyaWNcXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTY5NC1cXHQgKiBpbXBsZW1lbnRhdGlvbiB1c2VmdWwgZm9yIGFueSBpb21lbSBtYXBwaW5nLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMTowNi4zNTUzODE3NzFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc5NzMzODY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSZWNlbnQgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHRoZSBtb2RpZmljYXRpb25zIEkndmUganVzdCByZXZpZXdlZCBhcmUgbGFzZXItZm9jdXNlZCBvbiBoYXJkZW5pbmcgdGhlIGNvZGUgYWdhaW5zdCBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY2Vzcy4gU3BlY2lmaWNhbGx5LCB3ZSdyZSB0YWxraW5nIGFib3V0IGFkZHJlc3NpbmcgdnVsbmVyYWJpbGl0aWVzIHRoYXQgY291bGQgYXJpc2UgZnJvbSBpbmNvcnJlY3QgbGVuZ3RoIG9yIGJvdW5kcyBjaGVja3MuIFRoaXMgc2VlbXMgcGFydGljdWxhcmx5IHJlbGV2YW50IHdpdGhpbiB0aGUgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGFuZCBgX19hY2Nlc3NfcmVtb3RlX3ZtYCBmdW5jdGlvbnMsIHdoaWNoLCBhcyBJIHJlY2FsbCwgYXJlIGludm9sdmVkIGluIHNpbmdsZS1wYWdlIG1hcHBpbmcgb3BlcmF0aW9ucy4gVGhlIHNoaWZ0IHRvIGNhc3RpbmcgYGFyZ3MucGZuYCB0byBgcmVzb3VyY2Vfc2l6ZV90YCBiZWZvcmUgYml0LXNoaWZ0aW5nIGlzIGEgc21hcnQgbW92ZSDigJMgaXQgZWxlZ2FudGx5IHNpZGVzdGVwcyB0aGUgcG90ZW50aWFsIGZvciBhIDMyLWJpdCBvdmVyZmxvdyBzY2VuYXJpbywgd2hpY2ggY291bGQgaGF2ZSBhbGxvd2VkIGZvciBzb21lIHZlcnkgbmFzdHkgYW5kIGRpZmZpY3VsdC10by1kZXRlY3QgbWVtb3J5IGNvcnJ1cHRpb24uXG5cblRoZSBnb29kIG5ld3MgaXMgdGhhdCB0aGVzZSBjaGFuZ2VzLCB3aGlsZSBjcnVjaWFsIGZvciBzZWN1cml0eSwgc2VlbSB0byBiZSBidWlsZGluZyB1cG9uIGEgZm91bmRhdGlvbiBvZiBleGlzdGluZyBzYWZlZ3VhcmRzLiBJdCBhcHBlYXJzIHRoYXQgYW55IGx1cmtpbmcgYnVmZmVyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIHJlYWRzIHRoYXQgbWlnaHQgaGF2ZSBzbGlwcGVkIHRocm91Z2ggdGhlIGNyYWNrcyBwcmV2aW91c2x5ICpzaG91bGQqIGJlIGNhdWdodCBieSB0aGUgc3RhbmRhcmQgc2FuaXRpemVycyB3ZSd2ZSBnb3QgaW4gcGxhY2UsIGxpa2UgS0FTQU4uIFNvLCB3ZSdyZSBub3Qgc3RhcnRpbmcgZnJvbSBzY3JhdGNoIGhlcmUuIFdlJ3JlIGxheWVyaW5nIGRlZmVuc2UgaW4gZGVwdGguXG5cbkFuZCwgb2YgY291cnNlLCBubyBldmlkZW5jZSBvZiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgLSB3aGljaCBpcyBhIGh1Z2UgcmVsaWVmLiBHb29kLlxuXG5BbGwgaW4gYWxsLCBpdCBsb29rcyBsaWtlIGEgY2xlYW4sIGZvY3VzZWQsIGFuZCB3ZWxsLWNvbnNpZGVyZWQgc2V0IG9mIGFkanVzdG1lbnRzLiBUaW1lIHRvIGNvbmZpZGVudGx5IGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NTcsIk91dHB1dFRva2VucyI6MTk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIxOjEwLjE1MjcyMjY5NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGdlbmVyaWNfYWNjZXNzX3BoeXMoKWAgYW5kIGBfX2FjY2Vzc19yZW1vdGVfdm0oKWAgaW4gYG1tL21lbW9yeS5jYCB0byBjbGFtcCBhY2Nlc3MgbGVuZ3RocyB0byBwYWdlIGJvdW5kYXJpZXMgKGBQQUdFX1NJWkUgLSBvZmZzZXRgKSwgbWFwIG9ubHkgYSBzaW5nbGUgcGFnZSB2aWEgYGlvcmVtYXBfcHJvdCgpYCwgY2FzdCBgYXJncy5wZm5gIHRvIGByZXNvdXJjZV9zaXplX3RgIGJlZm9yZSBzaGlmdGluZywgYW5kIHJldHVybiBlYXJseSB3aGVuIGBsZW4gXFx1MDAzYz0gMGAuXFxuXFxuVGhlc2UgY2hhbmdlcyBmaXggYm91bmRhcnkgY2FsY3VsYXRpb25zIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAvIGFyaXRobWV0aWMgdHJ1bmNhdGlvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGluIHRoaXMgY29kZSBwYXRoIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGdlbmVyaWNfYWNjZXNzX3BoeXMoKWAgYW5kIGBfX2FjY2Vzc19yZW1vdGVfdm0oKWAgaW4gYG1tL21lbW9yeS5jYCB0byBjbGFtcCBhY2Nlc3MgbGVuZ3RocyB0byBwYWdlIGJvdW5kYXJpZXMgKGBQQUdFX1NJWkUgLSBvZmZzZXRgKSwgbWFwIG9ubHkgYSBzaW5nbGUgcGFnZSB2aWEgYGlvcmVtYXBfcHJvdCgpYCwgY2FzdCBgYXJncy5wZm5gIHRvIGByZXNvdXJjZV9zaXplX3RgIGJlZm9yZSBzaGlmdGluZywgYW5kIHJldHVybiBlYXJseSB3aGVuIGBsZW4gXFx1MDAzYz0gMGAuXFxuXFxuVGhlc2UgY2hhbmdlcyBmaXggYm91bmRhcnkgY2FsY3VsYXRpb25zIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAvIGFyaXRobWV0aWMgdHJ1bmNhdGlvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGluIHRoaXMgY29kZSBwYXRoIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowrx4gb[1] Phase: Succeeded StartedAt: 2026-09-06 15:21:21 +0000 UTC FinishedAt: 2026-09-06 15:21:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4gb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 15:21:21 +0000 UTC FinishedAt: 2026-09-06 15:21:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4gb[2] Phase: Succeeded StartedAt: 2026-09-06 15:21:21 +0000 UTC FinishedAt: 2026-09-06 19:07:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 15:21:21 +0000 UTC FinishedAt: 2026-09-06 19:07:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 15:21:21 +0000 UTC FinishedAt: 2026-09-06 15:21:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 15:21:21 +0000 UTC FinishedAt: 2026-09-06 15:21:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrx4gb/series-workflowrx4gb-convert-artifact-2092412612/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 15:21:46 +0000 UTC FinishedAt: 2026-09-06 15:41:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 15:21:46 +0000 UTC FinishedAt: 2026-09-06 15:41:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c2008238-3307-479c-ae82-b27721eec2ec,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-workflowrx4gb/series-workflowrx4gb-convert-artifact-2092412612/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": "2e18d52e-719e-4f66-8303-2394a22eb195", "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-workflowrx4gb/series-workflowrx4gb-build-action-1745744386/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 15:21:46 +0000 UTC FinishedAt: 2026-09-06 15:41:01 +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:*c2008238-3307-479c-ae82-b27721eec2ec,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-workflowrx4gb/series-workflowrx4gb-convert-artifact-2092412612/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": "2e18d52e-719e-4f66-8303-2394a22eb195", "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-workflowrx4gb/series-workflowrx4gb-build-action-1745744386/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 15:41:11 +0000 UTC FinishedAt: 2026-09-06 15:41:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 15:41:11 +0000 UTC FinishedAt: 2026-09-06 15:41:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 15:41:11 +0000 UTC FinishedAt: 2026-09-06 15:41:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 15:41:11 +0000 UTC FinishedAt: 2026-09-06 15:41:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrx4gb/series-workflowrx4gb-convert-artifact-3774617155/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 15:41:21 +0000 UTC FinishedAt: 2026-09-06 15:43:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 15:41:21 +0000 UTC FinishedAt: 2026-09-06 15:43:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2e18d52e-719e-4f66-8303-2394a22eb195,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-workflowrx4gb/series-workflowrx4gb-build-action-1745744386/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-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 15:43:20 +0000 UTC FinishedAt: 2026-09-06 15:43:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 15:43:20 +0000 UTC FinishedAt: 2026-09-06 15:43:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 15:43:20 +0000 UTC FinishedAt: 2026-09-06 16:01:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 15:43:20 +0000 UTC FinishedAt: 2026-09-06 16:01:51 +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:*c2008238-3307-479c-ae82-b27721eec2ec,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-workflowrx4gb/series-workflowrx4gb-convert-artifact-3774617155/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": "e7b28d75-240b-41ef-869c-dfb4e285aca7", "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-workflowrx4gb/series-workflowrx4gb-build-action-834371831/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 15:43:20 +0000 UTC FinishedAt: 2026-09-06 16:01:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c2008238-3307-479c-ae82-b27721eec2ec,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-workflowrx4gb/series-workflowrx4gb-convert-artifact-3774617155/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": "e7b28d75-240b-41ef-869c-dfb4e285aca7", "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-workflowrx4gb/series-workflowrx4gb-build-action-834371831/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 16:01:51 +0000 UTC FinishedAt: 2026-09-06 16:01:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 16:01:51 +0000 UTC FinishedAt: 2026-09-06 16:01:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 16:01:51 +0000 UTC FinishedAt: 2026-09-06 16:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 16:01:51 +0000 UTC FinishedAt: 2026-09-06 16:03:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e7b28d75-240b-41ef-869c-dfb4e285aca7,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-workflowrx4gb/series-workflowrx4gb-build-action-834371831/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-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 16:03:46 +0000 UTC FinishedAt: 2026-09-06 19:07:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 16:03:46 +0000 UTC FinishedAt: 2026-09-06 19:07:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"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:*2e18d52e-719e-4f66-8303-2394a22eb195,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e7b28d75-240b-41ef-869c-dfb4e285aca7,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-workflowrx4gb/series-workflowrx4gb-build-action-1745744386/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-workflowrx4gb/series-workflowrx4gb-build-action-834371831/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 16:03:46 +0000 UTC FinishedAt: 2026-09-06 16:03:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 16:03:46 +0000 UTC FinishedAt: 2026-09-06 16:03:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"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-workflowrx4gb/series-workflowrx4gb-convert-artifact-592106076/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 16:03:46 +0000 UTC FinishedAt: 2026-09-06 16:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 16:03:46 +0000 UTC FinishedAt: 2026-09-06 16:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 16:03:46 +0000 UTC FinishedAt: 2026-09-06 16:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 16:03:56 +0000 UTC FinishedAt: 2026-09-06 19:07:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4gb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["generic_access_phys","access_remote_vm","access_process_vm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdf1d821e3e4fbbb91fe4b3890482f5458e2d7c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"72f3e33c-28f4-4b63-a17d-ff14375f31f8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 16:03:56 +0000 UTC FinishedAt: 2026-09-06 19:07:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2e18d52e-719e-4f66-8303-2394a22eb195,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e7b28d75-240b-41ef-869c-dfb4e285aca7,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-workflowrx4gb/series-workflowrx4gb-build-action-1745744386/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-workflowrx4gb/series-workflowrx4gb-build-action-834371831/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-workflowrx4gb/series-workflowrx4gb-convert-artifact-592106076/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,}