Name: series-workflow9xg5w Phase: Succeeded StartedAt: 2026-09-06 05:01:01 +0000 UTC FinishedAt: 2026-09-06 06:41:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xg5w[0] Phase: Succeeded StartedAt: 2026-09-06 05:01:01 +0000 UTC FinishedAt: 2026-09-06 05:04:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xg5w[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 05:01:01 +0000 UTC FinishedAt: 2026-09-06 05:04:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "8ab1afb2eb246ab15b301cd255b5943d208a93c1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "8ab1afb2eb246ab15b301cd255b5943d208a93c1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "41c08939-49e3-4c3f-af0e-c3e4622237c2" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "record_steal_time", "kvm_vcpu_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlY29yZF9zdGVhbF90aW1lJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB0cmFja2luZyBvZiBwYXJhdmlydHVhbGl6ZWQgc3RlYWwgdGltZSAoYGxhc3Rfc3RlYWxgKSBieSBtb3ZpbmcgaXQgZnJvbSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdmNwdSBzdWItc3RydWN0dXJlcyAoaW4geDg2LCBhcm02NCwgcmlzY3YsIGFuZCBsb29uZ2FyY2gpIGludG8gdGhlIGdlbmVyaWMgYHN0cnVjdCBrdm1fdmNwdWAgdW5kZXIgYENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FYCwgYW5kIHJlc2V0dGluZyBgdmNwdS1cdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheWAgd2hlbiB0aGUgdkNQVSB0aHJlYWQgUElEIGNoYW5nZXMuXG5cblRoZSBgc3RydWN0IGt2bV92Y3B1YCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jKClgLCBlbnN1cmluZyBgdmNwdS1cdTAwM2VsYXN0X3N0ZWFsYCBpcyB6ZXJvLWluaXRpYWxpemVkIGF0IGNyZWF0aW9uLiBBbGwgcmVhZHMgYW5kIHdyaXRlcyB0byBgdmNwdS1cdTAwM2VsYXN0X3N0ZWFsYCBvcGVyYXRlIG9uIGZ1bGx5IGluaXRpYWxpemVkIGZpZWxkcyBhbmQgdmFsdWVzIGRlcml2ZWQgZnJvbSBgY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheWAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdGFjayB2YXJpYWJsZXMsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIHBhZGRpbmcgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc29saWRhdGVzIHN0ZWFsLXRpbWUgYWNjb3VudGluZyBhY3Jvc3MgYXJjaGl0ZWN0dXJlcyBieSBtb3ZpbmcgYGxhc3Rfc3RlYWxgIHRvIGdlbmVyaWMgYHN0cnVjdCBrdm1fdmNwdWAgYW5kIHJlc2V0dGluZyBpdCBpbiBga3ZtX3ZjcHVfaW9jdGwoKWAgd2hlbiBhIHZDUFUgdGhyZWFkIGNoYW5nZXMuIEl0IG1vZGlmaWVzIGV4ZWN1dGFibGUgY29kZSBpbiBjb3JlIEtWTSAoYGt2bV92Y3B1X2lvY3RsYCkgYW5kIHg4NiBLVk0gKGByZWNvcmRfc3RlYWxfdGltZWApLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGluIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjFmMzhkODRlMjIxYWI3ZjliZTQ1MjdlYjU2MTYzNzAwYmYxNzY2OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDU6MDM6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCAyN2ZlMGNkNWIyZDdhLi4zNmNiN2RlZTk4OGNiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC05MzcsNyAmIzQzOzkzNyw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcbiBcdC8qIEd1ZXN0IFBWIHN0YXRlICovXG4gXHRzdHJ1Y3Qge1xuLVx0XHR1NjQgbGFzdF9zdGVhbDtcbiBcdFx0Z3BhX3QgYmFzZTtcbiBcdH0gc3RlYWw7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vS2NvbmZpZyBiL2FyY2gvYXJtNjQva3ZtL0tjb25maWdcbmluZGV4IDQ0OTE1NGY5YTQ4NTIuLmY1ODU1YmZjNjgxYzEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9LY29uZmlnXG5AQCAtMzQsNiAmIzQzOzM0LDcgQEAgbWVudWNvbmZpZyBLVk1cbiBcdHNlbGVjdCBIQVZFX0tWTV9JUlFfQllQQVNTXG4gXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXG4gXHRzZWxlY3QgSEFWRV9LVk1fVkNQVV9SVU5fUElEX0NIQU5HRVxuJiM0MztcdHNlbGVjdCBIQVZFX0tWTV9QVl9TVEVBTF9USU1FXG4gXHRzZWxlY3QgU0NIRURfSU5GT1xuIFx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTXG4gXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcHZ0aW1lLmMgYi9hcmNoL2FybTY0L2t2bS9wdnRpbWUuY1xuaW5kZXggNGNlYWJhYTRjMzBiZC4uYTY3ZDkzODQ1ZDc5NCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9wdnRpbWUuY1xuQEAgLTE0LDcgJiM0MzsxNCw3IEBAIHZvaWQga3ZtX3VwZGF0ZV9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXHR1NjQgYmFzZSA9IHZjcHUtXHUwMDNlYXJjaC5zdGVhbC5iYXNlO1xuLVx0dTY0IGxhc3Rfc3RlYWwgPSB2Y3B1LVx1MDAzZWFyY2guc3RlYWwubGFzdF9zdGVhbDtcbiYjNDM7XHR1NjQgbGFzdF9zdGVhbCA9IHZjcHUtXHUwMDNlbGFzdF9zdGVhbDtcbiBcdHU2NCBvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcHZjbG9ja192Y3B1X3N0b2xlbl90aW1lLCBzdG9sZW5fdGltZSk7XG4gXHR1NjQgc3RlYWwgPSAwO1xuIFx0aW50IGlkeDtcbkBAIC0yNSw4ICYjNDM7MjUsOCBAQCB2b2lkIGt2bV91cGRhdGVfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuIFx0aWYgKCFrdm1fZ2V0X2d1ZXN0KGt2bSwgYmFzZSAmIzQzOyBvZmZzZXQsIHN0ZWFsKSkge1xuIFx0XHRzdGVhbCA9IGxlNjRfdG9fY3B1KHN0ZWFsKTtcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLnN0ZWFsLmxhc3Rfc3RlYWwgPSBSRUFEX09OQ0UoY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSk7XG4tXHRcdHN0ZWFsICYjNDM7PSB2Y3B1LVx1MDAzZWFyY2guc3RlYWwubGFzdF9zdGVhbCAtIGxhc3Rfc3RlYWw7XG4mIzQzO1x0XHR2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgPSBSRUFEX09OQ0UoY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSk7XG4mIzQzO1x0XHRzdGVhbCAmIzQzOz0gdmNwdS1cdTAwM2VsYXN0X3N0ZWFsIC0gbGFzdF9zdGVhbDtcbiBcdFx0a3ZtX3B1dF9ndWVzdChrdm0sIGJhc2UgJiM0Mzsgb2Zmc2V0LCBjcHVfdG9fbGU2NChzdGVhbCkpO1xuIFx0fVxuIFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbkBAIC02MSw3ICYjNDM7NjEsNyBAQCBncGFfdCBrdm1faW5pdF9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgKiBTdGFydCBjb3VudGluZyBzdG9sZW4gdGltZSBmcm9tIHRoZSB0aW1lIHRoZSBndWVzdCByZXF1ZXN0c1xuIFx0ICogdGhlIGZlYXR1cmUgZW5hYmxlZC5cbiBcdCAqL1xuLVx0dmNwdS1cdTAwM2VhcmNoLnN0ZWFsLmxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuJiM0MztcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4gXHRrdm1fd3JpdGVfZ3Vlc3RfbG9jayhrdm0sIGJhc2UsIFx1MDAyNmluaXRfdmFsdWVzLCBzaXplb2YoaW5pdF92YWx1ZXMpKTtcbiBcbiBcdHJldHVybiBiYXNlO1xuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCAyM2NmYmVjZWJiZDc5Li4xNDUxNGEyNWIyNjEzIDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTI1Myw3ICYjNDM7MjUzLDYgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xuIFx0LyogcGFyYXZpcnQgc3RlYWwgdGltZSAqL1xuIFx0c3RydWN0IHtcbiBcdFx0dTY0IGd1ZXN0X2FkZHI7XG4tXHRcdHU2NCBsYXN0X3N0ZWFsO1xuIFx0XHRzdHJ1Y3QgZ2ZuX3RvX2h2YV9jYWNoZSBjYWNoZTtcbiBcdFx0dTggIHByZWVtcHRlZDtcbiBcdH0gc3Q7XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWcgYi9hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZ1xuaW5kZXggMTVkYTJkODhjMGMxMC4uNDk5NmVjOWMwN2Y5OSAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZ1xuQEAgLTI2LDYgJiM0MzsyNiw3IEBAIGNvbmZpZyBLVk1cbiBcdHNlbGVjdCBIQVZFX0tWTV9NU0lcbiBcdHNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU1cbiBcdHNlbGVjdCBLVk1fQ09NTU9OXG4mIzQzO1x0c2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcbiBcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcbiBcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xuIFx0c2VsZWN0IEtWTV9NTUlPXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmNcbmluZGV4IDRmNThlNmUyY2Y4NjYuLjU2YWU2YjE4ZjhjMTAgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jXG5AQCAtNzczLDcgJiM0Mzs3NzMsNyBAQCBzdGF0aWMgbG9uZyBrdm1fc2F2ZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRpZiAoIShkYXRhIFx1MDAyNiBLVk1fU1RFQUxfUEhZU19WQUxJRCkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbiYjNDM7XHRcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4gXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdGRlZmF1bHQ6XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmNcbmluZGV4IGVkOWUwOTJjOTdiYTcuLjcyOGQyOWViYThlMDMgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG5AQCAtMTg3LDggJiM0MzsxODcsOCBAQCBzdGF0aWMgdm9pZCBrdm1fdXBkYXRlX3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHNtcF93bWIoKTtcbiBcbiBcdHVuc2FmZV9nZXRfdXNlcihzdGVhbCwgXHUwMDI2c3QtXHUwMDNlc3RlYWwsIG91dCk7XG4tXHRzdGVhbCAmIzQzOz0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSAtIHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnN0Lmxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuJiM0MztcdHN0ZWFsICYjNDM7PSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5IC0gdmNwdS1cdTAwM2VsYXN0X3N0ZWFsO1xuJiM0MztcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4gXHR1bnNhZmVfcHV0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuIFxuIFx0c21wX3dtYigpO1xuQEAgLTEyMDUsNyAmIzQzOzEyMDUsNyBAQCBzdGF0aWMgaW50IGt2bV9sb29uZ2FyY2hfcHZ0aW1lX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBcdGlmICghcmV0KSB7XG4gXHRcdHZjcHUtXHUwMDNlYXJjaC5zdC5ndWVzdF9hZGRyID0gZ3BhO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4mIzQzO1x0XHR2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuIFx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfU1RFQUxfVVBEQVRFLCB2Y3B1KTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGEzMDYwMDU3OTIzMWIuLjMwNTg3NTMwMWMwNDIgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTI3Myw3ICYjNDM7MjczLDYgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xuIFx0LyogU0JJIHN0ZWFsLXRpbWUgYWNjb3VudGluZyAqL1xuIFx0c3RydWN0IHtcbiBcdFx0Z3BhX3Qgc2htZW07XG4tXHRcdHU2NCBsYXN0X3N0ZWFsO1xuIFx0fSBzdGE7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnIGIvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ1xuaW5kZXggZWMyY2VlMGEzOWUwMS4uMWZmMDdhOTA0YTAyNyAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbkBAIC0yNiw2ICYjNDM7MjYsNyBAQCBjb25maWcgS1ZNXG4gXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXG4gXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXG4gXHRzZWxlY3QgS1ZNX0NPTU1PTlxuJiM0MztcdHNlbGVjdCBIQVZFX0tWTV9QVl9TVEVBTF9USU1FXG4gXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXG4gXHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbiBcdHNlbGVjdCBLVk1fTU1JT1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3N0YS5jIGIvYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfc3RhLmNcbmluZGV4IDYwZTUwMjk2YTAwODUuLjlhNzdkM2JkZTdjNzIgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9zdGEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfc3RhLmNcbkBAIC0xOSwxMyAmIzQzOzE5LDEzIEBAXG4gc3RhdGljIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfc2JpX3N0YV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0dmNwdS1cdTAwM2VhcmNoLnN0YS5zaG1lbSA9IElOVkFMSURfR1BBO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnN0YS5sYXN0X3N0ZWFsID0gMDtcbiYjNDM7XHR2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgPSAwO1xuIH1cbiBcbiB2b2lkIGt2bV9yaXNjdl92Y3B1X3JlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRncGFfdCBzaG1lbSA9IHZjcHUtXHUwMDNlYXJjaC5zdGEuc2htZW07XG4tXHR1NjQgbGFzdF9zdGVhbCA9IHZjcHUtXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbDtcbiYjNDM7XHR1NjQgbGFzdF9zdGVhbCA9IHZjcHUtXHUwMDNlbGFzdF9zdGVhbDtcbiBcdF9fbGUzMiBfX3VzZXIgKnNlcXVlbmNlX3B0cjtcbiBcdF9fbGU2NCBfX3VzZXIgKnN0ZWFsX3B0cjtcbiBcdF9fbGUzMiBzZXF1ZW5jZV9sZTtcbkBAIC02Nyw4ICYjNDM7NjcsOCBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X3JlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdGlmICghV0FSTl9PTihnZXRfdXNlcihzdGVhbF9sZSwgc3RlYWxfcHRyKSkpIHtcbiBcdFx0c3RlYWwgPSBsZTY0X3RvX2NwdShzdGVhbF9sZSk7XG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbCA9IFJFQURfT05DRShjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5KTtcbi1cdFx0c3RlYWwgJiM0Mzs9IHZjcHUtXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbCAtIGxhc3Rfc3RlYWw7XG4mIzQzO1x0XHR2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgPSBSRUFEX09OQ0UoY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSk7XG4mIzQzO1x0XHRzdGVhbCAmIzQzOz0gdmNwdS1cdTAwM2VsYXN0X3N0ZWFsIC0gbGFzdF9zdGVhbDtcbiBcdFx0V0FSTl9PTihwdXRfdXNlcihjcHVfdG9fbGU2NChzdGVhbCksIHN0ZWFsX3B0cikpO1xuIFx0fVxuIFxuQEAgLTExNSw3ICYjNDM7MTE1LDcgQEAgc3RhdGljIGludCBrdm1fc2JpX3N0YV9zdGVhbF90aW1lX3NldF9zaG1lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHJldHVybiBTQklfRVJSX0lOVkFMSURfQUREUkVTUztcbiBcbiBcdHZjcHUtXHUwMDNlYXJjaC5zdGEuc2htZW0gPSBzaG1lbTtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4mIzQzO1x0dmNwdS1cdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggNjgzYmI4YmY0M2E5NC4uZWJkZDg1MjZhZTEyNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC04NzIsNyAmIzQzOzg3Miw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdHN0cnVjdCB7XG4gXHRcdHU4IHByZWVtcHRlZDtcbiBcdFx0dTY0IG1zcl92YWw7XG4tXHRcdHU2NCBsYXN0X3N0ZWFsO1xuIFx0XHRzdHJ1Y3QgZ2ZuX3RvX2h2YV9jYWNoZSBjYWNoZTtcbiBcdH0gc3Q7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL0tjb25maWcgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZ1xuaW5kZXggNTM4ZWQxZTgwMzMyNi4uYjJhZWE4MDU4ODQxMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZ1xuQEAgLTQwLDYgJiM0Mzs0MCw3IEBAIGNvbmZpZyBLVk1fWDg2XG4gXHRzZWxlY3QgSEFWRV9LVk1fTVNJXG4gXHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxuIFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcbiYjNDM7XHRzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxuIFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXG4gXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXG4gXHRzZWxlY3QgS1ZNX1ZGSU9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbmluZGV4IDc5NDY4ZGRmZTQ3MzYuLjkyN2M4YjFlZDgzZDIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuY1xuQEAgLTIxMjksOSAmIzQzOzIxMjksOCBAQCBzdGF0aWMgdm9pZCByZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzbXBfd21iKCk7XG4gXG4gXHR1bnNhZmVfZ2V0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuLVx0c3RlYWwgJiM0Mzs9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkgLVxuLVx0XHR2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbDtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbiYjNDM7XHRzdGVhbCAmIzQzOz0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSAtIHZjcHUtXHUwMDNlbGFzdF9zdGVhbDtcbiYjNDM7XHR2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuIFx0dW5zYWZlX3B1dF91c2VyKHN0ZWFsLCBcdTAwMjZzdC1cdTAwM2VzdGVhbCwgb3V0KTtcbiBcbiBcdHZlcnNpb24gJiM0Mzs9IDE7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5pbmRleCAwM2JmYzkyODY0YjZlLi5mZjlkNDIzYjZhN2M3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbkBAIC0zOTgsNiAmIzQzOzM5OCwxMCBAQCBzdHJ1Y3Qga3ZtX3ZjcHUge1xuIFx0ICovXG4gXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpsYXN0X3VzZWRfc2xvdDtcbiBcdHU2NCBsYXN0X3VzZWRfc2xvdF9nZW47XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX1BWX1NURUFMX1RJTUVcbiYjNDM7XHR1NjQgbGFzdF9zdGVhbDtcbiYjNDM7I2VuZGlmXG4gfTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5pbmRleCA5NmJhYjcwMDJkMzllLi4xZGUxM2MwMDE3ZTQzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuQEAgLTE2NCw2ICYjNDM7MTY0LDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBpcnFfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gbW11X3N0cmVzc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSByc2VxX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHN0ZWFsX3RpbWVcbiYjNDM7VEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBzdGVhbF90aW1lX2NoYW5nZV9waWRcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHN5c3RlbV9jb3VudGVyX29mZnNldF90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBwcmVfZmF1bHRfbWVtb3J5X3Rlc3RcbiBcbkBAIC0yMDQsNiAmIzQzOzIwNSw3IEBAIFRFU1RfR0VOX1BST0dTX2FybTY0ICYjNDM7PSBndWVzdF9tZW1mZF90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfYXJtNjQgJiM0Mzs9IG1tdV9zdHJlc3NfdGVzdFxuIFRFU1RfR0VOX1BST0dTX2FybTY0ICYjNDM7PSByc2VxX3Rlc3RcbiBURVNUX0dFTl9QUk9HU19hcm02NCAmIzQzOz0gc3RlYWxfdGltZVxuJiM0MztURVNUX0dFTl9QUk9HU19hcm02NCAmIzQzOz0gc3RlYWxfdGltZV9jaGFuZ2VfcGlkXG4gXG4gVEVTVF9HRU5fUFJPR1NfczM5MCA9ICQoVEVTVF9HRU5fUFJPR1NfQ09NTU9OKVxuIFRFU1RfR0VOX1BST0dTX3MzOTAgJiM0Mzs9IHMzOTAvbWVtb3BcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xMmQ0OTI3ZDFjMDE3XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmNcbkBAIC0wLDAgJiM0MzsxLDIxNiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBWZXJpZnkgdGhhdCBLVk0gcmVzZXRzIHN0ZWFsLXRpbWUgYWNjb3VudGluZyB3aGVuIGEgdkNQVSBmZCBpcyBydW4gZnJvbVxuJiM0MzsgKiBhIGRpZmZlcmVudCBob3N0IFBJRC5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wYXJhLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3ZtX3V0aWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtwcm9jZXNzb3IuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBTVF9HUEFfQkFTRVx0XHQoMSBcdTAwM2NcdTAwM2MgMzApXG4mIzQzOyNkZWZpbmUgU1RfU0FORV9ERUxUQV9OU1x0KDFVTEwgXHUwMDNjXHUwMDNjIDYzKVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKnN0X2d2YTtcbiYjNDM7c3RhdGljIHU2NCBndWVzdF9zdG9sZW5fdGltZTtcbiYjNDM7c3RhdGljIHU2NCBtYWluX3N0ZWFsO1xuJiM0MztzdGF0aWMgdTY0IHRocmVhZF9zdGVhbDtcbiYjNDM7XG4mIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFNURUFMX1RJTUVfU0laRVx0KChzaXplb2Yoc3RydWN0IGt2bV9zdGVhbF90aW1lKSAmIzQzOyA2MykgXHUwMDI2IH42MylcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fc3RlYWxfdGltZSAqc3QgPSBzdF9ndmE7XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC1cdTAwM2VzdGVhbCkpO1xuJiM0MztcdEdVRVNUX1NZTkMoMCk7XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC1cdTAwM2VzdGVhbCkpO1xuJiM0MztcdEdVRVNUX1NZTkMoMSk7XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC1cdTAwM2VzdGVhbCkpO1xuJiM0MztcdEdVRVNUX0RPTkUoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgc3RlYWxfdGltZV9zdXBwb3J0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX0tWTV9TVEVBTF9USU1FKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc3RlYWxfdGltZV9lbmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0dmNwdV9zZXRfbXNyKHZjcHUsIE1TUl9LVk1fU1RFQUxfVElNRSxcbiYjNDM7XHRcdCAgICAgKHVsb25nKXN0X2d2YSB8IEtWTV9NU1JfRU5BQkxFRCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFNURUFMX1RJTUVfU0laRVx0KChzaXplb2Yoc3RydWN0IHN0X3RpbWUpICYjNDM7IDYzKSBcdTAwMjYgfjYzKVxuJiM0MztcbiYjNDM7I2RlZmluZSBQVl9USU1FX1NUXHQweGM1MDAwMDIxXG4mIzQzO1xuJiM0MztzdHJ1Y3Qgc3RfdGltZSB7XG4mIzQzO1x0dTMyIHJldjtcbiYjNDM7XHR1MzIgYXR0cjtcbiYjNDM7XHR1NjQgc3RfdGltZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhcm1fc21jY2NfcmVzIHJlcztcbiYjNDM7XHRzdHJ1Y3Qgc3RfdGltZSAqc3Q7XG4mIzQzO1xuJiM0MztcdGRvX3NtY2NjKFBWX1RJTUVfU1QsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIFx1MDAyNnJlcyk7XG4mIzQzO1x0R1VFU1RfQVNTRVJUX05FKHJlcy5hMCwgLTEpO1xuJiM0MztcdEdVRVNUX0FTU0VSVF9FUShyZXMuYTAsICh1bG9uZylzdF9ndmEpO1xuJiM0MztcbiYjNDM7XHRzdCA9IChzdHJ1Y3Qgc3RfdGltZSAqKXJlcy5hMDtcbiYjNDM7XHRXUklURV9PTkNFKGd1ZXN0X3N0b2xlbl90aW1lLCBSRUFEX09OQ0Uoc3QtXHUwMDNlc3RfdGltZSkpO1xuJiM0MztcdEdVRVNUX1NZTkMoMCk7XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC1cdTAwM2VzdF90aW1lKSk7XG4mIzQzO1x0R1VFU1RfU1lOQygxKTtcbiYjNDM7XG4mIzQzO1x0V1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LVx1MDAzZXN0X3RpbWUpKTtcbiYjNDM7XHRHVUVTVF9ET05FKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHN0ZWFsX3RpbWVfc3VwcG9ydGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgZGV2ID0ge1xuJiM0MztcdFx0Lmdyb3VwID0gS1ZNX0FSTV9WQ1BVX1BWVElNRV9DVFJMLFxuJiM0MztcdFx0LmF0dHIgPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0lQQSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gIV9fdmNwdV9pb2N0bCh2Y3B1LCBLVk1fSEFTX0RFVklDRV9BVFRSLCBcdTAwMjZkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2VuYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHR1NjQgc3RfaXBhID0gKHVsb25nKXN0X2d2YTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyIGRldiA9IHtcbiYjNDM7XHRcdC5ncm91cCA9IEtWTV9BUk1fVkNQVV9QVlRJTUVfQ1RSTCxcbiYjNDM7XHRcdC5hdHRyID0gS1ZNX0FSTV9WQ1BVX1BWVElNRV9JUEEsXG4mIzQzO1x0XHQuYWRkciA9ICh1NjQpXHUwMDI2c3RfaXBhLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHZjcHVfaW9jdGwodmNwdSwgS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgXHUwMDI2ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2Vsc2VcbiYjNDM7I2Vycm9yIFwmIzM0O3N0ZWFsX3RpbWVfY2hhbmdlX3BpZCBpcyBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBhcmNoaXRlY3R1cmVcJiMzNDtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdWNhbGwgdWM7XG4mIzQzO1xuJiM0MztcdHZjcHVfcnVuKHZjcHUpO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGdldF91Y2FsbCh2Y3B1LCBcdTAwMjZ1YykpIHtcbiYjNDM7XHRjYXNlIFVDQUxMX1NZTkM6XG4mIzQzO1x0Y2FzZSBVQ0FMTF9ET05FOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBVQ0FMTF9BQk9SVDpcbiYjNDM7XHRcdFJFUE9SVF9HVUVTVF9BU1NFUlQodWMpO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRURVNUX0FTU0VSVChmYWxzZSwgXCYjMzQ7VW5leHBlY3RlZCBleGl0OiAlc1wmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIGV4aXRfcmVhc29uX3N0cih2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbikpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKmRvX3N0ZWFsX3RpbWUodm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjIHRzLCBzdG9wO1xuJiM0MztcbiYjNDM7XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2dHMpO1xuJiM0MztcdHN0b3AgPSB0aW1lc3BlY19hZGRfbnModHMsIE1JTl9SVU5fREVMQVlfTlMpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAodGltZXNwZWNfdG9fbnModGltZXNwZWNfc3ViKHRzLCBzdG9wKSkgXHUwMDNjIDApXG4mIzQzO1x0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2dHMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKnZjcHVfdGhyZWFkKHZvaWQgKmFyZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGFyZztcbiYjNDM7XG4mIzQzO1x0cnVuX3ZjcHUodmNwdSk7XG4mIzQzO1x0c3luY19nbG9iYWxfZnJvbV9ndWVzdCh2Y3B1LVx1MDAzZXZtLCBndWVzdF9zdG9sZW5fdGltZSk7XG4mIzQzO1x0dGhyZWFkX3N0ZWFsID0gZ3Vlc3Rfc3RvbGVuX3RpbWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuJiM0MztcdHN0cnVjdCBrdm1fdm0gKnZtO1xuJiM0MztcdHB0aHJlYWRfYXR0cl90IGF0dHI7XG4mIzQzO1x0cHRocmVhZF90IHRocmVhZDtcbiYjNDM7XHRjcHVfc2V0X3QgY3B1c2V0O1xuJiM0MztcdGxvbmcgcnVuX2RlbGF5O1xuJiM0MztcdGxvbmcgcnVuX2RlbGF5X2RlbHRhO1xuJiM0MztcbiYjNDM7XHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuJiM0MztcdGtzZnRfc2V0X3BsYW4oMSk7XG4mIzQzO1xuJiM0MztcdENQVV9aRVJPKFx1MDAyNmNwdXNldCk7XG4mIzQzO1x0Q1BVX1NFVCgwLCBcdTAwMjZjcHVzZXQpO1xuJiM0MztcdHB0aHJlYWRfYXR0cl9pbml0KFx1MDAyNmF0dHIpO1xuJiM0MztcdHB0aHJlYWRfYXR0cl9zZXRhZmZpbml0eV9ucChcdTAwMjZhdHRyLCBzaXplb2YoY3B1c2V0KSwgXHUwMDI2Y3B1c2V0KTtcbiYjNDM7XHRwdGhyZWFkX3NldGFmZmluaXR5X25wKHB0aHJlYWRfc2VsZigpLCBzaXplb2YoY3B1c2V0KSwgXHUwMDI2Y3B1c2V0KTtcbiYjNDM7XG4mIzQzO1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBndWVzdF9jb2RlKTtcbiYjNDM7XHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLFxuJiM0MztcdFx0XHRcdCAgICBTVF9HUEFfQkFTRSwgMSwgMSwgMCk7XG4mIzQzO1x0dmlydF9tYXAodm0sIFNUX0dQQV9CQVNFLCBTVF9HUEFfQkFTRSwgMSk7XG4mIzQzO1xuJiM0MztcdHN0X2d2YSA9ICh2b2lkICopU1RfR1BBX0JBU0U7XG4mIzQzO1x0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHN0X2d2YSk7XG4mIzQzO1x0bWVtc2V0KGFkZHJfZ3ZhMmh2YSh2bSwgU1RfR1BBX0JBU0UpLCAwLCBTVEVBTF9USU1FX1NJWkUpO1xuJiM0MztcbiYjNDM7XHRURVNUX1JFUVVJUkUoc3RlYWxfdGltZV9zdXBwb3J0ZWQodmNwdSkpO1xuJiM0MztcbiYjNDM7XHRzdGVhbF90aW1lX2VuYWJsZSh2Y3B1KTtcbiYjNDM7XHRydW5fdmNwdSh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0cnVuX2RlbGF5ID0gZ2V0X3J1bl9kZWxheSgpO1xuJiM0MztcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgXHUwMDI2YXR0ciwgZG9fc3RlYWxfdGltZSwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChnZXRfcnVuX2RlbGF5KCkgLSBydW5fZGVsYXkgXHUwMDNjIE1JTl9SVU5fREVMQVlfTlMpXG4mIzQzO1x0XHRzY2hlZF95aWVsZCgpO1xuJiM0MztcbiYjNDM7XHRwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTtcbiYjNDM7XHRydW5fZGVsYXlfZGVsdGEgPSBnZXRfcnVuX2RlbGF5KCkgLSBydW5fZGVsYXk7XG4mIzQzO1x0VEVTVF9BU1NFUlQocnVuX2RlbGF5X2RlbHRhIFx1MDAzZT0gTUlOX1JVTl9ERUxBWV9OUyxcbiYjNDM7XHRcdCAgICBcJiMzNDtFeHBlY3RlZCBydW5fZGVsYXkgXHUwMDNlPSAlbGQsIGdvdCAlbGRcJiMzNDssXG4mIzQzO1x0XHQgICAgTUlOX1JVTl9ERUxBWV9OUywgcnVuX2RlbGF5X2RlbHRhKTtcbiYjNDM7XG4mIzQzO1x0cnVuX3ZjcHUodmNwdSk7XG4mIzQzO1x0c3luY19nbG9iYWxfZnJvbV9ndWVzdCh2bSwgZ3Vlc3Rfc3RvbGVuX3RpbWUpO1xuJiM0MztcdG1haW5fc3RlYWwgPSBndWVzdF9zdG9sZW5fdGltZTtcbiYjNDM7XG4mIzQzO1x0VEVTVF9BU1NFUlQobWFpbl9zdGVhbCBcdTAwM2U9IE1JTl9SVU5fREVMQVlfTlMsXG4mIzQzO1x0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgc3RlYWwgdGltZSBcdTAwM2U9ICVsZCwgZ290ICVcJiMzNDtQUkl1NjQsXG4mIzQzO1x0XHQgICAgTUlOX1JVTl9ERUxBWV9OUywgbWFpbl9zdGVhbCk7XG4mIzQzO1xuJiM0MztcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHUpO1xuJiM0MztcdHB0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRURVNUX0FTU0VSVCh0aHJlYWRfc3RlYWwgXHUwMDNlPSBtYWluX3N0ZWFsIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHRocmVhZF9zdGVhbCAtIG1haW5fc3RlYWwgXHUwMDNjIFNUX1NBTkVfREVMVEFfTlMsXG4mIzQzO1x0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgc2FuZSBzdGVhbCBhZnRlciB2Q1BVIHBpZCBjaGFuZ2U6IFwmIzM0O1xuJiM0MztcdFx0ICAgIFwmIzM0O29sZD0lXCYjMzQ7UFJJdTY0XCYjMzQ7LCBuZXc9JVwmIzM0O1BSSXU2NCxcbiYjNDM7XHRcdCAgICBtYWluX3N0ZWFsLCB0aHJlYWRfc3RlYWwpO1xuJiM0MztcbiYjNDM7XHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXCYjMzQ7c3RlYWwgdGltZSByZW1haW5zIHNhbmUgYWNyb3NzIHZDUFUgcGlkIGNoYW5nZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHB0aHJlYWRfYXR0cl9kZXN0cm95KFx1MDAyNmF0dHIpO1xuJiM0MztcdGt2bV92bV9mcmVlKHZtKTtcbiYjNDM7XHRrc2Z0X2ZpbmlzaGVkKCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9LY29uZmlnIGIvdmlydC9rdm0vS2NvbmZpZ1xuaW5kZXggYzNjMGVlMjUzZmM3Ny4uZjQyYTNhMGZjNWJhYiAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL0tjb25maWdcbkBAIC04Miw2ICYjNDM7ODIsOSBAQCBjb25maWcgSEFWRV9LVk1fSVJRX0JZUEFTU1xuIGNvbmZpZyBIQVZFX0tWTV9WQ1BVX1JVTl9QSURfQ0hBTkdFXG4gICAgICAgIGJvb2xcbiBcbiYjNDM7Y29uZmlnIEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcbiYjNDM7ICAgICAgIGJvb2xcbiYjNDM7XG4gY29uZmlnIEhBVkVfS1ZNX05PX1BPTExcbiAgICAgICAgYm9vbFxuIFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5pbmRleCA2NWViMjZhMDUyMGQ4Li43ODRmMGQ5NDViNDU2IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTQ0NzgsNiAmIzQzOzQ0NzgsMTAgQEAgc3RhdGljIGxvbmcga3ZtX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdFx0aWYgKHIpXG4gXHRcdFx0XHRicmVhaztcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FXG4mIzQzO1x0XHRcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdFx0XHRuZXdwaWQgPSBnZXRfdGFza19waWQoY3VycmVudCwgUElEVFlQRV9QSUQpO1xuIFx0XHRcdHdyaXRlX2xvY2soXHUwMDI2dmNwdS1cdTAwM2VwaWRfbG9jayk7XG4gXHRcdFx0dmNwdS1cdTAwM2VwaWQgPSBuZXdwaWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVjb3JkX3N0ZWFsX3RpbWUmIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc29saWRhdGVzIHN0ZWFsLXRpbWUgYWNjb3VudGluZyBhY3Jvc3MgYXJjaGl0ZWN0dXJlcyBieSBtb3ZpbmcgYGxhc3Rfc3RlYWxgIHRvIGdlbmVyaWMgYHN0cnVjdCBrdm1fdmNwdWAgYW5kIHJlc2V0dGluZyBpdCBpbiBga3ZtX3ZjcHVfaW9jdGwoKWAgd2hlbiBhIHZDUFUgdGhyZWFkIGNoYW5nZXMuIEl0IG1vZGlmaWVzIGV4ZWN1dGFibGUgY29kZSBpbiBjb3JlIEtWTSAoYGt2bV92Y3B1X2lvY3RsYCkgYW5kIHg4NiBLVk0gKGByZWNvcmRfc3RlYWxfdGltZWApLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGluIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjFmMzhkODRlMjIxYWI3ZjliZTQ1MjdlYjU2MTYzNzAwYmYxNzY2OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDU6MDM6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggMjdmZTBjZDViMmQ3YS4uMzZjYjdkZWU5ODhjYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtOTM3LDcgJiM0Mzs5MzcsNiBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7CiAKIAkvKiBHdWVzdCBQViBzdGF0ZSAqLwogCXN0cnVjdCB7Ci0JCXU2NCBsYXN0X3N0ZWFsOwogCQlncGFfdCBiYXNlOwogCX0gc3RlYWw7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL0tjb25maWcgYi9hcmNoL2FybTY0L2t2bS9LY29uZmlnCmluZGV4IDQ0OTE1NGY5YTQ4NTIuLmY1ODU1YmZjNjgxYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vS2NvbmZpZwpAQCAtMzQsNiAmIzQzOzM0LDcgQEAgbWVudWNvbmZpZyBLVk0KIAlzZWxlY3QgSEFWRV9LVk1fSVJRX0JZUEFTUwogCXNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU0KIAlzZWxlY3QgSEFWRV9LVk1fVkNQVV9SVU5fUElEX0NIQU5HRQomIzQzOwlzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRQogCXNlbGVjdCBTQ0hFRF9JTkZPCiAJc2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTCiAJc2VsZWN0IEtWTV9HVUVTVF9NRU1GRApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcHZ0aW1lLmMgYi9hcmNoL2FybTY0L2t2bS9wdnRpbWUuYwppbmRleCA0Y2VhYmFhNGMzMGJkLi5hNjdkOTM4NDVkNzk0IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9wdnRpbWUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9wdnRpbWUuYwpAQCAtMTQsNyAmIzQzOzE0LDcgQEAgdm9pZCBrdm1fdXBkYXRlX3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAJdTY0IGJhc2UgPSB2Y3B1LSZndDthcmNoLnN0ZWFsLmJhc2U7Ci0JdTY0IGxhc3Rfc3RlYWwgPSB2Y3B1LSZndDthcmNoLnN0ZWFsLmxhc3Rfc3RlYWw7CiYjNDM7CXU2NCBsYXN0X3N0ZWFsID0gdmNwdS0mZ3Q7bGFzdF9zdGVhbDsKIAl1NjQgb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHB2Y2xvY2tfdmNwdV9zdG9sZW5fdGltZSwgc3RvbGVuX3RpbWUpOwogCXU2NCBzdGVhbCA9IDA7CiAJaW50IGlkeDsKQEAgLTI1LDggJiM0MzsyNSw4IEBAIHZvaWQga3ZtX3VwZGF0ZV9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWR4ID0gc3JjdV9yZWFkX2xvY2soJmFtcDtrdm0tJmd0O3NyY3UpOwogCWlmICgha3ZtX2dldF9ndWVzdChrdm0sIGJhc2UgJiM0Mzsgb2Zmc2V0LCBzdGVhbCkpIHsKIAkJc3RlYWwgPSBsZTY0X3RvX2NwdShzdGVhbCk7Ci0JCXZjcHUtJmd0O2FyY2guc3RlYWwubGFzdF9zdGVhbCA9IFJFQURfT05DRShjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheSk7Ci0JCXN0ZWFsICYjNDM7PSB2Y3B1LSZndDthcmNoLnN0ZWFsLmxhc3Rfc3RlYWwgLSBsYXN0X3N0ZWFsOwomIzQzOwkJdmNwdS0mZ3Q7bGFzdF9zdGVhbCA9IFJFQURfT05DRShjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheSk7CiYjNDM7CQlzdGVhbCAmIzQzOz0gdmNwdS0mZ3Q7bGFzdF9zdGVhbCAtIGxhc3Rfc3RlYWw7CiAJCWt2bV9wdXRfZ3Vlc3Qoa3ZtLCBiYXNlICYjNDM7IG9mZnNldCwgY3B1X3RvX2xlNjQoc3RlYWwpKTsKIAl9CiAJc3JjdV9yZWFkX3VubG9jaygmYW1wO2t2bS0mZ3Q7c3JjdSwgaWR4KTsKQEAgLTYxLDcgJiM0Mzs2MSw3IEBAIGdwYV90IGt2bV9pbml0X3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkgKiBTdGFydCBjb3VudGluZyBzdG9sZW4gdGltZSBmcm9tIHRoZSB0aW1lIHRoZSBndWVzdCByZXF1ZXN0cwogCSAqIHRoZSBmZWF0dXJlIGVuYWJsZWQuCiAJICovCi0JdmNwdS0mZ3Q7YXJjaC5zdGVhbC5sYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7CiYjNDM7CXZjcHUtJmd0O2xhc3Rfc3RlYWwgPSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheTsKIAlrdm1fd3JpdGVfZ3Vlc3RfbG9jayhrdm0sIGJhc2UsICZhbXA7aW5pdF92YWx1ZXMsIHNpemVvZihpbml0X3ZhbHVlcykpOwogCiAJcmV0dXJuIGJhc2U7CmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAyM2NmYmVjZWJiZDc5Li4xNDUxNGEyNWIyNjEzIDEwMDY0NAotLS0gYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTI1Myw3ICYjNDM7MjUzLDYgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2ggewogCS8qIHBhcmF2aXJ0IHN0ZWFsIHRpbWUgKi8KIAlzdHJ1Y3QgewogCQl1NjQgZ3Vlc3RfYWRkcjsKLQkJdTY0IGxhc3Rfc3RlYWw7CiAJCXN0cnVjdCBnZm5fdG9faHZhX2NhY2hlIGNhY2hlOwogCQl1OCAgcHJlZW1wdGVkOwogCX0gc3Q7CmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnCmluZGV4IDE1ZGEyZDg4YzBjMTAuLjQ5OTZlYzljMDdmOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnCkBAIC0yNiw2ICYjNDM7MjYsNyBAQCBjb25maWcgS1ZNCiAJc2VsZWN0IEhBVkVfS1ZNX01TSQogCXNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU0KIAlzZWxlY3QgS1ZNX0NPTU1PTgomIzQzOwlzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRQogCXNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1QKIAlzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkcKIAlzZWxlY3QgS1ZNX01NSU8KZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jCmluZGV4IDRmNThlNmUyY2Y4NjYuLjU2YWU2YjE4ZjhjMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuYwpAQCAtNzczLDcgJiM0Mzs3NzMsNyBAQCBzdGF0aWMgbG9uZyBrdm1fc2F2ZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQlpZiAoIShkYXRhICZhbXA7IEtWTV9TVEVBTF9QSFlTX1ZBTElEKSkKIAkJCXJldHVybiAwOwogCi0JCXZjcHUtJmd0O2FyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwomIzQzOwkJdmNwdS0mZ3Q7bGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwogCQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfU1RFQUxfVVBEQVRFLCB2Y3B1KTsKIAkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jCmluZGV4IGVkOWUwOTJjOTdiYTcuLjcyOGQyOWViYThlMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYwpAQCAtMTg3LDggJiM0MzsxODcsOCBAQCBzdGF0aWMgdm9pZCBrdm1fdXBkYXRlX3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlzbXBfd21iKCk7CiAKIAl1bnNhZmVfZ2V0X3VzZXIoc3RlYWwsICZhbXA7c3QtJmd0O3N0ZWFsLCBvdXQpOwotCXN0ZWFsICYjNDM7PSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheSAtIHZjcHUtJmd0O2FyY2guc3QubGFzdF9zdGVhbDsKLQl2Y3B1LSZndDthcmNoLnN0Lmxhc3Rfc3RlYWwgPSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheTsKJiM0MzsJc3RlYWwgJiM0Mzs9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5IC0gdmNwdS0mZ3Q7bGFzdF9zdGVhbDsKJiM0MzsJdmNwdS0mZ3Q7bGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwogCXVuc2FmZV9wdXRfdXNlcihzdGVhbCwgJmFtcDtzdC0mZ3Q7c3RlYWwsIG91dCk7CiAKIAlzbXBfd21iKCk7CkBAIC0xMjA1LDcgJiM0MzsxMjA1LDcgQEAgc3RhdGljIGludCBrdm1fbG9vbmdhcmNoX3B2dGltZV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAKIAlpZiAoIXJldCkgewogCQl2Y3B1LSZndDthcmNoLnN0Lmd1ZXN0X2FkZHIgPSBncGE7Ci0JCXZjcHUtJmd0O2FyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwomIzQzOwkJdmNwdS0mZ3Q7bGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwogCQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfU1RFQUxfVVBEQVRFLCB2Y3B1KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBhMzA2MDA1NzkyMzFiLi4zMDU4NzUzMDFjMDQyIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0yNzMsNyAmIzQzOzI3Myw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHsKIAkvKiBTQkkgc3RlYWwtdGltZSBhY2NvdW50aW5nICovCiAJc3RydWN0IHsKIAkJZ3BhX3Qgc2htZW07Ci0JCXU2NCBsYXN0X3N0ZWFsOwogCX0gc3RhOwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWcKaW5kZXggZWMyY2VlMGEzOWUwMS4uMWZmMDdhOTA0YTAyNyAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnCkBAIC0yNiw2ICYjNDM7MjYsNyBAQCBjb25maWcgS1ZNCiAJc2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTQogCXNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX0FDUV9SRUwKIAlzZWxlY3QgS1ZNX0NPTU1PTgomIzQzOwlzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRQogCXNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1QKIAlzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkcKIAlzZWxlY3QgS1ZNX01NSU8KZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3N0YS5jIGIvYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfc3RhLmMKaW5kZXggNjBlNTAyOTZhMDA4NS4uOWE3N2QzYmRlN2M3MiAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfc3RhLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfc3RhLmMKQEAgLTE5LDEzICYjNDM7MTksMTMgQEAKIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl92Y3B1X3NiaV9zdGFfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXZjcHUtJmd0O2FyY2guc3RhLnNobWVtID0gSU5WQUxJRF9HUEE7Ci0JdmNwdS0mZ3Q7YXJjaC5zdGEubGFzdF9zdGVhbCA9IDA7CiYjNDM7CXZjcHUtJmd0O2xhc3Rfc3RlYWwgPSAwOwogfQogCiB2b2lkIGt2bV9yaXNjdl92Y3B1X3JlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlncGFfdCBzaG1lbSA9IHZjcHUtJmd0O2FyY2guc3RhLnNobWVtOwotCXU2NCBsYXN0X3N0ZWFsID0gdmNwdS0mZ3Q7YXJjaC5zdGEubGFzdF9zdGVhbDsKJiM0MzsJdTY0IGxhc3Rfc3RlYWwgPSB2Y3B1LSZndDtsYXN0X3N0ZWFsOwogCV9fbGUzMiBfX3VzZXIgKnNlcXVlbmNlX3B0cjsKIAlfX2xlNjQgX191c2VyICpzdGVhbF9wdHI7CiAJX19sZTMyIHNlcXVlbmNlX2xlOwpAQCAtNjcsOCAmIzQzOzY3LDggQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9yZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIAlpZiAoIVdBUk5fT04oZ2V0X3VzZXIoc3RlYWxfbGUsIHN0ZWFsX3B0cikpKSB7CiAJCXN0ZWFsID0gbGU2NF90b19jcHUoc3RlYWxfbGUpOwotCQl2Y3B1LSZndDthcmNoLnN0YS5sYXN0X3N0ZWFsID0gUkVBRF9PTkNFKGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5KTsKLQkJc3RlYWwgJiM0Mzs9IHZjcHUtJmd0O2FyY2guc3RhLmxhc3Rfc3RlYWwgLSBsYXN0X3N0ZWFsOwomIzQzOwkJdmNwdS0mZ3Q7bGFzdF9zdGVhbCA9IFJFQURfT05DRShjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheSk7CiYjNDM7CQlzdGVhbCAmIzQzOz0gdmNwdS0mZ3Q7bGFzdF9zdGVhbCAtIGxhc3Rfc3RlYWw7CiAJCVdBUk5fT04ocHV0X3VzZXIoY3B1X3RvX2xlNjQoc3RlYWwpLCBzdGVhbF9wdHIpKTsKIAl9CiAKQEAgLTExNSw3ICYjNDM7MTE1LDcgQEAgc3RhdGljIGludCBrdm1fc2JpX3N0YV9zdGVhbF90aW1lX3NldF9zaG1lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCXJldHVybiBTQklfRVJSX0lOVkFMSURfQUREUkVTUzsKIAogCXZjcHUtJmd0O2FyY2guc3RhLnNobWVtID0gc2htZW07Ci0JdmNwdS0mZ3Q7YXJjaC5zdGEubGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwomIzQzOwl2Y3B1LSZndDtsYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDY4M2JiOGJmNDNhOTQuLmViZGQ4NTI2YWUxMjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtODcyLDcgJiM0Mzs4NzIsNiBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7CiAJc3RydWN0IHsKIAkJdTggcHJlZW1wdGVkOwogCQl1NjQgbXNyX3ZhbDsKLQkJdTY0IGxhc3Rfc3RlYWw7CiAJCXN0cnVjdCBnZm5fdG9faHZhX2NhY2hlIGNhY2hlOwogCX0gc3Q7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9LY29uZmlnIGIvYXJjaC94ODYva3ZtL0tjb25maWcKaW5kZXggNTM4ZWQxZTgwMzMyNi4uYjJhZWE4MDU4ODQxMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL0tjb25maWcKQEAgLTQwLDYgJiM0Mzs0MCw3IEBAIGNvbmZpZyBLVk1fWDg2CiAJc2VsZWN0IEhBVkVfS1ZNX01TSQogCXNlbGVjdCBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUCiAJc2VsZWN0IEhBVkVfS1ZNX05PX1BPTEwKJiM0MzsJc2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUUKIAlzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUksKIAlzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUCiAJc2VsZWN0IEtWTV9WRklPCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggNzk0NjhkZGZlNDczNi4uOTI3YzhiMWVkODNkMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtMjEyOSw5ICYjNDM7MjEyOSw4IEBAIHN0YXRpYyB2b2lkIHJlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlzbXBfd21iKCk7CiAKIAl1bnNhZmVfZ2V0X3VzZXIoc3RlYWwsICZhbXA7c3QtJmd0O3N0ZWFsLCBvdXQpOwotCXN0ZWFsICYjNDM7PSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheSAtCi0JCXZjcHUtJmd0O2FyY2guc3QubGFzdF9zdGVhbDsKLQl2Y3B1LSZndDthcmNoLnN0Lmxhc3Rfc3RlYWwgPSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheTsKJiM0MzsJc3RlYWwgJiM0Mzs9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5IC0gdmNwdS0mZ3Q7bGFzdF9zdGVhbDsKJiM0MzsJdmNwdS0mZ3Q7bGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwogCXVuc2FmZV9wdXRfdXNlcihzdGVhbCwgJmFtcDtzdC0mZ3Q7c3RlYWwsIG91dCk7CiAKIAl2ZXJzaW9uICYjNDM7PSAxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IDAzYmZjOTI4NjRiNmUuLmZmOWQ0MjNiNmE3YzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTM5OCw2ICYjNDM7Mzk4LDEwIEBAIHN0cnVjdCBrdm1fdmNwdSB7CiAJICovCiAJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbGFzdF91c2VkX3Nsb3Q7CiAJdTY0IGxhc3RfdXNlZF9zbG90X2dlbjsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX1BWX1NURUFMX1RJTUUKJiM0MzsJdTY0IGxhc3Rfc3RlYWw7CiYjNDM7I2VuZGlmCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KaW5kZXggOTZiYWI3MDAyZDM5ZS4uMWRlMTNjMDAxN2U0MyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCkBAIC0xNjQsNiAmIzQzOzE2NCw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gaXJxX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gbW11X3N0cmVzc190ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHJzZXFfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBzdGVhbF90aW1lCiYjNDM7VEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBzdGVhbF90aW1lX2NoYW5nZV9waWQKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gc3lzdGVtX2NvdW50ZXJfb2Zmc2V0X3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gcHJlX2ZhdWx0X21lbW9yeV90ZXN0CiAKQEAgLTIwNCw2ICYjNDM7MjA1LDcgQEAgVEVTVF9HRU5fUFJPR1NfYXJtNjQgJiM0Mzs9IGd1ZXN0X21lbWZkX3Rlc3QKIFRFU1RfR0VOX1BST0dTX2FybTY0ICYjNDM7PSBtbXVfc3RyZXNzX3Rlc3QKIFRFU1RfR0VOX1BST0dTX2FybTY0ICYjNDM7PSByc2VxX3Rlc3QKIFRFU1RfR0VOX1BST0dTX2FybTY0ICYjNDM7PSBzdGVhbF90aW1lCiYjNDM7VEVTVF9HRU5fUFJPR1NfYXJtNjQgJiM0Mzs9IHN0ZWFsX3RpbWVfY2hhbmdlX3BpZAogCiBURVNUX0dFTl9QUk9HU19zMzkwID0gJChURVNUX0dFTl9QUk9HU19DT01NT04pCiBURVNUX0dFTl9QUk9HU19zMzkwICYjNDM7PSBzMzkwL21lbW9wCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMTJkNDkyN2QxYzAxNwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lX2NoYW5nZV9waWQuYwpAQCAtMCwwICYjNDM7MSwyMTYgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogVmVyaWZ5IHRoYXQgS1ZNIHJlc2V0cyBzdGVhbC10aW1lIGFjY291bnRpbmcgd2hlbiBhIHZDUFUgZmQgaXMgcnVuIGZyb20KJiM0MzsgKiBhIGRpZmZlcmVudCBob3N0IFBJRC4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20va3ZtX3BhcmEuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7cHJvY2Vzc29yLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgU1RfR1BBX0JBU0UJCSgxICZsdDsmbHQ7IDMwKQomIzQzOyNkZWZpbmUgU1RfU0FORV9ERUxUQV9OUwkoMVVMTCAmbHQ7Jmx0OyA2MykKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqc3RfZ3ZhOwomIzQzO3N0YXRpYyB1NjQgZ3Vlc3Rfc3RvbGVuX3RpbWU7CiYjNDM7c3RhdGljIHU2NCBtYWluX3N0ZWFsOwomIzQzO3N0YXRpYyB1NjQgdGhyZWFkX3N0ZWFsOwomIzQzOwomIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pCiYjNDM7CiYjNDM7I2RlZmluZSBTVEVBTF9USU1FX1NJWkUJKChzaXplb2Yoc3RydWN0IGt2bV9zdGVhbF90aW1lKSAmIzQzOyA2MykgJmFtcDsgfjYzKQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fc3RlYWxfdGltZSAqc3QgPSBzdF9ndmE7CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC0mZ3Q7c3RlYWwpKTsKJiM0MzsJR1VFU1RfU1lOQygwKTsKJiM0MzsKJiM0MzsJV1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LSZndDtzdGVhbCkpOwomIzQzOwlHVUVTVF9TWU5DKDEpOwomIzQzOwomIzQzOwlXUklURV9PTkNFKGd1ZXN0X3N0b2xlbl90aW1lLCBSRUFEX09OQ0Uoc3QtJmd0O3N0ZWFsKSk7CiYjNDM7CUdVRVNUX0RPTkUoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgc3RlYWxfdGltZV9zdXBwb3J0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJcmV0dXJuIGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX0tWTV9TVEVBTF9USU1FKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc3RlYWxfdGltZV9lbmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJdmNwdV9zZXRfbXNyKHZjcHUsIE1TUl9LVk1fU1RFQUxfVElNRSwKJiM0MzsJCSAgICAgKHVsb25nKXN0X2d2YSB8IEtWTV9NU1JfRU5BQkxFRCk7CiYjNDM7fQomIzQzOwomIzQzOyNlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pCiYjNDM7CiYjNDM7I2RlZmluZSBTVEVBTF9USU1FX1NJWkUJKChzaXplb2Yoc3RydWN0IHN0X3RpbWUpICYjNDM7IDYzKSAmYW1wOyB+NjMpCiYjNDM7CiYjNDM7I2RlZmluZSBQVl9USU1FX1NUCTB4YzUwMDAwMjEKJiM0MzsKJiM0MztzdHJ1Y3Qgc3RfdGltZSB7CiYjNDM7CXUzMiByZXY7CiYjNDM7CXUzMiBhdHRyOwomIzQzOwl1NjQgc3RfdGltZTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhcm1fc21jY2NfcmVzIHJlczsKJiM0MzsJc3RydWN0IHN0X3RpbWUgKnN0OwomIzQzOwomIzQzOwlkb19zbWNjYyhQVl9USU1FX1NULCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAmYW1wO3Jlcyk7CiYjNDM7CUdVRVNUX0FTU0VSVF9ORShyZXMuYTAsIC0xKTsKJiM0MzsJR1VFU1RfQVNTRVJUX0VRKHJlcy5hMCwgKHVsb25nKXN0X2d2YSk7CiYjNDM7CiYjNDM7CXN0ID0gKHN0cnVjdCBzdF90aW1lICopcmVzLmEwOwomIzQzOwlXUklURV9PTkNFKGd1ZXN0X3N0b2xlbl90aW1lLCBSRUFEX09OQ0Uoc3QtJmd0O3N0X3RpbWUpKTsKJiM0MzsJR1VFU1RfU1lOQygwKTsKJiM0MzsKJiM0MzsJV1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LSZndDtzdF90aW1lKSk7CiYjNDM7CUdVRVNUX1NZTkMoMSk7CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC0mZ3Q7c3RfdGltZSkpOwomIzQzOwlHVUVTVF9ET05FKCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHN0ZWFsX3RpbWVfc3VwcG9ydGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgZGV2ID0gewomIzQzOwkJLmdyb3VwID0gS1ZNX0FSTV9WQ1BVX1BWVElNRV9DVFJMLAomIzQzOwkJLmF0dHIgPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0lQQSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuICFfX3ZjcHVfaW9jdGwodmNwdSwgS1ZNX0hBU19ERVZJQ0VfQVRUUiwgJmFtcDtkZXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2VuYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwl1NjQgc3RfaXBhID0gKHVsb25nKXN0X2d2YTsKJiM0MzsJc3RydWN0IGt2bV9kZXZpY2VfYXR0ciBkZXYgPSB7CiYjNDM7CQkuZ3JvdXAgPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0NUUkwsCiYjNDM7CQkuYXR0ciA9IEtWTV9BUk1fVkNQVV9QVlRJTUVfSVBBLAomIzQzOwkJLmFkZHIgPSAodTY0KSZhbXA7c3RfaXBhLAomIzQzOwl9OwomIzQzOwomIzQzOwl2Y3B1X2lvY3RsKHZjcHUsIEtWTV9TRVRfREVWSUNFX0FUVFIsICZhbXA7ZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2Vsc2UKJiM0MzsjZXJyb3IgJiMzNDtzdGVhbF90aW1lX2NoYW5nZV9waWQgaXMgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgYXJjaGl0ZWN0dXJlJiMzNDsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdWNhbGwgdWM7CiYjNDM7CiYjNDM7CXZjcHVfcnVuKHZjcHUpOwomIzQzOwomIzQzOwlzd2l0Y2ggKGdldF91Y2FsbCh2Y3B1LCAmYW1wO3VjKSkgewomIzQzOwljYXNlIFVDQUxMX1NZTkM6CiYjNDM7CWNhc2UgVUNBTExfRE9ORToKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFVDQUxMX0FCT1JUOgomIzQzOwkJUkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlURVNUX0FTU0VSVChmYWxzZSwgJiMzNDtVbmV4cGVjdGVkIGV4aXQ6ICVzJiMzNDssCiYjNDM7CQkJICAgIGV4aXRfcmVhc29uX3N0cih2Y3B1LSZndDtydW4tJmd0O2V4aXRfcmVhc29uKSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgKmRvX3N0ZWFsX3RpbWUodm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJc3RydWN0IHRpbWVzcGVjIHRzLCBzdG9wOwomIzQzOwomIzQzOwljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJmFtcDt0cyk7CiYjNDM7CXN0b3AgPSB0aW1lc3BlY19hZGRfbnModHMsIE1JTl9SVU5fREVMQVlfTlMpOwomIzQzOwomIzQzOwl3aGlsZSAodGltZXNwZWNfdG9fbnModGltZXNwZWNfc3ViKHRzLCBzdG9wKSkgJmx0OyAwKQomIzQzOwkJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZhbXA7dHMpOwomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgKnZjcHVfdGhyZWFkKHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGFyZzsKJiM0MzsKJiM0MzsJcnVuX3ZjcHUodmNwdSk7CiYjNDM7CXN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3QodmNwdS0mZ3Q7dm0sIGd1ZXN0X3N0b2xlbl90aW1lKTsKJiM0MzsJdGhyZWFkX3N0ZWFsID0gZ3Vlc3Rfc3RvbGVuX3RpbWU7CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJcHRocmVhZF9hdHRyX3QgYXR0cjsKJiM0MzsJcHRocmVhZF90IHRocmVhZDsKJiM0MzsJY3B1X3NldF90IGNwdXNldDsKJiM0MzsJbG9uZyBydW5fZGVsYXk7CiYjNDM7CWxvbmcgcnVuX2RlbGF5X2RlbHRhOwomIzQzOwomIzQzOwlrc2Z0X3ByaW50X2hlYWRlcigpOwomIzQzOwlrc2Z0X3NldF9wbGFuKDEpOwomIzQzOwomIzQzOwlDUFVfWkVSTygmYW1wO2NwdXNldCk7CiYjNDM7CUNQVV9TRVQoMCwgJmFtcDtjcHVzZXQpOwomIzQzOwlwdGhyZWFkX2F0dHJfaW5pdCgmYW1wO2F0dHIpOwomIzQzOwlwdGhyZWFkX2F0dHJfc2V0YWZmaW5pdHlfbnAoJmFtcDthdHRyLCBzaXplb2YoY3B1c2V0KSwgJmFtcDtjcHVzZXQpOwomIzQzOwlwdGhyZWFkX3NldGFmZmluaXR5X25wKHB0aHJlYWRfc2VsZigpLCBzaXplb2YoY3B1c2V0KSwgJmFtcDtjcHVzZXQpOwomIzQzOwomIzQzOwl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgZ3Vlc3RfY29kZSk7CiYjNDM7CXZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsCiYjNDM7CQkJCSAgICBTVF9HUEFfQkFTRSwgMSwgMSwgMCk7CiYjNDM7CXZpcnRfbWFwKHZtLCBTVF9HUEFfQkFTRSwgU1RfR1BBX0JBU0UsIDEpOwomIzQzOwomIzQzOwlzdF9ndmEgPSAodm9pZCAqKVNUX0dQQV9CQVNFOwomIzQzOwlzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgc3RfZ3ZhKTsKJiM0MzsJbWVtc2V0KGFkZHJfZ3ZhMmh2YSh2bSwgU1RfR1BBX0JBU0UpLCAwLCBTVEVBTF9USU1FX1NJWkUpOwomIzQzOwomIzQzOwlURVNUX1JFUVVJUkUoc3RlYWxfdGltZV9zdXBwb3J0ZWQodmNwdSkpOwomIzQzOwomIzQzOwlzdGVhbF90aW1lX2VuYWJsZSh2Y3B1KTsKJiM0MzsJcnVuX3ZjcHUodmNwdSk7CiYjNDM7CiYjNDM7CXJ1bl9kZWxheSA9IGdldF9ydW5fZGVsYXkoKTsKJiM0MzsJcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWQsICZhbXA7YXR0ciwgZG9fc3RlYWxfdGltZSwgTlVMTCk7CiYjNDM7CiYjNDM7CXdoaWxlIChnZXRfcnVuX2RlbGF5KCkgLSBydW5fZGVsYXkgJmx0OyBNSU5fUlVOX0RFTEFZX05TKQomIzQzOwkJc2NoZWRfeWllbGQoKTsKJiM0MzsKJiM0MzsJcHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7CiYjNDM7CXJ1bl9kZWxheV9kZWx0YSA9IGdldF9ydW5fZGVsYXkoKSAtIHJ1bl9kZWxheTsKJiM0MzsJVEVTVF9BU1NFUlQocnVuX2RlbGF5X2RlbHRhICZndDs9IE1JTl9SVU5fREVMQVlfTlMsCiYjNDM7CQkgICAgJiMzNDtFeHBlY3RlZCBydW5fZGVsYXkgJmd0Oz0gJWxkLCBnb3QgJWxkJiMzNDssCiYjNDM7CQkgICAgTUlOX1JVTl9ERUxBWV9OUywgcnVuX2RlbGF5X2RlbHRhKTsKJiM0MzsKJiM0MzsJcnVuX3ZjcHUodmNwdSk7CiYjNDM7CXN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3Qodm0sIGd1ZXN0X3N0b2xlbl90aW1lKTsKJiM0MzsJbWFpbl9zdGVhbCA9IGd1ZXN0X3N0b2xlbl90aW1lOwomIzQzOwomIzQzOwlURVNUX0FTU0VSVChtYWluX3N0ZWFsICZndDs9IE1JTl9SVU5fREVMQVlfTlMsCiYjNDM7CQkgICAgJiMzNDtFeHBlY3RlZCBzdGVhbCB0aW1lICZndDs9ICVsZCwgZ290ICUmIzM0O1BSSXU2NCwKJiM0MzsJCSAgICBNSU5fUlVOX0RFTEFZX05TLCBtYWluX3N0ZWFsKTsKJiM0MzsKJiM0MzsJcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWQsIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1KTsKJiM0MzsJcHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7CiYjNDM7CiYjNDM7CVRFU1RfQVNTRVJUKHRocmVhZF9zdGVhbCAmZ3Q7PSBtYWluX3N0ZWFsICZhbXA7JmFtcDsKJiM0MzsJCSAgICB0aHJlYWRfc3RlYWwgLSBtYWluX3N0ZWFsICZsdDsgU1RfU0FORV9ERUxUQV9OUywKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHNhbmUgc3RlYWwgYWZ0ZXIgdkNQVSBwaWQgY2hhbmdlOiAmIzM0OwomIzQzOwkJICAgICYjMzQ7b2xkPSUmIzM0O1BSSXU2NCYjMzQ7LCBuZXc9JSYjMzQ7UFJJdTY0LAomIzQzOwkJICAgIG1haW5fc3RlYWwsIHRocmVhZF9zdGVhbCk7CiYjNDM7CiYjNDM7CWtzZnRfdGVzdF9yZXN1bHRfcGFzcygmIzM0O3N0ZWFsIHRpbWUgcmVtYWlucyBzYW5lIGFjcm9zcyB2Q1BVIHBpZCBjaGFuZ2VcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcHRocmVhZF9hdHRyX2Rlc3Ryb3koJmFtcDthdHRyKTsKJiM0MzsJa3ZtX3ZtX2ZyZWUodm0pOwomIzQzOwlrc2Z0X2ZpbmlzaGVkKCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vS2NvbmZpZyBiL3ZpcnQva3ZtL0tjb25maWcKaW5kZXggYzNjMGVlMjUzZmM3Ny4uZjQyYTNhMGZjNWJhYiAxMDA2NDQKLS0tIGEvdmlydC9rdm0vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9LY29uZmlnCkBAIC04Miw2ICYjNDM7ODIsOSBAQCBjb25maWcgSEFWRV9LVk1fSVJRX0JZUEFTUwogY29uZmlnIEhBVkVfS1ZNX1ZDUFVfUlVOX1BJRF9DSEFOR0UKICAgICAgICBib29sCiAKJiM0Mztjb25maWcgSEFWRV9LVk1fUFZfU1RFQUxfVElNRQomIzQzOyAgICAgICBib29sCiYjNDM7CiBjb25maWcgSEFWRV9LVk1fTk9fUE9MTAogICAgICAgIGJvb2wKIApkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggNjVlYjI2YTA1MjBkOC4uNzg0ZjBkOTQ1YjQ1NiAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC00NDc4LDYgJiM0Mzs0NDc4LDEwIEBAIHN0YXRpYyBsb25nIGt2bV92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCQkJaWYgKHIpCiAJCQkJYnJlYWs7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX1BWX1NURUFMX1RJTUUKJiM0MzsJCQl2Y3B1LSZndDtsYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7CiYjNDM7I2VuZGlmCiYjNDM7CiAJCQluZXdwaWQgPSBnZXRfdGFza19waWQoY3VycmVudCwgUElEVFlQRV9QSUQpOwogCQkJd3JpdGVfbG9jaygmYW1wO3ZjcHUtJmd0O3BpZF9sb2NrKTsKIAkJCXZjcHUtJmd0O3BpZCA9IG5ld3BpZDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg5OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBLVk0gU3RlYWwgVGltZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgYWxsIGFib3V0IGhvdyBLVk0gaGFuZGxlcyAmIzM0O3N0ZWFsIHRpbWUmIzM0OyB3aXRoIHBhcmF2aXJ0dWFsaXphdGlvbi4gSSBuZWVkIHRvIGJyZWFrIHRoaXMgZG93bi4KCkZpcnN0LCBpdCYjMzk7cyBhZGRpbmcgdGhpcyBgQ09ORklHX0hBVkVfS1ZNX1BWX1NURUFMX1RJTUVgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNYWtlcyBzZW5zZSDigJMgdGhpcyBzZWVtcyB0byBiZSB0aGUgdHJpZ2dlciBmb3IgZW5hYmxpbmcgdGhpcyBlbmhhbmNlZCBzdGVhbCB0aW1lIGFjY291bnRpbmcsIGFuZCBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgZm9yIGFybTY0LCBsb29uZ2FyY2gsIHJpc2N2LCBhbmQgeDg2IEtWTS4gR29vZCwgaXQmIzM5O3MgdGFyZ2V0ZWQgdG8gcmVsZXZhbnQgYXJjaGl0ZWN0dXJlcy4KCk5leHQsIGFuZCB0aGlzIGlzIGtleSwgaXTigJlzIG1vdmluZyB0aGUgYGxhc3Rfc3RlYWxgIHZhcmlhYmxlLiBDdXJyZW50bHkgaXQgcmVzaWRlcyBpbiBhIGBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaGAgKG9yIGFyY2gtc3BlY2lmaWMgc3RydWN0KSwgd2hpY2ggaXMgcGxhdGZvcm0tZGVwZW5kZW50LiBCdXQsIGl0JiMzOTtzIG5vdyBiZWluZyBtb3ZlZCB0byB0aGUgY29tbW9uIGBzdHJ1Y3Qga3ZtX3ZjcHVgIGlmIHRoYXQgYENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FYCBpcyBzZXQuIFRoaXMgbWVhbnMgaXQmIzM5O3MgbWFraW5nIHRoZSBhY2NvdW50aW5nIGxvZ2ljIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudC4gSXQgd2lsbCBiZSBlYXNpZXIgdG8gd29yayB3aXRoLiBWZXJ5IHNlbnNpYmxlLiBUaGF0IG1ha2VzIHRoZSB3aG9sZSBzeXN0ZW0gY2xlYW5lci4KCk5vdywgdGhlIGludGVyZXN0aW5nIHBhcnQg4oCTIGhvdyB0aGlzIGBsYXN0X3N0ZWFsYCBnZXRzIHVwZGF0ZWQuIEkgbmVlZCB0byBkaWcgaW50byBgdmlydC9rdm0va3ZtX21haW4uY2AgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGxvZ2ljIGhhcHBlbnMuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUgdXBkYXRlIGhhcHBlbnMgd2hlbiBgS1ZNX1JVTmAgaXMgY2FsbGVkLCBhbmQsIGNydWNpYWxseSwgd2hlbiB0aGUgUHJvY2VzcyBJRCAoUElEKSBjaGFuZ2VzIGluc2lkZSB0aGUgYGt2bV92Y3B1X2lvY3RsYCBmdW5jdGlvbiB3aGlsZSBoYW5kbGluZyBgS1ZNX1JVTmAgdGhyb3VnaCBQSUQgY2hlY2tzLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoYXQmIzM5O3MgaW1wbGVtZW50ZWQuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCB0aGF0IGZpbGUgYW5kIGNoZWNrIGFyb3VuZCBsaW5lIDQ0NzggdG8gc2VlIHRoZSBkZXRhaWxzIG9mIHRoZSBsb2dpYy4gSG9wZWZ1bGx5LCBpdCBpcyBwcmV0dHkgc2ltcGxlLCBhbmQgSSBjYW4gcXVpY2tseSBncmFzcCB3aGF0IGlzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ0NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDQ2MDpcdFx0Y2FzZSBLVk1fUlVOOiB7XG40NDYxOlx0XHRcdHN0cnVjdCBwaWQgKm9sZHBpZDtcbjQ0NjI6XHRcdFx0ciA9IC1FSU5WQUw7XG40NDYzOlx0XHRcdGlmIChhcmcpXG40NDY0Olx0XHRcdFx0Z290byBvdXQ7XG40NDY1Olx0XG40NDY2Olx0XHRcdC8qXG40NDY3Olx0XHRcdCAqIE5vdGUsIHZjcHUtXHUwMDNlcGlkIGlzIHByaW1hcmlseSBwcm90ZWN0ZWQgYnkgdmNwdS1cdTAwM2VtdXRleC4gVGhlXG40NDY4Olx0XHRcdCAqIGRlZGljYXRlZCByL3cgbG9jayBhbGxvd3Mgb3RoZXIgdGFza3MsIGUuZy4gb3RoZXIgdkNQVXMsIHRvXG40NDY5Olx0XHRcdCAqIHJlYWQgdmNwdS1cdTAwM2VwaWQgd2hpbGUgdGhpcyB2Q1BVIGlzIGluIEtWTV9SVU4sIGUuZy4gdG8geWllbGRcbjQ0NzA6XHRcdFx0ICogZGlyZWN0bHkgdG8gdGhpcyB2Q1BVXG40NDcxOlx0XHRcdCAqL1xuNDQ3MjpcdFx0XHRvbGRwaWQgPSB2Y3B1LVx1MDAzZXBpZDtcbjQ0NzM6XHRcdFx0aWYgKHVubGlrZWx5KG9sZHBpZCAhPSB0YXNrX3BpZChjdXJyZW50KSkpIHtcbjQ0NzQ6XHRcdFx0XHQvKiBUaGUgdGhyZWFkIHJ1bm5pbmcgdGhpcyBWQ1BVIGNoYW5nZWQuICovXG40NDc1Olx0XHRcdFx0c3RydWN0IHBpZCAqbmV3cGlkO1xuNDQ3NjpcdFxuNDQ3NzpcdFx0XHRcdHIgPSBrdm1fYXJjaF92Y3B1X3J1bl9waWRfY2hhbmdlKHZjcHUpO1xuNDQ3ODpcdFx0XHRcdGlmIChyKVxuNDQ3OTpcdFx0XHRcdFx0YnJlYWs7XG40NDgwOlx0XG40NDgxOlx0I2lmZGVmIENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FXG40NDgyOlx0XHRcdFx0dmNwdS1cdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbjQ0ODM6XHQjZW5kaWZcbjQ0ODQ6XHRcbjQ0ODU6XHRcdFx0XHRuZXdwaWQgPSBnZXRfdGFza19waWQoY3VycmVudCwgUElEVFlQRV9QSUQpO1xuNDQ4NjpcdFx0XHRcdHdyaXRlX2xvY2soXHUwMDI2dmNwdS1cdTAwM2VwaWRfbG9jayk7XG40NDg3Olx0XHRcdFx0dmNwdS1cdTAwM2VwaWQgPSBuZXdwaWQ7XG40NDg4Olx0XHRcdFx0d3JpdGVfdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNlcGlkX2xvY2spO1xuNDQ4OTpcdFxuNDQ5MDpcdFx0XHRcdHB1dF9waWQob2xkcGlkKTtcbjQ0OTE6XHRcdFx0fVxuNDQ5MjpcdFx0XHR2Y3B1LVx1MDAzZXdhbnRzX3RvX3J1biA9ICFSRUFEX09OQ0UodmNwdS1cdTAwM2VydW4tXHUwMDNlaW1tZWRpYXRlX2V4aXRfX3Vuc2FmZSk7XG40NDkzOlx0XHRcdHIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bih2Y3B1KTtcbjQ0OTQ6XHRcdFx0dmNwdS1cdTAwM2V3YW50c190b19ydW4gPSBmYWxzZTtcbjQ0OTU6XHRcbjQ0OTY6XHRcdFx0LypcbjQ0OTc6XHRcdFx0ICogRklYTUU6IFJlbW92ZSB0aGlzIGhhY2sgb25jZSBhbGwgS1ZNIGFyY2hpdGVjdHVyZXNcbjQ0OTg6XHRcdFx0ICogc3VwcG9ydCB0aGUgZ2VuZXJpYyBUSUYgYml0cywgaS5lLiBhIGRlZGljYXRlZCBUSUZfUlNFUS5cbjQ0OTk6XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExOTIKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBWQ1BVIFN0ZWFsIFRpbWUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgaG93IEtWTSB0cmFja3MgJiMzNDtzdGVhbCB0aW1lJiMzNDsgd2l0aGluIGEgdmlydHVhbCBDUFUgKFZDUFUpLiBUaGUgdHJpZ2dlciBzZWVtcyB0byBiZSB3aGVuIHRoZSBjdXJyZW50bHkgcnVubmluZyB0aHJlYWQgZm9yIGEgVkNQVSBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgd2hlbiBgb2xkcGlkYCAodGhlIHByZXZpb3VzIHRocmVhZCYjMzk7cyBQSUQpIGRpZmZlcnMgZnJvbSBgdGFza19waWQoY3VycmVudClgIHdpdGhpbiB0aGUgYEtWTV9SVU5gIG9wZXJhdGlvbi4gSW4gdGhhdCBzY2VuYXJpbywgYHZjcHUtJmd0O2xhc3Rfc3RlYWxgIGdldHMgcmVzZXQgdG8gdGhlIHZhbHVlIG9mIGBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheWAuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgaW5pdGlhbGl6YXRpb24gcG9pbnQgZm9yIHRoZSBuZXcgVkNQVSBydW4uCgpNeSBpbnRlcmVzdCBpcyBwaXF1ZWQgYnkgaG93IGBsYXN0X3N0ZWFsYCBpcyB0aGVuICp1c2VkKi4gSXQgbG9va3MgbGlrZSB0aGUgY3JpdGljYWwgZnVuY3Rpb24gaGVyZSBpcyBgcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KWAgbG9jYXRlZCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gVGhhdCBmdW5jdGlvbiAqbXVzdCogYmUgdGhlIHBsYWNlIHdoZXJlIGB2Y3B1LSZndDtsYXN0X3N0ZWFsYCBpcyB1c2VkIHRvIGFjY3VtdWxhdGUgdGltZS4gTmVlZCB0byBzZWUgaG93IHRoYXQgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgY29udHJpYnV0ZXMgdG8gdGhlIGZpbmFsIG1lYXN1cmVtZW50LiBCYXNlZCBvbiB0aGUgZmlsZSBwYXRoLCBJIHNob3VsZCBsb29rIGFyb3VuZCBsaW5lIDIxMjkgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxMTU6XHRcdFx0aWYgKCF1c2VyX2FjY2Vzc19iZWdpbihzdCwgc2l6ZW9mKCpzdCkpKVxuMjExNjpcdFx0XHRcdHJldHVybjtcbjIxMTc6XHRcbjIxMTg6XHRcdFx0dW5zYWZlX3B1dF91c2VyKDAsIFx1MDAyNnN0LVx1MDAzZXByZWVtcHRlZCwgb3V0KTtcbjIxMTk6XHRcdFx0dmNwdS1cdTAwM2VhcmNoLnN0LnByZWVtcHRlZCA9IDA7XG4yMTIwOlx0XHR9XG4yMTIxOlx0XG4yMTIyOlx0XHR1bnNhZmVfZ2V0X3VzZXIodmVyc2lvbiwgXHUwMDI2c3QtXHUwMDNldmVyc2lvbiwgb3V0KTtcbjIxMjM6XHRcdGlmICh2ZXJzaW9uIFx1MDAyNiAxKVxuMjEyNDpcdFx0XHR2ZXJzaW9uICYjNDM7PSAxOyAgLyogZmlyc3QgdGltZSB3cml0ZSwgcmFuZG9tIGp1bmsgKi9cbjIxMjU6XHRcbjIxMjY6XHRcdHZlcnNpb24gJiM0Mzs9IDE7XG4yMTI3Olx0XHR1bnNhZmVfcHV0X3VzZXIodmVyc2lvbiwgXHUwMDI2c3QtXHUwMDNldmVyc2lvbiwgb3V0KTtcbjIxMjg6XHRcbjIxMjk6XHRcdHNtcF93bWIoKTtcbjIxMzA6XHRcbjIxMzE6XHRcdHVuc2FmZV9nZXRfdXNlcihzdGVhbCwgXHUwMDI2c3QtXHUwMDNlc3RlYWwsIG91dCk7XG4yMTMyOlx0XHRzdGVhbCAmIzQzOz0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSAtIHZjcHUtXHUwMDNlbGFzdF9zdGVhbDtcbjIxMzM6XHRcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4yMTM0Olx0XHR1bnNhZmVfcHV0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuMjEzNTpcdFxuMjEzNjpcdFx0dmVyc2lvbiAmIzQzOz0gMTtcbjIxMzc6XHRcdHVuc2FmZV9wdXRfdXNlcih2ZXJzaW9uLCBcdTAwMjZzdC1cdTAwM2V2ZXJzaW9uLCBvdXQpO1xuMjEzODpcdFxuMjEzOTpcdCBvdXQ6XG4yMTQwOlx0XHR1c2VyX2FjY2Vzc19lbmQoKTtcbjIxNDE6XHQgZGlydHk6XG4yMTQyOlx0XHRtYXJrX3BhZ2VfZGlydHlfaW5fc2xvdCh2Y3B1LVx1MDAzZWt2bSwgZ2hjLVx1MDAzZW1lbXNsb3QsIGdwYV90b19nZm4oZ2hjLVx1MDAzZWdwYSkpO1xuMjE0MzpcdH1cbjIxNDQ6XHRcbjIxNDU6XHRzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2Nhbl9td2FpdF9pbl9ndWVzdCh2b2lkKVxuMjE0NjpcdHtcbjIxNDc6XHRcdHJldHVybiBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTVdBSVQpIFx1MDAyNlx1MDAyNlxuMjE0ODpcdFx0XHQhYm9vdF9jcHVfaGFzX2J1ZyhYODZfQlVHX01PTklUT1IpIFx1MDAyNlx1MDAyNlxuMjE0OTpcdFx0XHRib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVJBVCk7XG4yMTUwOlx0fVxuMjE1MTpcdFxuMjE1MjpcdHN0YXRpYyB1NjQga3ZtX2dldF9hbGxvd2VkX2Rpc2FibGVfZXhpdHModm9pZClcbjIxNTM6XHR7XG4yMTU0Olx0XHR1NjQgciA9IEtWTV9YODZfRElTQUJMRV9FWElUU19QQVVTRTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI3NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBFdmFsdWF0aW9uOiBLVk0gUElEIE1pZ3JhdGlvbi9TdGVhbCBUaW1lIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGxvb2tzIGxpa2UgYSBwcm9taXNpbmcgYXJlYSBmb3IgZnV6emluZy4gVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIHdoaWNoIGlzIGNydWNpYWwsIGFuZCB0aGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGtleSBLVk0gZmlsZXM6IGBrdm1fbWFpbi5jYCwgYHg4Ni5jYCwgYSBgS2NvbmZpZ2AgZmlsZSwgYW5kIHNldmVyYWwgaGVhZGVyIGZpbGVzLiBBZGRpdGlvbmFsbHksIGl0IGFmZmVjdHMgYXJtNjQsIGxvb25nYXJjaCwgYW5kIHJpc2N2IGZpbGVzLiBUaGF0IGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbiDigJMgYnJvYWRlciBpbXBhY3Qgb2Z0ZW4gbWVhbnMgYnJvYWRlciBmdXp6aW5nIHN1cmZhY2UuIFBsdXMsIHRoZSBpbmNsdXNpb24gb2YgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8qYCBzdWdnZXN0cyB0aGlzIGlzIGFscmVhZHkgb24gc29tZW9uZSYjMzk7cyByYWRhciBmb3IgdGVzdGluZywgbWFraW5nIGl0IGV2ZW4gbW9yZSByZWxldmFudC4KCk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSBjb2RlPyBTZWN0aW9uIDEsIDIsIGFuZCAzIGhlbHAgY2xhcmlmeSB0aGF0LiBLVk0gaXMgZnVsbHkgc3VwcG9ydGVkIG9uIGFtZDY0IHdpdGhpbiBRRU1VIGFuZCBzeXprYWxsZXIsIHdoaWNoIG1lYW5zIHdlIGhhdmUgZXhpc3RpbmcgaW5mcmFzdHJ1Y3R1cmUgdG8gcmVhY2ggdGhpcyBjb2RlLiBTeXprYWxsZXImIzM5O3MgS1ZNIGRlc2NyaXB0aW9ucyBhbmQgaW9jdGxzIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBhdHRhY2sgc3VyZmFjZS4KClRoZSBjb3JlIHN1YnN5c3RlbSBoZXJlIGlzIEtWTSB2aXJ0dWFsaXphdGlvbi4gVGhlIHBhdGNoIGl0c2VsZiBpcyBhZGRyZXNzaW5nIGEgYnVnIHJlbGF0ZWQgdG8gdkNQVSBQSUQgbWlncmF0aW9uLiBBcHBhcmVudGx5LCB3aGVuIGEgdkNQVSBydW5zIG9uIGEgZGlmZmVyZW50IGhvc3QgdGhyZWFkIG9yIFBJRCwgdGhlIHN0ZWFsIHRpbWUgY2FsY3VsYXRpb25zIHdlcmUgYmVpbmcgY29ycnVwdGVkIGJlY2F1c2UgYGxhc3Rfc3RlYWxgIHdhc24mIzM5O3QgYmVpbmcgdXBkYXRlZCBjb3JyZWN0bHksIGxlYWRpbmcgdG8gcG90ZW50aWFsbHkgbWFzc2l2ZSBkZWx0YXMgb3IgdW5kZXJmbG93cy4gVGhlIGZpeCBpbnZvbHZlcyByZWZhY3RvcmluZyBgbGFzdF9zdGVhbGAgaW50byB0aGUgZ2VuZXJpYyBga3ZtX3ZjcHVgIHN0cnVjdCBhbmQgcmVzZXR0aW5nIGl0IHdpdGhpbiBga3ZtX3ZjcHVfaW9jdGwoKWAgZHVyaW5nIFBJRCBjaGFuZ2VzLiBUaGlzIGltcGxpZXMgdGhhdCB0aGUgY29kZSBpcyBkZWFsaW5nIHdpdGggdkNQVSBzY2hlZHVsaW5nIGFuZCBjb250ZXh0IHN3aXRjaGluZywgYSBrbm93biBhcmVhIG9mIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LgoKVGhlIGV4ZWN1dGFibGUgY29kZSBtb2RpZmllZCBpbmNsdWRlcyBga3ZtX3ZjcHVfaW9jdGxgIGFuZCBgcmVjb3JkX3N0ZWFsX3RpbWVgLCB3aGljaCBhcmUgaW1wb3J0YW50IHRvIEtWTSBvcGVyYXRpb24sIGFuZCB0aGV5IGFyZSB4ODYvZ2VuZXJpYy4KCkdpdmVuIHRoZSByZWFjaGFiaWxpdHksIHRoZSBjcml0aWNhbCBjb3JlIHN1YnN5c3RlbSwgYW5kIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgYWZmZWN0ZWQsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgZml4IGRpcmVjdGx5IHJlbGF0ZXMgdG8gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBpbnRlZ2VyIG92ZXJmbG93cy91bmRlcmZsb3dzIGluIHRpbWluZyBjYWxjdWxhdGlvbnMuIFdlIHdpbGwgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCDigJMgc3BlY2lmaWNhbGx5IGBLVk1gIChvciBgS1ZNX0lOVEVMYC9gS1ZNX0FNRGAsIGBLVk1fWDg2YCkuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBhbmQgYHZpcnQva3ZtL0tjb25maWdgIHRvIGNvbmZpcm0gdGhvc2UgY29uZmlnIGZsYWdzLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCB0YXJnZXQgZm9yIGZvY3VzZWQgZnV6emluZyBjYW1wYWlnbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTM6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTQtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjcwOmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MS1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4NDpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODUtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTc6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTgtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA3LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA4OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOS0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjM9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTM0LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM1OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDc6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0OC1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ni1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Nzpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1OC1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3NDpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTc1LVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4My1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4NDpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTg1LVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NTpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk2LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDk6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxMC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTctXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTg6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOS1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzQ6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNS1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS1ZNIFN0ZWFsIFRpbWUgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIEtWTSBzdGVhbCB0aW1lIHNpdHVhdGlvbi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBDT05GSUdfS1ZNYCBhbmQsIG9mIGNvdXJzZSwgdGhlIHZlbmRvci1zcGVjaWZpYyBvcHRpb25zIGxpa2UgYENPTkZJR19LVk1fSU5URUxgIGFuZCBgQ09ORklHX0tWTV9BTURgLiBUaGVuLCBJJiMzOTtsbCB0cmFjZSB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXMsIG1ha2luZyBzdXJlIGBLVk1fWDg2YCBpcyBjb3JyZWN0bHkgc2VsZWN0aW5nIGBIQVZFX0tWTV9QVl9TVEVBTF9USU1FYC4KCkFoLCBoZXJlJiMzOTtzIHRoZSBsaW5rYWdlLCBpbiBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBgY29uZmlnIEtWTV9YODZgIGRvZXMgaW5kZWVkIGBzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRWAuIExldCYjMzk7cyBiZSBzdXJlIG9mIHRoZSBuZXN0aW5nLiBgS1ZNX1g4NmAgaXRzZWxmIGlzIGRlcGVuZGVudCBvbiB0aGUgYnJvYWRlciBLVk0sIHZpYSB0aGUgZGVwZW5kZW5jeSBgZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKWAuIFJpZ2h0LCBzbyBgS1ZNYCBpcyB0aGUgcGFyZW50LCBhbmQgdGhhdCBjb25maWd1cmF0aW9uIGlzIGl0c2VsZiB1bmRlciBgaWYgVklSVFVBTElaQVRJT05gLiBTbywgdG8gYmUgY2xlYXIsIGl0JiMzOTtzIGBLVk1gLCBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGAgKG9yIGBLVk1fWDg2YCkgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQuCgpOb3csIHRoZSBjcnVjaWFsIHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cuIEkmIzM5O2xsIHNlYXJjaCB0aGUgeDg2IEtWTSBjb2RlIHRvIGlkZW50aWZ5IHRoZSBsb2NhdGlvbnMgd2hlcmUgYHJlY29yZF9zdGVhbF90aW1lYCBpcyBhY3R1YWxseSBjYWxsZWQuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBlbnRyeXBvaW50cyBhbmQgY29udGV4dCBvZiB0aGUgbWVhc3VyZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWNvcmRfc3RlYWxfdGltZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTIwNDY9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXJ2aWNlX2xvY2FsX3RsYl9mbHVzaF9yZXF1ZXN0cyk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMjA0Ny1cbmFyY2gveDg2L2t2bS94ODYuYzoyMDQ4OnN0YXRpYyB2b2lkIHJlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ODYuYy0yMDQ5LXtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODA1MD1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04MTQwLVx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpKVxuYXJjaC94ODYva3ZtL3g4Ni5jOjgxNDE6XHRcdFx0cmVjb3JkX3N0ZWFsX3RpbWUodmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtODE0Mi1cdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfUE1VLCB2Y3B1KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNzkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzIGZvciBTdGVhbCBUaW1lIEludmVzdGlnYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUga2V5IGZvY3VzIHN5bWJvbHMgdG8gcGlucG9pbnQgd2l0aGluIHRoZSBjb2RlIGZvciB0aGlzIHN0ZWFsIHRpbWUgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bSB0aGlua2luZy4uLgoKKiAgIGByZWNvcmRfc3RlYWxfdGltZWAganVtcHMgb3V0IGltbWVkaWF0ZWx5LCBlc3BlY2lhbGx5IHNpbmNlIGl0JiMzOTtzIGdvdCBhIG1vZGlmaWNhdGlvbiBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3IuCgoqICAgVGhlbiB0aGVyZSYjMzk7cyBga3ZtX3ZjcHVfaW9jdGxgIHdoaWNoIGhhcyBjaGFuZ2VzIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCwgYW5kIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIEtWTV9SVU4gaGFuZGxpbmcgYW5kIFBJRCBjaGFuZ2VzLiBJbnRyaWd1aW5nLi4uY291bGQgYmUgcmVsYXRlZCB0byBjb250ZXh0IHN3aXRjaGluZyBvciBhY2NvdW50aW5nLgoKKiAgIGB2Y3B1X2VudGVyX2d1ZXN0YCBpcyBhbm90aGVyIGdvb2QgY2FuZGlkYXRlLiBJdCYjMzk7cyBsaXN0ZWQgYXMgYSAqY2FsbGVyKiBvZiBgcmVjb3JkX3N0ZWFsX3RpbWVgLCB3aGljaCBtYWtlcyBpdCBsaWtlbHkgYSBrZXkgYXJlYSB0byB1bmRlcnN0YW5kIHRoZSB0aW1pbmcgZmxvdy4KCiogICBOb3csIGJleW9uZCB0aGUgb2J2aW91cy4uLnNob3VsZCBJIGJlIGxvb2tpbmcgYXQgYGt2bV9zZXRfbXNyX2NvbW1vbmA/IElzIHRoZXJlIHNvbWUgbWFnaWMgc2V0dGluZyBoZXJlIHRvIGVuYWJsZSBvciBkaXNhYmxlIHN0ZWFsIHRpbWU/IEkmIzM5O20gYmV0dGluZyB0aGVyZSBpcy4gSSBzaG91bGQgZGVmaW5pdGVseSBjaGVjayB0aGF0IG9uZSwgYWxvbmcgd2l0aCBob3cgc3RlYWwgdGltZSBpcyBpbml0aWFsaXplZCBhbmQgZW5hYmxlZCBvbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gTGV0JiMzOTtzIHRyYWNlIGl0IGFuZCBzZWUgaG93IGl0IHdvcmtzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNU1JfS1ZNX1NURUFMX1RJTUUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tc3JzLmM9MjU0PXN0YXRpYyBjb25zdCB1MzIgZW11bGF0ZWRfbXNyc19hbGxbXSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTI3Ny1cbmFyY2gveDg2L2t2bS9tc3JzLmM6Mjc4Olx0TVNSX0tWTV9BU1lOQ19QRl9FTiwgTVNSX0tWTV9TVEVBTF9USU1FLFxuYXJjaC94ODYva3ZtL21zcnMuYy0yNzktXHRNU1JfS1ZNX1BWX0VPSV9FTiwgTVNSX0tWTV9BU1lOQ19QRl9JTlQsIE1TUl9LVk1fQVNZTkNfUEZfQUNLLFxuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmM9MTQ0Mj1pbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE3MDctXHRcdGJyZWFrO1xuYXJjaC94ODYva3ZtL21zcnMuYzoxNzA4Olx0Y2FzZSBNU1JfS1ZNX1NURUFMX1RJTUU6XG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE3MDktXHRcdGlmICghZ3Vlc3RfcHZfaGFzKHZjcHUsIEtWTV9GRUFUVVJFX1NURUFMX1RJTUUpKVxuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmM9MTg5OT1pbnQga3ZtX2dldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTIwNzYtXHRcdGJyZWFrO1xuYXJjaC94ODYva3ZtL21zcnMuYzoyMDc3Olx0Y2FzZSBNU1JfS1ZNX1NURUFMX1RJTUU6XG5hcmNoL3g4Ni9rdm0vbXNycy5jLTIwNzgtXHRcdGlmICghZ3Vlc3RfcHZfaGFzKHZjcHUsIEtWTV9GRUFUVVJFX1NURUFMX1RJTUUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI5NwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gTVNSIEhhbmRsaW5nIGluIEtWTSBmb3IgeDg2KioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IE1TUnMgYXJlIGJlaW5nIG1hbmFnZWQgd2l0aGluIHRoZSBLVk0gaHlwZXJ2aXNvciwgc3BlY2lmaWNhbGx5IGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGFyY2gveDg2L2t2bS9tc3JzLmNgLCBhbmQgSSYjMzk7bSB0YXJnZXRpbmcgYXJvdW5kIGxpbmUgMTcwOC4gVGhhdCBhcmVhIHVzdWFsbHkgaG9sZHMgY3JpdGljYWwgbG9naWMgZm9yIGVpdGhlciBhIHNwZWNpZmljIE1TUiYjMzk7cyByZWFkL3dyaXRlIHBhdGggb3Igc29tZSBrZXkgZGF0YSBzdHJ1Y3R1cmUgcmVsYXRlZCB0byBNU1IgYWNjZXNzLiBJIHN1c3BlY3QgaXQmIzM5O3MgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgdG8gdW5yYXZlbCB3aGF0ZXZlciBJJiMzOTttIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBIb3BlZnVsbHksIHRoaXMgaXMgdGhlIGFyZWEgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmV0dGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tc3JzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3MDU6XHRcdFx0XHRrdm1fY2hlY2tfYXN5bmNfcGZfY29tcGxldGlvbih2Y3B1KTtcbjE3MDY6XHRcdFx0fVxuMTcwNzpcdFx0XHRicmVhaztcbjE3MDg6XHRcdGNhc2UgTVNSX0tWTV9TVEVBTF9USU1FOlxuMTcwOTpcdFx0XHRpZiAoIWd1ZXN0X3B2X2hhcyh2Y3B1LCBLVk1fRkVBVFVSRV9TVEVBTF9USU1FKSlcbjE3MTA6XHRcdFx0XHRyZXR1cm4gS1ZNX01TUl9SRVRfVU5TVVBQT1JURUQ7XG4xNzExOlx0XG4xNzEyOlx0XHRcdGlmICh1bmxpa2VseSghc2NoZWRfaW5mb19vbigpKSlcbjE3MTM6XHRcdFx0XHRyZXR1cm4gMTtcbjE3MTQ6XHRcbjE3MTU6XHRcdFx0aWYgKGRhdGEgXHUwMDI2IEtWTV9TVEVBTF9SRVNFUlZFRF9NQVNLKVxuMTcxNjpcdFx0XHRcdHJldHVybiAxO1xuMTcxNzpcdFxuMTcxODpcdFx0XHR2Y3B1LVx1MDAzZWFyY2guc3QubXNyX3ZhbCA9IGRhdGE7XG4xNzE5Olx0XG4xNzIwOlx0XHRcdGlmICghKGRhdGEgXHUwMDI2IEtWTV9NU1JfRU5BQkxFRCkpXG4xNzIxOlx0XHRcdFx0YnJlYWs7XG4xNzIyOlx0XG4xNzIzOlx0XHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpO1xuMTcyNDpcdFxuMTcyNTpcdFx0XHRicmVhaztcbjE3MjY6XHRcdGNhc2UgTVNSX0tWTV9QVl9FT0lfRU46XG4xNzI3Olx0XHRcdGlmICghZ3Vlc3RfcHZfaGFzKHZjcHUsIEtWTV9GRUFUVVJFX1BWX0VPSSkpXG4xNzI4Olx0XHRcdFx0cmV0dXJuIEtWTV9NU1JfUkVUX1VOU1VQUE9SVEVEO1xuMTcyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkyMAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBLVk0gU3RvbGVuIFRpbWUgUmV2aWV3KioKCk9rYXksIHRpbWUgdG8gdGhvcm91Z2hseSBhdWRpdCB0aGVzZSBzdG9sZW4gdGltZSBpbXBsZW1lbnRhdGlvbnMgYWNyb3NzIGFyY2hpdGVjdHVyZXMuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSB4ODYgYW5kIGdlbmVyaWMgeDg2IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkLiBJIHNlZSB0d28gbWFpbiBwbGF5ZXJzIGhlcmU6IGBrdm1fdmNwdV9pb2N0bGAgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgLCBzcGVjaWZpY2FsbHkgdW5kZXIgYEtWTV9SVU5gIHdoZW4gdGhlIG9sZCBwcm9jZXNzIElEIGRpZmZlcnMgZnJvbSB0aGUgY3VycmVudCBvbmUsIHdoaWNoIHJlc2V0cyBgdmNwdS0mZ3Q7bGFzdF9zdGVhbGAgdXNpbmcgdGhlIGBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheWAgdmFsdWUsIGFuZCBgcmVjb3JkX3N0ZWFsX3RpbWVgIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLCB3aGljaCBhY3R1YWxseSB1cGRhdGVzIHRoZSAmIzM5O3N0ZWFsJiMzOTsgdGltZSBiYXNlZCBvbiB0aGF0IGB2Y3B1LSZndDtsYXN0X3N0ZWFsYCBhbmQgdGhlbiB1cGRhdGVzIGB2Y3B1LSZndDtsYXN0X3N0ZWFsYCB3aXRoIHRoYXQgc2FtZSBjdXJyZW50IHNjaGVkIGluZm8uIEdvdCBpdC4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciBtb2RpZmljYXRpb25zIGluIG90aGVyIGFyY2hpdGVjdHVyZXMuIExvb2tzIGxpa2U6CgoqICAgRm9yIGFybTY0LCBgYXJjaC9hcm02NC9rdm0vcHZ0aW1lLmNgIGhhcyB0aGVzZSB0d28gbW9kaWZpZWQgZnVuY3Rpb25zIGBrdm1fdXBkYXRlX3N0b2xlbl90aW1lYCwgYW5kIGBrdm1faW5pdF9zdG9sZW5fdGltZWAuCiogICBMb29uZ2FyY2ggaGFzIGBhcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jYDogYGt2bV9zYXZlX25vdGlmeWAgYW5kIGBhcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jYDogYGt2bV91cGRhdGVfc3RvbGVuX3RpbWVgLCBga3ZtX2xvb25nYXJjaF9wdnRpbWVfc2V0X2F0dHJgCiogICBBbmQgZmluYWxseSwgcmlzY3YgaGFzIHNldmVyYWwsIGZvdW5kIGluIGBhcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9zdGEuY2A6IGBrdm1fcmlzY3ZfdmNwdV9zYmlfc3RhX3Jlc2V0YCwgYGt2bV9yaXNjdl92Y3B1X3JlY29yZF9zdGVhbF90aW1lYCwgYGt2bV9zYmlfc3RhX3N0ZWFsX3RpbWVfc2V0X3NobWVtYAoKRm9yIGFtZDY0LCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBpdCYjMzk7cyBgcmVjb3JkX3N0ZWFsX3RpbWVgIGFuZCBga3ZtX3ZjcHVfaW9jdGxgIHRoYXQgYXJlIHRoZSBwcmltYXJ5IGNvbmNlcm5zLiBBbHNvLCBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZSBgdmNwdV9lbnRlcl9ndWVzdGAgZnVuY3Rpb24sIGFzIGl0JiMzOTtzIHRoZSB0cmlnZ2VyIGZvciBgcmVjb3JkX3N0ZWFsX3RpbWVgLgoKQWxyaWdodCwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHJlbGF0ZWQgS2NvbmZpZyBvcHRpb25zLiBPYnZpb3VzbHksIHdlIGhhdmUgYEtWTWAsIGBLVk1fSU5URUxgLCBhbmQgYEtWTV9BTURgLiBOb3csIEkgd2FudCB0byBjb25maXJtIHRoYXQgYEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVgIGlzIGluZGVlZCBzZWxlY3RlZCBieSBgS1ZNX1g4NmAuIFdlIGFsc28gbmVlZCBgU0NIRURfSU5GT2AgYmVjYXVzZSB0aGF0JiMzOTtzIHdoYXQgY29udGFpbnMgYHJ1bl9kZWxheWAsIHNvIEkgbmVlZCB0byBnbyBsb29rIHVwIHRoZSBLY29uZmlnIGZvciBgU0NIRURfSU5GT2AgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBzZXQgdXAgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTQ0hFRF9JTkZPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz02OTQ9Y29uZmlnIFRBU0tfREVMQVlfQUNDVFxuLS1cbmluaXQvS2NvbmZpZy02OTYtXHRkZXBlbmRzIG9uIFRBU0tTVEFUU1xuaW5pdC9LY29uZmlnOjY5NzpcdHNlbGVjdCBTQ0hFRF9JTkZPXG5pbml0L0tjb25maWctNjk4LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODEwMQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgU2NoZWR1bGluZyBTdGF0aXN0aWNzIE9wdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gbmFpbCBkb3duIGhvdyB0byBnZXQgdGhlIHJpZ2h0IHNjaGVkdWxpbmcgc3RhdHMuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2gga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZXZlbiBhdmFpbGFibGUgdG8gbWUuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBjaGVja2luZyBgU0NIRURTVEFUU2AsIHRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJZiB0aGF0IGRvZXNuJiMzOTt0IHByb3ZpZGUgd2hhdCBJIG5lZWQsIG9yIGlmIGl0JiMzOTtzIHRvbyBjb2Fyc2UtZ3JhaW5lZCwgbWF5YmUgSSBzaG91bGQgZHJpbGwgZG93biBpbnRvIGBUQVNLU1RBVFNgLiBJdCYjMzk7cyBwb3NzaWJsZSBJJiMzOTtsbCBoYXZlIG1vcmUgc3BlY2lmaWMgcGVyLXRhc2sgaW5mb3JtYXRpb24gdGhlcmUuIEFuZCwgb2YgY291cnNlLCBJIGhhdmUgdG8gY29uc2lkZXIgYFNDSEVEX0lORk9gIC0tIGNvdWxkIGJlIHRoZSBrZXkgdG8gdGhlIGtpbmQgb2YgZGV0YWlsIEkmIzM5O20gbG9va2luZyBmb3IuIFRpbWUgdG8gZGlnIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIHNlZSB3aGF0IHRoZXNlIG9wdGlvbnMgYWN0dWFsbHkgY29udHJvbCBhbmQgd2hhdCBsZXZlbCBvZiBkZXRhaWwgdGhleSBwcm92aWRlLiBJIGtub3cgaXQgZGVwZW5kcyBvbiB0aGUga2VybmVsIHZlcnNpb24gdG9vLCBzbyBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZCBhcyBJJiMzOTttIGxvb2tpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBTQ0hFRF9JTkZPJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9MjA9bWVudWNvbmZpZyBLVk1cbi0tXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM3LVx0c2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6Mzg6XHRzZWxlY3QgU0NIRURfSU5GT1xuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zOS1cdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1cbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0zMy1cdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc6MzQ6XHRzZWxlY3QgU0NIRURfSU5GT1xuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMzUtXHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFMgaWYgUEVSRl9FVkVOVFNcbi0tXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1cbi0tXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTMzLVx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjM0Olx0c2VsZWN0IFNDSEVEX0lORk9cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMzUtXHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFMgaWYgUEVSRl9FVkVOVFNcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNX1g4NlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTM1LVx0c2VsZWN0IEtWTV9NTUlPXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzozNjpcdHNlbGVjdCBTQ0hFRF9JTkZPXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0zNy1cdHNlbGVjdCBQRVJGX0VWRU5UU1xuLS1cbmluaXQvS2NvbmZpZz02OTQ9Y29uZmlnIFRBU0tfREVMQVlfQUNDVFxuLS1cbmluaXQvS2NvbmZpZy02OTYtXHRkZXBlbmRzIG9uIFRBU0tTVEFUU1xuaW5pdC9LY29uZmlnOjY5NzpcdHNlbGVjdCBTQ0hFRF9JTkZPXG5pbml0L0tjb25maWctNjk4LVx0aGVscFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnPTEzNTM9Y29uZmlnIFNDSEVEU1RBVFNcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMzU1LVx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG5saWIvS2NvbmZpZy5kZWJ1ZzoxMzU2Olx0c2VsZWN0IFNDSEVEX0lORk9cbmxpYi9LY29uZmlnLmRlYnVnLTEzNTctXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTEzCgkJCQkJCQlvdXRwdXQ6IDE1OQoJCQkJCQkJdGhvdWdodHM6IDI1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBLVk0gQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqCgpBbHJpZ2h0LCBzbyBgS1ZNX1g4NmAgaXMgZGlyZWN0bHkgcHVsbGluZyBpbiBgU0NIRURfSU5GT2AuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IGVuYWJsaW5nIEtWTSwgYW5kIGJ5IGV4dGVuc2lvbiBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGAsIGJyaW5ncyBpbiBhIHdob2xlIHN1aXRlOiBgS1ZNX1g4NmAsIGBIQVZFX0tWTV9QVl9TVEVBTF9USU1FYCwgYW5kLCBjcnVjaWFsbHksIGBTQ0hFRF9JTkZPYC4gVGhhdCYjMzk7cyBhbiBpbXBvcnRhbnQgZGV0YWlsIHRvIGtlZXAgaW4gbWluZCwgYW5kIGluZm9ybXMgaG93IHRoZSBmZWF0dXJlcyBpbnRlcnJlbGF0ZS4KCkxldCYjMzk7cyBxdWlja2x5IHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbnMgd2UgbmVlZCB0byByZXR1cm46IGBLVk1gLCBgS1ZNX0lOVEVMYCwgYW5kIGBLVk1fQU1EYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuCgpOb3csIHJlZ2FyZGluZyB0aGUgY29yZSBvZiB0aGlzIHBhdGNoLCBpdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBtb3ZpbmcgdGhlIGBsYXN0X3N0ZWFsYCBtZW1iZXIgaW50byB0aGUgZ2VuZXJpYyBgc3RydWN0IGt2bV92Y3B1YCBzdHJ1Y3R1cmUsIGJ1dCBvbmx5IHVuZGVyIHRoZSBgQ09ORklHX0hBVkVfS1ZNX1BWX1NURUFMX1RJTUVgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGVuLCB0aGUgc3RlYWwgdGltZSBhY2NvdW50aW5nIGlzIHJlc2V0IHdpdGhpbiB0aGUgZ2VuZXJpYyBga3ZtX3ZjcHVfaW9jdGwoKWAgZnVuY3Rpb24gd2hlbiBhIHZDUFUgc3dpdGNoZXMgdG8gYmVpbmcgcnVuIGZyb20gYSBkaWZmZXJlbnQgaG9zdCB0aHJlYWQgb3IgUElELCBzcGVjaWZpY2FsbHkgZHVyaW5nIHRoZSBgS1ZNX1JVTmAgaGFuZGxpbmcuIE9uIHg4NiwgaXQgbG9va3MgbGlrZSBgcmVjb3JkX3N0ZWFsX3RpbWUoKWAgaXMgdGhlbiB1cGRhdGVkIHRvIHVzZSB0aGlzIG5ldywgZ2VuZXJpYyBgbGFzdF9zdGVhbGAgbWVtYmVyLiBUaGlzIGRlZmluaXRlbHkgaGFzIGltcGxpY2F0aW9ucyBvbiB0aGUgS1ZNIGNvcmUgYW5kIHg4NiBleGVjdXRpb24gcGF0aHMuCgpPa2F5LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcsIGFuZCB0aGVuIHdlJiMzOTtsbCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWNvcmRfc3RlYWxfdGltZSYjMzQ7LAogICAgJiMzNDtrdm1fdmNwdV9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb25zb2xpZGF0ZXMgc3RlYWwtdGltZSBhY2NvdW50aW5nIGFjcm9zcyBhcmNoaXRlY3R1cmVzIGJ5IG1vdmluZyBgbGFzdF9zdGVhbGAgdG8gZ2VuZXJpYyBgc3RydWN0IGt2bV92Y3B1YCBhbmQgcmVzZXR0aW5nIGl0IGluIGBrdm1fdmNwdV9pb2N0bCgpYCB3aGVuIGEgdkNQVSB0aHJlYWQgY2hhbmdlcy4gSXQgbW9kaWZpZXMgZXhlY3V0YWJsZSBjb2RlIGluIGNvcmUgS1ZNIChga3ZtX3ZjcHVfaW9jdGxgKSBhbmQgeDg2IEtWTSAoYHJlY29yZF9zdGVhbF90aW1lYCksIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgaW4gdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlY29yZF9zdGVhbF90aW1lJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNvbGlkYXRlcyBzdGVhbC10aW1lIGFjY291bnRpbmcgYWNyb3NzIGFyY2hpdGVjdHVyZXMgYnkgbW92aW5nIGBsYXN0X3N0ZWFsYCB0byBnZW5lcmljIGBzdHJ1Y3Qga3ZtX3ZjcHVgIGFuZCByZXNldHRpbmcgaXQgaW4gYGt2bV92Y3B1X2lvY3RsKClgIHdoZW4gYSB2Q1BVIHRocmVhZCBjaGFuZ2VzLiBJdCBtb2RpZmllcyBleGVjdXRhYmxlIGNvZGUgaW4gY29yZSBLVk0gKGBrdm1fdmNwdV9pb2N0bGApIGFuZCB4ODYgS1ZNIChgcmVjb3JkX3N0ZWFsX3RpbWVgKSwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBpbiB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdHJhY2tpbmcgb2YgcGFyYXZpcnR1YWxpemVkIHN0ZWFsIHRpbWUgKGBsYXN0X3N0ZWFsYCkgYnkgbW92aW5nIGl0IGZyb20gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHZjcHUgc3ViLXN0cnVjdHVyZXMgKGluIHg4NiwgYXJtNjQsIHJpc2N2LCBhbmQgbG9vbmdhcmNoKSBpbnRvIHRoZSBnZW5lcmljIGBzdHJ1Y3Qga3ZtX3ZjcHVgIHVuZGVyIGBDT05GSUdfSEFWRV9LVk1fUFZfU1RFQUxfVElNRWAsIGFuZCByZXNldHRpbmcgYHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXlgIHdoZW4gdGhlIHZDUFUgdGhyZWFkIFBJRCBjaGFuZ2VzLlxuXG5UaGUgYHN0cnVjdCBrdm1fdmNwdWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvYygpYCwgZW5zdXJpbmcgYHZjcHUtXHUwMDNlbGFzdF9zdGVhbGAgaXMgemVyby1pbml0aWFsaXplZCBhdCBjcmVhdGlvbi4gQWxsIHJlYWRzIGFuZCB3cml0ZXMgdG8gYHZjcHUtXHUwMDNlbGFzdF9zdGVhbGAgb3BlcmF0ZSBvbiBmdWxseSBpbml0aWFsaXplZCBmaWVsZHMgYW5kIHZhbHVlcyBkZXJpdmVkIGZyb20gYGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXlgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RhY2sgdmFyaWFibGVzLCBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBvciBwYWRkaW5nIGlzc3VlcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyMWYzOGQ4NGUyMjFhYjdmOWJlNDUyN2ViNTYxNjM3MDBiZjE3NjY4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAwNTowMzoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAyN2ZlMGNkNWIyZDdhLi4zNmNiN2RlZTk4OGNiIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC05MzcsNyAmIzQzOzkzNyw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHsKIAogCS8qIEd1ZXN0IFBWIHN0YXRlICovCiAJc3RydWN0IHsKLQkJdTY0IGxhc3Rfc3RlYWw7CiAJCWdwYV90IGJhc2U7CiAJfSBzdGVhbDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vS2NvbmZpZyBiL2FyY2gvYXJtNjQva3ZtL0tjb25maWcKaW5kZXggNDQ5MTU0ZjlhNDg1Mi4uZjU4NTViZmM2ODFjMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9LY29uZmlnCkBAIC0zNCw2ICYjNDM7MzQsNyBAQCBtZW51Y29uZmlnIEtWTQogCXNlbGVjdCBIQVZFX0tWTV9JUlFfQllQQVNTCiAJc2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTQogCXNlbGVjdCBIQVZFX0tWTV9WQ1BVX1JVTl9QSURfQ0hBTkdFCiYjNDM7CXNlbGVjdCBIQVZFX0tWTV9QVl9TVEVBTF9USU1FCiAJc2VsZWN0IFNDSEVEX0lORk8KIAlzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFMgaWYgUEVSRl9FVkVOVFMKIAlzZWxlY3QgS1ZNX0dVRVNUX01FTUZECmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9wdnRpbWUuYyBiL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jCmluZGV4IDRjZWFiYWE0YzMwYmQuLmE2N2Q5Mzg0NWQ3OTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jCkBAIC0xNCw3ICYjNDM7MTQsNyBAQCB2b2lkIGt2bV91cGRhdGVfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtJmd0O2t2bTsKIAl1NjQgYmFzZSA9IHZjcHUtJmd0O2FyY2guc3RlYWwuYmFzZTsKLQl1NjQgbGFzdF9zdGVhbCA9IHZjcHUtJmd0O2FyY2guc3RlYWwubGFzdF9zdGVhbDsKJiM0MzsJdTY0IGxhc3Rfc3RlYWwgPSB2Y3B1LSZndDtsYXN0X3N0ZWFsOwogCXU2NCBvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcHZjbG9ja192Y3B1X3N0b2xlbl90aW1lLCBzdG9sZW5fdGltZSk7CiAJdTY0IHN0ZWFsID0gMDsKIAlpbnQgaWR4OwpAQCAtMjUsOCAmIzQzOzI1LDggQEAgdm9pZCBrdm1fdXBkYXRlX3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZHggPSBzcmN1X3JlYWRfbG9jaygmYW1wO2t2bS0mZ3Q7c3JjdSk7CiAJaWYgKCFrdm1fZ2V0X2d1ZXN0KGt2bSwgYmFzZSAmIzQzOyBvZmZzZXQsIHN0ZWFsKSkgewogCQlzdGVhbCA9IGxlNjRfdG9fY3B1KHN0ZWFsKTsKLQkJdmNwdS0mZ3Q7YXJjaC5zdGVhbC5sYXN0X3N0ZWFsID0gUkVBRF9PTkNFKGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5KTsKLQkJc3RlYWwgJiM0Mzs9IHZjcHUtJmd0O2FyY2guc3RlYWwubGFzdF9zdGVhbCAtIGxhc3Rfc3RlYWw7CiYjNDM7CQl2Y3B1LSZndDtsYXN0X3N0ZWFsID0gUkVBRF9PTkNFKGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5KTsKJiM0MzsJCXN0ZWFsICYjNDM7PSB2Y3B1LSZndDtsYXN0X3N0ZWFsIC0gbGFzdF9zdGVhbDsKIAkJa3ZtX3B1dF9ndWVzdChrdm0sIGJhc2UgJiM0Mzsgb2Zmc2V0LCBjcHVfdG9fbGU2NChzdGVhbCkpOwogCX0KIAlzcmN1X3JlYWRfdW5sb2NrKCZhbXA7a3ZtLSZndDtzcmN1LCBpZHgpOwpAQCAtNjEsNyAmIzQzOzYxLDcgQEAgZ3BhX3Qga3ZtX2luaXRfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCSAqIFN0YXJ0IGNvdW50aW5nIHN0b2xlbiB0aW1lIGZyb20gdGhlIHRpbWUgdGhlIGd1ZXN0IHJlcXVlc3RzCiAJICogdGhlIGZlYXR1cmUgZW5hYmxlZC4KIAkgKi8KLQl2Y3B1LSZndDthcmNoLnN0ZWFsLmxhc3Rfc3RlYWwgPSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheTsKJiM0MzsJdmNwdS0mZ3Q7bGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwogCWt2bV93cml0ZV9ndWVzdF9sb2NrKGt2bSwgYmFzZSwgJmFtcDtpbml0X3ZhbHVlcywgc2l6ZW9mKGluaXRfdmFsdWVzKSk7CiAKIAlyZXR1cm4gYmFzZTsKZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDIzY2ZiZWNlYmJkNzkuLjE0NTE0YTI1YjI2MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMjUzLDcgJiM0MzsyNTMsNiBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7CiAJLyogcGFyYXZpcnQgc3RlYWwgdGltZSAqLwogCXN0cnVjdCB7CiAJCXU2NCBndWVzdF9hZGRyOwotCQl1NjQgbGFzdF9zdGVhbDsKIAkJc3RydWN0IGdmbl90b19odmFfY2FjaGUgY2FjaGU7CiAJCXU4ICBwcmVlbXB0ZWQ7CiAJfSBzdDsKZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnIGIvYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWcKaW5kZXggMTVkYTJkODhjMGMxMC4uNDk5NmVjOWMwN2Y5OSAxMDA2NDQKLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWcKQEAgLTI2LDYgJiM0MzsyNiw3IEBAIGNvbmZpZyBLVk0KIAlzZWxlY3QgSEFWRV9LVk1fTVNJCiAJc2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTQogCXNlbGVjdCBLVk1fQ09NTU9OCiYjNDM7CXNlbGVjdCBIQVZFX0tWTV9QVl9TVEVBTF9USU1FCiAJc2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVAogCXNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElORwogCXNlbGVjdCBLVk1fTU1JTwpkaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmMKaW5kZXggNGY1OGU2ZTJjZjg2Ni4uNTZhZTZiMThmOGMxMCAxMDA2NDQKLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jCkBAIC03NzMsNyAmIzQzOzc3Myw3IEBAIHN0YXRpYyBsb25nIGt2bV9zYXZlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCWlmICghKGRhdGEgJmFtcDsgS1ZNX1NURUFMX1BIWVNfVkFMSUQpKQogCQkJcmV0dXJuIDA7CiAKLQkJdmNwdS0mZ3Q7YXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7CiYjNDM7CQl2Y3B1LSZndDtsYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7CiAJCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpOwogCQlyZXR1cm4gMDsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMKaW5kZXggZWQ5ZTA5MmM5N2JhNy4uNzI4ZDI5ZWJhOGUwMyAxMDA2NDQKLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jCkBAIC0xODcsOCAmIzQzOzE4Nyw4IEBAIHN0YXRpYyB2b2lkIGt2bV91cGRhdGVfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXNtcF93bWIoKTsKIAogCXVuc2FmZV9nZXRfdXNlcihzdGVhbCwgJmFtcDtzdC0mZ3Q7c3RlYWwsIG91dCk7Ci0Jc3RlYWwgJiM0Mzs9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5IC0gdmNwdS0mZ3Q7YXJjaC5zdC5sYXN0X3N0ZWFsOwotCXZjcHUtJmd0O2FyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwomIzQzOwlzdGVhbCAmIzQzOz0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXkgLSB2Y3B1LSZndDtsYXN0X3N0ZWFsOwomIzQzOwl2Y3B1LSZndDtsYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7CiAJdW5zYWZlX3B1dF91c2VyKHN0ZWFsLCAmYW1wO3N0LSZndDtzdGVhbCwgb3V0KTsKIAogCXNtcF93bWIoKTsKQEAgLTEyMDUsNyAmIzQzOzEyMDUsNyBAQCBzdGF0aWMgaW50IGt2bV9sb29uZ2FyY2hfcHZ0aW1lX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAogCWlmICghcmV0KSB7CiAJCXZjcHUtJmd0O2FyY2guc3QuZ3Vlc3RfYWRkciA9IGdwYTsKLQkJdmNwdS0mZ3Q7YXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7CiYjNDM7CQl2Y3B1LSZndDtsYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7CiAJCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IGEzMDYwMDU3OTIzMWIuLjMwNTg3NTMwMWMwNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTI3Myw3ICYjNDM7MjczLDYgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2ggewogCS8qIFNCSSBzdGVhbC10aW1lIGFjY291bnRpbmcgKi8KIAlzdHJ1Y3QgewogCQlncGFfdCBzaG1lbTsKLQkJdTY0IGxhc3Rfc3RlYWw7CiAJfSBzdGE7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnIGIvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZwppbmRleCBlYzJjZWUwYTM5ZTAxLi4xZmYwN2E5MDRhMDI3IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWcKQEAgLTI2LDYgJiM0MzsyNiw3IEBAIGNvbmZpZyBLVk0KIAlzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNCiAJc2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTAogCXNlbGVjdCBLVk1fQ09NTU9OCiYjNDM7CXNlbGVjdCBIQVZFX0tWTV9QVl9TVEVBTF9USU1FCiAJc2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVAogCXNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElORwogCXNlbGVjdCBLVk1fTU1JTwpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfc3RhLmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9zdGEuYwppbmRleCA2MGU1MDI5NmEwMDg1Li45YTc3ZDNiZGU3YzcyIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9zdGEuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9zdGEuYwpAQCAtMTksMTMgJiM0MzsxOSwxMyBAQAogc3RhdGljIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfc2JpX3N0YV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdmNwdS0mZ3Q7YXJjaC5zdGEuc2htZW0gPSBJTlZBTElEX0dQQTsKLQl2Y3B1LSZndDthcmNoLnN0YS5sYXN0X3N0ZWFsID0gMDsKJiM0MzsJdmNwdS0mZ3Q7bGFzdF9zdGVhbCA9IDA7CiB9CiAKIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWdwYV90IHNobWVtID0gdmNwdS0mZ3Q7YXJjaC5zdGEuc2htZW07Ci0JdTY0IGxhc3Rfc3RlYWwgPSB2Y3B1LSZndDthcmNoLnN0YS5sYXN0X3N0ZWFsOwomIzQzOwl1NjQgbGFzdF9zdGVhbCA9IHZjcHUtJmd0O2xhc3Rfc3RlYWw7CiAJX19sZTMyIF9fdXNlciAqc2VxdWVuY2VfcHRyOwogCV9fbGU2NCBfX3VzZXIgKnN0ZWFsX3B0cjsKIAlfX2xlMzIgc2VxdWVuY2VfbGU7CkBAIC02Nyw4ICYjNDM7NjcsOCBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X3JlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogCWlmICghV0FSTl9PTihnZXRfdXNlcihzdGVhbF9sZSwgc3RlYWxfcHRyKSkpIHsKIAkJc3RlYWwgPSBsZTY0X3RvX2NwdShzdGVhbF9sZSk7Ci0JCXZjcHUtJmd0O2FyY2guc3RhLmxhc3Rfc3RlYWwgPSBSRUFEX09OQ0UoY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXkpOwotCQlzdGVhbCAmIzQzOz0gdmNwdS0mZ3Q7YXJjaC5zdGEubGFzdF9zdGVhbCAtIGxhc3Rfc3RlYWw7CiYjNDM7CQl2Y3B1LSZndDtsYXN0X3N0ZWFsID0gUkVBRF9PTkNFKGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5KTsKJiM0MzsJCXN0ZWFsICYjNDM7PSB2Y3B1LSZndDtsYXN0X3N0ZWFsIC0gbGFzdF9zdGVhbDsKIAkJV0FSTl9PTihwdXRfdXNlcihjcHVfdG9fbGU2NChzdGVhbCksIHN0ZWFsX3B0cikpOwogCX0KIApAQCAtMTE1LDcgJiM0MzsxMTUsNyBAQCBzdGF0aWMgaW50IGt2bV9zYmlfc3RhX3N0ZWFsX3RpbWVfc2V0X3NobWVtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJcmV0dXJuIFNCSV9FUlJfSU5WQUxJRF9BRERSRVNTOwogCiAJdmNwdS0mZ3Q7YXJjaC5zdGEuc2htZW0gPSBzaG1lbTsKLQl2Y3B1LSZndDthcmNoLnN0YS5sYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7CiYjNDM7CXZjcHUtJmd0O2xhc3Rfc3RlYWwgPSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggNjgzYmI4YmY0M2E5NC4uZWJkZDg1MjZhZTEyNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC04NzIsNyAmIzQzOzg3Miw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHsKIAlzdHJ1Y3QgewogCQl1OCBwcmVlbXB0ZWQ7CiAJCXU2NCBtc3JfdmFsOwotCQl1NjQgbGFzdF9zdGVhbDsKIAkJc3RydWN0IGdmbl90b19odmFfY2FjaGUgY2FjaGU7CiAJfSBzdDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL0tjb25maWcgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZwppbmRleCA1MzhlZDFlODAzMzI2Li5iMmFlYTgwNTg4NDEzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZwpAQCAtNDAsNiAmIzQzOzQwLDcgQEAgY29uZmlnIEtWTV9YODYKIAlzZWxlY3QgSEFWRV9LVk1fTVNJCiAJc2VsZWN0IEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFQKIAlzZWxlY3QgSEFWRV9LVk1fTk9fUE9MTAomIzQzOwlzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRQogCXNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SSwogCXNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1QKIAlzZWxlY3QgS1ZNX1ZGSU8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuYwppbmRleCA3OTQ2OGRkZmU0NzM2Li45MjdjOGIxZWQ4M2QyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jCkBAIC0yMTI5LDkgJiM0MzsyMTI5LDggQEAgc3RhdGljIHZvaWQgcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXNtcF93bWIoKTsKIAogCXVuc2FmZV9nZXRfdXNlcihzdGVhbCwgJmFtcDtzdC0mZ3Q7c3RlYWwsIG91dCk7Ci0Jc3RlYWwgJiM0Mzs9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5IC0KLQkJdmNwdS0mZ3Q7YXJjaC5zdC5sYXN0X3N0ZWFsOwotCXZjcHUtJmd0O2FyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwomIzQzOwlzdGVhbCAmIzQzOz0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXkgLSB2Y3B1LSZndDtsYXN0X3N0ZWFsOwomIzQzOwl2Y3B1LSZndDtsYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7CiAJdW5zYWZlX3B1dF91c2VyKHN0ZWFsLCAmYW1wO3N0LSZndDtzdGVhbCwgb3V0KTsKIAogCXZlcnNpb24gJiM0Mzs9IDE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggMDNiZmM5Mjg2NGI2ZS4uZmY5ZDQyM2I2YTdjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaApAQCAtMzk4LDYgJiM0MzszOTgsMTAgQEAgc3RydWN0IGt2bV92Y3B1IHsKIAkgKi8KIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpsYXN0X3VzZWRfc2xvdDsKIAl1NjQgbGFzdF91c2VkX3Nsb3RfZ2VuOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fUFZfU1RFQUxfVElNRQomIzQzOwl1NjQgbGFzdF9zdGVhbDsKJiM0MzsjZW5kaWYKIH07CiAKIC8qCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQppbmRleCA5NmJhYjcwMDJkMzllLi4xZGUxM2MwMDE3ZTQzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KQEAgLTE2NCw2ICYjNDM7MTY0LDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBpcnFfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBtbXVfc3RyZXNzX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gcnNlcV90ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHN0ZWFsX3RpbWUKJiM0MztURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHN0ZWFsX3RpbWVfY2hhbmdlX3BpZAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBzeXN0ZW1fY291bnRlcl9vZmZzZXRfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBwcmVfZmF1bHRfbWVtb3J5X3Rlc3QKIApAQCAtMjA0LDYgJiM0MzsyMDUsNyBAQCBURVNUX0dFTl9QUk9HU19hcm02NCAmIzQzOz0gZ3Vlc3RfbWVtZmRfdGVzdAogVEVTVF9HRU5fUFJPR1NfYXJtNjQgJiM0Mzs9IG1tdV9zdHJlc3NfdGVzdAogVEVTVF9HRU5fUFJPR1NfYXJtNjQgJiM0Mzs9IHJzZXFfdGVzdAogVEVTVF9HRU5fUFJPR1NfYXJtNjQgJiM0Mzs9IHN0ZWFsX3RpbWUKJiM0MztURVNUX0dFTl9QUk9HU19hcm02NCAmIzQzOz0gc3RlYWxfdGltZV9jaGFuZ2VfcGlkCiAKIFRFU1RfR0VOX1BST0dTX3MzOTAgPSAkKFRFU1RfR0VOX1BST0dTX0NPTU1PTikKIFRFU1RfR0VOX1BST0dTX3MzOTAgJiM0Mzs9IHMzOTAvbWVtb3AKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lX2NoYW5nZV9waWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lX2NoYW5nZV9waWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4xMmQ0OTI3ZDFjMDE3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWVfY2hhbmdlX3BpZC5jCkBAIC0wLDAgJiM0MzsxLDIxNiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBWZXJpZnkgdGhhdCBLVk0gcmVzZXRzIHN0ZWFsLXRpbWUgYWNjb3VudGluZyB3aGVuIGEgdkNQVSBmZCBpcyBydW4gZnJvbQomIzQzOyAqIGEgZGlmZmVyZW50IGhvc3QgUElELgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtwdGhyZWFkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fcGFyYS5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtwcm9jZXNzb3IuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBTVF9HUEFfQkFTRQkJKDEgJmx0OyZsdDsgMzApCiYjNDM7I2RlZmluZSBTVF9TQU5FX0RFTFRBX05TCSgxVUxMICZsdDsmbHQ7IDYzKQomIzQzOwomIzQzO3N0YXRpYyB2b2lkICpzdF9ndmE7CiYjNDM7c3RhdGljIHU2NCBndWVzdF9zdG9sZW5fdGltZTsKJiM0MztzdGF0aWMgdTY0IG1haW5fc3RlYWw7CiYjNDM7c3RhdGljIHU2NCB0aHJlYWRfc3RlYWw7CiYjNDM7CiYjNDM7I2lmIGRlZmluZWQoX194ODZfNjRfXykKJiM0MzsKJiM0MzsjZGVmaW5lIFNURUFMX1RJTUVfU0laRQkoKHNpemVvZihzdHJ1Y3Qga3ZtX3N0ZWFsX3RpbWUpICYjNDM7IDYzKSAmYW1wOyB+NjMpCiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9zdGVhbF90aW1lICpzdCA9IHN0X2d2YTsKJiM0MzsKJiM0MzsJV1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LSZndDtzdGVhbCkpOwomIzQzOwlHVUVTVF9TWU5DKDApOwomIzQzOwomIzQzOwlXUklURV9PTkNFKGd1ZXN0X3N0b2xlbl90aW1lLCBSRUFEX09OQ0Uoc3QtJmd0O3N0ZWFsKSk7CiYjNDM7CUdVRVNUX1NZTkMoMSk7CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC0mZ3Q7c3RlYWwpKTsKJiM0MzsJR1VFU1RfRE9ORSgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBzdGVhbF90aW1lX3N1cHBvcnRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlyZXR1cm4ga3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfS1ZNX1NURUFMX1RJTUUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2VuYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwl2Y3B1X3NldF9tc3IodmNwdSwgTVNSX0tWTV9TVEVBTF9USU1FLAomIzQzOwkJICAgICAodWxvbmcpc3RfZ3ZhIHwgS1ZNX01TUl9FTkFCTEVEKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VsaWYgZGVmaW5lZChfX2FhcmNoNjRfXykKJiM0MzsKJiM0MzsjZGVmaW5lIFNURUFMX1RJTUVfU0laRQkoKHNpemVvZihzdHJ1Y3Qgc3RfdGltZSkgJiM0MzsgNjMpICZhbXA7IH42MykKJiM0MzsKJiM0MzsjZGVmaW5lIFBWX1RJTUVfU1QJMHhjNTAwMDAyMQomIzQzOwomIzQzO3N0cnVjdCBzdF90aW1lIHsKJiM0MzsJdTMyIHJldjsKJiM0MzsJdTMyIGF0dHI7CiYjNDM7CXU2NCBzdF90aW1lOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGFybV9zbWNjY19yZXMgcmVzOwomIzQzOwlzdHJ1Y3Qgc3RfdGltZSAqc3Q7CiYjNDM7CiYjNDM7CWRvX3NtY2NjKFBWX1RJTUVfU1QsIDAsIDAsIDAsIDAsIDAsIDAsIDAsICZhbXA7cmVzKTsKJiM0MzsJR1VFU1RfQVNTRVJUX05FKHJlcy5hMCwgLTEpOwomIzQzOwlHVUVTVF9BU1NFUlRfRVEocmVzLmEwLCAodWxvbmcpc3RfZ3ZhKTsKJiM0MzsKJiM0MzsJc3QgPSAoc3RydWN0IHN0X3RpbWUgKilyZXMuYTA7CiYjNDM7CVdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC0mZ3Q7c3RfdGltZSkpOwomIzQzOwlHVUVTVF9TWU5DKDApOwomIzQzOwomIzQzOwlXUklURV9PTkNFKGd1ZXN0X3N0b2xlbl90aW1lLCBSRUFEX09OQ0Uoc3QtJmd0O3N0X3RpbWUpKTsKJiM0MzsJR1VFU1RfU1lOQygxKTsKJiM0MzsKJiM0MzsJV1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LSZndDtzdF90aW1lKSk7CiYjNDM7CUdVRVNUX0RPTkUoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgc3RlYWxfdGltZV9zdXBwb3J0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9kZXZpY2VfYXR0ciBkZXYgPSB7CiYjNDM7CQkuZ3JvdXAgPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0NUUkwsCiYjNDM7CQkuYXR0ciA9IEtWTV9BUk1fVkNQVV9QVlRJTUVfSVBBLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gIV9fdmNwdV9pb2N0bCh2Y3B1LCBLVk1fSEFTX0RFVklDRV9BVFRSLCAmYW1wO2Rldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHN0ZWFsX3RpbWVfZW5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXU2NCBzdF9pcGEgPSAodWxvbmcpc3RfZ3ZhOwomIzQzOwlzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyIGRldiA9IHsKJiM0MzsJCS5ncm91cCA9IEtWTV9BUk1fVkNQVV9QVlRJTUVfQ1RSTCwKJiM0MzsJCS5hdHRyID0gS1ZNX0FSTV9WQ1BVX1BWVElNRV9JUEEsCiYjNDM7CQkuYWRkciA9ICh1NjQpJmFtcDtzdF9pcGEsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXZjcHVfaW9jdGwodmNwdSwgS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgJmFtcDtkZXYpOwomIzQzO30KJiM0MzsKJiM0MzsjZWxzZQomIzQzOyNlcnJvciAmIzM0O3N0ZWFsX3RpbWVfY2hhbmdlX3BpZCBpcyBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBhcmNoaXRlY3R1cmUmIzM0OwomIzQzOyNlbmRpZgomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB1Y2FsbCB1YzsKJiM0MzsKJiM0MzsJdmNwdV9ydW4odmNwdSk7CiYjNDM7CiYjNDM7CXN3aXRjaCAoZ2V0X3VjYWxsKHZjcHUsICZhbXA7dWMpKSB7CiYjNDM7CWNhc2UgVUNBTExfU1lOQzoKJiM0MzsJY2FzZSBVQ0FMTF9ET05FOgomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgVUNBTExfQUJPUlQ6CiYjNDM7CQlSRVBPUlRfR1VFU1RfQVNTRVJUKHVjKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCVRFU1RfQVNTRVJUKGZhbHNlLCAmIzM0O1VuZXhwZWN0ZWQgZXhpdDogJXMmIzM0OywKJiM0MzsJCQkgICAgZXhpdF9yZWFzb25fc3RyKHZjcHUtJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24pKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqZG9fc3RlYWxfdGltZSh2b2lkICphcmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGltZXNwZWMgdHMsIHN0b3A7CiYjNDM7CiYjNDM7CWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmYW1wO3RzKTsKJiM0MzsJc3RvcCA9IHRpbWVzcGVjX2FkZF9ucyh0cywgTUlOX1JVTl9ERUxBWV9OUyk7CiYjNDM7CiYjNDM7CXdoaWxlICh0aW1lc3BlY190b19ucyh0aW1lc3BlY19zdWIodHMsIHN0b3ApKSAmbHQ7IDApCiYjNDM7CQljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJmFtcDt0cyk7CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqdmNwdV90aHJlYWQodm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gYXJnOwomIzQzOwomIzQzOwlydW5fdmNwdSh2Y3B1KTsKJiM0MzsJc3luY19nbG9iYWxfZnJvbV9ndWVzdCh2Y3B1LSZndDt2bSwgZ3Vlc3Rfc3RvbGVuX3RpbWUpOwomIzQzOwl0aHJlYWRfc3RlYWwgPSBndWVzdF9zdG9sZW5fdGltZTsKJiM0MzsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlwdGhyZWFkX2F0dHJfdCBhdHRyOwomIzQzOwlwdGhyZWFkX3QgdGhyZWFkOwomIzQzOwljcHVfc2V0X3QgY3B1c2V0OwomIzQzOwlsb25nIHJ1bl9kZWxheTsKJiM0MzsJbG9uZyBydW5fZGVsYXlfZGVsdGE7CiYjNDM7CiYjNDM7CWtzZnRfcHJpbnRfaGVhZGVyKCk7CiYjNDM7CWtzZnRfc2V0X3BsYW4oMSk7CiYjNDM7CiYjNDM7CUNQVV9aRVJPKCZhbXA7Y3B1c2V0KTsKJiM0MzsJQ1BVX1NFVCgwLCAmYW1wO2NwdXNldCk7CiYjNDM7CXB0aHJlYWRfYXR0cl9pbml0KCZhbXA7YXR0cik7CiYjNDM7CXB0aHJlYWRfYXR0cl9zZXRhZmZpbml0eV9ucCgmYW1wO2F0dHIsIHNpemVvZihjcHVzZXQpLCAmYW1wO2NwdXNldCk7CiYjNDM7CXB0aHJlYWRfc2V0YWZmaW5pdHlfbnAocHRocmVhZF9zZWxmKCksIHNpemVvZihjcHVzZXQpLCAmYW1wO2NwdXNldCk7CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoJmFtcDt2Y3B1LCBndWVzdF9jb2RlKTsKJiM0MzsJdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywKJiM0MzsJCQkJICAgIFNUX0dQQV9CQVNFLCAxLCAxLCAwKTsKJiM0MzsJdmlydF9tYXAodm0sIFNUX0dQQV9CQVNFLCBTVF9HUEFfQkFTRSwgMSk7CiYjNDM7CiYjNDM7CXN0X2d2YSA9ICh2b2lkICopU1RfR1BBX0JBU0U7CiYjNDM7CXN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBzdF9ndmEpOwomIzQzOwltZW1zZXQoYWRkcl9ndmEyaHZhKHZtLCBTVF9HUEFfQkFTRSksIDAsIFNURUFMX1RJTUVfU0laRSk7CiYjNDM7CiYjNDM7CVRFU1RfUkVRVUlSRShzdGVhbF90aW1lX3N1cHBvcnRlZCh2Y3B1KSk7CiYjNDM7CiYjNDM7CXN0ZWFsX3RpbWVfZW5hYmxlKHZjcHUpOwomIzQzOwlydW5fdmNwdSh2Y3B1KTsKJiM0MzsKJiM0MzsJcnVuX2RlbGF5ID0gZ2V0X3J1bl9kZWxheSgpOwomIzQzOwlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZCwgJmFtcDthdHRyLCBkb19zdGVhbF90aW1lLCBOVUxMKTsKJiM0MzsKJiM0MzsJd2hpbGUgKGdldF9ydW5fZGVsYXkoKSAtIHJ1bl9kZWxheSAmbHQ7IE1JTl9SVU5fREVMQVlfTlMpCiYjNDM7CQlzY2hlZF95aWVsZCgpOwomIzQzOwomIzQzOwlwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTsKJiM0MzsJcnVuX2RlbGF5X2RlbHRhID0gZ2V0X3J1bl9kZWxheSgpIC0gcnVuX2RlbGF5OwomIzQzOwlURVNUX0FTU0VSVChydW5fZGVsYXlfZGVsdGEgJmd0Oz0gTUlOX1JVTl9ERUxBWV9OUywKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHJ1bl9kZWxheSAmZ3Q7PSAlbGQsIGdvdCAlbGQmIzM0OywKJiM0MzsJCSAgICBNSU5fUlVOX0RFTEFZX05TLCBydW5fZGVsYXlfZGVsdGEpOwomIzQzOwomIzQzOwlydW5fdmNwdSh2Y3B1KTsKJiM0MzsJc3luY19nbG9iYWxfZnJvbV9ndWVzdCh2bSwgZ3Vlc3Rfc3RvbGVuX3RpbWUpOwomIzQzOwltYWluX3N0ZWFsID0gZ3Vlc3Rfc3RvbGVuX3RpbWU7CiYjNDM7CiYjNDM7CVRFU1RfQVNTRVJUKG1haW5fc3RlYWwgJmd0Oz0gTUlOX1JVTl9ERUxBWV9OUywKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHN0ZWFsIHRpbWUgJmd0Oz0gJWxkLCBnb3QgJSYjMzQ7UFJJdTY0LAomIzQzOwkJICAgIE1JTl9SVU5fREVMQVlfTlMsIG1haW5fc3RlYWwpOwomIzQzOwomIzQzOwlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZCwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHUpOwomIzQzOwlwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTsKJiM0MzsKJiM0MzsJVEVTVF9BU1NFUlQodGhyZWFkX3N0ZWFsICZndDs9IG1haW5fc3RlYWwgJmFtcDsmYW1wOwomIzQzOwkJICAgIHRocmVhZF9zdGVhbCAtIG1haW5fc3RlYWwgJmx0OyBTVF9TQU5FX0RFTFRBX05TLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgc2FuZSBzdGVhbCBhZnRlciB2Q1BVIHBpZCBjaGFuZ2U6ICYjMzQ7CiYjNDM7CQkgICAgJiMzNDtvbGQ9JSYjMzQ7UFJJdTY0JiMzNDssIG5ldz0lJiMzNDtQUkl1NjQsCiYjNDM7CQkgICAgbWFpbl9zdGVhbCwgdGhyZWFkX3N0ZWFsKTsKJiM0MzsKJiM0MzsJa3NmdF90ZXN0X3Jlc3VsdF9wYXNzKCYjMzQ7c3RlYWwgdGltZSByZW1haW5zIHNhbmUgYWNyb3NzIHZDUFUgcGlkIGNoYW5nZVxuJiMzNDspOwomIzQzOwomIzQzOwlwdGhyZWFkX2F0dHJfZGVzdHJveSgmYW1wO2F0dHIpOwomIzQzOwlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7CWtzZnRfZmluaXNoZWQoKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9LY29uZmlnIGIvdmlydC9rdm0vS2NvbmZpZwppbmRleCBjM2MwZWUyNTNmYzc3Li5mNDJhM2EwZmM1YmFiIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL0tjb25maWcKQEAgLTgyLDYgJiM0Mzs4Miw5IEBAIGNvbmZpZyBIQVZFX0tWTV9JUlFfQllQQVNTCiBjb25maWcgSEFWRV9LVk1fVkNQVV9SVU5fUElEX0NIQU5HRQogICAgICAgIGJvb2wKIAomIzQzO2NvbmZpZyBIQVZFX0tWTV9QVl9TVEVBTF9USU1FCiYjNDM7ICAgICAgIGJvb2wKJiM0MzsKIGNvbmZpZyBIQVZFX0tWTV9OT19QT0xMCiAgICAgICAgYm9vbAogCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCA2NWViMjZhMDUyMGQ4Li43ODRmMGQ5NDViNDU2IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTQ0NzgsNiAmIzQzOzQ0NzgsMTAgQEAgc3RhdGljIGxvbmcga3ZtX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCiAJCQlpZiAocikKIAkJCQlicmVhazsKIAomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fUFZfU1RFQUxfVElNRQomIzQzOwkJCXZjcHUtJmd0O2xhc3Rfc3RlYWwgPSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheTsKJiM0MzsjZW5kaWYKJiM0MzsKIAkJCW5ld3BpZCA9IGdldF90YXNrX3BpZChjdXJyZW50LCBQSURUWVBFX1BJRCk7CiAJCQl3cml0ZV9sb2NrKCZhbXA7dmNwdS0mZ3Q7cGlkX2xvY2spOwogCQkJdmNwdS0mZ3Q7cGlkID0gbmV3cGlkOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTExMQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiB3ZSBuZWVkIHRvIGJyaW5nIEtNU0FOIGludG8gdGhlIHBpY3R1cmUuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBjaGFuZ2UgcmVsYXRlZCB0byBob3cgc3RlYWwgdGltZSBpcyB0cmFja2VkIGFjcm9zcyBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyB3aXRoaW4gS1ZNLgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHdoYXQmIzM5O3MgYmVlbiBtb3ZlZC4gSXQgbG9va3MgbGlrZSBgbGFzdF9zdGVhbGAgaGFzIGJlZW4gcmVmYWN0b3JlZC4gU3BlY2lmaWNhbGx5LCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGB2Y3B1LSZndDthcmNoLnN0ZWFsLmxhc3Rfc3RlYWxgIChvciBzaW1pbGFyIHZhcmlhbnRzIGZvciBhcm02NCwgbG9vbmdhcmNoLCByaXNjdiwgYW5kIHg4NikgYXJlIGJlaW5nIHJlcGxhY2VkIGJ5IGEgZ2VuZXJpYyBgdmNwdS0mZ3Q7bGFzdF9zdGVhbGAgd2l0aGluIHRoZSBgc3RydWN0IGt2bV92Y3B1YC4gVGhlIGFkZGl0aW9uIG9mIHRoZSBgI2lmZGVmIENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FYCBndWFyZCBzdWdnZXN0cyB0aGF0IHRoaXMgcmVmYWN0b3JpbmcgaXMgY29uZGl0aW9uYWwgYW5kIG1pZ2h0IGJlIHVzZWQgdG8gYWJzdHJhY3Qgb3V0IHRoZSBzdGVhbCB0aW1lIGFjY291bnRpbmcuCgpUaGVuIHRoZXJlJiMzOTtzIHRoZSBhZGRlZCBjb2RlIHNuaXBwZXQgaW4gYGt2bV92Y3B1X2lvY3RsYCB1bmRlciBgS1ZNX1JVTmAgKG9yIHBvdGVudGlhbGx5IHNpbWlsYXIgY29uZGl0aW9ucyB3aGVyZSB0aGUgdkNQVSBQSUQgY2hhbmdlcykuIEhlcmUmIzM5O3Mgd2hlcmUgdGhlIHVwZGF0ZSB0byBgdmNwdS0mZ3Q7bGFzdF9zdGVhbGAgaGFwcGVuczogYHZjcHUtJmd0O2xhc3Rfc3RlYWwgPSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheTtgIEFnYWluLCB0aGUgYCNpZmRlZmAgc2hvd3MgaXQmIzM5O3MgY29uZGl0aW9uYWwuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSAqYWN0dWFsKiB2YWx1ZSBvZiBgbGFzdF9zdGVhbGAgaXMgYmVpbmcgc2V0LCB3aGljaCBjb3VsZCBiZSByZWxldmFudCBmcm9tIGEgS01TQU4gcGVyc3BlY3RpdmUuIElmIGBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheWAgaXMgbm90IHByb3Blcmx5IGluaXRpYWxpemVkIG9yIGlmIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoaXMgaXMgZXhlY3V0ZWQgZG9uJiMzOTt0IGd1YXJhbnRlZSBpbml0aWFsaXphdGlvbiwgd2UgY291bGQgaGF2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYHZpcnQva3ZtL2t2bV9tYWluLmNgIGFyb3VuZCBsaW5lIDQ0NzgsIHRvIHZlcmlmeSB0aGlzIGluZm9ybWF0aW9uLCB0byBzZWUgdGhlIGNvbnRleHQgYW5kIHN1cnJvdW5kaW5nIGNvZGUgd2l0aCBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAg4oCTIGhvcGVmdWxseSB0aGVyZSBpc24mIzM5O3QgdG9vIG11Y2ggdG8gaGF2ZSB0byBnbyB0aHJvdWdoLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlIGFuZCBmbGFnZ2luZyBhbnkgcG90ZW50aWFsIEtNU0FOIGNvbmNlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtIQVZFX0tWTV9QVl9TVEVBTF9USU1FJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9MjA9bWVudWNvbmZpZyBLVk1cbi0tXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM2LVx0c2VsZWN0IEhBVkVfS1ZNX1ZDUFVfUlVOX1BJRF9DSEFOR0VcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6Mzc6XHRzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zOC1cdHNlbGVjdCBTQ0hFRF9JTkZPXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTI4LVx0c2VsZWN0IEtWTV9DT01NT05cbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnOjI5Olx0c2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTMwLVx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuLS1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTVxuLS1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjgtXHRzZWxlY3QgS1ZNX0NPTU1PTlxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzoyOTpcdHNlbGVjdCBIQVZFX0tWTV9QVl9TVEVBTF9USU1FXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTMwLVx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNDItXHRzZWxlY3QgSEFWRV9LVk1fTk9fUE9MTFxuYXJjaC94ODYva3ZtL0tjb25maWc6NDM6XHRzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxuYXJjaC94ODYva3ZtL0tjb25maWctNDQtXHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MzI1PXN0cnVjdCBrdm1fdmNwdSB7XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTQwMS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDo0MDI6I2lmZGVmIENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtNDAzLVx0dTY0IGxhc3Rfc3RlYWw7XG4tLVxudmlydC9rdm0vS2NvbmZpZz04Mj1jb25maWcgSEFWRV9LVk1fVkNQVV9SVU5fUElEX0NIQU5HRVxuLS1cbnZpcnQva3ZtL0tjb25maWctODQtXG52aXJ0L2t2bS9LY29uZmlnOjg1OmNvbmZpZyBIQVZFX0tWTV9QVl9TVEVBTF9USU1FXG52aXJ0L2t2bS9LY29uZmlnLTg2LSAgICAgICBib29sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz00NDI1PXN0YXRpYyBsb25nIGt2bV92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDQ4MC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NDQ4MTojaWZkZWYgQ09ORklHX0hBVkVfS1ZNX1BWX1NURUFMX1RJTUVcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDQ4Mi1cdFx0XHR2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU4OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gS1ZNIENvcmU6IExpbmUgNDQ3OCBpbiBga3ZtX21haW4uY2AqKgoKT2theSwgSSBuZWVkIHRvIGdldCB0byB0aGUgaGVhcnQgb2Ygc29tZXRoaW5nIHJlbGF0ZWQgdG8gS1ZNJiMzOTtzIG9wZXJhdGlvbi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgY29yZSwgYXMgaXQgd2VyZS4gSSYjMzk7bSBmb2N1c2luZyBvbiBgdmlydC9rdm0va3ZtX21haW4uY2AgYmVjYXVzZSB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIHRvcC1sZXZlbCBLVk0gbG9naWMgcmVzaWRlcy4gQW5kIEkmIzM5O20gemVyb2luZyBpbiBvbiBsaW5lIDQ0NzgsIHdoaWNoIG1lYW5zIEkmIzM5O3ZlIHByb2JhYmx5IGdvdCBhIHByZXR0eSBzcGVjaWZpYyBxdWVzdGlvbiBvciBpc3N1ZSBpbiBtaW5kIHRoYXQgSSB0aGluayBpcyBhZGRyZXNzZWQgYXJvdW5kIHRoYXQgYXJlYS4gS25vd2luZyB0aGUgY29kZWJhc2UsIEkmIzM5O20gZXhwZWN0aW5nIHNvbWV0aGluZyBjcml0aWNhbCB0byBiZSBoYXBwZW5pbmcgaW4gdGhhdCByZWdpb247IHBlcmhhcHMgYSBtYWpvciBpbml0aWFsaXphdGlvbiBzdGVwLCBhIGtleSBzdGF0ZSB0cmFuc2l0aW9uLCBvciBhbiBpbXBvcnRhbnQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyB2aXJ0dWFsaXphdGlvbiBoYXJkd2FyZS4gSSYjMzk7bSBnb2luZyBpbiB3aXRoIHRoZSBleHBlY3RhdGlvbiBvZiB1bmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHRvIGJ1aWxkIG15IHVuZGVyc3RhbmRpbmcuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQ2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NDY1Olx0XG40NDY2Olx0XHRcdC8qXG40NDY3Olx0XHRcdCAqIE5vdGUsIHZjcHUtXHUwMDNlcGlkIGlzIHByaW1hcmlseSBwcm90ZWN0ZWQgYnkgdmNwdS1cdTAwM2VtdXRleC4gVGhlXG40NDY4Olx0XHRcdCAqIGRlZGljYXRlZCByL3cgbG9jayBhbGxvd3Mgb3RoZXIgdGFza3MsIGUuZy4gb3RoZXIgdkNQVXMsIHRvXG40NDY5Olx0XHRcdCAqIHJlYWQgdmNwdS1cdTAwM2VwaWQgd2hpbGUgdGhpcyB2Q1BVIGlzIGluIEtWTV9SVU4sIGUuZy4gdG8geWllbGRcbjQ0NzA6XHRcdFx0ICogZGlyZWN0bHkgdG8gdGhpcyB2Q1BVXG40NDcxOlx0XHRcdCAqL1xuNDQ3MjpcdFx0XHRvbGRwaWQgPSB2Y3B1LVx1MDAzZXBpZDtcbjQ0NzM6XHRcdFx0aWYgKHVubGlrZWx5KG9sZHBpZCAhPSB0YXNrX3BpZChjdXJyZW50KSkpIHtcbjQ0NzQ6XHRcdFx0XHQvKiBUaGUgdGhyZWFkIHJ1bm5pbmcgdGhpcyBWQ1BVIGNoYW5nZWQuICovXG40NDc1Olx0XHRcdFx0c3RydWN0IHBpZCAqbmV3cGlkO1xuNDQ3NjpcdFxuNDQ3NzpcdFx0XHRcdHIgPSBrdm1fYXJjaF92Y3B1X3J1bl9waWRfY2hhbmdlKHZjcHUpO1xuNDQ3ODpcdFx0XHRcdGlmIChyKVxuNDQ3OTpcdFx0XHRcdFx0YnJlYWs7XG40NDgwOlx0XG40NDgxOlx0I2lmZGVmIENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FXG40NDgyOlx0XHRcdFx0dmNwdS1cdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbjQ0ODM6XHQjZW5kaWZcbjQ0ODQ6XHRcbjQ0ODU6XHRcdFx0XHRuZXdwaWQgPSBnZXRfdGFza19waWQoY3VycmVudCwgUElEVFlQRV9QSUQpO1xuNDQ4NjpcdFx0XHRcdHdyaXRlX2xvY2soXHUwMDI2dmNwdS1cdTAwM2VwaWRfbG9jayk7XG40NDg3Olx0XHRcdFx0dmNwdS1cdTAwM2VwaWQgPSBuZXdwaWQ7XG40NDg4Olx0XHRcdFx0d3JpdGVfdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNlcGlkX2xvY2spO1xuNDQ4OTpcdFxuNDQ5MDpcdFx0XHRcdHB1dF9waWQob2xkcGlkKTtcbjQ0OTE6XHRcdFx0fVxuNDQ5MjpcdFx0XHR2Y3B1LVx1MDAzZXdhbnRzX3RvX3J1biA9ICFSRUFEX09OQ0UodmNwdS1cdTAwM2VydW4tXHUwMDNlaW1tZWRpYXRlX2V4aXRfX3Vuc2FmZSk7XG40NDkzOlx0XHRcdHIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bih2Y3B1KTtcbjQ0OTQ6XHRcdFx0dmNwdS1cdTAwM2V3YW50c190b19ydW4gPSBmYWxzZTtcbjQ0OTU6XHRcbjQ0OTY6XHRcdFx0LypcbjQ0OTc6XHRcdFx0ICogRklYTUU6IFJlbW92ZSB0aGlzIGhhY2sgb25jZSBhbGwgS1ZNIGFyY2hpdGVjdHVyZXNcbjQ0OTg6XHRcdFx0ICogc3VwcG9ydCB0aGUgZ2VuZXJpYyBUSUYgYml0cywgaS5lLiBhIGRlZGljYXRlZCBUSUZfUlNFUS5cbjQ0OTk6XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDQwCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIEtWTSBjb2RlIGFuZCB0cmFjZSB0aGUgbGlmZWN5Y2xlIG9mIGEgdmlydHVhbCBDUFUgKGB2Y3B1YCkuIE15IHByaW1hcnkgaW50ZXJlc3QgaXMgaW4gdW5kZXJzdGFuZGluZyBob3cgYHZjcHVgIGl0c2VsZiBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLiBJIHdhbnQgdG8gc2VlIHRoaXMgZnJvbSBhIGxvdy1sZXZlbCBwZXJzcGVjdGl2ZSwgbGlrZSBhIGtlcm5lbCBoYWNrZXIuCgpNeSBoeXBvdGhlc2lzLCBiYXNlZCBvbiBwcmlvciBleHBlcmllbmNlLCBpcyB0aGF0IHdoZW4gYSBgdmNwdWAgaW5zdGFuY2UgaXMgbmVlZGVk4oCUY3JlYXRlZCBlaXRoZXIgdGhyb3VnaCBhbiBgaW9jdGxgIGNhbGwgbGlrZSBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBvciBhIGZ1bmN0aW9uIGxpa2UgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYOKAlHRoZSBhbGxvY2F0aW9uIG1lY2hhbmlzbSB3aWxsIGxpa2VseSB1dGlsaXplIGBremFsbG9jYCAob3IgcGVyaGFwcyBga21lbV9jYWNoZV96YWxsb2NgKSB0byBlbnN1cmUgYSB6ZXJvLWluaXRpYWxpemVkIG1lbW9yeSBibG9jay4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGluIHRoZSBrZXJuZWwuCgpTbywgdGhlIG5leHQgc3RlcCBpcyB0byBnZXQgc29tZSB2ZXJpZmljYXRpb24gb24gdGhpcy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcywgaW4gZmFjdCwgdGhlIGFsbG9jYXRpb24gbWV0aG9kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF92Y3B1X2NyZWF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9hcm0uYz01MjY9aW50IGt2bV9hcmNoX3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKVxuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jLTUzNi1cbmFyY2gvYXJtNjQva3ZtL2FybS5jOjUzNzppbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtNTM4LXtcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTcxPWludCBrdm1fdmdpY19jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1MzIgdHlwZSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTExMi1cdCAqIC0gQmFpbGluZyBvbiB0aGUgZW50aXJlIHRoaW5nIGlmIGEgdkNQVSBpcyBpbiB0aGUgbWlkZGxlIG9mIGNyZWF0aW9uLFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzoxMTM6XHQgKiAgIGRyb3BwZWQgdGhlIGt2bS1cdTAwM2Vsb2NrLCBidXQgaGFzbiYjMzk7dCByZWFjaGVkIGt2bV9hcmNoX3ZjcHVfY3JlYXRlKCkuXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTExNC1cdCAqXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYz0xNTA4PWludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jLTE1MTItXG5hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jOjE1MTM6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMtMTUxNC17XG4tLVxuYXJjaC9taXBzL2t2bS9taXBzLmM9MjczPWludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcbi0tXG5hcmNoL21pcHMva3ZtL21pcHMuYy0yNzctXG5hcmNoL21pcHMva3ZtL21pcHMuYzoyNzg6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvbWlwcy9rdm0vbWlwcy5jLTI3OS17XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9Nzc4PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBrdm1wcGNfZGVjcmVtZW50ZXJfd2FrZXVwKHN0cnVjdCBocnRpbWVyICp0aW1lcilcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy03ODctXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo3ODg6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTc4OS17XG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTEzOT1pbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTE0My1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzoxNDQ6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0xNDUte1xuLS1cbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmM9Mzc3OD1ERUZJTkVfRlJFRShzaWVfcGFnZSwgc3RydWN0IHNpZV9wYWdlICosIGlmIChfVCkgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKShfVCkpKVxuYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYy0zNzc5LVxuYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYzozNzgwOmludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTM3ODEte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9ODI3PXZvaWQgdGR4X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTg0Mi0gKiAgICAzLjEgdGR4X3ZjcHVfY3JlYXRlKCkgdHJhbnNpdGlvbnMgdkNQVSBzdGF0ZSB0byBWQ1BVX1REX1NUQVRFX1VOSU5JVElBTElaRUQuXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjg0MzogKiAgICAzLjIgdmNwdV9sb2FkKCkgYW5kIHZjcHVfcHV0KCkgaW4ga3ZtX2FyY2hfdmNwdV9jcmVhdGUoKS5cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6ODQ0OiAqICAgIDMuMyAoY29uZGl0aW9uYWwpIGlmIGFueSBlcnJvciBlbmNvdW50ZXJlZCBhZnRlciBrdm1fYXJjaF92Y3B1X2NyZWF0ZSgpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTg0NS0gKiAgICAgICAga3ZtX2FyY2hfdmNwdV9kZXN0cm95KCkgLS1cdTAwM2UgdGR4X3ZjcHVfZnJlZSgpLlxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz05MzAwPWludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTMzOC1cbmFyY2gveDg2L2t2bS94ODYuYzo5MzM5OmludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTM0MC17XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTE2NTM9aW50IGt2bV9hcmNoX3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKTtcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxNjU0OmludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE2NTUtdm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQxNTY9c3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDIxMi1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NDIxMzpcdHIgPSBrdm1fYXJjaF92Y3B1X2NyZWF0ZSh2Y3B1KTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDIxNC1cdGlmIChyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI4NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gS1ZNIENQVSBDcmVhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUgY29yZSBvZiB2aXJ0dWFsIENQVSBjcmVhdGlvbiBpbiBLVk0uIE15IG1lbnRhbCBtYXAgaW1tZWRpYXRlbHkgbGVhZHMgbWUgdG8gYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAuIFRoYXQmIzM5O3MgdGhlIGxpa2VseSBlbnRyeSBwb2ludCBmb3IgYSB1c2VyLXNwYWNlIHJlcXVlc3QgdG8gc3Bhd24gYSB2aXJ0dWFsIENQVS4gVGhlIGNvZGUgSSBuZWVkIGlzIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCwgd2hpY2ggbWFrZXMgc2Vuc2U7IHRoYXQgZmlsZSB1c3VhbGx5IGhvbGRzIHRoZSBtb3JlIGdlbmVyYWwgS1ZNIFZNIG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGhhbmRsZSBhbGxvY2F0aW5nIHRoZSBgdmNwdWAgZGF0YSBzdHJ1Y3R1cmUsIHNldHRpbmcgdXAgdGhlIGluaXRpYWwgc3RhdGUsIGhvb2tpbmcgaXQgaW50byB0aGUgVk0sIGFuZCBsaWtlbHkgaW5pdGlhdGluZyB0aGUgZmlyc3QgcnVuIG9yIGF0IGxlYXN0IHNldHRpbmcgdGhpbmdzIHVwIHNvIGl0JiMzOTtzIHJlYWR5IHRvIHJ1bi4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHdoYXQgdGhlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluIGFuZCB0aGUgYWN0dWFsIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhhdCBpb2N0bCBoYW5kbGVyLiBJIGFtIGFsc28gYXdhcmUgdGhhdCB0aGlzIGNhbGwgY291bGQgYmUgYSB2ZXJ5IGV4cGVuc2l2ZSBjYWxsLCBzbyB1bmRlcnN0YW5kaW5nIGFueSBsb2NraW5nIG9yIG9wdGltaXphdGlvbnMgd291bGQgYmUgaW1wb3J0YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQyMDA6XHRcbjQyMDE6XHRcdHZjcHUtXHUwMDNldmNwdV9pZHggPSAtMTtcbjQyMDI6XHRcbjQyMDM6XHRcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGt2bV9ydW4pIFx1MDAzZSBQQUdFX1NJWkUpO1xuNDIwNDpcdFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XG40MjA1Olx0XHRpZiAoIXBhZ2UpIHtcbjQyMDY6XHRcdFx0ciA9IC1FTk9NRU07XG40MjA3Olx0XHRcdGdvdG8gdmNwdV9mcmVlO1xuNDIwODpcdFx0fVxuNDIwOTpcdFx0dmNwdS1cdTAwM2VydW4gPSBwYWdlX2FkZHJlc3MocGFnZSk7XG40MjEwOlx0XG40MjExOlx0XHRrdm1fdmNwdV9pbml0KHZjcHUsIGt2bSwgaWQpO1xuNDIxMjpcdFxuNDIxMzpcdFx0ciA9IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHZjcHUpO1xuNDIxNDpcdFx0aWYgKHIpXG40MjE1Olx0XHRcdGdvdG8gdmNwdV9mcmVlX3J1bl9wYWdlO1xuNDIxNjpcdFxuNDIxNzpcdFx0aWYgKGt2bS1cdTAwM2VkaXJ0eV9yaW5nX3NpemUpIHtcbjQyMTg6XHRcdFx0ciA9IGt2bV9kaXJ0eV9yaW5nX2FsbG9jKGt2bSwgXHUwMDI2dmNwdS1cdTAwM2VkaXJ0eV9yaW5nLFxuNDIxOTpcdFx0XHRcdFx0XHQgaWQsIGt2bS1cdTAwM2VkaXJ0eV9yaW5nX3NpemUpO1xuNDIyMDpcdFx0XHRpZiAocilcbjQyMjE6XHRcdFx0XHRnb3RvIGFyY2hfdmNwdV9kZXN0cm95O1xuNDIyMjpcdFx0fVxuNDIyMzpcdFxuNDIyNDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTUyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZToKCioqQW5hbHl6aW5nIFZDUFUgQWxsb2NhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGlzLiBMaW5lIDQyMDAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdGF0ZSBvZiB0aGUgYHZjcHVgIHZhcmlhYmxlICpyaWdodCogYmVmb3JlIHRoYXQgcG9pbnQuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGV4YWN0bHkgd2hlcmUgaXQmIzM5O3MgYWxsb2NhdGVkLCBpbml0aWFsaXplZCwgYW5kIHBvdGVudGlhbGx5IG1vZGlmaWVkIHByaW9yIHRvIHdoYXRldmVyIGFjdGlvbiBpcyBvY2N1cnJpbmcgb24gdGhhdCBsaW5lLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgdXBzdHJlYW0sIHByb2JhYmx5IHVzaW5nIG15IElERSYjMzk7cyAmIzM0O2ZpbmQgcmVmZXJlbmNlcyYjMzQ7IG9yICYjMzQ7Y2FsbGVycyYjMzQ7IGZlYXR1cmUgdG8gdHJhY2UgYmFjayBmcm9tIGxpbmUgNDIwMC4gSSBuZWVkIHRvIHNlZSBpZiBpdCYjMzk7cyBhc3NpZ25lZCBkaXJlY3RseSwgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIGEgZnVuY3Rpb24sIG9yIHBlcmhhcHMgZGVyaXZlZCBmcm9tIHNvbWUgb3RoZXIgc3RydWN0dXJlLiBVbmRlcnN0YW5kaW5nIGl0cyBvcmlnaW4gaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIGN1cnJlbnQgc3RhdGUgYW5kIGhvdyBpdCBtaWdodCBpbXBhY3QgdGhlIGNvZGUgb24gbGluZSA0MjAwLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHBvaW50cyBvZiBjb250ZW50aW9uIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIE5vIGFzc3VtcHRpb25zOyBJJiMzOTttIGdvaW5nIGJhY2sgdG8gYmFzaWNzIHdpdGggaG93IHRoZSB2YXJpYWJsZSBpcyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MTgwOlx0XHRpZiAodGVzdF9iaXQoaWQsIGt2bS1cdTAwM2V2Y3B1X2lkcykpIHtcbjQxODE6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbjQxODI6XHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG40MTgzOlx0XHR9XG40MTg0Olx0XG40MTg1Olx0XHRyID0ga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoa3ZtLCBpZCk7XG40MTg2Olx0XHRpZiAocikge1xuNDE4NzpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuNDE4ODpcdFx0XHRyZXR1cm4gcjtcbjQxODk6XHRcdH1cbjQxOTA6XHRcbjQxOTE6XHRcdGt2bS1cdTAwM2VjcmVhdGVkX3ZjcHVzJiM0MzsmIzQzOztcbjQxOTI6XHRcdF9fc2V0X2JpdChpZCwga3ZtLVx1MDAzZXZjcHVfaWRzKTtcbjQxOTM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG40MTk0Olx0XG40MTk1Olx0XHR2Y3B1ID0ga21lbV9jYWNoZV96YWxsb2Moa3ZtX3ZjcHVfY2FjaGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG40MTk2Olx0XHRpZiAoIXZjcHUpIHtcbjQxOTc6XHRcdFx0ciA9IC1FTk9NRU07XG40MTk4Olx0XHRcdGdvdG8gdmNwdV9kZWNyZW1lbnQ7XG40MTk5Olx0XHR9XG40MjAwOlx0XG40MjAxOlx0XHR2Y3B1LVx1MDAzZXZjcHVfaWR4ID0gLTE7XG40MjAyOlx0XG40MjAzOlx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBrdm1fcnVuKSBcdTAwM2UgUEFHRV9TSVpFKTtcbjQyMDQ6XHRcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYwMAoJCQkJCQkJb3V0cHV0OiAyNDEKCQkJCQkJCXRob3VnaHRzOiA3NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYSBTdGVhbC1UaW1lIENhbGN1bGF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGB2Y3B1YCBpcyB6ZXJvZWQgb3V0IG9uIGFsbG9jYXRpb24g4oCTIHRoYXQmIzM5O3MgZ29vZC4gYGttZW1fY2FjaGVfemFsbG9jYCBnaXZlcyB1cyBhIGNsZWFuIHNsYXRlLCBzbyBgdmNwdS0mZ3Q7bGFzdF9zdGVhbGAgc3RhcnRzIGF0IHplcm8uIFRoZSBwYXRjaCYjMzk7cyBjb3JlIGlzc3VlIGlzIHByZXR0eSBjbGVhcjogaXQmIzM5O3MgYWJvdXQgdGhlIHRyYWNraW5nIG9mIHN0ZWFsLXRpbWUuIFByZXZpb3VzbHksIGBsYXN0X3N0ZWFsYCB3YXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCB0dWNrZWQgYXdheSBpbiBgdmNwdS0mZ3Q7YXJjaC4mbHQ7YXJjaC1zcGVjaWZpYyZndDsubGFzdF9zdGVhbGAuIFRoZSBwcm9ibGVtIGFyaXNlcyB3aGVuIGEgdkNQVSBzd2l0Y2hlcyB0byBiZWluZyBydW4gYnkgYSBkaWZmZXJlbnQgaG9zdCB0aHJlYWQgKGEgbmV3IFBJRCkuIFN0ZWFsLXRpbWUgY2FsY3VsYXRpb24gd2FzIHVzaW5nIGBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheSAtIGxhc3Rfc3RlYWxgLiBCdXQgYHJ1bl9kZWxheWAgaXMgdGhyZWFkLXNwZWNpZmljLiBTbywgaWYgdGhyZWFkIEEgcmFuIHRoZSB2Q1BVLCB0aGVuIHRocmVhZCBCLCB3ZSYjMzk7ZCBiZSBzdWJ0cmFjdGluZyB0aHJlYWQgQSYjMzk7cyBgcnVuX2RlbGF5YCAoZnJvbSB3aGVuIGl0IHJhbiB0aGUgdkNQVSkgZnJvbSB0aHJlYWQgQiYjMzk7cyBgcnVuX2RlbGF5YC4gVGhhdCYjMzk7cyBhIGRpc2FzdGVyIOKAkyB3aWxkbHkgaW5jb3JyZWN0IHZhbHVlcywgcG90ZW50aWFsbHkgbmVnYXRpdmUsIGRlZmluaXRlbHkgd3JvbmcuCgpUaGUgZml4IHVuaWZpZXMgdGhpcywgbW92aW5nIGBsYXN0X3N0ZWFsYCBpbnRvIHRoZSBjb3JlIGBzdHJ1Y3Qga3ZtX3ZjcHVgIGFuZCByZXNldHRpbmcgYHZjcHUtJmd0O2xhc3Rfc3RlYWwgPSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheWAgd2hlbmV2ZXIgdGhlIHJ1bm5pbmcgdGFzayYjMzk7cyBQSUQgY2hhbmdlcyBpbiBga3ZtX3ZjcHVfaW9jdGwoKWAuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogc2FmZXR5LiBMZXQmIzM5O3MgZGlnIGludG8gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW1zIG9yIGtlcm5lbCBpbmZvcm1hdGlvbiBsZWFrcy4gRmlyc3QsIGBsYXN0X3N0ZWFsYCAqc3RhcnRzKiBhdCB6ZXJvLCBzbyB0aGF0JiMzOTtzIGdvb2QuIEkmIzM5O20gY2hlY2tpbmcgZWFjaCBhcmNoaXRlY3R1cmUgc3BlY2lmaWNhbGx5LiBga3ZtX2luaXRfc3RvbGVuX3RpbWVgIGluIGFybTY0LCBhbmQgdGhlIGxvb25nYXJjaCBhbmQgcmlzY3Ygc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBhbGwgc2V0dGluZyBgdmNwdS0mZ3Q7bGFzdF9zdGVhbGAgcHJvcGVybHkgdG8gYGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5YC4gVGhlIHg4NiBzZWVtcyB0byBkbyB0aGlzIGluIGByZWNvcmRfc3RlYWxfdGltZSgpYC4gQW5kIHRoZSBnZW5lcmFsIFBJRCBjaGFuZ2UgaGFuZGxlciBpbiBga3ZtX3ZjcHVfaW9jdGwoKWAgKmFsc28qIHJlc2V0cyBpdC4gSXQmIzM5O3MgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYWNyb3NzIHRoZSBib2FyZC4KCkRvZXMgYW55dGhpbmcgKnJlYWQqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gRG9lcyBhbnl0aGluZyAqY29weSogdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZT8gTm8uIEFueSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIFRoaXMgcGF0Y2ggYXBwZWFycyBzYWZlLCBmcm9tIGEgbWVtb3J5IHBlcnNwZWN0aXZlLiBObyByaXNrcyBpbnRyb2R1Y2VkLgoKT2theSwgbGV0JiMzOTtzIGFwcGx5IHRoZSBhcHByb3ByaWF0ZSBLTVNBTiBsb2dpYzogTmVlZHNLTVNBTiBzaG91bGQgT05MWSBiZSB0cnVlIGlmIHdlJiMzOTtyZSBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOICpzcGVjaWZpY2FsbHkqIGRldGVjdHMuIFNpbmNlIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QsIE5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLgoKU28sIGluIGVzc2VuY2UsIHRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHRyYWNraW5nIG9mIHN0ZWFsLXRpbWUgd2hlbiB0aHJlYWRzIGFyZSBzd2l0Y2hlZCwgdW5pZnlpbmcgYGxhc3Rfc3RlYWxgIHRvIGBzdHJ1Y3Qga3ZtX3ZjcHVgIHRvIGZpeCBhIGNhbGN1bGF0aW9uIGVycm9yLiBBbmQsIHRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCB0aGVyZWZvcmUgdGhlIGZsYWcgc2hvdWxkIGJlIGFwcHJvcHJpYXRlbHkgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHRyYWNraW5nIG9mIHBhcmF2aXJ0dWFsaXplZCBzdGVhbCB0aW1lIChgbGFzdF9zdGVhbGApIGJ5IG1vdmluZyBpdCBmcm9tIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB2Y3B1IHN1Yi1zdHJ1Y3R1cmVzIChpbiB4ODYsIGFybTY0LCByaXNjdiwgYW5kIGxvb25nYXJjaCkgaW50byB0aGUgZ2VuZXJpYyBgc3RydWN0IGt2bV92Y3B1YCB1bmRlciBgQ09ORklHX0hBVkVfS1ZNX1BWX1NURUFMX1RJTUVgLCBhbmQgcmVzZXR0aW5nIGB2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5YCB3aGVuIHRoZSB2Q1BVIHRocmVhZCBQSUQgY2hhbmdlcy5cblxuVGhlIGBzdHJ1Y3Qga3ZtX3ZjcHVgIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2MoKWAsIGVuc3VyaW5nIGB2Y3B1LVx1MDAzZWxhc3Rfc3RlYWxgIGlzIHplcm8taW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24uIEFsbCByZWFkcyBhbmQgd3JpdGVzIHRvIGB2Y3B1LVx1MDAzZWxhc3Rfc3RlYWxgIG9wZXJhdGUgb24gZnVsbHkgaW5pdGlhbGl6ZWQgZmllbGRzIGFuZCB2YWx1ZXMgZGVyaXZlZCBmcm9tIGBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5YC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHN0YWNrIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgcGFkZGluZyBpc3N1ZXMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB0cmFja2luZyBvZiBwYXJhdmlydHVhbGl6ZWQgc3RlYWwgdGltZSAoYGxhc3Rfc3RlYWxgKSBieSBtb3ZpbmcgaXQgZnJvbSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdmNwdSBzdWItc3RydWN0dXJlcyAoaW4geDg2LCBhcm02NCwgcmlzY3YsIGFuZCBsb29uZ2FyY2gpIGludG8gdGhlIGdlbmVyaWMgYHN0cnVjdCBrdm1fdmNwdWAgdW5kZXIgYENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FYCwgYW5kIHJlc2V0dGluZyBgdmNwdS1cdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheWAgd2hlbiB0aGUgdkNQVSB0aHJlYWQgUElEIGNoYW5nZXMuXG5cblRoZSBgc3RydWN0IGt2bV92Y3B1YCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jKClgLCBlbnN1cmluZyBgdmNwdS1cdTAwM2VsYXN0X3N0ZWFsYCBpcyB6ZXJvLWluaXRpYWxpemVkIGF0IGNyZWF0aW9uLiBBbGwgcmVhZHMgYW5kIHdyaXRlcyB0byBgdmNwdS1cdTAwM2VsYXN0X3N0ZWFsYCBvcGVyYXRlIG9uIGZ1bGx5IGluaXRpYWxpemVkIGZpZWxkcyBhbmQgdmFsdWVzIGRlcml2ZWQgZnJvbSBgY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheWAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdGFjayB2YXJpYWJsZXMsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIHBhZGRpbmcgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDM6MjYuOTYxNTY3Mjc1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIzNjYzODQwNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWNvcmRfc3RlYWxfdGltZVwiLFxuICAgIFwia3ZtX3ZjcHVfaW9jdGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdHJhY2tpbmcgb2YgcGFyYXZpcnR1YWxpemVkIHN0ZWFsIHRpbWUgKGBsYXN0X3N0ZWFsYCkgYnkgbW92aW5nIGl0IGZyb20gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHZjcHUgc3ViLXN0cnVjdHVyZXMgKGluIHg4NiwgYXJtNjQsIHJpc2N2LCBhbmQgbG9vbmdhcmNoKSBpbnRvIHRoZSBnZW5lcmljIGBzdHJ1Y3Qga3ZtX3ZjcHVgIHVuZGVyIGBDT05GSUdfSEFWRV9LVk1fUFZfU1RFQUxfVElNRWAsIGFuZCByZXNldHRpbmcgYHZjcHUtXFx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheWAgd2hlbiB0aGUgdkNQVSB0aHJlYWQgUElEIGNoYW5nZXMuXFxuXFxuVGhlIGBzdHJ1Y3Qga3ZtX3ZjcHVgIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2MoKWAsIGVuc3VyaW5nIGB2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsYCBpcyB6ZXJvLWluaXRpYWxpemVkIGF0IGNyZWF0aW9uLiBBbGwgcmVhZHMgYW5kIHdyaXRlcyB0byBgdmNwdS1cXHUwMDNlbGFzdF9zdGVhbGAgb3BlcmF0ZSBvbiBmdWxseSBpbml0aWFsaXplZCBmaWVsZHMgYW5kIHZhbHVlcyBkZXJpdmVkIGZyb20gYGN1cnJlbnQtXFx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5YC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHN0YWNrIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgcGFkZGluZyBpc3N1ZXMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNvbGlkYXRlcyBzdGVhbC10aW1lIGFjY291bnRpbmcgYWNyb3NzIGFyY2hpdGVjdHVyZXMgYnkgbW92aW5nIGBsYXN0X3N0ZWFsYCB0byBnZW5lcmljIGBzdHJ1Y3Qga3ZtX3ZjcHVgIGFuZCByZXNldHRpbmcgaXQgaW4gYGt2bV92Y3B1X2lvY3RsKClgIHdoZW4gYSB2Q1BVIHRocmVhZCBjaGFuZ2VzLiBJdCBtb2RpZmllcyBleGVjdXRhYmxlIGNvZGUgaW4gY29yZSBLVk0gKGBrdm1fdmNwdV9pb2N0bGApIGFuZCB4ODYgS1ZNIChgcmVjb3JkX3N0ZWFsX3RpbWVgKSwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBpbiB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDM6MjYuOTYxNTczMTk1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTU0ODI0NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyMWYzOGQ4NGUyMjFhYjdmOWJlNDUyN2ViNTYxNjM3MDBiZjE3NjY4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMDU6MDM6MjUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggMjdmZTBjZDViMmQ3YS4uMzZjYjdkZWU5ODhjYiAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtOTM3LDcgKzkzNyw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcXG4gXFxuIFxcdC8qIEd1ZXN0IFBWIHN0YXRlICovXFxuIFxcdHN0cnVjdCB7XFxuLVxcdFxcdHU2NCBsYXN0X3N0ZWFsO1xcbiBcXHRcXHRncGFfdCBiYXNlO1xcbiBcXHR9IHN0ZWFsO1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vS2NvbmZpZyBiL2FyY2gvYXJtNjQva3ZtL0tjb25maWdcXG5pbmRleCA0NDkxNTRmOWE0ODUyLi5mNTg1NWJmYzY4MWMxIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL0tjb25maWdcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9LY29uZmlnXFxuQEAgLTM0LDYgKzM0LDcgQEAgbWVudWNvbmZpZyBLVk1cXG4gXFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcXG4gXFx0c2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTVxcbiBcXHRzZWxlY3QgSEFWRV9LVk1fVkNQVV9SVU5fUElEX0NIQU5HRVxcbitcXHRzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxcbiBcXHRzZWxlY3QgU0NIRURfSU5GT1xcbiBcXHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFMgaWYgUEVSRl9FVkVOVFNcXG4gXFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRFxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9wdnRpbWUuYyBiL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jXFxuaW5kZXggNGNlYWJhYTRjMzBiZC4uYTY3ZDkzODQ1ZDc5NCAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9wdnRpbWUuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jXFxuQEAgLTE0LDcgKzE0LDcgQEAgdm9pZCBrdm1fdXBkYXRlX3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuIFxcdHU2NCBiYXNlID0gdmNwdS1cXHUwMDNlYXJjaC5zdGVhbC5iYXNlO1xcbi1cXHR1NjQgbGFzdF9zdGVhbCA9IHZjcHUtXFx1MDAzZWFyY2guc3RlYWwubGFzdF9zdGVhbDtcXG4rXFx0dTY0IGxhc3Rfc3RlYWwgPSB2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsO1xcbiBcXHR1NjQgb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHB2Y2xvY2tfdmNwdV9zdG9sZW5fdGltZSwgc3RvbGVuX3RpbWUpO1xcbiBcXHR1NjQgc3RlYWwgPSAwO1xcbiBcXHRpbnQgaWR4O1xcbkBAIC0yNSw4ICsyNSw4IEBAIHZvaWQga3ZtX3VwZGF0ZV9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNyY3UpO1xcbiBcXHRpZiAoIWt2bV9nZXRfZ3Vlc3Qoa3ZtLCBiYXNlICsgb2Zmc2V0LCBzdGVhbCkpIHtcXG4gXFx0XFx0c3RlYWwgPSBsZTY0X3RvX2NwdShzdGVhbCk7XFxuLVxcdFxcdHZjcHUtXFx1MDAzZWFyY2guc3RlYWwubGFzdF9zdGVhbCA9IFJFQURfT05DRShjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSk7XFxuLVxcdFxcdHN0ZWFsICs9IHZjcHUtXFx1MDAzZWFyY2guc3RlYWwubGFzdF9zdGVhbCAtIGxhc3Rfc3RlYWw7XFxuK1xcdFxcdHZjcHUtXFx1MDAzZWxhc3Rfc3RlYWwgPSBSRUFEX09OQ0UoY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkpO1xcbitcXHRcXHRzdGVhbCArPSB2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsIC0gbGFzdF9zdGVhbDtcXG4gXFx0XFx0a3ZtX3B1dF9ndWVzdChrdm0sIGJhc2UgKyBvZmZzZXQsIGNwdV90b19sZTY0KHN0ZWFsKSk7XFxuIFxcdH1cXG4gXFx0c3JjdV9yZWFkX3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzcmN1LCBpZHgpO1xcbkBAIC02MSw3ICs2MSw3IEBAIGdwYV90IGt2bV9pbml0X3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0ICogU3RhcnQgY291bnRpbmcgc3RvbGVuIHRpbWUgZnJvbSB0aGUgdGltZSB0aGUgZ3Vlc3QgcmVxdWVzdHNcXG4gXFx0ICogdGhlIGZlYXR1cmUgZW5hYmxlZC5cXG4gXFx0ICovXFxuLVxcdHZjcHUtXFx1MDAzZWFyY2guc3RlYWwubGFzdF9zdGVhbCA9IGN1cnJlbnQtXFx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xcbitcXHR2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XFxuIFxcdGt2bV93cml0ZV9ndWVzdF9sb2NrKGt2bSwgYmFzZSwgXFx1MDAyNmluaXRfdmFsdWVzLCBzaXplb2YoaW5pdF92YWx1ZXMpKTtcXG4gXFxuIFxcdHJldHVybiBiYXNlO1xcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IDIzY2ZiZWNlYmJkNzkuLjE0NTE0YTI1YjI2MTMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtMjUzLDcgKzI1Myw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcXG4gXFx0LyogcGFyYXZpcnQgc3RlYWwgdGltZSAqL1xcbiBcXHRzdHJ1Y3Qge1xcbiBcXHRcXHR1NjQgZ3Vlc3RfYWRkcjtcXG4tXFx0XFx0dTY0IGxhc3Rfc3RlYWw7XFxuIFxcdFxcdHN0cnVjdCBnZm5fdG9faHZhX2NhY2hlIGNhY2hlO1xcbiBcXHRcXHR1OCAgcHJlZW1wdGVkO1xcbiBcXHR9IHN0O1xcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnXFxuaW5kZXggMTVkYTJkODhjMGMxMC4uNDk5NmVjOWMwN2Y5OSAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZ1xcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnXFxuQEAgLTI2LDYgKzI2LDcgQEAgY29uZmlnIEtWTVxcbiBcXHRzZWxlY3QgSEFWRV9LVk1fTVNJXFxuIFxcdHNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU1cXG4gXFx0c2VsZWN0IEtWTV9DT01NT05cXG4rXFx0c2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcXG4gXFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxcbiBcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcXG4gXFx0c2VsZWN0IEtWTV9NTUlPXFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jXFxuaW5kZXggNGY1OGU2ZTJjZjg2Ni4uNTZhZTZiMThmOGMxMCAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jXFxuKysrIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuY1xcbkBAIC03NzMsNyArNzczLDcgQEAgc3RhdGljIGxvbmcga3ZtX3NhdmVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0aWYgKCEoZGF0YSBcXHUwMDI2IEtWTV9TVEVBTF9QSFlTX1ZBTElEKSlcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnN0Lmxhc3Rfc3RlYWwgPSBjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcXG4rXFx0XFx0dmNwdS1cXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXFx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xcbiBcXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfU1RFQUxfVVBEQVRFLCB2Y3B1KTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdGRlZmF1bHQ6XFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXFxuaW5kZXggZWQ5ZTA5MmM5N2JhNy4uNzI4ZDI5ZWJhOGUwMyAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXFxuKysrIGIvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuY1xcbkBAIC0xODcsOCArMTg3LDggQEAgc3RhdGljIHZvaWQga3ZtX3VwZGF0ZV9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHNtcF93bWIoKTtcXG4gXFxuIFxcdHVuc2FmZV9nZXRfdXNlcihzdGVhbCwgXFx1MDAyNnN0LVxcdTAwM2VzdGVhbCwgb3V0KTtcXG4tXFx0c3RlYWwgKz0gY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkgLSB2Y3B1LVxcdTAwM2VhcmNoLnN0Lmxhc3Rfc3RlYWw7XFxuLVxcdHZjcHUtXFx1MDAzZWFyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtXFx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xcbitcXHRzdGVhbCArPSBjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSAtIHZjcHUtXFx1MDAzZWxhc3Rfc3RlYWw7XFxuK1xcdHZjcHUtXFx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcXG4gXFx0dW5zYWZlX3B1dF91c2VyKHN0ZWFsLCBcXHUwMDI2c3QtXFx1MDAzZXN0ZWFsLCBvdXQpO1xcbiBcXG4gXFx0c21wX3dtYigpO1xcbkBAIC0xMjA1LDcgKzEyMDUsNyBAQCBzdGF0aWMgaW50IGt2bV9sb29uZ2FyY2hfcHZ0aW1lX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFxuIFxcdGlmICghcmV0KSB7XFxuIFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guc3QuZ3Vlc3RfYWRkciA9IGdwYTtcXG4tXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XFxuK1xcdFxcdHZjcHUtXFx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcXG4gXFx0XFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1NURUFMX1VQREFURSwgdmNwdSk7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IGEzMDYwMDU3OTIzMWIuLjMwNTg3NTMwMWMwNDIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTI3Myw3ICsyNzMsNiBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7XFxuIFxcdC8qIFNCSSBzdGVhbC10aW1lIGFjY291bnRpbmcgKi9cXG4gXFx0c3RydWN0IHtcXG4gXFx0XFx0Z3BhX3Qgc2htZW07XFxuLVxcdFxcdHU2NCBsYXN0X3N0ZWFsO1xcbiBcXHR9IHN0YTtcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL0tjb25maWcgYi9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnXFxuaW5kZXggZWMyY2VlMGEzOWUwMS4uMWZmMDdhOTA0YTAyNyAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnXFxuKysrIGIvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ1xcbkBAIC0yNiw2ICsyNiw3IEBAIGNvbmZpZyBLVk1cXG4gXFx0c2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTVxcbiBcXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXFxuIFxcdHNlbGVjdCBLVk1fQ09NTU9OXFxuK1xcdHNlbGVjdCBIQVZFX0tWTV9QVl9TVEVBTF9USU1FXFxuIFxcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcXG4gXFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXFxuIFxcdHNlbGVjdCBLVk1fTU1JT1xcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9zdGEuYyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3N0YS5jXFxuaW5kZXggNjBlNTAyOTZhMDA4NS4uOWE3N2QzYmRlN2M3MiAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9zdGEuY1xcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3N0YS5jXFxuQEAgLTE5LDEzICsxOSwxMyBAQFxcbiBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfdmNwdV9zYmlfc3RhX3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLnN0YS5zaG1lbSA9IElOVkFMSURfR1BBO1xcbi1cXHR2Y3B1LVxcdTAwM2VhcmNoLnN0YS5sYXN0X3N0ZWFsID0gMDtcXG4rXFx0dmNwdS1cXHUwMDNlbGFzdF9zdGVhbCA9IDA7XFxuIH1cXG4gXFxuIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdGdwYV90IHNobWVtID0gdmNwdS1cXHUwMDNlYXJjaC5zdGEuc2htZW07XFxuLVxcdHU2NCBsYXN0X3N0ZWFsID0gdmNwdS1cXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbDtcXG4rXFx0dTY0IGxhc3Rfc3RlYWwgPSB2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsO1xcbiBcXHRfX2xlMzIgX191c2VyICpzZXF1ZW5jZV9wdHI7XFxuIFxcdF9fbGU2NCBfX3VzZXIgKnN0ZWFsX3B0cjtcXG4gXFx0X19sZTMyIHNlcXVlbmNlX2xlO1xcbkBAIC02Nyw4ICs2Nyw4IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gXFx0aWYgKCFXQVJOX09OKGdldF91c2VyKHN0ZWFsX2xlLCBzdGVhbF9wdHIpKSkge1xcbiBcXHRcXHRzdGVhbCA9IGxlNjRfdG9fY3B1KHN0ZWFsX2xlKTtcXG4tXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbCA9IFJFQURfT05DRShjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSk7XFxuLVxcdFxcdHN0ZWFsICs9IHZjcHUtXFx1MDAzZWFyY2guc3RhLmxhc3Rfc3RlYWwgLSBsYXN0X3N0ZWFsO1xcbitcXHRcXHR2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsID0gUkVBRF9PTkNFKGN1cnJlbnQtXFx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5KTtcXG4rXFx0XFx0c3RlYWwgKz0gdmNwdS1cXHUwMDNlbGFzdF9zdGVhbCAtIGxhc3Rfc3RlYWw7XFxuIFxcdFxcdFdBUk5fT04ocHV0X3VzZXIoY3B1X3RvX2xlNjQoc3RlYWwpLCBzdGVhbF9wdHIpKTtcXG4gXFx0fVxcbiBcXG5AQCAtMTE1LDcgKzExNSw3IEBAIHN0YXRpYyBpbnQga3ZtX3NiaV9zdGFfc3RlYWxfdGltZV9zZXRfc2htZW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHRyZXR1cm4gU0JJX0VSUl9JTlZBTElEX0FERFJFU1M7XFxuIFxcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLnN0YS5zaG1lbSA9IHNobWVtO1xcbi1cXHR2Y3B1LVxcdTAwM2VhcmNoLnN0YS5sYXN0X3N0ZWFsID0gY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XFxuK1xcdHZjcHUtXFx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggNjgzYmI4YmY0M2E5NC4uZWJkZDg1MjZhZTEyNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC04NzIsNyArODcyLDYgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xcbiBcXHRzdHJ1Y3Qge1xcbiBcXHRcXHR1OCBwcmVlbXB0ZWQ7XFxuIFxcdFxcdHU2NCBtc3JfdmFsO1xcbi1cXHRcXHR1NjQgbGFzdF9zdGVhbDtcXG4gXFx0XFx0c3RydWN0IGdmbl90b19odmFfY2FjaGUgY2FjaGU7XFxuIFxcdH0gc3Q7XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vS2NvbmZpZyBiL2FyY2gveDg2L2t2bS9LY29uZmlnXFxuaW5kZXggNTM4ZWQxZTgwMzMyNi4uYjJhZWE4MDU4ODQxMyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vS2NvbmZpZ1xcbisrKyBiL2FyY2gveDg2L2t2bS9LY29uZmlnXFxuQEAgLTQwLDYgKzQwLDcgQEAgY29uZmlnIEtWTV9YODZcXG4gXFx0c2VsZWN0IEhBVkVfS1ZNX01TSVxcbiBcXHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxcbiBcXHRzZWxlY3QgSEFWRV9LVk1fTk9fUE9MTFxcbitcXHRzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxcbiBcXHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcXG4gXFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxcbiBcXHRzZWxlY3QgS1ZNX1ZGSU9cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuaW5kZXggNzk0NjhkZGZlNDczNi4uOTI3YzhiMWVkODNkMiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtMjEyOSw5ICsyMTI5LDggQEAgc3RhdGljIHZvaWQgcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRzbXBfd21iKCk7XFxuIFxcbiBcXHR1bnNhZmVfZ2V0X3VzZXIoc3RlYWwsIFxcdTAwMjZzdC1cXHUwMDNlc3RlYWwsIG91dCk7XFxuLVxcdHN0ZWFsICs9IGN1cnJlbnQtXFx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5IC1cXG4tXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsO1xcbi1cXHR2Y3B1LVxcdTAwM2VhcmNoLnN0Lmxhc3Rfc3RlYWwgPSBjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcXG4rXFx0c3RlYWwgKz0gY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkgLSB2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsO1xcbitcXHR2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XFxuIFxcdHVuc2FmZV9wdXRfdXNlcihzdGVhbCwgXFx1MDAyNnN0LVxcdTAwM2VzdGVhbCwgb3V0KTtcXG4gXFxuIFxcdHZlcnNpb24gKz0gMTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuaW5kZXggMDNiZmM5Mjg2NGI2ZS4uZmY5ZDQyM2I2YTdjNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5AQCAtMzk4LDYgKzM5OCwxMCBAQCBzdHJ1Y3Qga3ZtX3ZjcHUge1xcbiBcXHQgKi9cXG4gXFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbGFzdF91c2VkX3Nsb3Q7XFxuIFxcdHU2NCBsYXN0X3VzZWRfc2xvdF9nZW47XFxuK1xcbisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX1BWX1NURUFMX1RJTUVcXG4rXFx0dTY0IGxhc3Rfc3RlYWw7XFxuKyNlbmRpZlxcbiB9O1xcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG5pbmRleCA5NmJhYjcwMDJkMzllLi4xZGUxM2MwMDE3ZTQzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXFxuQEAgLTE2NCw2ICsxNjQsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgKz0gaXJxX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IG1tdV9zdHJlc3NfdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0gcnNlcV90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBzdGVhbF90aW1lXFxuK1RFU1RfR0VOX1BST0dTX3g4NiArPSBzdGVhbF90aW1lX2NoYW5nZV9waWRcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHN5c3RlbV9jb3VudGVyX29mZnNldF90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBwcmVfZmF1bHRfbWVtb3J5X3Rlc3RcXG4gXFxuQEAgLTIwNCw2ICsyMDUsNyBAQCBURVNUX0dFTl9QUk9HU19hcm02NCArPSBndWVzdF9tZW1mZF90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX2FybTY0ICs9IG1tdV9zdHJlc3NfdGVzdFxcbiBURVNUX0dFTl9QUk9HU19hcm02NCArPSByc2VxX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gc3RlYWxfdGltZVxcbitURVNUX0dFTl9QUk9HU19hcm02NCArPSBzdGVhbF90aW1lX2NoYW5nZV9waWRcXG4gXFxuIFRFU1RfR0VOX1BST0dTX3MzOTAgPSAkKFRFU1RfR0VOX1BST0dTX0NPTU1PTilcXG4gVEVTVF9HRU5fUFJPR1NfczM5MCArPSBzMzkwL21lbW9wXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lX2NoYW5nZV9waWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lX2NoYW5nZV9waWQuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTJkNDkyN2QxYzAxN1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmNcXG5AQCAtMCwwICsxLDIxNiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBWZXJpZnkgdGhhdCBLVk0gcmVzZXRzIHN0ZWFsLXRpbWUgYWNjb3VudGluZyB3aGVuIGEgdkNQVSBmZCBpcyBydW4gZnJvbVxcbisgKiBhIGRpZmZlcmVudCBob3N0IFBJRC5cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjcHRocmVhZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9wYXJhLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJrdm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwicHJvY2Vzc29yLmhcXFwiXFxuK1xcbisjZGVmaW5lIFNUX0dQQV9CQVNFXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgMzApXFxuKyNkZWZpbmUgU1RfU0FORV9ERUxUQV9OU1xcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDYzKVxcbitcXG4rc3RhdGljIHZvaWQgKnN0X2d2YTtcXG4rc3RhdGljIHU2NCBndWVzdF9zdG9sZW5fdGltZTtcXG4rc3RhdGljIHU2NCBtYWluX3N0ZWFsO1xcbitzdGF0aWMgdTY0IHRocmVhZF9zdGVhbDtcXG4rXFxuKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pXFxuK1xcbisjZGVmaW5lIFNURUFMX1RJTUVfU0laRVxcdCgoc2l6ZW9mKHN0cnVjdCBrdm1fc3RlYWxfdGltZSkgKyA2MykgXFx1MDAyNiB+NjMpXFxuK1xcbitzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV9zdGVhbF90aW1lICpzdCA9IHN0X2d2YTtcXG4rXFxuK1xcdFdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC1cXHUwMDNlc3RlYWwpKTtcXG4rXFx0R1VFU1RfU1lOQygwKTtcXG4rXFxuK1xcdFdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC1cXHUwMDNlc3RlYWwpKTtcXG4rXFx0R1VFU1RfU1lOQygxKTtcXG4rXFxuK1xcdFdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC1cXHUwMDNlc3RlYWwpKTtcXG4rXFx0R1VFU1RfRE9ORSgpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBzdGVhbF90aW1lX3N1cHBvcnRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0cmV0dXJuIGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX0tWTV9TVEVBTF9USU1FKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc3RlYWxfdGltZV9lbmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHZjcHVfc2V0X21zcih2Y3B1LCBNU1JfS1ZNX1NURUFMX1RJTUUsXFxuK1xcdFxcdCAgICAgKHVsb25nKXN0X2d2YSB8IEtWTV9NU1JfRU5BQkxFRCk7XFxuK31cXG4rXFxuKyNlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pXFxuK1xcbisjZGVmaW5lIFNURUFMX1RJTUVfU0laRVxcdCgoc2l6ZW9mKHN0cnVjdCBzdF90aW1lKSArIDYzKSBcXHUwMDI2IH42MylcXG4rXFxuKyNkZWZpbmUgUFZfVElNRV9TVFxcdDB4YzUwMDAwMjFcXG4rXFxuK3N0cnVjdCBzdF90aW1lIHtcXG4rXFx0dTMyIHJldjtcXG4rXFx0dTMyIGF0dHI7XFxuK1xcdHU2NCBzdF90aW1lO1xcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBhcm1fc21jY2NfcmVzIHJlcztcXG4rXFx0c3RydWN0IHN0X3RpbWUgKnN0O1xcbitcXG4rXFx0ZG9fc21jY2MoUFZfVElNRV9TVCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgXFx1MDAyNnJlcyk7XFxuK1xcdEdVRVNUX0FTU0VSVF9ORShyZXMuYTAsIC0xKTtcXG4rXFx0R1VFU1RfQVNTRVJUX0VRKHJlcy5hMCwgKHVsb25nKXN0X2d2YSk7XFxuK1xcbitcXHRzdCA9IChzdHJ1Y3Qgc3RfdGltZSAqKXJlcy5hMDtcXG4rXFx0V1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LVxcdTAwM2VzdF90aW1lKSk7XFxuK1xcdEdVRVNUX1NZTkMoMCk7XFxuK1xcbitcXHRXUklURV9PTkNFKGd1ZXN0X3N0b2xlbl90aW1lLCBSRUFEX09OQ0Uoc3QtXFx1MDAzZXN0X3RpbWUpKTtcXG4rXFx0R1VFU1RfU1lOQygxKTtcXG4rXFxuK1xcdFdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC1cXHUwMDNlc3RfdGltZSkpO1xcbitcXHRHVUVTVF9ET05FKCk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHN0ZWFsX3RpbWVfc3VwcG9ydGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyIGRldiA9IHtcXG4rXFx0XFx0Lmdyb3VwID0gS1ZNX0FSTV9WQ1BVX1BWVElNRV9DVFJMLFxcbitcXHRcXHQuYXR0ciA9IEtWTV9BUk1fVkNQVV9QVlRJTUVfSVBBLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuICFfX3ZjcHVfaW9jdGwodmNwdSwgS1ZNX0hBU19ERVZJQ0VfQVRUUiwgXFx1MDAyNmRldik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHN0ZWFsX3RpbWVfZW5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHR1NjQgc3RfaXBhID0gKHVsb25nKXN0X2d2YTtcXG4rXFx0c3RydWN0IGt2bV9kZXZpY2VfYXR0ciBkZXYgPSB7XFxuK1xcdFxcdC5ncm91cCA9IEtWTV9BUk1fVkNQVV9QVlRJTUVfQ1RSTCxcXG4rXFx0XFx0LmF0dHIgPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0lQQSxcXG4rXFx0XFx0LmFkZHIgPSAodTY0KVxcdTAwMjZzdF9pcGEsXFxuK1xcdH07XFxuK1xcbitcXHR2Y3B1X2lvY3RsKHZjcHUsIEtWTV9TRVRfREVWSUNFX0FUVFIsIFxcdTAwMjZkZXYpO1xcbit9XFxuK1xcbisjZWxzZVxcbisjZXJyb3IgXFxcInN0ZWFsX3RpbWVfY2hhbmdlX3BpZCBpcyBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBhcmNoaXRlY3R1cmVcXFwiXFxuKyNlbmRpZlxcbitcXG4rc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHN0cnVjdCB1Y2FsbCB1YztcXG4rXFxuK1xcdHZjcHVfcnVuKHZjcHUpO1xcbitcXG4rXFx0c3dpdGNoIChnZXRfdWNhbGwodmNwdSwgXFx1MDAyNnVjKSkge1xcbitcXHRjYXNlIFVDQUxMX1NZTkM6XFxuK1xcdGNhc2UgVUNBTExfRE9ORTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgVUNBTExfQUJPUlQ6XFxuK1xcdFxcdFJFUE9SVF9HVUVTVF9BU1NFUlQodWMpO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRURVNUX0FTU0VSVChmYWxzZSwgXFxcIlVuZXhwZWN0ZWQgZXhpdDogJXNcXFwiLFxcbitcXHRcXHRcXHQgICAgZXhpdF9yZWFzb25fc3RyKHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlZXhpdF9yZWFzb24pKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCAqZG9fc3RlYWxfdGltZSh2b2lkICphcmcpXFxuK3tcXG4rXFx0c3RydWN0IHRpbWVzcGVjIHRzLCBzdG9wO1xcbitcXG4rXFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFxcdTAwMjZ0cyk7XFxuK1xcdHN0b3AgPSB0aW1lc3BlY19hZGRfbnModHMsIE1JTl9SVU5fREVMQVlfTlMpO1xcbitcXG4rXFx0d2hpbGUgKHRpbWVzcGVjX3RvX25zKHRpbWVzcGVjX3N1Yih0cywgc3RvcCkpIFxcdTAwM2MgMClcXG4rXFx0XFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFxcdTAwMjZ0cyk7XFxuK1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgKnZjcHVfdGhyZWFkKHZvaWQgKmFyZylcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBhcmc7XFxuK1xcbitcXHRydW5fdmNwdSh2Y3B1KTtcXG4rXFx0c3luY19nbG9iYWxfZnJvbV9ndWVzdCh2Y3B1LVxcdTAwM2V2bSwgZ3Vlc3Rfc3RvbGVuX3RpbWUpO1xcbitcXHR0aHJlYWRfc3RlYWwgPSBndWVzdF9zdG9sZW5fdGltZTtcXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitpbnQgbWFpbih2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdHB0aHJlYWRfYXR0cl90IGF0dHI7XFxuK1xcdHB0aHJlYWRfdCB0aHJlYWQ7XFxuK1xcdGNwdV9zZXRfdCBjcHVzZXQ7XFxuK1xcdGxvbmcgcnVuX2RlbGF5O1xcbitcXHRsb25nIHJ1bl9kZWxheV9kZWx0YTtcXG4rXFxuK1xcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XFxuK1xcdGtzZnRfc2V0X3BsYW4oMSk7XFxuK1xcbitcXHRDUFVfWkVSTyhcXHUwMDI2Y3B1c2V0KTtcXG4rXFx0Q1BVX1NFVCgwLCBcXHUwMDI2Y3B1c2V0KTtcXG4rXFx0cHRocmVhZF9hdHRyX2luaXQoXFx1MDAyNmF0dHIpO1xcbitcXHRwdGhyZWFkX2F0dHJfc2V0YWZmaW5pdHlfbnAoXFx1MDAyNmF0dHIsIHNpemVvZihjcHVzZXQpLCBcXHUwMDI2Y3B1c2V0KTtcXG4rXFx0cHRocmVhZF9zZXRhZmZpbml0eV9ucChwdGhyZWFkX3NlbGYoKSwgc2l6ZW9mKGNwdXNldCksIFxcdTAwMjZjcHVzZXQpO1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XFxuK1xcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXFxuK1xcdFxcdFxcdFxcdCAgICBTVF9HUEFfQkFTRSwgMSwgMSwgMCk7XFxuK1xcdHZpcnRfbWFwKHZtLCBTVF9HUEFfQkFTRSwgU1RfR1BBX0JBU0UsIDEpO1xcbitcXG4rXFx0c3RfZ3ZhID0gKHZvaWQgKilTVF9HUEFfQkFTRTtcXG4rXFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHN0X2d2YSk7XFxuK1xcdG1lbXNldChhZGRyX2d2YTJodmEodm0sIFNUX0dQQV9CQVNFKSwgMCwgU1RFQUxfVElNRV9TSVpFKTtcXG4rXFxuK1xcdFRFU1RfUkVRVUlSRShzdGVhbF90aW1lX3N1cHBvcnRlZCh2Y3B1KSk7XFxuK1xcbitcXHRzdGVhbF90aW1lX2VuYWJsZSh2Y3B1KTtcXG4rXFx0cnVuX3ZjcHUodmNwdSk7XFxuK1xcbitcXHRydW5fZGVsYXkgPSBnZXRfcnVuX2RlbGF5KCk7XFxuK1xcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWQsIFxcdTAwMjZhdHRyLCBkb19zdGVhbF90aW1lLCBOVUxMKTtcXG4rXFxuK1xcdHdoaWxlIChnZXRfcnVuX2RlbGF5KCkgLSBydW5fZGVsYXkgXFx1MDAzYyBNSU5fUlVOX0RFTEFZX05TKVxcbitcXHRcXHRzY2hlZF95aWVsZCgpO1xcbitcXG4rXFx0cHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7XFxuK1xcdHJ1bl9kZWxheV9kZWx0YSA9IGdldF9ydW5fZGVsYXkoKSAtIHJ1bl9kZWxheTtcXG4rXFx0VEVTVF9BU1NFUlQocnVuX2RlbGF5X2RlbHRhIFxcdTAwM2U9IE1JTl9SVU5fREVMQVlfTlMsXFxuK1xcdFxcdCAgICBcXFwiRXhwZWN0ZWQgcnVuX2RlbGF5IFxcdTAwM2U9ICVsZCwgZ290ICVsZFxcXCIsXFxuK1xcdFxcdCAgICBNSU5fUlVOX0RFTEFZX05TLCBydW5fZGVsYXlfZGVsdGEpO1xcbitcXG4rXFx0cnVuX3ZjcHUodmNwdSk7XFxuK1xcdHN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3Qodm0sIGd1ZXN0X3N0b2xlbl90aW1lKTtcXG4rXFx0bWFpbl9zdGVhbCA9IGd1ZXN0X3N0b2xlbl90aW1lO1xcbitcXG4rXFx0VEVTVF9BU1NFUlQobWFpbl9zdGVhbCBcXHUwMDNlPSBNSU5fUlVOX0RFTEFZX05TLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIHN0ZWFsIHRpbWUgXFx1MDAzZT0gJWxkLCBnb3QgJVxcXCJQUkl1NjQsXFxuK1xcdFxcdCAgICBNSU5fUlVOX0RFTEFZX05TLCBtYWluX3N0ZWFsKTtcXG4rXFxuK1xcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWQsIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1KTtcXG4rXFx0cHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7XFxuK1xcbitcXHRURVNUX0FTU0VSVCh0aHJlYWRfc3RlYWwgXFx1MDAzZT0gbWFpbl9zdGVhbCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgdGhyZWFkX3N0ZWFsIC0gbWFpbl9zdGVhbCBcXHUwMDNjIFNUX1NBTkVfREVMVEFfTlMsXFxuK1xcdFxcdCAgICBcXFwiRXhwZWN0ZWQgc2FuZSBzdGVhbCBhZnRlciB2Q1BVIHBpZCBjaGFuZ2U6IFxcXCJcXG4rXFx0XFx0ICAgIFxcXCJvbGQ9JVxcXCJQUkl1NjRcXFwiLCBuZXc9JVxcXCJQUkl1NjQsXFxuK1xcdFxcdCAgICBtYWluX3N0ZWFsLCB0aHJlYWRfc3RlYWwpO1xcbitcXG4rXFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFxcXCJzdGVhbCB0aW1lIHJlbWFpbnMgc2FuZSBhY3Jvc3MgdkNQVSBwaWQgY2hhbmdlXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHB0aHJlYWRfYXR0cl9kZXN0cm95KFxcdTAwMjZhdHRyKTtcXG4rXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbitcXHRrc2Z0X2ZpbmlzaGVkKCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vS2NvbmZpZyBiL3ZpcnQva3ZtL0tjb25maWdcXG5pbmRleCBjM2MwZWUyNTNmYzc3Li5mNDJhM2EwZmM1YmFiIDEwMDY0NFxcbi0tLSBhL3ZpcnQva3ZtL0tjb25maWdcXG4rKysgYi92aXJ0L2t2bS9LY29uZmlnXFxuQEAgLTgyLDYgKzgyLDkgQEAgY29uZmlnIEhBVkVfS1ZNX0lSUV9CWVBBU1NcXG4gY29uZmlnIEhBVkVfS1ZNX1ZDUFVfUlVOX1BJRF9DSEFOR0VcXG4gICAgICAgIGJvb2xcXG4gXFxuK2NvbmZpZyBIQVZFX0tWTV9QVl9TVEVBTF9USU1FXFxuKyAgICAgICBib29sXFxuK1xcbiBjb25maWcgSEFWRV9LVk1fTk9fUE9MTFxcbiAgICAgICAgYm9vbFxcbiBcXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG5pbmRleCA2NWViMjZhMDUyMGQ4Li43ODRmMGQ5NDViNDU2IDEwMDY0NFxcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuQEAgLTQ0NzgsNiArNDQ3OCwxMCBAQCBzdGF0aWMgbG9uZyBrdm1fdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0XFx0XFx0aWYgKHIpXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4rI2lmZGVmIENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FXFxuK1xcdFxcdFxcdHZjcHUtXFx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRcXHRcXHRuZXdwaWQgPSBnZXRfdGFza19waWQoY3VycmVudCwgUElEVFlQRV9QSUQpO1xcbiBcXHRcXHRcXHR3cml0ZV9sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VwaWRfbG9jayk7XFxuIFxcdFxcdFxcdHZjcHUtXFx1MDAzZXBpZCA9IG5ld3BpZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDM6MjcuNzc3Nzc4NDk4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNjIxMjM4NTA4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlY29yZF9zdGVhbF90aW1lXCIsXG4gICAgXCJrdm1fdmNwdV9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNvbGlkYXRlcyBzdGVhbC10aW1lIGFjY291bnRpbmcgYWNyb3NzIGFyY2hpdGVjdHVyZXMgYnkgbW92aW5nIGBsYXN0X3N0ZWFsYCB0byBnZW5lcmljIGBzdHJ1Y3Qga3ZtX3ZjcHVgIGFuZCByZXNldHRpbmcgaXQgaW4gYGt2bV92Y3B1X2lvY3RsKClgIHdoZW4gYSB2Q1BVIHRocmVhZCBjaGFuZ2VzLiBJdCBtb2RpZmllcyBleGVjdXRhYmxlIGNvZGUgaW4gY29yZSBLVk0gKGBrdm1fdmNwdV9pb2N0bGApIGFuZCB4ODYgS1ZNIChgcmVjb3JkX3N0ZWFsX3RpbWVgKSwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBpbiB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyMWYzOGQ4NGUyMjFhYjdmOWJlNDUyN2ViNTYxNjM3MDBiZjE3NjY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwNTowMzoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggMjdmZTBjZDViMmQ3YS4uMzZjYjdkZWU5ODhjYiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtOTM3LDcgKzkzNyw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcbiBcdC8qIEd1ZXN0IFBWIHN0YXRlICovXG4gXHRzdHJ1Y3Qge1xuLVx0XHR1NjQgbGFzdF9zdGVhbDtcbiBcdFx0Z3BhX3QgYmFzZTtcbiBcdH0gc3RlYWw7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vS2NvbmZpZyBiL2FyY2gvYXJtNjQva3ZtL0tjb25maWdcbmluZGV4IDQ0OTE1NGY5YTQ4NTIuLmY1ODU1YmZjNjgxYzEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9LY29uZmlnXG4rKysgYi9hcmNoL2FybTY0L2t2bS9LY29uZmlnXG5AQCAtMzQsNiArMzQsNyBAQCBtZW51Y29uZmlnIEtWTVxuIFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcbiBcdHNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU1cbiBcdHNlbGVjdCBIQVZFX0tWTV9WQ1BVX1JVTl9QSURfQ0hBTkdFXG4rXHRzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxuIFx0c2VsZWN0IFNDSEVEX0lORk9cbiBcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xuIFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jIGIvYXJjaC9hcm02NC9rdm0vcHZ0aW1lLmNcbmluZGV4IDRjZWFiYWE0YzMwYmQuLmE2N2Q5Mzg0NWQ3OTQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9wdnRpbWUuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vcHZ0aW1lLmNcbkBAIC0xNCw3ICsxNCw3IEBAIHZvaWQga3ZtX3VwZGF0ZV9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXHR1NjQgYmFzZSA9IHZjcHUtXHUwMDNlYXJjaC5zdGVhbC5iYXNlO1xuLVx0dTY0IGxhc3Rfc3RlYWwgPSB2Y3B1LVx1MDAzZWFyY2guc3RlYWwubGFzdF9zdGVhbDtcbitcdHU2NCBsYXN0X3N0ZWFsID0gdmNwdS1cdTAwM2VsYXN0X3N0ZWFsO1xuIFx0dTY0IG9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBwdmNsb2NrX3ZjcHVfc3RvbGVuX3RpbWUsIHN0b2xlbl90aW1lKTtcbiBcdHU2NCBzdGVhbCA9IDA7XG4gXHRpbnQgaWR4O1xuQEAgLTI1LDggKzI1LDggQEAgdm9pZCBrdm1fdXBkYXRlX3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbiBcdGlmICgha3ZtX2dldF9ndWVzdChrdm0sIGJhc2UgKyBvZmZzZXQsIHN0ZWFsKSkge1xuIFx0XHRzdGVhbCA9IGxlNjRfdG9fY3B1KHN0ZWFsKTtcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLnN0ZWFsLmxhc3Rfc3RlYWwgPSBSRUFEX09OQ0UoY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSk7XG4tXHRcdHN0ZWFsICs9IHZjcHUtXHUwMDNlYXJjaC5zdGVhbC5sYXN0X3N0ZWFsIC0gbGFzdF9zdGVhbDtcbitcdFx0dmNwdS1cdTAwM2VsYXN0X3N0ZWFsID0gUkVBRF9PTkNFKGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkpO1xuK1x0XHRzdGVhbCArPSB2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgLSBsYXN0X3N0ZWFsO1xuIFx0XHRrdm1fcHV0X2d1ZXN0KGt2bSwgYmFzZSArIG9mZnNldCwgY3B1X3RvX2xlNjQoc3RlYWwpKTtcbiBcdH1cbiBcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UsIGlkeCk7XG5AQCAtNjEsNyArNjEsNyBAQCBncGFfdCBrdm1faW5pdF9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgKiBTdGFydCBjb3VudGluZyBzdG9sZW4gdGltZSBmcm9tIHRoZSB0aW1lIHRoZSBndWVzdCByZXF1ZXN0c1xuIFx0ICogdGhlIGZlYXR1cmUgZW5hYmxlZC5cbiBcdCAqL1xuLVx0dmNwdS1cdTAwM2VhcmNoLnN0ZWFsLmxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuK1x0dmNwdS1cdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbiBcdGt2bV93cml0ZV9ndWVzdF9sb2NrKGt2bSwgYmFzZSwgXHUwMDI2aW5pdF92YWx1ZXMsIHNpemVvZihpbml0X3ZhbHVlcykpO1xuIFxuIFx0cmV0dXJuIGJhc2U7XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDIzY2ZiZWNlYmJkNzkuLjE0NTE0YTI1YjI2MTMgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMjUzLDcgKzI1Myw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdC8qIHBhcmF2aXJ0IHN0ZWFsIHRpbWUgKi9cbiBcdHN0cnVjdCB7XG4gXHRcdHU2NCBndWVzdF9hZGRyO1xuLVx0XHR1NjQgbGFzdF9zdGVhbDtcbiBcdFx0c3RydWN0IGdmbl90b19odmFfY2FjaGUgY2FjaGU7XG4gXHRcdHU4ICBwcmVlbXB0ZWQ7XG4gXHR9IHN0O1xuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnIGIvYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWdcbmluZGV4IDE1ZGEyZDg4YzBjMTAuLjQ5OTZlYzljMDdmOTkgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZ1xuKysrIGIvYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWdcbkBAIC0yNiw2ICsyNiw3IEBAIGNvbmZpZyBLVk1cbiBcdHNlbGVjdCBIQVZFX0tWTV9NU0lcbiBcdHNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU1cbiBcdHNlbGVjdCBLVk1fQ09NTU9OXG4rXHRzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXG4gXHRzZWxlY3QgS1ZNX01NSU9cbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuY1xuaW5kZXggNGY1OGU2ZTJjZjg2Ni4uNTZhZTZiMThmOGMxMCAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmNcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmNcbkBAIC03NzMsNyArNzczLDcgQEAgc3RhdGljIGxvbmcga3ZtX3NhdmVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0aWYgKCEoZGF0YSBcdTAwMjYgS1ZNX1NURUFMX1BIWVNfVkFMSUQpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuLVx0XHR2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4rXHRcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4gXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdGRlZmF1bHQ6XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmNcbmluZGV4IGVkOWUwOTJjOTdiYTcuLjcyOGQyOWViYThlMDMgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG4rKysgYi9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG5AQCAtMTg3LDggKzE4Nyw4IEBAIHN0YXRpYyB2b2lkIGt2bV91cGRhdGVfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c21wX3dtYigpO1xuIFxuIFx0dW5zYWZlX2dldF91c2VyKHN0ZWFsLCBcdTAwMjZzdC1cdTAwM2VzdGVhbCwgb3V0KTtcbi1cdHN0ZWFsICs9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkgLSB2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbDtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbitcdHN0ZWFsICs9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkgLSB2Y3B1LVx1MDAzZWxhc3Rfc3RlYWw7XG4rXHR2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuIFx0dW5zYWZlX3B1dF91c2VyKHN0ZWFsLCBcdTAwMjZzdC1cdTAwM2VzdGVhbCwgb3V0KTtcbiBcbiBcdHNtcF93bWIoKTtcbkBAIC0xMjA1LDcgKzEyMDUsNyBAQCBzdGF0aWMgaW50IGt2bV9sb29uZ2FyY2hfcHZ0aW1lX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBcdGlmICghcmV0KSB7XG4gXHRcdHZjcHUtXHUwMDNlYXJjaC5zdC5ndWVzdF9hZGRyID0gZ3BhO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4rXHRcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4gXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYTMwNjAwNTc5MjMxYi4uMzA1ODc1MzAxYzA0MiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMjczLDcgKzI3Myw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdC8qIFNCSSBzdGVhbC10aW1lIGFjY291bnRpbmcgKi9cbiBcdHN0cnVjdCB7XG4gXHRcdGdwYV90IHNobWVtO1xuLVx0XHR1NjQgbGFzdF9zdGVhbDtcbiBcdH0gc3RhO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbmluZGV4IGVjMmNlZTBhMzllMDEuLjFmZjA3YTkwNGEwMjcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnXG5AQCAtMjYsNiArMjYsNyBAQCBjb25maWcgS1ZNXG4gXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXG4gXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXG4gXHRzZWxlY3QgS1ZNX0NPTU1PTlxuK1x0c2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcbiBcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcbiBcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xuIFx0c2VsZWN0IEtWTV9NTUlPXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfc3RhLmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9zdGEuY1xuaW5kZXggNjBlNTAyOTZhMDA4NS4uOWE3N2QzYmRlN2M3MiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3N0YS5jXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9zdGEuY1xuQEAgLTE5LDEzICsxOSwxMyBAQFxuIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl92Y3B1X3NiaV9zdGFfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHZjcHUtXHUwMDNlYXJjaC5zdGEuc2htZW0gPSBJTlZBTElEX0dQQTtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbCA9IDA7XG4rXHR2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgPSAwO1xuIH1cbiBcbiB2b2lkIGt2bV9yaXNjdl92Y3B1X3JlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRncGFfdCBzaG1lbSA9IHZjcHUtXHUwMDNlYXJjaC5zdGEuc2htZW07XG4tXHR1NjQgbGFzdF9zdGVhbCA9IHZjcHUtXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbDtcbitcdHU2NCBsYXN0X3N0ZWFsID0gdmNwdS1cdTAwM2VsYXN0X3N0ZWFsO1xuIFx0X19sZTMyIF9fdXNlciAqc2VxdWVuY2VfcHRyO1xuIFx0X19sZTY0IF9fdXNlciAqc3RlYWxfcHRyO1xuIFx0X19sZTMyIHNlcXVlbmNlX2xlO1xuQEAgLTY3LDggKzY3LDggQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9yZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRpZiAoIVdBUk5fT04oZ2V0X3VzZXIoc3RlYWxfbGUsIHN0ZWFsX3B0cikpKSB7XG4gXHRcdHN0ZWFsID0gbGU2NF90b19jcHUoc3RlYWxfbGUpO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2guc3RhLmxhc3Rfc3RlYWwgPSBSRUFEX09OQ0UoY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSk7XG4tXHRcdHN0ZWFsICs9IHZjcHUtXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbCAtIGxhc3Rfc3RlYWw7XG4rXHRcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IFJFQURfT05DRShjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5KTtcbitcdFx0c3RlYWwgKz0gdmNwdS1cdTAwM2VsYXN0X3N0ZWFsIC0gbGFzdF9zdGVhbDtcbiBcdFx0V0FSTl9PTihwdXRfdXNlcihjcHVfdG9fbGU2NChzdGVhbCksIHN0ZWFsX3B0cikpO1xuIFx0fVxuIFxuQEAgLTExNSw3ICsxMTUsNyBAQCBzdGF0aWMgaW50IGt2bV9zYmlfc3RhX3N0ZWFsX3RpbWVfc2V0X3NobWVtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0cmV0dXJuIFNCSV9FUlJfSU5WQUxJRF9BRERSRVNTO1xuIFxuIFx0dmNwdS1cdTAwM2VhcmNoLnN0YS5zaG1lbSA9IHNobWVtO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnN0YS5sYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbitcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDY4M2JiOGJmNDNhOTQuLmViZGQ4NTI2YWUxMjYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtODcyLDcgKzg3Miw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdHN0cnVjdCB7XG4gXHRcdHU4IHByZWVtcHRlZDtcbiBcdFx0dTY0IG1zcl92YWw7XG4tXHRcdHU2NCBsYXN0X3N0ZWFsO1xuIFx0XHRzdHJ1Y3QgZ2ZuX3RvX2h2YV9jYWNoZSBjYWNoZTtcbiBcdH0gc3Q7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL0tjb25maWcgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZ1xuaW5kZXggNTM4ZWQxZTgwMzMyNi4uYjJhZWE4MDU4ODQxMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9LY29uZmlnXG4rKysgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZ1xuQEAgLTQwLDYgKzQwLDcgQEAgY29uZmlnIEtWTV9YODZcbiBcdHNlbGVjdCBIQVZFX0tWTV9NU0lcbiBcdHNlbGVjdCBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUXG4gXHRzZWxlY3QgSEFWRV9LVk1fTk9fUE9MTFxuK1x0c2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcbiBcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuIFx0c2VsZWN0IEtWTV9WRklPXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5pbmRleCA3OTQ2OGRkZmU0NzM2Li45MjdjOGIxZWQ4M2QyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC0yMTI5LDkgKzIxMjksOCBAQCBzdGF0aWMgdm9pZCByZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzbXBfd21iKCk7XG4gXG4gXHR1bnNhZmVfZ2V0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuLVx0c3RlYWwgKz0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSAtXG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnN0Lmxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuK1x0c3RlYWwgKz0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSAtIHZjcHUtXHUwMDNlbGFzdF9zdGVhbDtcbitcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4gXHR1bnNhZmVfcHV0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuIFxuIFx0dmVyc2lvbiArPSAxO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggMDNiZmM5Mjg2NGI2ZS4uZmY5ZDQyM2I2YTdjNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtMzk4LDYgKzM5OCwxMCBAQCBzdHJ1Y3Qga3ZtX3ZjcHUge1xuIFx0ICovXG4gXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpsYXN0X3VzZWRfc2xvdDtcbiBcdHU2NCBsYXN0X3VzZWRfc2xvdF9nZW47XG4rXG4rI2lmZGVmIENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FXG4rXHR1NjQgbGFzdF9zdGVhbDtcbisjZW5kaWZcbiB9O1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDk2YmFiNzAwMmQzOWUuLjFkZTEzYzAwMTdlNDMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtMTY0LDYgKzE2NCw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiArPSBpcnFfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBtbXVfc3RyZXNzX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0gcnNlcV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHN0ZWFsX3RpbWVcbitURVNUX0dFTl9QUk9HU194ODYgKz0gc3RlYWxfdGltZV9jaGFuZ2VfcGlkXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHN5c3RlbV9jb3VudGVyX29mZnNldF90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHByZV9mYXVsdF9tZW1vcnlfdGVzdFxuIFxuQEAgLTIwNCw2ICsyMDUsNyBAQCBURVNUX0dFTl9QUk9HU19hcm02NCArPSBndWVzdF9tZW1mZF90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gbW11X3N0cmVzc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gcnNlcV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gc3RlYWxfdGltZVxuK1RFU1RfR0VOX1BST0dTX2FybTY0ICs9IHN0ZWFsX3RpbWVfY2hhbmdlX3BpZFxuIFxuIFRFU1RfR0VOX1BST0dTX3MzOTAgPSAkKFRFU1RfR0VOX1BST0dTX0NPTU1PTilcbiBURVNUX0dFTl9QUk9HU19zMzkwICs9IHMzOTAvbWVtb3BcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xMmQ0OTI3ZDFjMDE3XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmNcbkBAIC0wLDAgKzEsMjE2IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIFZlcmlmeSB0aGF0IEtWTSByZXNldHMgc3RlYWwtdGltZSBhY2NvdW50aW5nIHdoZW4gYSB2Q1BVIGZkIGlzIHJ1biBmcm9tXG4rICogYSBkaWZmZXJlbnQgaG9zdCBQSUQuXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wYXJhLmhcdTAwM2VcbisjaW5jbHVkZSBcImt2bV91dGlsLmhcIlxuKyNpbmNsdWRlIFwicHJvY2Vzc29yLmhcIlxuK1xuKyNkZWZpbmUgU1RfR1BBX0JBU0VcdFx0KDEgXHUwMDNjXHUwMDNjIDMwKVxuKyNkZWZpbmUgU1RfU0FORV9ERUxUQV9OU1x0KDFVTEwgXHUwMDNjXHUwMDNjIDYzKVxuK1xuK3N0YXRpYyB2b2lkICpzdF9ndmE7XG4rc3RhdGljIHU2NCBndWVzdF9zdG9sZW5fdGltZTtcbitzdGF0aWMgdTY0IG1haW5fc3RlYWw7XG4rc3RhdGljIHU2NCB0aHJlYWRfc3RlYWw7XG4rXG4rI2lmIGRlZmluZWQoX194ODZfNjRfXylcbitcbisjZGVmaW5lIFNURUFMX1RJTUVfU0laRVx0KChzaXplb2Yoc3RydWN0IGt2bV9zdGVhbF90aW1lKSArIDYzKSBcdTAwMjYgfjYzKVxuK1xuK3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3N0ZWFsX3RpbWUgKnN0ID0gc3RfZ3ZhO1xuK1xuK1x0V1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LVx1MDAzZXN0ZWFsKSk7XG4rXHRHVUVTVF9TWU5DKDApO1xuK1xuK1x0V1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LVx1MDAzZXN0ZWFsKSk7XG4rXHRHVUVTVF9TWU5DKDEpO1xuK1xuK1x0V1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LVx1MDAzZXN0ZWFsKSk7XG4rXHRHVUVTVF9ET05FKCk7XG4rfVxuK1xuK3N0YXRpYyBib29sIHN0ZWFsX3RpbWVfc3VwcG9ydGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRyZXR1cm4ga3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfS1ZNX1NURUFMX1RJTUUpO1xuK31cbitcbitzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2VuYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0dmNwdV9zZXRfbXNyKHZjcHUsIE1TUl9LVk1fU1RFQUxfVElNRSxcbitcdFx0ICAgICAodWxvbmcpc3RfZ3ZhIHwgS1ZNX01TUl9FTkFCTEVEKTtcbit9XG4rXG4rI2VsaWYgZGVmaW5lZChfX2FhcmNoNjRfXylcbitcbisjZGVmaW5lIFNURUFMX1RJTUVfU0laRVx0KChzaXplb2Yoc3RydWN0IHN0X3RpbWUpICsgNjMpIFx1MDAyNiB+NjMpXG4rXG4rI2RlZmluZSBQVl9USU1FX1NUXHQweGM1MDAwMDIxXG4rXG4rc3RydWN0IHN0X3RpbWUge1xuK1x0dTMyIHJldjtcbitcdHUzMiBhdHRyO1xuK1x0dTY0IHN0X3RpbWU7XG4rfTtcbitcbitzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXG4re1xuK1x0c3RydWN0IGFybV9zbWNjY19yZXMgcmVzO1xuK1x0c3RydWN0IHN0X3RpbWUgKnN0O1xuK1xuK1x0ZG9fc21jY2MoUFZfVElNRV9TVCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgXHUwMDI2cmVzKTtcbitcdEdVRVNUX0FTU0VSVF9ORShyZXMuYTAsIC0xKTtcbitcdEdVRVNUX0FTU0VSVF9FUShyZXMuYTAsICh1bG9uZylzdF9ndmEpO1xuK1xuK1x0c3QgPSAoc3RydWN0IHN0X3RpbWUgKilyZXMuYTA7XG4rXHRXUklURV9PTkNFKGd1ZXN0X3N0b2xlbl90aW1lLCBSRUFEX09OQ0Uoc3QtXHUwMDNlc3RfdGltZSkpO1xuK1x0R1VFU1RfU1lOQygwKTtcbitcbitcdFdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC1cdTAwM2VzdF90aW1lKSk7XG4rXHRHVUVTVF9TWU5DKDEpO1xuK1xuK1x0V1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LVx1MDAzZXN0X3RpbWUpKTtcbitcdEdVRVNUX0RPTkUoKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgc3RlYWxfdGltZV9zdXBwb3J0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgZGV2ID0ge1xuK1x0XHQuZ3JvdXAgPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0NUUkwsXG4rXHRcdC5hdHRyID0gS1ZNX0FSTV9WQ1BVX1BWVElNRV9JUEEsXG4rXHR9O1xuK1xuK1x0cmV0dXJuICFfX3ZjcHVfaW9jdGwodmNwdSwgS1ZNX0hBU19ERVZJQ0VfQVRUUiwgXHUwMDI2ZGV2KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgc3RlYWxfdGltZV9lbmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHU2NCBzdF9pcGEgPSAodWxvbmcpc3RfZ3ZhO1xuK1x0c3RydWN0IGt2bV9kZXZpY2VfYXR0ciBkZXYgPSB7XG4rXHRcdC5ncm91cCA9IEtWTV9BUk1fVkNQVV9QVlRJTUVfQ1RSTCxcbitcdFx0LmF0dHIgPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0lQQSxcbitcdFx0LmFkZHIgPSAodTY0KVx1MDAyNnN0X2lwYSxcbitcdH07XG4rXG4rXHR2Y3B1X2lvY3RsKHZjcHUsIEtWTV9TRVRfREVWSUNFX0FUVFIsIFx1MDAyNmRldik7XG4rfVxuK1xuKyNlbHNlXG4rI2Vycm9yIFwic3RlYWxfdGltZV9jaGFuZ2VfcGlkIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIGFyY2hpdGVjdHVyZVwiXG4rI2VuZGlmXG4rXG4rc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCB1Y2FsbCB1YztcbitcbitcdHZjcHVfcnVuKHZjcHUpO1xuK1xuK1x0c3dpdGNoIChnZXRfdWNhbGwodmNwdSwgXHUwMDI2dWMpKSB7XG4rXHRjYXNlIFVDQUxMX1NZTkM6XG4rXHRjYXNlIFVDQUxMX0RPTkU6XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBVQ0FMTF9BQk9SVDpcbitcdFx0UkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7XG4rXHRkZWZhdWx0OlxuK1x0XHRURVNUX0FTU0VSVChmYWxzZSwgXCJVbmV4cGVjdGVkIGV4aXQ6ICVzXCIsXG4rXHRcdFx0ICAgIGV4aXRfcmVhc29uX3N0cih2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbikpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCAqZG9fc3RlYWxfdGltZSh2b2lkICphcmcpXG4re1xuK1x0c3RydWN0IHRpbWVzcGVjIHRzLCBzdG9wO1xuK1xuK1x0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNnRzKTtcbitcdHN0b3AgPSB0aW1lc3BlY19hZGRfbnModHMsIE1JTl9SVU5fREVMQVlfTlMpO1xuK1xuK1x0d2hpbGUgKHRpbWVzcGVjX3RvX25zKHRpbWVzcGVjX3N1Yih0cywgc3RvcCkpIFx1MDAzYyAwKVxuK1x0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2dHMpO1xuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkICp2Y3B1X3RocmVhZCh2b2lkICphcmcpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gYXJnO1xuK1xuK1x0cnVuX3ZjcHUodmNwdSk7XG4rXHRzeW5jX2dsb2JhbF9mcm9tX2d1ZXN0KHZjcHUtXHUwMDNldm0sIGd1ZXN0X3N0b2xlbl90aW1lKTtcbitcdHRocmVhZF9zdGVhbCA9IGd1ZXN0X3N0b2xlbl90aW1lO1xuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK2ludCBtYWluKHZvaWQpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRwdGhyZWFkX2F0dHJfdCBhdHRyO1xuK1x0cHRocmVhZF90IHRocmVhZDtcbitcdGNwdV9zZXRfdCBjcHVzZXQ7XG4rXHRsb25nIHJ1bl9kZWxheTtcbitcdGxvbmcgcnVuX2RlbGF5X2RlbHRhO1xuK1xuK1x0a3NmdF9wcmludF9oZWFkZXIoKTtcbitcdGtzZnRfc2V0X3BsYW4oMSk7XG4rXG4rXHRDUFVfWkVSTyhcdTAwMjZjcHVzZXQpO1xuK1x0Q1BVX1NFVCgwLCBcdTAwMjZjcHVzZXQpO1xuK1x0cHRocmVhZF9hdHRyX2luaXQoXHUwMDI2YXR0cik7XG4rXHRwdGhyZWFkX2F0dHJfc2V0YWZmaW5pdHlfbnAoXHUwMDI2YXR0ciwgc2l6ZW9mKGNwdXNldCksIFx1MDAyNmNwdXNldCk7XG4rXHRwdGhyZWFkX3NldGFmZmluaXR5X25wKHB0aHJlYWRfc2VsZigpLCBzaXplb2YoY3B1c2V0KSwgXHUwMDI2Y3B1c2V0KTtcbitcbitcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XG4rXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLFxuK1x0XHRcdFx0ICAgIFNUX0dQQV9CQVNFLCAxLCAxLCAwKTtcbitcdHZpcnRfbWFwKHZtLCBTVF9HUEFfQkFTRSwgU1RfR1BBX0JBU0UsIDEpO1xuK1xuK1x0c3RfZ3ZhID0gKHZvaWQgKilTVF9HUEFfQkFTRTtcbitcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBzdF9ndmEpO1xuK1x0bWVtc2V0KGFkZHJfZ3ZhMmh2YSh2bSwgU1RfR1BBX0JBU0UpLCAwLCBTVEVBTF9USU1FX1NJWkUpO1xuK1xuK1x0VEVTVF9SRVFVSVJFKHN0ZWFsX3RpbWVfc3VwcG9ydGVkKHZjcHUpKTtcbitcbitcdHN0ZWFsX3RpbWVfZW5hYmxlKHZjcHUpO1xuK1x0cnVuX3ZjcHUodmNwdSk7XG4rXG4rXHRydW5fZGVsYXkgPSBnZXRfcnVuX2RlbGF5KCk7XG4rXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIFx1MDAyNmF0dHIsIGRvX3N0ZWFsX3RpbWUsIE5VTEwpO1xuK1xuK1x0d2hpbGUgKGdldF9ydW5fZGVsYXkoKSAtIHJ1bl9kZWxheSBcdTAwM2MgTUlOX1JVTl9ERUxBWV9OUylcbitcdFx0c2NoZWRfeWllbGQoKTtcbitcbitcdHB0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpO1xuK1x0cnVuX2RlbGF5X2RlbHRhID0gZ2V0X3J1bl9kZWxheSgpIC0gcnVuX2RlbGF5O1xuK1x0VEVTVF9BU1NFUlQocnVuX2RlbGF5X2RlbHRhIFx1MDAzZT0gTUlOX1JVTl9ERUxBWV9OUyxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgcnVuX2RlbGF5IFx1MDAzZT0gJWxkLCBnb3QgJWxkXCIsXG4rXHRcdCAgICBNSU5fUlVOX0RFTEFZX05TLCBydW5fZGVsYXlfZGVsdGEpO1xuK1xuK1x0cnVuX3ZjcHUodmNwdSk7XG4rXHRzeW5jX2dsb2JhbF9mcm9tX2d1ZXN0KHZtLCBndWVzdF9zdG9sZW5fdGltZSk7XG4rXHRtYWluX3N0ZWFsID0gZ3Vlc3Rfc3RvbGVuX3RpbWU7XG4rXG4rXHRURVNUX0FTU0VSVChtYWluX3N0ZWFsIFx1MDAzZT0gTUlOX1JVTl9ERUxBWV9OUyxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgc3RlYWwgdGltZSBcdTAwM2U9ICVsZCwgZ290ICVcIlBSSXU2NCxcbitcdFx0ICAgIE1JTl9SVU5fREVMQVlfTlMsIG1haW5fc3RlYWwpO1xuK1xuK1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdSk7XG4rXHRwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTtcbitcbitcdFRFU1RfQVNTRVJUKHRocmVhZF9zdGVhbCBcdTAwM2U9IG1haW5fc3RlYWwgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB0aHJlYWRfc3RlYWwgLSBtYWluX3N0ZWFsIFx1MDAzYyBTVF9TQU5FX0RFTFRBX05TLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBzYW5lIHN0ZWFsIGFmdGVyIHZDUFUgcGlkIGNoYW5nZTogXCJcbitcdFx0ICAgIFwib2xkPSVcIlBSSXU2NFwiLCBuZXc9JVwiUFJJdTY0LFxuK1x0XHQgICAgbWFpbl9zdGVhbCwgdGhyZWFkX3N0ZWFsKTtcbitcbitcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcInN0ZWFsIHRpbWUgcmVtYWlucyBzYW5lIGFjcm9zcyB2Q1BVIHBpZCBjaGFuZ2VcXG5cIik7XG4rXG4rXHRwdGhyZWFkX2F0dHJfZGVzdHJveShcdTAwMjZhdHRyKTtcbitcdGt2bV92bV9mcmVlKHZtKTtcbitcdGtzZnRfZmluaXNoZWQoKTtcbit9XG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vS2NvbmZpZyBiL3ZpcnQva3ZtL0tjb25maWdcbmluZGV4IGMzYzBlZTI1M2ZjNzcuLmY0MmEzYTBmYzViYWIgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9LY29uZmlnXG4rKysgYi92aXJ0L2t2bS9LY29uZmlnXG5AQCAtODIsNiArODIsOSBAQCBjb25maWcgSEFWRV9LVk1fSVJRX0JZUEFTU1xuIGNvbmZpZyBIQVZFX0tWTV9WQ1BVX1JVTl9QSURfQ0hBTkdFXG4gICAgICAgIGJvb2xcbiBcbitjb25maWcgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxuKyAgICAgICBib29sXG4rXG4gY29uZmlnIEhBVkVfS1ZNX05PX1BPTExcbiAgICAgICAgYm9vbFxuIFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5pbmRleCA2NWViMjZhMDUyMGQ4Li43ODRmMGQ5NDViNDU2IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTQ0NzgsNiArNDQ3OCwxMCBAQCBzdGF0aWMgbG9uZyBrdm1fdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0XHRpZiAocilcbiBcdFx0XHRcdGJyZWFrO1xuIFxuKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxuK1x0XHRcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4rI2VuZGlmXG4rXG4gXHRcdFx0bmV3cGlkID0gZ2V0X3Rhc2tfcGlkKGN1cnJlbnQsIFBJRFRZUEVfUElEKTtcbiBcdFx0XHR3cml0ZV9sb2NrKFx1MDAyNnZjcHUtXHUwMDNlcGlkX2xvY2spO1xuIFx0XHRcdHZjcHUtXHUwMDNlcGlkID0gbmV3cGlkO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDM6MjcuNzc3Nzc5OTc4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY3NzkyMjczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBLVk0gU3RlYWwgVGltZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgYWxsIGFib3V0IGhvdyBLVk0gaGFuZGxlcyBcInN0ZWFsIHRpbWVcIiB3aXRoIHBhcmF2aXJ0dWFsaXphdGlvbi4gSSBuZWVkIHRvIGJyZWFrIHRoaXMgZG93bi5cblxuRmlyc3QsIGl0J3MgYWRkaW5nIHRoaXMgYENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTWFrZXMgc2Vuc2Ug4oCTIHRoaXMgc2VlbXMgdG8gYmUgdGhlIHRyaWdnZXIgZm9yIGVuYWJsaW5nIHRoaXMgZW5oYW5jZWQgc3RlYWwgdGltZSBhY2NvdW50aW5nLCBhbmQgaXQncyBzcGVjaWZpY2FsbHkgZm9yIGFybTY0LCBsb29uZ2FyY2gsIHJpc2N2LCBhbmQgeDg2IEtWTS4gR29vZCwgaXQncyB0YXJnZXRlZCB0byByZWxldmFudCBhcmNoaXRlY3R1cmVzLlxuXG5OZXh0LCBhbmQgdGhpcyBpcyBrZXksIGl04oCZcyBtb3ZpbmcgdGhlIGBsYXN0X3N0ZWFsYCB2YXJpYWJsZS4gQ3VycmVudGx5IGl0IHJlc2lkZXMgaW4gYSBgc3RydWN0IGt2bV92Y3B1X2FyY2hgIChvciBhcmNoLXNwZWNpZmljIHN0cnVjdCksIHdoaWNoIGlzIHBsYXRmb3JtLWRlcGVuZGVudC4gQnV0LCBpdCdzIG5vdyBiZWluZyBtb3ZlZCB0byB0aGUgY29tbW9uIGBzdHJ1Y3Qga3ZtX3ZjcHVgIGlmIHRoYXQgYENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FYCBpcyBzZXQuIFRoaXMgbWVhbnMgaXQncyBtYWtpbmcgdGhlIGFjY291bnRpbmcgbG9naWMgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50LiBJdCB3aWxsIGJlIGVhc2llciB0byB3b3JrIHdpdGguIFZlcnkgc2Vuc2libGUuIFRoYXQgbWFrZXMgdGhlIHdob2xlIHN5c3RlbSBjbGVhbmVyLlxuXG5Ob3csIHRoZSBpbnRlcmVzdGluZyBwYXJ0IOKAkyBob3cgdGhpcyBgbGFzdF9zdGVhbGAgZ2V0cyB1cGRhdGVkLiBJIG5lZWQgdG8gZGlnIGludG8gYHZpcnQva3ZtL2t2bV9tYWluLmNgIGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSByZWFsIGxvZ2ljIGhhcHBlbnMuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUgdXBkYXRlIGhhcHBlbnMgd2hlbiBgS1ZNX1JVTmAgaXMgY2FsbGVkLCBhbmQsIGNydWNpYWxseSwgd2hlbiB0aGUgUHJvY2VzcyBJRCAoUElEKSBjaGFuZ2VzIGluc2lkZSB0aGUgYGt2bV92Y3B1X2lvY3RsYCBmdW5jdGlvbiB3aGlsZSBoYW5kbGluZyBgS1ZNX1JVTmAgdGhyb3VnaCBQSUQgY2hlY2tzLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoYXQncyBpbXBsZW1lbnRlZC4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhhdCBmaWxlIGFuZCBjaGVjayBhcm91bmQgbGluZSA0NDc4IHRvIHNlZSB0aGUgZGV0YWlscyBvZiB0aGUgbG9naWMuIEhvcGVmdWxseSwgaXQgaXMgcHJldHR5IHNpbXBsZSwgYW5kIEkgY2FuIHF1aWNrbHkgZ3Jhc3Agd2hhdCBpcyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg5OSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAzOjMxLjQ1NTcwNjI3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNDg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0NjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ0NjA6XFx0XFx0Y2FzZSBLVk1fUlVOOiB7XFxuNDQ2MTpcXHRcXHRcXHRzdHJ1Y3QgcGlkICpvbGRwaWQ7XFxuNDQ2MjpcXHRcXHRcXHRyID0gLUVJTlZBTDtcXG40NDYzOlxcdFxcdFxcdGlmIChhcmcpXFxuNDQ2NDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG40NDY1OlxcdFxcbjQ0NjY6XFx0XFx0XFx0LypcXG40NDY3OlxcdFxcdFxcdCAqIE5vdGUsIHZjcHUtXFx1MDAzZXBpZCBpcyBwcmltYXJpbHkgcHJvdGVjdGVkIGJ5IHZjcHUtXFx1MDAzZW11dGV4LiBUaGVcXG40NDY4OlxcdFxcdFxcdCAqIGRlZGljYXRlZCByL3cgbG9jayBhbGxvd3Mgb3RoZXIgdGFza3MsIGUuZy4gb3RoZXIgdkNQVXMsIHRvXFxuNDQ2OTpcXHRcXHRcXHQgKiByZWFkIHZjcHUtXFx1MDAzZXBpZCB3aGlsZSB0aGlzIHZDUFUgaXMgaW4gS1ZNX1JVTiwgZS5nLiB0byB5aWVsZFxcbjQ0NzA6XFx0XFx0XFx0ICogZGlyZWN0bHkgdG8gdGhpcyB2Q1BVXFxuNDQ3MTpcXHRcXHRcXHQgKi9cXG40NDcyOlxcdFxcdFxcdG9sZHBpZCA9IHZjcHUtXFx1MDAzZXBpZDtcXG40NDczOlxcdFxcdFxcdGlmICh1bmxpa2VseShvbGRwaWQgIT0gdGFza19waWQoY3VycmVudCkpKSB7XFxuNDQ3NDpcXHRcXHRcXHRcXHQvKiBUaGUgdGhyZWFkIHJ1bm5pbmcgdGhpcyBWQ1BVIGNoYW5nZWQuICovXFxuNDQ3NTpcXHRcXHRcXHRcXHRzdHJ1Y3QgcGlkICpuZXdwaWQ7XFxuNDQ3NjpcXHRcXG40NDc3OlxcdFxcdFxcdFxcdHIgPSBrdm1fYXJjaF92Y3B1X3J1bl9waWRfY2hhbmdlKHZjcHUpO1xcbjQ0Nzg6XFx0XFx0XFx0XFx0aWYgKHIpXFxuNDQ3OTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG40NDgwOlxcdFxcbjQ0ODE6XFx0I2lmZGVmIENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FXFxuNDQ4MjpcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XFxuNDQ4MzpcXHQjZW5kaWZcXG40NDg0OlxcdFxcbjQ0ODU6XFx0XFx0XFx0XFx0bmV3cGlkID0gZ2V0X3Rhc2tfcGlkKGN1cnJlbnQsIFBJRFRZUEVfUElEKTtcXG40NDg2OlxcdFxcdFxcdFxcdHdyaXRlX2xvY2soXFx1MDAyNnZjcHUtXFx1MDAzZXBpZF9sb2NrKTtcXG40NDg3OlxcdFxcdFxcdFxcdHZjcHUtXFx1MDAzZXBpZCA9IG5ld3BpZDtcXG40NDg4OlxcdFxcdFxcdFxcdHdyaXRlX3VubG9jayhcXHUwMDI2dmNwdS1cXHUwMDNlcGlkX2xvY2spO1xcbjQ0ODk6XFx0XFxuNDQ5MDpcXHRcXHRcXHRcXHRwdXRfcGlkKG9sZHBpZCk7XFxuNDQ5MTpcXHRcXHRcXHR9XFxuNDQ5MjpcXHRcXHRcXHR2Y3B1LVxcdTAwM2V3YW50c190b19ydW4gPSAhUkVBRF9PTkNFKHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlaW1tZWRpYXRlX2V4aXRfX3Vuc2FmZSk7XFxuNDQ5MzpcXHRcXHRcXHRyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4odmNwdSk7XFxuNDQ5NDpcXHRcXHRcXHR2Y3B1LVxcdTAwM2V3YW50c190b19ydW4gPSBmYWxzZTtcXG40NDk1OlxcdFxcbjQ0OTY6XFx0XFx0XFx0LypcXG40NDk3OlxcdFxcdFxcdCAqIEZJWE1FOiBSZW1vdmUgdGhpcyBoYWNrIG9uY2UgYWxsIEtWTSBhcmNoaXRlY3R1cmVzXFxuNDQ5ODpcXHRcXHRcXHQgKiBzdXBwb3J0IHRoZSBnZW5lcmljIFRJRiBiaXRzLCBpLmUuIGEgZGVkaWNhdGVkIFRJRl9SU0VRLlxcbjQ0OTk6XFx0XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAzOjMxLjQ1NjI0Mzk4NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxMDkwMjc2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBWQ1BVIFN0ZWFsIFRpbWUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGhvdyBLVk0gdHJhY2tzIFwic3RlYWwgdGltZVwiIHdpdGhpbiBhIHZpcnR1YWwgQ1BVIChWQ1BVKS4gVGhlIHRyaWdnZXIgc2VlbXMgdG8gYmUgd2hlbiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdGhyZWFkIGZvciBhIFZDUFUgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHdoZW4gYG9sZHBpZGAgKHRoZSBwcmV2aW91cyB0aHJlYWQncyBQSUQpIGRpZmZlcnMgZnJvbSBgdGFza19waWQoY3VycmVudClgIHdpdGhpbiB0aGUgYEtWTV9SVU5gIG9wZXJhdGlvbi4gSW4gdGhhdCBzY2VuYXJpbywgYHZjcHUtXHUwMDNlbGFzdF9zdGVhbGAgZ2V0cyByZXNldCB0byB0aGUgdmFsdWUgb2YgYGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXlgLiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIGluaXRpYWxpemF0aW9uIHBvaW50IGZvciB0aGUgbmV3IFZDUFUgcnVuLlxuXG5NeSBpbnRlcmVzdCBpcyBwaXF1ZWQgYnkgaG93IGBsYXN0X3N0ZWFsYCBpcyB0aGVuICp1c2VkKi4gSXQgbG9va3MgbGlrZSB0aGUgY3JpdGljYWwgZnVuY3Rpb24gaGVyZSBpcyBgcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KWAgbG9jYXRlZCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gVGhhdCBmdW5jdGlvbiAqbXVzdCogYmUgdGhlIHBsYWNlIHdoZXJlIGB2Y3B1LVx1MDAzZWxhc3Rfc3RlYWxgIGlzIHVzZWQgdG8gYWNjdW11bGF0ZSB0aW1lLiBOZWVkIHRvIHNlZSBob3cgdGhhdCBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBjb250cmlidXRlcyB0byB0aGUgZmluYWwgbWVhc3VyZW1lbnQuIEJhc2VkIG9uIHRoZSBmaWxlIHBhdGgsIEkgc2hvdWxkIGxvb2sgYXJvdW5kIGxpbmUgMjEyOSB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExOTIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMzozNC41NjUyNzQ2NjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjYzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxMTU6XFx0XFx0XFx0aWYgKCF1c2VyX2FjY2Vzc19iZWdpbihzdCwgc2l6ZW9mKCpzdCkpKVxcbjIxMTY6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjIxMTc6XFx0XFxuMjExODpcXHRcXHRcXHR1bnNhZmVfcHV0X3VzZXIoMCwgXFx1MDAyNnN0LVxcdTAwM2VwcmVlbXB0ZWQsIG91dCk7XFxuMjExOTpcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnN0LnByZWVtcHRlZCA9IDA7XFxuMjEyMDpcXHRcXHR9XFxuMjEyMTpcXHRcXG4yMTIyOlxcdFxcdHVuc2FmZV9nZXRfdXNlcih2ZXJzaW9uLCBcXHUwMDI2c3QtXFx1MDAzZXZlcnNpb24sIG91dCk7XFxuMjEyMzpcXHRcXHRpZiAodmVyc2lvbiBcXHUwMDI2IDEpXFxuMjEyNDpcXHRcXHRcXHR2ZXJzaW9uICs9IDE7ICAvKiBmaXJzdCB0aW1lIHdyaXRlLCByYW5kb20ganVuayAqL1xcbjIxMjU6XFx0XFxuMjEyNjpcXHRcXHR2ZXJzaW9uICs9IDE7XFxuMjEyNzpcXHRcXHR1bnNhZmVfcHV0X3VzZXIodmVyc2lvbiwgXFx1MDAyNnN0LVxcdTAwM2V2ZXJzaW9uLCBvdXQpO1xcbjIxMjg6XFx0XFxuMjEyOTpcXHRcXHRzbXBfd21iKCk7XFxuMjEzMDpcXHRcXG4yMTMxOlxcdFxcdHVuc2FmZV9nZXRfdXNlcihzdGVhbCwgXFx1MDAyNnN0LVxcdTAwM2VzdGVhbCwgb3V0KTtcXG4yMTMyOlxcdFxcdHN0ZWFsICs9IGN1cnJlbnQtXFx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5IC0gdmNwdS1cXHUwMDNlbGFzdF9zdGVhbDtcXG4yMTMzOlxcdFxcdHZjcHUtXFx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcXG4yMTM0OlxcdFxcdHVuc2FmZV9wdXRfdXNlcihzdGVhbCwgXFx1MDAyNnN0LVxcdTAwM2VzdGVhbCwgb3V0KTtcXG4yMTM1OlxcdFxcbjIxMzY6XFx0XFx0dmVyc2lvbiArPSAxO1xcbjIxMzc6XFx0XFx0dW5zYWZlX3B1dF91c2VyKHZlcnNpb24sIFxcdTAwMjZzdC1cXHUwMDNldmVyc2lvbiwgb3V0KTtcXG4yMTM4OlxcdFxcbjIxMzk6XFx0IG91dDpcXG4yMTQwOlxcdFxcdHVzZXJfYWNjZXNzX2VuZCgpO1xcbjIxNDE6XFx0IGRpcnR5OlxcbjIxNDI6XFx0XFx0bWFya19wYWdlX2RpcnR5X2luX3Nsb3QodmNwdS1cXHUwMDNla3ZtLCBnaGMtXFx1MDAzZW1lbXNsb3QsIGdwYV90b19nZm4oZ2hjLVxcdTAwM2VncGEpKTtcXG4yMTQzOlxcdH1cXG4yMTQ0OlxcdFxcbjIxNDU6XFx0c3RhdGljIGlubGluZSBib29sIGt2bV9jYW5fbXdhaXRfaW5fZ3Vlc3Qodm9pZClcXG4yMTQ2OlxcdHtcXG4yMTQ3OlxcdFxcdHJldHVybiBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTVdBSVQpIFxcdTAwMjZcXHUwMDI2XFxuMjE0ODpcXHRcXHRcXHQhYm9vdF9jcHVfaGFzX2J1ZyhYODZfQlVHX01PTklUT1IpIFxcdTAwMjZcXHUwMDI2XFxuMjE0OTpcXHRcXHRcXHRib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVJBVCk7XFxuMjE1MDpcXHR9XFxuMjE1MTpcXHRcXG4yMTUyOlxcdHN0YXRpYyB1NjQga3ZtX2dldF9hbGxvd2VkX2Rpc2FibGVfZXhpdHModm9pZClcXG4yMTUzOlxcdHtcXG4yMTU0OlxcdFxcdHU2NCByID0gS1ZNX1g4Nl9ESVNBQkxFX0VYSVRTX1BBVVNFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMzozNC41NjYyMTk2NzJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDcyOTA3Mjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IEV2YWx1YXRpb246IEtWTSBQSUQgTWlncmF0aW9uL1N0ZWFsIFRpbWUgRml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGxvb2tzIGxpa2UgYSBwcm9taXNpbmcgYXJlYSBmb3IgZnV6emluZy4gVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIHdoaWNoIGlzIGNydWNpYWwsIGFuZCB0aGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGtleSBLVk0gZmlsZXM6IGBrdm1fbWFpbi5jYCwgYHg4Ni5jYCwgYSBgS2NvbmZpZ2AgZmlsZSwgYW5kIHNldmVyYWwgaGVhZGVyIGZpbGVzLiBBZGRpdGlvbmFsbHksIGl0IGFmZmVjdHMgYXJtNjQsIGxvb25nYXJjaCwgYW5kIHJpc2N2IGZpbGVzLiBUaGF0IGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbiDigJMgYnJvYWRlciBpbXBhY3Qgb2Z0ZW4gbWVhbnMgYnJvYWRlciBmdXp6aW5nIHN1cmZhY2UuIFBsdXMsIHRoZSBpbmNsdXNpb24gb2YgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8qYCBzdWdnZXN0cyB0aGlzIGlzIGFscmVhZHkgb24gc29tZW9uZSdzIHJhZGFyIGZvciB0ZXN0aW5nLCBtYWtpbmcgaXQgZXZlbiBtb3JlIHJlbGV2YW50LlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgY29kZT8gU2VjdGlvbiAxLCAyLCBhbmQgMyBoZWxwIGNsYXJpZnkgdGhhdC4gS1ZNIGlzIGZ1bGx5IHN1cHBvcnRlZCBvbiBhbWQ2NCB3aXRoaW4gUUVNVSBhbmQgc3l6a2FsbGVyLCB3aGljaCBtZWFucyB3ZSBoYXZlIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlIHRvIHJlYWNoIHRoaXMgY29kZS4gU3l6a2FsbGVyJ3MgS1ZNIGRlc2NyaXB0aW9ucyBhbmQgaW9jdGxzIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBhdHRhY2sgc3VyZmFjZS5cblxuVGhlIGNvcmUgc3Vic3lzdGVtIGhlcmUgaXMgS1ZNIHZpcnR1YWxpemF0aW9uLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIGFkZHJlc3NpbmcgYSBidWcgcmVsYXRlZCB0byB2Q1BVIFBJRCBtaWdyYXRpb24uIEFwcGFyZW50bHksIHdoZW4gYSB2Q1BVIHJ1bnMgb24gYSBkaWZmZXJlbnQgaG9zdCB0aHJlYWQgb3IgUElELCB0aGUgc3RlYWwgdGltZSBjYWxjdWxhdGlvbnMgd2VyZSBiZWluZyBjb3JydXB0ZWQgYmVjYXVzZSBgbGFzdF9zdGVhbGAgd2Fzbid0IGJlaW5nIHVwZGF0ZWQgY29ycmVjdGx5LCBsZWFkaW5nIHRvIHBvdGVudGlhbGx5IG1hc3NpdmUgZGVsdGFzIG9yIHVuZGVyZmxvd3MuIFRoZSBmaXggaW52b2x2ZXMgcmVmYWN0b3JpbmcgYGxhc3Rfc3RlYWxgIGludG8gdGhlIGdlbmVyaWMgYGt2bV92Y3B1YCBzdHJ1Y3QgYW5kIHJlc2V0dGluZyBpdCB3aXRoaW4gYGt2bV92Y3B1X2lvY3RsKClgIGR1cmluZyBQSUQgY2hhbmdlcy4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIGNvZGUgaXMgZGVhbGluZyB3aXRoIHZDUFUgc2NoZWR1bGluZyBhbmQgY29udGV4dCBzd2l0Y2hpbmcsIGEga25vd24gYXJlYSBvZiBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS5cblxuVGhlIGV4ZWN1dGFibGUgY29kZSBtb2RpZmllZCBpbmNsdWRlcyBga3ZtX3ZjcHVfaW9jdGxgIGFuZCBgcmVjb3JkX3N0ZWFsX3RpbWVgLCB3aGljaCBhcmUgaW1wb3J0YW50IHRvIEtWTSBvcGVyYXRpb24sIGFuZCB0aGV5IGFyZSB4ODYvZ2VuZXJpYy5cblxuR2l2ZW4gdGhlIHJlYWNoYWJpbGl0eSwgdGhlIGNyaXRpY2FsIGNvcmUgc3Vic3lzdGVtLCBhbmQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBhZmZlY3RlZCwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBmaXggZGlyZWN0bHkgcmVsYXRlcyB0byBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGludGVnZXIgb3ZlcmZsb3dzL3VuZGVyZmxvd3MgaW4gdGltaW5nIGNhbGN1bGF0aW9ucy4gV2Ugd2lsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkIOKAkyBzcGVjaWZpY2FsbHkgYEtWTWAgKG9yIGBLVk1fSU5URUxgL2BLVk1fQU1EYCwgYEtWTV9YODZgKS4gSSdsbCBuZWVkIHRvIGNoZWNrIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgYW5kIGB2aXJ0L2t2bS9LY29uZmlnYCB0byBjb25maXJtIHRob3NlIGNvbmZpZyBmbGFncy4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgdGFyZ2V0IGZvciBmb2N1c2VkIGZ1enppbmcgY2FtcGFpZ25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI3NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAzOjM5LjAzOTEyOThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMzUyOTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTM6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTU0LVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo3MDpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcxLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjg0OmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODUtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTc6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk4LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA3LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwODpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA5LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjM9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzQtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM1OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM2LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ3OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ4LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU3OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1OC1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3NDpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NS1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4My1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODQ6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODUtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk1OmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk2LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDk6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTAtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTctXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE4OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE5LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMxOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzQ6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzUtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMzozOS4xNDk0ODgxMjJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODk3NjY3NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBTdGVhbCBUaW1lIEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgS1ZNIHN0ZWFsIHRpbWUgc2l0dWF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZC4gSSdsbCBzdGFydCBieSBjaGVja2luZyBgQ09ORklHX0tWTWAgYW5kLCBvZiBjb3Vyc2UsIHRoZSB2ZW5kb3Itc3BlY2lmaWMgb3B0aW9ucyBsaWtlIGBDT05GSUdfS1ZNX0lOVEVMYCBhbmQgYENPTkZJR19LVk1fQU1EYC4gVGhlbiwgSSdsbCB0cmFjZSB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXMsIG1ha2luZyBzdXJlIGBLVk1fWDg2YCBpcyBjb3JyZWN0bHkgc2VsZWN0aW5nIGBIQVZFX0tWTV9QVl9TVEVBTF9USU1FYC5cblxuQWgsIGhlcmUncyB0aGUgbGlua2FnZSwgaW4gYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gYGNvbmZpZyBLVk1fWDg2YCBkb2VzIGluZGVlZCBgc2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVgLiBMZXQncyBiZSBzdXJlIG9mIHRoZSBuZXN0aW5nLiBgS1ZNX1g4NmAgaXRzZWxmIGlzIGRlcGVuZGVudCBvbiB0aGUgYnJvYWRlciBLVk0sIHZpYSB0aGUgZGVwZW5kZW5jeSBgZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKWAuIFJpZ2h0LCBzbyBgS1ZNYCBpcyB0aGUgcGFyZW50LCBhbmQgdGhhdCBjb25maWd1cmF0aW9uIGlzIGl0c2VsZiB1bmRlciBgaWYgVklSVFVBTElaQVRJT05gLiBTbywgdG8gYmUgY2xlYXIsIGl0J3MgYEtWTWAsIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCAob3IgYEtWTV9YODZgKSB3ZSdyZSB0YWxraW5nIGFib3V0LlxuXG5Ob3csIHRoZSBjcnVjaWFsIHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cuIEknbGwgc2VhcmNoIHRoZSB4ODYgS1ZNIGNvZGUgdG8gaWRlbnRpZnkgdGhlIGxvY2F0aW9ucyB3aGVyZSBgcmVjb3JkX3N0ZWFsX3RpbWVgIGlzIGFjdHVhbGx5IGNhbGxlZC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGVudHJ5cG9pbnRzIGFuZCBjb250ZXh0IG9mIHRoZSBtZWFzdXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTAzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAzOjQyLjA0NzE1OTM1N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMDI3MzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlY29yZF9zdGVhbF90aW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTIwNDY9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXJ2aWNlX2xvY2FsX3RsYl9mbHVzaF9yZXF1ZXN0cyk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTIwNDctXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjIwNDg6c3RhdGljIHZvaWQgcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ODYuYy0yMDQ5LXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz04MDUwPXN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtODE0MC1cXHRcXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpKVxcbmFyY2gveDg2L2t2bS94ODYuYzo4MTQxOlxcdFxcdFxcdHJlY29yZF9zdGVhbF90aW1lKHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy04MTQyLVxcdFxcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1BNVSwgdmNwdSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAzOjQyLjE2ODE5NDc2OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTUwMTE3NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyBmb3IgU3RlYWwgVGltZSBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBrZXkgZm9jdXMgc3ltYm9scyB0byBwaW5wb2ludCB3aXRoaW4gdGhlIGNvZGUgZm9yIHRoaXMgc3RlYWwgdGltZSBpbnZlc3RpZ2F0aW9uLiBJJ20gdGhpbmtpbmcuLi5cblxuKiAgIGByZWNvcmRfc3RlYWxfdGltZWAganVtcHMgb3V0IGltbWVkaWF0ZWx5LCBlc3BlY2lhbGx5IHNpbmNlIGl0J3MgZ290IGEgbW9kaWZpY2F0aW9uIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yLlxuXG4qICAgVGhlbiB0aGVyZSdzIGBrdm1fdmNwdV9pb2N0bGAgd2hpY2ggaGFzIGNoYW5nZXMgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgLCBhbmQgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgS1ZNX1JVTiBoYW5kbGluZyBhbmQgUElEIGNoYW5nZXMuIEludHJpZ3VpbmcuLi5jb3VsZCBiZSByZWxhdGVkIHRvIGNvbnRleHQgc3dpdGNoaW5nIG9yIGFjY291bnRpbmcuXG5cbiogICBgdmNwdV9lbnRlcl9ndWVzdGAgaXMgYW5vdGhlciBnb29kIGNhbmRpZGF0ZS4gSXQncyBsaXN0ZWQgYXMgYSAqY2FsbGVyKiBvZiBgcmVjb3JkX3N0ZWFsX3RpbWVgLCB3aGljaCBtYWtlcyBpdCBsaWtlbHkgYSBrZXkgYXJlYSB0byB1bmRlcnN0YW5kIHRoZSB0aW1pbmcgZmxvdy5cblxuKiAgIE5vdywgYmV5b25kIHRoZSBvYnZpb3VzLi4uc2hvdWxkIEkgYmUgbG9va2luZyBhdCBga3ZtX3NldF9tc3JfY29tbW9uYD8gSXMgdGhlcmUgc29tZSBtYWdpYyBzZXR0aW5nIGhlcmUgdG8gZW5hYmxlIG9yIGRpc2FibGUgc3RlYWwgdGltZT8gSSdtIGJldHRpbmcgdGhlcmUgaXMuIEkgc2hvdWxkIGRlZmluaXRlbHkgY2hlY2sgdGhhdCBvbmUsIGFsb25nIHdpdGggaG93IHN0ZWFsIHRpbWUgaXMgaW5pdGlhbGl6ZWQgYW5kIGVuYWJsZWQgb24gdGhlIHg4NiBhcmNoaXRlY3R1cmUuIExldCdzIHRyYWNlIGl0IGFuZCBzZWUgaG93IGl0IHdvcmtzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM3OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMzo0NC43MTgzMTQ5OThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3Njg0NTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1TUl9LVk1fU1RFQUxfVElNRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tc3JzLmM9MjU0PXN0YXRpYyBjb25zdCB1MzIgZW11bGF0ZWRfbXNyc19hbGxbXSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjc3LVxcbmFyY2gveDg2L2t2bS9tc3JzLmM6Mjc4OlxcdE1TUl9LVk1fQVNZTkNfUEZfRU4sIE1TUl9LVk1fU1RFQUxfVElNRSxcXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTI3OS1cXHRNU1JfS1ZNX1BWX0VPSV9FTiwgTVNSX0tWTV9BU1lOQ19QRl9JTlQsIE1TUl9LVk1fQVNZTkNfUEZfQUNLLFxcbi0tXFxuYXJjaC94ODYva3ZtL21zcnMuYz0xNDQyPWludCBrdm1fc2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxcbi0tXFxuYXJjaC94ODYva3ZtL21zcnMuYy0xNzA3LVxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L2t2bS9tc3JzLmM6MTcwODpcXHRjYXNlIE1TUl9LVk1fU1RFQUxfVElNRTpcXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE3MDktXFx0XFx0aWYgKCFndWVzdF9wdl9oYXModmNwdSwgS1ZNX0ZFQVRVUkVfU1RFQUxfVElNRSkpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jPTE4OTk9aW50IGt2bV9nZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTIwNzYtXFx0XFx0YnJlYWs7XFxuYXJjaC94ODYva3ZtL21zcnMuYzoyMDc3OlxcdGNhc2UgTVNSX0tWTV9TVEVBTF9USU1FOlxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjA3OC1cXHRcXHRpZiAoIWd1ZXN0X3B2X2hhcyh2Y3B1LCBLVk1fRkVBVFVSRV9TVEVBTF9USU1FKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDM6NDQuNzg2MDAzOTM5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNjk4NDIyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gTVNSIEhhbmRsaW5nIGluIEtWTSBmb3IgeDg2KipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBnZXQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgTVNScyBhcmUgYmVpbmcgbWFuYWdlZCB3aXRoaW4gdGhlIEtWTSBoeXBlcnZpc29yLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBhcmNoL3g4Ni9rdm0vbXNycy5jYCwgYW5kIEknbSB0YXJnZXRpbmcgYXJvdW5kIGxpbmUgMTcwOC4gVGhhdCBhcmVhIHVzdWFsbHkgaG9sZHMgY3JpdGljYWwgbG9naWMgZm9yIGVpdGhlciBhIHNwZWNpZmljIE1TUidzIHJlYWQvd3JpdGUgcGF0aCBvciBzb21lIGtleSBkYXRhIHN0cnVjdHVyZSByZWxhdGVkIHRvIE1TUiBhY2Nlc3MuIEkgc3VzcGVjdCBpdCdzIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHRvIHVucmF2ZWwgd2hhdGV2ZXIgSSdtIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBIb3BlZnVsbHksIHRoaXMgaXMgdGhlIGFyZWEgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI5NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAzOjQ3LjA1NTg0OTYxNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTk0NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL21zcnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzA1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzA1OlxcdFxcdFxcdFxcdGt2bV9jaGVja19hc3luY19wZl9jb21wbGV0aW9uKHZjcHUpO1xcbjE3MDY6XFx0XFx0XFx0fVxcbjE3MDc6XFx0XFx0XFx0YnJlYWs7XFxuMTcwODpcXHRcXHRjYXNlIE1TUl9LVk1fU1RFQUxfVElNRTpcXG4xNzA5OlxcdFxcdFxcdGlmICghZ3Vlc3RfcHZfaGFzKHZjcHUsIEtWTV9GRUFUVVJFX1NURUFMX1RJTUUpKVxcbjE3MTA6XFx0XFx0XFx0XFx0cmV0dXJuIEtWTV9NU1JfUkVUX1VOU1VQUE9SVEVEO1xcbjE3MTE6XFx0XFxuMTcxMjpcXHRcXHRcXHRpZiAodW5saWtlbHkoIXNjaGVkX2luZm9fb24oKSkpXFxuMTcxMzpcXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG4xNzE0OlxcdFxcbjE3MTU6XFx0XFx0XFx0aWYgKGRhdGEgXFx1MDAyNiBLVk1fU1RFQUxfUkVTRVJWRURfTUFTSylcXG4xNzE2OlxcdFxcdFxcdFxcdHJldHVybiAxO1xcbjE3MTc6XFx0XFxuMTcxODpcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnN0Lm1zcl92YWwgPSBkYXRhO1xcbjE3MTk6XFx0XFxuMTcyMDpcXHRcXHRcXHRpZiAoIShkYXRhIFxcdTAwMjYgS1ZNX01TUl9FTkFCTEVEKSlcXG4xNzIxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE3MjI6XFx0XFxuMTcyMzpcXHRcXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfU1RFQUxfVVBEQVRFLCB2Y3B1KTtcXG4xNzI0OlxcdFxcbjE3MjU6XFx0XFx0XFx0YnJlYWs7XFxuMTcyNjpcXHRcXHRjYXNlIE1TUl9LVk1fUFZfRU9JX0VOOlxcbjE3Mjc6XFx0XFx0XFx0aWYgKCFndWVzdF9wdl9oYXModmNwdSwgS1ZNX0ZFQVRVUkVfUFZfRU9JKSlcXG4xNzI4OlxcdFxcdFxcdFxcdHJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDtcXG4xNzI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMzo0Ny4wNTYxNTIzNTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzY5MzI5NTE4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLVk0gU3RvbGVuIFRpbWUgUmV2aWV3KipcblxuT2theSwgdGltZSB0byB0aG9yb3VnaGx5IGF1ZGl0IHRoZXNlIHN0b2xlbiB0aW1lIGltcGxlbWVudGF0aW9ucyBhY3Jvc3MgYXJjaGl0ZWN0dXJlcy4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIHg4NiBhbmQgZ2VuZXJpYyB4ODYgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQuIEkgc2VlIHR3byBtYWluIHBsYXllcnMgaGVyZTogYGt2bV92Y3B1X2lvY3RsYCBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AsIHNwZWNpZmljYWxseSB1bmRlciBgS1ZNX1JVTmAgd2hlbiB0aGUgb2xkIHByb2Nlc3MgSUQgZGlmZmVycyBmcm9tIHRoZSBjdXJyZW50IG9uZSwgd2hpY2ggcmVzZXRzIGB2Y3B1LVx1MDAzZWxhc3Rfc3RlYWxgIHVzaW5nIHRoZSBgY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheWAgdmFsdWUsIGFuZCBgcmVjb3JkX3N0ZWFsX3RpbWVgIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLCB3aGljaCBhY3R1YWxseSB1cGRhdGVzIHRoZSAnc3RlYWwnIHRpbWUgYmFzZWQgb24gdGhhdCBgdmNwdS1cdTAwM2VsYXN0X3N0ZWFsYCBhbmQgdGhlbiB1cGRhdGVzIGB2Y3B1LVx1MDAzZWxhc3Rfc3RlYWxgIHdpdGggdGhhdCBzYW1lIGN1cnJlbnQgc2NoZWQgaW5mby4gR290IGl0LlxuXG5Ob3csIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciBtb2RpZmljYXRpb25zIGluIG90aGVyIGFyY2hpdGVjdHVyZXMuIExvb2tzIGxpa2U6XG5cbiogICBGb3IgYXJtNjQsIGBhcmNoL2FybTY0L2t2bS9wdnRpbWUuY2AgaGFzIHRoZXNlIHR3byBtb2RpZmllZCBmdW5jdGlvbnMgYGt2bV91cGRhdGVfc3RvbGVuX3RpbWVgLCBhbmQgYGt2bV9pbml0X3N0b2xlbl90aW1lYC5cbiogICBMb29uZ2FyY2ggaGFzIGBhcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jYDogYGt2bV9zYXZlX25vdGlmeWAgYW5kIGBhcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jYDogYGt2bV91cGRhdGVfc3RvbGVuX3RpbWVgLCBga3ZtX2xvb25nYXJjaF9wdnRpbWVfc2V0X2F0dHJgXG4qICAgQW5kIGZpbmFsbHksIHJpc2N2IGhhcyBzZXZlcmFsLCBmb3VuZCBpbiBgYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfc3RhLmNgOiBga3ZtX3Jpc2N2X3ZjcHVfc2JpX3N0YV9yZXNldGAsIGBrdm1fcmlzY3ZfdmNwdV9yZWNvcmRfc3RlYWxfdGltZWAsIGBrdm1fc2JpX3N0YV9zdGVhbF90aW1lX3NldF9zaG1lbWBcblxuRm9yIGFtZDY0LCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGl0J3MgYHJlY29yZF9zdGVhbF90aW1lYCBhbmQgYGt2bV92Y3B1X2lvY3RsYCB0aGF0IGFyZSB0aGUgcHJpbWFyeSBjb25jZXJucy4gQWxzbywgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgYHZjcHVfZW50ZXJfZ3Vlc3RgIGZ1bmN0aW9uLCBhcyBpdCdzIHRoZSB0cmlnZ2VyIGZvciBgcmVjb3JkX3N0ZWFsX3RpbWVgLlxuXG5BbHJpZ2h0LCBsZXQncyBsb29rIGF0IHRoZSByZWxhdGVkIEtjb25maWcgb3B0aW9ucy4gT2J2aW91c2x5LCB3ZSBoYXZlIGBLVk1gLCBgS1ZNX0lOVEVMYCwgYW5kIGBLVk1fQU1EYC4gTm93LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGBIQVZFX0tWTV9QVl9TVEVBTF9USU1FYCBpcyBpbmRlZWQgc2VsZWN0ZWQgYnkgYEtWTV9YODZgLiBXZSBhbHNvIG5lZWQgYFNDSEVEX0lORk9gIGJlY2F1c2UgdGhhdCdzIHdoYXQgY29udGFpbnMgYHJ1bl9kZWxheWAsIHNvIEkgbmVlZCB0byBnbyBsb29rIHVwIHRoZSBLY29uZmlnIGZvciBgU0NIRURfSU5GT2AgYW5kIG1ha2Ugc3VyZSBpdCdzIHNldCB1cCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTIwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDM6NTQuNzQ5NDUwNDQyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIzNDI2NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU0NIRURfSU5GT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTY5ND1jb25maWcgVEFTS19ERUxBWV9BQ0NUXFxuLS1cXG5pbml0L0tjb25maWctNjk2LVxcdGRlcGVuZHMgb24gVEFTS1NUQVRTXFxuaW5pdC9LY29uZmlnOjY5NzpcXHRzZWxlY3QgU0NIRURfSU5GT1xcbmluaXQvS2NvbmZpZy02OTgtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMzo1NC44NjE3OTg0OTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE5NzUxNTU4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBTY2hlZHVsaW5nIFN0YXRpc3RpY3MgT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gbmFpbCBkb3duIGhvdyB0byBnZXQgdGhlIHJpZ2h0IHNjaGVkdWxpbmcgc3RhdHMuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2gga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZXZlbiBhdmFpbGFibGUgdG8gbWUuIExldCdzIHNlZS4uLiBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgY2hlY2tpbmcgYFNDSEVEU1RBVFNgLCB0aGF0IHNlZW1zIGxpa2UgdGhlIG1vc3Qgb2J2aW91cyBzdGFydGluZyBwb2ludC4gSWYgdGhhdCBkb2Vzbid0IHByb3ZpZGUgd2hhdCBJIG5lZWQsIG9yIGlmIGl0J3MgdG9vIGNvYXJzZS1ncmFpbmVkLCBtYXliZSBJIHNob3VsZCBkcmlsbCBkb3duIGludG8gYFRBU0tTVEFUU2AuIEl0J3MgcG9zc2libGUgSSdsbCBoYXZlIG1vcmUgc3BlY2lmaWMgcGVyLXRhc2sgaW5mb3JtYXRpb24gdGhlcmUuIEFuZCwgb2YgY291cnNlLCBJIGhhdmUgdG8gY29uc2lkZXIgYFNDSEVEX0lORk9gIC0tIGNvdWxkIGJlIHRoZSBrZXkgdG8gdGhlIGtpbmQgb2YgZGV0YWlsIEknbSBsb29raW5nIGZvci4gVGltZSB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgc2VlIHdoYXQgdGhlc2Ugb3B0aW9ucyBhY3R1YWxseSBjb250cm9sIGFuZCB3aGF0IGxldmVsIG9mIGRldGFpbCB0aGV5IHByb3ZpZGUuIEkga25vdyBpdCBkZXBlbmRzIG9uIHRoZSBrZXJuZWwgdmVyc2lvbiB0b28sIHNvIEknbGwga2VlcCB0aGF0IGluIG1pbmQgYXMgSSdtIGxvb2tpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTAxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDM6NTcuMDU5MzE4NTU3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTA5MTg5MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBTQ0hFRF9JTkZPXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWc9MjA9bWVudWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMzctXFx0c2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjM4OlxcdHNlbGVjdCBTQ0hFRF9JTkZPXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zOS1cXHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFMgaWYgUEVSRl9FVkVOVFNcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTMzLVxcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnOjM0OlxcdHNlbGVjdCBTQ0hFRF9JTkZPXFxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMzUtXFx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMzMtXFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzozNDpcXHRzZWxlY3QgU0NIRURfSU5GT1xcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMzUtXFx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNX1g4Nlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMzUtXFx0c2VsZWN0IEtWTV9NTUlPXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MzY6XFx0c2VsZWN0IFNDSEVEX0lORk9cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0zNy1cXHRzZWxlY3QgUEVSRl9FVkVOVFNcXG4tLVxcbmluaXQvS2NvbmZpZz02OTQ9Y29uZmlnIFRBU0tfREVMQVlfQUNDVFxcbi0tXFxuaW5pdC9LY29uZmlnLTY5Ni1cXHRkZXBlbmRzIG9uIFRBU0tTVEFUU1xcbmluaXQvS2NvbmZpZzo2OTc6XFx0c2VsZWN0IFNDSEVEX0lORk9cXG5pbml0L0tjb25maWctNjk4LVxcdGhlbHBcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnPTEzNTM9Y29uZmlnIFNDSEVEU1RBVFNcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTEzNTUtXFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxubGliL0tjb25maWcuZGVidWc6MTM1NjpcXHRzZWxlY3QgU0NIRURfSU5GT1xcbmxpYi9LY29uZmlnLmRlYnVnLTEzNTctXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMzo1OS41Njg1MTUxMTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI5MzU4OTUwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLVk0gQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqXG5cbkFscmlnaHQsIHNvIGBLVk1fWDg2YCBpcyBkaXJlY3RseSBwdWxsaW5nIGluIGBTQ0hFRF9JTkZPYC4gVGhhdCdzIGludGVyZXN0aW5nOyBlbmFibGluZyBLVk0sIGFuZCBieSBleHRlbnNpb24gYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgLCBicmluZ3MgaW4gYSB3aG9sZSBzdWl0ZTogYEtWTV9YODZgLCBgSEFWRV9LVk1fUFZfU1RFQUxfVElNRWAsIGFuZCwgY3J1Y2lhbGx5LCBgU0NIRURfSU5GT2AuIFRoYXQncyBhbiBpbXBvcnRhbnQgZGV0YWlsIHRvIGtlZXAgaW4gbWluZCwgYW5kIGluZm9ybXMgaG93IHRoZSBmZWF0dXJlcyBpbnRlcnJlbGF0ZS5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb25zIHdlIG5lZWQgdG8gcmV0dXJuOiBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgS1ZNX0FNRGAuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLlxuXG5Ob3csIHJlZ2FyZGluZyB0aGUgY29yZSBvZiB0aGlzIHBhdGNoLCBpdCBzZWVtcyBsaWtlIHdlJ3JlIG1vdmluZyB0aGUgYGxhc3Rfc3RlYWxgIG1lbWJlciBpbnRvIHRoZSBnZW5lcmljIGBzdHJ1Y3Qga3ZtX3ZjcHVgIHN0cnVjdHVyZSwgYnV0IG9ubHkgdW5kZXIgdGhlIGBDT05GSUdfSEFWRV9LVk1fUFZfU1RFQUxfVElNRWAgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoZW4sIHRoZSBzdGVhbCB0aW1lIGFjY291bnRpbmcgaXMgcmVzZXQgd2l0aGluIHRoZSBnZW5lcmljIGBrdm1fdmNwdV9pb2N0bCgpYCBmdW5jdGlvbiB3aGVuIGEgdkNQVSBzd2l0Y2hlcyB0byBiZWluZyBydW4gZnJvbSBhIGRpZmZlcmVudCBob3N0IHRocmVhZCBvciBQSUQsIHNwZWNpZmljYWxseSBkdXJpbmcgdGhlIGBLVk1fUlVOYCBoYW5kbGluZy4gT24geDg2LCBpdCBsb29rcyBsaWtlIGByZWNvcmRfc3RlYWxfdGltZSgpYCBpcyB0aGVuIHVwZGF0ZWQgdG8gdXNlIHRoaXMgbmV3LCBnZW5lcmljIGBsYXN0X3N0ZWFsYCBtZW1iZXIuIFRoaXMgZGVmaW5pdGVseSBoYXMgaW1wbGljYXRpb25zIG9uIHRoZSBLVk0gY29yZSBhbmQgeDg2IGV4ZWN1dGlvbiBwYXRocy5cblxuT2theSwgbGV0J3MganVzdCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZywgYW5kIHRoZW4gd2UnbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODkxMywiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDQ6MDMuODYyMTA3NDk2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4MDUyOTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlY29yZF9zdGVhbF90aW1lXCIsXG4gICAgXCJrdm1fdmNwdV9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNvbGlkYXRlcyBzdGVhbC10aW1lIGFjY291bnRpbmcgYWNyb3NzIGFyY2hpdGVjdHVyZXMgYnkgbW92aW5nIGBsYXN0X3N0ZWFsYCB0byBnZW5lcmljIGBzdHJ1Y3Qga3ZtX3ZjcHVgIGFuZCByZXNldHRpbmcgaXQgaW4gYGt2bV92Y3B1X2lvY3RsKClgIHdoZW4gYSB2Q1BVIHRocmVhZCBjaGFuZ2VzLiBJdCBtb2RpZmllcyBleGVjdXRhYmxlIGNvZGUgaW4gY29yZSBLVk0gKGBrdm1fdmNwdV9pb2N0bGApIGFuZCB4ODYgS1ZNIChgcmVjb3JkX3N0ZWFsX3RpbWVgKSwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBpbiB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlY29yZF9zdGVhbF90aW1lXCIsXG4gICAgXCJrdm1fdmNwdV9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNvbGlkYXRlcyBzdGVhbC10aW1lIGFjY291bnRpbmcgYWNyb3NzIGFyY2hpdGVjdHVyZXMgYnkgbW92aW5nIGBsYXN0X3N0ZWFsYCB0byBnZW5lcmljIGBzdHJ1Y3Qga3ZtX3ZjcHVgIGFuZCByZXNldHRpbmcgaXQgaW4gYGt2bV92Y3B1X2lvY3RsKClgIHdoZW4gYSB2Q1BVIHRocmVhZCBjaGFuZ2VzLiBJdCBtb2RpZmllcyBleGVjdXRhYmxlIGNvZGUgaW4gY29yZSBLVk0gKGBrdm1fdmNwdV9pb2N0bGApIGFuZCB4ODYgS1ZNIChgcmVjb3JkX3N0ZWFsX3RpbWVgKSwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBpbiB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDQ6MDMuOTkwMTY3NTQxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTMzNzc3MTAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjA0OjAzLjk5MDc1MTQ0MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI1MzM3MTgxNjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHRyYWNraW5nIG9mIHBhcmF2aXJ0dWFsaXplZCBzdGVhbCB0aW1lIChgbGFzdF9zdGVhbGApIGJ5IG1vdmluZyBpdCBmcm9tIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB2Y3B1IHN1Yi1zdHJ1Y3R1cmVzIChpbiB4ODYsIGFybTY0LCByaXNjdiwgYW5kIGxvb25nYXJjaCkgaW50byB0aGUgZ2VuZXJpYyBgc3RydWN0IGt2bV92Y3B1YCB1bmRlciBgQ09ORklHX0hBVkVfS1ZNX1BWX1NURUFMX1RJTUVgLCBhbmQgcmVzZXR0aW5nIGB2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXlgIHdoZW4gdGhlIHZDUFUgdGhyZWFkIFBJRCBjaGFuZ2VzLlxcblxcblRoZSBgc3RydWN0IGt2bV92Y3B1YCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jKClgLCBlbnN1cmluZyBgdmNwdS1cXHUwMDNlbGFzdF9zdGVhbGAgaXMgemVyby1pbml0aWFsaXplZCBhdCBjcmVhdGlvbi4gQWxsIHJlYWRzIGFuZCB3cml0ZXMgdG8gYHZjcHUtXFx1MDAzZWxhc3Rfc3RlYWxgIG9wZXJhdGUgb24gZnVsbHkgaW5pdGlhbGl6ZWQgZmllbGRzIGFuZCB2YWx1ZXMgZGVyaXZlZCBmcm9tIGBjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheWAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdGFjayB2YXJpYWJsZXMsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIHBhZGRpbmcgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyMWYzOGQ4NGUyMjFhYjdmOWJlNDUyN2ViNTYxNjM3MDBiZjE3NjY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwNTowMzoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggMjdmZTBjZDViMmQ3YS4uMzZjYjdkZWU5ODhjYiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtOTM3LDcgKzkzNyw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcbiBcdC8qIEd1ZXN0IFBWIHN0YXRlICovXG4gXHRzdHJ1Y3Qge1xuLVx0XHR1NjQgbGFzdF9zdGVhbDtcbiBcdFx0Z3BhX3QgYmFzZTtcbiBcdH0gc3RlYWw7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vS2NvbmZpZyBiL2FyY2gvYXJtNjQva3ZtL0tjb25maWdcbmluZGV4IDQ0OTE1NGY5YTQ4NTIuLmY1ODU1YmZjNjgxYzEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9LY29uZmlnXG4rKysgYi9hcmNoL2FybTY0L2t2bS9LY29uZmlnXG5AQCAtMzQsNiArMzQsNyBAQCBtZW51Y29uZmlnIEtWTVxuIFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcbiBcdHNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU1cbiBcdHNlbGVjdCBIQVZFX0tWTV9WQ1BVX1JVTl9QSURfQ0hBTkdFXG4rXHRzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxuIFx0c2VsZWN0IFNDSEVEX0lORk9cbiBcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xuIFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jIGIvYXJjaC9hcm02NC9rdm0vcHZ0aW1lLmNcbmluZGV4IDRjZWFiYWE0YzMwYmQuLmE2N2Q5Mzg0NWQ3OTQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9wdnRpbWUuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vcHZ0aW1lLmNcbkBAIC0xNCw3ICsxNCw3IEBAIHZvaWQga3ZtX3VwZGF0ZV9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXHR1NjQgYmFzZSA9IHZjcHUtXHUwMDNlYXJjaC5zdGVhbC5iYXNlO1xuLVx0dTY0IGxhc3Rfc3RlYWwgPSB2Y3B1LVx1MDAzZWFyY2guc3RlYWwubGFzdF9zdGVhbDtcbitcdHU2NCBsYXN0X3N0ZWFsID0gdmNwdS1cdTAwM2VsYXN0X3N0ZWFsO1xuIFx0dTY0IG9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBwdmNsb2NrX3ZjcHVfc3RvbGVuX3RpbWUsIHN0b2xlbl90aW1lKTtcbiBcdHU2NCBzdGVhbCA9IDA7XG4gXHRpbnQgaWR4O1xuQEAgLTI1LDggKzI1LDggQEAgdm9pZCBrdm1fdXBkYXRlX3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbiBcdGlmICgha3ZtX2dldF9ndWVzdChrdm0sIGJhc2UgKyBvZmZzZXQsIHN0ZWFsKSkge1xuIFx0XHRzdGVhbCA9IGxlNjRfdG9fY3B1KHN0ZWFsKTtcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLnN0ZWFsLmxhc3Rfc3RlYWwgPSBSRUFEX09OQ0UoY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSk7XG4tXHRcdHN0ZWFsICs9IHZjcHUtXHUwMDNlYXJjaC5zdGVhbC5sYXN0X3N0ZWFsIC0gbGFzdF9zdGVhbDtcbitcdFx0dmNwdS1cdTAwM2VsYXN0X3N0ZWFsID0gUkVBRF9PTkNFKGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkpO1xuK1x0XHRzdGVhbCArPSB2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgLSBsYXN0X3N0ZWFsO1xuIFx0XHRrdm1fcHV0X2d1ZXN0KGt2bSwgYmFzZSArIG9mZnNldCwgY3B1X3RvX2xlNjQoc3RlYWwpKTtcbiBcdH1cbiBcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UsIGlkeCk7XG5AQCAtNjEsNyArNjEsNyBAQCBncGFfdCBrdm1faW5pdF9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgKiBTdGFydCBjb3VudGluZyBzdG9sZW4gdGltZSBmcm9tIHRoZSB0aW1lIHRoZSBndWVzdCByZXF1ZXN0c1xuIFx0ICogdGhlIGZlYXR1cmUgZW5hYmxlZC5cbiBcdCAqL1xuLVx0dmNwdS1cdTAwM2VhcmNoLnN0ZWFsLmxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuK1x0dmNwdS1cdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbiBcdGt2bV93cml0ZV9ndWVzdF9sb2NrKGt2bSwgYmFzZSwgXHUwMDI2aW5pdF92YWx1ZXMsIHNpemVvZihpbml0X3ZhbHVlcykpO1xuIFxuIFx0cmV0dXJuIGJhc2U7XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDIzY2ZiZWNlYmJkNzkuLjE0NTE0YTI1YjI2MTMgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMjUzLDcgKzI1Myw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdC8qIHBhcmF2aXJ0IHN0ZWFsIHRpbWUgKi9cbiBcdHN0cnVjdCB7XG4gXHRcdHU2NCBndWVzdF9hZGRyO1xuLVx0XHR1NjQgbGFzdF9zdGVhbDtcbiBcdFx0c3RydWN0IGdmbl90b19odmFfY2FjaGUgY2FjaGU7XG4gXHRcdHU4ICBwcmVlbXB0ZWQ7XG4gXHR9IHN0O1xuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnIGIvYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWdcbmluZGV4IDE1ZGEyZDg4YzBjMTAuLjQ5OTZlYzljMDdmOTkgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZ1xuKysrIGIvYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWdcbkBAIC0yNiw2ICsyNiw3IEBAIGNvbmZpZyBLVk1cbiBcdHNlbGVjdCBIQVZFX0tWTV9NU0lcbiBcdHNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU1cbiBcdHNlbGVjdCBLVk1fQ09NTU9OXG4rXHRzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXG4gXHRzZWxlY3QgS1ZNX01NSU9cbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuY1xuaW5kZXggNGY1OGU2ZTJjZjg2Ni4uNTZhZTZiMThmOGMxMCAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmNcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmNcbkBAIC03NzMsNyArNzczLDcgQEAgc3RhdGljIGxvbmcga3ZtX3NhdmVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0aWYgKCEoZGF0YSBcdTAwMjYgS1ZNX1NURUFMX1BIWVNfVkFMSUQpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuLVx0XHR2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4rXHRcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4gXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdGRlZmF1bHQ6XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmNcbmluZGV4IGVkOWUwOTJjOTdiYTcuLjcyOGQyOWViYThlMDMgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG4rKysgYi9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG5AQCAtMTg3LDggKzE4Nyw4IEBAIHN0YXRpYyB2b2lkIGt2bV91cGRhdGVfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c21wX3dtYigpO1xuIFxuIFx0dW5zYWZlX2dldF91c2VyKHN0ZWFsLCBcdTAwMjZzdC1cdTAwM2VzdGVhbCwgb3V0KTtcbi1cdHN0ZWFsICs9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkgLSB2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbDtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbitcdHN0ZWFsICs9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkgLSB2Y3B1LVx1MDAzZWxhc3Rfc3RlYWw7XG4rXHR2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuIFx0dW5zYWZlX3B1dF91c2VyKHN0ZWFsLCBcdTAwMjZzdC1cdTAwM2VzdGVhbCwgb3V0KTtcbiBcbiBcdHNtcF93bWIoKTtcbkBAIC0xMjA1LDcgKzEyMDUsNyBAQCBzdGF0aWMgaW50IGt2bV9sb29uZ2FyY2hfcHZ0aW1lX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBcdGlmICghcmV0KSB7XG4gXHRcdHZjcHUtXHUwMDNlYXJjaC5zdC5ndWVzdF9hZGRyID0gZ3BhO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4rXHRcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4gXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYTMwNjAwNTc5MjMxYi4uMzA1ODc1MzAxYzA0MiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMjczLDcgKzI3Myw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdC8qIFNCSSBzdGVhbC10aW1lIGFjY291bnRpbmcgKi9cbiBcdHN0cnVjdCB7XG4gXHRcdGdwYV90IHNobWVtO1xuLVx0XHR1NjQgbGFzdF9zdGVhbDtcbiBcdH0gc3RhO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbmluZGV4IGVjMmNlZTBhMzllMDEuLjFmZjA3YTkwNGEwMjcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnXG5AQCAtMjYsNiArMjYsNyBAQCBjb25maWcgS1ZNXG4gXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXG4gXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXG4gXHRzZWxlY3QgS1ZNX0NPTU1PTlxuK1x0c2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcbiBcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcbiBcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xuIFx0c2VsZWN0IEtWTV9NTUlPXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfc3RhLmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9zdGEuY1xuaW5kZXggNjBlNTAyOTZhMDA4NS4uOWE3N2QzYmRlN2M3MiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3N0YS5jXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9zdGEuY1xuQEAgLTE5LDEzICsxOSwxMyBAQFxuIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl92Y3B1X3NiaV9zdGFfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHZjcHUtXHUwMDNlYXJjaC5zdGEuc2htZW0gPSBJTlZBTElEX0dQQTtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbCA9IDA7XG4rXHR2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgPSAwO1xuIH1cbiBcbiB2b2lkIGt2bV9yaXNjdl92Y3B1X3JlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRncGFfdCBzaG1lbSA9IHZjcHUtXHUwMDNlYXJjaC5zdGEuc2htZW07XG4tXHR1NjQgbGFzdF9zdGVhbCA9IHZjcHUtXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbDtcbitcdHU2NCBsYXN0X3N0ZWFsID0gdmNwdS1cdTAwM2VsYXN0X3N0ZWFsO1xuIFx0X19sZTMyIF9fdXNlciAqc2VxdWVuY2VfcHRyO1xuIFx0X19sZTY0IF9fdXNlciAqc3RlYWxfcHRyO1xuIFx0X19sZTMyIHNlcXVlbmNlX2xlO1xuQEAgLTY3LDggKzY3LDggQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9yZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRpZiAoIVdBUk5fT04oZ2V0X3VzZXIoc3RlYWxfbGUsIHN0ZWFsX3B0cikpKSB7XG4gXHRcdHN0ZWFsID0gbGU2NF90b19jcHUoc3RlYWxfbGUpO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2guc3RhLmxhc3Rfc3RlYWwgPSBSRUFEX09OQ0UoY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSk7XG4tXHRcdHN0ZWFsICs9IHZjcHUtXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbCAtIGxhc3Rfc3RlYWw7XG4rXHRcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IFJFQURfT05DRShjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5KTtcbitcdFx0c3RlYWwgKz0gdmNwdS1cdTAwM2VsYXN0X3N0ZWFsIC0gbGFzdF9zdGVhbDtcbiBcdFx0V0FSTl9PTihwdXRfdXNlcihjcHVfdG9fbGU2NChzdGVhbCksIHN0ZWFsX3B0cikpO1xuIFx0fVxuIFxuQEAgLTExNSw3ICsxMTUsNyBAQCBzdGF0aWMgaW50IGt2bV9zYmlfc3RhX3N0ZWFsX3RpbWVfc2V0X3NobWVtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0cmV0dXJuIFNCSV9FUlJfSU5WQUxJRF9BRERSRVNTO1xuIFxuIFx0dmNwdS1cdTAwM2VhcmNoLnN0YS5zaG1lbSA9IHNobWVtO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnN0YS5sYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbitcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDY4M2JiOGJmNDNhOTQuLmViZGQ4NTI2YWUxMjYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtODcyLDcgKzg3Miw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdHN0cnVjdCB7XG4gXHRcdHU4IHByZWVtcHRlZDtcbiBcdFx0dTY0IG1zcl92YWw7XG4tXHRcdHU2NCBsYXN0X3N0ZWFsO1xuIFx0XHRzdHJ1Y3QgZ2ZuX3RvX2h2YV9jYWNoZSBjYWNoZTtcbiBcdH0gc3Q7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL0tjb25maWcgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZ1xuaW5kZXggNTM4ZWQxZTgwMzMyNi4uYjJhZWE4MDU4ODQxMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9LY29uZmlnXG4rKysgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZ1xuQEAgLTQwLDYgKzQwLDcgQEAgY29uZmlnIEtWTV9YODZcbiBcdHNlbGVjdCBIQVZFX0tWTV9NU0lcbiBcdHNlbGVjdCBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUXG4gXHRzZWxlY3QgSEFWRV9LVk1fTk9fUE9MTFxuK1x0c2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcbiBcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuIFx0c2VsZWN0IEtWTV9WRklPXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5pbmRleCA3OTQ2OGRkZmU0NzM2Li45MjdjOGIxZWQ4M2QyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC0yMTI5LDkgKzIxMjksOCBAQCBzdGF0aWMgdm9pZCByZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzbXBfd21iKCk7XG4gXG4gXHR1bnNhZmVfZ2V0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuLVx0c3RlYWwgKz0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSAtXG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnN0Lmxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuK1x0c3RlYWwgKz0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSAtIHZjcHUtXHUwMDNlbGFzdF9zdGVhbDtcbitcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4gXHR1bnNhZmVfcHV0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuIFxuIFx0dmVyc2lvbiArPSAxO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggMDNiZmM5Mjg2NGI2ZS4uZmY5ZDQyM2I2YTdjNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtMzk4LDYgKzM5OCwxMCBAQCBzdHJ1Y3Qga3ZtX3ZjcHUge1xuIFx0ICovXG4gXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpsYXN0X3VzZWRfc2xvdDtcbiBcdHU2NCBsYXN0X3VzZWRfc2xvdF9nZW47XG4rXG4rI2lmZGVmIENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FXG4rXHR1NjQgbGFzdF9zdGVhbDtcbisjZW5kaWZcbiB9O1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDk2YmFiNzAwMmQzOWUuLjFkZTEzYzAwMTdlNDMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtMTY0LDYgKzE2NCw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiArPSBpcnFfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBtbXVfc3RyZXNzX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0gcnNlcV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHN0ZWFsX3RpbWVcbitURVNUX0dFTl9QUk9HU194ODYgKz0gc3RlYWxfdGltZV9jaGFuZ2VfcGlkXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHN5c3RlbV9jb3VudGVyX29mZnNldF90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHByZV9mYXVsdF9tZW1vcnlfdGVzdFxuIFxuQEAgLTIwNCw2ICsyMDUsNyBAQCBURVNUX0dFTl9QUk9HU19hcm02NCArPSBndWVzdF9tZW1mZF90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gbW11X3N0cmVzc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gcnNlcV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gc3RlYWxfdGltZVxuK1RFU1RfR0VOX1BST0dTX2FybTY0ICs9IHN0ZWFsX3RpbWVfY2hhbmdlX3BpZFxuIFxuIFRFU1RfR0VOX1BST0dTX3MzOTAgPSAkKFRFU1RfR0VOX1BST0dTX0NPTU1PTilcbiBURVNUX0dFTl9QUk9HU19zMzkwICs9IHMzOTAvbWVtb3BcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xMmQ0OTI3ZDFjMDE3XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmNcbkBAIC0wLDAgKzEsMjE2IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIFZlcmlmeSB0aGF0IEtWTSByZXNldHMgc3RlYWwtdGltZSBhY2NvdW50aW5nIHdoZW4gYSB2Q1BVIGZkIGlzIHJ1biBmcm9tXG4rICogYSBkaWZmZXJlbnQgaG9zdCBQSUQuXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wYXJhLmhcdTAwM2VcbisjaW5jbHVkZSBcImt2bV91dGlsLmhcIlxuKyNpbmNsdWRlIFwicHJvY2Vzc29yLmhcIlxuK1xuKyNkZWZpbmUgU1RfR1BBX0JBU0VcdFx0KDEgXHUwMDNjXHUwMDNjIDMwKVxuKyNkZWZpbmUgU1RfU0FORV9ERUxUQV9OU1x0KDFVTEwgXHUwMDNjXHUwMDNjIDYzKVxuK1xuK3N0YXRpYyB2b2lkICpzdF9ndmE7XG4rc3RhdGljIHU2NCBndWVzdF9zdG9sZW5fdGltZTtcbitzdGF0aWMgdTY0IG1haW5fc3RlYWw7XG4rc3RhdGljIHU2NCB0aHJlYWRfc3RlYWw7XG4rXG4rI2lmIGRlZmluZWQoX194ODZfNjRfXylcbitcbisjZGVmaW5lIFNURUFMX1RJTUVfU0laRVx0KChzaXplb2Yoc3RydWN0IGt2bV9zdGVhbF90aW1lKSArIDYzKSBcdTAwMjYgfjYzKVxuK1xuK3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3N0ZWFsX3RpbWUgKnN0ID0gc3RfZ3ZhO1xuK1xuK1x0V1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LVx1MDAzZXN0ZWFsKSk7XG4rXHRHVUVTVF9TWU5DKDApO1xuK1xuK1x0V1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LVx1MDAzZXN0ZWFsKSk7XG4rXHRHVUVTVF9TWU5DKDEpO1xuK1xuK1x0V1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LVx1MDAzZXN0ZWFsKSk7XG4rXHRHVUVTVF9ET05FKCk7XG4rfVxuK1xuK3N0YXRpYyBib29sIHN0ZWFsX3RpbWVfc3VwcG9ydGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRyZXR1cm4ga3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfS1ZNX1NURUFMX1RJTUUpO1xuK31cbitcbitzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2VuYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0dmNwdV9zZXRfbXNyKHZjcHUsIE1TUl9LVk1fU1RFQUxfVElNRSxcbitcdFx0ICAgICAodWxvbmcpc3RfZ3ZhIHwgS1ZNX01TUl9FTkFCTEVEKTtcbit9XG4rXG4rI2VsaWYgZGVmaW5lZChfX2FhcmNoNjRfXylcbitcbisjZGVmaW5lIFNURUFMX1RJTUVfU0laRVx0KChzaXplb2Yoc3RydWN0IHN0X3RpbWUpICsgNjMpIFx1MDAyNiB+NjMpXG4rXG4rI2RlZmluZSBQVl9USU1FX1NUXHQweGM1MDAwMDIxXG4rXG4rc3RydWN0IHN0X3RpbWUge1xuK1x0dTMyIHJldjtcbitcdHUzMiBhdHRyO1xuK1x0dTY0IHN0X3RpbWU7XG4rfTtcbitcbitzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXG4re1xuK1x0c3RydWN0IGFybV9zbWNjY19yZXMgcmVzO1xuK1x0c3RydWN0IHN0X3RpbWUgKnN0O1xuK1xuK1x0ZG9fc21jY2MoUFZfVElNRV9TVCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgXHUwMDI2cmVzKTtcbitcdEdVRVNUX0FTU0VSVF9ORShyZXMuYTAsIC0xKTtcbitcdEdVRVNUX0FTU0VSVF9FUShyZXMuYTAsICh1bG9uZylzdF9ndmEpO1xuK1xuK1x0c3QgPSAoc3RydWN0IHN0X3RpbWUgKilyZXMuYTA7XG4rXHRXUklURV9PTkNFKGd1ZXN0X3N0b2xlbl90aW1lLCBSRUFEX09OQ0Uoc3QtXHUwMDNlc3RfdGltZSkpO1xuK1x0R1VFU1RfU1lOQygwKTtcbitcbitcdFdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC1cdTAwM2VzdF90aW1lKSk7XG4rXHRHVUVTVF9TWU5DKDEpO1xuK1xuK1x0V1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LVx1MDAzZXN0X3RpbWUpKTtcbitcdEdVRVNUX0RPTkUoKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgc3RlYWxfdGltZV9zdXBwb3J0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgZGV2ID0ge1xuK1x0XHQuZ3JvdXAgPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0NUUkwsXG4rXHRcdC5hdHRyID0gS1ZNX0FSTV9WQ1BVX1BWVElNRV9JUEEsXG4rXHR9O1xuK1xuK1x0cmV0dXJuICFfX3ZjcHVfaW9jdGwodmNwdSwgS1ZNX0hBU19ERVZJQ0VfQVRUUiwgXHUwMDI2ZGV2KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgc3RlYWxfdGltZV9lbmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHU2NCBzdF9pcGEgPSAodWxvbmcpc3RfZ3ZhO1xuK1x0c3RydWN0IGt2bV9kZXZpY2VfYXR0ciBkZXYgPSB7XG4rXHRcdC5ncm91cCA9IEtWTV9BUk1fVkNQVV9QVlRJTUVfQ1RSTCxcbitcdFx0LmF0dHIgPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0lQQSxcbitcdFx0LmFkZHIgPSAodTY0KVx1MDAyNnN0X2lwYSxcbitcdH07XG4rXG4rXHR2Y3B1X2lvY3RsKHZjcHUsIEtWTV9TRVRfREVWSUNFX0FUVFIsIFx1MDAyNmRldik7XG4rfVxuK1xuKyNlbHNlXG4rI2Vycm9yIFwic3RlYWxfdGltZV9jaGFuZ2VfcGlkIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIGFyY2hpdGVjdHVyZVwiXG4rI2VuZGlmXG4rXG4rc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCB1Y2FsbCB1YztcbitcbitcdHZjcHVfcnVuKHZjcHUpO1xuK1xuK1x0c3dpdGNoIChnZXRfdWNhbGwodmNwdSwgXHUwMDI2dWMpKSB7XG4rXHRjYXNlIFVDQUxMX1NZTkM6XG4rXHRjYXNlIFVDQUxMX0RPTkU6XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBVQ0FMTF9BQk9SVDpcbitcdFx0UkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7XG4rXHRkZWZhdWx0OlxuK1x0XHRURVNUX0FTU0VSVChmYWxzZSwgXCJVbmV4cGVjdGVkIGV4aXQ6ICVzXCIsXG4rXHRcdFx0ICAgIGV4aXRfcmVhc29uX3N0cih2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbikpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCAqZG9fc3RlYWxfdGltZSh2b2lkICphcmcpXG4re1xuK1x0c3RydWN0IHRpbWVzcGVjIHRzLCBzdG9wO1xuK1xuK1x0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNnRzKTtcbitcdHN0b3AgPSB0aW1lc3BlY19hZGRfbnModHMsIE1JTl9SVU5fREVMQVlfTlMpO1xuK1xuK1x0d2hpbGUgKHRpbWVzcGVjX3RvX25zKHRpbWVzcGVjX3N1Yih0cywgc3RvcCkpIFx1MDAzYyAwKVxuK1x0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2dHMpO1xuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkICp2Y3B1X3RocmVhZCh2b2lkICphcmcpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gYXJnO1xuK1xuK1x0cnVuX3ZjcHUodmNwdSk7XG4rXHRzeW5jX2dsb2JhbF9mcm9tX2d1ZXN0KHZjcHUtXHUwMDNldm0sIGd1ZXN0X3N0b2xlbl90aW1lKTtcbitcdHRocmVhZF9zdGVhbCA9IGd1ZXN0X3N0b2xlbl90aW1lO1xuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK2ludCBtYWluKHZvaWQpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRwdGhyZWFkX2F0dHJfdCBhdHRyO1xuK1x0cHRocmVhZF90IHRocmVhZDtcbitcdGNwdV9zZXRfdCBjcHVzZXQ7XG4rXHRsb25nIHJ1bl9kZWxheTtcbitcdGxvbmcgcnVuX2RlbGF5X2RlbHRhO1xuK1xuK1x0a3NmdF9wcmludF9oZWFkZXIoKTtcbitcdGtzZnRfc2V0X3BsYW4oMSk7XG4rXG4rXHRDUFVfWkVSTyhcdTAwMjZjcHVzZXQpO1xuK1x0Q1BVX1NFVCgwLCBcdTAwMjZjcHVzZXQpO1xuK1x0cHRocmVhZF9hdHRyX2luaXQoXHUwMDI2YXR0cik7XG4rXHRwdGhyZWFkX2F0dHJfc2V0YWZmaW5pdHlfbnAoXHUwMDI2YXR0ciwgc2l6ZW9mKGNwdXNldCksIFx1MDAyNmNwdXNldCk7XG4rXHRwdGhyZWFkX3NldGFmZmluaXR5X25wKHB0aHJlYWRfc2VsZigpLCBzaXplb2YoY3B1c2V0KSwgXHUwMDI2Y3B1c2V0KTtcbitcbitcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XG4rXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLFxuK1x0XHRcdFx0ICAgIFNUX0dQQV9CQVNFLCAxLCAxLCAwKTtcbitcdHZpcnRfbWFwKHZtLCBTVF9HUEFfQkFTRSwgU1RfR1BBX0JBU0UsIDEpO1xuK1xuK1x0c3RfZ3ZhID0gKHZvaWQgKilTVF9HUEFfQkFTRTtcbitcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBzdF9ndmEpO1xuK1x0bWVtc2V0KGFkZHJfZ3ZhMmh2YSh2bSwgU1RfR1BBX0JBU0UpLCAwLCBTVEVBTF9USU1FX1NJWkUpO1xuK1xuK1x0VEVTVF9SRVFVSVJFKHN0ZWFsX3RpbWVfc3VwcG9ydGVkKHZjcHUpKTtcbitcbitcdHN0ZWFsX3RpbWVfZW5hYmxlKHZjcHUpO1xuK1x0cnVuX3ZjcHUodmNwdSk7XG4rXG4rXHRydW5fZGVsYXkgPSBnZXRfcnVuX2RlbGF5KCk7XG4rXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIFx1MDAyNmF0dHIsIGRvX3N0ZWFsX3RpbWUsIE5VTEwpO1xuK1xuK1x0d2hpbGUgKGdldF9ydW5fZGVsYXkoKSAtIHJ1bl9kZWxheSBcdTAwM2MgTUlOX1JVTl9ERUxBWV9OUylcbitcdFx0c2NoZWRfeWllbGQoKTtcbitcbitcdHB0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpO1xuK1x0cnVuX2RlbGF5X2RlbHRhID0gZ2V0X3J1bl9kZWxheSgpIC0gcnVuX2RlbGF5O1xuK1x0VEVTVF9BU1NFUlQocnVuX2RlbGF5X2RlbHRhIFx1MDAzZT0gTUlOX1JVTl9ERUxBWV9OUyxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgcnVuX2RlbGF5IFx1MDAzZT0gJWxkLCBnb3QgJWxkXCIsXG4rXHRcdCAgICBNSU5fUlVOX0RFTEFZX05TLCBydW5fZGVsYXlfZGVsdGEpO1xuK1xuK1x0cnVuX3ZjcHUodmNwdSk7XG4rXHRzeW5jX2dsb2JhbF9mcm9tX2d1ZXN0KHZtLCBndWVzdF9zdG9sZW5fdGltZSk7XG4rXHRtYWluX3N0ZWFsID0gZ3Vlc3Rfc3RvbGVuX3RpbWU7XG4rXG4rXHRURVNUX0FTU0VSVChtYWluX3N0ZWFsIFx1MDAzZT0gTUlOX1JVTl9ERUxBWV9OUyxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgc3RlYWwgdGltZSBcdTAwM2U9ICVsZCwgZ290ICVcIlBSSXU2NCxcbitcdFx0ICAgIE1JTl9SVU5fREVMQVlfTlMsIG1haW5fc3RlYWwpO1xuK1xuK1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdSk7XG4rXHRwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTtcbitcbitcdFRFU1RfQVNTRVJUKHRocmVhZF9zdGVhbCBcdTAwM2U9IG1haW5fc3RlYWwgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB0aHJlYWRfc3RlYWwgLSBtYWluX3N0ZWFsIFx1MDAzYyBTVF9TQU5FX0RFTFRBX05TLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBzYW5lIHN0ZWFsIGFmdGVyIHZDUFUgcGlkIGNoYW5nZTogXCJcbitcdFx0ICAgIFwib2xkPSVcIlBSSXU2NFwiLCBuZXc9JVwiUFJJdTY0LFxuK1x0XHQgICAgbWFpbl9zdGVhbCwgdGhyZWFkX3N0ZWFsKTtcbitcbitcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcInN0ZWFsIHRpbWUgcmVtYWlucyBzYW5lIGFjcm9zcyB2Q1BVIHBpZCBjaGFuZ2VcXG5cIik7XG4rXG4rXHRwdGhyZWFkX2F0dHJfZGVzdHJveShcdTAwMjZhdHRyKTtcbitcdGt2bV92bV9mcmVlKHZtKTtcbitcdGtzZnRfZmluaXNoZWQoKTtcbit9XG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vS2NvbmZpZyBiL3ZpcnQva3ZtL0tjb25maWdcbmluZGV4IGMzYzBlZTI1M2ZjNzcuLmY0MmEzYTBmYzViYWIgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9LY29uZmlnXG4rKysgYi92aXJ0L2t2bS9LY29uZmlnXG5AQCAtODIsNiArODIsOSBAQCBjb25maWcgSEFWRV9LVk1fSVJRX0JZUEFTU1xuIGNvbmZpZyBIQVZFX0tWTV9WQ1BVX1JVTl9QSURfQ0hBTkdFXG4gICAgICAgIGJvb2xcbiBcbitjb25maWcgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxuKyAgICAgICBib29sXG4rXG4gY29uZmlnIEhBVkVfS1ZNX05PX1BPTExcbiAgICAgICAgYm9vbFxuIFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5pbmRleCA2NWViMjZhMDUyMGQ4Li43ODRmMGQ5NDViNDU2IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTQ0NzgsNiArNDQ3OCwxMCBAQCBzdGF0aWMgbG9uZyBrdm1fdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0XHRpZiAocilcbiBcdFx0XHRcdGJyZWFrO1xuIFxuKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxuK1x0XHRcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4rI2VuZGlmXG4rXG4gXHRcdFx0bmV3cGlkID0gZ2V0X3Rhc2tfcGlkKGN1cnJlbnQsIFBJRFRZUEVfUElEKTtcbiBcdFx0XHR3cml0ZV9sb2NrKFx1MDAyNnZjcHUtXHUwMDNlcGlkX2xvY2spO1xuIFx0XHRcdHZjcHUtXHUwMDNlcGlkID0gbmV3cGlkO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDQ6MDMuOTkwNzUyMzgxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3MzYzNDE1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIG5lZWQgdG8gYnJpbmcgS01TQU4gaW50byB0aGUgcGljdHVyZS4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGEgY2hhbmdlIHJlbGF0ZWQgdG8gaG93IHN0ZWFsIHRpbWUgaXMgdHJhY2tlZCBhY3Jvc3MgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgd2l0aGluIEtWTS5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHdoYXQncyBiZWVuIG1vdmVkLiBJdCBsb29rcyBsaWtlIGBsYXN0X3N0ZWFsYCBoYXMgYmVlbiByZWZhY3RvcmVkLiBTcGVjaWZpY2FsbHksIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYHZjcHUtXHUwMDNlYXJjaC5zdGVhbC5sYXN0X3N0ZWFsYCAob3Igc2ltaWxhciB2YXJpYW50cyBmb3IgYXJtNjQsIGxvb25nYXJjaCwgcmlzY3YsIGFuZCB4ODYpIGFyZSBiZWluZyByZXBsYWNlZCBieSBhIGdlbmVyaWMgYHZjcHUtXHUwMDNlbGFzdF9zdGVhbGAgd2l0aGluIHRoZSBgc3RydWN0IGt2bV92Y3B1YC4gVGhlIGFkZGl0aW9uIG9mIHRoZSBgI2lmZGVmIENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FYCBndWFyZCBzdWdnZXN0cyB0aGF0IHRoaXMgcmVmYWN0b3JpbmcgaXMgY29uZGl0aW9uYWwgYW5kIG1pZ2h0IGJlIHVzZWQgdG8gYWJzdHJhY3Qgb3V0IHRoZSBzdGVhbCB0aW1lIGFjY291bnRpbmcuXG5cblRoZW4gdGhlcmUncyB0aGUgYWRkZWQgY29kZSBzbmlwcGV0IGluIGBrdm1fdmNwdV9pb2N0bGAgdW5kZXIgYEtWTV9SVU5gIChvciBwb3RlbnRpYWxseSBzaW1pbGFyIGNvbmRpdGlvbnMgd2hlcmUgdGhlIHZDUFUgUElEIGNoYW5nZXMpLiBIZXJlJ3Mgd2hlcmUgdGhlIHVwZGF0ZSB0byBgdmNwdS1cdTAwM2VsYXN0X3N0ZWFsYCBoYXBwZW5zOiBgdmNwdS1cdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtgIEFnYWluLCB0aGUgYCNpZmRlZmAgc2hvd3MgaXQncyBjb25kaXRpb25hbC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlICphY3R1YWwqIHZhbHVlIG9mIGBsYXN0X3N0ZWFsYCBpcyBiZWluZyBzZXQsIHdoaWNoIGNvdWxkIGJlIHJlbGV2YW50IGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZS4gSWYgYGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXlgIGlzIG5vdCBwcm9wZXJseSBpbml0aWFsaXplZCBvciBpZiB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGlzIGV4ZWN1dGVkIGRvbid0IGd1YXJhbnRlZSBpbml0aWFsaXphdGlvbiwgd2UgY291bGQgaGF2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLlxuXG5Ob3csIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBhcm91bmQgbGluZSA0NDc4LCB0byB2ZXJpZnkgdGhpcyBpbmZvcm1hdGlvbiwgdG8gc2VlIHRoZSBjb250ZXh0IGFuZCBzdXJyb3VuZGluZyBjb2RlIHdpdGggYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyBob3BlZnVsbHkgdGhlcmUgaXNuJ3QgdG9vIG11Y2ggdG8gaGF2ZSB0byBnbyB0aHJvdWdoLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUgYW5kIGZsYWdnaW5nIGFueSBwb3RlbnRpYWwgS01TQU4gY29uY2VybnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMTEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowNDowNy43MjcwOTg5MzhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NjE2NjEwNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSEFWRV9LVk1fUFZfU1RFQUxfVElNRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnPTIwPW1lbnVjb25maWcgS1ZNXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM2LVxcdHNlbGVjdCBIQVZFX0tWTV9WQ1BVX1JVTl9QSURfQ0hBTkdFXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzozNzpcXHRzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMzgtXFx0c2VsZWN0IFNDSEVEX0lORk9cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTI4LVxcdHNlbGVjdCBLVk1fQ09NTU9OXFxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc6Mjk6XFx0c2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0zMC1cXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjgtXFx0c2VsZWN0IEtWTV9DT01NT05cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjI5OlxcdHNlbGVjdCBIQVZFX0tWTV9QVl9TVEVBTF9USU1FXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0zMC1cXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNX1g4Nlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNDItXFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo0MzpcXHRzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTQ0LVxcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTMyNT1zdHJ1Y3Qga3ZtX3ZjcHUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTQwMS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6NDAyOiNpZmRlZiBDT05GSUdfSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC00MDMtXFx0dTY0IGxhc3Rfc3RlYWw7XFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnPTgyPWNvbmZpZyBIQVZFX0tWTV9WQ1BVX1JVTl9QSURfQ0hBTkdFXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTg0LVxcbnZpcnQva3ZtL0tjb25maWc6ODU6Y29uZmlnIEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcXG52aXJ0L2t2bS9LY29uZmlnLTg2LSAgICAgICBib29sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQ0MjU9c3RhdGljIGxvbmcga3ZtX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ0ODAtXFxudmlydC9rdm0va3ZtX21haW4uYzo0NDgxOiNpZmRlZiBDT05GSUdfSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDQ4Mi1cXHRcXHRcXHR2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjA0OjEwLjQ4ODc3MzcyN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjc5OTU4MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIEtWTSBDb3JlOiBMaW5lIDQ0NzggaW4gYGt2bV9tYWluLmNgKipcblxuT2theSwgSSBuZWVkIHRvIGdldCB0byB0aGUgaGVhcnQgb2Ygc29tZXRoaW5nIHJlbGF0ZWQgdG8gS1ZNJ3Mgb3BlcmF0aW9uLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIHRoZSBjb3JlLCBhcyBpdCB3ZXJlLiBJJ20gZm9jdXNpbmcgb24gYHZpcnQva3ZtL2t2bV9tYWluLmNgIGJlY2F1c2UgdGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIHRvcC1sZXZlbCBLVk0gbG9naWMgcmVzaWRlcy4gQW5kIEknbSB6ZXJvaW5nIGluIG9uIGxpbmUgNDQ3OCwgd2hpY2ggbWVhbnMgSSd2ZSBwcm9iYWJseSBnb3QgYSBwcmV0dHkgc3BlY2lmaWMgcXVlc3Rpb24gb3IgaXNzdWUgaW4gbWluZCB0aGF0IEkgdGhpbmsgaXMgYWRkcmVzc2VkIGFyb3VuZCB0aGF0IGFyZWEuIEtub3dpbmcgdGhlIGNvZGViYXNlLCBJJ20gZXhwZWN0aW5nIHNvbWV0aGluZyBjcml0aWNhbCB0byBiZSBoYXBwZW5pbmcgaW4gdGhhdCByZWdpb247IHBlcmhhcHMgYSBtYWpvciBpbml0aWFsaXphdGlvbiBzdGVwLCBhIGtleSBzdGF0ZSB0cmFuc2l0aW9uLCBvciBhbiBpbXBvcnRhbnQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyB2aXJ0dWFsaXphdGlvbiBoYXJkd2FyZS4gSSdtIGdvaW5nIGluIHdpdGggdGhlIGV4cGVjdGF0aW9uIG9mIHVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgdG8gYnVpbGQgbXkgdW5kZXJzdGFuZGluZy4gTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1ODksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowNDoxMi43Njg3MzQzODdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ2NSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQ2NTpcXHRcXG40NDY2OlxcdFxcdFxcdC8qXFxuNDQ2NzpcXHRcXHRcXHQgKiBOb3RlLCB2Y3B1LVxcdTAwM2VwaWQgaXMgcHJpbWFyaWx5IHByb3RlY3RlZCBieSB2Y3B1LVxcdTAwM2VtdXRleC4gVGhlXFxuNDQ2ODpcXHRcXHRcXHQgKiBkZWRpY2F0ZWQgci93IGxvY2sgYWxsb3dzIG90aGVyIHRhc2tzLCBlLmcuIG90aGVyIHZDUFVzLCB0b1xcbjQ0Njk6XFx0XFx0XFx0ICogcmVhZCB2Y3B1LVxcdTAwM2VwaWQgd2hpbGUgdGhpcyB2Q1BVIGlzIGluIEtWTV9SVU4sIGUuZy4gdG8geWllbGRcXG40NDcwOlxcdFxcdFxcdCAqIGRpcmVjdGx5IHRvIHRoaXMgdkNQVVxcbjQ0NzE6XFx0XFx0XFx0ICovXFxuNDQ3MjpcXHRcXHRcXHRvbGRwaWQgPSB2Y3B1LVxcdTAwM2VwaWQ7XFxuNDQ3MzpcXHRcXHRcXHRpZiAodW5saWtlbHkob2xkcGlkICE9IHRhc2tfcGlkKGN1cnJlbnQpKSkge1xcbjQ0NzQ6XFx0XFx0XFx0XFx0LyogVGhlIHRocmVhZCBydW5uaW5nIHRoaXMgVkNQVSBjaGFuZ2VkLiAqL1xcbjQ0NzU6XFx0XFx0XFx0XFx0c3RydWN0IHBpZCAqbmV3cGlkO1xcbjQ0NzY6XFx0XFxuNDQ3NzpcXHRcXHRcXHRcXHRyID0ga3ZtX2FyY2hfdmNwdV9ydW5fcGlkX2NoYW5nZSh2Y3B1KTtcXG40NDc4OlxcdFxcdFxcdFxcdGlmIChyKVxcbjQ0Nzk6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDQ4MDpcXHRcXG40NDgxOlxcdCNpZmRlZiBDT05GSUdfSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxcbjQ0ODI6XFx0XFx0XFx0XFx0dmNwdS1cXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXFx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xcbjQ0ODM6XFx0I2VuZGlmXFxuNDQ4NDpcXHRcXG40NDg1OlxcdFxcdFxcdFxcdG5ld3BpZCA9IGdldF90YXNrX3BpZChjdXJyZW50LCBQSURUWVBFX1BJRCk7XFxuNDQ4NjpcXHRcXHRcXHRcXHR3cml0ZV9sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VwaWRfbG9jayk7XFxuNDQ4NzpcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2VwaWQgPSBuZXdwaWQ7XFxuNDQ4ODpcXHRcXHRcXHRcXHR3cml0ZV91bmxvY2soXFx1MDAyNnZjcHUtXFx1MDAzZXBpZF9sb2NrKTtcXG40NDg5OlxcdFxcbjQ0OTA6XFx0XFx0XFx0XFx0cHV0X3BpZChvbGRwaWQpO1xcbjQ0OTE6XFx0XFx0XFx0fVxcbjQ0OTI6XFx0XFx0XFx0dmNwdS1cXHUwMDNld2FudHNfdG9fcnVuID0gIVJFQURfT05DRSh2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWltbWVkaWF0ZV9leGl0X191bnNhZmUpO1xcbjQ0OTM6XFx0XFx0XFx0ciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHZjcHUpO1xcbjQ0OTQ6XFx0XFx0XFx0dmNwdS1cXHUwMDNld2FudHNfdG9fcnVuID0gZmFsc2U7XFxuNDQ5NTpcXHRcXG40NDk2OlxcdFxcdFxcdC8qXFxuNDQ5NzpcXHRcXHRcXHQgKiBGSVhNRTogUmVtb3ZlIHRoaXMgaGFjayBvbmNlIGFsbCBLVk0gYXJjaGl0ZWN0dXJlc1xcbjQ0OTg6XFx0XFx0XFx0ICogc3VwcG9ydCB0aGUgZ2VuZXJpYyBUSUYgYml0cywgaS5lLiBhIGRlZGljYXRlZCBUSUZfUlNFUS5cXG40NDk5OlxcdFxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowNDoxMi43NjkyMjU0NDdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYyMzcyMzQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBLVk0gY29kZSBhbmQgdHJhY2UgdGhlIGxpZmVjeWNsZSBvZiBhIHZpcnR1YWwgQ1BVIChgdmNwdWApLiBNeSBwcmltYXJ5IGludGVyZXN0IGlzIGluIHVuZGVyc3RhbmRpbmcgaG93IGB2Y3B1YCBpdHNlbGYgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gSSB3YW50IHRvIHNlZSB0aGlzIGZyb20gYSBsb3ctbGV2ZWwgcGVyc3BlY3RpdmUsIGxpa2UgYSBrZXJuZWwgaGFja2VyLlxuXG5NeSBoeXBvdGhlc2lzLCBiYXNlZCBvbiBwcmlvciBleHBlcmllbmNlLCBpcyB0aGF0IHdoZW4gYSBgdmNwdWAgaW5zdGFuY2UgaXMgbmVlZGVk4oCUY3JlYXRlZCBlaXRoZXIgdGhyb3VnaCBhbiBgaW9jdGxgIGNhbGwgbGlrZSBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBvciBhIGZ1bmN0aW9uIGxpa2UgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYOKAlHRoZSBhbGxvY2F0aW9uIG1lY2hhbmlzbSB3aWxsIGxpa2VseSB1dGlsaXplIGBremFsbG9jYCAob3IgcGVyaGFwcyBga21lbV9jYWNoZV96YWxsb2NgKSB0byBlbnN1cmUgYSB6ZXJvLWluaXRpYWxpemVkIG1lbW9yeSBibG9jay4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGluIHRoZSBrZXJuZWwuXG5cblNvLCB0aGUgbmV4dCBzdGVwIGlzIHRvIGdldCBzb21lIHZlcmlmaWNhdGlvbiBvbiB0aGlzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMsIGluIGZhY3QsIHRoZSBhbGxvY2F0aW9uIG1ldGhvZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NDAsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjA0OjE1LjM5Mjk1MTg3MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU1OTMzMTMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fYXJjaF92Y3B1X2NyZWF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9hcm0uYz01MjY9aW50IGt2bV9hcmNoX3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtNTM2LVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjUzNzppbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTUzOC17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTcxPWludCBrdm1fdmdpY19jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1MzIgdHlwZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMTEyLVxcdCAqIC0gQmFpbGluZyBvbiB0aGUgZW50aXJlIHRoaW5nIGlmIGEgdkNQVSBpcyBpbiB0aGUgbWlkZGxlIG9mIGNyZWF0aW9uLFxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6MTEzOlxcdCAqICAgZHJvcHBlZCB0aGUga3ZtLVxcdTAwM2Vsb2NrLCBidXQgaGFzbid0IHJlYWNoZWQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoKS5cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTExNC1cXHQgKlxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYz0xNTA4PWludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMtMTUxMi1cXG5hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jOjE1MTM6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jLTE1MTQte1xcbi0tXFxuYXJjaC9taXBzL2t2bS9taXBzLmM9MjczPWludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcXG4tLVxcbmFyY2gvbWlwcy9rdm0vbWlwcy5jLTI3Ny1cXG5hcmNoL21pcHMva3ZtL21pcHMuYzoyNzg6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL21pcHMva3ZtL21pcHMuYy0yNzkte1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9Nzc4PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBrdm1wcGNfZGVjcmVtZW50ZXJfd2FrZXVwKHN0cnVjdCBocnRpbWVyICp0aW1lcilcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTc4Ny1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo3ODg6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy03ODkte1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTEzOT1pbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMTQzLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzoxNDQ6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMTQ1LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmM9Mzc3OD1ERUZJTkVfRlJFRShzaWVfcGFnZSwgc3RydWN0IHNpZV9wYWdlICosIGlmIChfVCkgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKShfVCkpKVxcbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmMtMzc3OS1cXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jOjM3ODA6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTM3ODEte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz04Mjc9dm9pZCB0ZHhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy04NDItICogICAgMy4xIHRkeF92Y3B1X2NyZWF0ZSgpIHRyYW5zaXRpb25zIHZDUFUgc3RhdGUgdG8gVkNQVV9URF9TVEFURV9VTklOSVRJQUxJWkVELlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6ODQzOiAqICAgIDMuMiB2Y3B1X2xvYWQoKSBhbmQgdmNwdV9wdXQoKSBpbiBrdm1fYXJjaF92Y3B1X2NyZWF0ZSgpLlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6ODQ0OiAqICAgIDMuMyAoY29uZGl0aW9uYWwpIGlmIGFueSBlcnJvciBlbmNvdW50ZXJlZCBhZnRlciBrdm1fYXJjaF92Y3B1X2NyZWF0ZSgpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy04NDUtICogICAgICAgIGt2bV9hcmNoX3ZjcHVfZGVzdHJveSgpIC0tXFx1MDAzZSB0ZHhfdmNwdV9mcmVlKCkuXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9OTMwMD1pbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTMzOC1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTMzOTppbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ODYuYy05MzQwLXtcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xNjUzPWludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCk7XFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE2NTQ6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE2NTUtdm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NDE1Nj1zdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaWQpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQyMTItXFxudmlydC9rdm0va3ZtX21haW4uYzo0MjEzOlxcdHIgPSBrdm1fYXJjaF92Y3B1X2NyZWF0ZSh2Y3B1KTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQyMTQtXFx0aWYgKHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjA0OjE3Ljk1MjI4ODQwMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTgxMjI3ODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEtWTSBDUFUgQ3JlYXRpb24qKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBjb3JlIG9mIHZpcnR1YWwgQ1BVIGNyZWF0aW9uIGluIEtWTS4gTXkgbWVudGFsIG1hcCBpbW1lZGlhdGVseSBsZWFkcyBtZSB0byBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YC4gVGhhdCdzIHRoZSBsaWtlbHkgZW50cnkgcG9pbnQgZm9yIGEgdXNlci1zcGFjZSByZXF1ZXN0IHRvIHNwYXduIGEgdmlydHVhbCBDUFUuIFRoZSBjb2RlIEkgbmVlZCBpcyBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AsIHdoaWNoIG1ha2VzIHNlbnNlOyB0aGF0IGZpbGUgdXN1YWxseSBob2xkcyB0aGUgbW9yZSBnZW5lcmFsIEtWTSBWTSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGhhbmRsZSBhbGxvY2F0aW5nIHRoZSBgdmNwdWAgZGF0YSBzdHJ1Y3R1cmUsIHNldHRpbmcgdXAgdGhlIGluaXRpYWwgc3RhdGUsIGhvb2tpbmcgaXQgaW50byB0aGUgVk0sIGFuZCBsaWtlbHkgaW5pdGlhdGluZyB0aGUgZmlyc3QgcnVuIG9yIGF0IGxlYXN0IHNldHRpbmcgdGhpbmdzIHVwIHNvIGl0J3MgcmVhZHkgdG8gcnVuLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiBhbmQgdGhlIGFjdHVhbCBjb250cm9sIGZsb3cgd2l0aGluIHRoYXQgaW9jdGwgaGFuZGxlci4gSSBhbSBhbHNvIGF3YXJlIHRoYXQgdGhpcyBjYWxsIGNvdWxkIGJlIGEgdmVyeSBleHBlbnNpdmUgY2FsbCwgc28gdW5kZXJzdGFuZGluZyBhbnkgbG9ja2luZyBvciBvcHRpbWl6YXRpb25zIHdvdWxkIGJlIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyODYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowNDoyMC41MzM1MjA4MjNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDIwMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDIwMDpcXHRcXG40MjAxOlxcdFxcdHZjcHUtXFx1MDAzZXZjcHVfaWR4ID0gLTE7XFxuNDIwMjpcXHRcXG40MjAzOlxcdFxcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGt2bV9ydW4pIFxcdTAwM2UgUEFHRV9TSVpFKTtcXG40MjA0OlxcdFxcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pO1xcbjQyMDU6XFx0XFx0aWYgKCFwYWdlKSB7XFxuNDIwNjpcXHRcXHRcXHRyID0gLUVOT01FTTtcXG40MjA3OlxcdFxcdFxcdGdvdG8gdmNwdV9mcmVlO1xcbjQyMDg6XFx0XFx0fVxcbjQyMDk6XFx0XFx0dmNwdS1cXHUwMDNlcnVuID0gcGFnZV9hZGRyZXNzKHBhZ2UpO1xcbjQyMTA6XFx0XFxuNDIxMTpcXHRcXHRrdm1fdmNwdV9pbml0KHZjcHUsIGt2bSwgaWQpO1xcbjQyMTI6XFx0XFxuNDIxMzpcXHRcXHRyID0ga3ZtX2FyY2hfdmNwdV9jcmVhdGUodmNwdSk7XFxuNDIxNDpcXHRcXHRpZiAocilcXG40MjE1OlxcdFxcdFxcdGdvdG8gdmNwdV9mcmVlX3J1bl9wYWdlO1xcbjQyMTY6XFx0XFxuNDIxNzpcXHRcXHRpZiAoa3ZtLVxcdTAwM2VkaXJ0eV9yaW5nX3NpemUpIHtcXG40MjE4OlxcdFxcdFxcdHIgPSBrdm1fZGlydHlfcmluZ19hbGxvYyhrdm0sIFxcdTAwMjZ2Y3B1LVxcdTAwM2VkaXJ0eV9yaW5nLFxcbjQyMTk6XFx0XFx0XFx0XFx0XFx0XFx0IGlkLCBrdm0tXFx1MDAzZWRpcnR5X3Jpbmdfc2l6ZSk7XFxuNDIyMDpcXHRcXHRcXHRpZiAocilcXG40MjIxOlxcdFxcdFxcdFxcdGdvdG8gYXJjaF92Y3B1X2Rlc3Ryb3k7XFxuNDIyMjpcXHRcXHR9XFxuNDIyMzpcXHRcXG40MjI0OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjA0OjIwLjUzMzgwMzU1M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzQ4NTE2OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZTpcblxuKipBbmFseXppbmcgVkNQVSBBbGxvY2F0aW9uKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiB0aGlzLiBMaW5lIDQyMDAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdGF0ZSBvZiB0aGUgYHZjcHVgIHZhcmlhYmxlICpyaWdodCogYmVmb3JlIHRoYXQgcG9pbnQuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGV4YWN0bHkgd2hlcmUgaXQncyBhbGxvY2F0ZWQsIGluaXRpYWxpemVkLCBhbmQgcG90ZW50aWFsbHkgbW9kaWZpZWQgcHJpb3IgdG8gd2hhdGV2ZXIgYWN0aW9uIGlzIG9jY3VycmluZyBvbiB0aGF0IGxpbmUuIEknbSBnb2luZyB0byBsb29rIHVwc3RyZWFtLCBwcm9iYWJseSB1c2luZyBteSBJREUncyBcImZpbmQgcmVmZXJlbmNlc1wiIG9yIFwiY2FsbGVyc1wiIGZlYXR1cmUgdG8gdHJhY2UgYmFjayBmcm9tIGxpbmUgNDIwMC4gSSBuZWVkIHRvIHNlZSBpZiBpdCdzIGFzc2lnbmVkIGRpcmVjdGx5LCBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gYSBmdW5jdGlvbiwgb3IgcGVyaGFwcyBkZXJpdmVkIGZyb20gc29tZSBvdGhlciBzdHJ1Y3R1cmUuIFVuZGVyc3RhbmRpbmcgaXRzIG9yaWdpbiBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgY3VycmVudCBzdGF0ZSBhbmQgaG93IGl0IG1pZ2h0IGltcGFjdCB0aGUgY29kZSBvbiBsaW5lIDQyMDAuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBwb2ludHMgb2YgY29udGVudGlvbiBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBObyBhc3N1bXB0aW9uczsgSSdtIGdvaW5nIGJhY2sgdG8gYmFzaWNzIHdpdGggaG93IHRoZSB2YXJpYWJsZSBpcyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NTIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjA0OjIyLjg4MjMyNDAwNloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTgwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MTgwOlxcdFxcdGlmICh0ZXN0X2JpdChpZCwga3ZtLVxcdTAwM2V2Y3B1X2lkcykpIHtcXG40MTgxOlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG40MTgyOlxcdFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbjQxODM6XFx0XFx0fVxcbjQxODQ6XFx0XFxuNDE4NTpcXHRcXHRyID0ga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoa3ZtLCBpZCk7XFxuNDE4NjpcXHRcXHRpZiAocikge1xcbjQxODc6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWxvY2spO1xcbjQxODg6XFx0XFx0XFx0cmV0dXJuIHI7XFxuNDE4OTpcXHRcXHR9XFxuNDE5MDpcXHRcXG40MTkxOlxcdFxcdGt2bS1cXHUwMDNlY3JlYXRlZF92Y3B1cysrO1xcbjQxOTI6XFx0XFx0X19zZXRfYml0KGlkLCBrdm0tXFx1MDAzZXZjcHVfaWRzKTtcXG40MTkzOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG40MTk0OlxcdFxcbjQxOTU6XFx0XFx0dmNwdSA9IGttZW1fY2FjaGVfemFsbG9jKGt2bV92Y3B1X2NhY2hlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbjQxOTY6XFx0XFx0aWYgKCF2Y3B1KSB7XFxuNDE5NzpcXHRcXHRcXHRyID0gLUVOT01FTTtcXG40MTk4OlxcdFxcdFxcdGdvdG8gdmNwdV9kZWNyZW1lbnQ7XFxuNDE5OTpcXHRcXHR9XFxuNDIwMDpcXHRcXG40MjAxOlxcdFxcdHZjcHUtXFx1MDAzZXZjcHVfaWR4ID0gLTE7XFxuNDIwMjpcXHRcXG40MjAzOlxcdFxcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGt2bV9ydW4pIFxcdTAwM2UgUEFHRV9TSVpFKTtcXG40MjA0OlxcdFxcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowNDoyMi44ODI1NDkzMjZaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjQ0NTM1NDUyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBhIFN0ZWFsLVRpbWUgQ2FsY3VsYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGB2Y3B1YCBpcyB6ZXJvZWQgb3V0IG9uIGFsbG9jYXRpb24g4oCTIHRoYXQncyBnb29kLiBga21lbV9jYWNoZV96YWxsb2NgIGdpdmVzIHVzIGEgY2xlYW4gc2xhdGUsIHNvIGB2Y3B1LVx1MDAzZWxhc3Rfc3RlYWxgIHN0YXJ0cyBhdCB6ZXJvLiBUaGUgcGF0Y2gncyBjb3JlIGlzc3VlIGlzIHByZXR0eSBjbGVhcjogaXQncyBhYm91dCB0aGUgdHJhY2tpbmcgb2Ygc3RlYWwtdGltZS4gUHJldmlvdXNseSwgYGxhc3Rfc3RlYWxgIHdhcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsIHR1Y2tlZCBhd2F5IGluIGB2Y3B1LVx1MDAzZWFyY2guXHUwMDNjYXJjaC1zcGVjaWZpY1x1MDAzZS5sYXN0X3N0ZWFsYC4gVGhlIHByb2JsZW0gYXJpc2VzIHdoZW4gYSB2Q1BVIHN3aXRjaGVzIHRvIGJlaW5nIHJ1biBieSBhIGRpZmZlcmVudCBob3N0IHRocmVhZCAoYSBuZXcgUElEKS4gU3RlYWwtdGltZSBjYWxjdWxhdGlvbiB3YXMgdXNpbmcgYGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkgLSBsYXN0X3N0ZWFsYC4gQnV0IGBydW5fZGVsYXlgIGlzIHRocmVhZC1zcGVjaWZpYy4gU28sIGlmIHRocmVhZCBBIHJhbiB0aGUgdkNQVSwgdGhlbiB0aHJlYWQgQiwgd2UnZCBiZSBzdWJ0cmFjdGluZyB0aHJlYWQgQSdzIGBydW5fZGVsYXlgIChmcm9tIHdoZW4gaXQgcmFuIHRoZSB2Q1BVKSBmcm9tIHRocmVhZCBCJ3MgYHJ1bl9kZWxheWAuIFRoYXQncyBhIGRpc2FzdGVyIOKAkyB3aWxkbHkgaW5jb3JyZWN0IHZhbHVlcywgcG90ZW50aWFsbHkgbmVnYXRpdmUsIGRlZmluaXRlbHkgd3JvbmcuXG5cblRoZSBmaXggdW5pZmllcyB0aGlzLCBtb3ZpbmcgYGxhc3Rfc3RlYWxgIGludG8gdGhlIGNvcmUgYHN0cnVjdCBrdm1fdmNwdWAgYW5kIHJlc2V0dGluZyBgdmNwdS1cdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheWAgd2hlbmV2ZXIgdGhlIHJ1bm5pbmcgdGFzaydzIFBJRCBjaGFuZ2VzIGluIGBrdm1fdmNwdV9pb2N0bCgpYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IHNhZmV0eS4gTGV0J3MgZGlnIGludG8gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW1zIG9yIGtlcm5lbCBpbmZvcm1hdGlvbiBsZWFrcy4gRmlyc3QsIGBsYXN0X3N0ZWFsYCAqc3RhcnRzKiBhdCB6ZXJvLCBzbyB0aGF0J3MgZ29vZC4gSSdtIGNoZWNraW5nIGVhY2ggYXJjaGl0ZWN0dXJlIHNwZWNpZmljYWxseS4gYGt2bV9pbml0X3N0b2xlbl90aW1lYCBpbiBhcm02NCwgYW5kIHRoZSBsb29uZ2FyY2ggYW5kIHJpc2N2IHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgYWxsIHNldHRpbmcgYHZjcHUtXHUwMDNlbGFzdF9zdGVhbGAgcHJvcGVybHkgdG8gYGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXlgLiBUaGUgeDg2IHNlZW1zIHRvIGRvIHRoaXMgaW4gYHJlY29yZF9zdGVhbF90aW1lKClgLiBBbmQgdGhlIGdlbmVyYWwgUElEIGNoYW5nZSBoYW5kbGVyIGluIGBrdm1fdmNwdV9pb2N0bCgpYCAqYWxzbyogcmVzZXRzIGl0LiBJdCdzIHByb3Blcmx5IGluaXRpYWxpemVkIGFjcm9zcyB0aGUgYm9hcmQuXG5cbkRvZXMgYW55dGhpbmcgKnJlYWQqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gRG9lcyBhbnl0aGluZyAqY29weSogdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZT8gTm8uIEFueSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIFRoaXMgcGF0Y2ggYXBwZWFycyBzYWZlLCBmcm9tIGEgbWVtb3J5IHBlcnNwZWN0aXZlLiBObyByaXNrcyBpbnRyb2R1Y2VkLlxuXG5Pa2F5LCBsZXQncyBhcHBseSB0aGUgYXBwcm9wcmlhdGUgS01TQU4gbG9naWM6IE5lZWRzS01TQU4gc2hvdWxkIE9OTFkgYmUgdHJ1ZSBpZiB3ZSdyZSBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOICpzcGVjaWZpY2FsbHkqIGRldGVjdHMuIFNpbmNlIHRoaXMgcGF0Y2ggZG9lc24ndCwgTmVlZHNLTVNBTiBzaG91bGQgYmUgZmFsc2UuXG5cblNvLCBpbiBlc3NlbmNlLCB0aGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB0cmFja2luZyBvZiBzdGVhbC10aW1lIHdoZW4gdGhyZWFkcyBhcmUgc3dpdGNoZWQsIHVuaWZ5aW5nIGBsYXN0X3N0ZWFsYCB0byBgc3RydWN0IGt2bV92Y3B1YCB0byBmaXggYSBjYWxjdWxhdGlvbiBlcnJvci4gQW5kLCB0aGVyZSdzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCB0aGVyZWZvcmUgdGhlIGZsYWcgc2hvdWxkIGJlIGFwcHJvcHJpYXRlbHkgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYwMCwiT3V0cHV0VG9rZW5zIjoyNDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowNDoyOS4zMjc5MDY2NloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB0cmFja2luZyBvZiBwYXJhdmlydHVhbGl6ZWQgc3RlYWwgdGltZSAoYGxhc3Rfc3RlYWxgKSBieSBtb3ZpbmcgaXQgZnJvbSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdmNwdSBzdWItc3RydWN0dXJlcyAoaW4geDg2LCBhcm02NCwgcmlzY3YsIGFuZCBsb29uZ2FyY2gpIGludG8gdGhlIGdlbmVyaWMgYHN0cnVjdCBrdm1fdmNwdWAgdW5kZXIgYENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FYCwgYW5kIHJlc2V0dGluZyBgdmNwdS1cXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXFx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5YCB3aGVuIHRoZSB2Q1BVIHRocmVhZCBQSUQgY2hhbmdlcy5cXG5cXG5UaGUgYHN0cnVjdCBrdm1fdmNwdWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvYygpYCwgZW5zdXJpbmcgYHZjcHUtXFx1MDAzZWxhc3Rfc3RlYWxgIGlzIHplcm8taW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24uIEFsbCByZWFkcyBhbmQgd3JpdGVzIHRvIGB2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsYCBvcGVyYXRlIG9uIGZ1bGx5IGluaXRpYWxpemVkIGZpZWxkcyBhbmQgdmFsdWVzIGRlcml2ZWQgZnJvbSBgY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXlgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RhY2sgdmFyaWFibGVzLCBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBvciBwYWRkaW5nIGlzc3VlcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB0cmFja2luZyBvZiBwYXJhdmlydHVhbGl6ZWQgc3RlYWwgdGltZSAoYGxhc3Rfc3RlYWxgKSBieSBtb3ZpbmcgaXQgZnJvbSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdmNwdSBzdWItc3RydWN0dXJlcyAoaW4geDg2LCBhcm02NCwgcmlzY3YsIGFuZCBsb29uZ2FyY2gpIGludG8gdGhlIGdlbmVyaWMgYHN0cnVjdCBrdm1fdmNwdWAgdW5kZXIgYENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FYCwgYW5kIHJlc2V0dGluZyBgdmNwdS1cXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXFx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5YCB3aGVuIHRoZSB2Q1BVIHRocmVhZCBQSUQgY2hhbmdlcy5cXG5cXG5UaGUgYHN0cnVjdCBrdm1fdmNwdWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvYygpYCwgZW5zdXJpbmcgYHZjcHUtXFx1MDAzZWxhc3Rfc3RlYWxgIGlzIHplcm8taW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24uIEFsbCByZWFkcyBhbmQgd3JpdGVzIHRvIGB2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsYCBvcGVyYXRlIG9uIGZ1bGx5IGluaXRpYWxpemVkIGZpZWxkcyBhbmQgdmFsdWVzIGRlcml2ZWQgZnJvbSBgY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXlgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RhY2sgdmFyaWFibGVzLCBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBvciBwYWRkaW5nIGlzc3VlcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow9xg5w[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 05:01:01 +0000 UTC FinishedAt: 2026-09-06 05:04:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "8ab1afb2eb246ab15b301cd255b5943d208a93c1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "8ab1afb2eb246ab15b301cd255b5943d208a93c1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "41c08939-49e3-4c3f-af0e-c3e4622237c2" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "record_steal_time", "kvm_vcpu_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlY29yZF9zdGVhbF90aW1lJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB0cmFja2luZyBvZiBwYXJhdmlydHVhbGl6ZWQgc3RlYWwgdGltZSAoYGxhc3Rfc3RlYWxgKSBieSBtb3ZpbmcgaXQgZnJvbSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdmNwdSBzdWItc3RydWN0dXJlcyAoaW4geDg2LCBhcm02NCwgcmlzY3YsIGFuZCBsb29uZ2FyY2gpIGludG8gdGhlIGdlbmVyaWMgYHN0cnVjdCBrdm1fdmNwdWAgdW5kZXIgYENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FYCwgYW5kIHJlc2V0dGluZyBgdmNwdS1cdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheWAgd2hlbiB0aGUgdkNQVSB0aHJlYWQgUElEIGNoYW5nZXMuXG5cblRoZSBgc3RydWN0IGt2bV92Y3B1YCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jKClgLCBlbnN1cmluZyBgdmNwdS1cdTAwM2VsYXN0X3N0ZWFsYCBpcyB6ZXJvLWluaXRpYWxpemVkIGF0IGNyZWF0aW9uLiBBbGwgcmVhZHMgYW5kIHdyaXRlcyB0byBgdmNwdS1cdTAwM2VsYXN0X3N0ZWFsYCBvcGVyYXRlIG9uIGZ1bGx5IGluaXRpYWxpemVkIGZpZWxkcyBhbmQgdmFsdWVzIGRlcml2ZWQgZnJvbSBgY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheWAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdGFjayB2YXJpYWJsZXMsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIHBhZGRpbmcgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc29saWRhdGVzIHN0ZWFsLXRpbWUgYWNjb3VudGluZyBhY3Jvc3MgYXJjaGl0ZWN0dXJlcyBieSBtb3ZpbmcgYGxhc3Rfc3RlYWxgIHRvIGdlbmVyaWMgYHN0cnVjdCBrdm1fdmNwdWAgYW5kIHJlc2V0dGluZyBpdCBpbiBga3ZtX3ZjcHVfaW9jdGwoKWAgd2hlbiBhIHZDUFUgdGhyZWFkIGNoYW5nZXMuIEl0IG1vZGlmaWVzIGV4ZWN1dGFibGUgY29kZSBpbiBjb3JlIEtWTSAoYGt2bV92Y3B1X2lvY3RsYCkgYW5kIHg4NiBLVk0gKGByZWNvcmRfc3RlYWxfdGltZWApLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGluIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjFmMzhkODRlMjIxYWI3ZjliZTQ1MjdlYjU2MTYzNzAwYmYxNzY2OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDU6MDM6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCAyN2ZlMGNkNWIyZDdhLi4zNmNiN2RlZTk4OGNiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC05MzcsNyAmIzQzOzkzNyw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcbiBcdC8qIEd1ZXN0IFBWIHN0YXRlICovXG4gXHRzdHJ1Y3Qge1xuLVx0XHR1NjQgbGFzdF9zdGVhbDtcbiBcdFx0Z3BhX3QgYmFzZTtcbiBcdH0gc3RlYWw7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vS2NvbmZpZyBiL2FyY2gvYXJtNjQva3ZtL0tjb25maWdcbmluZGV4IDQ0OTE1NGY5YTQ4NTIuLmY1ODU1YmZjNjgxYzEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9LY29uZmlnXG5AQCAtMzQsNiAmIzQzOzM0LDcgQEAgbWVudWNvbmZpZyBLVk1cbiBcdHNlbGVjdCBIQVZFX0tWTV9JUlFfQllQQVNTXG4gXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXG4gXHRzZWxlY3QgSEFWRV9LVk1fVkNQVV9SVU5fUElEX0NIQU5HRVxuJiM0MztcdHNlbGVjdCBIQVZFX0tWTV9QVl9TVEVBTF9USU1FXG4gXHRzZWxlY3QgU0NIRURfSU5GT1xuIFx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTXG4gXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcHZ0aW1lLmMgYi9hcmNoL2FybTY0L2t2bS9wdnRpbWUuY1xuaW5kZXggNGNlYWJhYTRjMzBiZC4uYTY3ZDkzODQ1ZDc5NCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9wdnRpbWUuY1xuQEAgLTE0LDcgJiM0MzsxNCw3IEBAIHZvaWQga3ZtX3VwZGF0ZV9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXHR1NjQgYmFzZSA9IHZjcHUtXHUwMDNlYXJjaC5zdGVhbC5iYXNlO1xuLVx0dTY0IGxhc3Rfc3RlYWwgPSB2Y3B1LVx1MDAzZWFyY2guc3RlYWwubGFzdF9zdGVhbDtcbiYjNDM7XHR1NjQgbGFzdF9zdGVhbCA9IHZjcHUtXHUwMDNlbGFzdF9zdGVhbDtcbiBcdHU2NCBvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcHZjbG9ja192Y3B1X3N0b2xlbl90aW1lLCBzdG9sZW5fdGltZSk7XG4gXHR1NjQgc3RlYWwgPSAwO1xuIFx0aW50IGlkeDtcbkBAIC0yNSw4ICYjNDM7MjUsOCBAQCB2b2lkIGt2bV91cGRhdGVfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuIFx0aWYgKCFrdm1fZ2V0X2d1ZXN0KGt2bSwgYmFzZSAmIzQzOyBvZmZzZXQsIHN0ZWFsKSkge1xuIFx0XHRzdGVhbCA9IGxlNjRfdG9fY3B1KHN0ZWFsKTtcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLnN0ZWFsLmxhc3Rfc3RlYWwgPSBSRUFEX09OQ0UoY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSk7XG4tXHRcdHN0ZWFsICYjNDM7PSB2Y3B1LVx1MDAzZWFyY2guc3RlYWwubGFzdF9zdGVhbCAtIGxhc3Rfc3RlYWw7XG4mIzQzO1x0XHR2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgPSBSRUFEX09OQ0UoY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSk7XG4mIzQzO1x0XHRzdGVhbCAmIzQzOz0gdmNwdS1cdTAwM2VsYXN0X3N0ZWFsIC0gbGFzdF9zdGVhbDtcbiBcdFx0a3ZtX3B1dF9ndWVzdChrdm0sIGJhc2UgJiM0Mzsgb2Zmc2V0LCBjcHVfdG9fbGU2NChzdGVhbCkpO1xuIFx0fVxuIFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbkBAIC02MSw3ICYjNDM7NjEsNyBAQCBncGFfdCBrdm1faW5pdF9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgKiBTdGFydCBjb3VudGluZyBzdG9sZW4gdGltZSBmcm9tIHRoZSB0aW1lIHRoZSBndWVzdCByZXF1ZXN0c1xuIFx0ICogdGhlIGZlYXR1cmUgZW5hYmxlZC5cbiBcdCAqL1xuLVx0dmNwdS1cdTAwM2VhcmNoLnN0ZWFsLmxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuJiM0MztcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4gXHRrdm1fd3JpdGVfZ3Vlc3RfbG9jayhrdm0sIGJhc2UsIFx1MDAyNmluaXRfdmFsdWVzLCBzaXplb2YoaW5pdF92YWx1ZXMpKTtcbiBcbiBcdHJldHVybiBiYXNlO1xuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCAyM2NmYmVjZWJiZDc5Li4xNDUxNGEyNWIyNjEzIDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTI1Myw3ICYjNDM7MjUzLDYgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xuIFx0LyogcGFyYXZpcnQgc3RlYWwgdGltZSAqL1xuIFx0c3RydWN0IHtcbiBcdFx0dTY0IGd1ZXN0X2FkZHI7XG4tXHRcdHU2NCBsYXN0X3N0ZWFsO1xuIFx0XHRzdHJ1Y3QgZ2ZuX3RvX2h2YV9jYWNoZSBjYWNoZTtcbiBcdFx0dTggIHByZWVtcHRlZDtcbiBcdH0gc3Q7XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWcgYi9hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZ1xuaW5kZXggMTVkYTJkODhjMGMxMC4uNDk5NmVjOWMwN2Y5OSAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZ1xuQEAgLTI2LDYgJiM0MzsyNiw3IEBAIGNvbmZpZyBLVk1cbiBcdHNlbGVjdCBIQVZFX0tWTV9NU0lcbiBcdHNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU1cbiBcdHNlbGVjdCBLVk1fQ09NTU9OXG4mIzQzO1x0c2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcbiBcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcbiBcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xuIFx0c2VsZWN0IEtWTV9NTUlPXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmNcbmluZGV4IDRmNThlNmUyY2Y4NjYuLjU2YWU2YjE4ZjhjMTAgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jXG5AQCAtNzczLDcgJiM0Mzs3NzMsNyBAQCBzdGF0aWMgbG9uZyBrdm1fc2F2ZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRpZiAoIShkYXRhIFx1MDAyNiBLVk1fU1RFQUxfUEhZU19WQUxJRCkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbiYjNDM7XHRcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4gXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdGRlZmF1bHQ6XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmNcbmluZGV4IGVkOWUwOTJjOTdiYTcuLjcyOGQyOWViYThlMDMgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG5AQCAtMTg3LDggJiM0MzsxODcsOCBAQCBzdGF0aWMgdm9pZCBrdm1fdXBkYXRlX3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHNtcF93bWIoKTtcbiBcbiBcdHVuc2FmZV9nZXRfdXNlcihzdGVhbCwgXHUwMDI2c3QtXHUwMDNlc3RlYWwsIG91dCk7XG4tXHRzdGVhbCAmIzQzOz0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSAtIHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnN0Lmxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuJiM0MztcdHN0ZWFsICYjNDM7PSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5IC0gdmNwdS1cdTAwM2VsYXN0X3N0ZWFsO1xuJiM0MztcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4gXHR1bnNhZmVfcHV0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuIFxuIFx0c21wX3dtYigpO1xuQEAgLTEyMDUsNyAmIzQzOzEyMDUsNyBAQCBzdGF0aWMgaW50IGt2bV9sb29uZ2FyY2hfcHZ0aW1lX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBcdGlmICghcmV0KSB7XG4gXHRcdHZjcHUtXHUwMDNlYXJjaC5zdC5ndWVzdF9hZGRyID0gZ3BhO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4mIzQzO1x0XHR2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuIFx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfU1RFQUxfVVBEQVRFLCB2Y3B1KTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGEzMDYwMDU3OTIzMWIuLjMwNTg3NTMwMWMwNDIgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTI3Myw3ICYjNDM7MjczLDYgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xuIFx0LyogU0JJIHN0ZWFsLXRpbWUgYWNjb3VudGluZyAqL1xuIFx0c3RydWN0IHtcbiBcdFx0Z3BhX3Qgc2htZW07XG4tXHRcdHU2NCBsYXN0X3N0ZWFsO1xuIFx0fSBzdGE7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnIGIvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ1xuaW5kZXggZWMyY2VlMGEzOWUwMS4uMWZmMDdhOTA0YTAyNyAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbkBAIC0yNiw2ICYjNDM7MjYsNyBAQCBjb25maWcgS1ZNXG4gXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXG4gXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXG4gXHRzZWxlY3QgS1ZNX0NPTU1PTlxuJiM0MztcdHNlbGVjdCBIQVZFX0tWTV9QVl9TVEVBTF9USU1FXG4gXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXG4gXHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbiBcdHNlbGVjdCBLVk1fTU1JT1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3N0YS5jIGIvYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfc3RhLmNcbmluZGV4IDYwZTUwMjk2YTAwODUuLjlhNzdkM2JkZTdjNzIgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9zdGEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfc3RhLmNcbkBAIC0xOSwxMyAmIzQzOzE5LDEzIEBAXG4gc3RhdGljIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfc2JpX3N0YV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0dmNwdS1cdTAwM2VhcmNoLnN0YS5zaG1lbSA9IElOVkFMSURfR1BBO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnN0YS5sYXN0X3N0ZWFsID0gMDtcbiYjNDM7XHR2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgPSAwO1xuIH1cbiBcbiB2b2lkIGt2bV9yaXNjdl92Y3B1X3JlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRncGFfdCBzaG1lbSA9IHZjcHUtXHUwMDNlYXJjaC5zdGEuc2htZW07XG4tXHR1NjQgbGFzdF9zdGVhbCA9IHZjcHUtXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbDtcbiYjNDM7XHR1NjQgbGFzdF9zdGVhbCA9IHZjcHUtXHUwMDNlbGFzdF9zdGVhbDtcbiBcdF9fbGUzMiBfX3VzZXIgKnNlcXVlbmNlX3B0cjtcbiBcdF9fbGU2NCBfX3VzZXIgKnN0ZWFsX3B0cjtcbiBcdF9fbGUzMiBzZXF1ZW5jZV9sZTtcbkBAIC02Nyw4ICYjNDM7NjcsOCBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X3JlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdGlmICghV0FSTl9PTihnZXRfdXNlcihzdGVhbF9sZSwgc3RlYWxfcHRyKSkpIHtcbiBcdFx0c3RlYWwgPSBsZTY0X3RvX2NwdShzdGVhbF9sZSk7XG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbCA9IFJFQURfT05DRShjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5KTtcbi1cdFx0c3RlYWwgJiM0Mzs9IHZjcHUtXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbCAtIGxhc3Rfc3RlYWw7XG4mIzQzO1x0XHR2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgPSBSRUFEX09OQ0UoY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSk7XG4mIzQzO1x0XHRzdGVhbCAmIzQzOz0gdmNwdS1cdTAwM2VsYXN0X3N0ZWFsIC0gbGFzdF9zdGVhbDtcbiBcdFx0V0FSTl9PTihwdXRfdXNlcihjcHVfdG9fbGU2NChzdGVhbCksIHN0ZWFsX3B0cikpO1xuIFx0fVxuIFxuQEAgLTExNSw3ICYjNDM7MTE1LDcgQEAgc3RhdGljIGludCBrdm1fc2JpX3N0YV9zdGVhbF90aW1lX3NldF9zaG1lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHJldHVybiBTQklfRVJSX0lOVkFMSURfQUREUkVTUztcbiBcbiBcdHZjcHUtXHUwMDNlYXJjaC5zdGEuc2htZW0gPSBzaG1lbTtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4mIzQzO1x0dmNwdS1cdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggNjgzYmI4YmY0M2E5NC4uZWJkZDg1MjZhZTEyNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC04NzIsNyAmIzQzOzg3Miw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdHN0cnVjdCB7XG4gXHRcdHU4IHByZWVtcHRlZDtcbiBcdFx0dTY0IG1zcl92YWw7XG4tXHRcdHU2NCBsYXN0X3N0ZWFsO1xuIFx0XHRzdHJ1Y3QgZ2ZuX3RvX2h2YV9jYWNoZSBjYWNoZTtcbiBcdH0gc3Q7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL0tjb25maWcgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZ1xuaW5kZXggNTM4ZWQxZTgwMzMyNi4uYjJhZWE4MDU4ODQxMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZ1xuQEAgLTQwLDYgJiM0Mzs0MCw3IEBAIGNvbmZpZyBLVk1fWDg2XG4gXHRzZWxlY3QgSEFWRV9LVk1fTVNJXG4gXHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxuIFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcbiYjNDM7XHRzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxuIFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXG4gXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXG4gXHRzZWxlY3QgS1ZNX1ZGSU9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbmluZGV4IDc5NDY4ZGRmZTQ3MzYuLjkyN2M4YjFlZDgzZDIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuY1xuQEAgLTIxMjksOSAmIzQzOzIxMjksOCBAQCBzdGF0aWMgdm9pZCByZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzbXBfd21iKCk7XG4gXG4gXHR1bnNhZmVfZ2V0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuLVx0c3RlYWwgJiM0Mzs9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkgLVxuLVx0XHR2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbDtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbiYjNDM7XHRzdGVhbCAmIzQzOz0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSAtIHZjcHUtXHUwMDNlbGFzdF9zdGVhbDtcbiYjNDM7XHR2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuIFx0dW5zYWZlX3B1dF91c2VyKHN0ZWFsLCBcdTAwMjZzdC1cdTAwM2VzdGVhbCwgb3V0KTtcbiBcbiBcdHZlcnNpb24gJiM0Mzs9IDE7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5pbmRleCAwM2JmYzkyODY0YjZlLi5mZjlkNDIzYjZhN2M3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbkBAIC0zOTgsNiAmIzQzOzM5OCwxMCBAQCBzdHJ1Y3Qga3ZtX3ZjcHUge1xuIFx0ICovXG4gXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpsYXN0X3VzZWRfc2xvdDtcbiBcdHU2NCBsYXN0X3VzZWRfc2xvdF9nZW47XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX1BWX1NURUFMX1RJTUVcbiYjNDM7XHR1NjQgbGFzdF9zdGVhbDtcbiYjNDM7I2VuZGlmXG4gfTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5pbmRleCA5NmJhYjcwMDJkMzllLi4xZGUxM2MwMDE3ZTQzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuQEAgLTE2NCw2ICYjNDM7MTY0LDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBpcnFfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gbW11X3N0cmVzc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSByc2VxX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHN0ZWFsX3RpbWVcbiYjNDM7VEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBzdGVhbF90aW1lX2NoYW5nZV9waWRcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHN5c3RlbV9jb3VudGVyX29mZnNldF90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBwcmVfZmF1bHRfbWVtb3J5X3Rlc3RcbiBcbkBAIC0yMDQsNiAmIzQzOzIwNSw3IEBAIFRFU1RfR0VOX1BST0dTX2FybTY0ICYjNDM7PSBndWVzdF9tZW1mZF90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfYXJtNjQgJiM0Mzs9IG1tdV9zdHJlc3NfdGVzdFxuIFRFU1RfR0VOX1BST0dTX2FybTY0ICYjNDM7PSByc2VxX3Rlc3RcbiBURVNUX0dFTl9QUk9HU19hcm02NCAmIzQzOz0gc3RlYWxfdGltZVxuJiM0MztURVNUX0dFTl9QUk9HU19hcm02NCAmIzQzOz0gc3RlYWxfdGltZV9jaGFuZ2VfcGlkXG4gXG4gVEVTVF9HRU5fUFJPR1NfczM5MCA9ICQoVEVTVF9HRU5fUFJPR1NfQ09NTU9OKVxuIFRFU1RfR0VOX1BST0dTX3MzOTAgJiM0Mzs9IHMzOTAvbWVtb3BcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xMmQ0OTI3ZDFjMDE3XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmNcbkBAIC0wLDAgJiM0MzsxLDIxNiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBWZXJpZnkgdGhhdCBLVk0gcmVzZXRzIHN0ZWFsLXRpbWUgYWNjb3VudGluZyB3aGVuIGEgdkNQVSBmZCBpcyBydW4gZnJvbVxuJiM0MzsgKiBhIGRpZmZlcmVudCBob3N0IFBJRC5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wYXJhLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3ZtX3V0aWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtwcm9jZXNzb3IuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBTVF9HUEFfQkFTRVx0XHQoMSBcdTAwM2NcdTAwM2MgMzApXG4mIzQzOyNkZWZpbmUgU1RfU0FORV9ERUxUQV9OU1x0KDFVTEwgXHUwMDNjXHUwMDNjIDYzKVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKnN0X2d2YTtcbiYjNDM7c3RhdGljIHU2NCBndWVzdF9zdG9sZW5fdGltZTtcbiYjNDM7c3RhdGljIHU2NCBtYWluX3N0ZWFsO1xuJiM0MztzdGF0aWMgdTY0IHRocmVhZF9zdGVhbDtcbiYjNDM7XG4mIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFNURUFMX1RJTUVfU0laRVx0KChzaXplb2Yoc3RydWN0IGt2bV9zdGVhbF90aW1lKSAmIzQzOyA2MykgXHUwMDI2IH42MylcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fc3RlYWxfdGltZSAqc3QgPSBzdF9ndmE7XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC1cdTAwM2VzdGVhbCkpO1xuJiM0MztcdEdVRVNUX1NZTkMoMCk7XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC1cdTAwM2VzdGVhbCkpO1xuJiM0MztcdEdVRVNUX1NZTkMoMSk7XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC1cdTAwM2VzdGVhbCkpO1xuJiM0MztcdEdVRVNUX0RPTkUoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgc3RlYWxfdGltZV9zdXBwb3J0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX0tWTV9TVEVBTF9USU1FKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc3RlYWxfdGltZV9lbmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0dmNwdV9zZXRfbXNyKHZjcHUsIE1TUl9LVk1fU1RFQUxfVElNRSxcbiYjNDM7XHRcdCAgICAgKHVsb25nKXN0X2d2YSB8IEtWTV9NU1JfRU5BQkxFRCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFNURUFMX1RJTUVfU0laRVx0KChzaXplb2Yoc3RydWN0IHN0X3RpbWUpICYjNDM7IDYzKSBcdTAwMjYgfjYzKVxuJiM0MztcbiYjNDM7I2RlZmluZSBQVl9USU1FX1NUXHQweGM1MDAwMDIxXG4mIzQzO1xuJiM0MztzdHJ1Y3Qgc3RfdGltZSB7XG4mIzQzO1x0dTMyIHJldjtcbiYjNDM7XHR1MzIgYXR0cjtcbiYjNDM7XHR1NjQgc3RfdGltZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhcm1fc21jY2NfcmVzIHJlcztcbiYjNDM7XHRzdHJ1Y3Qgc3RfdGltZSAqc3Q7XG4mIzQzO1xuJiM0MztcdGRvX3NtY2NjKFBWX1RJTUVfU1QsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIFx1MDAyNnJlcyk7XG4mIzQzO1x0R1VFU1RfQVNTRVJUX05FKHJlcy5hMCwgLTEpO1xuJiM0MztcdEdVRVNUX0FTU0VSVF9FUShyZXMuYTAsICh1bG9uZylzdF9ndmEpO1xuJiM0MztcbiYjNDM7XHRzdCA9IChzdHJ1Y3Qgc3RfdGltZSAqKXJlcy5hMDtcbiYjNDM7XHRXUklURV9PTkNFKGd1ZXN0X3N0b2xlbl90aW1lLCBSRUFEX09OQ0Uoc3QtXHUwMDNlc3RfdGltZSkpO1xuJiM0MztcdEdVRVNUX1NZTkMoMCk7XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC1cdTAwM2VzdF90aW1lKSk7XG4mIzQzO1x0R1VFU1RfU1lOQygxKTtcbiYjNDM7XG4mIzQzO1x0V1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LVx1MDAzZXN0X3RpbWUpKTtcbiYjNDM7XHRHVUVTVF9ET05FKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHN0ZWFsX3RpbWVfc3VwcG9ydGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgZGV2ID0ge1xuJiM0MztcdFx0Lmdyb3VwID0gS1ZNX0FSTV9WQ1BVX1BWVElNRV9DVFJMLFxuJiM0MztcdFx0LmF0dHIgPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0lQQSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gIV9fdmNwdV9pb2N0bCh2Y3B1LCBLVk1fSEFTX0RFVklDRV9BVFRSLCBcdTAwMjZkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2VuYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHR1NjQgc3RfaXBhID0gKHVsb25nKXN0X2d2YTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyIGRldiA9IHtcbiYjNDM7XHRcdC5ncm91cCA9IEtWTV9BUk1fVkNQVV9QVlRJTUVfQ1RSTCxcbiYjNDM7XHRcdC5hdHRyID0gS1ZNX0FSTV9WQ1BVX1BWVElNRV9JUEEsXG4mIzQzO1x0XHQuYWRkciA9ICh1NjQpXHUwMDI2c3RfaXBhLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHZjcHVfaW9jdGwodmNwdSwgS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgXHUwMDI2ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2Vsc2VcbiYjNDM7I2Vycm9yIFwmIzM0O3N0ZWFsX3RpbWVfY2hhbmdlX3BpZCBpcyBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBhcmNoaXRlY3R1cmVcJiMzNDtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdWNhbGwgdWM7XG4mIzQzO1xuJiM0MztcdHZjcHVfcnVuKHZjcHUpO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGdldF91Y2FsbCh2Y3B1LCBcdTAwMjZ1YykpIHtcbiYjNDM7XHRjYXNlIFVDQUxMX1NZTkM6XG4mIzQzO1x0Y2FzZSBVQ0FMTF9ET05FOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBVQ0FMTF9BQk9SVDpcbiYjNDM7XHRcdFJFUE9SVF9HVUVTVF9BU1NFUlQodWMpO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRURVNUX0FTU0VSVChmYWxzZSwgXCYjMzQ7VW5leHBlY3RlZCBleGl0OiAlc1wmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIGV4aXRfcmVhc29uX3N0cih2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbikpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKmRvX3N0ZWFsX3RpbWUodm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjIHRzLCBzdG9wO1xuJiM0MztcbiYjNDM7XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2dHMpO1xuJiM0MztcdHN0b3AgPSB0aW1lc3BlY19hZGRfbnModHMsIE1JTl9SVU5fREVMQVlfTlMpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAodGltZXNwZWNfdG9fbnModGltZXNwZWNfc3ViKHRzLCBzdG9wKSkgXHUwMDNjIDApXG4mIzQzO1x0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2dHMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKnZjcHVfdGhyZWFkKHZvaWQgKmFyZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGFyZztcbiYjNDM7XG4mIzQzO1x0cnVuX3ZjcHUodmNwdSk7XG4mIzQzO1x0c3luY19nbG9iYWxfZnJvbV9ndWVzdCh2Y3B1LVx1MDAzZXZtLCBndWVzdF9zdG9sZW5fdGltZSk7XG4mIzQzO1x0dGhyZWFkX3N0ZWFsID0gZ3Vlc3Rfc3RvbGVuX3RpbWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuJiM0MztcdHN0cnVjdCBrdm1fdm0gKnZtO1xuJiM0MztcdHB0aHJlYWRfYXR0cl90IGF0dHI7XG4mIzQzO1x0cHRocmVhZF90IHRocmVhZDtcbiYjNDM7XHRjcHVfc2V0X3QgY3B1c2V0O1xuJiM0MztcdGxvbmcgcnVuX2RlbGF5O1xuJiM0MztcdGxvbmcgcnVuX2RlbGF5X2RlbHRhO1xuJiM0MztcbiYjNDM7XHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuJiM0MztcdGtzZnRfc2V0X3BsYW4oMSk7XG4mIzQzO1xuJiM0MztcdENQVV9aRVJPKFx1MDAyNmNwdXNldCk7XG4mIzQzO1x0Q1BVX1NFVCgwLCBcdTAwMjZjcHVzZXQpO1xuJiM0MztcdHB0aHJlYWRfYXR0cl9pbml0KFx1MDAyNmF0dHIpO1xuJiM0MztcdHB0aHJlYWRfYXR0cl9zZXRhZmZpbml0eV9ucChcdTAwMjZhdHRyLCBzaXplb2YoY3B1c2V0KSwgXHUwMDI2Y3B1c2V0KTtcbiYjNDM7XHRwdGhyZWFkX3NldGFmZmluaXR5X25wKHB0aHJlYWRfc2VsZigpLCBzaXplb2YoY3B1c2V0KSwgXHUwMDI2Y3B1c2V0KTtcbiYjNDM7XG4mIzQzO1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBndWVzdF9jb2RlKTtcbiYjNDM7XHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLFxuJiM0MztcdFx0XHRcdCAgICBTVF9HUEFfQkFTRSwgMSwgMSwgMCk7XG4mIzQzO1x0dmlydF9tYXAodm0sIFNUX0dQQV9CQVNFLCBTVF9HUEFfQkFTRSwgMSk7XG4mIzQzO1xuJiM0MztcdHN0X2d2YSA9ICh2b2lkICopU1RfR1BBX0JBU0U7XG4mIzQzO1x0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHN0X2d2YSk7XG4mIzQzO1x0bWVtc2V0KGFkZHJfZ3ZhMmh2YSh2bSwgU1RfR1BBX0JBU0UpLCAwLCBTVEVBTF9USU1FX1NJWkUpO1xuJiM0MztcbiYjNDM7XHRURVNUX1JFUVVJUkUoc3RlYWxfdGltZV9zdXBwb3J0ZWQodmNwdSkpO1xuJiM0MztcbiYjNDM7XHRzdGVhbF90aW1lX2VuYWJsZSh2Y3B1KTtcbiYjNDM7XHRydW5fdmNwdSh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0cnVuX2RlbGF5ID0gZ2V0X3J1bl9kZWxheSgpO1xuJiM0MztcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgXHUwMDI2YXR0ciwgZG9fc3RlYWxfdGltZSwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChnZXRfcnVuX2RlbGF5KCkgLSBydW5fZGVsYXkgXHUwMDNjIE1JTl9SVU5fREVMQVlfTlMpXG4mIzQzO1x0XHRzY2hlZF95aWVsZCgpO1xuJiM0MztcbiYjNDM7XHRwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTtcbiYjNDM7XHRydW5fZGVsYXlfZGVsdGEgPSBnZXRfcnVuX2RlbGF5KCkgLSBydW5fZGVsYXk7XG4mIzQzO1x0VEVTVF9BU1NFUlQocnVuX2RlbGF5X2RlbHRhIFx1MDAzZT0gTUlOX1JVTl9ERUxBWV9OUyxcbiYjNDM7XHRcdCAgICBcJiMzNDtFeHBlY3RlZCBydW5fZGVsYXkgXHUwMDNlPSAlbGQsIGdvdCAlbGRcJiMzNDssXG4mIzQzO1x0XHQgICAgTUlOX1JVTl9ERUxBWV9OUywgcnVuX2RlbGF5X2RlbHRhKTtcbiYjNDM7XG4mIzQzO1x0cnVuX3ZjcHUodmNwdSk7XG4mIzQzO1x0c3luY19nbG9iYWxfZnJvbV9ndWVzdCh2bSwgZ3Vlc3Rfc3RvbGVuX3RpbWUpO1xuJiM0MztcdG1haW5fc3RlYWwgPSBndWVzdF9zdG9sZW5fdGltZTtcbiYjNDM7XG4mIzQzO1x0VEVTVF9BU1NFUlQobWFpbl9zdGVhbCBcdTAwM2U9IE1JTl9SVU5fREVMQVlfTlMsXG4mIzQzO1x0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgc3RlYWwgdGltZSBcdTAwM2U9ICVsZCwgZ290ICVcJiMzNDtQUkl1NjQsXG4mIzQzO1x0XHQgICAgTUlOX1JVTl9ERUxBWV9OUywgbWFpbl9zdGVhbCk7XG4mIzQzO1xuJiM0MztcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHUpO1xuJiM0MztcdHB0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRURVNUX0FTU0VSVCh0aHJlYWRfc3RlYWwgXHUwMDNlPSBtYWluX3N0ZWFsIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHRocmVhZF9zdGVhbCAtIG1haW5fc3RlYWwgXHUwMDNjIFNUX1NBTkVfREVMVEFfTlMsXG4mIzQzO1x0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgc2FuZSBzdGVhbCBhZnRlciB2Q1BVIHBpZCBjaGFuZ2U6IFwmIzM0O1xuJiM0MztcdFx0ICAgIFwmIzM0O29sZD0lXCYjMzQ7UFJJdTY0XCYjMzQ7LCBuZXc9JVwmIzM0O1BSSXU2NCxcbiYjNDM7XHRcdCAgICBtYWluX3N0ZWFsLCB0aHJlYWRfc3RlYWwpO1xuJiM0MztcbiYjNDM7XHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXCYjMzQ7c3RlYWwgdGltZSByZW1haW5zIHNhbmUgYWNyb3NzIHZDUFUgcGlkIGNoYW5nZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHB0aHJlYWRfYXR0cl9kZXN0cm95KFx1MDAyNmF0dHIpO1xuJiM0MztcdGt2bV92bV9mcmVlKHZtKTtcbiYjNDM7XHRrc2Z0X2ZpbmlzaGVkKCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9LY29uZmlnIGIvdmlydC9rdm0vS2NvbmZpZ1xuaW5kZXggYzNjMGVlMjUzZmM3Ny4uZjQyYTNhMGZjNWJhYiAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL0tjb25maWdcbkBAIC04Miw2ICYjNDM7ODIsOSBAQCBjb25maWcgSEFWRV9LVk1fSVJRX0JZUEFTU1xuIGNvbmZpZyBIQVZFX0tWTV9WQ1BVX1JVTl9QSURfQ0hBTkdFXG4gICAgICAgIGJvb2xcbiBcbiYjNDM7Y29uZmlnIEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcbiYjNDM7ICAgICAgIGJvb2xcbiYjNDM7XG4gY29uZmlnIEhBVkVfS1ZNX05PX1BPTExcbiAgICAgICAgYm9vbFxuIFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5pbmRleCA2NWViMjZhMDUyMGQ4Li43ODRmMGQ5NDViNDU2IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTQ0NzgsNiAmIzQzOzQ0NzgsMTAgQEAgc3RhdGljIGxvbmcga3ZtX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdFx0aWYgKHIpXG4gXHRcdFx0XHRicmVhaztcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FXG4mIzQzO1x0XHRcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdFx0XHRuZXdwaWQgPSBnZXRfdGFza19waWQoY3VycmVudCwgUElEVFlQRV9QSUQpO1xuIFx0XHRcdHdyaXRlX2xvY2soXHUwMDI2dmNwdS1cdTAwM2VwaWRfbG9jayk7XG4gXHRcdFx0dmNwdS1cdTAwM2VwaWQgPSBuZXdwaWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVjb3JkX3N0ZWFsX3RpbWUmIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc29saWRhdGVzIHN0ZWFsLXRpbWUgYWNjb3VudGluZyBhY3Jvc3MgYXJjaGl0ZWN0dXJlcyBieSBtb3ZpbmcgYGxhc3Rfc3RlYWxgIHRvIGdlbmVyaWMgYHN0cnVjdCBrdm1fdmNwdWAgYW5kIHJlc2V0dGluZyBpdCBpbiBga3ZtX3ZjcHVfaW9jdGwoKWAgd2hlbiBhIHZDUFUgdGhyZWFkIGNoYW5nZXMuIEl0IG1vZGlmaWVzIGV4ZWN1dGFibGUgY29kZSBpbiBjb3JlIEtWTSAoYGt2bV92Y3B1X2lvY3RsYCkgYW5kIHg4NiBLVk0gKGByZWNvcmRfc3RlYWxfdGltZWApLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGluIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjFmMzhkODRlMjIxYWI3ZjliZTQ1MjdlYjU2MTYzNzAwYmYxNzY2OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDU6MDM6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggMjdmZTBjZDViMmQ3YS4uMzZjYjdkZWU5ODhjYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtOTM3LDcgJiM0Mzs5MzcsNiBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7CiAKIAkvKiBHdWVzdCBQViBzdGF0ZSAqLwogCXN0cnVjdCB7Ci0JCXU2NCBsYXN0X3N0ZWFsOwogCQlncGFfdCBiYXNlOwogCX0gc3RlYWw7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL0tjb25maWcgYi9hcmNoL2FybTY0L2t2bS9LY29uZmlnCmluZGV4IDQ0OTE1NGY5YTQ4NTIuLmY1ODU1YmZjNjgxYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vS2NvbmZpZwpAQCAtMzQsNiAmIzQzOzM0LDcgQEAgbWVudWNvbmZpZyBLVk0KIAlzZWxlY3QgSEFWRV9LVk1fSVJRX0JZUEFTUwogCXNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU0KIAlzZWxlY3QgSEFWRV9LVk1fVkNQVV9SVU5fUElEX0NIQU5HRQomIzQzOwlzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRQogCXNlbGVjdCBTQ0hFRF9JTkZPCiAJc2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTCiAJc2VsZWN0IEtWTV9HVUVTVF9NRU1GRApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcHZ0aW1lLmMgYi9hcmNoL2FybTY0L2t2bS9wdnRpbWUuYwppbmRleCA0Y2VhYmFhNGMzMGJkLi5hNjdkOTM4NDVkNzk0IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9wdnRpbWUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9wdnRpbWUuYwpAQCAtMTQsNyAmIzQzOzE0LDcgQEAgdm9pZCBrdm1fdXBkYXRlX3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAJdTY0IGJhc2UgPSB2Y3B1LSZndDthcmNoLnN0ZWFsLmJhc2U7Ci0JdTY0IGxhc3Rfc3RlYWwgPSB2Y3B1LSZndDthcmNoLnN0ZWFsLmxhc3Rfc3RlYWw7CiYjNDM7CXU2NCBsYXN0X3N0ZWFsID0gdmNwdS0mZ3Q7bGFzdF9zdGVhbDsKIAl1NjQgb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHB2Y2xvY2tfdmNwdV9zdG9sZW5fdGltZSwgc3RvbGVuX3RpbWUpOwogCXU2NCBzdGVhbCA9IDA7CiAJaW50IGlkeDsKQEAgLTI1LDggJiM0MzsyNSw4IEBAIHZvaWQga3ZtX3VwZGF0ZV9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWR4ID0gc3JjdV9yZWFkX2xvY2soJmFtcDtrdm0tJmd0O3NyY3UpOwogCWlmICgha3ZtX2dldF9ndWVzdChrdm0sIGJhc2UgJiM0Mzsgb2Zmc2V0LCBzdGVhbCkpIHsKIAkJc3RlYWwgPSBsZTY0X3RvX2NwdShzdGVhbCk7Ci0JCXZjcHUtJmd0O2FyY2guc3RlYWwubGFzdF9zdGVhbCA9IFJFQURfT05DRShjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheSk7Ci0JCXN0ZWFsICYjNDM7PSB2Y3B1LSZndDthcmNoLnN0ZWFsLmxhc3Rfc3RlYWwgLSBsYXN0X3N0ZWFsOwomIzQzOwkJdmNwdS0mZ3Q7bGFzdF9zdGVhbCA9IFJFQURfT05DRShjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheSk7CiYjNDM7CQlzdGVhbCAmIzQzOz0gdmNwdS0mZ3Q7bGFzdF9zdGVhbCAtIGxhc3Rfc3RlYWw7CiAJCWt2bV9wdXRfZ3Vlc3Qoa3ZtLCBiYXNlICYjNDM7IG9mZnNldCwgY3B1X3RvX2xlNjQoc3RlYWwpKTsKIAl9CiAJc3JjdV9yZWFkX3VubG9jaygmYW1wO2t2bS0mZ3Q7c3JjdSwgaWR4KTsKQEAgLTYxLDcgJiM0Mzs2MSw3IEBAIGdwYV90IGt2bV9pbml0X3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkgKiBTdGFydCBjb3VudGluZyBzdG9sZW4gdGltZSBmcm9tIHRoZSB0aW1lIHRoZSBndWVzdCByZXF1ZXN0cwogCSAqIHRoZSBmZWF0dXJlIGVuYWJsZWQuCiAJICovCi0JdmNwdS0mZ3Q7YXJjaC5zdGVhbC5sYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7CiYjNDM7CXZjcHUtJmd0O2xhc3Rfc3RlYWwgPSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheTsKIAlrdm1fd3JpdGVfZ3Vlc3RfbG9jayhrdm0sIGJhc2UsICZhbXA7aW5pdF92YWx1ZXMsIHNpemVvZihpbml0X3ZhbHVlcykpOwogCiAJcmV0dXJuIGJhc2U7CmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAyM2NmYmVjZWJiZDc5Li4xNDUxNGEyNWIyNjEzIDEwMDY0NAotLS0gYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTI1Myw3ICYjNDM7MjUzLDYgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2ggewogCS8qIHBhcmF2aXJ0IHN0ZWFsIHRpbWUgKi8KIAlzdHJ1Y3QgewogCQl1NjQgZ3Vlc3RfYWRkcjsKLQkJdTY0IGxhc3Rfc3RlYWw7CiAJCXN0cnVjdCBnZm5fdG9faHZhX2NhY2hlIGNhY2hlOwogCQl1OCAgcHJlZW1wdGVkOwogCX0gc3Q7CmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnCmluZGV4IDE1ZGEyZDg4YzBjMTAuLjQ5OTZlYzljMDdmOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnCkBAIC0yNiw2ICYjNDM7MjYsNyBAQCBjb25maWcgS1ZNCiAJc2VsZWN0IEhBVkVfS1ZNX01TSQogCXNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU0KIAlzZWxlY3QgS1ZNX0NPTU1PTgomIzQzOwlzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRQogCXNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1QKIAlzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkcKIAlzZWxlY3QgS1ZNX01NSU8KZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jCmluZGV4IDRmNThlNmUyY2Y4NjYuLjU2YWU2YjE4ZjhjMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuYwpAQCAtNzczLDcgJiM0Mzs3NzMsNyBAQCBzdGF0aWMgbG9uZyBrdm1fc2F2ZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQlpZiAoIShkYXRhICZhbXA7IEtWTV9TVEVBTF9QSFlTX1ZBTElEKSkKIAkJCXJldHVybiAwOwogCi0JCXZjcHUtJmd0O2FyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwomIzQzOwkJdmNwdS0mZ3Q7bGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwogCQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfU1RFQUxfVVBEQVRFLCB2Y3B1KTsKIAkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jCmluZGV4IGVkOWUwOTJjOTdiYTcuLjcyOGQyOWViYThlMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYwpAQCAtMTg3LDggJiM0MzsxODcsOCBAQCBzdGF0aWMgdm9pZCBrdm1fdXBkYXRlX3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlzbXBfd21iKCk7CiAKIAl1bnNhZmVfZ2V0X3VzZXIoc3RlYWwsICZhbXA7c3QtJmd0O3N0ZWFsLCBvdXQpOwotCXN0ZWFsICYjNDM7PSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheSAtIHZjcHUtJmd0O2FyY2guc3QubGFzdF9zdGVhbDsKLQl2Y3B1LSZndDthcmNoLnN0Lmxhc3Rfc3RlYWwgPSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheTsKJiM0MzsJc3RlYWwgJiM0Mzs9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5IC0gdmNwdS0mZ3Q7bGFzdF9zdGVhbDsKJiM0MzsJdmNwdS0mZ3Q7bGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwogCXVuc2FmZV9wdXRfdXNlcihzdGVhbCwgJmFtcDtzdC0mZ3Q7c3RlYWwsIG91dCk7CiAKIAlzbXBfd21iKCk7CkBAIC0xMjA1LDcgJiM0MzsxMjA1LDcgQEAgc3RhdGljIGludCBrdm1fbG9vbmdhcmNoX3B2dGltZV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAKIAlpZiAoIXJldCkgewogCQl2Y3B1LSZndDthcmNoLnN0Lmd1ZXN0X2FkZHIgPSBncGE7Ci0JCXZjcHUtJmd0O2FyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwomIzQzOwkJdmNwdS0mZ3Q7bGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwogCQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfU1RFQUxfVVBEQVRFLCB2Y3B1KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBhMzA2MDA1NzkyMzFiLi4zMDU4NzUzMDFjMDQyIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0yNzMsNyAmIzQzOzI3Myw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHsKIAkvKiBTQkkgc3RlYWwtdGltZSBhY2NvdW50aW5nICovCiAJc3RydWN0IHsKIAkJZ3BhX3Qgc2htZW07Ci0JCXU2NCBsYXN0X3N0ZWFsOwogCX0gc3RhOwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWcKaW5kZXggZWMyY2VlMGEzOWUwMS4uMWZmMDdhOTA0YTAyNyAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnCkBAIC0yNiw2ICYjNDM7MjYsNyBAQCBjb25maWcgS1ZNCiAJc2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTQogCXNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX0FDUV9SRUwKIAlzZWxlY3QgS1ZNX0NPTU1PTgomIzQzOwlzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRQogCXNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1QKIAlzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkcKIAlzZWxlY3QgS1ZNX01NSU8KZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3N0YS5jIGIvYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfc3RhLmMKaW5kZXggNjBlNTAyOTZhMDA4NS4uOWE3N2QzYmRlN2M3MiAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfc3RhLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfc3RhLmMKQEAgLTE5LDEzICYjNDM7MTksMTMgQEAKIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl92Y3B1X3NiaV9zdGFfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXZjcHUtJmd0O2FyY2guc3RhLnNobWVtID0gSU5WQUxJRF9HUEE7Ci0JdmNwdS0mZ3Q7YXJjaC5zdGEubGFzdF9zdGVhbCA9IDA7CiYjNDM7CXZjcHUtJmd0O2xhc3Rfc3RlYWwgPSAwOwogfQogCiB2b2lkIGt2bV9yaXNjdl92Y3B1X3JlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlncGFfdCBzaG1lbSA9IHZjcHUtJmd0O2FyY2guc3RhLnNobWVtOwotCXU2NCBsYXN0X3N0ZWFsID0gdmNwdS0mZ3Q7YXJjaC5zdGEubGFzdF9zdGVhbDsKJiM0MzsJdTY0IGxhc3Rfc3RlYWwgPSB2Y3B1LSZndDtsYXN0X3N0ZWFsOwogCV9fbGUzMiBfX3VzZXIgKnNlcXVlbmNlX3B0cjsKIAlfX2xlNjQgX191c2VyICpzdGVhbF9wdHI7CiAJX19sZTMyIHNlcXVlbmNlX2xlOwpAQCAtNjcsOCAmIzQzOzY3LDggQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9yZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIAlpZiAoIVdBUk5fT04oZ2V0X3VzZXIoc3RlYWxfbGUsIHN0ZWFsX3B0cikpKSB7CiAJCXN0ZWFsID0gbGU2NF90b19jcHUoc3RlYWxfbGUpOwotCQl2Y3B1LSZndDthcmNoLnN0YS5sYXN0X3N0ZWFsID0gUkVBRF9PTkNFKGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5KTsKLQkJc3RlYWwgJiM0Mzs9IHZjcHUtJmd0O2FyY2guc3RhLmxhc3Rfc3RlYWwgLSBsYXN0X3N0ZWFsOwomIzQzOwkJdmNwdS0mZ3Q7bGFzdF9zdGVhbCA9IFJFQURfT05DRShjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheSk7CiYjNDM7CQlzdGVhbCAmIzQzOz0gdmNwdS0mZ3Q7bGFzdF9zdGVhbCAtIGxhc3Rfc3RlYWw7CiAJCVdBUk5fT04ocHV0X3VzZXIoY3B1X3RvX2xlNjQoc3RlYWwpLCBzdGVhbF9wdHIpKTsKIAl9CiAKQEAgLTExNSw3ICYjNDM7MTE1LDcgQEAgc3RhdGljIGludCBrdm1fc2JpX3N0YV9zdGVhbF90aW1lX3NldF9zaG1lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCXJldHVybiBTQklfRVJSX0lOVkFMSURfQUREUkVTUzsKIAogCXZjcHUtJmd0O2FyY2guc3RhLnNobWVtID0gc2htZW07Ci0JdmNwdS0mZ3Q7YXJjaC5zdGEubGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwomIzQzOwl2Y3B1LSZndDtsYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDY4M2JiOGJmNDNhOTQuLmViZGQ4NTI2YWUxMjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtODcyLDcgJiM0Mzs4NzIsNiBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7CiAJc3RydWN0IHsKIAkJdTggcHJlZW1wdGVkOwogCQl1NjQgbXNyX3ZhbDsKLQkJdTY0IGxhc3Rfc3RlYWw7CiAJCXN0cnVjdCBnZm5fdG9faHZhX2NhY2hlIGNhY2hlOwogCX0gc3Q7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9LY29uZmlnIGIvYXJjaC94ODYva3ZtL0tjb25maWcKaW5kZXggNTM4ZWQxZTgwMzMyNi4uYjJhZWE4MDU4ODQxMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL0tjb25maWcKQEAgLTQwLDYgJiM0Mzs0MCw3IEBAIGNvbmZpZyBLVk1fWDg2CiAJc2VsZWN0IEhBVkVfS1ZNX01TSQogCXNlbGVjdCBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUCiAJc2VsZWN0IEhBVkVfS1ZNX05PX1BPTEwKJiM0MzsJc2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUUKIAlzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUksKIAlzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUCiAJc2VsZWN0IEtWTV9WRklPCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggNzk0NjhkZGZlNDczNi4uOTI3YzhiMWVkODNkMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtMjEyOSw5ICYjNDM7MjEyOSw4IEBAIHN0YXRpYyB2b2lkIHJlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlzbXBfd21iKCk7CiAKIAl1bnNhZmVfZ2V0X3VzZXIoc3RlYWwsICZhbXA7c3QtJmd0O3N0ZWFsLCBvdXQpOwotCXN0ZWFsICYjNDM7PSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheSAtCi0JCXZjcHUtJmd0O2FyY2guc3QubGFzdF9zdGVhbDsKLQl2Y3B1LSZndDthcmNoLnN0Lmxhc3Rfc3RlYWwgPSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheTsKJiM0MzsJc3RlYWwgJiM0Mzs9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5IC0gdmNwdS0mZ3Q7bGFzdF9zdGVhbDsKJiM0MzsJdmNwdS0mZ3Q7bGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwogCXVuc2FmZV9wdXRfdXNlcihzdGVhbCwgJmFtcDtzdC0mZ3Q7c3RlYWwsIG91dCk7CiAKIAl2ZXJzaW9uICYjNDM7PSAxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IDAzYmZjOTI4NjRiNmUuLmZmOWQ0MjNiNmE3YzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTM5OCw2ICYjNDM7Mzk4LDEwIEBAIHN0cnVjdCBrdm1fdmNwdSB7CiAJICovCiAJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbGFzdF91c2VkX3Nsb3Q7CiAJdTY0IGxhc3RfdXNlZF9zbG90X2dlbjsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX1BWX1NURUFMX1RJTUUKJiM0MzsJdTY0IGxhc3Rfc3RlYWw7CiYjNDM7I2VuZGlmCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KaW5kZXggOTZiYWI3MDAyZDM5ZS4uMWRlMTNjMDAxN2U0MyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCkBAIC0xNjQsNiAmIzQzOzE2NCw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gaXJxX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gbW11X3N0cmVzc190ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHJzZXFfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBzdGVhbF90aW1lCiYjNDM7VEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBzdGVhbF90aW1lX2NoYW5nZV9waWQKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gc3lzdGVtX2NvdW50ZXJfb2Zmc2V0X3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gcHJlX2ZhdWx0X21lbW9yeV90ZXN0CiAKQEAgLTIwNCw2ICYjNDM7MjA1LDcgQEAgVEVTVF9HRU5fUFJPR1NfYXJtNjQgJiM0Mzs9IGd1ZXN0X21lbWZkX3Rlc3QKIFRFU1RfR0VOX1BST0dTX2FybTY0ICYjNDM7PSBtbXVfc3RyZXNzX3Rlc3QKIFRFU1RfR0VOX1BST0dTX2FybTY0ICYjNDM7PSByc2VxX3Rlc3QKIFRFU1RfR0VOX1BST0dTX2FybTY0ICYjNDM7PSBzdGVhbF90aW1lCiYjNDM7VEVTVF9HRU5fUFJPR1NfYXJtNjQgJiM0Mzs9IHN0ZWFsX3RpbWVfY2hhbmdlX3BpZAogCiBURVNUX0dFTl9QUk9HU19zMzkwID0gJChURVNUX0dFTl9QUk9HU19DT01NT04pCiBURVNUX0dFTl9QUk9HU19zMzkwICYjNDM7PSBzMzkwL21lbW9wCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMTJkNDkyN2QxYzAxNwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lX2NoYW5nZV9waWQuYwpAQCAtMCwwICYjNDM7MSwyMTYgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogVmVyaWZ5IHRoYXQgS1ZNIHJlc2V0cyBzdGVhbC10aW1lIGFjY291bnRpbmcgd2hlbiBhIHZDUFUgZmQgaXMgcnVuIGZyb20KJiM0MzsgKiBhIGRpZmZlcmVudCBob3N0IFBJRC4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20va3ZtX3BhcmEuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7cHJvY2Vzc29yLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgU1RfR1BBX0JBU0UJCSgxICZsdDsmbHQ7IDMwKQomIzQzOyNkZWZpbmUgU1RfU0FORV9ERUxUQV9OUwkoMVVMTCAmbHQ7Jmx0OyA2MykKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqc3RfZ3ZhOwomIzQzO3N0YXRpYyB1NjQgZ3Vlc3Rfc3RvbGVuX3RpbWU7CiYjNDM7c3RhdGljIHU2NCBtYWluX3N0ZWFsOwomIzQzO3N0YXRpYyB1NjQgdGhyZWFkX3N0ZWFsOwomIzQzOwomIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pCiYjNDM7CiYjNDM7I2RlZmluZSBTVEVBTF9USU1FX1NJWkUJKChzaXplb2Yoc3RydWN0IGt2bV9zdGVhbF90aW1lKSAmIzQzOyA2MykgJmFtcDsgfjYzKQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fc3RlYWxfdGltZSAqc3QgPSBzdF9ndmE7CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC0mZ3Q7c3RlYWwpKTsKJiM0MzsJR1VFU1RfU1lOQygwKTsKJiM0MzsKJiM0MzsJV1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LSZndDtzdGVhbCkpOwomIzQzOwlHVUVTVF9TWU5DKDEpOwomIzQzOwomIzQzOwlXUklURV9PTkNFKGd1ZXN0X3N0b2xlbl90aW1lLCBSRUFEX09OQ0Uoc3QtJmd0O3N0ZWFsKSk7CiYjNDM7CUdVRVNUX0RPTkUoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgc3RlYWxfdGltZV9zdXBwb3J0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJcmV0dXJuIGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX0tWTV9TVEVBTF9USU1FKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc3RlYWxfdGltZV9lbmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJdmNwdV9zZXRfbXNyKHZjcHUsIE1TUl9LVk1fU1RFQUxfVElNRSwKJiM0MzsJCSAgICAgKHVsb25nKXN0X2d2YSB8IEtWTV9NU1JfRU5BQkxFRCk7CiYjNDM7fQomIzQzOwomIzQzOyNlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pCiYjNDM7CiYjNDM7I2RlZmluZSBTVEVBTF9USU1FX1NJWkUJKChzaXplb2Yoc3RydWN0IHN0X3RpbWUpICYjNDM7IDYzKSAmYW1wOyB+NjMpCiYjNDM7CiYjNDM7I2RlZmluZSBQVl9USU1FX1NUCTB4YzUwMDAwMjEKJiM0MzsKJiM0MztzdHJ1Y3Qgc3RfdGltZSB7CiYjNDM7CXUzMiByZXY7CiYjNDM7CXUzMiBhdHRyOwomIzQzOwl1NjQgc3RfdGltZTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhcm1fc21jY2NfcmVzIHJlczsKJiM0MzsJc3RydWN0IHN0X3RpbWUgKnN0OwomIzQzOwomIzQzOwlkb19zbWNjYyhQVl9USU1FX1NULCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAmYW1wO3Jlcyk7CiYjNDM7CUdVRVNUX0FTU0VSVF9ORShyZXMuYTAsIC0xKTsKJiM0MzsJR1VFU1RfQVNTRVJUX0VRKHJlcy5hMCwgKHVsb25nKXN0X2d2YSk7CiYjNDM7CiYjNDM7CXN0ID0gKHN0cnVjdCBzdF90aW1lICopcmVzLmEwOwomIzQzOwlXUklURV9PTkNFKGd1ZXN0X3N0b2xlbl90aW1lLCBSRUFEX09OQ0Uoc3QtJmd0O3N0X3RpbWUpKTsKJiM0MzsJR1VFU1RfU1lOQygwKTsKJiM0MzsKJiM0MzsJV1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LSZndDtzdF90aW1lKSk7CiYjNDM7CUdVRVNUX1NZTkMoMSk7CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC0mZ3Q7c3RfdGltZSkpOwomIzQzOwlHVUVTVF9ET05FKCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHN0ZWFsX3RpbWVfc3VwcG9ydGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgZGV2ID0gewomIzQzOwkJLmdyb3VwID0gS1ZNX0FSTV9WQ1BVX1BWVElNRV9DVFJMLAomIzQzOwkJLmF0dHIgPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0lQQSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuICFfX3ZjcHVfaW9jdGwodmNwdSwgS1ZNX0hBU19ERVZJQ0VfQVRUUiwgJmFtcDtkZXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2VuYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwl1NjQgc3RfaXBhID0gKHVsb25nKXN0X2d2YTsKJiM0MzsJc3RydWN0IGt2bV9kZXZpY2VfYXR0ciBkZXYgPSB7CiYjNDM7CQkuZ3JvdXAgPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0NUUkwsCiYjNDM7CQkuYXR0ciA9IEtWTV9BUk1fVkNQVV9QVlRJTUVfSVBBLAomIzQzOwkJLmFkZHIgPSAodTY0KSZhbXA7c3RfaXBhLAomIzQzOwl9OwomIzQzOwomIzQzOwl2Y3B1X2lvY3RsKHZjcHUsIEtWTV9TRVRfREVWSUNFX0FUVFIsICZhbXA7ZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2Vsc2UKJiM0MzsjZXJyb3IgJiMzNDtzdGVhbF90aW1lX2NoYW5nZV9waWQgaXMgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgYXJjaGl0ZWN0dXJlJiMzNDsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdWNhbGwgdWM7CiYjNDM7CiYjNDM7CXZjcHVfcnVuKHZjcHUpOwomIzQzOwomIzQzOwlzd2l0Y2ggKGdldF91Y2FsbCh2Y3B1LCAmYW1wO3VjKSkgewomIzQzOwljYXNlIFVDQUxMX1NZTkM6CiYjNDM7CWNhc2UgVUNBTExfRE9ORToKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFVDQUxMX0FCT1JUOgomIzQzOwkJUkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlURVNUX0FTU0VSVChmYWxzZSwgJiMzNDtVbmV4cGVjdGVkIGV4aXQ6ICVzJiMzNDssCiYjNDM7CQkJICAgIGV4aXRfcmVhc29uX3N0cih2Y3B1LSZndDtydW4tJmd0O2V4aXRfcmVhc29uKSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgKmRvX3N0ZWFsX3RpbWUodm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJc3RydWN0IHRpbWVzcGVjIHRzLCBzdG9wOwomIzQzOwomIzQzOwljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJmFtcDt0cyk7CiYjNDM7CXN0b3AgPSB0aW1lc3BlY19hZGRfbnModHMsIE1JTl9SVU5fREVMQVlfTlMpOwomIzQzOwomIzQzOwl3aGlsZSAodGltZXNwZWNfdG9fbnModGltZXNwZWNfc3ViKHRzLCBzdG9wKSkgJmx0OyAwKQomIzQzOwkJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZhbXA7dHMpOwomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgKnZjcHVfdGhyZWFkKHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGFyZzsKJiM0MzsKJiM0MzsJcnVuX3ZjcHUodmNwdSk7CiYjNDM7CXN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3QodmNwdS0mZ3Q7dm0sIGd1ZXN0X3N0b2xlbl90aW1lKTsKJiM0MzsJdGhyZWFkX3N0ZWFsID0gZ3Vlc3Rfc3RvbGVuX3RpbWU7CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJcHRocmVhZF9hdHRyX3QgYXR0cjsKJiM0MzsJcHRocmVhZF90IHRocmVhZDsKJiM0MzsJY3B1X3NldF90IGNwdXNldDsKJiM0MzsJbG9uZyBydW5fZGVsYXk7CiYjNDM7CWxvbmcgcnVuX2RlbGF5X2RlbHRhOwomIzQzOwomIzQzOwlrc2Z0X3ByaW50X2hlYWRlcigpOwomIzQzOwlrc2Z0X3NldF9wbGFuKDEpOwomIzQzOwomIzQzOwlDUFVfWkVSTygmYW1wO2NwdXNldCk7CiYjNDM7CUNQVV9TRVQoMCwgJmFtcDtjcHVzZXQpOwomIzQzOwlwdGhyZWFkX2F0dHJfaW5pdCgmYW1wO2F0dHIpOwomIzQzOwlwdGhyZWFkX2F0dHJfc2V0YWZmaW5pdHlfbnAoJmFtcDthdHRyLCBzaXplb2YoY3B1c2V0KSwgJmFtcDtjcHVzZXQpOwomIzQzOwlwdGhyZWFkX3NldGFmZmluaXR5X25wKHB0aHJlYWRfc2VsZigpLCBzaXplb2YoY3B1c2V0KSwgJmFtcDtjcHVzZXQpOwomIzQzOwomIzQzOwl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgZ3Vlc3RfY29kZSk7CiYjNDM7CXZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsCiYjNDM7CQkJCSAgICBTVF9HUEFfQkFTRSwgMSwgMSwgMCk7CiYjNDM7CXZpcnRfbWFwKHZtLCBTVF9HUEFfQkFTRSwgU1RfR1BBX0JBU0UsIDEpOwomIzQzOwomIzQzOwlzdF9ndmEgPSAodm9pZCAqKVNUX0dQQV9CQVNFOwomIzQzOwlzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgc3RfZ3ZhKTsKJiM0MzsJbWVtc2V0KGFkZHJfZ3ZhMmh2YSh2bSwgU1RfR1BBX0JBU0UpLCAwLCBTVEVBTF9USU1FX1NJWkUpOwomIzQzOwomIzQzOwlURVNUX1JFUVVJUkUoc3RlYWxfdGltZV9zdXBwb3J0ZWQodmNwdSkpOwomIzQzOwomIzQzOwlzdGVhbF90aW1lX2VuYWJsZSh2Y3B1KTsKJiM0MzsJcnVuX3ZjcHUodmNwdSk7CiYjNDM7CiYjNDM7CXJ1bl9kZWxheSA9IGdldF9ydW5fZGVsYXkoKTsKJiM0MzsJcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWQsICZhbXA7YXR0ciwgZG9fc3RlYWxfdGltZSwgTlVMTCk7CiYjNDM7CiYjNDM7CXdoaWxlIChnZXRfcnVuX2RlbGF5KCkgLSBydW5fZGVsYXkgJmx0OyBNSU5fUlVOX0RFTEFZX05TKQomIzQzOwkJc2NoZWRfeWllbGQoKTsKJiM0MzsKJiM0MzsJcHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7CiYjNDM7CXJ1bl9kZWxheV9kZWx0YSA9IGdldF9ydW5fZGVsYXkoKSAtIHJ1bl9kZWxheTsKJiM0MzsJVEVTVF9BU1NFUlQocnVuX2RlbGF5X2RlbHRhICZndDs9IE1JTl9SVU5fREVMQVlfTlMsCiYjNDM7CQkgICAgJiMzNDtFeHBlY3RlZCBydW5fZGVsYXkgJmd0Oz0gJWxkLCBnb3QgJWxkJiMzNDssCiYjNDM7CQkgICAgTUlOX1JVTl9ERUxBWV9OUywgcnVuX2RlbGF5X2RlbHRhKTsKJiM0MzsKJiM0MzsJcnVuX3ZjcHUodmNwdSk7CiYjNDM7CXN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3Qodm0sIGd1ZXN0X3N0b2xlbl90aW1lKTsKJiM0MzsJbWFpbl9zdGVhbCA9IGd1ZXN0X3N0b2xlbl90aW1lOwomIzQzOwomIzQzOwlURVNUX0FTU0VSVChtYWluX3N0ZWFsICZndDs9IE1JTl9SVU5fREVMQVlfTlMsCiYjNDM7CQkgICAgJiMzNDtFeHBlY3RlZCBzdGVhbCB0aW1lICZndDs9ICVsZCwgZ290ICUmIzM0O1BSSXU2NCwKJiM0MzsJCSAgICBNSU5fUlVOX0RFTEFZX05TLCBtYWluX3N0ZWFsKTsKJiM0MzsKJiM0MzsJcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWQsIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1KTsKJiM0MzsJcHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7CiYjNDM7CiYjNDM7CVRFU1RfQVNTRVJUKHRocmVhZF9zdGVhbCAmZ3Q7PSBtYWluX3N0ZWFsICZhbXA7JmFtcDsKJiM0MzsJCSAgICB0aHJlYWRfc3RlYWwgLSBtYWluX3N0ZWFsICZsdDsgU1RfU0FORV9ERUxUQV9OUywKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHNhbmUgc3RlYWwgYWZ0ZXIgdkNQVSBwaWQgY2hhbmdlOiAmIzM0OwomIzQzOwkJICAgICYjMzQ7b2xkPSUmIzM0O1BSSXU2NCYjMzQ7LCBuZXc9JSYjMzQ7UFJJdTY0LAomIzQzOwkJICAgIG1haW5fc3RlYWwsIHRocmVhZF9zdGVhbCk7CiYjNDM7CiYjNDM7CWtzZnRfdGVzdF9yZXN1bHRfcGFzcygmIzM0O3N0ZWFsIHRpbWUgcmVtYWlucyBzYW5lIGFjcm9zcyB2Q1BVIHBpZCBjaGFuZ2VcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcHRocmVhZF9hdHRyX2Rlc3Ryb3koJmFtcDthdHRyKTsKJiM0MzsJa3ZtX3ZtX2ZyZWUodm0pOwomIzQzOwlrc2Z0X2ZpbmlzaGVkKCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vS2NvbmZpZyBiL3ZpcnQva3ZtL0tjb25maWcKaW5kZXggYzNjMGVlMjUzZmM3Ny4uZjQyYTNhMGZjNWJhYiAxMDA2NDQKLS0tIGEvdmlydC9rdm0vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9LY29uZmlnCkBAIC04Miw2ICYjNDM7ODIsOSBAQCBjb25maWcgSEFWRV9LVk1fSVJRX0JZUEFTUwogY29uZmlnIEhBVkVfS1ZNX1ZDUFVfUlVOX1BJRF9DSEFOR0UKICAgICAgICBib29sCiAKJiM0Mztjb25maWcgSEFWRV9LVk1fUFZfU1RFQUxfVElNRQomIzQzOyAgICAgICBib29sCiYjNDM7CiBjb25maWcgSEFWRV9LVk1fTk9fUE9MTAogICAgICAgIGJvb2wKIApkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggNjVlYjI2YTA1MjBkOC4uNzg0ZjBkOTQ1YjQ1NiAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC00NDc4LDYgJiM0Mzs0NDc4LDEwIEBAIHN0YXRpYyBsb25nIGt2bV92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCQkJaWYgKHIpCiAJCQkJYnJlYWs7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX1BWX1NURUFMX1RJTUUKJiM0MzsJCQl2Y3B1LSZndDtsYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7CiYjNDM7I2VuZGlmCiYjNDM7CiAJCQluZXdwaWQgPSBnZXRfdGFza19waWQoY3VycmVudCwgUElEVFlQRV9QSUQpOwogCQkJd3JpdGVfbG9jaygmYW1wO3ZjcHUtJmd0O3BpZF9sb2NrKTsKIAkJCXZjcHUtJmd0O3BpZCA9IG5ld3BpZDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg5OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBLVk0gU3RlYWwgVGltZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgYWxsIGFib3V0IGhvdyBLVk0gaGFuZGxlcyAmIzM0O3N0ZWFsIHRpbWUmIzM0OyB3aXRoIHBhcmF2aXJ0dWFsaXphdGlvbi4gSSBuZWVkIHRvIGJyZWFrIHRoaXMgZG93bi4KCkZpcnN0LCBpdCYjMzk7cyBhZGRpbmcgdGhpcyBgQ09ORklHX0hBVkVfS1ZNX1BWX1NURUFMX1RJTUVgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNYWtlcyBzZW5zZSDigJMgdGhpcyBzZWVtcyB0byBiZSB0aGUgdHJpZ2dlciBmb3IgZW5hYmxpbmcgdGhpcyBlbmhhbmNlZCBzdGVhbCB0aW1lIGFjY291bnRpbmcsIGFuZCBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgZm9yIGFybTY0LCBsb29uZ2FyY2gsIHJpc2N2LCBhbmQgeDg2IEtWTS4gR29vZCwgaXQmIzM5O3MgdGFyZ2V0ZWQgdG8gcmVsZXZhbnQgYXJjaGl0ZWN0dXJlcy4KCk5leHQsIGFuZCB0aGlzIGlzIGtleSwgaXTigJlzIG1vdmluZyB0aGUgYGxhc3Rfc3RlYWxgIHZhcmlhYmxlLiBDdXJyZW50bHkgaXQgcmVzaWRlcyBpbiBhIGBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaGAgKG9yIGFyY2gtc3BlY2lmaWMgc3RydWN0KSwgd2hpY2ggaXMgcGxhdGZvcm0tZGVwZW5kZW50LiBCdXQsIGl0JiMzOTtzIG5vdyBiZWluZyBtb3ZlZCB0byB0aGUgY29tbW9uIGBzdHJ1Y3Qga3ZtX3ZjcHVgIGlmIHRoYXQgYENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FYCBpcyBzZXQuIFRoaXMgbWVhbnMgaXQmIzM5O3MgbWFraW5nIHRoZSBhY2NvdW50aW5nIGxvZ2ljIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudC4gSXQgd2lsbCBiZSBlYXNpZXIgdG8gd29yayB3aXRoLiBWZXJ5IHNlbnNpYmxlLiBUaGF0IG1ha2VzIHRoZSB3aG9sZSBzeXN0ZW0gY2xlYW5lci4KCk5vdywgdGhlIGludGVyZXN0aW5nIHBhcnQg4oCTIGhvdyB0aGlzIGBsYXN0X3N0ZWFsYCBnZXRzIHVwZGF0ZWQuIEkgbmVlZCB0byBkaWcgaW50byBgdmlydC9rdm0va3ZtX21haW4uY2AgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGxvZ2ljIGhhcHBlbnMuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUgdXBkYXRlIGhhcHBlbnMgd2hlbiBgS1ZNX1JVTmAgaXMgY2FsbGVkLCBhbmQsIGNydWNpYWxseSwgd2hlbiB0aGUgUHJvY2VzcyBJRCAoUElEKSBjaGFuZ2VzIGluc2lkZSB0aGUgYGt2bV92Y3B1X2lvY3RsYCBmdW5jdGlvbiB3aGlsZSBoYW5kbGluZyBgS1ZNX1JVTmAgdGhyb3VnaCBQSUQgY2hlY2tzLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoYXQmIzM5O3MgaW1wbGVtZW50ZWQuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCB0aGF0IGZpbGUgYW5kIGNoZWNrIGFyb3VuZCBsaW5lIDQ0NzggdG8gc2VlIHRoZSBkZXRhaWxzIG9mIHRoZSBsb2dpYy4gSG9wZWZ1bGx5LCBpdCBpcyBwcmV0dHkgc2ltcGxlLCBhbmQgSSBjYW4gcXVpY2tseSBncmFzcCB3aGF0IGlzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ0NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDQ2MDpcdFx0Y2FzZSBLVk1fUlVOOiB7XG40NDYxOlx0XHRcdHN0cnVjdCBwaWQgKm9sZHBpZDtcbjQ0NjI6XHRcdFx0ciA9IC1FSU5WQUw7XG40NDYzOlx0XHRcdGlmIChhcmcpXG40NDY0Olx0XHRcdFx0Z290byBvdXQ7XG40NDY1Olx0XG40NDY2Olx0XHRcdC8qXG40NDY3Olx0XHRcdCAqIE5vdGUsIHZjcHUtXHUwMDNlcGlkIGlzIHByaW1hcmlseSBwcm90ZWN0ZWQgYnkgdmNwdS1cdTAwM2VtdXRleC4gVGhlXG40NDY4Olx0XHRcdCAqIGRlZGljYXRlZCByL3cgbG9jayBhbGxvd3Mgb3RoZXIgdGFza3MsIGUuZy4gb3RoZXIgdkNQVXMsIHRvXG40NDY5Olx0XHRcdCAqIHJlYWQgdmNwdS1cdTAwM2VwaWQgd2hpbGUgdGhpcyB2Q1BVIGlzIGluIEtWTV9SVU4sIGUuZy4gdG8geWllbGRcbjQ0NzA6XHRcdFx0ICogZGlyZWN0bHkgdG8gdGhpcyB2Q1BVXG40NDcxOlx0XHRcdCAqL1xuNDQ3MjpcdFx0XHRvbGRwaWQgPSB2Y3B1LVx1MDAzZXBpZDtcbjQ0NzM6XHRcdFx0aWYgKHVubGlrZWx5KG9sZHBpZCAhPSB0YXNrX3BpZChjdXJyZW50KSkpIHtcbjQ0NzQ6XHRcdFx0XHQvKiBUaGUgdGhyZWFkIHJ1bm5pbmcgdGhpcyBWQ1BVIGNoYW5nZWQuICovXG40NDc1Olx0XHRcdFx0c3RydWN0IHBpZCAqbmV3cGlkO1xuNDQ3NjpcdFxuNDQ3NzpcdFx0XHRcdHIgPSBrdm1fYXJjaF92Y3B1X3J1bl9waWRfY2hhbmdlKHZjcHUpO1xuNDQ3ODpcdFx0XHRcdGlmIChyKVxuNDQ3OTpcdFx0XHRcdFx0YnJlYWs7XG40NDgwOlx0XG40NDgxOlx0I2lmZGVmIENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FXG40NDgyOlx0XHRcdFx0dmNwdS1cdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbjQ0ODM6XHQjZW5kaWZcbjQ0ODQ6XHRcbjQ0ODU6XHRcdFx0XHRuZXdwaWQgPSBnZXRfdGFza19waWQoY3VycmVudCwgUElEVFlQRV9QSUQpO1xuNDQ4NjpcdFx0XHRcdHdyaXRlX2xvY2soXHUwMDI2dmNwdS1cdTAwM2VwaWRfbG9jayk7XG40NDg3Olx0XHRcdFx0dmNwdS1cdTAwM2VwaWQgPSBuZXdwaWQ7XG40NDg4Olx0XHRcdFx0d3JpdGVfdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNlcGlkX2xvY2spO1xuNDQ4OTpcdFxuNDQ5MDpcdFx0XHRcdHB1dF9waWQob2xkcGlkKTtcbjQ0OTE6XHRcdFx0fVxuNDQ5MjpcdFx0XHR2Y3B1LVx1MDAzZXdhbnRzX3RvX3J1biA9ICFSRUFEX09OQ0UodmNwdS1cdTAwM2VydW4tXHUwMDNlaW1tZWRpYXRlX2V4aXRfX3Vuc2FmZSk7XG40NDkzOlx0XHRcdHIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bih2Y3B1KTtcbjQ0OTQ6XHRcdFx0dmNwdS1cdTAwM2V3YW50c190b19ydW4gPSBmYWxzZTtcbjQ0OTU6XHRcbjQ0OTY6XHRcdFx0LypcbjQ0OTc6XHRcdFx0ICogRklYTUU6IFJlbW92ZSB0aGlzIGhhY2sgb25jZSBhbGwgS1ZNIGFyY2hpdGVjdHVyZXNcbjQ0OTg6XHRcdFx0ICogc3VwcG9ydCB0aGUgZ2VuZXJpYyBUSUYgYml0cywgaS5lLiBhIGRlZGljYXRlZCBUSUZfUlNFUS5cbjQ0OTk6XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExOTIKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBWQ1BVIFN0ZWFsIFRpbWUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgaG93IEtWTSB0cmFja3MgJiMzNDtzdGVhbCB0aW1lJiMzNDsgd2l0aGluIGEgdmlydHVhbCBDUFUgKFZDUFUpLiBUaGUgdHJpZ2dlciBzZWVtcyB0byBiZSB3aGVuIHRoZSBjdXJyZW50bHkgcnVubmluZyB0aHJlYWQgZm9yIGEgVkNQVSBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgd2hlbiBgb2xkcGlkYCAodGhlIHByZXZpb3VzIHRocmVhZCYjMzk7cyBQSUQpIGRpZmZlcnMgZnJvbSBgdGFza19waWQoY3VycmVudClgIHdpdGhpbiB0aGUgYEtWTV9SVU5gIG9wZXJhdGlvbi4gSW4gdGhhdCBzY2VuYXJpbywgYHZjcHUtJmd0O2xhc3Rfc3RlYWxgIGdldHMgcmVzZXQgdG8gdGhlIHZhbHVlIG9mIGBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheWAuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgaW5pdGlhbGl6YXRpb24gcG9pbnQgZm9yIHRoZSBuZXcgVkNQVSBydW4uCgpNeSBpbnRlcmVzdCBpcyBwaXF1ZWQgYnkgaG93IGBsYXN0X3N0ZWFsYCBpcyB0aGVuICp1c2VkKi4gSXQgbG9va3MgbGlrZSB0aGUgY3JpdGljYWwgZnVuY3Rpb24gaGVyZSBpcyBgcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KWAgbG9jYXRlZCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gVGhhdCBmdW5jdGlvbiAqbXVzdCogYmUgdGhlIHBsYWNlIHdoZXJlIGB2Y3B1LSZndDtsYXN0X3N0ZWFsYCBpcyB1c2VkIHRvIGFjY3VtdWxhdGUgdGltZS4gTmVlZCB0byBzZWUgaG93IHRoYXQgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgY29udHJpYnV0ZXMgdG8gdGhlIGZpbmFsIG1lYXN1cmVtZW50LiBCYXNlZCBvbiB0aGUgZmlsZSBwYXRoLCBJIHNob3VsZCBsb29rIGFyb3VuZCBsaW5lIDIxMjkgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxMTU6XHRcdFx0aWYgKCF1c2VyX2FjY2Vzc19iZWdpbihzdCwgc2l6ZW9mKCpzdCkpKVxuMjExNjpcdFx0XHRcdHJldHVybjtcbjIxMTc6XHRcbjIxMTg6XHRcdFx0dW5zYWZlX3B1dF91c2VyKDAsIFx1MDAyNnN0LVx1MDAzZXByZWVtcHRlZCwgb3V0KTtcbjIxMTk6XHRcdFx0dmNwdS1cdTAwM2VhcmNoLnN0LnByZWVtcHRlZCA9IDA7XG4yMTIwOlx0XHR9XG4yMTIxOlx0XG4yMTIyOlx0XHR1bnNhZmVfZ2V0X3VzZXIodmVyc2lvbiwgXHUwMDI2c3QtXHUwMDNldmVyc2lvbiwgb3V0KTtcbjIxMjM6XHRcdGlmICh2ZXJzaW9uIFx1MDAyNiAxKVxuMjEyNDpcdFx0XHR2ZXJzaW9uICYjNDM7PSAxOyAgLyogZmlyc3QgdGltZSB3cml0ZSwgcmFuZG9tIGp1bmsgKi9cbjIxMjU6XHRcbjIxMjY6XHRcdHZlcnNpb24gJiM0Mzs9IDE7XG4yMTI3Olx0XHR1bnNhZmVfcHV0X3VzZXIodmVyc2lvbiwgXHUwMDI2c3QtXHUwMDNldmVyc2lvbiwgb3V0KTtcbjIxMjg6XHRcbjIxMjk6XHRcdHNtcF93bWIoKTtcbjIxMzA6XHRcbjIxMzE6XHRcdHVuc2FmZV9nZXRfdXNlcihzdGVhbCwgXHUwMDI2c3QtXHUwMDNlc3RlYWwsIG91dCk7XG4yMTMyOlx0XHRzdGVhbCAmIzQzOz0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSAtIHZjcHUtXHUwMDNlbGFzdF9zdGVhbDtcbjIxMzM6XHRcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4yMTM0Olx0XHR1bnNhZmVfcHV0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuMjEzNTpcdFxuMjEzNjpcdFx0dmVyc2lvbiAmIzQzOz0gMTtcbjIxMzc6XHRcdHVuc2FmZV9wdXRfdXNlcih2ZXJzaW9uLCBcdTAwMjZzdC1cdTAwM2V2ZXJzaW9uLCBvdXQpO1xuMjEzODpcdFxuMjEzOTpcdCBvdXQ6XG4yMTQwOlx0XHR1c2VyX2FjY2Vzc19lbmQoKTtcbjIxNDE6XHQgZGlydHk6XG4yMTQyOlx0XHRtYXJrX3BhZ2VfZGlydHlfaW5fc2xvdCh2Y3B1LVx1MDAzZWt2bSwgZ2hjLVx1MDAzZW1lbXNsb3QsIGdwYV90b19nZm4oZ2hjLVx1MDAzZWdwYSkpO1xuMjE0MzpcdH1cbjIxNDQ6XHRcbjIxNDU6XHRzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2Nhbl9td2FpdF9pbl9ndWVzdCh2b2lkKVxuMjE0NjpcdHtcbjIxNDc6XHRcdHJldHVybiBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTVdBSVQpIFx1MDAyNlx1MDAyNlxuMjE0ODpcdFx0XHQhYm9vdF9jcHVfaGFzX2J1ZyhYODZfQlVHX01PTklUT1IpIFx1MDAyNlx1MDAyNlxuMjE0OTpcdFx0XHRib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVJBVCk7XG4yMTUwOlx0fVxuMjE1MTpcdFxuMjE1MjpcdHN0YXRpYyB1NjQga3ZtX2dldF9hbGxvd2VkX2Rpc2FibGVfZXhpdHModm9pZClcbjIxNTM6XHR7XG4yMTU0Olx0XHR1NjQgciA9IEtWTV9YODZfRElTQUJMRV9FWElUU19QQVVTRTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI3NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBFdmFsdWF0aW9uOiBLVk0gUElEIE1pZ3JhdGlvbi9TdGVhbCBUaW1lIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGxvb2tzIGxpa2UgYSBwcm9taXNpbmcgYXJlYSBmb3IgZnV6emluZy4gVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIHdoaWNoIGlzIGNydWNpYWwsIGFuZCB0aGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGtleSBLVk0gZmlsZXM6IGBrdm1fbWFpbi5jYCwgYHg4Ni5jYCwgYSBgS2NvbmZpZ2AgZmlsZSwgYW5kIHNldmVyYWwgaGVhZGVyIGZpbGVzLiBBZGRpdGlvbmFsbHksIGl0IGFmZmVjdHMgYXJtNjQsIGxvb25nYXJjaCwgYW5kIHJpc2N2IGZpbGVzLiBUaGF0IGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbiDigJMgYnJvYWRlciBpbXBhY3Qgb2Z0ZW4gbWVhbnMgYnJvYWRlciBmdXp6aW5nIHN1cmZhY2UuIFBsdXMsIHRoZSBpbmNsdXNpb24gb2YgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8qYCBzdWdnZXN0cyB0aGlzIGlzIGFscmVhZHkgb24gc29tZW9uZSYjMzk7cyByYWRhciBmb3IgdGVzdGluZywgbWFraW5nIGl0IGV2ZW4gbW9yZSByZWxldmFudC4KCk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSBjb2RlPyBTZWN0aW9uIDEsIDIsIGFuZCAzIGhlbHAgY2xhcmlmeSB0aGF0LiBLVk0gaXMgZnVsbHkgc3VwcG9ydGVkIG9uIGFtZDY0IHdpdGhpbiBRRU1VIGFuZCBzeXprYWxsZXIsIHdoaWNoIG1lYW5zIHdlIGhhdmUgZXhpc3RpbmcgaW5mcmFzdHJ1Y3R1cmUgdG8gcmVhY2ggdGhpcyBjb2RlLiBTeXprYWxsZXImIzM5O3MgS1ZNIGRlc2NyaXB0aW9ucyBhbmQgaW9jdGxzIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBhdHRhY2sgc3VyZmFjZS4KClRoZSBjb3JlIHN1YnN5c3RlbSBoZXJlIGlzIEtWTSB2aXJ0dWFsaXphdGlvbi4gVGhlIHBhdGNoIGl0c2VsZiBpcyBhZGRyZXNzaW5nIGEgYnVnIHJlbGF0ZWQgdG8gdkNQVSBQSUQgbWlncmF0aW9uLiBBcHBhcmVudGx5LCB3aGVuIGEgdkNQVSBydW5zIG9uIGEgZGlmZmVyZW50IGhvc3QgdGhyZWFkIG9yIFBJRCwgdGhlIHN0ZWFsIHRpbWUgY2FsY3VsYXRpb25zIHdlcmUgYmVpbmcgY29ycnVwdGVkIGJlY2F1c2UgYGxhc3Rfc3RlYWxgIHdhc24mIzM5O3QgYmVpbmcgdXBkYXRlZCBjb3JyZWN0bHksIGxlYWRpbmcgdG8gcG90ZW50aWFsbHkgbWFzc2l2ZSBkZWx0YXMgb3IgdW5kZXJmbG93cy4gVGhlIGZpeCBpbnZvbHZlcyByZWZhY3RvcmluZyBgbGFzdF9zdGVhbGAgaW50byB0aGUgZ2VuZXJpYyBga3ZtX3ZjcHVgIHN0cnVjdCBhbmQgcmVzZXR0aW5nIGl0IHdpdGhpbiBga3ZtX3ZjcHVfaW9jdGwoKWAgZHVyaW5nIFBJRCBjaGFuZ2VzLiBUaGlzIGltcGxpZXMgdGhhdCB0aGUgY29kZSBpcyBkZWFsaW5nIHdpdGggdkNQVSBzY2hlZHVsaW5nIGFuZCBjb250ZXh0IHN3aXRjaGluZywgYSBrbm93biBhcmVhIG9mIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LgoKVGhlIGV4ZWN1dGFibGUgY29kZSBtb2RpZmllZCBpbmNsdWRlcyBga3ZtX3ZjcHVfaW9jdGxgIGFuZCBgcmVjb3JkX3N0ZWFsX3RpbWVgLCB3aGljaCBhcmUgaW1wb3J0YW50IHRvIEtWTSBvcGVyYXRpb24sIGFuZCB0aGV5IGFyZSB4ODYvZ2VuZXJpYy4KCkdpdmVuIHRoZSByZWFjaGFiaWxpdHksIHRoZSBjcml0aWNhbCBjb3JlIHN1YnN5c3RlbSwgYW5kIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgYWZmZWN0ZWQsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgZml4IGRpcmVjdGx5IHJlbGF0ZXMgdG8gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBpbnRlZ2VyIG92ZXJmbG93cy91bmRlcmZsb3dzIGluIHRpbWluZyBjYWxjdWxhdGlvbnMuIFdlIHdpbGwgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCDigJMgc3BlY2lmaWNhbGx5IGBLVk1gIChvciBgS1ZNX0lOVEVMYC9gS1ZNX0FNRGAsIGBLVk1fWDg2YCkuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBhbmQgYHZpcnQva3ZtL0tjb25maWdgIHRvIGNvbmZpcm0gdGhvc2UgY29uZmlnIGZsYWdzLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCB0YXJnZXQgZm9yIGZvY3VzZWQgZnV6emluZyBjYW1wYWlnbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTM6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTQtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjcwOmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MS1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4NDpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODUtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTc6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTgtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA3LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA4OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOS0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjM9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTM0LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM1OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDc6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0OC1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ni1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Nzpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1OC1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3NDpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTc1LVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4My1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4NDpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTg1LVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NTpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk2LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDk6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxMC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTctXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTg6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOS1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzQ6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNS1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS1ZNIFN0ZWFsIFRpbWUgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIEtWTSBzdGVhbCB0aW1lIHNpdHVhdGlvbi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBDT05GSUdfS1ZNYCBhbmQsIG9mIGNvdXJzZSwgdGhlIHZlbmRvci1zcGVjaWZpYyBvcHRpb25zIGxpa2UgYENPTkZJR19LVk1fSU5URUxgIGFuZCBgQ09ORklHX0tWTV9BTURgLiBUaGVuLCBJJiMzOTtsbCB0cmFjZSB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXMsIG1ha2luZyBzdXJlIGBLVk1fWDg2YCBpcyBjb3JyZWN0bHkgc2VsZWN0aW5nIGBIQVZFX0tWTV9QVl9TVEVBTF9USU1FYC4KCkFoLCBoZXJlJiMzOTtzIHRoZSBsaW5rYWdlLCBpbiBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBgY29uZmlnIEtWTV9YODZgIGRvZXMgaW5kZWVkIGBzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRWAuIExldCYjMzk7cyBiZSBzdXJlIG9mIHRoZSBuZXN0aW5nLiBgS1ZNX1g4NmAgaXRzZWxmIGlzIGRlcGVuZGVudCBvbiB0aGUgYnJvYWRlciBLVk0sIHZpYSB0aGUgZGVwZW5kZW5jeSBgZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKWAuIFJpZ2h0LCBzbyBgS1ZNYCBpcyB0aGUgcGFyZW50LCBhbmQgdGhhdCBjb25maWd1cmF0aW9uIGlzIGl0c2VsZiB1bmRlciBgaWYgVklSVFVBTElaQVRJT05gLiBTbywgdG8gYmUgY2xlYXIsIGl0JiMzOTtzIGBLVk1gLCBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGAgKG9yIGBLVk1fWDg2YCkgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQuCgpOb3csIHRoZSBjcnVjaWFsIHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cuIEkmIzM5O2xsIHNlYXJjaCB0aGUgeDg2IEtWTSBjb2RlIHRvIGlkZW50aWZ5IHRoZSBsb2NhdGlvbnMgd2hlcmUgYHJlY29yZF9zdGVhbF90aW1lYCBpcyBhY3R1YWxseSBjYWxsZWQuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBlbnRyeXBvaW50cyBhbmQgY29udGV4dCBvZiB0aGUgbWVhc3VyZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWNvcmRfc3RlYWxfdGltZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTIwNDY9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXJ2aWNlX2xvY2FsX3RsYl9mbHVzaF9yZXF1ZXN0cyk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMjA0Ny1cbmFyY2gveDg2L2t2bS94ODYuYzoyMDQ4OnN0YXRpYyB2b2lkIHJlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ODYuYy0yMDQ5LXtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODA1MD1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04MTQwLVx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpKVxuYXJjaC94ODYva3ZtL3g4Ni5jOjgxNDE6XHRcdFx0cmVjb3JkX3N0ZWFsX3RpbWUodmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtODE0Mi1cdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfUE1VLCB2Y3B1KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNzkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzIGZvciBTdGVhbCBUaW1lIEludmVzdGlnYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUga2V5IGZvY3VzIHN5bWJvbHMgdG8gcGlucG9pbnQgd2l0aGluIHRoZSBjb2RlIGZvciB0aGlzIHN0ZWFsIHRpbWUgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bSB0aGlua2luZy4uLgoKKiAgIGByZWNvcmRfc3RlYWxfdGltZWAganVtcHMgb3V0IGltbWVkaWF0ZWx5LCBlc3BlY2lhbGx5IHNpbmNlIGl0JiMzOTtzIGdvdCBhIG1vZGlmaWNhdGlvbiBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3IuCgoqICAgVGhlbiB0aGVyZSYjMzk7cyBga3ZtX3ZjcHVfaW9jdGxgIHdoaWNoIGhhcyBjaGFuZ2VzIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCwgYW5kIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIEtWTV9SVU4gaGFuZGxpbmcgYW5kIFBJRCBjaGFuZ2VzLiBJbnRyaWd1aW5nLi4uY291bGQgYmUgcmVsYXRlZCB0byBjb250ZXh0IHN3aXRjaGluZyBvciBhY2NvdW50aW5nLgoKKiAgIGB2Y3B1X2VudGVyX2d1ZXN0YCBpcyBhbm90aGVyIGdvb2QgY2FuZGlkYXRlLiBJdCYjMzk7cyBsaXN0ZWQgYXMgYSAqY2FsbGVyKiBvZiBgcmVjb3JkX3N0ZWFsX3RpbWVgLCB3aGljaCBtYWtlcyBpdCBsaWtlbHkgYSBrZXkgYXJlYSB0byB1bmRlcnN0YW5kIHRoZSB0aW1pbmcgZmxvdy4KCiogICBOb3csIGJleW9uZCB0aGUgb2J2aW91cy4uLnNob3VsZCBJIGJlIGxvb2tpbmcgYXQgYGt2bV9zZXRfbXNyX2NvbW1vbmA/IElzIHRoZXJlIHNvbWUgbWFnaWMgc2V0dGluZyBoZXJlIHRvIGVuYWJsZSBvciBkaXNhYmxlIHN0ZWFsIHRpbWU/IEkmIzM5O20gYmV0dGluZyB0aGVyZSBpcy4gSSBzaG91bGQgZGVmaW5pdGVseSBjaGVjayB0aGF0IG9uZSwgYWxvbmcgd2l0aCBob3cgc3RlYWwgdGltZSBpcyBpbml0aWFsaXplZCBhbmQgZW5hYmxlZCBvbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gTGV0JiMzOTtzIHRyYWNlIGl0IGFuZCBzZWUgaG93IGl0IHdvcmtzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNU1JfS1ZNX1NURUFMX1RJTUUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tc3JzLmM9MjU0PXN0YXRpYyBjb25zdCB1MzIgZW11bGF0ZWRfbXNyc19hbGxbXSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTI3Ny1cbmFyY2gveDg2L2t2bS9tc3JzLmM6Mjc4Olx0TVNSX0tWTV9BU1lOQ19QRl9FTiwgTVNSX0tWTV9TVEVBTF9USU1FLFxuYXJjaC94ODYva3ZtL21zcnMuYy0yNzktXHRNU1JfS1ZNX1BWX0VPSV9FTiwgTVNSX0tWTV9BU1lOQ19QRl9JTlQsIE1TUl9LVk1fQVNZTkNfUEZfQUNLLFxuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmM9MTQ0Mj1pbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE3MDctXHRcdGJyZWFrO1xuYXJjaC94ODYva3ZtL21zcnMuYzoxNzA4Olx0Y2FzZSBNU1JfS1ZNX1NURUFMX1RJTUU6XG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE3MDktXHRcdGlmICghZ3Vlc3RfcHZfaGFzKHZjcHUsIEtWTV9GRUFUVVJFX1NURUFMX1RJTUUpKVxuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmM9MTg5OT1pbnQga3ZtX2dldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTIwNzYtXHRcdGJyZWFrO1xuYXJjaC94ODYva3ZtL21zcnMuYzoyMDc3Olx0Y2FzZSBNU1JfS1ZNX1NURUFMX1RJTUU6XG5hcmNoL3g4Ni9rdm0vbXNycy5jLTIwNzgtXHRcdGlmICghZ3Vlc3RfcHZfaGFzKHZjcHUsIEtWTV9GRUFUVVJFX1NURUFMX1RJTUUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI5NwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gTVNSIEhhbmRsaW5nIGluIEtWTSBmb3IgeDg2KioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IE1TUnMgYXJlIGJlaW5nIG1hbmFnZWQgd2l0aGluIHRoZSBLVk0gaHlwZXJ2aXNvciwgc3BlY2lmaWNhbGx5IGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGFyY2gveDg2L2t2bS9tc3JzLmNgLCBhbmQgSSYjMzk7bSB0YXJnZXRpbmcgYXJvdW5kIGxpbmUgMTcwOC4gVGhhdCBhcmVhIHVzdWFsbHkgaG9sZHMgY3JpdGljYWwgbG9naWMgZm9yIGVpdGhlciBhIHNwZWNpZmljIE1TUiYjMzk7cyByZWFkL3dyaXRlIHBhdGggb3Igc29tZSBrZXkgZGF0YSBzdHJ1Y3R1cmUgcmVsYXRlZCB0byBNU1IgYWNjZXNzLiBJIHN1c3BlY3QgaXQmIzM5O3MgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgdG8gdW5yYXZlbCB3aGF0ZXZlciBJJiMzOTttIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBIb3BlZnVsbHksIHRoaXMgaXMgdGhlIGFyZWEgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmV0dGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tc3JzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3MDU6XHRcdFx0XHRrdm1fY2hlY2tfYXN5bmNfcGZfY29tcGxldGlvbih2Y3B1KTtcbjE3MDY6XHRcdFx0fVxuMTcwNzpcdFx0XHRicmVhaztcbjE3MDg6XHRcdGNhc2UgTVNSX0tWTV9TVEVBTF9USU1FOlxuMTcwOTpcdFx0XHRpZiAoIWd1ZXN0X3B2X2hhcyh2Y3B1LCBLVk1fRkVBVFVSRV9TVEVBTF9USU1FKSlcbjE3MTA6XHRcdFx0XHRyZXR1cm4gS1ZNX01TUl9SRVRfVU5TVVBQT1JURUQ7XG4xNzExOlx0XG4xNzEyOlx0XHRcdGlmICh1bmxpa2VseSghc2NoZWRfaW5mb19vbigpKSlcbjE3MTM6XHRcdFx0XHRyZXR1cm4gMTtcbjE3MTQ6XHRcbjE3MTU6XHRcdFx0aWYgKGRhdGEgXHUwMDI2IEtWTV9TVEVBTF9SRVNFUlZFRF9NQVNLKVxuMTcxNjpcdFx0XHRcdHJldHVybiAxO1xuMTcxNzpcdFxuMTcxODpcdFx0XHR2Y3B1LVx1MDAzZWFyY2guc3QubXNyX3ZhbCA9IGRhdGE7XG4xNzE5Olx0XG4xNzIwOlx0XHRcdGlmICghKGRhdGEgXHUwMDI2IEtWTV9NU1JfRU5BQkxFRCkpXG4xNzIxOlx0XHRcdFx0YnJlYWs7XG4xNzIyOlx0XG4xNzIzOlx0XHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpO1xuMTcyNDpcdFxuMTcyNTpcdFx0XHRicmVhaztcbjE3MjY6XHRcdGNhc2UgTVNSX0tWTV9QVl9FT0lfRU46XG4xNzI3Olx0XHRcdGlmICghZ3Vlc3RfcHZfaGFzKHZjcHUsIEtWTV9GRUFUVVJFX1BWX0VPSSkpXG4xNzI4Olx0XHRcdFx0cmV0dXJuIEtWTV9NU1JfUkVUX1VOU1VQUE9SVEVEO1xuMTcyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkyMAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBLVk0gU3RvbGVuIFRpbWUgUmV2aWV3KioKCk9rYXksIHRpbWUgdG8gdGhvcm91Z2hseSBhdWRpdCB0aGVzZSBzdG9sZW4gdGltZSBpbXBsZW1lbnRhdGlvbnMgYWNyb3NzIGFyY2hpdGVjdHVyZXMuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSB4ODYgYW5kIGdlbmVyaWMgeDg2IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkLiBJIHNlZSB0d28gbWFpbiBwbGF5ZXJzIGhlcmU6IGBrdm1fdmNwdV9pb2N0bGAgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgLCBzcGVjaWZpY2FsbHkgdW5kZXIgYEtWTV9SVU5gIHdoZW4gdGhlIG9sZCBwcm9jZXNzIElEIGRpZmZlcnMgZnJvbSB0aGUgY3VycmVudCBvbmUsIHdoaWNoIHJlc2V0cyBgdmNwdS0mZ3Q7bGFzdF9zdGVhbGAgdXNpbmcgdGhlIGBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheWAgdmFsdWUsIGFuZCBgcmVjb3JkX3N0ZWFsX3RpbWVgIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLCB3aGljaCBhY3R1YWxseSB1cGRhdGVzIHRoZSAmIzM5O3N0ZWFsJiMzOTsgdGltZSBiYXNlZCBvbiB0aGF0IGB2Y3B1LSZndDtsYXN0X3N0ZWFsYCBhbmQgdGhlbiB1cGRhdGVzIGB2Y3B1LSZndDtsYXN0X3N0ZWFsYCB3aXRoIHRoYXQgc2FtZSBjdXJyZW50IHNjaGVkIGluZm8uIEdvdCBpdC4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciBtb2RpZmljYXRpb25zIGluIG90aGVyIGFyY2hpdGVjdHVyZXMuIExvb2tzIGxpa2U6CgoqICAgRm9yIGFybTY0LCBgYXJjaC9hcm02NC9rdm0vcHZ0aW1lLmNgIGhhcyB0aGVzZSB0d28gbW9kaWZpZWQgZnVuY3Rpb25zIGBrdm1fdXBkYXRlX3N0b2xlbl90aW1lYCwgYW5kIGBrdm1faW5pdF9zdG9sZW5fdGltZWAuCiogICBMb29uZ2FyY2ggaGFzIGBhcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jYDogYGt2bV9zYXZlX25vdGlmeWAgYW5kIGBhcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jYDogYGt2bV91cGRhdGVfc3RvbGVuX3RpbWVgLCBga3ZtX2xvb25nYXJjaF9wdnRpbWVfc2V0X2F0dHJgCiogICBBbmQgZmluYWxseSwgcmlzY3YgaGFzIHNldmVyYWwsIGZvdW5kIGluIGBhcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9zdGEuY2A6IGBrdm1fcmlzY3ZfdmNwdV9zYmlfc3RhX3Jlc2V0YCwgYGt2bV9yaXNjdl92Y3B1X3JlY29yZF9zdGVhbF90aW1lYCwgYGt2bV9zYmlfc3RhX3N0ZWFsX3RpbWVfc2V0X3NobWVtYAoKRm9yIGFtZDY0LCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBpdCYjMzk7cyBgcmVjb3JkX3N0ZWFsX3RpbWVgIGFuZCBga3ZtX3ZjcHVfaW9jdGxgIHRoYXQgYXJlIHRoZSBwcmltYXJ5IGNvbmNlcm5zLiBBbHNvLCBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZSBgdmNwdV9lbnRlcl9ndWVzdGAgZnVuY3Rpb24sIGFzIGl0JiMzOTtzIHRoZSB0cmlnZ2VyIGZvciBgcmVjb3JkX3N0ZWFsX3RpbWVgLgoKQWxyaWdodCwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHJlbGF0ZWQgS2NvbmZpZyBvcHRpb25zLiBPYnZpb3VzbHksIHdlIGhhdmUgYEtWTWAsIGBLVk1fSU5URUxgLCBhbmQgYEtWTV9BTURgLiBOb3csIEkgd2FudCB0byBjb25maXJtIHRoYXQgYEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVgIGlzIGluZGVlZCBzZWxlY3RlZCBieSBgS1ZNX1g4NmAuIFdlIGFsc28gbmVlZCBgU0NIRURfSU5GT2AgYmVjYXVzZSB0aGF0JiMzOTtzIHdoYXQgY29udGFpbnMgYHJ1bl9kZWxheWAsIHNvIEkgbmVlZCB0byBnbyBsb29rIHVwIHRoZSBLY29uZmlnIGZvciBgU0NIRURfSU5GT2AgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBzZXQgdXAgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTQ0hFRF9JTkZPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz02OTQ9Y29uZmlnIFRBU0tfREVMQVlfQUNDVFxuLS1cbmluaXQvS2NvbmZpZy02OTYtXHRkZXBlbmRzIG9uIFRBU0tTVEFUU1xuaW5pdC9LY29uZmlnOjY5NzpcdHNlbGVjdCBTQ0hFRF9JTkZPXG5pbml0L0tjb25maWctNjk4LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODEwMQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgU2NoZWR1bGluZyBTdGF0aXN0aWNzIE9wdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gbmFpbCBkb3duIGhvdyB0byBnZXQgdGhlIHJpZ2h0IHNjaGVkdWxpbmcgc3RhdHMuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2gga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZXZlbiBhdmFpbGFibGUgdG8gbWUuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBjaGVja2luZyBgU0NIRURTVEFUU2AsIHRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJZiB0aGF0IGRvZXNuJiMzOTt0IHByb3ZpZGUgd2hhdCBJIG5lZWQsIG9yIGlmIGl0JiMzOTtzIHRvbyBjb2Fyc2UtZ3JhaW5lZCwgbWF5YmUgSSBzaG91bGQgZHJpbGwgZG93biBpbnRvIGBUQVNLU1RBVFNgLiBJdCYjMzk7cyBwb3NzaWJsZSBJJiMzOTtsbCBoYXZlIG1vcmUgc3BlY2lmaWMgcGVyLXRhc2sgaW5mb3JtYXRpb24gdGhlcmUuIEFuZCwgb2YgY291cnNlLCBJIGhhdmUgdG8gY29uc2lkZXIgYFNDSEVEX0lORk9gIC0tIGNvdWxkIGJlIHRoZSBrZXkgdG8gdGhlIGtpbmQgb2YgZGV0YWlsIEkmIzM5O20gbG9va2luZyBmb3IuIFRpbWUgdG8gZGlnIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIHNlZSB3aGF0IHRoZXNlIG9wdGlvbnMgYWN0dWFsbHkgY29udHJvbCBhbmQgd2hhdCBsZXZlbCBvZiBkZXRhaWwgdGhleSBwcm92aWRlLiBJIGtub3cgaXQgZGVwZW5kcyBvbiB0aGUga2VybmVsIHZlcnNpb24gdG9vLCBzbyBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZCBhcyBJJiMzOTttIGxvb2tpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBTQ0hFRF9JTkZPJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9MjA9bWVudWNvbmZpZyBLVk1cbi0tXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM3LVx0c2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6Mzg6XHRzZWxlY3QgU0NIRURfSU5GT1xuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zOS1cdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1cbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0zMy1cdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc6MzQ6XHRzZWxlY3QgU0NIRURfSU5GT1xuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMzUtXHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFMgaWYgUEVSRl9FVkVOVFNcbi0tXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1cbi0tXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTMzLVx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjM0Olx0c2VsZWN0IFNDSEVEX0lORk9cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMzUtXHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFMgaWYgUEVSRl9FVkVOVFNcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNX1g4NlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTM1LVx0c2VsZWN0IEtWTV9NTUlPXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzozNjpcdHNlbGVjdCBTQ0hFRF9JTkZPXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0zNy1cdHNlbGVjdCBQRVJGX0VWRU5UU1xuLS1cbmluaXQvS2NvbmZpZz02OTQ9Y29uZmlnIFRBU0tfREVMQVlfQUNDVFxuLS1cbmluaXQvS2NvbmZpZy02OTYtXHRkZXBlbmRzIG9uIFRBU0tTVEFUU1xuaW5pdC9LY29uZmlnOjY5NzpcdHNlbGVjdCBTQ0hFRF9JTkZPXG5pbml0L0tjb25maWctNjk4LVx0aGVscFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnPTEzNTM9Y29uZmlnIFNDSEVEU1RBVFNcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMzU1LVx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG5saWIvS2NvbmZpZy5kZWJ1ZzoxMzU2Olx0c2VsZWN0IFNDSEVEX0lORk9cbmxpYi9LY29uZmlnLmRlYnVnLTEzNTctXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTEzCgkJCQkJCQlvdXRwdXQ6IDE1OQoJCQkJCQkJdGhvdWdodHM6IDI1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBLVk0gQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqCgpBbHJpZ2h0LCBzbyBgS1ZNX1g4NmAgaXMgZGlyZWN0bHkgcHVsbGluZyBpbiBgU0NIRURfSU5GT2AuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IGVuYWJsaW5nIEtWTSwgYW5kIGJ5IGV4dGVuc2lvbiBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGAsIGJyaW5ncyBpbiBhIHdob2xlIHN1aXRlOiBgS1ZNX1g4NmAsIGBIQVZFX0tWTV9QVl9TVEVBTF9USU1FYCwgYW5kLCBjcnVjaWFsbHksIGBTQ0hFRF9JTkZPYC4gVGhhdCYjMzk7cyBhbiBpbXBvcnRhbnQgZGV0YWlsIHRvIGtlZXAgaW4gbWluZCwgYW5kIGluZm9ybXMgaG93IHRoZSBmZWF0dXJlcyBpbnRlcnJlbGF0ZS4KCkxldCYjMzk7cyBxdWlja2x5IHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbnMgd2UgbmVlZCB0byByZXR1cm46IGBLVk1gLCBgS1ZNX0lOVEVMYCwgYW5kIGBLVk1fQU1EYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuCgpOb3csIHJlZ2FyZGluZyB0aGUgY29yZSBvZiB0aGlzIHBhdGNoLCBpdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBtb3ZpbmcgdGhlIGBsYXN0X3N0ZWFsYCBtZW1iZXIgaW50byB0aGUgZ2VuZXJpYyBgc3RydWN0IGt2bV92Y3B1YCBzdHJ1Y3R1cmUsIGJ1dCBvbmx5IHVuZGVyIHRoZSBgQ09ORklHX0hBVkVfS1ZNX1BWX1NURUFMX1RJTUVgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGVuLCB0aGUgc3RlYWwgdGltZSBhY2NvdW50aW5nIGlzIHJlc2V0IHdpdGhpbiB0aGUgZ2VuZXJpYyBga3ZtX3ZjcHVfaW9jdGwoKWAgZnVuY3Rpb24gd2hlbiBhIHZDUFUgc3dpdGNoZXMgdG8gYmVpbmcgcnVuIGZyb20gYSBkaWZmZXJlbnQgaG9zdCB0aHJlYWQgb3IgUElELCBzcGVjaWZpY2FsbHkgZHVyaW5nIHRoZSBgS1ZNX1JVTmAgaGFuZGxpbmcuIE9uIHg4NiwgaXQgbG9va3MgbGlrZSBgcmVjb3JkX3N0ZWFsX3RpbWUoKWAgaXMgdGhlbiB1cGRhdGVkIHRvIHVzZSB0aGlzIG5ldywgZ2VuZXJpYyBgbGFzdF9zdGVhbGAgbWVtYmVyLiBUaGlzIGRlZmluaXRlbHkgaGFzIGltcGxpY2F0aW9ucyBvbiB0aGUgS1ZNIGNvcmUgYW5kIHg4NiBleGVjdXRpb24gcGF0aHMuCgpPa2F5LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcsIGFuZCB0aGVuIHdlJiMzOTtsbCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWNvcmRfc3RlYWxfdGltZSYjMzQ7LAogICAgJiMzNDtrdm1fdmNwdV9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb25zb2xpZGF0ZXMgc3RlYWwtdGltZSBhY2NvdW50aW5nIGFjcm9zcyBhcmNoaXRlY3R1cmVzIGJ5IG1vdmluZyBgbGFzdF9zdGVhbGAgdG8gZ2VuZXJpYyBgc3RydWN0IGt2bV92Y3B1YCBhbmQgcmVzZXR0aW5nIGl0IGluIGBrdm1fdmNwdV9pb2N0bCgpYCB3aGVuIGEgdkNQVSB0aHJlYWQgY2hhbmdlcy4gSXQgbW9kaWZpZXMgZXhlY3V0YWJsZSBjb2RlIGluIGNvcmUgS1ZNIChga3ZtX3ZjcHVfaW9jdGxgKSBhbmQgeDg2IEtWTSAoYHJlY29yZF9zdGVhbF90aW1lYCksIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgaW4gdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlY29yZF9zdGVhbF90aW1lJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNvbGlkYXRlcyBzdGVhbC10aW1lIGFjY291bnRpbmcgYWNyb3NzIGFyY2hpdGVjdHVyZXMgYnkgbW92aW5nIGBsYXN0X3N0ZWFsYCB0byBnZW5lcmljIGBzdHJ1Y3Qga3ZtX3ZjcHVgIGFuZCByZXNldHRpbmcgaXQgaW4gYGt2bV92Y3B1X2lvY3RsKClgIHdoZW4gYSB2Q1BVIHRocmVhZCBjaGFuZ2VzLiBJdCBtb2RpZmllcyBleGVjdXRhYmxlIGNvZGUgaW4gY29yZSBLVk0gKGBrdm1fdmNwdV9pb2N0bGApIGFuZCB4ODYgS1ZNIChgcmVjb3JkX3N0ZWFsX3RpbWVgKSwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBpbiB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdHJhY2tpbmcgb2YgcGFyYXZpcnR1YWxpemVkIHN0ZWFsIHRpbWUgKGBsYXN0X3N0ZWFsYCkgYnkgbW92aW5nIGl0IGZyb20gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHZjcHUgc3ViLXN0cnVjdHVyZXMgKGluIHg4NiwgYXJtNjQsIHJpc2N2LCBhbmQgbG9vbmdhcmNoKSBpbnRvIHRoZSBnZW5lcmljIGBzdHJ1Y3Qga3ZtX3ZjcHVgIHVuZGVyIGBDT05GSUdfSEFWRV9LVk1fUFZfU1RFQUxfVElNRWAsIGFuZCByZXNldHRpbmcgYHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXlgIHdoZW4gdGhlIHZDUFUgdGhyZWFkIFBJRCBjaGFuZ2VzLlxuXG5UaGUgYHN0cnVjdCBrdm1fdmNwdWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvYygpYCwgZW5zdXJpbmcgYHZjcHUtXHUwMDNlbGFzdF9zdGVhbGAgaXMgemVyby1pbml0aWFsaXplZCBhdCBjcmVhdGlvbi4gQWxsIHJlYWRzIGFuZCB3cml0ZXMgdG8gYHZjcHUtXHUwMDNlbGFzdF9zdGVhbGAgb3BlcmF0ZSBvbiBmdWxseSBpbml0aWFsaXplZCBmaWVsZHMgYW5kIHZhbHVlcyBkZXJpdmVkIGZyb20gYGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXlgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RhY2sgdmFyaWFibGVzLCBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBvciBwYWRkaW5nIGlzc3VlcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyMWYzOGQ4NGUyMjFhYjdmOWJlNDUyN2ViNTYxNjM3MDBiZjE3NjY4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAwNTowMzoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAyN2ZlMGNkNWIyZDdhLi4zNmNiN2RlZTk4OGNiIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC05MzcsNyAmIzQzOzkzNyw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHsKIAogCS8qIEd1ZXN0IFBWIHN0YXRlICovCiAJc3RydWN0IHsKLQkJdTY0IGxhc3Rfc3RlYWw7CiAJCWdwYV90IGJhc2U7CiAJfSBzdGVhbDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vS2NvbmZpZyBiL2FyY2gvYXJtNjQva3ZtL0tjb25maWcKaW5kZXggNDQ5MTU0ZjlhNDg1Mi4uZjU4NTViZmM2ODFjMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9LY29uZmlnCkBAIC0zNCw2ICYjNDM7MzQsNyBAQCBtZW51Y29uZmlnIEtWTQogCXNlbGVjdCBIQVZFX0tWTV9JUlFfQllQQVNTCiAJc2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTQogCXNlbGVjdCBIQVZFX0tWTV9WQ1BVX1JVTl9QSURfQ0hBTkdFCiYjNDM7CXNlbGVjdCBIQVZFX0tWTV9QVl9TVEVBTF9USU1FCiAJc2VsZWN0IFNDSEVEX0lORk8KIAlzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFMgaWYgUEVSRl9FVkVOVFMKIAlzZWxlY3QgS1ZNX0dVRVNUX01FTUZECmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9wdnRpbWUuYyBiL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jCmluZGV4IDRjZWFiYWE0YzMwYmQuLmE2N2Q5Mzg0NWQ3OTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jCkBAIC0xNCw3ICYjNDM7MTQsNyBAQCB2b2lkIGt2bV91cGRhdGVfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtJmd0O2t2bTsKIAl1NjQgYmFzZSA9IHZjcHUtJmd0O2FyY2guc3RlYWwuYmFzZTsKLQl1NjQgbGFzdF9zdGVhbCA9IHZjcHUtJmd0O2FyY2guc3RlYWwubGFzdF9zdGVhbDsKJiM0MzsJdTY0IGxhc3Rfc3RlYWwgPSB2Y3B1LSZndDtsYXN0X3N0ZWFsOwogCXU2NCBvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcHZjbG9ja192Y3B1X3N0b2xlbl90aW1lLCBzdG9sZW5fdGltZSk7CiAJdTY0IHN0ZWFsID0gMDsKIAlpbnQgaWR4OwpAQCAtMjUsOCAmIzQzOzI1LDggQEAgdm9pZCBrdm1fdXBkYXRlX3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZHggPSBzcmN1X3JlYWRfbG9jaygmYW1wO2t2bS0mZ3Q7c3JjdSk7CiAJaWYgKCFrdm1fZ2V0X2d1ZXN0KGt2bSwgYmFzZSAmIzQzOyBvZmZzZXQsIHN0ZWFsKSkgewogCQlzdGVhbCA9IGxlNjRfdG9fY3B1KHN0ZWFsKTsKLQkJdmNwdS0mZ3Q7YXJjaC5zdGVhbC5sYXN0X3N0ZWFsID0gUkVBRF9PTkNFKGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5KTsKLQkJc3RlYWwgJiM0Mzs9IHZjcHUtJmd0O2FyY2guc3RlYWwubGFzdF9zdGVhbCAtIGxhc3Rfc3RlYWw7CiYjNDM7CQl2Y3B1LSZndDtsYXN0X3N0ZWFsID0gUkVBRF9PTkNFKGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5KTsKJiM0MzsJCXN0ZWFsICYjNDM7PSB2Y3B1LSZndDtsYXN0X3N0ZWFsIC0gbGFzdF9zdGVhbDsKIAkJa3ZtX3B1dF9ndWVzdChrdm0sIGJhc2UgJiM0Mzsgb2Zmc2V0LCBjcHVfdG9fbGU2NChzdGVhbCkpOwogCX0KIAlzcmN1X3JlYWRfdW5sb2NrKCZhbXA7a3ZtLSZndDtzcmN1LCBpZHgpOwpAQCAtNjEsNyAmIzQzOzYxLDcgQEAgZ3BhX3Qga3ZtX2luaXRfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCSAqIFN0YXJ0IGNvdW50aW5nIHN0b2xlbiB0aW1lIGZyb20gdGhlIHRpbWUgdGhlIGd1ZXN0IHJlcXVlc3RzCiAJICogdGhlIGZlYXR1cmUgZW5hYmxlZC4KIAkgKi8KLQl2Y3B1LSZndDthcmNoLnN0ZWFsLmxhc3Rfc3RlYWwgPSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheTsKJiM0MzsJdmNwdS0mZ3Q7bGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwogCWt2bV93cml0ZV9ndWVzdF9sb2NrKGt2bSwgYmFzZSwgJmFtcDtpbml0X3ZhbHVlcywgc2l6ZW9mKGluaXRfdmFsdWVzKSk7CiAKIAlyZXR1cm4gYmFzZTsKZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDIzY2ZiZWNlYmJkNzkuLjE0NTE0YTI1YjI2MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMjUzLDcgJiM0MzsyNTMsNiBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7CiAJLyogcGFyYXZpcnQgc3RlYWwgdGltZSAqLwogCXN0cnVjdCB7CiAJCXU2NCBndWVzdF9hZGRyOwotCQl1NjQgbGFzdF9zdGVhbDsKIAkJc3RydWN0IGdmbl90b19odmFfY2FjaGUgY2FjaGU7CiAJCXU4ICBwcmVlbXB0ZWQ7CiAJfSBzdDsKZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnIGIvYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWcKaW5kZXggMTVkYTJkODhjMGMxMC4uNDk5NmVjOWMwN2Y5OSAxMDA2NDQKLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWcKQEAgLTI2LDYgJiM0MzsyNiw3IEBAIGNvbmZpZyBLVk0KIAlzZWxlY3QgSEFWRV9LVk1fTVNJCiAJc2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTQogCXNlbGVjdCBLVk1fQ09NTU9OCiYjNDM7CXNlbGVjdCBIQVZFX0tWTV9QVl9TVEVBTF9USU1FCiAJc2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVAogCXNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElORwogCXNlbGVjdCBLVk1fTU1JTwpkaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmMKaW5kZXggNGY1OGU2ZTJjZjg2Ni4uNTZhZTZiMThmOGMxMCAxMDA2NDQKLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jCkBAIC03NzMsNyAmIzQzOzc3Myw3IEBAIHN0YXRpYyBsb25nIGt2bV9zYXZlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCWlmICghKGRhdGEgJmFtcDsgS1ZNX1NURUFMX1BIWVNfVkFMSUQpKQogCQkJcmV0dXJuIDA7CiAKLQkJdmNwdS0mZ3Q7YXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7CiYjNDM7CQl2Y3B1LSZndDtsYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7CiAJCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpOwogCQlyZXR1cm4gMDsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMKaW5kZXggZWQ5ZTA5MmM5N2JhNy4uNzI4ZDI5ZWJhOGUwMyAxMDA2NDQKLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jCkBAIC0xODcsOCAmIzQzOzE4Nyw4IEBAIHN0YXRpYyB2b2lkIGt2bV91cGRhdGVfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXNtcF93bWIoKTsKIAogCXVuc2FmZV9nZXRfdXNlcihzdGVhbCwgJmFtcDtzdC0mZ3Q7c3RlYWwsIG91dCk7Ci0Jc3RlYWwgJiM0Mzs9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5IC0gdmNwdS0mZ3Q7YXJjaC5zdC5sYXN0X3N0ZWFsOwotCXZjcHUtJmd0O2FyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwomIzQzOwlzdGVhbCAmIzQzOz0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXkgLSB2Y3B1LSZndDtsYXN0X3N0ZWFsOwomIzQzOwl2Y3B1LSZndDtsYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7CiAJdW5zYWZlX3B1dF91c2VyKHN0ZWFsLCAmYW1wO3N0LSZndDtzdGVhbCwgb3V0KTsKIAogCXNtcF93bWIoKTsKQEAgLTEyMDUsNyAmIzQzOzEyMDUsNyBAQCBzdGF0aWMgaW50IGt2bV9sb29uZ2FyY2hfcHZ0aW1lX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAogCWlmICghcmV0KSB7CiAJCXZjcHUtJmd0O2FyY2guc3QuZ3Vlc3RfYWRkciA9IGdwYTsKLQkJdmNwdS0mZ3Q7YXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7CiYjNDM7CQl2Y3B1LSZndDtsYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7CiAJCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IGEzMDYwMDU3OTIzMWIuLjMwNTg3NTMwMWMwNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTI3Myw3ICYjNDM7MjczLDYgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2ggewogCS8qIFNCSSBzdGVhbC10aW1lIGFjY291bnRpbmcgKi8KIAlzdHJ1Y3QgewogCQlncGFfdCBzaG1lbTsKLQkJdTY0IGxhc3Rfc3RlYWw7CiAJfSBzdGE7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnIGIvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZwppbmRleCBlYzJjZWUwYTM5ZTAxLi4xZmYwN2E5MDRhMDI3IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWcKQEAgLTI2LDYgJiM0MzsyNiw3IEBAIGNvbmZpZyBLVk0KIAlzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNCiAJc2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTAogCXNlbGVjdCBLVk1fQ09NTU9OCiYjNDM7CXNlbGVjdCBIQVZFX0tWTV9QVl9TVEVBTF9USU1FCiAJc2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVAogCXNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElORwogCXNlbGVjdCBLVk1fTU1JTwpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfc3RhLmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9zdGEuYwppbmRleCA2MGU1MDI5NmEwMDg1Li45YTc3ZDNiZGU3YzcyIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9zdGEuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9zdGEuYwpAQCAtMTksMTMgJiM0MzsxOSwxMyBAQAogc3RhdGljIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfc2JpX3N0YV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdmNwdS0mZ3Q7YXJjaC5zdGEuc2htZW0gPSBJTlZBTElEX0dQQTsKLQl2Y3B1LSZndDthcmNoLnN0YS5sYXN0X3N0ZWFsID0gMDsKJiM0MzsJdmNwdS0mZ3Q7bGFzdF9zdGVhbCA9IDA7CiB9CiAKIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWdwYV90IHNobWVtID0gdmNwdS0mZ3Q7YXJjaC5zdGEuc2htZW07Ci0JdTY0IGxhc3Rfc3RlYWwgPSB2Y3B1LSZndDthcmNoLnN0YS5sYXN0X3N0ZWFsOwomIzQzOwl1NjQgbGFzdF9zdGVhbCA9IHZjcHUtJmd0O2xhc3Rfc3RlYWw7CiAJX19sZTMyIF9fdXNlciAqc2VxdWVuY2VfcHRyOwogCV9fbGU2NCBfX3VzZXIgKnN0ZWFsX3B0cjsKIAlfX2xlMzIgc2VxdWVuY2VfbGU7CkBAIC02Nyw4ICYjNDM7NjcsOCBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X3JlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogCWlmICghV0FSTl9PTihnZXRfdXNlcihzdGVhbF9sZSwgc3RlYWxfcHRyKSkpIHsKIAkJc3RlYWwgPSBsZTY0X3RvX2NwdShzdGVhbF9sZSk7Ci0JCXZjcHUtJmd0O2FyY2guc3RhLmxhc3Rfc3RlYWwgPSBSRUFEX09OQ0UoY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXkpOwotCQlzdGVhbCAmIzQzOz0gdmNwdS0mZ3Q7YXJjaC5zdGEubGFzdF9zdGVhbCAtIGxhc3Rfc3RlYWw7CiYjNDM7CQl2Y3B1LSZndDtsYXN0X3N0ZWFsID0gUkVBRF9PTkNFKGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5KTsKJiM0MzsJCXN0ZWFsICYjNDM7PSB2Y3B1LSZndDtsYXN0X3N0ZWFsIC0gbGFzdF9zdGVhbDsKIAkJV0FSTl9PTihwdXRfdXNlcihjcHVfdG9fbGU2NChzdGVhbCksIHN0ZWFsX3B0cikpOwogCX0KIApAQCAtMTE1LDcgJiM0MzsxMTUsNyBAQCBzdGF0aWMgaW50IGt2bV9zYmlfc3RhX3N0ZWFsX3RpbWVfc2V0X3NobWVtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJcmV0dXJuIFNCSV9FUlJfSU5WQUxJRF9BRERSRVNTOwogCiAJdmNwdS0mZ3Q7YXJjaC5zdGEuc2htZW0gPSBzaG1lbTsKLQl2Y3B1LSZndDthcmNoLnN0YS5sYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7CiYjNDM7CXZjcHUtJmd0O2xhc3Rfc3RlYWwgPSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggNjgzYmI4YmY0M2E5NC4uZWJkZDg1MjZhZTEyNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC04NzIsNyAmIzQzOzg3Miw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHsKIAlzdHJ1Y3QgewogCQl1OCBwcmVlbXB0ZWQ7CiAJCXU2NCBtc3JfdmFsOwotCQl1NjQgbGFzdF9zdGVhbDsKIAkJc3RydWN0IGdmbl90b19odmFfY2FjaGUgY2FjaGU7CiAJfSBzdDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL0tjb25maWcgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZwppbmRleCA1MzhlZDFlODAzMzI2Li5iMmFlYTgwNTg4NDEzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZwpAQCAtNDAsNiAmIzQzOzQwLDcgQEAgY29uZmlnIEtWTV9YODYKIAlzZWxlY3QgSEFWRV9LVk1fTVNJCiAJc2VsZWN0IEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFQKIAlzZWxlY3QgSEFWRV9LVk1fTk9fUE9MTAomIzQzOwlzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRQogCXNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SSwogCXNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1QKIAlzZWxlY3QgS1ZNX1ZGSU8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuYwppbmRleCA3OTQ2OGRkZmU0NzM2Li45MjdjOGIxZWQ4M2QyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jCkBAIC0yMTI5LDkgJiM0MzsyMTI5LDggQEAgc3RhdGljIHZvaWQgcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXNtcF93bWIoKTsKIAogCXVuc2FmZV9nZXRfdXNlcihzdGVhbCwgJmFtcDtzdC0mZ3Q7c3RlYWwsIG91dCk7Ci0Jc3RlYWwgJiM0Mzs9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5IC0KLQkJdmNwdS0mZ3Q7YXJjaC5zdC5sYXN0X3N0ZWFsOwotCXZjcHUtJmd0O2FyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwomIzQzOwlzdGVhbCAmIzQzOz0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXkgLSB2Y3B1LSZndDtsYXN0X3N0ZWFsOwomIzQzOwl2Y3B1LSZndDtsYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7CiAJdW5zYWZlX3B1dF91c2VyKHN0ZWFsLCAmYW1wO3N0LSZndDtzdGVhbCwgb3V0KTsKIAogCXZlcnNpb24gJiM0Mzs9IDE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggMDNiZmM5Mjg2NGI2ZS4uZmY5ZDQyM2I2YTdjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaApAQCAtMzk4LDYgJiM0MzszOTgsMTAgQEAgc3RydWN0IGt2bV92Y3B1IHsKIAkgKi8KIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpsYXN0X3VzZWRfc2xvdDsKIAl1NjQgbGFzdF91c2VkX3Nsb3RfZ2VuOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fUFZfU1RFQUxfVElNRQomIzQzOwl1NjQgbGFzdF9zdGVhbDsKJiM0MzsjZW5kaWYKIH07CiAKIC8qCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQppbmRleCA5NmJhYjcwMDJkMzllLi4xZGUxM2MwMDE3ZTQzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KQEAgLTE2NCw2ICYjNDM7MTY0LDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBpcnFfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBtbXVfc3RyZXNzX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gcnNlcV90ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHN0ZWFsX3RpbWUKJiM0MztURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHN0ZWFsX3RpbWVfY2hhbmdlX3BpZAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBzeXN0ZW1fY291bnRlcl9vZmZzZXRfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBwcmVfZmF1bHRfbWVtb3J5X3Rlc3QKIApAQCAtMjA0LDYgJiM0MzsyMDUsNyBAQCBURVNUX0dFTl9QUk9HU19hcm02NCAmIzQzOz0gZ3Vlc3RfbWVtZmRfdGVzdAogVEVTVF9HRU5fUFJPR1NfYXJtNjQgJiM0Mzs9IG1tdV9zdHJlc3NfdGVzdAogVEVTVF9HRU5fUFJPR1NfYXJtNjQgJiM0Mzs9IHJzZXFfdGVzdAogVEVTVF9HRU5fUFJPR1NfYXJtNjQgJiM0Mzs9IHN0ZWFsX3RpbWUKJiM0MztURVNUX0dFTl9QUk9HU19hcm02NCAmIzQzOz0gc3RlYWxfdGltZV9jaGFuZ2VfcGlkCiAKIFRFU1RfR0VOX1BST0dTX3MzOTAgPSAkKFRFU1RfR0VOX1BST0dTX0NPTU1PTikKIFRFU1RfR0VOX1BST0dTX3MzOTAgJiM0Mzs9IHMzOTAvbWVtb3AKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lX2NoYW5nZV9waWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lX2NoYW5nZV9waWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4xMmQ0OTI3ZDFjMDE3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWVfY2hhbmdlX3BpZC5jCkBAIC0wLDAgJiM0MzsxLDIxNiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBWZXJpZnkgdGhhdCBLVk0gcmVzZXRzIHN0ZWFsLXRpbWUgYWNjb3VudGluZyB3aGVuIGEgdkNQVSBmZCBpcyBydW4gZnJvbQomIzQzOyAqIGEgZGlmZmVyZW50IGhvc3QgUElELgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtwdGhyZWFkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fcGFyYS5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtwcm9jZXNzb3IuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBTVF9HUEFfQkFTRQkJKDEgJmx0OyZsdDsgMzApCiYjNDM7I2RlZmluZSBTVF9TQU5FX0RFTFRBX05TCSgxVUxMICZsdDsmbHQ7IDYzKQomIzQzOwomIzQzO3N0YXRpYyB2b2lkICpzdF9ndmE7CiYjNDM7c3RhdGljIHU2NCBndWVzdF9zdG9sZW5fdGltZTsKJiM0MztzdGF0aWMgdTY0IG1haW5fc3RlYWw7CiYjNDM7c3RhdGljIHU2NCB0aHJlYWRfc3RlYWw7CiYjNDM7CiYjNDM7I2lmIGRlZmluZWQoX194ODZfNjRfXykKJiM0MzsKJiM0MzsjZGVmaW5lIFNURUFMX1RJTUVfU0laRQkoKHNpemVvZihzdHJ1Y3Qga3ZtX3N0ZWFsX3RpbWUpICYjNDM7IDYzKSAmYW1wOyB+NjMpCiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9zdGVhbF90aW1lICpzdCA9IHN0X2d2YTsKJiM0MzsKJiM0MzsJV1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LSZndDtzdGVhbCkpOwomIzQzOwlHVUVTVF9TWU5DKDApOwomIzQzOwomIzQzOwlXUklURV9PTkNFKGd1ZXN0X3N0b2xlbl90aW1lLCBSRUFEX09OQ0Uoc3QtJmd0O3N0ZWFsKSk7CiYjNDM7CUdVRVNUX1NZTkMoMSk7CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC0mZ3Q7c3RlYWwpKTsKJiM0MzsJR1VFU1RfRE9ORSgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBzdGVhbF90aW1lX3N1cHBvcnRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlyZXR1cm4ga3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfS1ZNX1NURUFMX1RJTUUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2VuYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwl2Y3B1X3NldF9tc3IodmNwdSwgTVNSX0tWTV9TVEVBTF9USU1FLAomIzQzOwkJICAgICAodWxvbmcpc3RfZ3ZhIHwgS1ZNX01TUl9FTkFCTEVEKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VsaWYgZGVmaW5lZChfX2FhcmNoNjRfXykKJiM0MzsKJiM0MzsjZGVmaW5lIFNURUFMX1RJTUVfU0laRQkoKHNpemVvZihzdHJ1Y3Qgc3RfdGltZSkgJiM0MzsgNjMpICZhbXA7IH42MykKJiM0MzsKJiM0MzsjZGVmaW5lIFBWX1RJTUVfU1QJMHhjNTAwMDAyMQomIzQzOwomIzQzO3N0cnVjdCBzdF90aW1lIHsKJiM0MzsJdTMyIHJldjsKJiM0MzsJdTMyIGF0dHI7CiYjNDM7CXU2NCBzdF90aW1lOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGFybV9zbWNjY19yZXMgcmVzOwomIzQzOwlzdHJ1Y3Qgc3RfdGltZSAqc3Q7CiYjNDM7CiYjNDM7CWRvX3NtY2NjKFBWX1RJTUVfU1QsIDAsIDAsIDAsIDAsIDAsIDAsIDAsICZhbXA7cmVzKTsKJiM0MzsJR1VFU1RfQVNTRVJUX05FKHJlcy5hMCwgLTEpOwomIzQzOwlHVUVTVF9BU1NFUlRfRVEocmVzLmEwLCAodWxvbmcpc3RfZ3ZhKTsKJiM0MzsKJiM0MzsJc3QgPSAoc3RydWN0IHN0X3RpbWUgKilyZXMuYTA7CiYjNDM7CVdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC0mZ3Q7c3RfdGltZSkpOwomIzQzOwlHVUVTVF9TWU5DKDApOwomIzQzOwomIzQzOwlXUklURV9PTkNFKGd1ZXN0X3N0b2xlbl90aW1lLCBSRUFEX09OQ0Uoc3QtJmd0O3N0X3RpbWUpKTsKJiM0MzsJR1VFU1RfU1lOQygxKTsKJiM0MzsKJiM0MzsJV1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LSZndDtzdF90aW1lKSk7CiYjNDM7CUdVRVNUX0RPTkUoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgc3RlYWxfdGltZV9zdXBwb3J0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9kZXZpY2VfYXR0ciBkZXYgPSB7CiYjNDM7CQkuZ3JvdXAgPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0NUUkwsCiYjNDM7CQkuYXR0ciA9IEtWTV9BUk1fVkNQVV9QVlRJTUVfSVBBLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gIV9fdmNwdV9pb2N0bCh2Y3B1LCBLVk1fSEFTX0RFVklDRV9BVFRSLCAmYW1wO2Rldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHN0ZWFsX3RpbWVfZW5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXU2NCBzdF9pcGEgPSAodWxvbmcpc3RfZ3ZhOwomIzQzOwlzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyIGRldiA9IHsKJiM0MzsJCS5ncm91cCA9IEtWTV9BUk1fVkNQVV9QVlRJTUVfQ1RSTCwKJiM0MzsJCS5hdHRyID0gS1ZNX0FSTV9WQ1BVX1BWVElNRV9JUEEsCiYjNDM7CQkuYWRkciA9ICh1NjQpJmFtcDtzdF9pcGEsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXZjcHVfaW9jdGwodmNwdSwgS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgJmFtcDtkZXYpOwomIzQzO30KJiM0MzsKJiM0MzsjZWxzZQomIzQzOyNlcnJvciAmIzM0O3N0ZWFsX3RpbWVfY2hhbmdlX3BpZCBpcyBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBhcmNoaXRlY3R1cmUmIzM0OwomIzQzOyNlbmRpZgomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB1Y2FsbCB1YzsKJiM0MzsKJiM0MzsJdmNwdV9ydW4odmNwdSk7CiYjNDM7CiYjNDM7CXN3aXRjaCAoZ2V0X3VjYWxsKHZjcHUsICZhbXA7dWMpKSB7CiYjNDM7CWNhc2UgVUNBTExfU1lOQzoKJiM0MzsJY2FzZSBVQ0FMTF9ET05FOgomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgVUNBTExfQUJPUlQ6CiYjNDM7CQlSRVBPUlRfR1VFU1RfQVNTRVJUKHVjKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCVRFU1RfQVNTRVJUKGZhbHNlLCAmIzM0O1VuZXhwZWN0ZWQgZXhpdDogJXMmIzM0OywKJiM0MzsJCQkgICAgZXhpdF9yZWFzb25fc3RyKHZjcHUtJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24pKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqZG9fc3RlYWxfdGltZSh2b2lkICphcmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGltZXNwZWMgdHMsIHN0b3A7CiYjNDM7CiYjNDM7CWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmYW1wO3RzKTsKJiM0MzsJc3RvcCA9IHRpbWVzcGVjX2FkZF9ucyh0cywgTUlOX1JVTl9ERUxBWV9OUyk7CiYjNDM7CiYjNDM7CXdoaWxlICh0aW1lc3BlY190b19ucyh0aW1lc3BlY19zdWIodHMsIHN0b3ApKSAmbHQ7IDApCiYjNDM7CQljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJmFtcDt0cyk7CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqdmNwdV90aHJlYWQodm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gYXJnOwomIzQzOwomIzQzOwlydW5fdmNwdSh2Y3B1KTsKJiM0MzsJc3luY19nbG9iYWxfZnJvbV9ndWVzdCh2Y3B1LSZndDt2bSwgZ3Vlc3Rfc3RvbGVuX3RpbWUpOwomIzQzOwl0aHJlYWRfc3RlYWwgPSBndWVzdF9zdG9sZW5fdGltZTsKJiM0MzsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlwdGhyZWFkX2F0dHJfdCBhdHRyOwomIzQzOwlwdGhyZWFkX3QgdGhyZWFkOwomIzQzOwljcHVfc2V0X3QgY3B1c2V0OwomIzQzOwlsb25nIHJ1bl9kZWxheTsKJiM0MzsJbG9uZyBydW5fZGVsYXlfZGVsdGE7CiYjNDM7CiYjNDM7CWtzZnRfcHJpbnRfaGVhZGVyKCk7CiYjNDM7CWtzZnRfc2V0X3BsYW4oMSk7CiYjNDM7CiYjNDM7CUNQVV9aRVJPKCZhbXA7Y3B1c2V0KTsKJiM0MzsJQ1BVX1NFVCgwLCAmYW1wO2NwdXNldCk7CiYjNDM7CXB0aHJlYWRfYXR0cl9pbml0KCZhbXA7YXR0cik7CiYjNDM7CXB0aHJlYWRfYXR0cl9zZXRhZmZpbml0eV9ucCgmYW1wO2F0dHIsIHNpemVvZihjcHVzZXQpLCAmYW1wO2NwdXNldCk7CiYjNDM7CXB0aHJlYWRfc2V0YWZmaW5pdHlfbnAocHRocmVhZF9zZWxmKCksIHNpemVvZihjcHVzZXQpLCAmYW1wO2NwdXNldCk7CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoJmFtcDt2Y3B1LCBndWVzdF9jb2RlKTsKJiM0MzsJdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywKJiM0MzsJCQkJICAgIFNUX0dQQV9CQVNFLCAxLCAxLCAwKTsKJiM0MzsJdmlydF9tYXAodm0sIFNUX0dQQV9CQVNFLCBTVF9HUEFfQkFTRSwgMSk7CiYjNDM7CiYjNDM7CXN0X2d2YSA9ICh2b2lkICopU1RfR1BBX0JBU0U7CiYjNDM7CXN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBzdF9ndmEpOwomIzQzOwltZW1zZXQoYWRkcl9ndmEyaHZhKHZtLCBTVF9HUEFfQkFTRSksIDAsIFNURUFMX1RJTUVfU0laRSk7CiYjNDM7CiYjNDM7CVRFU1RfUkVRVUlSRShzdGVhbF90aW1lX3N1cHBvcnRlZCh2Y3B1KSk7CiYjNDM7CiYjNDM7CXN0ZWFsX3RpbWVfZW5hYmxlKHZjcHUpOwomIzQzOwlydW5fdmNwdSh2Y3B1KTsKJiM0MzsKJiM0MzsJcnVuX2RlbGF5ID0gZ2V0X3J1bl9kZWxheSgpOwomIzQzOwlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZCwgJmFtcDthdHRyLCBkb19zdGVhbF90aW1lLCBOVUxMKTsKJiM0MzsKJiM0MzsJd2hpbGUgKGdldF9ydW5fZGVsYXkoKSAtIHJ1bl9kZWxheSAmbHQ7IE1JTl9SVU5fREVMQVlfTlMpCiYjNDM7CQlzY2hlZF95aWVsZCgpOwomIzQzOwomIzQzOwlwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTsKJiM0MzsJcnVuX2RlbGF5X2RlbHRhID0gZ2V0X3J1bl9kZWxheSgpIC0gcnVuX2RlbGF5OwomIzQzOwlURVNUX0FTU0VSVChydW5fZGVsYXlfZGVsdGEgJmd0Oz0gTUlOX1JVTl9ERUxBWV9OUywKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHJ1bl9kZWxheSAmZ3Q7PSAlbGQsIGdvdCAlbGQmIzM0OywKJiM0MzsJCSAgICBNSU5fUlVOX0RFTEFZX05TLCBydW5fZGVsYXlfZGVsdGEpOwomIzQzOwomIzQzOwlydW5fdmNwdSh2Y3B1KTsKJiM0MzsJc3luY19nbG9iYWxfZnJvbV9ndWVzdCh2bSwgZ3Vlc3Rfc3RvbGVuX3RpbWUpOwomIzQzOwltYWluX3N0ZWFsID0gZ3Vlc3Rfc3RvbGVuX3RpbWU7CiYjNDM7CiYjNDM7CVRFU1RfQVNTRVJUKG1haW5fc3RlYWwgJmd0Oz0gTUlOX1JVTl9ERUxBWV9OUywKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHN0ZWFsIHRpbWUgJmd0Oz0gJWxkLCBnb3QgJSYjMzQ7UFJJdTY0LAomIzQzOwkJICAgIE1JTl9SVU5fREVMQVlfTlMsIG1haW5fc3RlYWwpOwomIzQzOwomIzQzOwlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZCwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHUpOwomIzQzOwlwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTsKJiM0MzsKJiM0MzsJVEVTVF9BU1NFUlQodGhyZWFkX3N0ZWFsICZndDs9IG1haW5fc3RlYWwgJmFtcDsmYW1wOwomIzQzOwkJICAgIHRocmVhZF9zdGVhbCAtIG1haW5fc3RlYWwgJmx0OyBTVF9TQU5FX0RFTFRBX05TLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgc2FuZSBzdGVhbCBhZnRlciB2Q1BVIHBpZCBjaGFuZ2U6ICYjMzQ7CiYjNDM7CQkgICAgJiMzNDtvbGQ9JSYjMzQ7UFJJdTY0JiMzNDssIG5ldz0lJiMzNDtQUkl1NjQsCiYjNDM7CQkgICAgbWFpbl9zdGVhbCwgdGhyZWFkX3N0ZWFsKTsKJiM0MzsKJiM0MzsJa3NmdF90ZXN0X3Jlc3VsdF9wYXNzKCYjMzQ7c3RlYWwgdGltZSByZW1haW5zIHNhbmUgYWNyb3NzIHZDUFUgcGlkIGNoYW5nZVxuJiMzNDspOwomIzQzOwomIzQzOwlwdGhyZWFkX2F0dHJfZGVzdHJveSgmYW1wO2F0dHIpOwomIzQzOwlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7CWtzZnRfZmluaXNoZWQoKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9LY29uZmlnIGIvdmlydC9rdm0vS2NvbmZpZwppbmRleCBjM2MwZWUyNTNmYzc3Li5mNDJhM2EwZmM1YmFiIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL0tjb25maWcKQEAgLTgyLDYgJiM0Mzs4Miw5IEBAIGNvbmZpZyBIQVZFX0tWTV9JUlFfQllQQVNTCiBjb25maWcgSEFWRV9LVk1fVkNQVV9SVU5fUElEX0NIQU5HRQogICAgICAgIGJvb2wKIAomIzQzO2NvbmZpZyBIQVZFX0tWTV9QVl9TVEVBTF9USU1FCiYjNDM7ICAgICAgIGJvb2wKJiM0MzsKIGNvbmZpZyBIQVZFX0tWTV9OT19QT0xMCiAgICAgICAgYm9vbAogCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCA2NWViMjZhMDUyMGQ4Li43ODRmMGQ5NDViNDU2IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTQ0NzgsNiAmIzQzOzQ0NzgsMTAgQEAgc3RhdGljIGxvbmcga3ZtX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCiAJCQlpZiAocikKIAkJCQlicmVhazsKIAomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fUFZfU1RFQUxfVElNRQomIzQzOwkJCXZjcHUtJmd0O2xhc3Rfc3RlYWwgPSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheTsKJiM0MzsjZW5kaWYKJiM0MzsKIAkJCW5ld3BpZCA9IGdldF90YXNrX3BpZChjdXJyZW50LCBQSURUWVBFX1BJRCk7CiAJCQl3cml0ZV9sb2NrKCZhbXA7dmNwdS0mZ3Q7cGlkX2xvY2spOwogCQkJdmNwdS0mZ3Q7cGlkID0gbmV3cGlkOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTExMQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiB3ZSBuZWVkIHRvIGJyaW5nIEtNU0FOIGludG8gdGhlIHBpY3R1cmUuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBjaGFuZ2UgcmVsYXRlZCB0byBob3cgc3RlYWwgdGltZSBpcyB0cmFja2VkIGFjcm9zcyBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyB3aXRoaW4gS1ZNLgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHdoYXQmIzM5O3MgYmVlbiBtb3ZlZC4gSXQgbG9va3MgbGlrZSBgbGFzdF9zdGVhbGAgaGFzIGJlZW4gcmVmYWN0b3JlZC4gU3BlY2lmaWNhbGx5LCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGB2Y3B1LSZndDthcmNoLnN0ZWFsLmxhc3Rfc3RlYWxgIChvciBzaW1pbGFyIHZhcmlhbnRzIGZvciBhcm02NCwgbG9vbmdhcmNoLCByaXNjdiwgYW5kIHg4NikgYXJlIGJlaW5nIHJlcGxhY2VkIGJ5IGEgZ2VuZXJpYyBgdmNwdS0mZ3Q7bGFzdF9zdGVhbGAgd2l0aGluIHRoZSBgc3RydWN0IGt2bV92Y3B1YC4gVGhlIGFkZGl0aW9uIG9mIHRoZSBgI2lmZGVmIENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FYCBndWFyZCBzdWdnZXN0cyB0aGF0IHRoaXMgcmVmYWN0b3JpbmcgaXMgY29uZGl0aW9uYWwgYW5kIG1pZ2h0IGJlIHVzZWQgdG8gYWJzdHJhY3Qgb3V0IHRoZSBzdGVhbCB0aW1lIGFjY291bnRpbmcuCgpUaGVuIHRoZXJlJiMzOTtzIHRoZSBhZGRlZCBjb2RlIHNuaXBwZXQgaW4gYGt2bV92Y3B1X2lvY3RsYCB1bmRlciBgS1ZNX1JVTmAgKG9yIHBvdGVudGlhbGx5IHNpbWlsYXIgY29uZGl0aW9ucyB3aGVyZSB0aGUgdkNQVSBQSUQgY2hhbmdlcykuIEhlcmUmIzM5O3Mgd2hlcmUgdGhlIHVwZGF0ZSB0byBgdmNwdS0mZ3Q7bGFzdF9zdGVhbGAgaGFwcGVuczogYHZjcHUtJmd0O2xhc3Rfc3RlYWwgPSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheTtgIEFnYWluLCB0aGUgYCNpZmRlZmAgc2hvd3MgaXQmIzM5O3MgY29uZGl0aW9uYWwuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSAqYWN0dWFsKiB2YWx1ZSBvZiBgbGFzdF9zdGVhbGAgaXMgYmVpbmcgc2V0LCB3aGljaCBjb3VsZCBiZSByZWxldmFudCBmcm9tIGEgS01TQU4gcGVyc3BlY3RpdmUuIElmIGBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheWAgaXMgbm90IHByb3Blcmx5IGluaXRpYWxpemVkIG9yIGlmIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoaXMgaXMgZXhlY3V0ZWQgZG9uJiMzOTt0IGd1YXJhbnRlZSBpbml0aWFsaXphdGlvbiwgd2UgY291bGQgaGF2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYHZpcnQva3ZtL2t2bV9tYWluLmNgIGFyb3VuZCBsaW5lIDQ0NzgsIHRvIHZlcmlmeSB0aGlzIGluZm9ybWF0aW9uLCB0byBzZWUgdGhlIGNvbnRleHQgYW5kIHN1cnJvdW5kaW5nIGNvZGUgd2l0aCBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAg4oCTIGhvcGVmdWxseSB0aGVyZSBpc24mIzM5O3QgdG9vIG11Y2ggdG8gaGF2ZSB0byBnbyB0aHJvdWdoLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlIGFuZCBmbGFnZ2luZyBhbnkgcG90ZW50aWFsIEtNU0FOIGNvbmNlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtIQVZFX0tWTV9QVl9TVEVBTF9USU1FJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9MjA9bWVudWNvbmZpZyBLVk1cbi0tXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM2LVx0c2VsZWN0IEhBVkVfS1ZNX1ZDUFVfUlVOX1BJRF9DSEFOR0VcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6Mzc6XHRzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zOC1cdHNlbGVjdCBTQ0hFRF9JTkZPXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTI4LVx0c2VsZWN0IEtWTV9DT01NT05cbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnOjI5Olx0c2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTMwLVx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuLS1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTVxuLS1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjgtXHRzZWxlY3QgS1ZNX0NPTU1PTlxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzoyOTpcdHNlbGVjdCBIQVZFX0tWTV9QVl9TVEVBTF9USU1FXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTMwLVx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNDItXHRzZWxlY3QgSEFWRV9LVk1fTk9fUE9MTFxuYXJjaC94ODYva3ZtL0tjb25maWc6NDM6XHRzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxuYXJjaC94ODYva3ZtL0tjb25maWctNDQtXHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MzI1PXN0cnVjdCBrdm1fdmNwdSB7XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTQwMS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDo0MDI6I2lmZGVmIENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtNDAzLVx0dTY0IGxhc3Rfc3RlYWw7XG4tLVxudmlydC9rdm0vS2NvbmZpZz04Mj1jb25maWcgSEFWRV9LVk1fVkNQVV9SVU5fUElEX0NIQU5HRVxuLS1cbnZpcnQva3ZtL0tjb25maWctODQtXG52aXJ0L2t2bS9LY29uZmlnOjg1OmNvbmZpZyBIQVZFX0tWTV9QVl9TVEVBTF9USU1FXG52aXJ0L2t2bS9LY29uZmlnLTg2LSAgICAgICBib29sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz00NDI1PXN0YXRpYyBsb25nIGt2bV92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDQ4MC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NDQ4MTojaWZkZWYgQ09ORklHX0hBVkVfS1ZNX1BWX1NURUFMX1RJTUVcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDQ4Mi1cdFx0XHR2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU4OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gS1ZNIENvcmU6IExpbmUgNDQ3OCBpbiBga3ZtX21haW4uY2AqKgoKT2theSwgSSBuZWVkIHRvIGdldCB0byB0aGUgaGVhcnQgb2Ygc29tZXRoaW5nIHJlbGF0ZWQgdG8gS1ZNJiMzOTtzIG9wZXJhdGlvbi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgY29yZSwgYXMgaXQgd2VyZS4gSSYjMzk7bSBmb2N1c2luZyBvbiBgdmlydC9rdm0va3ZtX21haW4uY2AgYmVjYXVzZSB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIHRvcC1sZXZlbCBLVk0gbG9naWMgcmVzaWRlcy4gQW5kIEkmIzM5O20gemVyb2luZyBpbiBvbiBsaW5lIDQ0NzgsIHdoaWNoIG1lYW5zIEkmIzM5O3ZlIHByb2JhYmx5IGdvdCBhIHByZXR0eSBzcGVjaWZpYyBxdWVzdGlvbiBvciBpc3N1ZSBpbiBtaW5kIHRoYXQgSSB0aGluayBpcyBhZGRyZXNzZWQgYXJvdW5kIHRoYXQgYXJlYS4gS25vd2luZyB0aGUgY29kZWJhc2UsIEkmIzM5O20gZXhwZWN0aW5nIHNvbWV0aGluZyBjcml0aWNhbCB0byBiZSBoYXBwZW5pbmcgaW4gdGhhdCByZWdpb247IHBlcmhhcHMgYSBtYWpvciBpbml0aWFsaXphdGlvbiBzdGVwLCBhIGtleSBzdGF0ZSB0cmFuc2l0aW9uLCBvciBhbiBpbXBvcnRhbnQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyB2aXJ0dWFsaXphdGlvbiBoYXJkd2FyZS4gSSYjMzk7bSBnb2luZyBpbiB3aXRoIHRoZSBleHBlY3RhdGlvbiBvZiB1bmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHRvIGJ1aWxkIG15IHVuZGVyc3RhbmRpbmcuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQ2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NDY1Olx0XG40NDY2Olx0XHRcdC8qXG40NDY3Olx0XHRcdCAqIE5vdGUsIHZjcHUtXHUwMDNlcGlkIGlzIHByaW1hcmlseSBwcm90ZWN0ZWQgYnkgdmNwdS1cdTAwM2VtdXRleC4gVGhlXG40NDY4Olx0XHRcdCAqIGRlZGljYXRlZCByL3cgbG9jayBhbGxvd3Mgb3RoZXIgdGFza3MsIGUuZy4gb3RoZXIgdkNQVXMsIHRvXG40NDY5Olx0XHRcdCAqIHJlYWQgdmNwdS1cdTAwM2VwaWQgd2hpbGUgdGhpcyB2Q1BVIGlzIGluIEtWTV9SVU4sIGUuZy4gdG8geWllbGRcbjQ0NzA6XHRcdFx0ICogZGlyZWN0bHkgdG8gdGhpcyB2Q1BVXG40NDcxOlx0XHRcdCAqL1xuNDQ3MjpcdFx0XHRvbGRwaWQgPSB2Y3B1LVx1MDAzZXBpZDtcbjQ0NzM6XHRcdFx0aWYgKHVubGlrZWx5KG9sZHBpZCAhPSB0YXNrX3BpZChjdXJyZW50KSkpIHtcbjQ0NzQ6XHRcdFx0XHQvKiBUaGUgdGhyZWFkIHJ1bm5pbmcgdGhpcyBWQ1BVIGNoYW5nZWQuICovXG40NDc1Olx0XHRcdFx0c3RydWN0IHBpZCAqbmV3cGlkO1xuNDQ3NjpcdFxuNDQ3NzpcdFx0XHRcdHIgPSBrdm1fYXJjaF92Y3B1X3J1bl9waWRfY2hhbmdlKHZjcHUpO1xuNDQ3ODpcdFx0XHRcdGlmIChyKVxuNDQ3OTpcdFx0XHRcdFx0YnJlYWs7XG40NDgwOlx0XG40NDgxOlx0I2lmZGVmIENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FXG40NDgyOlx0XHRcdFx0dmNwdS1cdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbjQ0ODM6XHQjZW5kaWZcbjQ0ODQ6XHRcbjQ0ODU6XHRcdFx0XHRuZXdwaWQgPSBnZXRfdGFza19waWQoY3VycmVudCwgUElEVFlQRV9QSUQpO1xuNDQ4NjpcdFx0XHRcdHdyaXRlX2xvY2soXHUwMDI2dmNwdS1cdTAwM2VwaWRfbG9jayk7XG40NDg3Olx0XHRcdFx0dmNwdS1cdTAwM2VwaWQgPSBuZXdwaWQ7XG40NDg4Olx0XHRcdFx0d3JpdGVfdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNlcGlkX2xvY2spO1xuNDQ4OTpcdFxuNDQ5MDpcdFx0XHRcdHB1dF9waWQob2xkcGlkKTtcbjQ0OTE6XHRcdFx0fVxuNDQ5MjpcdFx0XHR2Y3B1LVx1MDAzZXdhbnRzX3RvX3J1biA9ICFSRUFEX09OQ0UodmNwdS1cdTAwM2VydW4tXHUwMDNlaW1tZWRpYXRlX2V4aXRfX3Vuc2FmZSk7XG40NDkzOlx0XHRcdHIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bih2Y3B1KTtcbjQ0OTQ6XHRcdFx0dmNwdS1cdTAwM2V3YW50c190b19ydW4gPSBmYWxzZTtcbjQ0OTU6XHRcbjQ0OTY6XHRcdFx0LypcbjQ0OTc6XHRcdFx0ICogRklYTUU6IFJlbW92ZSB0aGlzIGhhY2sgb25jZSBhbGwgS1ZNIGFyY2hpdGVjdHVyZXNcbjQ0OTg6XHRcdFx0ICogc3VwcG9ydCB0aGUgZ2VuZXJpYyBUSUYgYml0cywgaS5lLiBhIGRlZGljYXRlZCBUSUZfUlNFUS5cbjQ0OTk6XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDQwCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIEtWTSBjb2RlIGFuZCB0cmFjZSB0aGUgbGlmZWN5Y2xlIG9mIGEgdmlydHVhbCBDUFUgKGB2Y3B1YCkuIE15IHByaW1hcnkgaW50ZXJlc3QgaXMgaW4gdW5kZXJzdGFuZGluZyBob3cgYHZjcHVgIGl0c2VsZiBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLiBJIHdhbnQgdG8gc2VlIHRoaXMgZnJvbSBhIGxvdy1sZXZlbCBwZXJzcGVjdGl2ZSwgbGlrZSBhIGtlcm5lbCBoYWNrZXIuCgpNeSBoeXBvdGhlc2lzLCBiYXNlZCBvbiBwcmlvciBleHBlcmllbmNlLCBpcyB0aGF0IHdoZW4gYSBgdmNwdWAgaW5zdGFuY2UgaXMgbmVlZGVk4oCUY3JlYXRlZCBlaXRoZXIgdGhyb3VnaCBhbiBgaW9jdGxgIGNhbGwgbGlrZSBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBvciBhIGZ1bmN0aW9uIGxpa2UgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYOKAlHRoZSBhbGxvY2F0aW9uIG1lY2hhbmlzbSB3aWxsIGxpa2VseSB1dGlsaXplIGBremFsbG9jYCAob3IgcGVyaGFwcyBga21lbV9jYWNoZV96YWxsb2NgKSB0byBlbnN1cmUgYSB6ZXJvLWluaXRpYWxpemVkIG1lbW9yeSBibG9jay4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGluIHRoZSBrZXJuZWwuCgpTbywgdGhlIG5leHQgc3RlcCBpcyB0byBnZXQgc29tZSB2ZXJpZmljYXRpb24gb24gdGhpcy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcywgaW4gZmFjdCwgdGhlIGFsbG9jYXRpb24gbWV0aG9kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF92Y3B1X2NyZWF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9hcm0uYz01MjY9aW50IGt2bV9hcmNoX3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKVxuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jLTUzNi1cbmFyY2gvYXJtNjQva3ZtL2FybS5jOjUzNzppbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtNTM4LXtcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTcxPWludCBrdm1fdmdpY19jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1MzIgdHlwZSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTExMi1cdCAqIC0gQmFpbGluZyBvbiB0aGUgZW50aXJlIHRoaW5nIGlmIGEgdkNQVSBpcyBpbiB0aGUgbWlkZGxlIG9mIGNyZWF0aW9uLFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzoxMTM6XHQgKiAgIGRyb3BwZWQgdGhlIGt2bS1cdTAwM2Vsb2NrLCBidXQgaGFzbiYjMzk7dCByZWFjaGVkIGt2bV9hcmNoX3ZjcHVfY3JlYXRlKCkuXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTExNC1cdCAqXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYz0xNTA4PWludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jLTE1MTItXG5hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jOjE1MTM6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMtMTUxNC17XG4tLVxuYXJjaC9taXBzL2t2bS9taXBzLmM9MjczPWludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcbi0tXG5hcmNoL21pcHMva3ZtL21pcHMuYy0yNzctXG5hcmNoL21pcHMva3ZtL21pcHMuYzoyNzg6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvbWlwcy9rdm0vbWlwcy5jLTI3OS17XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9Nzc4PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBrdm1wcGNfZGVjcmVtZW50ZXJfd2FrZXVwKHN0cnVjdCBocnRpbWVyICp0aW1lcilcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy03ODctXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo3ODg6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTc4OS17XG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTEzOT1pbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTE0My1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzoxNDQ6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0xNDUte1xuLS1cbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmM9Mzc3OD1ERUZJTkVfRlJFRShzaWVfcGFnZSwgc3RydWN0IHNpZV9wYWdlICosIGlmIChfVCkgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKShfVCkpKVxuYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYy0zNzc5LVxuYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYzozNzgwOmludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTM3ODEte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9ODI3PXZvaWQgdGR4X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTg0Mi0gKiAgICAzLjEgdGR4X3ZjcHVfY3JlYXRlKCkgdHJhbnNpdGlvbnMgdkNQVSBzdGF0ZSB0byBWQ1BVX1REX1NUQVRFX1VOSU5JVElBTElaRUQuXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjg0MzogKiAgICAzLjIgdmNwdV9sb2FkKCkgYW5kIHZjcHVfcHV0KCkgaW4ga3ZtX2FyY2hfdmNwdV9jcmVhdGUoKS5cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6ODQ0OiAqICAgIDMuMyAoY29uZGl0aW9uYWwpIGlmIGFueSBlcnJvciBlbmNvdW50ZXJlZCBhZnRlciBrdm1fYXJjaF92Y3B1X2NyZWF0ZSgpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTg0NS0gKiAgICAgICAga3ZtX2FyY2hfdmNwdV9kZXN0cm95KCkgLS1cdTAwM2UgdGR4X3ZjcHVfZnJlZSgpLlxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz05MzAwPWludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTMzOC1cbmFyY2gveDg2L2t2bS94ODYuYzo5MzM5OmludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTM0MC17XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTE2NTM9aW50IGt2bV9hcmNoX3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKTtcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxNjU0OmludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE2NTUtdm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQxNTY9c3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDIxMi1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NDIxMzpcdHIgPSBrdm1fYXJjaF92Y3B1X2NyZWF0ZSh2Y3B1KTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDIxNC1cdGlmIChyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI4NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gS1ZNIENQVSBDcmVhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUgY29yZSBvZiB2aXJ0dWFsIENQVSBjcmVhdGlvbiBpbiBLVk0uIE15IG1lbnRhbCBtYXAgaW1tZWRpYXRlbHkgbGVhZHMgbWUgdG8gYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAuIFRoYXQmIzM5O3MgdGhlIGxpa2VseSBlbnRyeSBwb2ludCBmb3IgYSB1c2VyLXNwYWNlIHJlcXVlc3QgdG8gc3Bhd24gYSB2aXJ0dWFsIENQVS4gVGhlIGNvZGUgSSBuZWVkIGlzIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCwgd2hpY2ggbWFrZXMgc2Vuc2U7IHRoYXQgZmlsZSB1c3VhbGx5IGhvbGRzIHRoZSBtb3JlIGdlbmVyYWwgS1ZNIFZNIG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGhhbmRsZSBhbGxvY2F0aW5nIHRoZSBgdmNwdWAgZGF0YSBzdHJ1Y3R1cmUsIHNldHRpbmcgdXAgdGhlIGluaXRpYWwgc3RhdGUsIGhvb2tpbmcgaXQgaW50byB0aGUgVk0sIGFuZCBsaWtlbHkgaW5pdGlhdGluZyB0aGUgZmlyc3QgcnVuIG9yIGF0IGxlYXN0IHNldHRpbmcgdGhpbmdzIHVwIHNvIGl0JiMzOTtzIHJlYWR5IHRvIHJ1bi4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHdoYXQgdGhlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluIGFuZCB0aGUgYWN0dWFsIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhhdCBpb2N0bCBoYW5kbGVyLiBJIGFtIGFsc28gYXdhcmUgdGhhdCB0aGlzIGNhbGwgY291bGQgYmUgYSB2ZXJ5IGV4cGVuc2l2ZSBjYWxsLCBzbyB1bmRlcnN0YW5kaW5nIGFueSBsb2NraW5nIG9yIG9wdGltaXphdGlvbnMgd291bGQgYmUgaW1wb3J0YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQyMDA6XHRcbjQyMDE6XHRcdHZjcHUtXHUwMDNldmNwdV9pZHggPSAtMTtcbjQyMDI6XHRcbjQyMDM6XHRcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGt2bV9ydW4pIFx1MDAzZSBQQUdFX1NJWkUpO1xuNDIwNDpcdFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XG40MjA1Olx0XHRpZiAoIXBhZ2UpIHtcbjQyMDY6XHRcdFx0ciA9IC1FTk9NRU07XG40MjA3Olx0XHRcdGdvdG8gdmNwdV9mcmVlO1xuNDIwODpcdFx0fVxuNDIwOTpcdFx0dmNwdS1cdTAwM2VydW4gPSBwYWdlX2FkZHJlc3MocGFnZSk7XG40MjEwOlx0XG40MjExOlx0XHRrdm1fdmNwdV9pbml0KHZjcHUsIGt2bSwgaWQpO1xuNDIxMjpcdFxuNDIxMzpcdFx0ciA9IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHZjcHUpO1xuNDIxNDpcdFx0aWYgKHIpXG40MjE1Olx0XHRcdGdvdG8gdmNwdV9mcmVlX3J1bl9wYWdlO1xuNDIxNjpcdFxuNDIxNzpcdFx0aWYgKGt2bS1cdTAwM2VkaXJ0eV9yaW5nX3NpemUpIHtcbjQyMTg6XHRcdFx0ciA9IGt2bV9kaXJ0eV9yaW5nX2FsbG9jKGt2bSwgXHUwMDI2dmNwdS1cdTAwM2VkaXJ0eV9yaW5nLFxuNDIxOTpcdFx0XHRcdFx0XHQgaWQsIGt2bS1cdTAwM2VkaXJ0eV9yaW5nX3NpemUpO1xuNDIyMDpcdFx0XHRpZiAocilcbjQyMjE6XHRcdFx0XHRnb3RvIGFyY2hfdmNwdV9kZXN0cm95O1xuNDIyMjpcdFx0fVxuNDIyMzpcdFxuNDIyNDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTUyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZToKCioqQW5hbHl6aW5nIFZDUFUgQWxsb2NhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGlzLiBMaW5lIDQyMDAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdGF0ZSBvZiB0aGUgYHZjcHVgIHZhcmlhYmxlICpyaWdodCogYmVmb3JlIHRoYXQgcG9pbnQuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGV4YWN0bHkgd2hlcmUgaXQmIzM5O3MgYWxsb2NhdGVkLCBpbml0aWFsaXplZCwgYW5kIHBvdGVudGlhbGx5IG1vZGlmaWVkIHByaW9yIHRvIHdoYXRldmVyIGFjdGlvbiBpcyBvY2N1cnJpbmcgb24gdGhhdCBsaW5lLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgdXBzdHJlYW0sIHByb2JhYmx5IHVzaW5nIG15IElERSYjMzk7cyAmIzM0O2ZpbmQgcmVmZXJlbmNlcyYjMzQ7IG9yICYjMzQ7Y2FsbGVycyYjMzQ7IGZlYXR1cmUgdG8gdHJhY2UgYmFjayBmcm9tIGxpbmUgNDIwMC4gSSBuZWVkIHRvIHNlZSBpZiBpdCYjMzk7cyBhc3NpZ25lZCBkaXJlY3RseSwgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIGEgZnVuY3Rpb24sIG9yIHBlcmhhcHMgZGVyaXZlZCBmcm9tIHNvbWUgb3RoZXIgc3RydWN0dXJlLiBVbmRlcnN0YW5kaW5nIGl0cyBvcmlnaW4gaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIGN1cnJlbnQgc3RhdGUgYW5kIGhvdyBpdCBtaWdodCBpbXBhY3QgdGhlIGNvZGUgb24gbGluZSA0MjAwLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHBvaW50cyBvZiBjb250ZW50aW9uIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIE5vIGFzc3VtcHRpb25zOyBJJiMzOTttIGdvaW5nIGJhY2sgdG8gYmFzaWNzIHdpdGggaG93IHRoZSB2YXJpYWJsZSBpcyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MTgwOlx0XHRpZiAodGVzdF9iaXQoaWQsIGt2bS1cdTAwM2V2Y3B1X2lkcykpIHtcbjQxODE6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbjQxODI6XHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG40MTgzOlx0XHR9XG40MTg0Olx0XG40MTg1Olx0XHRyID0ga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoa3ZtLCBpZCk7XG40MTg2Olx0XHRpZiAocikge1xuNDE4NzpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuNDE4ODpcdFx0XHRyZXR1cm4gcjtcbjQxODk6XHRcdH1cbjQxOTA6XHRcbjQxOTE6XHRcdGt2bS1cdTAwM2VjcmVhdGVkX3ZjcHVzJiM0MzsmIzQzOztcbjQxOTI6XHRcdF9fc2V0X2JpdChpZCwga3ZtLVx1MDAzZXZjcHVfaWRzKTtcbjQxOTM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG40MTk0Olx0XG40MTk1Olx0XHR2Y3B1ID0ga21lbV9jYWNoZV96YWxsb2Moa3ZtX3ZjcHVfY2FjaGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG40MTk2Olx0XHRpZiAoIXZjcHUpIHtcbjQxOTc6XHRcdFx0ciA9IC1FTk9NRU07XG40MTk4Olx0XHRcdGdvdG8gdmNwdV9kZWNyZW1lbnQ7XG40MTk5Olx0XHR9XG40MjAwOlx0XG40MjAxOlx0XHR2Y3B1LVx1MDAzZXZjcHVfaWR4ID0gLTE7XG40MjAyOlx0XG40MjAzOlx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBrdm1fcnVuKSBcdTAwM2UgUEFHRV9TSVpFKTtcbjQyMDQ6XHRcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYwMAoJCQkJCQkJb3V0cHV0OiAyNDEKCQkJCQkJCXRob3VnaHRzOiA3NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYSBTdGVhbC1UaW1lIENhbGN1bGF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGB2Y3B1YCBpcyB6ZXJvZWQgb3V0IG9uIGFsbG9jYXRpb24g4oCTIHRoYXQmIzM5O3MgZ29vZC4gYGttZW1fY2FjaGVfemFsbG9jYCBnaXZlcyB1cyBhIGNsZWFuIHNsYXRlLCBzbyBgdmNwdS0mZ3Q7bGFzdF9zdGVhbGAgc3RhcnRzIGF0IHplcm8uIFRoZSBwYXRjaCYjMzk7cyBjb3JlIGlzc3VlIGlzIHByZXR0eSBjbGVhcjogaXQmIzM5O3MgYWJvdXQgdGhlIHRyYWNraW5nIG9mIHN0ZWFsLXRpbWUuIFByZXZpb3VzbHksIGBsYXN0X3N0ZWFsYCB3YXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCB0dWNrZWQgYXdheSBpbiBgdmNwdS0mZ3Q7YXJjaC4mbHQ7YXJjaC1zcGVjaWZpYyZndDsubGFzdF9zdGVhbGAuIFRoZSBwcm9ibGVtIGFyaXNlcyB3aGVuIGEgdkNQVSBzd2l0Y2hlcyB0byBiZWluZyBydW4gYnkgYSBkaWZmZXJlbnQgaG9zdCB0aHJlYWQgKGEgbmV3IFBJRCkuIFN0ZWFsLXRpbWUgY2FsY3VsYXRpb24gd2FzIHVzaW5nIGBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheSAtIGxhc3Rfc3RlYWxgLiBCdXQgYHJ1bl9kZWxheWAgaXMgdGhyZWFkLXNwZWNpZmljLiBTbywgaWYgdGhyZWFkIEEgcmFuIHRoZSB2Q1BVLCB0aGVuIHRocmVhZCBCLCB3ZSYjMzk7ZCBiZSBzdWJ0cmFjdGluZyB0aHJlYWQgQSYjMzk7cyBgcnVuX2RlbGF5YCAoZnJvbSB3aGVuIGl0IHJhbiB0aGUgdkNQVSkgZnJvbSB0aHJlYWQgQiYjMzk7cyBgcnVuX2RlbGF5YC4gVGhhdCYjMzk7cyBhIGRpc2FzdGVyIOKAkyB3aWxkbHkgaW5jb3JyZWN0IHZhbHVlcywgcG90ZW50aWFsbHkgbmVnYXRpdmUsIGRlZmluaXRlbHkgd3JvbmcuCgpUaGUgZml4IHVuaWZpZXMgdGhpcywgbW92aW5nIGBsYXN0X3N0ZWFsYCBpbnRvIHRoZSBjb3JlIGBzdHJ1Y3Qga3ZtX3ZjcHVgIGFuZCByZXNldHRpbmcgYHZjcHUtJmd0O2xhc3Rfc3RlYWwgPSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheWAgd2hlbmV2ZXIgdGhlIHJ1bm5pbmcgdGFzayYjMzk7cyBQSUQgY2hhbmdlcyBpbiBga3ZtX3ZjcHVfaW9jdGwoKWAuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogc2FmZXR5LiBMZXQmIzM5O3MgZGlnIGludG8gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW1zIG9yIGtlcm5lbCBpbmZvcm1hdGlvbiBsZWFrcy4gRmlyc3QsIGBsYXN0X3N0ZWFsYCAqc3RhcnRzKiBhdCB6ZXJvLCBzbyB0aGF0JiMzOTtzIGdvb2QuIEkmIzM5O20gY2hlY2tpbmcgZWFjaCBhcmNoaXRlY3R1cmUgc3BlY2lmaWNhbGx5LiBga3ZtX2luaXRfc3RvbGVuX3RpbWVgIGluIGFybTY0LCBhbmQgdGhlIGxvb25nYXJjaCBhbmQgcmlzY3Ygc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBhbGwgc2V0dGluZyBgdmNwdS0mZ3Q7bGFzdF9zdGVhbGAgcHJvcGVybHkgdG8gYGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5YC4gVGhlIHg4NiBzZWVtcyB0byBkbyB0aGlzIGluIGByZWNvcmRfc3RlYWxfdGltZSgpYC4gQW5kIHRoZSBnZW5lcmFsIFBJRCBjaGFuZ2UgaGFuZGxlciBpbiBga3ZtX3ZjcHVfaW9jdGwoKWAgKmFsc28qIHJlc2V0cyBpdC4gSXQmIzM5O3MgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYWNyb3NzIHRoZSBib2FyZC4KCkRvZXMgYW55dGhpbmcgKnJlYWQqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gRG9lcyBhbnl0aGluZyAqY29weSogdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZT8gTm8uIEFueSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIFRoaXMgcGF0Y2ggYXBwZWFycyBzYWZlLCBmcm9tIGEgbWVtb3J5IHBlcnNwZWN0aXZlLiBObyByaXNrcyBpbnRyb2R1Y2VkLgoKT2theSwgbGV0JiMzOTtzIGFwcGx5IHRoZSBhcHByb3ByaWF0ZSBLTVNBTiBsb2dpYzogTmVlZHNLTVNBTiBzaG91bGQgT05MWSBiZSB0cnVlIGlmIHdlJiMzOTtyZSBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOICpzcGVjaWZpY2FsbHkqIGRldGVjdHMuIFNpbmNlIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QsIE5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLgoKU28sIGluIGVzc2VuY2UsIHRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHRyYWNraW5nIG9mIHN0ZWFsLXRpbWUgd2hlbiB0aHJlYWRzIGFyZSBzd2l0Y2hlZCwgdW5pZnlpbmcgYGxhc3Rfc3RlYWxgIHRvIGBzdHJ1Y3Qga3ZtX3ZjcHVgIHRvIGZpeCBhIGNhbGN1bGF0aW9uIGVycm9yLiBBbmQsIHRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCB0aGVyZWZvcmUgdGhlIGZsYWcgc2hvdWxkIGJlIGFwcHJvcHJpYXRlbHkgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHRyYWNraW5nIG9mIHBhcmF2aXJ0dWFsaXplZCBzdGVhbCB0aW1lIChgbGFzdF9zdGVhbGApIGJ5IG1vdmluZyBpdCBmcm9tIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB2Y3B1IHN1Yi1zdHJ1Y3R1cmVzIChpbiB4ODYsIGFybTY0LCByaXNjdiwgYW5kIGxvb25nYXJjaCkgaW50byB0aGUgZ2VuZXJpYyBgc3RydWN0IGt2bV92Y3B1YCB1bmRlciBgQ09ORklHX0hBVkVfS1ZNX1BWX1NURUFMX1RJTUVgLCBhbmQgcmVzZXR0aW5nIGB2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5YCB3aGVuIHRoZSB2Q1BVIHRocmVhZCBQSUQgY2hhbmdlcy5cblxuVGhlIGBzdHJ1Y3Qga3ZtX3ZjcHVgIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2MoKWAsIGVuc3VyaW5nIGB2Y3B1LVx1MDAzZWxhc3Rfc3RlYWxgIGlzIHplcm8taW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24uIEFsbCByZWFkcyBhbmQgd3JpdGVzIHRvIGB2Y3B1LVx1MDAzZWxhc3Rfc3RlYWxgIG9wZXJhdGUgb24gZnVsbHkgaW5pdGlhbGl6ZWQgZmllbGRzIGFuZCB2YWx1ZXMgZGVyaXZlZCBmcm9tIGBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5YC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHN0YWNrIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgcGFkZGluZyBpc3N1ZXMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB0cmFja2luZyBvZiBwYXJhdmlydHVhbGl6ZWQgc3RlYWwgdGltZSAoYGxhc3Rfc3RlYWxgKSBieSBtb3ZpbmcgaXQgZnJvbSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdmNwdSBzdWItc3RydWN0dXJlcyAoaW4geDg2LCBhcm02NCwgcmlzY3YsIGFuZCBsb29uZ2FyY2gpIGludG8gdGhlIGdlbmVyaWMgYHN0cnVjdCBrdm1fdmNwdWAgdW5kZXIgYENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FYCwgYW5kIHJlc2V0dGluZyBgdmNwdS1cdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheWAgd2hlbiB0aGUgdkNQVSB0aHJlYWQgUElEIGNoYW5nZXMuXG5cblRoZSBgc3RydWN0IGt2bV92Y3B1YCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jKClgLCBlbnN1cmluZyBgdmNwdS1cdTAwM2VsYXN0X3N0ZWFsYCBpcyB6ZXJvLWluaXRpYWxpemVkIGF0IGNyZWF0aW9uLiBBbGwgcmVhZHMgYW5kIHdyaXRlcyB0byBgdmNwdS1cdTAwM2VsYXN0X3N0ZWFsYCBvcGVyYXRlIG9uIGZ1bGx5IGluaXRpYWxpemVkIGZpZWxkcyBhbmQgdmFsdWVzIGRlcml2ZWQgZnJvbSBgY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheWAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdGFjayB2YXJpYWJsZXMsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIHBhZGRpbmcgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDM6MjYuOTYxNTY3Mjc1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIzNjYzODQwNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWNvcmRfc3RlYWxfdGltZVwiLFxuICAgIFwia3ZtX3ZjcHVfaW9jdGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdHJhY2tpbmcgb2YgcGFyYXZpcnR1YWxpemVkIHN0ZWFsIHRpbWUgKGBsYXN0X3N0ZWFsYCkgYnkgbW92aW5nIGl0IGZyb20gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHZjcHUgc3ViLXN0cnVjdHVyZXMgKGluIHg4NiwgYXJtNjQsIHJpc2N2LCBhbmQgbG9vbmdhcmNoKSBpbnRvIHRoZSBnZW5lcmljIGBzdHJ1Y3Qga3ZtX3ZjcHVgIHVuZGVyIGBDT05GSUdfSEFWRV9LVk1fUFZfU1RFQUxfVElNRWAsIGFuZCByZXNldHRpbmcgYHZjcHUtXFx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheWAgd2hlbiB0aGUgdkNQVSB0aHJlYWQgUElEIGNoYW5nZXMuXFxuXFxuVGhlIGBzdHJ1Y3Qga3ZtX3ZjcHVgIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2MoKWAsIGVuc3VyaW5nIGB2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsYCBpcyB6ZXJvLWluaXRpYWxpemVkIGF0IGNyZWF0aW9uLiBBbGwgcmVhZHMgYW5kIHdyaXRlcyB0byBgdmNwdS1cXHUwMDNlbGFzdF9zdGVhbGAgb3BlcmF0ZSBvbiBmdWxseSBpbml0aWFsaXplZCBmaWVsZHMgYW5kIHZhbHVlcyBkZXJpdmVkIGZyb20gYGN1cnJlbnQtXFx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5YC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHN0YWNrIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgcGFkZGluZyBpc3N1ZXMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNvbGlkYXRlcyBzdGVhbC10aW1lIGFjY291bnRpbmcgYWNyb3NzIGFyY2hpdGVjdHVyZXMgYnkgbW92aW5nIGBsYXN0X3N0ZWFsYCB0byBnZW5lcmljIGBzdHJ1Y3Qga3ZtX3ZjcHVgIGFuZCByZXNldHRpbmcgaXQgaW4gYGt2bV92Y3B1X2lvY3RsKClgIHdoZW4gYSB2Q1BVIHRocmVhZCBjaGFuZ2VzLiBJdCBtb2RpZmllcyBleGVjdXRhYmxlIGNvZGUgaW4gY29yZSBLVk0gKGBrdm1fdmNwdV9pb2N0bGApIGFuZCB4ODYgS1ZNIChgcmVjb3JkX3N0ZWFsX3RpbWVgKSwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBpbiB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDM6MjYuOTYxNTczMTk1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTU0ODI0NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyMWYzOGQ4NGUyMjFhYjdmOWJlNDUyN2ViNTYxNjM3MDBiZjE3NjY4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMDU6MDM6MjUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggMjdmZTBjZDViMmQ3YS4uMzZjYjdkZWU5ODhjYiAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtOTM3LDcgKzkzNyw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcXG4gXFxuIFxcdC8qIEd1ZXN0IFBWIHN0YXRlICovXFxuIFxcdHN0cnVjdCB7XFxuLVxcdFxcdHU2NCBsYXN0X3N0ZWFsO1xcbiBcXHRcXHRncGFfdCBiYXNlO1xcbiBcXHR9IHN0ZWFsO1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vS2NvbmZpZyBiL2FyY2gvYXJtNjQva3ZtL0tjb25maWdcXG5pbmRleCA0NDkxNTRmOWE0ODUyLi5mNTg1NWJmYzY4MWMxIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL0tjb25maWdcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9LY29uZmlnXFxuQEAgLTM0LDYgKzM0LDcgQEAgbWVudWNvbmZpZyBLVk1cXG4gXFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcXG4gXFx0c2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTVxcbiBcXHRzZWxlY3QgSEFWRV9LVk1fVkNQVV9SVU5fUElEX0NIQU5HRVxcbitcXHRzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxcbiBcXHRzZWxlY3QgU0NIRURfSU5GT1xcbiBcXHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFMgaWYgUEVSRl9FVkVOVFNcXG4gXFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRFxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9wdnRpbWUuYyBiL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jXFxuaW5kZXggNGNlYWJhYTRjMzBiZC4uYTY3ZDkzODQ1ZDc5NCAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9wdnRpbWUuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jXFxuQEAgLTE0LDcgKzE0LDcgQEAgdm9pZCBrdm1fdXBkYXRlX3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuIFxcdHU2NCBiYXNlID0gdmNwdS1cXHUwMDNlYXJjaC5zdGVhbC5iYXNlO1xcbi1cXHR1NjQgbGFzdF9zdGVhbCA9IHZjcHUtXFx1MDAzZWFyY2guc3RlYWwubGFzdF9zdGVhbDtcXG4rXFx0dTY0IGxhc3Rfc3RlYWwgPSB2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsO1xcbiBcXHR1NjQgb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHB2Y2xvY2tfdmNwdV9zdG9sZW5fdGltZSwgc3RvbGVuX3RpbWUpO1xcbiBcXHR1NjQgc3RlYWwgPSAwO1xcbiBcXHRpbnQgaWR4O1xcbkBAIC0yNSw4ICsyNSw4IEBAIHZvaWQga3ZtX3VwZGF0ZV9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNyY3UpO1xcbiBcXHRpZiAoIWt2bV9nZXRfZ3Vlc3Qoa3ZtLCBiYXNlICsgb2Zmc2V0LCBzdGVhbCkpIHtcXG4gXFx0XFx0c3RlYWwgPSBsZTY0X3RvX2NwdShzdGVhbCk7XFxuLVxcdFxcdHZjcHUtXFx1MDAzZWFyY2guc3RlYWwubGFzdF9zdGVhbCA9IFJFQURfT05DRShjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSk7XFxuLVxcdFxcdHN0ZWFsICs9IHZjcHUtXFx1MDAzZWFyY2guc3RlYWwubGFzdF9zdGVhbCAtIGxhc3Rfc3RlYWw7XFxuK1xcdFxcdHZjcHUtXFx1MDAzZWxhc3Rfc3RlYWwgPSBSRUFEX09OQ0UoY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkpO1xcbitcXHRcXHRzdGVhbCArPSB2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsIC0gbGFzdF9zdGVhbDtcXG4gXFx0XFx0a3ZtX3B1dF9ndWVzdChrdm0sIGJhc2UgKyBvZmZzZXQsIGNwdV90b19sZTY0KHN0ZWFsKSk7XFxuIFxcdH1cXG4gXFx0c3JjdV9yZWFkX3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzcmN1LCBpZHgpO1xcbkBAIC02MSw3ICs2MSw3IEBAIGdwYV90IGt2bV9pbml0X3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0ICogU3RhcnQgY291bnRpbmcgc3RvbGVuIHRpbWUgZnJvbSB0aGUgdGltZSB0aGUgZ3Vlc3QgcmVxdWVzdHNcXG4gXFx0ICogdGhlIGZlYXR1cmUgZW5hYmxlZC5cXG4gXFx0ICovXFxuLVxcdHZjcHUtXFx1MDAzZWFyY2guc3RlYWwubGFzdF9zdGVhbCA9IGN1cnJlbnQtXFx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xcbitcXHR2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XFxuIFxcdGt2bV93cml0ZV9ndWVzdF9sb2NrKGt2bSwgYmFzZSwgXFx1MDAyNmluaXRfdmFsdWVzLCBzaXplb2YoaW5pdF92YWx1ZXMpKTtcXG4gXFxuIFxcdHJldHVybiBiYXNlO1xcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IDIzY2ZiZWNlYmJkNzkuLjE0NTE0YTI1YjI2MTMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtMjUzLDcgKzI1Myw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcXG4gXFx0LyogcGFyYXZpcnQgc3RlYWwgdGltZSAqL1xcbiBcXHRzdHJ1Y3Qge1xcbiBcXHRcXHR1NjQgZ3Vlc3RfYWRkcjtcXG4tXFx0XFx0dTY0IGxhc3Rfc3RlYWw7XFxuIFxcdFxcdHN0cnVjdCBnZm5fdG9faHZhX2NhY2hlIGNhY2hlO1xcbiBcXHRcXHR1OCAgcHJlZW1wdGVkO1xcbiBcXHR9IHN0O1xcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnXFxuaW5kZXggMTVkYTJkODhjMGMxMC4uNDk5NmVjOWMwN2Y5OSAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZ1xcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnXFxuQEAgLTI2LDYgKzI2LDcgQEAgY29uZmlnIEtWTVxcbiBcXHRzZWxlY3QgSEFWRV9LVk1fTVNJXFxuIFxcdHNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU1cXG4gXFx0c2VsZWN0IEtWTV9DT01NT05cXG4rXFx0c2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcXG4gXFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxcbiBcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcXG4gXFx0c2VsZWN0IEtWTV9NTUlPXFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jXFxuaW5kZXggNGY1OGU2ZTJjZjg2Ni4uNTZhZTZiMThmOGMxMCAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jXFxuKysrIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuY1xcbkBAIC03NzMsNyArNzczLDcgQEAgc3RhdGljIGxvbmcga3ZtX3NhdmVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0aWYgKCEoZGF0YSBcXHUwMDI2IEtWTV9TVEVBTF9QSFlTX1ZBTElEKSlcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnN0Lmxhc3Rfc3RlYWwgPSBjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcXG4rXFx0XFx0dmNwdS1cXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXFx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xcbiBcXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfU1RFQUxfVVBEQVRFLCB2Y3B1KTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdGRlZmF1bHQ6XFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXFxuaW5kZXggZWQ5ZTA5MmM5N2JhNy4uNzI4ZDI5ZWJhOGUwMyAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXFxuKysrIGIvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuY1xcbkBAIC0xODcsOCArMTg3LDggQEAgc3RhdGljIHZvaWQga3ZtX3VwZGF0ZV9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHNtcF93bWIoKTtcXG4gXFxuIFxcdHVuc2FmZV9nZXRfdXNlcihzdGVhbCwgXFx1MDAyNnN0LVxcdTAwM2VzdGVhbCwgb3V0KTtcXG4tXFx0c3RlYWwgKz0gY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkgLSB2Y3B1LVxcdTAwM2VhcmNoLnN0Lmxhc3Rfc3RlYWw7XFxuLVxcdHZjcHUtXFx1MDAzZWFyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtXFx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xcbitcXHRzdGVhbCArPSBjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSAtIHZjcHUtXFx1MDAzZWxhc3Rfc3RlYWw7XFxuK1xcdHZjcHUtXFx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcXG4gXFx0dW5zYWZlX3B1dF91c2VyKHN0ZWFsLCBcXHUwMDI2c3QtXFx1MDAzZXN0ZWFsLCBvdXQpO1xcbiBcXG4gXFx0c21wX3dtYigpO1xcbkBAIC0xMjA1LDcgKzEyMDUsNyBAQCBzdGF0aWMgaW50IGt2bV9sb29uZ2FyY2hfcHZ0aW1lX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFxuIFxcdGlmICghcmV0KSB7XFxuIFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guc3QuZ3Vlc3RfYWRkciA9IGdwYTtcXG4tXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XFxuK1xcdFxcdHZjcHUtXFx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcXG4gXFx0XFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1NURUFMX1VQREFURSwgdmNwdSk7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IGEzMDYwMDU3OTIzMWIuLjMwNTg3NTMwMWMwNDIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTI3Myw3ICsyNzMsNiBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7XFxuIFxcdC8qIFNCSSBzdGVhbC10aW1lIGFjY291bnRpbmcgKi9cXG4gXFx0c3RydWN0IHtcXG4gXFx0XFx0Z3BhX3Qgc2htZW07XFxuLVxcdFxcdHU2NCBsYXN0X3N0ZWFsO1xcbiBcXHR9IHN0YTtcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL0tjb25maWcgYi9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnXFxuaW5kZXggZWMyY2VlMGEzOWUwMS4uMWZmMDdhOTA0YTAyNyAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnXFxuKysrIGIvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ1xcbkBAIC0yNiw2ICsyNiw3IEBAIGNvbmZpZyBLVk1cXG4gXFx0c2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTVxcbiBcXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXFxuIFxcdHNlbGVjdCBLVk1fQ09NTU9OXFxuK1xcdHNlbGVjdCBIQVZFX0tWTV9QVl9TVEVBTF9USU1FXFxuIFxcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcXG4gXFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXFxuIFxcdHNlbGVjdCBLVk1fTU1JT1xcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9zdGEuYyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3N0YS5jXFxuaW5kZXggNjBlNTAyOTZhMDA4NS4uOWE3N2QzYmRlN2M3MiAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9zdGEuY1xcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3N0YS5jXFxuQEAgLTE5LDEzICsxOSwxMyBAQFxcbiBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfdmNwdV9zYmlfc3RhX3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLnN0YS5zaG1lbSA9IElOVkFMSURfR1BBO1xcbi1cXHR2Y3B1LVxcdTAwM2VhcmNoLnN0YS5sYXN0X3N0ZWFsID0gMDtcXG4rXFx0dmNwdS1cXHUwMDNlbGFzdF9zdGVhbCA9IDA7XFxuIH1cXG4gXFxuIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdGdwYV90IHNobWVtID0gdmNwdS1cXHUwMDNlYXJjaC5zdGEuc2htZW07XFxuLVxcdHU2NCBsYXN0X3N0ZWFsID0gdmNwdS1cXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbDtcXG4rXFx0dTY0IGxhc3Rfc3RlYWwgPSB2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsO1xcbiBcXHRfX2xlMzIgX191c2VyICpzZXF1ZW5jZV9wdHI7XFxuIFxcdF9fbGU2NCBfX3VzZXIgKnN0ZWFsX3B0cjtcXG4gXFx0X19sZTMyIHNlcXVlbmNlX2xlO1xcbkBAIC02Nyw4ICs2Nyw4IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gXFx0aWYgKCFXQVJOX09OKGdldF91c2VyKHN0ZWFsX2xlLCBzdGVhbF9wdHIpKSkge1xcbiBcXHRcXHRzdGVhbCA9IGxlNjRfdG9fY3B1KHN0ZWFsX2xlKTtcXG4tXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbCA9IFJFQURfT05DRShjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSk7XFxuLVxcdFxcdHN0ZWFsICs9IHZjcHUtXFx1MDAzZWFyY2guc3RhLmxhc3Rfc3RlYWwgLSBsYXN0X3N0ZWFsO1xcbitcXHRcXHR2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsID0gUkVBRF9PTkNFKGN1cnJlbnQtXFx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5KTtcXG4rXFx0XFx0c3RlYWwgKz0gdmNwdS1cXHUwMDNlbGFzdF9zdGVhbCAtIGxhc3Rfc3RlYWw7XFxuIFxcdFxcdFdBUk5fT04ocHV0X3VzZXIoY3B1X3RvX2xlNjQoc3RlYWwpLCBzdGVhbF9wdHIpKTtcXG4gXFx0fVxcbiBcXG5AQCAtMTE1LDcgKzExNSw3IEBAIHN0YXRpYyBpbnQga3ZtX3NiaV9zdGFfc3RlYWxfdGltZV9zZXRfc2htZW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHRyZXR1cm4gU0JJX0VSUl9JTlZBTElEX0FERFJFU1M7XFxuIFxcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLnN0YS5zaG1lbSA9IHNobWVtO1xcbi1cXHR2Y3B1LVxcdTAwM2VhcmNoLnN0YS5sYXN0X3N0ZWFsID0gY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XFxuK1xcdHZjcHUtXFx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggNjgzYmI4YmY0M2E5NC4uZWJkZDg1MjZhZTEyNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC04NzIsNyArODcyLDYgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xcbiBcXHRzdHJ1Y3Qge1xcbiBcXHRcXHR1OCBwcmVlbXB0ZWQ7XFxuIFxcdFxcdHU2NCBtc3JfdmFsO1xcbi1cXHRcXHR1NjQgbGFzdF9zdGVhbDtcXG4gXFx0XFx0c3RydWN0IGdmbl90b19odmFfY2FjaGUgY2FjaGU7XFxuIFxcdH0gc3Q7XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vS2NvbmZpZyBiL2FyY2gveDg2L2t2bS9LY29uZmlnXFxuaW5kZXggNTM4ZWQxZTgwMzMyNi4uYjJhZWE4MDU4ODQxMyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vS2NvbmZpZ1xcbisrKyBiL2FyY2gveDg2L2t2bS9LY29uZmlnXFxuQEAgLTQwLDYgKzQwLDcgQEAgY29uZmlnIEtWTV9YODZcXG4gXFx0c2VsZWN0IEhBVkVfS1ZNX01TSVxcbiBcXHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxcbiBcXHRzZWxlY3QgSEFWRV9LVk1fTk9fUE9MTFxcbitcXHRzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxcbiBcXHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcXG4gXFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxcbiBcXHRzZWxlY3QgS1ZNX1ZGSU9cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuaW5kZXggNzk0NjhkZGZlNDczNi4uOTI3YzhiMWVkODNkMiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtMjEyOSw5ICsyMTI5LDggQEAgc3RhdGljIHZvaWQgcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRzbXBfd21iKCk7XFxuIFxcbiBcXHR1bnNhZmVfZ2V0X3VzZXIoc3RlYWwsIFxcdTAwMjZzdC1cXHUwMDNlc3RlYWwsIG91dCk7XFxuLVxcdHN0ZWFsICs9IGN1cnJlbnQtXFx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5IC1cXG4tXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsO1xcbi1cXHR2Y3B1LVxcdTAwM2VhcmNoLnN0Lmxhc3Rfc3RlYWwgPSBjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcXG4rXFx0c3RlYWwgKz0gY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkgLSB2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsO1xcbitcXHR2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XFxuIFxcdHVuc2FmZV9wdXRfdXNlcihzdGVhbCwgXFx1MDAyNnN0LVxcdTAwM2VzdGVhbCwgb3V0KTtcXG4gXFxuIFxcdHZlcnNpb24gKz0gMTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuaW5kZXggMDNiZmM5Mjg2NGI2ZS4uZmY5ZDQyM2I2YTdjNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5AQCAtMzk4LDYgKzM5OCwxMCBAQCBzdHJ1Y3Qga3ZtX3ZjcHUge1xcbiBcXHQgKi9cXG4gXFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbGFzdF91c2VkX3Nsb3Q7XFxuIFxcdHU2NCBsYXN0X3VzZWRfc2xvdF9nZW47XFxuK1xcbisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX1BWX1NURUFMX1RJTUVcXG4rXFx0dTY0IGxhc3Rfc3RlYWw7XFxuKyNlbmRpZlxcbiB9O1xcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG5pbmRleCA5NmJhYjcwMDJkMzllLi4xZGUxM2MwMDE3ZTQzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXFxuQEAgLTE2NCw2ICsxNjQsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgKz0gaXJxX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IG1tdV9zdHJlc3NfdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0gcnNlcV90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBzdGVhbF90aW1lXFxuK1RFU1RfR0VOX1BST0dTX3g4NiArPSBzdGVhbF90aW1lX2NoYW5nZV9waWRcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHN5c3RlbV9jb3VudGVyX29mZnNldF90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBwcmVfZmF1bHRfbWVtb3J5X3Rlc3RcXG4gXFxuQEAgLTIwNCw2ICsyMDUsNyBAQCBURVNUX0dFTl9QUk9HU19hcm02NCArPSBndWVzdF9tZW1mZF90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX2FybTY0ICs9IG1tdV9zdHJlc3NfdGVzdFxcbiBURVNUX0dFTl9QUk9HU19hcm02NCArPSByc2VxX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gc3RlYWxfdGltZVxcbitURVNUX0dFTl9QUk9HU19hcm02NCArPSBzdGVhbF90aW1lX2NoYW5nZV9waWRcXG4gXFxuIFRFU1RfR0VOX1BST0dTX3MzOTAgPSAkKFRFU1RfR0VOX1BST0dTX0NPTU1PTilcXG4gVEVTVF9HRU5fUFJPR1NfczM5MCArPSBzMzkwL21lbW9wXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lX2NoYW5nZV9waWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lX2NoYW5nZV9waWQuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTJkNDkyN2QxYzAxN1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmNcXG5AQCAtMCwwICsxLDIxNiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBWZXJpZnkgdGhhdCBLVk0gcmVzZXRzIHN0ZWFsLXRpbWUgYWNjb3VudGluZyB3aGVuIGEgdkNQVSBmZCBpcyBydW4gZnJvbVxcbisgKiBhIGRpZmZlcmVudCBob3N0IFBJRC5cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjcHRocmVhZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9wYXJhLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJrdm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwicHJvY2Vzc29yLmhcXFwiXFxuK1xcbisjZGVmaW5lIFNUX0dQQV9CQVNFXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgMzApXFxuKyNkZWZpbmUgU1RfU0FORV9ERUxUQV9OU1xcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDYzKVxcbitcXG4rc3RhdGljIHZvaWQgKnN0X2d2YTtcXG4rc3RhdGljIHU2NCBndWVzdF9zdG9sZW5fdGltZTtcXG4rc3RhdGljIHU2NCBtYWluX3N0ZWFsO1xcbitzdGF0aWMgdTY0IHRocmVhZF9zdGVhbDtcXG4rXFxuKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pXFxuK1xcbisjZGVmaW5lIFNURUFMX1RJTUVfU0laRVxcdCgoc2l6ZW9mKHN0cnVjdCBrdm1fc3RlYWxfdGltZSkgKyA2MykgXFx1MDAyNiB+NjMpXFxuK1xcbitzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV9zdGVhbF90aW1lICpzdCA9IHN0X2d2YTtcXG4rXFxuK1xcdFdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC1cXHUwMDNlc3RlYWwpKTtcXG4rXFx0R1VFU1RfU1lOQygwKTtcXG4rXFxuK1xcdFdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC1cXHUwMDNlc3RlYWwpKTtcXG4rXFx0R1VFU1RfU1lOQygxKTtcXG4rXFxuK1xcdFdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC1cXHUwMDNlc3RlYWwpKTtcXG4rXFx0R1VFU1RfRE9ORSgpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBzdGVhbF90aW1lX3N1cHBvcnRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0cmV0dXJuIGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX0tWTV9TVEVBTF9USU1FKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc3RlYWxfdGltZV9lbmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHZjcHVfc2V0X21zcih2Y3B1LCBNU1JfS1ZNX1NURUFMX1RJTUUsXFxuK1xcdFxcdCAgICAgKHVsb25nKXN0X2d2YSB8IEtWTV9NU1JfRU5BQkxFRCk7XFxuK31cXG4rXFxuKyNlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pXFxuK1xcbisjZGVmaW5lIFNURUFMX1RJTUVfU0laRVxcdCgoc2l6ZW9mKHN0cnVjdCBzdF90aW1lKSArIDYzKSBcXHUwMDI2IH42MylcXG4rXFxuKyNkZWZpbmUgUFZfVElNRV9TVFxcdDB4YzUwMDAwMjFcXG4rXFxuK3N0cnVjdCBzdF90aW1lIHtcXG4rXFx0dTMyIHJldjtcXG4rXFx0dTMyIGF0dHI7XFxuK1xcdHU2NCBzdF90aW1lO1xcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBhcm1fc21jY2NfcmVzIHJlcztcXG4rXFx0c3RydWN0IHN0X3RpbWUgKnN0O1xcbitcXG4rXFx0ZG9fc21jY2MoUFZfVElNRV9TVCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgXFx1MDAyNnJlcyk7XFxuK1xcdEdVRVNUX0FTU0VSVF9ORShyZXMuYTAsIC0xKTtcXG4rXFx0R1VFU1RfQVNTRVJUX0VRKHJlcy5hMCwgKHVsb25nKXN0X2d2YSk7XFxuK1xcbitcXHRzdCA9IChzdHJ1Y3Qgc3RfdGltZSAqKXJlcy5hMDtcXG4rXFx0V1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LVxcdTAwM2VzdF90aW1lKSk7XFxuK1xcdEdVRVNUX1NZTkMoMCk7XFxuK1xcbitcXHRXUklURV9PTkNFKGd1ZXN0X3N0b2xlbl90aW1lLCBSRUFEX09OQ0Uoc3QtXFx1MDAzZXN0X3RpbWUpKTtcXG4rXFx0R1VFU1RfU1lOQygxKTtcXG4rXFxuK1xcdFdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC1cXHUwMDNlc3RfdGltZSkpO1xcbitcXHRHVUVTVF9ET05FKCk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHN0ZWFsX3RpbWVfc3VwcG9ydGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyIGRldiA9IHtcXG4rXFx0XFx0Lmdyb3VwID0gS1ZNX0FSTV9WQ1BVX1BWVElNRV9DVFJMLFxcbitcXHRcXHQuYXR0ciA9IEtWTV9BUk1fVkNQVV9QVlRJTUVfSVBBLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuICFfX3ZjcHVfaW9jdGwodmNwdSwgS1ZNX0hBU19ERVZJQ0VfQVRUUiwgXFx1MDAyNmRldik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHN0ZWFsX3RpbWVfZW5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHR1NjQgc3RfaXBhID0gKHVsb25nKXN0X2d2YTtcXG4rXFx0c3RydWN0IGt2bV9kZXZpY2VfYXR0ciBkZXYgPSB7XFxuK1xcdFxcdC5ncm91cCA9IEtWTV9BUk1fVkNQVV9QVlRJTUVfQ1RSTCxcXG4rXFx0XFx0LmF0dHIgPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0lQQSxcXG4rXFx0XFx0LmFkZHIgPSAodTY0KVxcdTAwMjZzdF9pcGEsXFxuK1xcdH07XFxuK1xcbitcXHR2Y3B1X2lvY3RsKHZjcHUsIEtWTV9TRVRfREVWSUNFX0FUVFIsIFxcdTAwMjZkZXYpO1xcbit9XFxuK1xcbisjZWxzZVxcbisjZXJyb3IgXFxcInN0ZWFsX3RpbWVfY2hhbmdlX3BpZCBpcyBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBhcmNoaXRlY3R1cmVcXFwiXFxuKyNlbmRpZlxcbitcXG4rc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHN0cnVjdCB1Y2FsbCB1YztcXG4rXFxuK1xcdHZjcHVfcnVuKHZjcHUpO1xcbitcXG4rXFx0c3dpdGNoIChnZXRfdWNhbGwodmNwdSwgXFx1MDAyNnVjKSkge1xcbitcXHRjYXNlIFVDQUxMX1NZTkM6XFxuK1xcdGNhc2UgVUNBTExfRE9ORTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgVUNBTExfQUJPUlQ6XFxuK1xcdFxcdFJFUE9SVF9HVUVTVF9BU1NFUlQodWMpO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRURVNUX0FTU0VSVChmYWxzZSwgXFxcIlVuZXhwZWN0ZWQgZXhpdDogJXNcXFwiLFxcbitcXHRcXHRcXHQgICAgZXhpdF9yZWFzb25fc3RyKHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlZXhpdF9yZWFzb24pKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCAqZG9fc3RlYWxfdGltZSh2b2lkICphcmcpXFxuK3tcXG4rXFx0c3RydWN0IHRpbWVzcGVjIHRzLCBzdG9wO1xcbitcXG4rXFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFxcdTAwMjZ0cyk7XFxuK1xcdHN0b3AgPSB0aW1lc3BlY19hZGRfbnModHMsIE1JTl9SVU5fREVMQVlfTlMpO1xcbitcXG4rXFx0d2hpbGUgKHRpbWVzcGVjX3RvX25zKHRpbWVzcGVjX3N1Yih0cywgc3RvcCkpIFxcdTAwM2MgMClcXG4rXFx0XFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFxcdTAwMjZ0cyk7XFxuK1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgKnZjcHVfdGhyZWFkKHZvaWQgKmFyZylcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBhcmc7XFxuK1xcbitcXHRydW5fdmNwdSh2Y3B1KTtcXG4rXFx0c3luY19nbG9iYWxfZnJvbV9ndWVzdCh2Y3B1LVxcdTAwM2V2bSwgZ3Vlc3Rfc3RvbGVuX3RpbWUpO1xcbitcXHR0aHJlYWRfc3RlYWwgPSBndWVzdF9zdG9sZW5fdGltZTtcXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitpbnQgbWFpbih2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdHB0aHJlYWRfYXR0cl90IGF0dHI7XFxuK1xcdHB0aHJlYWRfdCB0aHJlYWQ7XFxuK1xcdGNwdV9zZXRfdCBjcHVzZXQ7XFxuK1xcdGxvbmcgcnVuX2RlbGF5O1xcbitcXHRsb25nIHJ1bl9kZWxheV9kZWx0YTtcXG4rXFxuK1xcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XFxuK1xcdGtzZnRfc2V0X3BsYW4oMSk7XFxuK1xcbitcXHRDUFVfWkVSTyhcXHUwMDI2Y3B1c2V0KTtcXG4rXFx0Q1BVX1NFVCgwLCBcXHUwMDI2Y3B1c2V0KTtcXG4rXFx0cHRocmVhZF9hdHRyX2luaXQoXFx1MDAyNmF0dHIpO1xcbitcXHRwdGhyZWFkX2F0dHJfc2V0YWZmaW5pdHlfbnAoXFx1MDAyNmF0dHIsIHNpemVvZihjcHVzZXQpLCBcXHUwMDI2Y3B1c2V0KTtcXG4rXFx0cHRocmVhZF9zZXRhZmZpbml0eV9ucChwdGhyZWFkX3NlbGYoKSwgc2l6ZW9mKGNwdXNldCksIFxcdTAwMjZjcHVzZXQpO1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XFxuK1xcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXFxuK1xcdFxcdFxcdFxcdCAgICBTVF9HUEFfQkFTRSwgMSwgMSwgMCk7XFxuK1xcdHZpcnRfbWFwKHZtLCBTVF9HUEFfQkFTRSwgU1RfR1BBX0JBU0UsIDEpO1xcbitcXG4rXFx0c3RfZ3ZhID0gKHZvaWQgKilTVF9HUEFfQkFTRTtcXG4rXFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHN0X2d2YSk7XFxuK1xcdG1lbXNldChhZGRyX2d2YTJodmEodm0sIFNUX0dQQV9CQVNFKSwgMCwgU1RFQUxfVElNRV9TSVpFKTtcXG4rXFxuK1xcdFRFU1RfUkVRVUlSRShzdGVhbF90aW1lX3N1cHBvcnRlZCh2Y3B1KSk7XFxuK1xcbitcXHRzdGVhbF90aW1lX2VuYWJsZSh2Y3B1KTtcXG4rXFx0cnVuX3ZjcHUodmNwdSk7XFxuK1xcbitcXHRydW5fZGVsYXkgPSBnZXRfcnVuX2RlbGF5KCk7XFxuK1xcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWQsIFxcdTAwMjZhdHRyLCBkb19zdGVhbF90aW1lLCBOVUxMKTtcXG4rXFxuK1xcdHdoaWxlIChnZXRfcnVuX2RlbGF5KCkgLSBydW5fZGVsYXkgXFx1MDAzYyBNSU5fUlVOX0RFTEFZX05TKVxcbitcXHRcXHRzY2hlZF95aWVsZCgpO1xcbitcXG4rXFx0cHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7XFxuK1xcdHJ1bl9kZWxheV9kZWx0YSA9IGdldF9ydW5fZGVsYXkoKSAtIHJ1bl9kZWxheTtcXG4rXFx0VEVTVF9BU1NFUlQocnVuX2RlbGF5X2RlbHRhIFxcdTAwM2U9IE1JTl9SVU5fREVMQVlfTlMsXFxuK1xcdFxcdCAgICBcXFwiRXhwZWN0ZWQgcnVuX2RlbGF5IFxcdTAwM2U9ICVsZCwgZ290ICVsZFxcXCIsXFxuK1xcdFxcdCAgICBNSU5fUlVOX0RFTEFZX05TLCBydW5fZGVsYXlfZGVsdGEpO1xcbitcXG4rXFx0cnVuX3ZjcHUodmNwdSk7XFxuK1xcdHN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3Qodm0sIGd1ZXN0X3N0b2xlbl90aW1lKTtcXG4rXFx0bWFpbl9zdGVhbCA9IGd1ZXN0X3N0b2xlbl90aW1lO1xcbitcXG4rXFx0VEVTVF9BU1NFUlQobWFpbl9zdGVhbCBcXHUwMDNlPSBNSU5fUlVOX0RFTEFZX05TLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIHN0ZWFsIHRpbWUgXFx1MDAzZT0gJWxkLCBnb3QgJVxcXCJQUkl1NjQsXFxuK1xcdFxcdCAgICBNSU5fUlVOX0RFTEFZX05TLCBtYWluX3N0ZWFsKTtcXG4rXFxuK1xcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWQsIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1KTtcXG4rXFx0cHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7XFxuK1xcbitcXHRURVNUX0FTU0VSVCh0aHJlYWRfc3RlYWwgXFx1MDAzZT0gbWFpbl9zdGVhbCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgdGhyZWFkX3N0ZWFsIC0gbWFpbl9zdGVhbCBcXHUwMDNjIFNUX1NBTkVfREVMVEFfTlMsXFxuK1xcdFxcdCAgICBcXFwiRXhwZWN0ZWQgc2FuZSBzdGVhbCBhZnRlciB2Q1BVIHBpZCBjaGFuZ2U6IFxcXCJcXG4rXFx0XFx0ICAgIFxcXCJvbGQ9JVxcXCJQUkl1NjRcXFwiLCBuZXc9JVxcXCJQUkl1NjQsXFxuK1xcdFxcdCAgICBtYWluX3N0ZWFsLCB0aHJlYWRfc3RlYWwpO1xcbitcXG4rXFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFxcXCJzdGVhbCB0aW1lIHJlbWFpbnMgc2FuZSBhY3Jvc3MgdkNQVSBwaWQgY2hhbmdlXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHB0aHJlYWRfYXR0cl9kZXN0cm95KFxcdTAwMjZhdHRyKTtcXG4rXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbitcXHRrc2Z0X2ZpbmlzaGVkKCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vS2NvbmZpZyBiL3ZpcnQva3ZtL0tjb25maWdcXG5pbmRleCBjM2MwZWUyNTNmYzc3Li5mNDJhM2EwZmM1YmFiIDEwMDY0NFxcbi0tLSBhL3ZpcnQva3ZtL0tjb25maWdcXG4rKysgYi92aXJ0L2t2bS9LY29uZmlnXFxuQEAgLTgyLDYgKzgyLDkgQEAgY29uZmlnIEhBVkVfS1ZNX0lSUV9CWVBBU1NcXG4gY29uZmlnIEhBVkVfS1ZNX1ZDUFVfUlVOX1BJRF9DSEFOR0VcXG4gICAgICAgIGJvb2xcXG4gXFxuK2NvbmZpZyBIQVZFX0tWTV9QVl9TVEVBTF9USU1FXFxuKyAgICAgICBib29sXFxuK1xcbiBjb25maWcgSEFWRV9LVk1fTk9fUE9MTFxcbiAgICAgICAgYm9vbFxcbiBcXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG5pbmRleCA2NWViMjZhMDUyMGQ4Li43ODRmMGQ5NDViNDU2IDEwMDY0NFxcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuQEAgLTQ0NzgsNiArNDQ3OCwxMCBAQCBzdGF0aWMgbG9uZyBrdm1fdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0XFx0XFx0aWYgKHIpXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4rI2lmZGVmIENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FXFxuK1xcdFxcdFxcdHZjcHUtXFx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRcXHRcXHRuZXdwaWQgPSBnZXRfdGFza19waWQoY3VycmVudCwgUElEVFlQRV9QSUQpO1xcbiBcXHRcXHRcXHR3cml0ZV9sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VwaWRfbG9jayk7XFxuIFxcdFxcdFxcdHZjcHUtXFx1MDAzZXBpZCA9IG5ld3BpZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDM6MjcuNzc3Nzc4NDk4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNjIxMjM4NTA4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlY29yZF9zdGVhbF90aW1lXCIsXG4gICAgXCJrdm1fdmNwdV9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNvbGlkYXRlcyBzdGVhbC10aW1lIGFjY291bnRpbmcgYWNyb3NzIGFyY2hpdGVjdHVyZXMgYnkgbW92aW5nIGBsYXN0X3N0ZWFsYCB0byBnZW5lcmljIGBzdHJ1Y3Qga3ZtX3ZjcHVgIGFuZCByZXNldHRpbmcgaXQgaW4gYGt2bV92Y3B1X2lvY3RsKClgIHdoZW4gYSB2Q1BVIHRocmVhZCBjaGFuZ2VzLiBJdCBtb2RpZmllcyBleGVjdXRhYmxlIGNvZGUgaW4gY29yZSBLVk0gKGBrdm1fdmNwdV9pb2N0bGApIGFuZCB4ODYgS1ZNIChgcmVjb3JkX3N0ZWFsX3RpbWVgKSwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBpbiB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyMWYzOGQ4NGUyMjFhYjdmOWJlNDUyN2ViNTYxNjM3MDBiZjE3NjY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwNTowMzoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggMjdmZTBjZDViMmQ3YS4uMzZjYjdkZWU5ODhjYiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtOTM3LDcgKzkzNyw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcbiBcdC8qIEd1ZXN0IFBWIHN0YXRlICovXG4gXHRzdHJ1Y3Qge1xuLVx0XHR1NjQgbGFzdF9zdGVhbDtcbiBcdFx0Z3BhX3QgYmFzZTtcbiBcdH0gc3RlYWw7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vS2NvbmZpZyBiL2FyY2gvYXJtNjQva3ZtL0tjb25maWdcbmluZGV4IDQ0OTE1NGY5YTQ4NTIuLmY1ODU1YmZjNjgxYzEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9LY29uZmlnXG4rKysgYi9hcmNoL2FybTY0L2t2bS9LY29uZmlnXG5AQCAtMzQsNiArMzQsNyBAQCBtZW51Y29uZmlnIEtWTVxuIFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcbiBcdHNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU1cbiBcdHNlbGVjdCBIQVZFX0tWTV9WQ1BVX1JVTl9QSURfQ0hBTkdFXG4rXHRzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxuIFx0c2VsZWN0IFNDSEVEX0lORk9cbiBcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xuIFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jIGIvYXJjaC9hcm02NC9rdm0vcHZ0aW1lLmNcbmluZGV4IDRjZWFiYWE0YzMwYmQuLmE2N2Q5Mzg0NWQ3OTQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9wdnRpbWUuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vcHZ0aW1lLmNcbkBAIC0xNCw3ICsxNCw3IEBAIHZvaWQga3ZtX3VwZGF0ZV9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXHR1NjQgYmFzZSA9IHZjcHUtXHUwMDNlYXJjaC5zdGVhbC5iYXNlO1xuLVx0dTY0IGxhc3Rfc3RlYWwgPSB2Y3B1LVx1MDAzZWFyY2guc3RlYWwubGFzdF9zdGVhbDtcbitcdHU2NCBsYXN0X3N0ZWFsID0gdmNwdS1cdTAwM2VsYXN0X3N0ZWFsO1xuIFx0dTY0IG9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBwdmNsb2NrX3ZjcHVfc3RvbGVuX3RpbWUsIHN0b2xlbl90aW1lKTtcbiBcdHU2NCBzdGVhbCA9IDA7XG4gXHRpbnQgaWR4O1xuQEAgLTI1LDggKzI1LDggQEAgdm9pZCBrdm1fdXBkYXRlX3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbiBcdGlmICgha3ZtX2dldF9ndWVzdChrdm0sIGJhc2UgKyBvZmZzZXQsIHN0ZWFsKSkge1xuIFx0XHRzdGVhbCA9IGxlNjRfdG9fY3B1KHN0ZWFsKTtcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLnN0ZWFsLmxhc3Rfc3RlYWwgPSBSRUFEX09OQ0UoY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSk7XG4tXHRcdHN0ZWFsICs9IHZjcHUtXHUwMDNlYXJjaC5zdGVhbC5sYXN0X3N0ZWFsIC0gbGFzdF9zdGVhbDtcbitcdFx0dmNwdS1cdTAwM2VsYXN0X3N0ZWFsID0gUkVBRF9PTkNFKGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkpO1xuK1x0XHRzdGVhbCArPSB2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgLSBsYXN0X3N0ZWFsO1xuIFx0XHRrdm1fcHV0X2d1ZXN0KGt2bSwgYmFzZSArIG9mZnNldCwgY3B1X3RvX2xlNjQoc3RlYWwpKTtcbiBcdH1cbiBcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UsIGlkeCk7XG5AQCAtNjEsNyArNjEsNyBAQCBncGFfdCBrdm1faW5pdF9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgKiBTdGFydCBjb3VudGluZyBzdG9sZW4gdGltZSBmcm9tIHRoZSB0aW1lIHRoZSBndWVzdCByZXF1ZXN0c1xuIFx0ICogdGhlIGZlYXR1cmUgZW5hYmxlZC5cbiBcdCAqL1xuLVx0dmNwdS1cdTAwM2VhcmNoLnN0ZWFsLmxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuK1x0dmNwdS1cdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbiBcdGt2bV93cml0ZV9ndWVzdF9sb2NrKGt2bSwgYmFzZSwgXHUwMDI2aW5pdF92YWx1ZXMsIHNpemVvZihpbml0X3ZhbHVlcykpO1xuIFxuIFx0cmV0dXJuIGJhc2U7XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDIzY2ZiZWNlYmJkNzkuLjE0NTE0YTI1YjI2MTMgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMjUzLDcgKzI1Myw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdC8qIHBhcmF2aXJ0IHN0ZWFsIHRpbWUgKi9cbiBcdHN0cnVjdCB7XG4gXHRcdHU2NCBndWVzdF9hZGRyO1xuLVx0XHR1NjQgbGFzdF9zdGVhbDtcbiBcdFx0c3RydWN0IGdmbl90b19odmFfY2FjaGUgY2FjaGU7XG4gXHRcdHU4ICBwcmVlbXB0ZWQ7XG4gXHR9IHN0O1xuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnIGIvYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWdcbmluZGV4IDE1ZGEyZDg4YzBjMTAuLjQ5OTZlYzljMDdmOTkgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZ1xuKysrIGIvYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWdcbkBAIC0yNiw2ICsyNiw3IEBAIGNvbmZpZyBLVk1cbiBcdHNlbGVjdCBIQVZFX0tWTV9NU0lcbiBcdHNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU1cbiBcdHNlbGVjdCBLVk1fQ09NTU9OXG4rXHRzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXG4gXHRzZWxlY3QgS1ZNX01NSU9cbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuY1xuaW5kZXggNGY1OGU2ZTJjZjg2Ni4uNTZhZTZiMThmOGMxMCAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmNcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmNcbkBAIC03NzMsNyArNzczLDcgQEAgc3RhdGljIGxvbmcga3ZtX3NhdmVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0aWYgKCEoZGF0YSBcdTAwMjYgS1ZNX1NURUFMX1BIWVNfVkFMSUQpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuLVx0XHR2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4rXHRcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4gXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdGRlZmF1bHQ6XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmNcbmluZGV4IGVkOWUwOTJjOTdiYTcuLjcyOGQyOWViYThlMDMgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG4rKysgYi9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG5AQCAtMTg3LDggKzE4Nyw4IEBAIHN0YXRpYyB2b2lkIGt2bV91cGRhdGVfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c21wX3dtYigpO1xuIFxuIFx0dW5zYWZlX2dldF91c2VyKHN0ZWFsLCBcdTAwMjZzdC1cdTAwM2VzdGVhbCwgb3V0KTtcbi1cdHN0ZWFsICs9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkgLSB2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbDtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbitcdHN0ZWFsICs9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkgLSB2Y3B1LVx1MDAzZWxhc3Rfc3RlYWw7XG4rXHR2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuIFx0dW5zYWZlX3B1dF91c2VyKHN0ZWFsLCBcdTAwMjZzdC1cdTAwM2VzdGVhbCwgb3V0KTtcbiBcbiBcdHNtcF93bWIoKTtcbkBAIC0xMjA1LDcgKzEyMDUsNyBAQCBzdGF0aWMgaW50IGt2bV9sb29uZ2FyY2hfcHZ0aW1lX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBcdGlmICghcmV0KSB7XG4gXHRcdHZjcHUtXHUwMDNlYXJjaC5zdC5ndWVzdF9hZGRyID0gZ3BhO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4rXHRcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4gXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYTMwNjAwNTc5MjMxYi4uMzA1ODc1MzAxYzA0MiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMjczLDcgKzI3Myw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdC8qIFNCSSBzdGVhbC10aW1lIGFjY291bnRpbmcgKi9cbiBcdHN0cnVjdCB7XG4gXHRcdGdwYV90IHNobWVtO1xuLVx0XHR1NjQgbGFzdF9zdGVhbDtcbiBcdH0gc3RhO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbmluZGV4IGVjMmNlZTBhMzllMDEuLjFmZjA3YTkwNGEwMjcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnXG5AQCAtMjYsNiArMjYsNyBAQCBjb25maWcgS1ZNXG4gXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXG4gXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXG4gXHRzZWxlY3QgS1ZNX0NPTU1PTlxuK1x0c2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcbiBcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcbiBcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xuIFx0c2VsZWN0IEtWTV9NTUlPXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfc3RhLmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9zdGEuY1xuaW5kZXggNjBlNTAyOTZhMDA4NS4uOWE3N2QzYmRlN2M3MiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3N0YS5jXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9zdGEuY1xuQEAgLTE5LDEzICsxOSwxMyBAQFxuIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl92Y3B1X3NiaV9zdGFfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHZjcHUtXHUwMDNlYXJjaC5zdGEuc2htZW0gPSBJTlZBTElEX0dQQTtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbCA9IDA7XG4rXHR2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgPSAwO1xuIH1cbiBcbiB2b2lkIGt2bV9yaXNjdl92Y3B1X3JlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRncGFfdCBzaG1lbSA9IHZjcHUtXHUwMDNlYXJjaC5zdGEuc2htZW07XG4tXHR1NjQgbGFzdF9zdGVhbCA9IHZjcHUtXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbDtcbitcdHU2NCBsYXN0X3N0ZWFsID0gdmNwdS1cdTAwM2VsYXN0X3N0ZWFsO1xuIFx0X19sZTMyIF9fdXNlciAqc2VxdWVuY2VfcHRyO1xuIFx0X19sZTY0IF9fdXNlciAqc3RlYWxfcHRyO1xuIFx0X19sZTMyIHNlcXVlbmNlX2xlO1xuQEAgLTY3LDggKzY3LDggQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9yZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRpZiAoIVdBUk5fT04oZ2V0X3VzZXIoc3RlYWxfbGUsIHN0ZWFsX3B0cikpKSB7XG4gXHRcdHN0ZWFsID0gbGU2NF90b19jcHUoc3RlYWxfbGUpO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2guc3RhLmxhc3Rfc3RlYWwgPSBSRUFEX09OQ0UoY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSk7XG4tXHRcdHN0ZWFsICs9IHZjcHUtXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbCAtIGxhc3Rfc3RlYWw7XG4rXHRcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IFJFQURfT05DRShjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5KTtcbitcdFx0c3RlYWwgKz0gdmNwdS1cdTAwM2VsYXN0X3N0ZWFsIC0gbGFzdF9zdGVhbDtcbiBcdFx0V0FSTl9PTihwdXRfdXNlcihjcHVfdG9fbGU2NChzdGVhbCksIHN0ZWFsX3B0cikpO1xuIFx0fVxuIFxuQEAgLTExNSw3ICsxMTUsNyBAQCBzdGF0aWMgaW50IGt2bV9zYmlfc3RhX3N0ZWFsX3RpbWVfc2V0X3NobWVtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0cmV0dXJuIFNCSV9FUlJfSU5WQUxJRF9BRERSRVNTO1xuIFxuIFx0dmNwdS1cdTAwM2VhcmNoLnN0YS5zaG1lbSA9IHNobWVtO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnN0YS5sYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbitcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDY4M2JiOGJmNDNhOTQuLmViZGQ4NTI2YWUxMjYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtODcyLDcgKzg3Miw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdHN0cnVjdCB7XG4gXHRcdHU4IHByZWVtcHRlZDtcbiBcdFx0dTY0IG1zcl92YWw7XG4tXHRcdHU2NCBsYXN0X3N0ZWFsO1xuIFx0XHRzdHJ1Y3QgZ2ZuX3RvX2h2YV9jYWNoZSBjYWNoZTtcbiBcdH0gc3Q7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL0tjb25maWcgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZ1xuaW5kZXggNTM4ZWQxZTgwMzMyNi4uYjJhZWE4MDU4ODQxMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9LY29uZmlnXG4rKysgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZ1xuQEAgLTQwLDYgKzQwLDcgQEAgY29uZmlnIEtWTV9YODZcbiBcdHNlbGVjdCBIQVZFX0tWTV9NU0lcbiBcdHNlbGVjdCBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUXG4gXHRzZWxlY3QgSEFWRV9LVk1fTk9fUE9MTFxuK1x0c2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcbiBcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuIFx0c2VsZWN0IEtWTV9WRklPXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5pbmRleCA3OTQ2OGRkZmU0NzM2Li45MjdjOGIxZWQ4M2QyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC0yMTI5LDkgKzIxMjksOCBAQCBzdGF0aWMgdm9pZCByZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzbXBfd21iKCk7XG4gXG4gXHR1bnNhZmVfZ2V0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuLVx0c3RlYWwgKz0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSAtXG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnN0Lmxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuK1x0c3RlYWwgKz0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSAtIHZjcHUtXHUwMDNlbGFzdF9zdGVhbDtcbitcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4gXHR1bnNhZmVfcHV0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuIFxuIFx0dmVyc2lvbiArPSAxO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggMDNiZmM5Mjg2NGI2ZS4uZmY5ZDQyM2I2YTdjNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtMzk4LDYgKzM5OCwxMCBAQCBzdHJ1Y3Qga3ZtX3ZjcHUge1xuIFx0ICovXG4gXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpsYXN0X3VzZWRfc2xvdDtcbiBcdHU2NCBsYXN0X3VzZWRfc2xvdF9nZW47XG4rXG4rI2lmZGVmIENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FXG4rXHR1NjQgbGFzdF9zdGVhbDtcbisjZW5kaWZcbiB9O1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDk2YmFiNzAwMmQzOWUuLjFkZTEzYzAwMTdlNDMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtMTY0LDYgKzE2NCw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiArPSBpcnFfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBtbXVfc3RyZXNzX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0gcnNlcV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHN0ZWFsX3RpbWVcbitURVNUX0dFTl9QUk9HU194ODYgKz0gc3RlYWxfdGltZV9jaGFuZ2VfcGlkXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHN5c3RlbV9jb3VudGVyX29mZnNldF90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHByZV9mYXVsdF9tZW1vcnlfdGVzdFxuIFxuQEAgLTIwNCw2ICsyMDUsNyBAQCBURVNUX0dFTl9QUk9HU19hcm02NCArPSBndWVzdF9tZW1mZF90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gbW11X3N0cmVzc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gcnNlcV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gc3RlYWxfdGltZVxuK1RFU1RfR0VOX1BST0dTX2FybTY0ICs9IHN0ZWFsX3RpbWVfY2hhbmdlX3BpZFxuIFxuIFRFU1RfR0VOX1BST0dTX3MzOTAgPSAkKFRFU1RfR0VOX1BST0dTX0NPTU1PTilcbiBURVNUX0dFTl9QUk9HU19zMzkwICs9IHMzOTAvbWVtb3BcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xMmQ0OTI3ZDFjMDE3XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmNcbkBAIC0wLDAgKzEsMjE2IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIFZlcmlmeSB0aGF0IEtWTSByZXNldHMgc3RlYWwtdGltZSBhY2NvdW50aW5nIHdoZW4gYSB2Q1BVIGZkIGlzIHJ1biBmcm9tXG4rICogYSBkaWZmZXJlbnQgaG9zdCBQSUQuXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wYXJhLmhcdTAwM2VcbisjaW5jbHVkZSBcImt2bV91dGlsLmhcIlxuKyNpbmNsdWRlIFwicHJvY2Vzc29yLmhcIlxuK1xuKyNkZWZpbmUgU1RfR1BBX0JBU0VcdFx0KDEgXHUwMDNjXHUwMDNjIDMwKVxuKyNkZWZpbmUgU1RfU0FORV9ERUxUQV9OU1x0KDFVTEwgXHUwMDNjXHUwMDNjIDYzKVxuK1xuK3N0YXRpYyB2b2lkICpzdF9ndmE7XG4rc3RhdGljIHU2NCBndWVzdF9zdG9sZW5fdGltZTtcbitzdGF0aWMgdTY0IG1haW5fc3RlYWw7XG4rc3RhdGljIHU2NCB0aHJlYWRfc3RlYWw7XG4rXG4rI2lmIGRlZmluZWQoX194ODZfNjRfXylcbitcbisjZGVmaW5lIFNURUFMX1RJTUVfU0laRVx0KChzaXplb2Yoc3RydWN0IGt2bV9zdGVhbF90aW1lKSArIDYzKSBcdTAwMjYgfjYzKVxuK1xuK3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3N0ZWFsX3RpbWUgKnN0ID0gc3RfZ3ZhO1xuK1xuK1x0V1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LVx1MDAzZXN0ZWFsKSk7XG4rXHRHVUVTVF9TWU5DKDApO1xuK1xuK1x0V1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LVx1MDAzZXN0ZWFsKSk7XG4rXHRHVUVTVF9TWU5DKDEpO1xuK1xuK1x0V1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LVx1MDAzZXN0ZWFsKSk7XG4rXHRHVUVTVF9ET05FKCk7XG4rfVxuK1xuK3N0YXRpYyBib29sIHN0ZWFsX3RpbWVfc3VwcG9ydGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRyZXR1cm4ga3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfS1ZNX1NURUFMX1RJTUUpO1xuK31cbitcbitzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2VuYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0dmNwdV9zZXRfbXNyKHZjcHUsIE1TUl9LVk1fU1RFQUxfVElNRSxcbitcdFx0ICAgICAodWxvbmcpc3RfZ3ZhIHwgS1ZNX01TUl9FTkFCTEVEKTtcbit9XG4rXG4rI2VsaWYgZGVmaW5lZChfX2FhcmNoNjRfXylcbitcbisjZGVmaW5lIFNURUFMX1RJTUVfU0laRVx0KChzaXplb2Yoc3RydWN0IHN0X3RpbWUpICsgNjMpIFx1MDAyNiB+NjMpXG4rXG4rI2RlZmluZSBQVl9USU1FX1NUXHQweGM1MDAwMDIxXG4rXG4rc3RydWN0IHN0X3RpbWUge1xuK1x0dTMyIHJldjtcbitcdHUzMiBhdHRyO1xuK1x0dTY0IHN0X3RpbWU7XG4rfTtcbitcbitzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXG4re1xuK1x0c3RydWN0IGFybV9zbWNjY19yZXMgcmVzO1xuK1x0c3RydWN0IHN0X3RpbWUgKnN0O1xuK1xuK1x0ZG9fc21jY2MoUFZfVElNRV9TVCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgXHUwMDI2cmVzKTtcbitcdEdVRVNUX0FTU0VSVF9ORShyZXMuYTAsIC0xKTtcbitcdEdVRVNUX0FTU0VSVF9FUShyZXMuYTAsICh1bG9uZylzdF9ndmEpO1xuK1xuK1x0c3QgPSAoc3RydWN0IHN0X3RpbWUgKilyZXMuYTA7XG4rXHRXUklURV9PTkNFKGd1ZXN0X3N0b2xlbl90aW1lLCBSRUFEX09OQ0Uoc3QtXHUwMDNlc3RfdGltZSkpO1xuK1x0R1VFU1RfU1lOQygwKTtcbitcbitcdFdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC1cdTAwM2VzdF90aW1lKSk7XG4rXHRHVUVTVF9TWU5DKDEpO1xuK1xuK1x0V1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LVx1MDAzZXN0X3RpbWUpKTtcbitcdEdVRVNUX0RPTkUoKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgc3RlYWxfdGltZV9zdXBwb3J0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgZGV2ID0ge1xuK1x0XHQuZ3JvdXAgPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0NUUkwsXG4rXHRcdC5hdHRyID0gS1ZNX0FSTV9WQ1BVX1BWVElNRV9JUEEsXG4rXHR9O1xuK1xuK1x0cmV0dXJuICFfX3ZjcHVfaW9jdGwodmNwdSwgS1ZNX0hBU19ERVZJQ0VfQVRUUiwgXHUwMDI2ZGV2KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgc3RlYWxfdGltZV9lbmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHU2NCBzdF9pcGEgPSAodWxvbmcpc3RfZ3ZhO1xuK1x0c3RydWN0IGt2bV9kZXZpY2VfYXR0ciBkZXYgPSB7XG4rXHRcdC5ncm91cCA9IEtWTV9BUk1fVkNQVV9QVlRJTUVfQ1RSTCxcbitcdFx0LmF0dHIgPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0lQQSxcbitcdFx0LmFkZHIgPSAodTY0KVx1MDAyNnN0X2lwYSxcbitcdH07XG4rXG4rXHR2Y3B1X2lvY3RsKHZjcHUsIEtWTV9TRVRfREVWSUNFX0FUVFIsIFx1MDAyNmRldik7XG4rfVxuK1xuKyNlbHNlXG4rI2Vycm9yIFwic3RlYWxfdGltZV9jaGFuZ2VfcGlkIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIGFyY2hpdGVjdHVyZVwiXG4rI2VuZGlmXG4rXG4rc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCB1Y2FsbCB1YztcbitcbitcdHZjcHVfcnVuKHZjcHUpO1xuK1xuK1x0c3dpdGNoIChnZXRfdWNhbGwodmNwdSwgXHUwMDI2dWMpKSB7XG4rXHRjYXNlIFVDQUxMX1NZTkM6XG4rXHRjYXNlIFVDQUxMX0RPTkU6XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBVQ0FMTF9BQk9SVDpcbitcdFx0UkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7XG4rXHRkZWZhdWx0OlxuK1x0XHRURVNUX0FTU0VSVChmYWxzZSwgXCJVbmV4cGVjdGVkIGV4aXQ6ICVzXCIsXG4rXHRcdFx0ICAgIGV4aXRfcmVhc29uX3N0cih2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbikpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCAqZG9fc3RlYWxfdGltZSh2b2lkICphcmcpXG4re1xuK1x0c3RydWN0IHRpbWVzcGVjIHRzLCBzdG9wO1xuK1xuK1x0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNnRzKTtcbitcdHN0b3AgPSB0aW1lc3BlY19hZGRfbnModHMsIE1JTl9SVU5fREVMQVlfTlMpO1xuK1xuK1x0d2hpbGUgKHRpbWVzcGVjX3RvX25zKHRpbWVzcGVjX3N1Yih0cywgc3RvcCkpIFx1MDAzYyAwKVxuK1x0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2dHMpO1xuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkICp2Y3B1X3RocmVhZCh2b2lkICphcmcpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gYXJnO1xuK1xuK1x0cnVuX3ZjcHUodmNwdSk7XG4rXHRzeW5jX2dsb2JhbF9mcm9tX2d1ZXN0KHZjcHUtXHUwMDNldm0sIGd1ZXN0X3N0b2xlbl90aW1lKTtcbitcdHRocmVhZF9zdGVhbCA9IGd1ZXN0X3N0b2xlbl90aW1lO1xuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK2ludCBtYWluKHZvaWQpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRwdGhyZWFkX2F0dHJfdCBhdHRyO1xuK1x0cHRocmVhZF90IHRocmVhZDtcbitcdGNwdV9zZXRfdCBjcHVzZXQ7XG4rXHRsb25nIHJ1bl9kZWxheTtcbitcdGxvbmcgcnVuX2RlbGF5X2RlbHRhO1xuK1xuK1x0a3NmdF9wcmludF9oZWFkZXIoKTtcbitcdGtzZnRfc2V0X3BsYW4oMSk7XG4rXG4rXHRDUFVfWkVSTyhcdTAwMjZjcHVzZXQpO1xuK1x0Q1BVX1NFVCgwLCBcdTAwMjZjcHVzZXQpO1xuK1x0cHRocmVhZF9hdHRyX2luaXQoXHUwMDI2YXR0cik7XG4rXHRwdGhyZWFkX2F0dHJfc2V0YWZmaW5pdHlfbnAoXHUwMDI2YXR0ciwgc2l6ZW9mKGNwdXNldCksIFx1MDAyNmNwdXNldCk7XG4rXHRwdGhyZWFkX3NldGFmZmluaXR5X25wKHB0aHJlYWRfc2VsZigpLCBzaXplb2YoY3B1c2V0KSwgXHUwMDI2Y3B1c2V0KTtcbitcbitcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XG4rXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLFxuK1x0XHRcdFx0ICAgIFNUX0dQQV9CQVNFLCAxLCAxLCAwKTtcbitcdHZpcnRfbWFwKHZtLCBTVF9HUEFfQkFTRSwgU1RfR1BBX0JBU0UsIDEpO1xuK1xuK1x0c3RfZ3ZhID0gKHZvaWQgKilTVF9HUEFfQkFTRTtcbitcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBzdF9ndmEpO1xuK1x0bWVtc2V0KGFkZHJfZ3ZhMmh2YSh2bSwgU1RfR1BBX0JBU0UpLCAwLCBTVEVBTF9USU1FX1NJWkUpO1xuK1xuK1x0VEVTVF9SRVFVSVJFKHN0ZWFsX3RpbWVfc3VwcG9ydGVkKHZjcHUpKTtcbitcbitcdHN0ZWFsX3RpbWVfZW5hYmxlKHZjcHUpO1xuK1x0cnVuX3ZjcHUodmNwdSk7XG4rXG4rXHRydW5fZGVsYXkgPSBnZXRfcnVuX2RlbGF5KCk7XG4rXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIFx1MDAyNmF0dHIsIGRvX3N0ZWFsX3RpbWUsIE5VTEwpO1xuK1xuK1x0d2hpbGUgKGdldF9ydW5fZGVsYXkoKSAtIHJ1bl9kZWxheSBcdTAwM2MgTUlOX1JVTl9ERUxBWV9OUylcbitcdFx0c2NoZWRfeWllbGQoKTtcbitcbitcdHB0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpO1xuK1x0cnVuX2RlbGF5X2RlbHRhID0gZ2V0X3J1bl9kZWxheSgpIC0gcnVuX2RlbGF5O1xuK1x0VEVTVF9BU1NFUlQocnVuX2RlbGF5X2RlbHRhIFx1MDAzZT0gTUlOX1JVTl9ERUxBWV9OUyxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgcnVuX2RlbGF5IFx1MDAzZT0gJWxkLCBnb3QgJWxkXCIsXG4rXHRcdCAgICBNSU5fUlVOX0RFTEFZX05TLCBydW5fZGVsYXlfZGVsdGEpO1xuK1xuK1x0cnVuX3ZjcHUodmNwdSk7XG4rXHRzeW5jX2dsb2JhbF9mcm9tX2d1ZXN0KHZtLCBndWVzdF9zdG9sZW5fdGltZSk7XG4rXHRtYWluX3N0ZWFsID0gZ3Vlc3Rfc3RvbGVuX3RpbWU7XG4rXG4rXHRURVNUX0FTU0VSVChtYWluX3N0ZWFsIFx1MDAzZT0gTUlOX1JVTl9ERUxBWV9OUyxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgc3RlYWwgdGltZSBcdTAwM2U9ICVsZCwgZ290ICVcIlBSSXU2NCxcbitcdFx0ICAgIE1JTl9SVU5fREVMQVlfTlMsIG1haW5fc3RlYWwpO1xuK1xuK1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdSk7XG4rXHRwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTtcbitcbitcdFRFU1RfQVNTRVJUKHRocmVhZF9zdGVhbCBcdTAwM2U9IG1haW5fc3RlYWwgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB0aHJlYWRfc3RlYWwgLSBtYWluX3N0ZWFsIFx1MDAzYyBTVF9TQU5FX0RFTFRBX05TLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBzYW5lIHN0ZWFsIGFmdGVyIHZDUFUgcGlkIGNoYW5nZTogXCJcbitcdFx0ICAgIFwib2xkPSVcIlBSSXU2NFwiLCBuZXc9JVwiUFJJdTY0LFxuK1x0XHQgICAgbWFpbl9zdGVhbCwgdGhyZWFkX3N0ZWFsKTtcbitcbitcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcInN0ZWFsIHRpbWUgcmVtYWlucyBzYW5lIGFjcm9zcyB2Q1BVIHBpZCBjaGFuZ2VcXG5cIik7XG4rXG4rXHRwdGhyZWFkX2F0dHJfZGVzdHJveShcdTAwMjZhdHRyKTtcbitcdGt2bV92bV9mcmVlKHZtKTtcbitcdGtzZnRfZmluaXNoZWQoKTtcbit9XG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vS2NvbmZpZyBiL3ZpcnQva3ZtL0tjb25maWdcbmluZGV4IGMzYzBlZTI1M2ZjNzcuLmY0MmEzYTBmYzViYWIgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9LY29uZmlnXG4rKysgYi92aXJ0L2t2bS9LY29uZmlnXG5AQCAtODIsNiArODIsOSBAQCBjb25maWcgSEFWRV9LVk1fSVJRX0JZUEFTU1xuIGNvbmZpZyBIQVZFX0tWTV9WQ1BVX1JVTl9QSURfQ0hBTkdFXG4gICAgICAgIGJvb2xcbiBcbitjb25maWcgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxuKyAgICAgICBib29sXG4rXG4gY29uZmlnIEhBVkVfS1ZNX05PX1BPTExcbiAgICAgICAgYm9vbFxuIFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5pbmRleCA2NWViMjZhMDUyMGQ4Li43ODRmMGQ5NDViNDU2IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTQ0NzgsNiArNDQ3OCwxMCBAQCBzdGF0aWMgbG9uZyBrdm1fdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0XHRpZiAocilcbiBcdFx0XHRcdGJyZWFrO1xuIFxuKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxuK1x0XHRcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4rI2VuZGlmXG4rXG4gXHRcdFx0bmV3cGlkID0gZ2V0X3Rhc2tfcGlkKGN1cnJlbnQsIFBJRFRZUEVfUElEKTtcbiBcdFx0XHR3cml0ZV9sb2NrKFx1MDAyNnZjcHUtXHUwMDNlcGlkX2xvY2spO1xuIFx0XHRcdHZjcHUtXHUwMDNlcGlkID0gbmV3cGlkO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDM6MjcuNzc3Nzc5OTc4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY3NzkyMjczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBLVk0gU3RlYWwgVGltZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgYWxsIGFib3V0IGhvdyBLVk0gaGFuZGxlcyBcInN0ZWFsIHRpbWVcIiB3aXRoIHBhcmF2aXJ0dWFsaXphdGlvbi4gSSBuZWVkIHRvIGJyZWFrIHRoaXMgZG93bi5cblxuRmlyc3QsIGl0J3MgYWRkaW5nIHRoaXMgYENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTWFrZXMgc2Vuc2Ug4oCTIHRoaXMgc2VlbXMgdG8gYmUgdGhlIHRyaWdnZXIgZm9yIGVuYWJsaW5nIHRoaXMgZW5oYW5jZWQgc3RlYWwgdGltZSBhY2NvdW50aW5nLCBhbmQgaXQncyBzcGVjaWZpY2FsbHkgZm9yIGFybTY0LCBsb29uZ2FyY2gsIHJpc2N2LCBhbmQgeDg2IEtWTS4gR29vZCwgaXQncyB0YXJnZXRlZCB0byByZWxldmFudCBhcmNoaXRlY3R1cmVzLlxuXG5OZXh0LCBhbmQgdGhpcyBpcyBrZXksIGl04oCZcyBtb3ZpbmcgdGhlIGBsYXN0X3N0ZWFsYCB2YXJpYWJsZS4gQ3VycmVudGx5IGl0IHJlc2lkZXMgaW4gYSBgc3RydWN0IGt2bV92Y3B1X2FyY2hgIChvciBhcmNoLXNwZWNpZmljIHN0cnVjdCksIHdoaWNoIGlzIHBsYXRmb3JtLWRlcGVuZGVudC4gQnV0LCBpdCdzIG5vdyBiZWluZyBtb3ZlZCB0byB0aGUgY29tbW9uIGBzdHJ1Y3Qga3ZtX3ZjcHVgIGlmIHRoYXQgYENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FYCBpcyBzZXQuIFRoaXMgbWVhbnMgaXQncyBtYWtpbmcgdGhlIGFjY291bnRpbmcgbG9naWMgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50LiBJdCB3aWxsIGJlIGVhc2llciB0byB3b3JrIHdpdGguIFZlcnkgc2Vuc2libGUuIFRoYXQgbWFrZXMgdGhlIHdob2xlIHN5c3RlbSBjbGVhbmVyLlxuXG5Ob3csIHRoZSBpbnRlcmVzdGluZyBwYXJ0IOKAkyBob3cgdGhpcyBgbGFzdF9zdGVhbGAgZ2V0cyB1cGRhdGVkLiBJIG5lZWQgdG8gZGlnIGludG8gYHZpcnQva3ZtL2t2bV9tYWluLmNgIGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSByZWFsIGxvZ2ljIGhhcHBlbnMuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUgdXBkYXRlIGhhcHBlbnMgd2hlbiBgS1ZNX1JVTmAgaXMgY2FsbGVkLCBhbmQsIGNydWNpYWxseSwgd2hlbiB0aGUgUHJvY2VzcyBJRCAoUElEKSBjaGFuZ2VzIGluc2lkZSB0aGUgYGt2bV92Y3B1X2lvY3RsYCBmdW5jdGlvbiB3aGlsZSBoYW5kbGluZyBgS1ZNX1JVTmAgdGhyb3VnaCBQSUQgY2hlY2tzLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoYXQncyBpbXBsZW1lbnRlZC4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhhdCBmaWxlIGFuZCBjaGVjayBhcm91bmQgbGluZSA0NDc4IHRvIHNlZSB0aGUgZGV0YWlscyBvZiB0aGUgbG9naWMuIEhvcGVmdWxseSwgaXQgaXMgcHJldHR5IHNpbXBsZSwgYW5kIEkgY2FuIHF1aWNrbHkgZ3Jhc3Agd2hhdCBpcyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg5OSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAzOjMxLjQ1NTcwNjI3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNDg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0NjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ0NjA6XFx0XFx0Y2FzZSBLVk1fUlVOOiB7XFxuNDQ2MTpcXHRcXHRcXHRzdHJ1Y3QgcGlkICpvbGRwaWQ7XFxuNDQ2MjpcXHRcXHRcXHRyID0gLUVJTlZBTDtcXG40NDYzOlxcdFxcdFxcdGlmIChhcmcpXFxuNDQ2NDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG40NDY1OlxcdFxcbjQ0NjY6XFx0XFx0XFx0LypcXG40NDY3OlxcdFxcdFxcdCAqIE5vdGUsIHZjcHUtXFx1MDAzZXBpZCBpcyBwcmltYXJpbHkgcHJvdGVjdGVkIGJ5IHZjcHUtXFx1MDAzZW11dGV4LiBUaGVcXG40NDY4OlxcdFxcdFxcdCAqIGRlZGljYXRlZCByL3cgbG9jayBhbGxvd3Mgb3RoZXIgdGFza3MsIGUuZy4gb3RoZXIgdkNQVXMsIHRvXFxuNDQ2OTpcXHRcXHRcXHQgKiByZWFkIHZjcHUtXFx1MDAzZXBpZCB3aGlsZSB0aGlzIHZDUFUgaXMgaW4gS1ZNX1JVTiwgZS5nLiB0byB5aWVsZFxcbjQ0NzA6XFx0XFx0XFx0ICogZGlyZWN0bHkgdG8gdGhpcyB2Q1BVXFxuNDQ3MTpcXHRcXHRcXHQgKi9cXG40NDcyOlxcdFxcdFxcdG9sZHBpZCA9IHZjcHUtXFx1MDAzZXBpZDtcXG40NDczOlxcdFxcdFxcdGlmICh1bmxpa2VseShvbGRwaWQgIT0gdGFza19waWQoY3VycmVudCkpKSB7XFxuNDQ3NDpcXHRcXHRcXHRcXHQvKiBUaGUgdGhyZWFkIHJ1bm5pbmcgdGhpcyBWQ1BVIGNoYW5nZWQuICovXFxuNDQ3NTpcXHRcXHRcXHRcXHRzdHJ1Y3QgcGlkICpuZXdwaWQ7XFxuNDQ3NjpcXHRcXG40NDc3OlxcdFxcdFxcdFxcdHIgPSBrdm1fYXJjaF92Y3B1X3J1bl9waWRfY2hhbmdlKHZjcHUpO1xcbjQ0Nzg6XFx0XFx0XFx0XFx0aWYgKHIpXFxuNDQ3OTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG40NDgwOlxcdFxcbjQ0ODE6XFx0I2lmZGVmIENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FXFxuNDQ4MjpcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XFxuNDQ4MzpcXHQjZW5kaWZcXG40NDg0OlxcdFxcbjQ0ODU6XFx0XFx0XFx0XFx0bmV3cGlkID0gZ2V0X3Rhc2tfcGlkKGN1cnJlbnQsIFBJRFRZUEVfUElEKTtcXG40NDg2OlxcdFxcdFxcdFxcdHdyaXRlX2xvY2soXFx1MDAyNnZjcHUtXFx1MDAzZXBpZF9sb2NrKTtcXG40NDg3OlxcdFxcdFxcdFxcdHZjcHUtXFx1MDAzZXBpZCA9IG5ld3BpZDtcXG40NDg4OlxcdFxcdFxcdFxcdHdyaXRlX3VubG9jayhcXHUwMDI2dmNwdS1cXHUwMDNlcGlkX2xvY2spO1xcbjQ0ODk6XFx0XFxuNDQ5MDpcXHRcXHRcXHRcXHRwdXRfcGlkKG9sZHBpZCk7XFxuNDQ5MTpcXHRcXHRcXHR9XFxuNDQ5MjpcXHRcXHRcXHR2Y3B1LVxcdTAwM2V3YW50c190b19ydW4gPSAhUkVBRF9PTkNFKHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlaW1tZWRpYXRlX2V4aXRfX3Vuc2FmZSk7XFxuNDQ5MzpcXHRcXHRcXHRyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4odmNwdSk7XFxuNDQ5NDpcXHRcXHRcXHR2Y3B1LVxcdTAwM2V3YW50c190b19ydW4gPSBmYWxzZTtcXG40NDk1OlxcdFxcbjQ0OTY6XFx0XFx0XFx0LypcXG40NDk3OlxcdFxcdFxcdCAqIEZJWE1FOiBSZW1vdmUgdGhpcyBoYWNrIG9uY2UgYWxsIEtWTSBhcmNoaXRlY3R1cmVzXFxuNDQ5ODpcXHRcXHRcXHQgKiBzdXBwb3J0IHRoZSBnZW5lcmljIFRJRiBiaXRzLCBpLmUuIGEgZGVkaWNhdGVkIFRJRl9SU0VRLlxcbjQ0OTk6XFx0XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAzOjMxLjQ1NjI0Mzk4NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxMDkwMjc2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBWQ1BVIFN0ZWFsIFRpbWUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGhvdyBLVk0gdHJhY2tzIFwic3RlYWwgdGltZVwiIHdpdGhpbiBhIHZpcnR1YWwgQ1BVIChWQ1BVKS4gVGhlIHRyaWdnZXIgc2VlbXMgdG8gYmUgd2hlbiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdGhyZWFkIGZvciBhIFZDUFUgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHdoZW4gYG9sZHBpZGAgKHRoZSBwcmV2aW91cyB0aHJlYWQncyBQSUQpIGRpZmZlcnMgZnJvbSBgdGFza19waWQoY3VycmVudClgIHdpdGhpbiB0aGUgYEtWTV9SVU5gIG9wZXJhdGlvbi4gSW4gdGhhdCBzY2VuYXJpbywgYHZjcHUtXHUwMDNlbGFzdF9zdGVhbGAgZ2V0cyByZXNldCB0byB0aGUgdmFsdWUgb2YgYGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXlgLiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIGluaXRpYWxpemF0aW9uIHBvaW50IGZvciB0aGUgbmV3IFZDUFUgcnVuLlxuXG5NeSBpbnRlcmVzdCBpcyBwaXF1ZWQgYnkgaG93IGBsYXN0X3N0ZWFsYCBpcyB0aGVuICp1c2VkKi4gSXQgbG9va3MgbGlrZSB0aGUgY3JpdGljYWwgZnVuY3Rpb24gaGVyZSBpcyBgcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KWAgbG9jYXRlZCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gVGhhdCBmdW5jdGlvbiAqbXVzdCogYmUgdGhlIHBsYWNlIHdoZXJlIGB2Y3B1LVx1MDAzZWxhc3Rfc3RlYWxgIGlzIHVzZWQgdG8gYWNjdW11bGF0ZSB0aW1lLiBOZWVkIHRvIHNlZSBob3cgdGhhdCBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBjb250cmlidXRlcyB0byB0aGUgZmluYWwgbWVhc3VyZW1lbnQuIEJhc2VkIG9uIHRoZSBmaWxlIHBhdGgsIEkgc2hvdWxkIGxvb2sgYXJvdW5kIGxpbmUgMjEyOSB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExOTIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMzozNC41NjUyNzQ2NjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjYzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxMTU6XFx0XFx0XFx0aWYgKCF1c2VyX2FjY2Vzc19iZWdpbihzdCwgc2l6ZW9mKCpzdCkpKVxcbjIxMTY6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjIxMTc6XFx0XFxuMjExODpcXHRcXHRcXHR1bnNhZmVfcHV0X3VzZXIoMCwgXFx1MDAyNnN0LVxcdTAwM2VwcmVlbXB0ZWQsIG91dCk7XFxuMjExOTpcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnN0LnByZWVtcHRlZCA9IDA7XFxuMjEyMDpcXHRcXHR9XFxuMjEyMTpcXHRcXG4yMTIyOlxcdFxcdHVuc2FmZV9nZXRfdXNlcih2ZXJzaW9uLCBcXHUwMDI2c3QtXFx1MDAzZXZlcnNpb24sIG91dCk7XFxuMjEyMzpcXHRcXHRpZiAodmVyc2lvbiBcXHUwMDI2IDEpXFxuMjEyNDpcXHRcXHRcXHR2ZXJzaW9uICs9IDE7ICAvKiBmaXJzdCB0aW1lIHdyaXRlLCByYW5kb20ganVuayAqL1xcbjIxMjU6XFx0XFxuMjEyNjpcXHRcXHR2ZXJzaW9uICs9IDE7XFxuMjEyNzpcXHRcXHR1bnNhZmVfcHV0X3VzZXIodmVyc2lvbiwgXFx1MDAyNnN0LVxcdTAwM2V2ZXJzaW9uLCBvdXQpO1xcbjIxMjg6XFx0XFxuMjEyOTpcXHRcXHRzbXBfd21iKCk7XFxuMjEzMDpcXHRcXG4yMTMxOlxcdFxcdHVuc2FmZV9nZXRfdXNlcihzdGVhbCwgXFx1MDAyNnN0LVxcdTAwM2VzdGVhbCwgb3V0KTtcXG4yMTMyOlxcdFxcdHN0ZWFsICs9IGN1cnJlbnQtXFx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5IC0gdmNwdS1cXHUwMDNlbGFzdF9zdGVhbDtcXG4yMTMzOlxcdFxcdHZjcHUtXFx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcXG4yMTM0OlxcdFxcdHVuc2FmZV9wdXRfdXNlcihzdGVhbCwgXFx1MDAyNnN0LVxcdTAwM2VzdGVhbCwgb3V0KTtcXG4yMTM1OlxcdFxcbjIxMzY6XFx0XFx0dmVyc2lvbiArPSAxO1xcbjIxMzc6XFx0XFx0dW5zYWZlX3B1dF91c2VyKHZlcnNpb24sIFxcdTAwMjZzdC1cXHUwMDNldmVyc2lvbiwgb3V0KTtcXG4yMTM4OlxcdFxcbjIxMzk6XFx0IG91dDpcXG4yMTQwOlxcdFxcdHVzZXJfYWNjZXNzX2VuZCgpO1xcbjIxNDE6XFx0IGRpcnR5OlxcbjIxNDI6XFx0XFx0bWFya19wYWdlX2RpcnR5X2luX3Nsb3QodmNwdS1cXHUwMDNla3ZtLCBnaGMtXFx1MDAzZW1lbXNsb3QsIGdwYV90b19nZm4oZ2hjLVxcdTAwM2VncGEpKTtcXG4yMTQzOlxcdH1cXG4yMTQ0OlxcdFxcbjIxNDU6XFx0c3RhdGljIGlubGluZSBib29sIGt2bV9jYW5fbXdhaXRfaW5fZ3Vlc3Qodm9pZClcXG4yMTQ2OlxcdHtcXG4yMTQ3OlxcdFxcdHJldHVybiBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTVdBSVQpIFxcdTAwMjZcXHUwMDI2XFxuMjE0ODpcXHRcXHRcXHQhYm9vdF9jcHVfaGFzX2J1ZyhYODZfQlVHX01PTklUT1IpIFxcdTAwMjZcXHUwMDI2XFxuMjE0OTpcXHRcXHRcXHRib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVJBVCk7XFxuMjE1MDpcXHR9XFxuMjE1MTpcXHRcXG4yMTUyOlxcdHN0YXRpYyB1NjQga3ZtX2dldF9hbGxvd2VkX2Rpc2FibGVfZXhpdHModm9pZClcXG4yMTUzOlxcdHtcXG4yMTU0OlxcdFxcdHU2NCByID0gS1ZNX1g4Nl9ESVNBQkxFX0VYSVRTX1BBVVNFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMzozNC41NjYyMTk2NzJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDcyOTA3Mjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IEV2YWx1YXRpb246IEtWTSBQSUQgTWlncmF0aW9uL1N0ZWFsIFRpbWUgRml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGxvb2tzIGxpa2UgYSBwcm9taXNpbmcgYXJlYSBmb3IgZnV6emluZy4gVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIHdoaWNoIGlzIGNydWNpYWwsIGFuZCB0aGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGtleSBLVk0gZmlsZXM6IGBrdm1fbWFpbi5jYCwgYHg4Ni5jYCwgYSBgS2NvbmZpZ2AgZmlsZSwgYW5kIHNldmVyYWwgaGVhZGVyIGZpbGVzLiBBZGRpdGlvbmFsbHksIGl0IGFmZmVjdHMgYXJtNjQsIGxvb25nYXJjaCwgYW5kIHJpc2N2IGZpbGVzLiBUaGF0IGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbiDigJMgYnJvYWRlciBpbXBhY3Qgb2Z0ZW4gbWVhbnMgYnJvYWRlciBmdXp6aW5nIHN1cmZhY2UuIFBsdXMsIHRoZSBpbmNsdXNpb24gb2YgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8qYCBzdWdnZXN0cyB0aGlzIGlzIGFscmVhZHkgb24gc29tZW9uZSdzIHJhZGFyIGZvciB0ZXN0aW5nLCBtYWtpbmcgaXQgZXZlbiBtb3JlIHJlbGV2YW50LlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgY29kZT8gU2VjdGlvbiAxLCAyLCBhbmQgMyBoZWxwIGNsYXJpZnkgdGhhdC4gS1ZNIGlzIGZ1bGx5IHN1cHBvcnRlZCBvbiBhbWQ2NCB3aXRoaW4gUUVNVSBhbmQgc3l6a2FsbGVyLCB3aGljaCBtZWFucyB3ZSBoYXZlIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlIHRvIHJlYWNoIHRoaXMgY29kZS4gU3l6a2FsbGVyJ3MgS1ZNIGRlc2NyaXB0aW9ucyBhbmQgaW9jdGxzIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBhdHRhY2sgc3VyZmFjZS5cblxuVGhlIGNvcmUgc3Vic3lzdGVtIGhlcmUgaXMgS1ZNIHZpcnR1YWxpemF0aW9uLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIGFkZHJlc3NpbmcgYSBidWcgcmVsYXRlZCB0byB2Q1BVIFBJRCBtaWdyYXRpb24uIEFwcGFyZW50bHksIHdoZW4gYSB2Q1BVIHJ1bnMgb24gYSBkaWZmZXJlbnQgaG9zdCB0aHJlYWQgb3IgUElELCB0aGUgc3RlYWwgdGltZSBjYWxjdWxhdGlvbnMgd2VyZSBiZWluZyBjb3JydXB0ZWQgYmVjYXVzZSBgbGFzdF9zdGVhbGAgd2Fzbid0IGJlaW5nIHVwZGF0ZWQgY29ycmVjdGx5LCBsZWFkaW5nIHRvIHBvdGVudGlhbGx5IG1hc3NpdmUgZGVsdGFzIG9yIHVuZGVyZmxvd3MuIFRoZSBmaXggaW52b2x2ZXMgcmVmYWN0b3JpbmcgYGxhc3Rfc3RlYWxgIGludG8gdGhlIGdlbmVyaWMgYGt2bV92Y3B1YCBzdHJ1Y3QgYW5kIHJlc2V0dGluZyBpdCB3aXRoaW4gYGt2bV92Y3B1X2lvY3RsKClgIGR1cmluZyBQSUQgY2hhbmdlcy4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIGNvZGUgaXMgZGVhbGluZyB3aXRoIHZDUFUgc2NoZWR1bGluZyBhbmQgY29udGV4dCBzd2l0Y2hpbmcsIGEga25vd24gYXJlYSBvZiBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS5cblxuVGhlIGV4ZWN1dGFibGUgY29kZSBtb2RpZmllZCBpbmNsdWRlcyBga3ZtX3ZjcHVfaW9jdGxgIGFuZCBgcmVjb3JkX3N0ZWFsX3RpbWVgLCB3aGljaCBhcmUgaW1wb3J0YW50IHRvIEtWTSBvcGVyYXRpb24sIGFuZCB0aGV5IGFyZSB4ODYvZ2VuZXJpYy5cblxuR2l2ZW4gdGhlIHJlYWNoYWJpbGl0eSwgdGhlIGNyaXRpY2FsIGNvcmUgc3Vic3lzdGVtLCBhbmQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBhZmZlY3RlZCwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBmaXggZGlyZWN0bHkgcmVsYXRlcyB0byBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGludGVnZXIgb3ZlcmZsb3dzL3VuZGVyZmxvd3MgaW4gdGltaW5nIGNhbGN1bGF0aW9ucy4gV2Ugd2lsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkIOKAkyBzcGVjaWZpY2FsbHkgYEtWTWAgKG9yIGBLVk1fSU5URUxgL2BLVk1fQU1EYCwgYEtWTV9YODZgKS4gSSdsbCBuZWVkIHRvIGNoZWNrIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgYW5kIGB2aXJ0L2t2bS9LY29uZmlnYCB0byBjb25maXJtIHRob3NlIGNvbmZpZyBmbGFncy4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgdGFyZ2V0IGZvciBmb2N1c2VkIGZ1enppbmcgY2FtcGFpZ25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI3NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAzOjM5LjAzOTEyOThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMzUyOTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTM6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTU0LVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo3MDpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcxLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjg0OmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODUtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTc6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk4LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA3LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwODpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA5LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjM9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzQtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM1OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM2LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ3OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ4LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU3OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1OC1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3NDpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NS1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4My1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODQ6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODUtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk1OmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk2LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDk6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTAtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTctXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE4OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE5LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMxOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzQ6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzUtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMzozOS4xNDk0ODgxMjJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODk3NjY3NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBTdGVhbCBUaW1lIEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgS1ZNIHN0ZWFsIHRpbWUgc2l0dWF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZC4gSSdsbCBzdGFydCBieSBjaGVja2luZyBgQ09ORklHX0tWTWAgYW5kLCBvZiBjb3Vyc2UsIHRoZSB2ZW5kb3Itc3BlY2lmaWMgb3B0aW9ucyBsaWtlIGBDT05GSUdfS1ZNX0lOVEVMYCBhbmQgYENPTkZJR19LVk1fQU1EYC4gVGhlbiwgSSdsbCB0cmFjZSB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXMsIG1ha2luZyBzdXJlIGBLVk1fWDg2YCBpcyBjb3JyZWN0bHkgc2VsZWN0aW5nIGBIQVZFX0tWTV9QVl9TVEVBTF9USU1FYC5cblxuQWgsIGhlcmUncyB0aGUgbGlua2FnZSwgaW4gYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gYGNvbmZpZyBLVk1fWDg2YCBkb2VzIGluZGVlZCBgc2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVgLiBMZXQncyBiZSBzdXJlIG9mIHRoZSBuZXN0aW5nLiBgS1ZNX1g4NmAgaXRzZWxmIGlzIGRlcGVuZGVudCBvbiB0aGUgYnJvYWRlciBLVk0sIHZpYSB0aGUgZGVwZW5kZW5jeSBgZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKWAuIFJpZ2h0LCBzbyBgS1ZNYCBpcyB0aGUgcGFyZW50LCBhbmQgdGhhdCBjb25maWd1cmF0aW9uIGlzIGl0c2VsZiB1bmRlciBgaWYgVklSVFVBTElaQVRJT05gLiBTbywgdG8gYmUgY2xlYXIsIGl0J3MgYEtWTWAsIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCAob3IgYEtWTV9YODZgKSB3ZSdyZSB0YWxraW5nIGFib3V0LlxuXG5Ob3csIHRoZSBjcnVjaWFsIHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cuIEknbGwgc2VhcmNoIHRoZSB4ODYgS1ZNIGNvZGUgdG8gaWRlbnRpZnkgdGhlIGxvY2F0aW9ucyB3aGVyZSBgcmVjb3JkX3N0ZWFsX3RpbWVgIGlzIGFjdHVhbGx5IGNhbGxlZC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGVudHJ5cG9pbnRzIGFuZCBjb250ZXh0IG9mIHRoZSBtZWFzdXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTAzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAzOjQyLjA0NzE1OTM1N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMDI3MzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlY29yZF9zdGVhbF90aW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTIwNDY9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXJ2aWNlX2xvY2FsX3RsYl9mbHVzaF9yZXF1ZXN0cyk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTIwNDctXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjIwNDg6c3RhdGljIHZvaWQgcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ODYuYy0yMDQ5LXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz04MDUwPXN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtODE0MC1cXHRcXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpKVxcbmFyY2gveDg2L2t2bS94ODYuYzo4MTQxOlxcdFxcdFxcdHJlY29yZF9zdGVhbF90aW1lKHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy04MTQyLVxcdFxcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1BNVSwgdmNwdSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAzOjQyLjE2ODE5NDc2OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTUwMTE3NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyBmb3IgU3RlYWwgVGltZSBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBrZXkgZm9jdXMgc3ltYm9scyB0byBwaW5wb2ludCB3aXRoaW4gdGhlIGNvZGUgZm9yIHRoaXMgc3RlYWwgdGltZSBpbnZlc3RpZ2F0aW9uLiBJJ20gdGhpbmtpbmcuLi5cblxuKiAgIGByZWNvcmRfc3RlYWxfdGltZWAganVtcHMgb3V0IGltbWVkaWF0ZWx5LCBlc3BlY2lhbGx5IHNpbmNlIGl0J3MgZ290IGEgbW9kaWZpY2F0aW9uIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yLlxuXG4qICAgVGhlbiB0aGVyZSdzIGBrdm1fdmNwdV9pb2N0bGAgd2hpY2ggaGFzIGNoYW5nZXMgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgLCBhbmQgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgS1ZNX1JVTiBoYW5kbGluZyBhbmQgUElEIGNoYW5nZXMuIEludHJpZ3VpbmcuLi5jb3VsZCBiZSByZWxhdGVkIHRvIGNvbnRleHQgc3dpdGNoaW5nIG9yIGFjY291bnRpbmcuXG5cbiogICBgdmNwdV9lbnRlcl9ndWVzdGAgaXMgYW5vdGhlciBnb29kIGNhbmRpZGF0ZS4gSXQncyBsaXN0ZWQgYXMgYSAqY2FsbGVyKiBvZiBgcmVjb3JkX3N0ZWFsX3RpbWVgLCB3aGljaCBtYWtlcyBpdCBsaWtlbHkgYSBrZXkgYXJlYSB0byB1bmRlcnN0YW5kIHRoZSB0aW1pbmcgZmxvdy5cblxuKiAgIE5vdywgYmV5b25kIHRoZSBvYnZpb3VzLi4uc2hvdWxkIEkgYmUgbG9va2luZyBhdCBga3ZtX3NldF9tc3JfY29tbW9uYD8gSXMgdGhlcmUgc29tZSBtYWdpYyBzZXR0aW5nIGhlcmUgdG8gZW5hYmxlIG9yIGRpc2FibGUgc3RlYWwgdGltZT8gSSdtIGJldHRpbmcgdGhlcmUgaXMuIEkgc2hvdWxkIGRlZmluaXRlbHkgY2hlY2sgdGhhdCBvbmUsIGFsb25nIHdpdGggaG93IHN0ZWFsIHRpbWUgaXMgaW5pdGlhbGl6ZWQgYW5kIGVuYWJsZWQgb24gdGhlIHg4NiBhcmNoaXRlY3R1cmUuIExldCdzIHRyYWNlIGl0IGFuZCBzZWUgaG93IGl0IHdvcmtzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM3OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMzo0NC43MTgzMTQ5OThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3Njg0NTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1TUl9LVk1fU1RFQUxfVElNRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tc3JzLmM9MjU0PXN0YXRpYyBjb25zdCB1MzIgZW11bGF0ZWRfbXNyc19hbGxbXSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjc3LVxcbmFyY2gveDg2L2t2bS9tc3JzLmM6Mjc4OlxcdE1TUl9LVk1fQVNZTkNfUEZfRU4sIE1TUl9LVk1fU1RFQUxfVElNRSxcXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTI3OS1cXHRNU1JfS1ZNX1BWX0VPSV9FTiwgTVNSX0tWTV9BU1lOQ19QRl9JTlQsIE1TUl9LVk1fQVNZTkNfUEZfQUNLLFxcbi0tXFxuYXJjaC94ODYva3ZtL21zcnMuYz0xNDQyPWludCBrdm1fc2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxcbi0tXFxuYXJjaC94ODYva3ZtL21zcnMuYy0xNzA3LVxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L2t2bS9tc3JzLmM6MTcwODpcXHRjYXNlIE1TUl9LVk1fU1RFQUxfVElNRTpcXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE3MDktXFx0XFx0aWYgKCFndWVzdF9wdl9oYXModmNwdSwgS1ZNX0ZFQVRVUkVfU1RFQUxfVElNRSkpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jPTE4OTk9aW50IGt2bV9nZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTIwNzYtXFx0XFx0YnJlYWs7XFxuYXJjaC94ODYva3ZtL21zcnMuYzoyMDc3OlxcdGNhc2UgTVNSX0tWTV9TVEVBTF9USU1FOlxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjA3OC1cXHRcXHRpZiAoIWd1ZXN0X3B2X2hhcyh2Y3B1LCBLVk1fRkVBVFVSRV9TVEVBTF9USU1FKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDM6NDQuNzg2MDAzOTM5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNjk4NDIyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gTVNSIEhhbmRsaW5nIGluIEtWTSBmb3IgeDg2KipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBnZXQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgTVNScyBhcmUgYmVpbmcgbWFuYWdlZCB3aXRoaW4gdGhlIEtWTSBoeXBlcnZpc29yLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBhcmNoL3g4Ni9rdm0vbXNycy5jYCwgYW5kIEknbSB0YXJnZXRpbmcgYXJvdW5kIGxpbmUgMTcwOC4gVGhhdCBhcmVhIHVzdWFsbHkgaG9sZHMgY3JpdGljYWwgbG9naWMgZm9yIGVpdGhlciBhIHNwZWNpZmljIE1TUidzIHJlYWQvd3JpdGUgcGF0aCBvciBzb21lIGtleSBkYXRhIHN0cnVjdHVyZSByZWxhdGVkIHRvIE1TUiBhY2Nlc3MuIEkgc3VzcGVjdCBpdCdzIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHRvIHVucmF2ZWwgd2hhdGV2ZXIgSSdtIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBIb3BlZnVsbHksIHRoaXMgaXMgdGhlIGFyZWEgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI5NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAzOjQ3LjA1NTg0OTYxNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTk0NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL21zcnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzA1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzA1OlxcdFxcdFxcdFxcdGt2bV9jaGVja19hc3luY19wZl9jb21wbGV0aW9uKHZjcHUpO1xcbjE3MDY6XFx0XFx0XFx0fVxcbjE3MDc6XFx0XFx0XFx0YnJlYWs7XFxuMTcwODpcXHRcXHRjYXNlIE1TUl9LVk1fU1RFQUxfVElNRTpcXG4xNzA5OlxcdFxcdFxcdGlmICghZ3Vlc3RfcHZfaGFzKHZjcHUsIEtWTV9GRUFUVVJFX1NURUFMX1RJTUUpKVxcbjE3MTA6XFx0XFx0XFx0XFx0cmV0dXJuIEtWTV9NU1JfUkVUX1VOU1VQUE9SVEVEO1xcbjE3MTE6XFx0XFxuMTcxMjpcXHRcXHRcXHRpZiAodW5saWtlbHkoIXNjaGVkX2luZm9fb24oKSkpXFxuMTcxMzpcXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG4xNzE0OlxcdFxcbjE3MTU6XFx0XFx0XFx0aWYgKGRhdGEgXFx1MDAyNiBLVk1fU1RFQUxfUkVTRVJWRURfTUFTSylcXG4xNzE2OlxcdFxcdFxcdFxcdHJldHVybiAxO1xcbjE3MTc6XFx0XFxuMTcxODpcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnN0Lm1zcl92YWwgPSBkYXRhO1xcbjE3MTk6XFx0XFxuMTcyMDpcXHRcXHRcXHRpZiAoIShkYXRhIFxcdTAwMjYgS1ZNX01TUl9FTkFCTEVEKSlcXG4xNzIxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE3MjI6XFx0XFxuMTcyMzpcXHRcXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfU1RFQUxfVVBEQVRFLCB2Y3B1KTtcXG4xNzI0OlxcdFxcbjE3MjU6XFx0XFx0XFx0YnJlYWs7XFxuMTcyNjpcXHRcXHRjYXNlIE1TUl9LVk1fUFZfRU9JX0VOOlxcbjE3Mjc6XFx0XFx0XFx0aWYgKCFndWVzdF9wdl9oYXModmNwdSwgS1ZNX0ZFQVRVUkVfUFZfRU9JKSlcXG4xNzI4OlxcdFxcdFxcdFxcdHJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDtcXG4xNzI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMzo0Ny4wNTYxNTIzNTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzY5MzI5NTE4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLVk0gU3RvbGVuIFRpbWUgUmV2aWV3KipcblxuT2theSwgdGltZSB0byB0aG9yb3VnaGx5IGF1ZGl0IHRoZXNlIHN0b2xlbiB0aW1lIGltcGxlbWVudGF0aW9ucyBhY3Jvc3MgYXJjaGl0ZWN0dXJlcy4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIHg4NiBhbmQgZ2VuZXJpYyB4ODYgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQuIEkgc2VlIHR3byBtYWluIHBsYXllcnMgaGVyZTogYGt2bV92Y3B1X2lvY3RsYCBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AsIHNwZWNpZmljYWxseSB1bmRlciBgS1ZNX1JVTmAgd2hlbiB0aGUgb2xkIHByb2Nlc3MgSUQgZGlmZmVycyBmcm9tIHRoZSBjdXJyZW50IG9uZSwgd2hpY2ggcmVzZXRzIGB2Y3B1LVx1MDAzZWxhc3Rfc3RlYWxgIHVzaW5nIHRoZSBgY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheWAgdmFsdWUsIGFuZCBgcmVjb3JkX3N0ZWFsX3RpbWVgIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLCB3aGljaCBhY3R1YWxseSB1cGRhdGVzIHRoZSAnc3RlYWwnIHRpbWUgYmFzZWQgb24gdGhhdCBgdmNwdS1cdTAwM2VsYXN0X3N0ZWFsYCBhbmQgdGhlbiB1cGRhdGVzIGB2Y3B1LVx1MDAzZWxhc3Rfc3RlYWxgIHdpdGggdGhhdCBzYW1lIGN1cnJlbnQgc2NoZWQgaW5mby4gR290IGl0LlxuXG5Ob3csIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciBtb2RpZmljYXRpb25zIGluIG90aGVyIGFyY2hpdGVjdHVyZXMuIExvb2tzIGxpa2U6XG5cbiogICBGb3IgYXJtNjQsIGBhcmNoL2FybTY0L2t2bS9wdnRpbWUuY2AgaGFzIHRoZXNlIHR3byBtb2RpZmllZCBmdW5jdGlvbnMgYGt2bV91cGRhdGVfc3RvbGVuX3RpbWVgLCBhbmQgYGt2bV9pbml0X3N0b2xlbl90aW1lYC5cbiogICBMb29uZ2FyY2ggaGFzIGBhcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jYDogYGt2bV9zYXZlX25vdGlmeWAgYW5kIGBhcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jYDogYGt2bV91cGRhdGVfc3RvbGVuX3RpbWVgLCBga3ZtX2xvb25nYXJjaF9wdnRpbWVfc2V0X2F0dHJgXG4qICAgQW5kIGZpbmFsbHksIHJpc2N2IGhhcyBzZXZlcmFsLCBmb3VuZCBpbiBgYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfc3RhLmNgOiBga3ZtX3Jpc2N2X3ZjcHVfc2JpX3N0YV9yZXNldGAsIGBrdm1fcmlzY3ZfdmNwdV9yZWNvcmRfc3RlYWxfdGltZWAsIGBrdm1fc2JpX3N0YV9zdGVhbF90aW1lX3NldF9zaG1lbWBcblxuRm9yIGFtZDY0LCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGl0J3MgYHJlY29yZF9zdGVhbF90aW1lYCBhbmQgYGt2bV92Y3B1X2lvY3RsYCB0aGF0IGFyZSB0aGUgcHJpbWFyeSBjb25jZXJucy4gQWxzbywgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgYHZjcHVfZW50ZXJfZ3Vlc3RgIGZ1bmN0aW9uLCBhcyBpdCdzIHRoZSB0cmlnZ2VyIGZvciBgcmVjb3JkX3N0ZWFsX3RpbWVgLlxuXG5BbHJpZ2h0LCBsZXQncyBsb29rIGF0IHRoZSByZWxhdGVkIEtjb25maWcgb3B0aW9ucy4gT2J2aW91c2x5LCB3ZSBoYXZlIGBLVk1gLCBgS1ZNX0lOVEVMYCwgYW5kIGBLVk1fQU1EYC4gTm93LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGBIQVZFX0tWTV9QVl9TVEVBTF9USU1FYCBpcyBpbmRlZWQgc2VsZWN0ZWQgYnkgYEtWTV9YODZgLiBXZSBhbHNvIG5lZWQgYFNDSEVEX0lORk9gIGJlY2F1c2UgdGhhdCdzIHdoYXQgY29udGFpbnMgYHJ1bl9kZWxheWAsIHNvIEkgbmVlZCB0byBnbyBsb29rIHVwIHRoZSBLY29uZmlnIGZvciBgU0NIRURfSU5GT2AgYW5kIG1ha2Ugc3VyZSBpdCdzIHNldCB1cCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTIwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDM6NTQuNzQ5NDUwNDQyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIzNDI2NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU0NIRURfSU5GT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTY5ND1jb25maWcgVEFTS19ERUxBWV9BQ0NUXFxuLS1cXG5pbml0L0tjb25maWctNjk2LVxcdGRlcGVuZHMgb24gVEFTS1NUQVRTXFxuaW5pdC9LY29uZmlnOjY5NzpcXHRzZWxlY3QgU0NIRURfSU5GT1xcbmluaXQvS2NvbmZpZy02OTgtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMzo1NC44NjE3OTg0OTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE5NzUxNTU4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBTY2hlZHVsaW5nIFN0YXRpc3RpY3MgT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gbmFpbCBkb3duIGhvdyB0byBnZXQgdGhlIHJpZ2h0IHNjaGVkdWxpbmcgc3RhdHMuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2gga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZXZlbiBhdmFpbGFibGUgdG8gbWUuIExldCdzIHNlZS4uLiBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgY2hlY2tpbmcgYFNDSEVEU1RBVFNgLCB0aGF0IHNlZW1zIGxpa2UgdGhlIG1vc3Qgb2J2aW91cyBzdGFydGluZyBwb2ludC4gSWYgdGhhdCBkb2Vzbid0IHByb3ZpZGUgd2hhdCBJIG5lZWQsIG9yIGlmIGl0J3MgdG9vIGNvYXJzZS1ncmFpbmVkLCBtYXliZSBJIHNob3VsZCBkcmlsbCBkb3duIGludG8gYFRBU0tTVEFUU2AuIEl0J3MgcG9zc2libGUgSSdsbCBoYXZlIG1vcmUgc3BlY2lmaWMgcGVyLXRhc2sgaW5mb3JtYXRpb24gdGhlcmUuIEFuZCwgb2YgY291cnNlLCBJIGhhdmUgdG8gY29uc2lkZXIgYFNDSEVEX0lORk9gIC0tIGNvdWxkIGJlIHRoZSBrZXkgdG8gdGhlIGtpbmQgb2YgZGV0YWlsIEknbSBsb29raW5nIGZvci4gVGltZSB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgc2VlIHdoYXQgdGhlc2Ugb3B0aW9ucyBhY3R1YWxseSBjb250cm9sIGFuZCB3aGF0IGxldmVsIG9mIGRldGFpbCB0aGV5IHByb3ZpZGUuIEkga25vdyBpdCBkZXBlbmRzIG9uIHRoZSBrZXJuZWwgdmVyc2lvbiB0b28sIHNvIEknbGwga2VlcCB0aGF0IGluIG1pbmQgYXMgSSdtIGxvb2tpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTAxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDM6NTcuMDU5MzE4NTU3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTA5MTg5MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBTQ0hFRF9JTkZPXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWc9MjA9bWVudWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMzctXFx0c2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjM4OlxcdHNlbGVjdCBTQ0hFRF9JTkZPXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zOS1cXHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFMgaWYgUEVSRl9FVkVOVFNcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTMzLVxcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnOjM0OlxcdHNlbGVjdCBTQ0hFRF9JTkZPXFxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMzUtXFx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMzMtXFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzozNDpcXHRzZWxlY3QgU0NIRURfSU5GT1xcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMzUtXFx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNX1g4Nlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMzUtXFx0c2VsZWN0IEtWTV9NTUlPXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MzY6XFx0c2VsZWN0IFNDSEVEX0lORk9cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0zNy1cXHRzZWxlY3QgUEVSRl9FVkVOVFNcXG4tLVxcbmluaXQvS2NvbmZpZz02OTQ9Y29uZmlnIFRBU0tfREVMQVlfQUNDVFxcbi0tXFxuaW5pdC9LY29uZmlnLTY5Ni1cXHRkZXBlbmRzIG9uIFRBU0tTVEFUU1xcbmluaXQvS2NvbmZpZzo2OTc6XFx0c2VsZWN0IFNDSEVEX0lORk9cXG5pbml0L0tjb25maWctNjk4LVxcdGhlbHBcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnPTEzNTM9Y29uZmlnIFNDSEVEU1RBVFNcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTEzNTUtXFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxubGliL0tjb25maWcuZGVidWc6MTM1NjpcXHRzZWxlY3QgU0NIRURfSU5GT1xcbmxpYi9LY29uZmlnLmRlYnVnLTEzNTctXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMzo1OS41Njg1MTUxMTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI5MzU4OTUwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLVk0gQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqXG5cbkFscmlnaHQsIHNvIGBLVk1fWDg2YCBpcyBkaXJlY3RseSBwdWxsaW5nIGluIGBTQ0hFRF9JTkZPYC4gVGhhdCdzIGludGVyZXN0aW5nOyBlbmFibGluZyBLVk0sIGFuZCBieSBleHRlbnNpb24gYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgLCBicmluZ3MgaW4gYSB3aG9sZSBzdWl0ZTogYEtWTV9YODZgLCBgSEFWRV9LVk1fUFZfU1RFQUxfVElNRWAsIGFuZCwgY3J1Y2lhbGx5LCBgU0NIRURfSU5GT2AuIFRoYXQncyBhbiBpbXBvcnRhbnQgZGV0YWlsIHRvIGtlZXAgaW4gbWluZCwgYW5kIGluZm9ybXMgaG93IHRoZSBmZWF0dXJlcyBpbnRlcnJlbGF0ZS5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb25zIHdlIG5lZWQgdG8gcmV0dXJuOiBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgS1ZNX0FNRGAuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLlxuXG5Ob3csIHJlZ2FyZGluZyB0aGUgY29yZSBvZiB0aGlzIHBhdGNoLCBpdCBzZWVtcyBsaWtlIHdlJ3JlIG1vdmluZyB0aGUgYGxhc3Rfc3RlYWxgIG1lbWJlciBpbnRvIHRoZSBnZW5lcmljIGBzdHJ1Y3Qga3ZtX3ZjcHVgIHN0cnVjdHVyZSwgYnV0IG9ubHkgdW5kZXIgdGhlIGBDT05GSUdfSEFWRV9LVk1fUFZfU1RFQUxfVElNRWAgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoZW4sIHRoZSBzdGVhbCB0aW1lIGFjY291bnRpbmcgaXMgcmVzZXQgd2l0aGluIHRoZSBnZW5lcmljIGBrdm1fdmNwdV9pb2N0bCgpYCBmdW5jdGlvbiB3aGVuIGEgdkNQVSBzd2l0Y2hlcyB0byBiZWluZyBydW4gZnJvbSBhIGRpZmZlcmVudCBob3N0IHRocmVhZCBvciBQSUQsIHNwZWNpZmljYWxseSBkdXJpbmcgdGhlIGBLVk1fUlVOYCBoYW5kbGluZy4gT24geDg2LCBpdCBsb29rcyBsaWtlIGByZWNvcmRfc3RlYWxfdGltZSgpYCBpcyB0aGVuIHVwZGF0ZWQgdG8gdXNlIHRoaXMgbmV3LCBnZW5lcmljIGBsYXN0X3N0ZWFsYCBtZW1iZXIuIFRoaXMgZGVmaW5pdGVseSBoYXMgaW1wbGljYXRpb25zIG9uIHRoZSBLVk0gY29yZSBhbmQgeDg2IGV4ZWN1dGlvbiBwYXRocy5cblxuT2theSwgbGV0J3MganVzdCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZywgYW5kIHRoZW4gd2UnbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODkxMywiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDQ6MDMuODYyMTA3NDk2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4MDUyOTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlY29yZF9zdGVhbF90aW1lXCIsXG4gICAgXCJrdm1fdmNwdV9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNvbGlkYXRlcyBzdGVhbC10aW1lIGFjY291bnRpbmcgYWNyb3NzIGFyY2hpdGVjdHVyZXMgYnkgbW92aW5nIGBsYXN0X3N0ZWFsYCB0byBnZW5lcmljIGBzdHJ1Y3Qga3ZtX3ZjcHVgIGFuZCByZXNldHRpbmcgaXQgaW4gYGt2bV92Y3B1X2lvY3RsKClgIHdoZW4gYSB2Q1BVIHRocmVhZCBjaGFuZ2VzLiBJdCBtb2RpZmllcyBleGVjdXRhYmxlIGNvZGUgaW4gY29yZSBLVk0gKGBrdm1fdmNwdV9pb2N0bGApIGFuZCB4ODYgS1ZNIChgcmVjb3JkX3N0ZWFsX3RpbWVgKSwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBpbiB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlY29yZF9zdGVhbF90aW1lXCIsXG4gICAgXCJrdm1fdmNwdV9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNvbGlkYXRlcyBzdGVhbC10aW1lIGFjY291bnRpbmcgYWNyb3NzIGFyY2hpdGVjdHVyZXMgYnkgbW92aW5nIGBsYXN0X3N0ZWFsYCB0byBnZW5lcmljIGBzdHJ1Y3Qga3ZtX3ZjcHVgIGFuZCByZXNldHRpbmcgaXQgaW4gYGt2bV92Y3B1X2lvY3RsKClgIHdoZW4gYSB2Q1BVIHRocmVhZCBjaGFuZ2VzLiBJdCBtb2RpZmllcyBleGVjdXRhYmxlIGNvZGUgaW4gY29yZSBLVk0gKGBrdm1fdmNwdV9pb2N0bGApIGFuZCB4ODYgS1ZNIChgcmVjb3JkX3N0ZWFsX3RpbWVgKSwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBpbiB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDQ6MDMuOTkwMTY3NTQxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTMzNzc3MTAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjA0OjAzLjk5MDc1MTQ0MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI1MzM3MTgxNjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHRyYWNraW5nIG9mIHBhcmF2aXJ0dWFsaXplZCBzdGVhbCB0aW1lIChgbGFzdF9zdGVhbGApIGJ5IG1vdmluZyBpdCBmcm9tIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB2Y3B1IHN1Yi1zdHJ1Y3R1cmVzIChpbiB4ODYsIGFybTY0LCByaXNjdiwgYW5kIGxvb25nYXJjaCkgaW50byB0aGUgZ2VuZXJpYyBgc3RydWN0IGt2bV92Y3B1YCB1bmRlciBgQ09ORklHX0hBVkVfS1ZNX1BWX1NURUFMX1RJTUVgLCBhbmQgcmVzZXR0aW5nIGB2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXlgIHdoZW4gdGhlIHZDUFUgdGhyZWFkIFBJRCBjaGFuZ2VzLlxcblxcblRoZSBgc3RydWN0IGt2bV92Y3B1YCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jKClgLCBlbnN1cmluZyBgdmNwdS1cXHUwMDNlbGFzdF9zdGVhbGAgaXMgemVyby1pbml0aWFsaXplZCBhdCBjcmVhdGlvbi4gQWxsIHJlYWRzIGFuZCB3cml0ZXMgdG8gYHZjcHUtXFx1MDAzZWxhc3Rfc3RlYWxgIG9wZXJhdGUgb24gZnVsbHkgaW5pdGlhbGl6ZWQgZmllbGRzIGFuZCB2YWx1ZXMgZGVyaXZlZCBmcm9tIGBjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheWAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdGFjayB2YXJpYWJsZXMsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIHBhZGRpbmcgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyMWYzOGQ4NGUyMjFhYjdmOWJlNDUyN2ViNTYxNjM3MDBiZjE3NjY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwNTowMzoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggMjdmZTBjZDViMmQ3YS4uMzZjYjdkZWU5ODhjYiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtOTM3LDcgKzkzNyw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcbiBcdC8qIEd1ZXN0IFBWIHN0YXRlICovXG4gXHRzdHJ1Y3Qge1xuLVx0XHR1NjQgbGFzdF9zdGVhbDtcbiBcdFx0Z3BhX3QgYmFzZTtcbiBcdH0gc3RlYWw7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vS2NvbmZpZyBiL2FyY2gvYXJtNjQva3ZtL0tjb25maWdcbmluZGV4IDQ0OTE1NGY5YTQ4NTIuLmY1ODU1YmZjNjgxYzEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9LY29uZmlnXG4rKysgYi9hcmNoL2FybTY0L2t2bS9LY29uZmlnXG5AQCAtMzQsNiArMzQsNyBAQCBtZW51Y29uZmlnIEtWTVxuIFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcbiBcdHNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU1cbiBcdHNlbGVjdCBIQVZFX0tWTV9WQ1BVX1JVTl9QSURfQ0hBTkdFXG4rXHRzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxuIFx0c2VsZWN0IFNDSEVEX0lORk9cbiBcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xuIFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jIGIvYXJjaC9hcm02NC9rdm0vcHZ0aW1lLmNcbmluZGV4IDRjZWFiYWE0YzMwYmQuLmE2N2Q5Mzg0NWQ3OTQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9wdnRpbWUuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vcHZ0aW1lLmNcbkBAIC0xNCw3ICsxNCw3IEBAIHZvaWQga3ZtX3VwZGF0ZV9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXHR1NjQgYmFzZSA9IHZjcHUtXHUwMDNlYXJjaC5zdGVhbC5iYXNlO1xuLVx0dTY0IGxhc3Rfc3RlYWwgPSB2Y3B1LVx1MDAzZWFyY2guc3RlYWwubGFzdF9zdGVhbDtcbitcdHU2NCBsYXN0X3N0ZWFsID0gdmNwdS1cdTAwM2VsYXN0X3N0ZWFsO1xuIFx0dTY0IG9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBwdmNsb2NrX3ZjcHVfc3RvbGVuX3RpbWUsIHN0b2xlbl90aW1lKTtcbiBcdHU2NCBzdGVhbCA9IDA7XG4gXHRpbnQgaWR4O1xuQEAgLTI1LDggKzI1LDggQEAgdm9pZCBrdm1fdXBkYXRlX3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbiBcdGlmICgha3ZtX2dldF9ndWVzdChrdm0sIGJhc2UgKyBvZmZzZXQsIHN0ZWFsKSkge1xuIFx0XHRzdGVhbCA9IGxlNjRfdG9fY3B1KHN0ZWFsKTtcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLnN0ZWFsLmxhc3Rfc3RlYWwgPSBSRUFEX09OQ0UoY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSk7XG4tXHRcdHN0ZWFsICs9IHZjcHUtXHUwMDNlYXJjaC5zdGVhbC5sYXN0X3N0ZWFsIC0gbGFzdF9zdGVhbDtcbitcdFx0dmNwdS1cdTAwM2VsYXN0X3N0ZWFsID0gUkVBRF9PTkNFKGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkpO1xuK1x0XHRzdGVhbCArPSB2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgLSBsYXN0X3N0ZWFsO1xuIFx0XHRrdm1fcHV0X2d1ZXN0KGt2bSwgYmFzZSArIG9mZnNldCwgY3B1X3RvX2xlNjQoc3RlYWwpKTtcbiBcdH1cbiBcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UsIGlkeCk7XG5AQCAtNjEsNyArNjEsNyBAQCBncGFfdCBrdm1faW5pdF9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgKiBTdGFydCBjb3VudGluZyBzdG9sZW4gdGltZSBmcm9tIHRoZSB0aW1lIHRoZSBndWVzdCByZXF1ZXN0c1xuIFx0ICogdGhlIGZlYXR1cmUgZW5hYmxlZC5cbiBcdCAqL1xuLVx0dmNwdS1cdTAwM2VhcmNoLnN0ZWFsLmxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuK1x0dmNwdS1cdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbiBcdGt2bV93cml0ZV9ndWVzdF9sb2NrKGt2bSwgYmFzZSwgXHUwMDI2aW5pdF92YWx1ZXMsIHNpemVvZihpbml0X3ZhbHVlcykpO1xuIFxuIFx0cmV0dXJuIGJhc2U7XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDIzY2ZiZWNlYmJkNzkuLjE0NTE0YTI1YjI2MTMgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMjUzLDcgKzI1Myw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdC8qIHBhcmF2aXJ0IHN0ZWFsIHRpbWUgKi9cbiBcdHN0cnVjdCB7XG4gXHRcdHU2NCBndWVzdF9hZGRyO1xuLVx0XHR1NjQgbGFzdF9zdGVhbDtcbiBcdFx0c3RydWN0IGdmbl90b19odmFfY2FjaGUgY2FjaGU7XG4gXHRcdHU4ICBwcmVlbXB0ZWQ7XG4gXHR9IHN0O1xuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnIGIvYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWdcbmluZGV4IDE1ZGEyZDg4YzBjMTAuLjQ5OTZlYzljMDdmOTkgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZ1xuKysrIGIvYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWdcbkBAIC0yNiw2ICsyNiw3IEBAIGNvbmZpZyBLVk1cbiBcdHNlbGVjdCBIQVZFX0tWTV9NU0lcbiBcdHNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU1cbiBcdHNlbGVjdCBLVk1fQ09NTU9OXG4rXHRzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXG4gXHRzZWxlY3QgS1ZNX01NSU9cbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuY1xuaW5kZXggNGY1OGU2ZTJjZjg2Ni4uNTZhZTZiMThmOGMxMCAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmNcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmNcbkBAIC03NzMsNyArNzczLDcgQEAgc3RhdGljIGxvbmcga3ZtX3NhdmVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0aWYgKCEoZGF0YSBcdTAwMjYgS1ZNX1NURUFMX1BIWVNfVkFMSUQpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuLVx0XHR2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4rXHRcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4gXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdGRlZmF1bHQ6XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmNcbmluZGV4IGVkOWUwOTJjOTdiYTcuLjcyOGQyOWViYThlMDMgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG4rKysgYi9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG5AQCAtMTg3LDggKzE4Nyw4IEBAIHN0YXRpYyB2b2lkIGt2bV91cGRhdGVfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c21wX3dtYigpO1xuIFxuIFx0dW5zYWZlX2dldF91c2VyKHN0ZWFsLCBcdTAwMjZzdC1cdTAwM2VzdGVhbCwgb3V0KTtcbi1cdHN0ZWFsICs9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkgLSB2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbDtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbitcdHN0ZWFsICs9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkgLSB2Y3B1LVx1MDAzZWxhc3Rfc3RlYWw7XG4rXHR2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuIFx0dW5zYWZlX3B1dF91c2VyKHN0ZWFsLCBcdTAwMjZzdC1cdTAwM2VzdGVhbCwgb3V0KTtcbiBcbiBcdHNtcF93bWIoKTtcbkBAIC0xMjA1LDcgKzEyMDUsNyBAQCBzdGF0aWMgaW50IGt2bV9sb29uZ2FyY2hfcHZ0aW1lX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBcdGlmICghcmV0KSB7XG4gXHRcdHZjcHUtXHUwMDNlYXJjaC5zdC5ndWVzdF9hZGRyID0gZ3BhO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4rXHRcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4gXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYTMwNjAwNTc5MjMxYi4uMzA1ODc1MzAxYzA0MiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMjczLDcgKzI3Myw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdC8qIFNCSSBzdGVhbC10aW1lIGFjY291bnRpbmcgKi9cbiBcdHN0cnVjdCB7XG4gXHRcdGdwYV90IHNobWVtO1xuLVx0XHR1NjQgbGFzdF9zdGVhbDtcbiBcdH0gc3RhO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbmluZGV4IGVjMmNlZTBhMzllMDEuLjFmZjA3YTkwNGEwMjcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnXG5AQCAtMjYsNiArMjYsNyBAQCBjb25maWcgS1ZNXG4gXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXG4gXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXG4gXHRzZWxlY3QgS1ZNX0NPTU1PTlxuK1x0c2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcbiBcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcbiBcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xuIFx0c2VsZWN0IEtWTV9NTUlPXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfc3RhLmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9zdGEuY1xuaW5kZXggNjBlNTAyOTZhMDA4NS4uOWE3N2QzYmRlN2M3MiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3N0YS5jXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9zdGEuY1xuQEAgLTE5LDEzICsxOSwxMyBAQFxuIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl92Y3B1X3NiaV9zdGFfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHZjcHUtXHUwMDNlYXJjaC5zdGEuc2htZW0gPSBJTlZBTElEX0dQQTtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbCA9IDA7XG4rXHR2Y3B1LVx1MDAzZWxhc3Rfc3RlYWwgPSAwO1xuIH1cbiBcbiB2b2lkIGt2bV9yaXNjdl92Y3B1X3JlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRncGFfdCBzaG1lbSA9IHZjcHUtXHUwMDNlYXJjaC5zdGEuc2htZW07XG4tXHR1NjQgbGFzdF9zdGVhbCA9IHZjcHUtXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbDtcbitcdHU2NCBsYXN0X3N0ZWFsID0gdmNwdS1cdTAwM2VsYXN0X3N0ZWFsO1xuIFx0X19sZTMyIF9fdXNlciAqc2VxdWVuY2VfcHRyO1xuIFx0X19sZTY0IF9fdXNlciAqc3RlYWxfcHRyO1xuIFx0X19sZTMyIHNlcXVlbmNlX2xlO1xuQEAgLTY3LDggKzY3LDggQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9yZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRpZiAoIVdBUk5fT04oZ2V0X3VzZXIoc3RlYWxfbGUsIHN0ZWFsX3B0cikpKSB7XG4gXHRcdHN0ZWFsID0gbGU2NF90b19jcHUoc3RlYWxfbGUpO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2guc3RhLmxhc3Rfc3RlYWwgPSBSRUFEX09OQ0UoY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSk7XG4tXHRcdHN0ZWFsICs9IHZjcHUtXHUwMDNlYXJjaC5zdGEubGFzdF9zdGVhbCAtIGxhc3Rfc3RlYWw7XG4rXHRcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IFJFQURfT05DRShjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5KTtcbitcdFx0c3RlYWwgKz0gdmNwdS1cdTAwM2VsYXN0X3N0ZWFsIC0gbGFzdF9zdGVhbDtcbiBcdFx0V0FSTl9PTihwdXRfdXNlcihjcHVfdG9fbGU2NChzdGVhbCksIHN0ZWFsX3B0cikpO1xuIFx0fVxuIFxuQEAgLTExNSw3ICsxMTUsNyBAQCBzdGF0aWMgaW50IGt2bV9zYmlfc3RhX3N0ZWFsX3RpbWVfc2V0X3NobWVtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0cmV0dXJuIFNCSV9FUlJfSU5WQUxJRF9BRERSRVNTO1xuIFxuIFx0dmNwdS1cdTAwM2VhcmNoLnN0YS5zaG1lbSA9IHNobWVtO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnN0YS5sYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbitcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDY4M2JiOGJmNDNhOTQuLmViZGQ4NTI2YWUxMjYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtODcyLDcgKzg3Miw2IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdHN0cnVjdCB7XG4gXHRcdHU4IHByZWVtcHRlZDtcbiBcdFx0dTY0IG1zcl92YWw7XG4tXHRcdHU2NCBsYXN0X3N0ZWFsO1xuIFx0XHRzdHJ1Y3QgZ2ZuX3RvX2h2YV9jYWNoZSBjYWNoZTtcbiBcdH0gc3Q7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL0tjb25maWcgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZ1xuaW5kZXggNTM4ZWQxZTgwMzMyNi4uYjJhZWE4MDU4ODQxMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9LY29uZmlnXG4rKysgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZ1xuQEAgLTQwLDYgKzQwLDcgQEAgY29uZmlnIEtWTV9YODZcbiBcdHNlbGVjdCBIQVZFX0tWTV9NU0lcbiBcdHNlbGVjdCBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUXG4gXHRzZWxlY3QgSEFWRV9LVk1fTk9fUE9MTFxuK1x0c2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcbiBcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuIFx0c2VsZWN0IEtWTV9WRklPXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5pbmRleCA3OTQ2OGRkZmU0NzM2Li45MjdjOGIxZWQ4M2QyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC0yMTI5LDkgKzIxMjksOCBAQCBzdGF0aWMgdm9pZCByZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzbXBfd21iKCk7XG4gXG4gXHR1bnNhZmVfZ2V0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuLVx0c3RlYWwgKz0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSAtXG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnN0Lmxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuK1x0c3RlYWwgKz0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSAtIHZjcHUtXHUwMDNlbGFzdF9zdGVhbDtcbitcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4gXHR1bnNhZmVfcHV0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuIFxuIFx0dmVyc2lvbiArPSAxO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggMDNiZmM5Mjg2NGI2ZS4uZmY5ZDQyM2I2YTdjNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtMzk4LDYgKzM5OCwxMCBAQCBzdHJ1Y3Qga3ZtX3ZjcHUge1xuIFx0ICovXG4gXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpsYXN0X3VzZWRfc2xvdDtcbiBcdHU2NCBsYXN0X3VzZWRfc2xvdF9nZW47XG4rXG4rI2lmZGVmIENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FXG4rXHR1NjQgbGFzdF9zdGVhbDtcbisjZW5kaWZcbiB9O1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDk2YmFiNzAwMmQzOWUuLjFkZTEzYzAwMTdlNDMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtMTY0LDYgKzE2NCw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiArPSBpcnFfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBtbXVfc3RyZXNzX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0gcnNlcV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHN0ZWFsX3RpbWVcbitURVNUX0dFTl9QUk9HU194ODYgKz0gc3RlYWxfdGltZV9jaGFuZ2VfcGlkXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHN5c3RlbV9jb3VudGVyX29mZnNldF90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHByZV9mYXVsdF9tZW1vcnlfdGVzdFxuIFxuQEAgLTIwNCw2ICsyMDUsNyBAQCBURVNUX0dFTl9QUk9HU19hcm02NCArPSBndWVzdF9tZW1mZF90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gbW11X3N0cmVzc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gcnNlcV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gc3RlYWxfdGltZVxuK1RFU1RfR0VOX1BST0dTX2FybTY0ICs9IHN0ZWFsX3RpbWVfY2hhbmdlX3BpZFxuIFxuIFRFU1RfR0VOX1BST0dTX3MzOTAgPSAkKFRFU1RfR0VOX1BST0dTX0NPTU1PTilcbiBURVNUX0dFTl9QUk9HU19zMzkwICs9IHMzOTAvbWVtb3BcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xMmQ0OTI3ZDFjMDE3XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZV9jaGFuZ2VfcGlkLmNcbkBAIC0wLDAgKzEsMjE2IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIFZlcmlmeSB0aGF0IEtWTSByZXNldHMgc3RlYWwtdGltZSBhY2NvdW50aW5nIHdoZW4gYSB2Q1BVIGZkIGlzIHJ1biBmcm9tXG4rICogYSBkaWZmZXJlbnQgaG9zdCBQSUQuXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wYXJhLmhcdTAwM2VcbisjaW5jbHVkZSBcImt2bV91dGlsLmhcIlxuKyNpbmNsdWRlIFwicHJvY2Vzc29yLmhcIlxuK1xuKyNkZWZpbmUgU1RfR1BBX0JBU0VcdFx0KDEgXHUwMDNjXHUwMDNjIDMwKVxuKyNkZWZpbmUgU1RfU0FORV9ERUxUQV9OU1x0KDFVTEwgXHUwMDNjXHUwMDNjIDYzKVxuK1xuK3N0YXRpYyB2b2lkICpzdF9ndmE7XG4rc3RhdGljIHU2NCBndWVzdF9zdG9sZW5fdGltZTtcbitzdGF0aWMgdTY0IG1haW5fc3RlYWw7XG4rc3RhdGljIHU2NCB0aHJlYWRfc3RlYWw7XG4rXG4rI2lmIGRlZmluZWQoX194ODZfNjRfXylcbitcbisjZGVmaW5lIFNURUFMX1RJTUVfU0laRVx0KChzaXplb2Yoc3RydWN0IGt2bV9zdGVhbF90aW1lKSArIDYzKSBcdTAwMjYgfjYzKVxuK1xuK3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3N0ZWFsX3RpbWUgKnN0ID0gc3RfZ3ZhO1xuK1xuK1x0V1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LVx1MDAzZXN0ZWFsKSk7XG4rXHRHVUVTVF9TWU5DKDApO1xuK1xuK1x0V1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LVx1MDAzZXN0ZWFsKSk7XG4rXHRHVUVTVF9TWU5DKDEpO1xuK1xuK1x0V1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LVx1MDAzZXN0ZWFsKSk7XG4rXHRHVUVTVF9ET05FKCk7XG4rfVxuK1xuK3N0YXRpYyBib29sIHN0ZWFsX3RpbWVfc3VwcG9ydGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRyZXR1cm4ga3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfS1ZNX1NURUFMX1RJTUUpO1xuK31cbitcbitzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2VuYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0dmNwdV9zZXRfbXNyKHZjcHUsIE1TUl9LVk1fU1RFQUxfVElNRSxcbitcdFx0ICAgICAodWxvbmcpc3RfZ3ZhIHwgS1ZNX01TUl9FTkFCTEVEKTtcbit9XG4rXG4rI2VsaWYgZGVmaW5lZChfX2FhcmNoNjRfXylcbitcbisjZGVmaW5lIFNURUFMX1RJTUVfU0laRVx0KChzaXplb2Yoc3RydWN0IHN0X3RpbWUpICsgNjMpIFx1MDAyNiB+NjMpXG4rXG4rI2RlZmluZSBQVl9USU1FX1NUXHQweGM1MDAwMDIxXG4rXG4rc3RydWN0IHN0X3RpbWUge1xuK1x0dTMyIHJldjtcbitcdHUzMiBhdHRyO1xuK1x0dTY0IHN0X3RpbWU7XG4rfTtcbitcbitzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXG4re1xuK1x0c3RydWN0IGFybV9zbWNjY19yZXMgcmVzO1xuK1x0c3RydWN0IHN0X3RpbWUgKnN0O1xuK1xuK1x0ZG9fc21jY2MoUFZfVElNRV9TVCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgXHUwMDI2cmVzKTtcbitcdEdVRVNUX0FTU0VSVF9ORShyZXMuYTAsIC0xKTtcbitcdEdVRVNUX0FTU0VSVF9FUShyZXMuYTAsICh1bG9uZylzdF9ndmEpO1xuK1xuK1x0c3QgPSAoc3RydWN0IHN0X3RpbWUgKilyZXMuYTA7XG4rXHRXUklURV9PTkNFKGd1ZXN0X3N0b2xlbl90aW1lLCBSRUFEX09OQ0Uoc3QtXHUwMDNlc3RfdGltZSkpO1xuK1x0R1VFU1RfU1lOQygwKTtcbitcbitcdFdSSVRFX09OQ0UoZ3Vlc3Rfc3RvbGVuX3RpbWUsIFJFQURfT05DRShzdC1cdTAwM2VzdF90aW1lKSk7XG4rXHRHVUVTVF9TWU5DKDEpO1xuK1xuK1x0V1JJVEVfT05DRShndWVzdF9zdG9sZW5fdGltZSwgUkVBRF9PTkNFKHN0LVx1MDAzZXN0X3RpbWUpKTtcbitcdEdVRVNUX0RPTkUoKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgc3RlYWxfdGltZV9zdXBwb3J0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgZGV2ID0ge1xuK1x0XHQuZ3JvdXAgPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0NUUkwsXG4rXHRcdC5hdHRyID0gS1ZNX0FSTV9WQ1BVX1BWVElNRV9JUEEsXG4rXHR9O1xuK1xuK1x0cmV0dXJuICFfX3ZjcHVfaW9jdGwodmNwdSwgS1ZNX0hBU19ERVZJQ0VfQVRUUiwgXHUwMDI2ZGV2KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgc3RlYWxfdGltZV9lbmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHU2NCBzdF9pcGEgPSAodWxvbmcpc3RfZ3ZhO1xuK1x0c3RydWN0IGt2bV9kZXZpY2VfYXR0ciBkZXYgPSB7XG4rXHRcdC5ncm91cCA9IEtWTV9BUk1fVkNQVV9QVlRJTUVfQ1RSTCxcbitcdFx0LmF0dHIgPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0lQQSxcbitcdFx0LmFkZHIgPSAodTY0KVx1MDAyNnN0X2lwYSxcbitcdH07XG4rXG4rXHR2Y3B1X2lvY3RsKHZjcHUsIEtWTV9TRVRfREVWSUNFX0FUVFIsIFx1MDAyNmRldik7XG4rfVxuK1xuKyNlbHNlXG4rI2Vycm9yIFwic3RlYWxfdGltZV9jaGFuZ2VfcGlkIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIGFyY2hpdGVjdHVyZVwiXG4rI2VuZGlmXG4rXG4rc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCB1Y2FsbCB1YztcbitcbitcdHZjcHVfcnVuKHZjcHUpO1xuK1xuK1x0c3dpdGNoIChnZXRfdWNhbGwodmNwdSwgXHUwMDI2dWMpKSB7XG4rXHRjYXNlIFVDQUxMX1NZTkM6XG4rXHRjYXNlIFVDQUxMX0RPTkU6XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBVQ0FMTF9BQk9SVDpcbitcdFx0UkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7XG4rXHRkZWZhdWx0OlxuK1x0XHRURVNUX0FTU0VSVChmYWxzZSwgXCJVbmV4cGVjdGVkIGV4aXQ6ICVzXCIsXG4rXHRcdFx0ICAgIGV4aXRfcmVhc29uX3N0cih2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbikpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCAqZG9fc3RlYWxfdGltZSh2b2lkICphcmcpXG4re1xuK1x0c3RydWN0IHRpbWVzcGVjIHRzLCBzdG9wO1xuK1xuK1x0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNnRzKTtcbitcdHN0b3AgPSB0aW1lc3BlY19hZGRfbnModHMsIE1JTl9SVU5fREVMQVlfTlMpO1xuK1xuK1x0d2hpbGUgKHRpbWVzcGVjX3RvX25zKHRpbWVzcGVjX3N1Yih0cywgc3RvcCkpIFx1MDAzYyAwKVxuK1x0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2dHMpO1xuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkICp2Y3B1X3RocmVhZCh2b2lkICphcmcpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gYXJnO1xuK1xuK1x0cnVuX3ZjcHUodmNwdSk7XG4rXHRzeW5jX2dsb2JhbF9mcm9tX2d1ZXN0KHZjcHUtXHUwMDNldm0sIGd1ZXN0X3N0b2xlbl90aW1lKTtcbitcdHRocmVhZF9zdGVhbCA9IGd1ZXN0X3N0b2xlbl90aW1lO1xuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK2ludCBtYWluKHZvaWQpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRwdGhyZWFkX2F0dHJfdCBhdHRyO1xuK1x0cHRocmVhZF90IHRocmVhZDtcbitcdGNwdV9zZXRfdCBjcHVzZXQ7XG4rXHRsb25nIHJ1bl9kZWxheTtcbitcdGxvbmcgcnVuX2RlbGF5X2RlbHRhO1xuK1xuK1x0a3NmdF9wcmludF9oZWFkZXIoKTtcbitcdGtzZnRfc2V0X3BsYW4oMSk7XG4rXG4rXHRDUFVfWkVSTyhcdTAwMjZjcHVzZXQpO1xuK1x0Q1BVX1NFVCgwLCBcdTAwMjZjcHVzZXQpO1xuK1x0cHRocmVhZF9hdHRyX2luaXQoXHUwMDI2YXR0cik7XG4rXHRwdGhyZWFkX2F0dHJfc2V0YWZmaW5pdHlfbnAoXHUwMDI2YXR0ciwgc2l6ZW9mKGNwdXNldCksIFx1MDAyNmNwdXNldCk7XG4rXHRwdGhyZWFkX3NldGFmZmluaXR5X25wKHB0aHJlYWRfc2VsZigpLCBzaXplb2YoY3B1c2V0KSwgXHUwMDI2Y3B1c2V0KTtcbitcbitcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XG4rXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLFxuK1x0XHRcdFx0ICAgIFNUX0dQQV9CQVNFLCAxLCAxLCAwKTtcbitcdHZpcnRfbWFwKHZtLCBTVF9HUEFfQkFTRSwgU1RfR1BBX0JBU0UsIDEpO1xuK1xuK1x0c3RfZ3ZhID0gKHZvaWQgKilTVF9HUEFfQkFTRTtcbitcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBzdF9ndmEpO1xuK1x0bWVtc2V0KGFkZHJfZ3ZhMmh2YSh2bSwgU1RfR1BBX0JBU0UpLCAwLCBTVEVBTF9USU1FX1NJWkUpO1xuK1xuK1x0VEVTVF9SRVFVSVJFKHN0ZWFsX3RpbWVfc3VwcG9ydGVkKHZjcHUpKTtcbitcbitcdHN0ZWFsX3RpbWVfZW5hYmxlKHZjcHUpO1xuK1x0cnVuX3ZjcHUodmNwdSk7XG4rXG4rXHRydW5fZGVsYXkgPSBnZXRfcnVuX2RlbGF5KCk7XG4rXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIFx1MDAyNmF0dHIsIGRvX3N0ZWFsX3RpbWUsIE5VTEwpO1xuK1xuK1x0d2hpbGUgKGdldF9ydW5fZGVsYXkoKSAtIHJ1bl9kZWxheSBcdTAwM2MgTUlOX1JVTl9ERUxBWV9OUylcbitcdFx0c2NoZWRfeWllbGQoKTtcbitcbitcdHB0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpO1xuK1x0cnVuX2RlbGF5X2RlbHRhID0gZ2V0X3J1bl9kZWxheSgpIC0gcnVuX2RlbGF5O1xuK1x0VEVTVF9BU1NFUlQocnVuX2RlbGF5X2RlbHRhIFx1MDAzZT0gTUlOX1JVTl9ERUxBWV9OUyxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgcnVuX2RlbGF5IFx1MDAzZT0gJWxkLCBnb3QgJWxkXCIsXG4rXHRcdCAgICBNSU5fUlVOX0RFTEFZX05TLCBydW5fZGVsYXlfZGVsdGEpO1xuK1xuK1x0cnVuX3ZjcHUodmNwdSk7XG4rXHRzeW5jX2dsb2JhbF9mcm9tX2d1ZXN0KHZtLCBndWVzdF9zdG9sZW5fdGltZSk7XG4rXHRtYWluX3N0ZWFsID0gZ3Vlc3Rfc3RvbGVuX3RpbWU7XG4rXG4rXHRURVNUX0FTU0VSVChtYWluX3N0ZWFsIFx1MDAzZT0gTUlOX1JVTl9ERUxBWV9OUyxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgc3RlYWwgdGltZSBcdTAwM2U9ICVsZCwgZ290ICVcIlBSSXU2NCxcbitcdFx0ICAgIE1JTl9SVU5fREVMQVlfTlMsIG1haW5fc3RlYWwpO1xuK1xuK1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdSk7XG4rXHRwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTtcbitcbitcdFRFU1RfQVNTRVJUKHRocmVhZF9zdGVhbCBcdTAwM2U9IG1haW5fc3RlYWwgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB0aHJlYWRfc3RlYWwgLSBtYWluX3N0ZWFsIFx1MDAzYyBTVF9TQU5FX0RFTFRBX05TLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBzYW5lIHN0ZWFsIGFmdGVyIHZDUFUgcGlkIGNoYW5nZTogXCJcbitcdFx0ICAgIFwib2xkPSVcIlBSSXU2NFwiLCBuZXc9JVwiUFJJdTY0LFxuK1x0XHQgICAgbWFpbl9zdGVhbCwgdGhyZWFkX3N0ZWFsKTtcbitcbitcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcInN0ZWFsIHRpbWUgcmVtYWlucyBzYW5lIGFjcm9zcyB2Q1BVIHBpZCBjaGFuZ2VcXG5cIik7XG4rXG4rXHRwdGhyZWFkX2F0dHJfZGVzdHJveShcdTAwMjZhdHRyKTtcbitcdGt2bV92bV9mcmVlKHZtKTtcbitcdGtzZnRfZmluaXNoZWQoKTtcbit9XG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vS2NvbmZpZyBiL3ZpcnQva3ZtL0tjb25maWdcbmluZGV4IGMzYzBlZTI1M2ZjNzcuLmY0MmEzYTBmYzViYWIgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9LY29uZmlnXG4rKysgYi92aXJ0L2t2bS9LY29uZmlnXG5AQCAtODIsNiArODIsOSBAQCBjb25maWcgSEFWRV9LVk1fSVJRX0JZUEFTU1xuIGNvbmZpZyBIQVZFX0tWTV9WQ1BVX1JVTl9QSURfQ0hBTkdFXG4gICAgICAgIGJvb2xcbiBcbitjb25maWcgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxuKyAgICAgICBib29sXG4rXG4gY29uZmlnIEhBVkVfS1ZNX05PX1BPTExcbiAgICAgICAgYm9vbFxuIFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5pbmRleCA2NWViMjZhMDUyMGQ4Li43ODRmMGQ5NDViNDU2IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTQ0NzgsNiArNDQ3OCwxMCBAQCBzdGF0aWMgbG9uZyBrdm1fdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0XHRpZiAocilcbiBcdFx0XHRcdGJyZWFrO1xuIFxuKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxuK1x0XHRcdHZjcHUtXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4rI2VuZGlmXG4rXG4gXHRcdFx0bmV3cGlkID0gZ2V0X3Rhc2tfcGlkKGN1cnJlbnQsIFBJRFRZUEVfUElEKTtcbiBcdFx0XHR3cml0ZV9sb2NrKFx1MDAyNnZjcHUtXHUwMDNlcGlkX2xvY2spO1xuIFx0XHRcdHZjcHUtXHUwMDNlcGlkID0gbmV3cGlkO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDQ6MDMuOTkwNzUyMzgxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3MzYzNDE1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIG5lZWQgdG8gYnJpbmcgS01TQU4gaW50byB0aGUgcGljdHVyZS4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGEgY2hhbmdlIHJlbGF0ZWQgdG8gaG93IHN0ZWFsIHRpbWUgaXMgdHJhY2tlZCBhY3Jvc3MgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgd2l0aGluIEtWTS5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHdoYXQncyBiZWVuIG1vdmVkLiBJdCBsb29rcyBsaWtlIGBsYXN0X3N0ZWFsYCBoYXMgYmVlbiByZWZhY3RvcmVkLiBTcGVjaWZpY2FsbHksIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYHZjcHUtXHUwMDNlYXJjaC5zdGVhbC5sYXN0X3N0ZWFsYCAob3Igc2ltaWxhciB2YXJpYW50cyBmb3IgYXJtNjQsIGxvb25nYXJjaCwgcmlzY3YsIGFuZCB4ODYpIGFyZSBiZWluZyByZXBsYWNlZCBieSBhIGdlbmVyaWMgYHZjcHUtXHUwMDNlbGFzdF9zdGVhbGAgd2l0aGluIHRoZSBgc3RydWN0IGt2bV92Y3B1YC4gVGhlIGFkZGl0aW9uIG9mIHRoZSBgI2lmZGVmIENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FYCBndWFyZCBzdWdnZXN0cyB0aGF0IHRoaXMgcmVmYWN0b3JpbmcgaXMgY29uZGl0aW9uYWwgYW5kIG1pZ2h0IGJlIHVzZWQgdG8gYWJzdHJhY3Qgb3V0IHRoZSBzdGVhbCB0aW1lIGFjY291bnRpbmcuXG5cblRoZW4gdGhlcmUncyB0aGUgYWRkZWQgY29kZSBzbmlwcGV0IGluIGBrdm1fdmNwdV9pb2N0bGAgdW5kZXIgYEtWTV9SVU5gIChvciBwb3RlbnRpYWxseSBzaW1pbGFyIGNvbmRpdGlvbnMgd2hlcmUgdGhlIHZDUFUgUElEIGNoYW5nZXMpLiBIZXJlJ3Mgd2hlcmUgdGhlIHVwZGF0ZSB0byBgdmNwdS1cdTAwM2VsYXN0X3N0ZWFsYCBoYXBwZW5zOiBgdmNwdS1cdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtgIEFnYWluLCB0aGUgYCNpZmRlZmAgc2hvd3MgaXQncyBjb25kaXRpb25hbC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlICphY3R1YWwqIHZhbHVlIG9mIGBsYXN0X3N0ZWFsYCBpcyBiZWluZyBzZXQsIHdoaWNoIGNvdWxkIGJlIHJlbGV2YW50IGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZS4gSWYgYGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXlgIGlzIG5vdCBwcm9wZXJseSBpbml0aWFsaXplZCBvciBpZiB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGlzIGV4ZWN1dGVkIGRvbid0IGd1YXJhbnRlZSBpbml0aWFsaXphdGlvbiwgd2UgY291bGQgaGF2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLlxuXG5Ob3csIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBhcm91bmQgbGluZSA0NDc4LCB0byB2ZXJpZnkgdGhpcyBpbmZvcm1hdGlvbiwgdG8gc2VlIHRoZSBjb250ZXh0IGFuZCBzdXJyb3VuZGluZyBjb2RlIHdpdGggYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyBob3BlZnVsbHkgdGhlcmUgaXNuJ3QgdG9vIG11Y2ggdG8gaGF2ZSB0byBnbyB0aHJvdWdoLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUgYW5kIGZsYWdnaW5nIGFueSBwb3RlbnRpYWwgS01TQU4gY29uY2VybnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMTEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowNDowNy43MjcwOTg5MzhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NjE2NjEwNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSEFWRV9LVk1fUFZfU1RFQUxfVElNRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnPTIwPW1lbnVjb25maWcgS1ZNXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM2LVxcdHNlbGVjdCBIQVZFX0tWTV9WQ1BVX1JVTl9QSURfQ0hBTkdFXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzozNzpcXHRzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMzgtXFx0c2VsZWN0IFNDSEVEX0lORk9cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTI4LVxcdHNlbGVjdCBLVk1fQ09NTU9OXFxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc6Mjk6XFx0c2VsZWN0IEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0zMC1cXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjgtXFx0c2VsZWN0IEtWTV9DT01NT05cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjI5OlxcdHNlbGVjdCBIQVZFX0tWTV9QVl9TVEVBTF9USU1FXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0zMC1cXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNX1g4Nlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNDItXFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo0MzpcXHRzZWxlY3QgSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTQ0LVxcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTMyNT1zdHJ1Y3Qga3ZtX3ZjcHUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTQwMS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6NDAyOiNpZmRlZiBDT05GSUdfSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC00MDMtXFx0dTY0IGxhc3Rfc3RlYWw7XFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnPTgyPWNvbmZpZyBIQVZFX0tWTV9WQ1BVX1JVTl9QSURfQ0hBTkdFXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTg0LVxcbnZpcnQva3ZtL0tjb25maWc6ODU6Y29uZmlnIEhBVkVfS1ZNX1BWX1NURUFMX1RJTUVcXG52aXJ0L2t2bS9LY29uZmlnLTg2LSAgICAgICBib29sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQ0MjU9c3RhdGljIGxvbmcga3ZtX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ0ODAtXFxudmlydC9rdm0va3ZtX21haW4uYzo0NDgxOiNpZmRlZiBDT05GSUdfSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDQ4Mi1cXHRcXHRcXHR2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjA0OjEwLjQ4ODc3MzcyN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjc5OTU4MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIEtWTSBDb3JlOiBMaW5lIDQ0NzggaW4gYGt2bV9tYWluLmNgKipcblxuT2theSwgSSBuZWVkIHRvIGdldCB0byB0aGUgaGVhcnQgb2Ygc29tZXRoaW5nIHJlbGF0ZWQgdG8gS1ZNJ3Mgb3BlcmF0aW9uLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIHRoZSBjb3JlLCBhcyBpdCB3ZXJlLiBJJ20gZm9jdXNpbmcgb24gYHZpcnQva3ZtL2t2bV9tYWluLmNgIGJlY2F1c2UgdGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIHRvcC1sZXZlbCBLVk0gbG9naWMgcmVzaWRlcy4gQW5kIEknbSB6ZXJvaW5nIGluIG9uIGxpbmUgNDQ3OCwgd2hpY2ggbWVhbnMgSSd2ZSBwcm9iYWJseSBnb3QgYSBwcmV0dHkgc3BlY2lmaWMgcXVlc3Rpb24gb3IgaXNzdWUgaW4gbWluZCB0aGF0IEkgdGhpbmsgaXMgYWRkcmVzc2VkIGFyb3VuZCB0aGF0IGFyZWEuIEtub3dpbmcgdGhlIGNvZGViYXNlLCBJJ20gZXhwZWN0aW5nIHNvbWV0aGluZyBjcml0aWNhbCB0byBiZSBoYXBwZW5pbmcgaW4gdGhhdCByZWdpb247IHBlcmhhcHMgYSBtYWpvciBpbml0aWFsaXphdGlvbiBzdGVwLCBhIGtleSBzdGF0ZSB0cmFuc2l0aW9uLCBvciBhbiBpbXBvcnRhbnQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyB2aXJ0dWFsaXphdGlvbiBoYXJkd2FyZS4gSSdtIGdvaW5nIGluIHdpdGggdGhlIGV4cGVjdGF0aW9uIG9mIHVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgdG8gYnVpbGQgbXkgdW5kZXJzdGFuZGluZy4gTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1ODksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowNDoxMi43Njg3MzQzODdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ2NSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQ2NTpcXHRcXG40NDY2OlxcdFxcdFxcdC8qXFxuNDQ2NzpcXHRcXHRcXHQgKiBOb3RlLCB2Y3B1LVxcdTAwM2VwaWQgaXMgcHJpbWFyaWx5IHByb3RlY3RlZCBieSB2Y3B1LVxcdTAwM2VtdXRleC4gVGhlXFxuNDQ2ODpcXHRcXHRcXHQgKiBkZWRpY2F0ZWQgci93IGxvY2sgYWxsb3dzIG90aGVyIHRhc2tzLCBlLmcuIG90aGVyIHZDUFVzLCB0b1xcbjQ0Njk6XFx0XFx0XFx0ICogcmVhZCB2Y3B1LVxcdTAwM2VwaWQgd2hpbGUgdGhpcyB2Q1BVIGlzIGluIEtWTV9SVU4sIGUuZy4gdG8geWllbGRcXG40NDcwOlxcdFxcdFxcdCAqIGRpcmVjdGx5IHRvIHRoaXMgdkNQVVxcbjQ0NzE6XFx0XFx0XFx0ICovXFxuNDQ3MjpcXHRcXHRcXHRvbGRwaWQgPSB2Y3B1LVxcdTAwM2VwaWQ7XFxuNDQ3MzpcXHRcXHRcXHRpZiAodW5saWtlbHkob2xkcGlkICE9IHRhc2tfcGlkKGN1cnJlbnQpKSkge1xcbjQ0NzQ6XFx0XFx0XFx0XFx0LyogVGhlIHRocmVhZCBydW5uaW5nIHRoaXMgVkNQVSBjaGFuZ2VkLiAqL1xcbjQ0NzU6XFx0XFx0XFx0XFx0c3RydWN0IHBpZCAqbmV3cGlkO1xcbjQ0NzY6XFx0XFxuNDQ3NzpcXHRcXHRcXHRcXHRyID0ga3ZtX2FyY2hfdmNwdV9ydW5fcGlkX2NoYW5nZSh2Y3B1KTtcXG40NDc4OlxcdFxcdFxcdFxcdGlmIChyKVxcbjQ0Nzk6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDQ4MDpcXHRcXG40NDgxOlxcdCNpZmRlZiBDT05GSUdfSEFWRV9LVk1fUFZfU1RFQUxfVElNRVxcbjQ0ODI6XFx0XFx0XFx0XFx0dmNwdS1cXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXFx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xcbjQ0ODM6XFx0I2VuZGlmXFxuNDQ4NDpcXHRcXG40NDg1OlxcdFxcdFxcdFxcdG5ld3BpZCA9IGdldF90YXNrX3BpZChjdXJyZW50LCBQSURUWVBFX1BJRCk7XFxuNDQ4NjpcXHRcXHRcXHRcXHR3cml0ZV9sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VwaWRfbG9jayk7XFxuNDQ4NzpcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2VwaWQgPSBuZXdwaWQ7XFxuNDQ4ODpcXHRcXHRcXHRcXHR3cml0ZV91bmxvY2soXFx1MDAyNnZjcHUtXFx1MDAzZXBpZF9sb2NrKTtcXG40NDg5OlxcdFxcbjQ0OTA6XFx0XFx0XFx0XFx0cHV0X3BpZChvbGRwaWQpO1xcbjQ0OTE6XFx0XFx0XFx0fVxcbjQ0OTI6XFx0XFx0XFx0dmNwdS1cXHUwMDNld2FudHNfdG9fcnVuID0gIVJFQURfT05DRSh2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWltbWVkaWF0ZV9leGl0X191bnNhZmUpO1xcbjQ0OTM6XFx0XFx0XFx0ciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHZjcHUpO1xcbjQ0OTQ6XFx0XFx0XFx0dmNwdS1cXHUwMDNld2FudHNfdG9fcnVuID0gZmFsc2U7XFxuNDQ5NTpcXHRcXG40NDk2OlxcdFxcdFxcdC8qXFxuNDQ5NzpcXHRcXHRcXHQgKiBGSVhNRTogUmVtb3ZlIHRoaXMgaGFjayBvbmNlIGFsbCBLVk0gYXJjaGl0ZWN0dXJlc1xcbjQ0OTg6XFx0XFx0XFx0ICogc3VwcG9ydCB0aGUgZ2VuZXJpYyBUSUYgYml0cywgaS5lLiBhIGRlZGljYXRlZCBUSUZfUlNFUS5cXG40NDk5OlxcdFxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowNDoxMi43NjkyMjU0NDdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYyMzcyMzQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBLVk0gY29kZSBhbmQgdHJhY2UgdGhlIGxpZmVjeWNsZSBvZiBhIHZpcnR1YWwgQ1BVIChgdmNwdWApLiBNeSBwcmltYXJ5IGludGVyZXN0IGlzIGluIHVuZGVyc3RhbmRpbmcgaG93IGB2Y3B1YCBpdHNlbGYgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gSSB3YW50IHRvIHNlZSB0aGlzIGZyb20gYSBsb3ctbGV2ZWwgcGVyc3BlY3RpdmUsIGxpa2UgYSBrZXJuZWwgaGFja2VyLlxuXG5NeSBoeXBvdGhlc2lzLCBiYXNlZCBvbiBwcmlvciBleHBlcmllbmNlLCBpcyB0aGF0IHdoZW4gYSBgdmNwdWAgaW5zdGFuY2UgaXMgbmVlZGVk4oCUY3JlYXRlZCBlaXRoZXIgdGhyb3VnaCBhbiBgaW9jdGxgIGNhbGwgbGlrZSBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBvciBhIGZ1bmN0aW9uIGxpa2UgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYOKAlHRoZSBhbGxvY2F0aW9uIG1lY2hhbmlzbSB3aWxsIGxpa2VseSB1dGlsaXplIGBremFsbG9jYCAob3IgcGVyaGFwcyBga21lbV9jYWNoZV96YWxsb2NgKSB0byBlbnN1cmUgYSB6ZXJvLWluaXRpYWxpemVkIG1lbW9yeSBibG9jay4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGluIHRoZSBrZXJuZWwuXG5cblNvLCB0aGUgbmV4dCBzdGVwIGlzIHRvIGdldCBzb21lIHZlcmlmaWNhdGlvbiBvbiB0aGlzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMsIGluIGZhY3QsIHRoZSBhbGxvY2F0aW9uIG1ldGhvZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NDAsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjA0OjE1LjM5Mjk1MTg3MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU1OTMzMTMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fYXJjaF92Y3B1X2NyZWF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9hcm0uYz01MjY9aW50IGt2bV9hcmNoX3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtNTM2LVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjUzNzppbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTUzOC17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTcxPWludCBrdm1fdmdpY19jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1MzIgdHlwZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMTEyLVxcdCAqIC0gQmFpbGluZyBvbiB0aGUgZW50aXJlIHRoaW5nIGlmIGEgdkNQVSBpcyBpbiB0aGUgbWlkZGxlIG9mIGNyZWF0aW9uLFxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6MTEzOlxcdCAqICAgZHJvcHBlZCB0aGUga3ZtLVxcdTAwM2Vsb2NrLCBidXQgaGFzbid0IHJlYWNoZWQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoKS5cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTExNC1cXHQgKlxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYz0xNTA4PWludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMtMTUxMi1cXG5hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jOjE1MTM6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jLTE1MTQte1xcbi0tXFxuYXJjaC9taXBzL2t2bS9taXBzLmM9MjczPWludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcXG4tLVxcbmFyY2gvbWlwcy9rdm0vbWlwcy5jLTI3Ny1cXG5hcmNoL21pcHMva3ZtL21pcHMuYzoyNzg6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL21pcHMva3ZtL21pcHMuYy0yNzkte1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9Nzc4PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBrdm1wcGNfZGVjcmVtZW50ZXJfd2FrZXVwKHN0cnVjdCBocnRpbWVyICp0aW1lcilcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTc4Ny1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo3ODg6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy03ODkte1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTEzOT1pbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMTQzLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzoxNDQ6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMTQ1LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmM9Mzc3OD1ERUZJTkVfRlJFRShzaWVfcGFnZSwgc3RydWN0IHNpZV9wYWdlICosIGlmIChfVCkgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKShfVCkpKVxcbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmMtMzc3OS1cXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jOjM3ODA6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTM3ODEte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz04Mjc9dm9pZCB0ZHhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy04NDItICogICAgMy4xIHRkeF92Y3B1X2NyZWF0ZSgpIHRyYW5zaXRpb25zIHZDUFUgc3RhdGUgdG8gVkNQVV9URF9TVEFURV9VTklOSVRJQUxJWkVELlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6ODQzOiAqICAgIDMuMiB2Y3B1X2xvYWQoKSBhbmQgdmNwdV9wdXQoKSBpbiBrdm1fYXJjaF92Y3B1X2NyZWF0ZSgpLlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6ODQ0OiAqICAgIDMuMyAoY29uZGl0aW9uYWwpIGlmIGFueSBlcnJvciBlbmNvdW50ZXJlZCBhZnRlciBrdm1fYXJjaF92Y3B1X2NyZWF0ZSgpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy04NDUtICogICAgICAgIGt2bV9hcmNoX3ZjcHVfZGVzdHJveSgpIC0tXFx1MDAzZSB0ZHhfdmNwdV9mcmVlKCkuXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9OTMwMD1pbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTMzOC1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTMzOTppbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ODYuYy05MzQwLXtcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xNjUzPWludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCk7XFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE2NTQ6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE2NTUtdm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NDE1Nj1zdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaWQpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQyMTItXFxudmlydC9rdm0va3ZtX21haW4uYzo0MjEzOlxcdHIgPSBrdm1fYXJjaF92Y3B1X2NyZWF0ZSh2Y3B1KTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQyMTQtXFx0aWYgKHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjA0OjE3Ljk1MjI4ODQwMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTgxMjI3ODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEtWTSBDUFUgQ3JlYXRpb24qKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBjb3JlIG9mIHZpcnR1YWwgQ1BVIGNyZWF0aW9uIGluIEtWTS4gTXkgbWVudGFsIG1hcCBpbW1lZGlhdGVseSBsZWFkcyBtZSB0byBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YC4gVGhhdCdzIHRoZSBsaWtlbHkgZW50cnkgcG9pbnQgZm9yIGEgdXNlci1zcGFjZSByZXF1ZXN0IHRvIHNwYXduIGEgdmlydHVhbCBDUFUuIFRoZSBjb2RlIEkgbmVlZCBpcyBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AsIHdoaWNoIG1ha2VzIHNlbnNlOyB0aGF0IGZpbGUgdXN1YWxseSBob2xkcyB0aGUgbW9yZSBnZW5lcmFsIEtWTSBWTSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGhhbmRsZSBhbGxvY2F0aW5nIHRoZSBgdmNwdWAgZGF0YSBzdHJ1Y3R1cmUsIHNldHRpbmcgdXAgdGhlIGluaXRpYWwgc3RhdGUsIGhvb2tpbmcgaXQgaW50byB0aGUgVk0sIGFuZCBsaWtlbHkgaW5pdGlhdGluZyB0aGUgZmlyc3QgcnVuIG9yIGF0IGxlYXN0IHNldHRpbmcgdGhpbmdzIHVwIHNvIGl0J3MgcmVhZHkgdG8gcnVuLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiBhbmQgdGhlIGFjdHVhbCBjb250cm9sIGZsb3cgd2l0aGluIHRoYXQgaW9jdGwgaGFuZGxlci4gSSBhbSBhbHNvIGF3YXJlIHRoYXQgdGhpcyBjYWxsIGNvdWxkIGJlIGEgdmVyeSBleHBlbnNpdmUgY2FsbCwgc28gdW5kZXJzdGFuZGluZyBhbnkgbG9ja2luZyBvciBvcHRpbWl6YXRpb25zIHdvdWxkIGJlIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyODYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowNDoyMC41MzM1MjA4MjNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDIwMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDIwMDpcXHRcXG40MjAxOlxcdFxcdHZjcHUtXFx1MDAzZXZjcHVfaWR4ID0gLTE7XFxuNDIwMjpcXHRcXG40MjAzOlxcdFxcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGt2bV9ydW4pIFxcdTAwM2UgUEFHRV9TSVpFKTtcXG40MjA0OlxcdFxcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pO1xcbjQyMDU6XFx0XFx0aWYgKCFwYWdlKSB7XFxuNDIwNjpcXHRcXHRcXHRyID0gLUVOT01FTTtcXG40MjA3OlxcdFxcdFxcdGdvdG8gdmNwdV9mcmVlO1xcbjQyMDg6XFx0XFx0fVxcbjQyMDk6XFx0XFx0dmNwdS1cXHUwMDNlcnVuID0gcGFnZV9hZGRyZXNzKHBhZ2UpO1xcbjQyMTA6XFx0XFxuNDIxMTpcXHRcXHRrdm1fdmNwdV9pbml0KHZjcHUsIGt2bSwgaWQpO1xcbjQyMTI6XFx0XFxuNDIxMzpcXHRcXHRyID0ga3ZtX2FyY2hfdmNwdV9jcmVhdGUodmNwdSk7XFxuNDIxNDpcXHRcXHRpZiAocilcXG40MjE1OlxcdFxcdFxcdGdvdG8gdmNwdV9mcmVlX3J1bl9wYWdlO1xcbjQyMTY6XFx0XFxuNDIxNzpcXHRcXHRpZiAoa3ZtLVxcdTAwM2VkaXJ0eV9yaW5nX3NpemUpIHtcXG40MjE4OlxcdFxcdFxcdHIgPSBrdm1fZGlydHlfcmluZ19hbGxvYyhrdm0sIFxcdTAwMjZ2Y3B1LVxcdTAwM2VkaXJ0eV9yaW5nLFxcbjQyMTk6XFx0XFx0XFx0XFx0XFx0XFx0IGlkLCBrdm0tXFx1MDAzZWRpcnR5X3Jpbmdfc2l6ZSk7XFxuNDIyMDpcXHRcXHRcXHRpZiAocilcXG40MjIxOlxcdFxcdFxcdFxcdGdvdG8gYXJjaF92Y3B1X2Rlc3Ryb3k7XFxuNDIyMjpcXHRcXHR9XFxuNDIyMzpcXHRcXG40MjI0OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjA0OjIwLjUzMzgwMzU1M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzQ4NTE2OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZTpcblxuKipBbmFseXppbmcgVkNQVSBBbGxvY2F0aW9uKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiB0aGlzLiBMaW5lIDQyMDAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdGF0ZSBvZiB0aGUgYHZjcHVgIHZhcmlhYmxlICpyaWdodCogYmVmb3JlIHRoYXQgcG9pbnQuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGV4YWN0bHkgd2hlcmUgaXQncyBhbGxvY2F0ZWQsIGluaXRpYWxpemVkLCBhbmQgcG90ZW50aWFsbHkgbW9kaWZpZWQgcHJpb3IgdG8gd2hhdGV2ZXIgYWN0aW9uIGlzIG9jY3VycmluZyBvbiB0aGF0IGxpbmUuIEknbSBnb2luZyB0byBsb29rIHVwc3RyZWFtLCBwcm9iYWJseSB1c2luZyBteSBJREUncyBcImZpbmQgcmVmZXJlbmNlc1wiIG9yIFwiY2FsbGVyc1wiIGZlYXR1cmUgdG8gdHJhY2UgYmFjayBmcm9tIGxpbmUgNDIwMC4gSSBuZWVkIHRvIHNlZSBpZiBpdCdzIGFzc2lnbmVkIGRpcmVjdGx5LCBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gYSBmdW5jdGlvbiwgb3IgcGVyaGFwcyBkZXJpdmVkIGZyb20gc29tZSBvdGhlciBzdHJ1Y3R1cmUuIFVuZGVyc3RhbmRpbmcgaXRzIG9yaWdpbiBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgY3VycmVudCBzdGF0ZSBhbmQgaG93IGl0IG1pZ2h0IGltcGFjdCB0aGUgY29kZSBvbiBsaW5lIDQyMDAuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBwb2ludHMgb2YgY29udGVudGlvbiBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBObyBhc3N1bXB0aW9uczsgSSdtIGdvaW5nIGJhY2sgdG8gYmFzaWNzIHdpdGggaG93IHRoZSB2YXJpYWJsZSBpcyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NTIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjA0OjIyLjg4MjMyNDAwNloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTgwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MTgwOlxcdFxcdGlmICh0ZXN0X2JpdChpZCwga3ZtLVxcdTAwM2V2Y3B1X2lkcykpIHtcXG40MTgxOlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG40MTgyOlxcdFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbjQxODM6XFx0XFx0fVxcbjQxODQ6XFx0XFxuNDE4NTpcXHRcXHRyID0ga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoa3ZtLCBpZCk7XFxuNDE4NjpcXHRcXHRpZiAocikge1xcbjQxODc6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWxvY2spO1xcbjQxODg6XFx0XFx0XFx0cmV0dXJuIHI7XFxuNDE4OTpcXHRcXHR9XFxuNDE5MDpcXHRcXG40MTkxOlxcdFxcdGt2bS1cXHUwMDNlY3JlYXRlZF92Y3B1cysrO1xcbjQxOTI6XFx0XFx0X19zZXRfYml0KGlkLCBrdm0tXFx1MDAzZXZjcHVfaWRzKTtcXG40MTkzOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG40MTk0OlxcdFxcbjQxOTU6XFx0XFx0dmNwdSA9IGttZW1fY2FjaGVfemFsbG9jKGt2bV92Y3B1X2NhY2hlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbjQxOTY6XFx0XFx0aWYgKCF2Y3B1KSB7XFxuNDE5NzpcXHRcXHRcXHRyID0gLUVOT01FTTtcXG40MTk4OlxcdFxcdFxcdGdvdG8gdmNwdV9kZWNyZW1lbnQ7XFxuNDE5OTpcXHRcXHR9XFxuNDIwMDpcXHRcXG40MjAxOlxcdFxcdHZjcHUtXFx1MDAzZXZjcHVfaWR4ID0gLTE7XFxuNDIwMjpcXHRcXG40MjAzOlxcdFxcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGt2bV9ydW4pIFxcdTAwM2UgUEFHRV9TSVpFKTtcXG40MjA0OlxcdFxcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowNDoyMi44ODI1NDkzMjZaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjQ0NTM1NDUyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBhIFN0ZWFsLVRpbWUgQ2FsY3VsYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGB2Y3B1YCBpcyB6ZXJvZWQgb3V0IG9uIGFsbG9jYXRpb24g4oCTIHRoYXQncyBnb29kLiBga21lbV9jYWNoZV96YWxsb2NgIGdpdmVzIHVzIGEgY2xlYW4gc2xhdGUsIHNvIGB2Y3B1LVx1MDAzZWxhc3Rfc3RlYWxgIHN0YXJ0cyBhdCB6ZXJvLiBUaGUgcGF0Y2gncyBjb3JlIGlzc3VlIGlzIHByZXR0eSBjbGVhcjogaXQncyBhYm91dCB0aGUgdHJhY2tpbmcgb2Ygc3RlYWwtdGltZS4gUHJldmlvdXNseSwgYGxhc3Rfc3RlYWxgIHdhcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsIHR1Y2tlZCBhd2F5IGluIGB2Y3B1LVx1MDAzZWFyY2guXHUwMDNjYXJjaC1zcGVjaWZpY1x1MDAzZS5sYXN0X3N0ZWFsYC4gVGhlIHByb2JsZW0gYXJpc2VzIHdoZW4gYSB2Q1BVIHN3aXRjaGVzIHRvIGJlaW5nIHJ1biBieSBhIGRpZmZlcmVudCBob3N0IHRocmVhZCAoYSBuZXcgUElEKS4gU3RlYWwtdGltZSBjYWxjdWxhdGlvbiB3YXMgdXNpbmcgYGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkgLSBsYXN0X3N0ZWFsYC4gQnV0IGBydW5fZGVsYXlgIGlzIHRocmVhZC1zcGVjaWZpYy4gU28sIGlmIHRocmVhZCBBIHJhbiB0aGUgdkNQVSwgdGhlbiB0aHJlYWQgQiwgd2UnZCBiZSBzdWJ0cmFjdGluZyB0aHJlYWQgQSdzIGBydW5fZGVsYXlgIChmcm9tIHdoZW4gaXQgcmFuIHRoZSB2Q1BVKSBmcm9tIHRocmVhZCBCJ3MgYHJ1bl9kZWxheWAuIFRoYXQncyBhIGRpc2FzdGVyIOKAkyB3aWxkbHkgaW5jb3JyZWN0IHZhbHVlcywgcG90ZW50aWFsbHkgbmVnYXRpdmUsIGRlZmluaXRlbHkgd3JvbmcuXG5cblRoZSBmaXggdW5pZmllcyB0aGlzLCBtb3ZpbmcgYGxhc3Rfc3RlYWxgIGludG8gdGhlIGNvcmUgYHN0cnVjdCBrdm1fdmNwdWAgYW5kIHJlc2V0dGluZyBgdmNwdS1cdTAwM2VsYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheWAgd2hlbmV2ZXIgdGhlIHJ1bm5pbmcgdGFzaydzIFBJRCBjaGFuZ2VzIGluIGBrdm1fdmNwdV9pb2N0bCgpYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IHNhZmV0eS4gTGV0J3MgZGlnIGludG8gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW1zIG9yIGtlcm5lbCBpbmZvcm1hdGlvbiBsZWFrcy4gRmlyc3QsIGBsYXN0X3N0ZWFsYCAqc3RhcnRzKiBhdCB6ZXJvLCBzbyB0aGF0J3MgZ29vZC4gSSdtIGNoZWNraW5nIGVhY2ggYXJjaGl0ZWN0dXJlIHNwZWNpZmljYWxseS4gYGt2bV9pbml0X3N0b2xlbl90aW1lYCBpbiBhcm02NCwgYW5kIHRoZSBsb29uZ2FyY2ggYW5kIHJpc2N2IHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgYWxsIHNldHRpbmcgYHZjcHUtXHUwMDNlbGFzdF9zdGVhbGAgcHJvcGVybHkgdG8gYGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXlgLiBUaGUgeDg2IHNlZW1zIHRvIGRvIHRoaXMgaW4gYHJlY29yZF9zdGVhbF90aW1lKClgLiBBbmQgdGhlIGdlbmVyYWwgUElEIGNoYW5nZSBoYW5kbGVyIGluIGBrdm1fdmNwdV9pb2N0bCgpYCAqYWxzbyogcmVzZXRzIGl0LiBJdCdzIHByb3Blcmx5IGluaXRpYWxpemVkIGFjcm9zcyB0aGUgYm9hcmQuXG5cbkRvZXMgYW55dGhpbmcgKnJlYWQqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gRG9lcyBhbnl0aGluZyAqY29weSogdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZT8gTm8uIEFueSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIFRoaXMgcGF0Y2ggYXBwZWFycyBzYWZlLCBmcm9tIGEgbWVtb3J5IHBlcnNwZWN0aXZlLiBObyByaXNrcyBpbnRyb2R1Y2VkLlxuXG5Pa2F5LCBsZXQncyBhcHBseSB0aGUgYXBwcm9wcmlhdGUgS01TQU4gbG9naWM6IE5lZWRzS01TQU4gc2hvdWxkIE9OTFkgYmUgdHJ1ZSBpZiB3ZSdyZSBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOICpzcGVjaWZpY2FsbHkqIGRldGVjdHMuIFNpbmNlIHRoaXMgcGF0Y2ggZG9lc24ndCwgTmVlZHNLTVNBTiBzaG91bGQgYmUgZmFsc2UuXG5cblNvLCBpbiBlc3NlbmNlLCB0aGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB0cmFja2luZyBvZiBzdGVhbC10aW1lIHdoZW4gdGhyZWFkcyBhcmUgc3dpdGNoZWQsIHVuaWZ5aW5nIGBsYXN0X3N0ZWFsYCB0byBgc3RydWN0IGt2bV92Y3B1YCB0byBmaXggYSBjYWxjdWxhdGlvbiBlcnJvci4gQW5kLCB0aGVyZSdzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCB0aGVyZWZvcmUgdGhlIGZsYWcgc2hvdWxkIGJlIGFwcHJvcHJpYXRlbHkgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYwMCwiT3V0cHV0VG9rZW5zIjoyNDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowNDoyOS4zMjc5MDY2NloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB0cmFja2luZyBvZiBwYXJhdmlydHVhbGl6ZWQgc3RlYWwgdGltZSAoYGxhc3Rfc3RlYWxgKSBieSBtb3ZpbmcgaXQgZnJvbSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdmNwdSBzdWItc3RydWN0dXJlcyAoaW4geDg2LCBhcm02NCwgcmlzY3YsIGFuZCBsb29uZ2FyY2gpIGludG8gdGhlIGdlbmVyaWMgYHN0cnVjdCBrdm1fdmNwdWAgdW5kZXIgYENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FYCwgYW5kIHJlc2V0dGluZyBgdmNwdS1cXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXFx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5YCB3aGVuIHRoZSB2Q1BVIHRocmVhZCBQSUQgY2hhbmdlcy5cXG5cXG5UaGUgYHN0cnVjdCBrdm1fdmNwdWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvYygpYCwgZW5zdXJpbmcgYHZjcHUtXFx1MDAzZWxhc3Rfc3RlYWxgIGlzIHplcm8taW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24uIEFsbCByZWFkcyBhbmQgd3JpdGVzIHRvIGB2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsYCBvcGVyYXRlIG9uIGZ1bGx5IGluaXRpYWxpemVkIGZpZWxkcyBhbmQgdmFsdWVzIGRlcml2ZWQgZnJvbSBgY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXlgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RhY2sgdmFyaWFibGVzLCBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBvciBwYWRkaW5nIGlzc3VlcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB0cmFja2luZyBvZiBwYXJhdmlydHVhbGl6ZWQgc3RlYWwgdGltZSAoYGxhc3Rfc3RlYWxgKSBieSBtb3ZpbmcgaXQgZnJvbSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdmNwdSBzdWItc3RydWN0dXJlcyAoaW4geDg2LCBhcm02NCwgcmlzY3YsIGFuZCBsb29uZ2FyY2gpIGludG8gdGhlIGdlbmVyaWMgYHN0cnVjdCBrdm1fdmNwdWAgdW5kZXIgYENPTkZJR19IQVZFX0tWTV9QVl9TVEVBTF9USU1FYCwgYW5kIHJlc2V0dGluZyBgdmNwdS1cXHUwMDNlbGFzdF9zdGVhbCA9IGN1cnJlbnQtXFx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5YCB3aGVuIHRoZSB2Q1BVIHRocmVhZCBQSUQgY2hhbmdlcy5cXG5cXG5UaGUgYHN0cnVjdCBrdm1fdmNwdWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvYygpYCwgZW5zdXJpbmcgYHZjcHUtXFx1MDAzZWxhc3Rfc3RlYWxgIGlzIHplcm8taW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24uIEFsbCByZWFkcyBhbmQgd3JpdGVzIHRvIGB2Y3B1LVxcdTAwM2VsYXN0X3N0ZWFsYCBvcGVyYXRlIG9uIGZ1bGx5IGluaXRpYWxpemVkIGZpZWxkcyBhbmQgdmFsdWVzIGRlcml2ZWQgZnJvbSBgY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXlgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RhY2sgdmFyaWFibGVzLCBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBvciBwYWRkaW5nIGlzc3VlcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow9xg5w[1] Phase: Succeeded StartedAt: 2026-09-06 05:04:41 +0000 UTC FinishedAt: 2026-09-06 05:04:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xg5w[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 05:04:41 +0000 UTC FinishedAt: 2026-09-06 05:04:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xg5w[2] Phase: Succeeded StartedAt: 2026-09-06 05:04:41 +0000 UTC FinishedAt: 2026-09-06 06:41:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-09-06 05:04:41 +0000 UTC FinishedAt: 2026-09-06 06:41:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 05:04:41 +0000 UTC FinishedAt: 2026-09-06 05:04:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 05:04:41 +0000 UTC FinishedAt: 2026-09-06 05:04:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9xg5w/series-workflow9xg5w-convert-artifact-3286912487/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 05:04:51 +0000 UTC FinishedAt: 2026-09-06 05:25:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 05:04:51 +0000 UTC FinishedAt: 2026-09-06 05:25:27 +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:*8fcf82c6-5d48-49b5-b2a1-4377866341d3,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-workflow9xg5w/series-workflow9xg5w-convert-artifact-3286912487/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": "b3576843-44a9-4701-b859-609cb18b8a2a", "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-workflow9xg5w/series-workflow9xg5w-build-action-3265610877/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 05:04:51 +0000 UTC FinishedAt: 2026-09-06 05:25:17 +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:*8fcf82c6-5d48-49b5-b2a1-4377866341d3,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-workflow9xg5w/series-workflow9xg5w-convert-artifact-3286912487/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": "b3576843-44a9-4701-b859-609cb18b8a2a", "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-workflow9xg5w/series-workflow9xg5w-build-action-3265610877/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 05:25:27 +0000 UTC FinishedAt: 2026-09-06 05:25:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 05:25:27 +0000 UTC FinishedAt: 2026-09-06 05:25:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 05:25:27 +0000 UTC FinishedAt: 2026-09-06 05:25:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 05:25:27 +0000 UTC FinishedAt: 2026-09-06 05:25:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9xg5w/series-workflow9xg5w-convert-artifact-4226523798/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 05:25:37 +0000 UTC FinishedAt: 2026-09-06 05:27:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 05:25:37 +0000 UTC FinishedAt: 2026-09-06 05:27:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b3576843-44a9-4701-b859-609cb18b8a2a,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-workflow9xg5w/series-workflow9xg5w-build-action-3265610877/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-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 05:27:27 +0000 UTC FinishedAt: 2026-09-06 05:27:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 05:27:27 +0000 UTC FinishedAt: 2026-09-06 05:27:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 05:27:27 +0000 UTC FinishedAt: 2026-09-06 05:58:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 05:27:27 +0000 UTC FinishedAt: 2026-09-06 05:58:14 +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:*8fcf82c6-5d48-49b5-b2a1-4377866341d3,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-workflow9xg5w/series-workflow9xg5w-convert-artifact-4226523798/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": "b1723264-ed70-4fd5-b646-ebac9eb0242e", "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-workflow9xg5w/series-workflow9xg5w-build-action-1710908314/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 05:27:27 +0000 UTC FinishedAt: 2026-09-06 05:58:04 +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:*8fcf82c6-5d48-49b5-b2a1-4377866341d3,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-workflow9xg5w/series-workflow9xg5w-convert-artifact-4226523798/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": "b1723264-ed70-4fd5-b646-ebac9eb0242e", "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-workflow9xg5w/series-workflow9xg5w-build-action-1710908314/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 05:58:14 +0000 UTC FinishedAt: 2026-09-06 05:58:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 05:58:14 +0000 UTC FinishedAt: 2026-09-06 05:58:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 05:58:14 +0000 UTC FinishedAt: 2026-09-06 06:00:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 05:58:14 +0000 UTC FinishedAt: 2026-09-06 05:59:55 +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:*b1723264-ed70-4fd5-b646-ebac9eb0242e,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-workflow9xg5w/series-workflow9xg5w-build-action-1710908314/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-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Failed StartedAt: 2026-09-06 06:00:06 +0000 UTC FinishedAt: 2026-09-06 06:41:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Failed StartedAt: 2026-09-06 06:00:06 +0000 UTC FinishedAt: 2026-09-06 06:41:03 +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":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*b3576843-44a9-4701-b859-609cb18b8a2a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b1723264-ed70-4fd5-b646-ebac9eb0242e,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-workflow9xg5w/series-workflow9xg5w-build-action-3265610877/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-workflow9xg5w/series-workflow9xg5w-build-action-1710908314/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 06:00:06 +0000 UTC FinishedAt: 2026-09-06 06:00:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 06:00:06 +0000 UTC FinishedAt: 2026-09-06 06:00:25 +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":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9xg5w/series-workflow9xg5w-convert-artifact-2213048379/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 06:00:06 +0000 UTC FinishedAt: 2026-09-06 06:00:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 06:00:06 +0000 UTC FinishedAt: 2026-09-06 06:00:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 06:00:06 +0000 UTC FinishedAt: 2026-09-06 06:00:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Failed StartedAt: 2026-09-06 06:00:30 +0000 UTC FinishedAt: 2026-09-06 06:41:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xg5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["record_steal_time","kvm_vcpu_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"41c08939-49e3-4c3f-af0e-c3e4622237c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Error StartedAt: 2026-09-06 06:00:30 +0000 UTC FinishedAt: 2026-09-06 06:41:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b3576843-44a9-4701-b859-609cb18b8a2a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b1723264-ed70-4fd5-b646-ebac9eb0242e,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-workflow9xg5w/series-workflow9xg5w-build-action-3265610877/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-workflow9xg5w/series-workflow9xg5w-build-action-1710908314/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-workflow9xg5w/series-workflow9xg5w-convert-artifact-2213048379/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil