Name: series-workflowzcrc9 Phase: Succeeded StartedAt: 2026-08-24 01:49:59 +0000 UTC FinishedAt: 2026-08-24 05:42:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcrc9[0] Phase: Succeeded StartedAt: 2026-08-24 01:49:59 +0000 UTC FinishedAt: 2026-08-24 02:01:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcrc9[0].run-triage Phase: Succeeded StartedAt: 2026-08-24 01:49:59 +0000 UTC FinishedAt: 2026-08-24 02:01:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "818bebeb63dd6bf5f4e07e145f6cdbace520a34c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PARAVIRT_TIME_ACCOUNTING", "PARAVIRT_SPINLOCKS", "PARAVIRT", "HYPERVISOR_GUEST", "VIRTUALIZATION", "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "818bebeb63dd6bf5f4e07e145f6cdbace520a34c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PARAVIRT_TIME_ACCOUNTING", "PARAVIRT_SPINLOCKS", "PARAVIRT", "HYPERVISOR_GUEST", "VIRTUALIZATION", "KVM" ], "series_id": "1ce4811e-e5cb-48e1-9693-74764a63b202" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_set_msr_common" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI0IDAxOjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBUkFWSVJUX1RJTUVfQUNDT1VOVElORyYjMzQ7LAogICAgJiMzNDtQQVJBVklSVF9TUElOTE9DS1MmIzM0OywKICAgICYjMzQ7UEFSQVZJUlQmIzM0OywKICAgICYjMzQ7SFlQRVJWSVNPUl9HVUVTVCYjMzQ7LAogICAgJiMzNDtWSVJUVUFMSVpBVElPTiYjMzQ7LAogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fc2V0X21zcl9jb21tb24mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgb3JkZXIgb2YgZ3Vlc3QgbWVtb3J5IGFjY2Vzc2VzIGluIGByZWNvcmRfc3RlYWxfdGltZWAgYW5kIGFkZHMgYSBuZXcgZmllbGQgYGRlZmVycmVkX2Nsb2NrX3Rhc2tgIHRvIGBzdHJ1Y3QgcnFgIGZvciBwYXJhdmlydCBzdGVhbCB0aW1lIGFjY291bnRpbmcuIFRoZSBndWVzdCBtZW1vcnkgYWNjZXNzZXMgdXNlIGB1bnNhZmVfZ2V0X3VzZXJgIHdoaWNoIGluaXRpYWxpemVzIHRoZSBsb2NhbCB2YXJpYWJsZXMgKGB2ZXJzaW9uYCBhbmQgYHN0ZWFsYCkgdXBvbiBzdWNjZXNzLCBvciBqdW1wcyB0byBhbiBlcnJvciBsYWJlbCB1cG9uIGZhaWx1cmUsIHByZXZlbnRpbmcgYW55IHVzZSBvZiB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcy4gVGhlIG5ldyBgZGVmZXJyZWRfY2xvY2tfdGFza2AgZmllbGQgaXMgcGFydCBvZiBgc3RydWN0IHJxYCwgd2hpY2ggaXMgYSBwZXItQ1BVIHZhcmlhYmxlIGFuZCB0aHVzIHplcm8taW5pdGlhbGl6ZWQgYnkgZGVmYXVsdC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IGNvcHkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgZXJyb3JzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3RlYWwgdGltZSBhY2NvdW50aW5nIGxvZ2ljIGluIEtWTSBhbmQgdGhlIHNjaGVkdWxlci4gSXQgY2hhbmdlcyB0aGUgb3JkZXIgb2YgdXNlciBhY2Nlc3MgYW5kIG1lbW9yeSBiYXJyaWVycyBpbiBgcmVjb3JkX3N0ZWFsX3RpbWVgIChLVk0pIGFuZCBkZWZlcnMgY2xvY2sgdGFzayB1cGRhdGVzIGluIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AgKHNjaGVkdWxlcikgd2hlbiB0aGUgdkNQVSBpcyBwcmVlbXB0ZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgYW5kIEtWTSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuIGBrdm1fc2V0X21zcl9jb21tb25gIGhhbmRsZXMgdGhlIE1TUiB3cml0ZSB0aGF0IGVuYWJsZXMgc3RlYWwgdGltZSBhY2NvdW50aW5nIGFuZCB0cmlnZ2VycyB0aGUgS1ZNIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAxOjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODY2ODU4NjdkNWU5Y2Y3MDZmYzhkMzQxYjA2ZjE3OWU2M2RlZDcxZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDAxOjUxOjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggNjk0NjliYmRjODRhOC4uNTI1YTE0NDgxOTVlMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtMzc1MSw2ICYjNDM7Mzc1MSwzNSBAQCBzdGF0aWMgdm9pZCByZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR9XG4gXG4gXHRzdCA9IChzdHJ1Y3Qga3ZtX3N0ZWFsX3RpbWUgX191c2VyICopZ2hjLVx1MDAzZWh2YTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF1c2VyX2FjY2Vzc19iZWdpbihzdCwgc2l6ZW9mKCpzdCkpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR1bnNhZmVfZ2V0X3VzZXIodmVyc2lvbiwgXHUwMDI2c3QtXHUwMDNldmVyc2lvbiwgb3V0KTtcbiYjNDM7XHRpZiAodmVyc2lvbiBcdTAwMjYgMSlcbiYjNDM7XHRcdHZlcnNpb24gJiM0Mzs9IDE7ICAvKiBmaXJzdCB0aW1lIHdyaXRlLCByYW5kb20ganVuayAqL1xuJiM0MztcbiYjNDM7XHR2ZXJzaW9uICYjNDM7PSAxO1xuJiM0MztcdHVuc2FmZV9wdXRfdXNlcih2ZXJzaW9uLCBcdTAwMjZzdC1cdTAwM2V2ZXJzaW9uLCBvdXQpO1xuJiM0MztcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHRoZSBndWVzdCBzaWRlIHZpcnRfcm1iKCkgaW4ga3ZtX3N0ZWFsX2Nsb2NrKCkuICovXG4mIzQzO1x0c21wX3dtYigpO1xuJiM0MztcbiYjNDM7XHR1bnNhZmVfZ2V0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuJiM0MztcdHN0ZWFsICYjNDM7PSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5IC1cbiYjNDM7XHRcdHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsO1xuJiM0MztcdHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbiYjNDM7XHR1bnNhZmVfcHV0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuJiM0MztcbiYjNDM7XHR2ZXJzaW9uICYjNDM7PSAxO1xuJiM0MztcdHVuc2FmZV9wdXRfdXNlcih2ZXJzaW9uLCBcdTAwMjZzdC1cdTAwM2V2ZXJzaW9uLCBvdXQpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFB1Ymxpc2ggdGhlIHN0ZWFsdGltZSBiZWZvcmUgbWFraW5nIHRoZSB2Q1BVIGxvb2sgcnVubmFibGUgdG9cbiYjNDM7XHQgKiB0aGUgZ3Vlc3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0c21wX3dtYigpO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBEb2luZyBhIFRMQiBmbHVzaCBoZXJlLCBvbiB0aGUgZ3Vlc3QmIzM5O3MgYmVoYWxmLCBjYW4gYXZvaWRcbiBcdCAqIGV4cGVuc2l2ZSBJUElzLlxuQEAgLTM3NTksOSAmIzQzOzM3ODgsNiBAQCBzdGF0aWMgdm9pZCByZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHU4IHN0X3ByZWVtcHRlZCA9IDA7XG4gXHRcdGludCBlcnIgPSAtRUZBVUxUO1xuIFxuLVx0XHRpZiAoIXVzZXJfYWNjZXNzX2JlZ2luKHN0LCBzaXplb2YoKnN0KSkpXG4tXHRcdFx0cmV0dXJuO1xuLVxuIFx0XHRhc20gdm9sYXRpbGUoXCYjMzQ7MTogeGNoZ2IgJTAsICUyXFxuXCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDt4b3IgJTEsICUxXFxuXCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDsyOlxcblwmIzM0O1xuQEAgLTM3ODEsMzcgJiM0MzszODA3LDE3IEBAIHN0YXRpYyB2b2lkIHJlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0aWYgKHN0X3ByZWVtcHRlZCBcdTAwMjYgS1ZNX1ZDUFVfRkxVU0hfVExCKVxuIFx0XHRcdGt2bV92Y3B1X2ZsdXNoX3RsYl9ndWVzdCh2Y3B1KTtcbiBcbi1cdFx0aWYgKCF1c2VyX2FjY2Vzc19iZWdpbihzdCwgc2l6ZW9mKCpzdCkpKVxuLVx0XHRcdGdvdG8gZGlydHk7XG4gXHR9IGVsc2Uge1xuLVx0XHRpZiAoIXVzZXJfYWNjZXNzX2JlZ2luKHN0LCBzaXplb2YoKnN0KSkpXG4tXHRcdFx0cmV0dXJuO1xuLVxuIFx0XHR1bnNhZmVfcHV0X3VzZXIoMCwgXHUwMDI2c3QtXHUwMDNlcHJlZW1wdGVkLCBvdXQpO1xuIFx0XHR2Y3B1LVx1MDAzZWFyY2guc3QucHJlZW1wdGVkID0gMDtcbiYjNDM7XHRcdHVzZXJfYWNjZXNzX2VuZCgpO1xuIFx0fVxuIFxuLVx0dW5zYWZlX2dldF91c2VyKHZlcnNpb24sIFx1MDAyNnN0LVx1MDAzZXZlcnNpb24sIG91dCk7XG4tXHRpZiAodmVyc2lvbiBcdTAwMjYgMSlcbi1cdFx0dmVyc2lvbiAmIzQzOz0gMTsgIC8qIGZpcnN0IHRpbWUgd3JpdGUsIHJhbmRvbSBqdW5rICovXG4tXG4tXHR2ZXJzaW9uICYjNDM7PSAxO1xuLVx0dW5zYWZlX3B1dF91c2VyKHZlcnNpb24sIFx1MDAyNnN0LVx1MDAzZXZlcnNpb24sIG91dCk7XG4tXG4tXHRzbXBfd21iKCk7XG4tXG4tXHR1bnNhZmVfZ2V0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuLVx0c3RlYWwgJiM0Mzs9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkgLVxuLVx0XHR2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbDtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbi1cdHVuc2FmZV9wdXRfdXNlcihzdGVhbCwgXHUwMDI2c3QtXHUwMDNlc3RlYWwsIG91dCk7XG4tXG4tXHR2ZXJzaW9uICYjNDM7PSAxO1xuLVx0dW5zYWZlX3B1dF91c2VyKHZlcnNpb24sIFx1MDAyNnN0LVx1MDAzZXZlcnNpb24sIG91dCk7XG4mIzQzO1x0bWFya19wYWdlX2RpcnR5X2luX3Nsb3QodmNwdS1cdTAwM2Vrdm0sIGdoYy1cdTAwM2VtZW1zbG90LCBncGFfdG9fZ2ZuKGdoYy1cdTAwM2VncGEpKTtcbiYjNDM7XHRyZXR1cm47XG4gXG4gIG91dDpcbiBcdHVzZXJfYWNjZXNzX2VuZCgpO1xuLSBkaXJ0eTpcbiBcdG1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KHZjcHUtXHUwMDNla3ZtLCBnaGMtXHUwMDNlbWVtc2xvdCwgZ3BhX3RvX2dmbihnaGMtXHUwMDNlZ3BhKSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jXG5pbmRleCBmNzgyNzUxOTIwMzZiLi41NmFhNDM5MTgyYzc1IDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2NvcmUuY1xuQEAgLTgxNiw2ICYjNDM7ODE2LDMwIEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9ycV9jbG9ja190YXNrKHN0cnVjdCBycSAqcnEsIHM2NCBkZWx0YSlcbiAgKi9cbiBcdHM2NCBfX21heWJlX3VudXNlZCBzdGVhbCA9IDAsIGlycV9kZWx0YSA9IDA7XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HXG4mIzQzO1x0aWYgKHN0YXRpY19rZXlfZmFsc2UoKFx1MDAyNnBhcmF2aXJ0X3N0ZWFsX3JxX2VuYWJsZWQpKSkge1xuJiM0MztcdFx0aW50IHJxX2NwdSA9IGNwdV9vZihycSk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEEgcmVtb3RlIENQVSBjYW4gdXBkYXRlIHRoaXMgcnEgYmVmb3JlIHRoZSBvd25lciB2Q1BVXG4mIzQzO1x0XHQgKiBoYXMgcmUtZW50ZXJlZCB0aGUgZ3Vlc3QgYW5kIHJlZnJlc2hlZCBpdHMgc3RlYWx0aW1lXG4mIzQzO1x0XHQgKiBzdGF0ZS4gRG8gbm90IGNoYXJnZSB0aGF0IGVsYXBzZWQgdGltZSB0byB0aGUgY3VycmVudFxuJiM0MztcdFx0ICogdGFzayB1bnRpbCBzdGVhbHRpbWUgY2FuIGJlIHNhbXBsZWQgYWZ0ZXIgdGhlIHZDUFUgaXNcbiYjNDM7XHRcdCAqIG5vIGxvbmdlciBwcmVlbXB0ZWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChycV9jcHUgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICB2Y3B1X2lzX3ByZWVtcHRlZChycV9jcHUpKSB7XG4mIzQzO1x0XHRcdHJxLVx1MDAzZWRlZmVycmVkX2Nsb2NrX3Rhc2sgJiM0Mzs9IGRlbHRhO1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJxLVx1MDAzZWRlZmVycmVkX2Nsb2NrX3Rhc2spIHtcbiYjNDM7XHRcdFx0ZGVsdGEgJiM0Mzs9IHJxLVx1MDAzZWRlZmVycmVkX2Nsb2NrX3Rhc2s7XG4mIzQzO1x0XHRcdHJxLVx1MDAzZWRlZmVycmVkX2Nsb2NrX3Rhc2sgPSAwO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuICNpZmRlZiBDT05GSUdfSVJRX1RJTUVfQUNDT1VOVElOR1xuIFx0aWYgKGlycXRpbWVfZW5hYmxlZCgpKSB7XG4gXHRcdGlycV9kZWx0YSA9IGlycV90aW1lX3JlYWQoY3B1X29mKHJxKSkgLSBycS1cdTAwM2VwcmV2X2lycV90aW1lO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oIGIva2VybmVsL3NjaGVkL3NjaGVkLmhcbmluZGV4IGU2NTZjNzA1OWJmODYuLjRmZDAwMjI4YWZlZjAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvc2NoZWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL3NjaGVkLmhcbkBAIC0xMzI1LDYgJiM0MzsxMzI1LDcgQEAgc3RydWN0IHJxIHtcbiAjZW5kaWZcbiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xuIFx0dTY0XHRcdFx0cHJldl9zdGVhbF90aW1lX3JxO1xuJiM0MztcdHU2NFx0XHRcdGRlZmVycmVkX2Nsb2NrX3Rhc2s7XG4gI2VuZGlmXG4gXG4gXHQvKiBjYWxjX2xvYWQgcmVsYXRlZCBmaWVsZHMgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMTo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT45bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HJiMzNDssCiAgICAmIzM0O1BBUkFWSVJUX1NQSU5MT0NLUyYjMzQ7LAogICAgJiMzNDtQQVJBVklSVCYjMzQ7LAogICAgJiMzNDtIWVBFUlZJU09SX0dVRVNUJiMzNDssCiAgICAmIzM0O1ZJUlRVQUxJWkFUSU9OJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9zZXRfbXNyX2NvbW1vbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3RlYWwgdGltZSBhY2NvdW50aW5nIGxvZ2ljIGluIEtWTSBhbmQgdGhlIHNjaGVkdWxlci4gSXQgY2hhbmdlcyB0aGUgb3JkZXIgb2YgdXNlciBhY2Nlc3MgYW5kIG1lbW9yeSBiYXJyaWVycyBpbiBgcmVjb3JkX3N0ZWFsX3RpbWVgIChLVk0pIGFuZCBkZWZlcnMgY2xvY2sgdGFzayB1cGRhdGVzIGluIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AgKHNjaGVkdWxlcikgd2hlbiB0aGUgdkNQVSBpcyBwcmVlbXB0ZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgYW5kIEtWTSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuIGBrdm1fc2V0X21zcl9jb21tb25gIGhhbmRsZXMgdGhlIE1TUiB3cml0ZSB0aGF0IGVuYWJsZXMgc3RlYWwgdGltZSBhY2NvdW50aW5nIGFuZCB0cmlnZ2VycyB0aGUgS1ZNIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODY2ODU4NjdkNWU5Y2Y3MDZmYzhkMzQxYjA2ZjE3OWU2M2RlZDcxZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDAxOjUxOjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDY5NDY5YmJkYzg0YTguLjUyNWExNDQ4MTk1ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTM3NTEsNiAmIzQzOzM3NTEsMzUgQEAgc3RhdGljIHZvaWQgcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCX0KIAogCXN0ID0gKHN0cnVjdCBrdm1fc3RlYWxfdGltZSBfX3VzZXIgKilnaGMtJmd0O2h2YTsKJiM0MzsKJiM0MzsJaWYgKCF1c2VyX2FjY2Vzc19iZWdpbihzdCwgc2l6ZW9mKCpzdCkpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl1bnNhZmVfZ2V0X3VzZXIodmVyc2lvbiwgJmFtcDtzdC0mZ3Q7dmVyc2lvbiwgb3V0KTsKJiM0MzsJaWYgKHZlcnNpb24gJmFtcDsgMSkKJiM0MzsJCXZlcnNpb24gJiM0Mzs9IDE7ICAvKiBmaXJzdCB0aW1lIHdyaXRlLCByYW5kb20ganVuayAqLwomIzQzOwomIzQzOwl2ZXJzaW9uICYjNDM7PSAxOwomIzQzOwl1bnNhZmVfcHV0X3VzZXIodmVyc2lvbiwgJmFtcDtzdC0mZ3Q7dmVyc2lvbiwgb3V0KTsKJiM0MzsKJiM0MzsJLyogUGFpcnMgd2l0aCB0aGUgZ3Vlc3Qgc2lkZSB2aXJ0X3JtYigpIGluIGt2bV9zdGVhbF9jbG9jaygpLiAqLwomIzQzOwlzbXBfd21iKCk7CiYjNDM7CiYjNDM7CXVuc2FmZV9nZXRfdXNlcihzdGVhbCwgJmFtcDtzdC0mZ3Q7c3RlYWwsIG91dCk7CiYjNDM7CXN0ZWFsICYjNDM7PSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheSAtCiYjNDM7CQl2Y3B1LSZndDthcmNoLnN0Lmxhc3Rfc3RlYWw7CiYjNDM7CXZjcHUtJmd0O2FyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwomIzQzOwl1bnNhZmVfcHV0X3VzZXIoc3RlYWwsICZhbXA7c3QtJmd0O3N0ZWFsLCBvdXQpOwomIzQzOwomIzQzOwl2ZXJzaW9uICYjNDM7PSAxOwomIzQzOwl1bnNhZmVfcHV0X3VzZXIodmVyc2lvbiwgJmFtcDtzdC0mZ3Q7dmVyc2lvbiwgb3V0KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUHVibGlzaCB0aGUgc3RlYWx0aW1lIGJlZm9yZSBtYWtpbmcgdGhlIHZDUFUgbG9vayBydW5uYWJsZSB0bwomIzQzOwkgKiB0aGUgZ3Vlc3QuCiYjNDM7CSAqLwomIzQzOwlzbXBfd21iKCk7CiYjNDM7CiAJLyoKIAkgKiBEb2luZyBhIFRMQiBmbHVzaCBoZXJlLCBvbiB0aGUgZ3Vlc3QmIzM5O3MgYmVoYWxmLCBjYW4gYXZvaWQKIAkgKiBleHBlbnNpdmUgSVBJcy4KQEAgLTM3NTksOSAmIzQzOzM3ODgsNiBAQCBzdGF0aWMgdm9pZCByZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCXU4IHN0X3ByZWVtcHRlZCA9IDA7CiAJCWludCBlcnIgPSAtRUZBVUxUOwogCi0JCWlmICghdXNlcl9hY2Nlc3NfYmVnaW4oc3QsIHNpemVvZigqc3QpKSkKLQkJCXJldHVybjsKLQogCQlhc20gdm9sYXRpbGUoJiMzNDsxOiB4Y2hnYiAlMCwgJTJcbiYjMzQ7CiAJCQkgICAgICYjMzQ7eG9yICUxLCAlMVxuJiMzNDsKIAkJCSAgICAgJiMzNDsyOlxuJiMzNDsKQEAgLTM3ODEsMzcgJiM0MzszODA3LDE3IEBAIHN0YXRpYyB2b2lkIHJlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJaWYgKHN0X3ByZWVtcHRlZCAmYW1wOyBLVk1fVkNQVV9GTFVTSF9UTEIpCiAJCQlrdm1fdmNwdV9mbHVzaF90bGJfZ3Vlc3QodmNwdSk7CiAKLQkJaWYgKCF1c2VyX2FjY2Vzc19iZWdpbihzdCwgc2l6ZW9mKCpzdCkpKQotCQkJZ290byBkaXJ0eTsKIAl9IGVsc2UgewotCQlpZiAoIXVzZXJfYWNjZXNzX2JlZ2luKHN0LCBzaXplb2YoKnN0KSkpCi0JCQlyZXR1cm47Ci0KIAkJdW5zYWZlX3B1dF91c2VyKDAsICZhbXA7c3QtJmd0O3ByZWVtcHRlZCwgb3V0KTsKIAkJdmNwdS0mZ3Q7YXJjaC5zdC5wcmVlbXB0ZWQgPSAwOwomIzQzOwkJdXNlcl9hY2Nlc3NfZW5kKCk7CiAJfQogCi0JdW5zYWZlX2dldF91c2VyKHZlcnNpb24sICZhbXA7c3QtJmd0O3ZlcnNpb24sIG91dCk7Ci0JaWYgKHZlcnNpb24gJmFtcDsgMSkKLQkJdmVyc2lvbiAmIzQzOz0gMTsgIC8qIGZpcnN0IHRpbWUgd3JpdGUsIHJhbmRvbSBqdW5rICovCi0KLQl2ZXJzaW9uICYjNDM7PSAxOwotCXVuc2FmZV9wdXRfdXNlcih2ZXJzaW9uLCAmYW1wO3N0LSZndDt2ZXJzaW9uLCBvdXQpOwotCi0Jc21wX3dtYigpOwotCi0JdW5zYWZlX2dldF91c2VyKHN0ZWFsLCAmYW1wO3N0LSZndDtzdGVhbCwgb3V0KTsKLQlzdGVhbCAmIzQzOz0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXkgLQotCQl2Y3B1LSZndDthcmNoLnN0Lmxhc3Rfc3RlYWw7Ci0JdmNwdS0mZ3Q7YXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7Ci0JdW5zYWZlX3B1dF91c2VyKHN0ZWFsLCAmYW1wO3N0LSZndDtzdGVhbCwgb3V0KTsKLQotCXZlcnNpb24gJiM0Mzs9IDE7Ci0JdW5zYWZlX3B1dF91c2VyKHZlcnNpb24sICZhbXA7c3QtJmd0O3ZlcnNpb24sIG91dCk7CiYjNDM7CW1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KHZjcHUtJmd0O2t2bSwgZ2hjLSZndDttZW1zbG90LCBncGFfdG9fZ2ZuKGdoYy0mZ3Q7Z3BhKSk7CiYjNDM7CXJldHVybjsKIAogIG91dDoKIAl1c2VyX2FjY2Vzc19lbmQoKTsKLSBkaXJ0eToKIAltYXJrX3BhZ2VfZGlydHlfaW5fc2xvdCh2Y3B1LSZndDtrdm0sIGdoYy0mZ3Q7bWVtc2xvdCwgZ3BhX3RvX2dmbihnaGMtJmd0O2dwYSkpOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuYwppbmRleCBmNzgyNzUxOTIwMzZiLi41NmFhNDM5MTgyYzc1IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9jb3JlLmMKQEAgLTgxNiw2ICYjNDM7ODE2LDMwIEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9ycV9jbG9ja190YXNrKHN0cnVjdCBycSAqcnEsIHM2NCBkZWx0YSkKICAqLwogCXM2NCBfX21heWJlX3VudXNlZCBzdGVhbCA9IDAsIGlycV9kZWx0YSA9IDA7CiAKJiM0MzsjaWZkZWYgQ09ORklHX1BBUkFWSVJUX1RJTUVfQUNDT1VOVElORwomIzQzOwlpZiAoc3RhdGljX2tleV9mYWxzZSgoJmFtcDtwYXJhdmlydF9zdGVhbF9ycV9lbmFibGVkKSkpIHsKJiM0MzsJCWludCBycV9jcHUgPSBjcHVfb2YocnEpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEEgcmVtb3RlIENQVSBjYW4gdXBkYXRlIHRoaXMgcnEgYmVmb3JlIHRoZSBvd25lciB2Q1BVCiYjNDM7CQkgKiBoYXMgcmUtZW50ZXJlZCB0aGUgZ3Vlc3QgYW5kIHJlZnJlc2hlZCBpdHMgc3RlYWx0aW1lCiYjNDM7CQkgKiBzdGF0ZS4gRG8gbm90IGNoYXJnZSB0aGF0IGVsYXBzZWQgdGltZSB0byB0aGUgY3VycmVudAomIzQzOwkJICogdGFzayB1bnRpbCBzdGVhbHRpbWUgY2FuIGJlIHNhbXBsZWQgYWZ0ZXIgdGhlIHZDUFUgaXMKJiM0MzsJCSAqIG5vIGxvbmdlciBwcmVlbXB0ZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChycV9jcHUgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdmNwdV9pc19wcmVlbXB0ZWQocnFfY3B1KSkgewomIzQzOwkJCXJxLSZndDtkZWZlcnJlZF9jbG9ja190YXNrICYjNDM7PSBkZWx0YTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAocnEtJmd0O2RlZmVycmVkX2Nsb2NrX3Rhc2spIHsKJiM0MzsJCQlkZWx0YSAmIzQzOz0gcnEtJmd0O2RlZmVycmVkX2Nsb2NrX3Rhc2s7CiYjNDM7CQkJcnEtJmd0O2RlZmVycmVkX2Nsb2NrX3Rhc2sgPSAwOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CiAjaWZkZWYgQ09ORklHX0lSUV9USU1FX0FDQ09VTlRJTkcKIAlpZiAoaXJxdGltZV9lbmFibGVkKCkpIHsKIAkJaXJxX2RlbHRhID0gaXJxX3RpbWVfcmVhZChjcHVfb2YocnEpKSAtIHJxLSZndDtwcmV2X2lycV90aW1lOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL3NjaGVkLmggYi9rZXJuZWwvc2NoZWQvc2NoZWQuaAppbmRleCBlNjU2YzcwNTliZjg2Li40ZmQwMDIyOGFmZWYwIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvc2NoZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvc2NoZWQuaApAQCAtMTMyNSw2ICYjNDM7MTMyNSw3IEBAIHN0cnVjdCBycSB7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HCiAJdTY0CQkJcHJldl9zdGVhbF90aW1lX3JxOwomIzQzOwl1NjQJCQlkZWZlcnJlZF9jbG9ja190YXNrOwogI2VuZGlmCiAKIAkvKiBjYWxjX2xvYWQgcmVsYXRlZCBmaWVsZHMgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwMgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRoaXMgUGF0Y2g6IEluaXRpYWwgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLCBhbmQgaXQmIzM5O3MgbWFraW5nIHNvbWUgY2hhbmdlcyB0byBgYXJjaC94ODYva3ZtL3g4Ni5jYCBhbmQgYGtlcm5lbC9zY2hlZC9jb3JlLmNgLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYHJlY29yZF9zdGVhbF90aW1lYCBpbiBLVk0gaXMgZ2V0dGluZyBhIGNhbGwtb3JkZXIgc2h1ZmZsZSB3aXRoIGB1c2VyX2FjY2Vzc19iZWdpbmAgYW5kIHRob3NlIHVuc2FmZSBtZW1vcnkgYWNjZXNzZXMsIGFuZCB0aGVuIHRoZSBzY2hlZHVsZXIgY29kZSwgYHVwZGF0ZV9ycV9jbG9ja190YXNrYCwgaXMgZ2V0dGluZyB0d2Vha2VkIHRvIGhhbmRsZSBkZWZlcnJpbmcgY2xvY2sgdXBkYXRlcyB3aGVuIHRoZXJlJiMzOTtzIGEgcmVtb3RlIENQVSBpbnRlcmFjdGluZyB3aXRoIHRoZSBydW5xdWV1ZS4KCk15IGluaXRpYWwgdGhvdWdodCBpcywgKnllcyosIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb3JlIGtlcm5lbCBsb2dpYyBoZXJlIOKAkyB0aGUgc2NoZWR1bGVyIGFuZCBLVk0sIGJvdGggYXJlIHByZXR0eSBjZW50cmFsIGFuZCBnZXQgaGFtbWVyZWQgcHJldHR5IGhhcmQuIFRoYXQmIzM5O3MgYSBoaWdoIHNpZ25hbC10by1ub2lzZSByYXRpby4gVGhleSYjMzk7cmUgYm90aCBoaWdobHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiAKCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB3aGF0IGZ1bmN0aW9ucyB0byB0YXJnZXQgZGlyZWN0bHkuIEZyb20gdGhlIHBhdGNoIHRleHQsIEkgd2FudCB0byBmb2N1cyBvbjoKCiogICBgcmVjb3JkX3N0ZWFsX3RpbWVgIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBJdCYjMzk7cyBgc3RhdGljYCwgYnV0IEkmIzM5O20gYmV0dGluZyBpdCYjMzk7cyBjYWxsZWQgZnJvbSBzb21ldGhpbmcgbGlrZSBga3ZtX2FyY2hfdmNwdV9sb2FkYCBvciBzb21ldGhpbmcgc2ltaWxhciwgaXQgd2lsbCBuZWVkIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KKiAgIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AgaW4gYGtlcm5lbC9zY2hlZC9jb3JlLmNgIOKAkyBhbHNvIGBzdGF0aWNgLCBidXQgY2FsbGVkIGZyb20gdGhlIGB1cGRhdGVfcnFfY2xvY2tgIGZ1bmN0aW9uLgoKVGltZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNhbGxlcnMgb2YgYHJlY29yZF9zdGVhbF90aW1lYC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhpdHRpbmcgdGhhdCBjb2RlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDE6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjb3JkX3N0ZWFsX3RpbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTM3MTg9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXJ2aWNlX2xvY2FsX3RsYl9mbHVzaF9yZXF1ZXN0cyk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMzcxOS1cbmFyY2gveDg2L2t2bS94ODYuYzozNzIwOnN0YXRpYyB2b2lkIHJlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ODYuYy0zNzIxLXtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTExMTg9c3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTEyMDgtXHRcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1NURUFMX1VQREFURSwgdmNwdSkpXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTEyMDk6XHRcdFx0cmVjb3JkX3N0ZWFsX3RpbWUodmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTEyMTAtXHRcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1BNVSwgdmNwdSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ3MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipUcmFjaW5nIHRoZSBTb3VyY2Ugb2YgYHJlY29yZF9zdGVhbF90aW1lYCoqCgpPa2F5LCBzbyBgcmVjb3JkX3N0ZWFsX3RpbWVgIGlzIGJlaW5nIGNhbGxlZCBzb21ld2hlcmUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcGF0aC4gVGhlIHRleHQgdGVsbHMgbWUgaXQgb3JpZ2luYXRlcyBmcm9tIGB2Y3B1X2VudGVyX2d1ZXN0YC4gTm93LCBgdmNwdV9lbnRlcl9ndWVzdGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0cyBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBmaWxlIGl0JiMzOTtzIGRlZmluZWQgaW4sIG1ha2luZyB0aGUgc2VhcmNoIGEgYml0IGVhc2llci4gSSBhbHNvIHNlZSB0aGF0IGl0IGlzIGNhbGxlZCBmcm9tIGB2Y3B1X3J1bmAuIEFoIGhhLCBgdmNwdV9ydW5gIG9yIG1heWJlIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAuIFRoYXQgbmFycm93cyBpdCBkb3duIGNvbnNpZGVyYWJseS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgY2FsbCBzdGFja3Mgb2YgZWl0aGVyIG9mIHRob3NlIHR3byBmdW5jdGlvbnMuIFRpbWUgdG8gbG9vayBmb3IgdGhlIG5leHQgY2x1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Y3B1X2VudGVyX2d1ZXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz05MDY9dm9pZCBrdm1fcmVxdWV1ZV9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgbnIsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTkxMi1cdCAqIGluamVjdGlvbiB3YXMgYmxvY2tlZCBieSBuZXN0ZWRfcnVuX3BlbmRpbmcuICBJbiB0aGF0IGNhc2UsIGhvd2V2ZXIsXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTEzOlx0ICogdmNwdV9lbnRlcl9ndWVzdCgpIHJlcXVlc3RzIGFuIGltbWVkaWF0ZSBleGl0LCBhbmQgdGhlIGd1ZXN0XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTE0LVx0ICogc2hvdWxkbiYjMzk7dCBwcm9jZWVkIGZhciBlbm91Z2ggdG8gbmVlZCByZWluamVjdGlvbi5cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MzY5OD1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfZmx1c2hfdGxiX2N1cnJlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0zNzA1LSAqIFNlcnZpY2UgXCYjMzQ7bG9jYWxcJiMzNDsgVExCIGZsdXNoIHJlcXVlc3RzLCB3aGljaCBhcmUgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgTU1VXG5hcmNoL3g4Ni9rdm0veDg2LmM6MzcwNjogKiBjb250ZXh0LiAgSW4gYWRkaXRpb24gdG8gdGhlIGdlbmVyaWMgZXZlbnQgaGFuZGxpbmcgaW4gdmNwdV9lbnRlcl9ndWVzdCgpLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTM3MDctICogVExCIGZsdXNoZXMgdGhhdCBhcmUgdGFyZ2V0ZWQgYXQgYW4gTU1VIGNvbnRleHQgYWxzbyBuZWVkIHRvIGJlIHNlcnZpY2VkXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwOTYwPXZvaWQgX19rdm1fc2V0X29yX2NsZWFyX2FwaWN2X2luaGliaXQoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDk4MC1cdFx0ICogS2ljayBhbGwgdkNQVXMgYmVmb3JlIHNldHRpbmcgYXBpY3ZfaW5oaWJpdF9yZWFzb25zIHRvIGF2b2lkXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTA5ODE6XHRcdCAqIGZhbHNlIHBvc2l0aXZlcyBpbiB0aGUgc2FuaXR5IGNoZWNrIFdBUk4gaW4gdmNwdV9lbnRlcl9ndWVzdCgpLlxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwOTgyLVx0XHQgKiBUaGlzIHRhc2sgd2lsbCB3YWl0IGZvciBhbGwgdkNQVXMgdG8gYWNrIHRoZSBraWNrIElSUSBiZWZvcmVcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA5ODQtXHRcdCAqIGJsb2NrIG9uIGFjcXVpcmluZyBhcGljdl91cGRhdGVfbG9jayBzbyB0aGF0IHZDUFVzIGNhbiYjMzk7dFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwOTg1Olx0XHQgKiByZWRvIHZjcHVfZW50ZXJfZ3Vlc3QoKSB3aXRob3V0IHNlZWluZyB0aGUgbmV3IGluaGliaXQgc3RhdGUuXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA5ODYtXHRcdCAqXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTExMTA0PXN0YXRpYyB2b2lkIGt2bV92Y3B1X3JlbG9hZF9hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTExMTctICovXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTExMTg6c3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ODYuYy0xMTExOS17XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTExNjk4PXN0YXRpYyBpbnQgdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTcxMi1cdFx0aWYgKGt2bV92Y3B1X3J1bm5pbmcodmNwdSkpIHtcbmFyY2gveDg2L2t2bS94ODYuYzoxMTcxMzpcdFx0XHRyID0gdmNwdV9lbnRlcl9ndWVzdCh2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy0xMTcxNC1cdFx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjM4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk15IExpbmUgb2YgUmVhc29uaW5nIHdpdGggdmNwdV9ydW4qKgoKQWxyaWdodCwgc28gdGhlIGNhbGwgZmxvdyBoZXJlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBpdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEkgc2VlIGB2Y3B1X3J1bmAgYXMgdGhlIGNvcmUgZXhlY3V0aW9uIGVudHJ5IHBvaW50IGZvciBhIHZpcnR1YWwgQ1BVLiBUaGUgaW1wb3J0YW50IHBhcnQgaXMgKmhvdyogd2UmIzM5O3JlIGdldHRpbmcgdG8gdGhhdCBmdW5jdGlvbiBjYWxsLgoKSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhhdCBgdmNwdV9ydW5gIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAuIFRoYXQgbmFtaW5nIGNvbnZlbnRpb24gaXMgYSBiaWcgaGludC4gSSBpbW1lZGlhdGVseSBrbm93IHRoZSBnZW5lcmFsIHByb2Nlc3MgZmxvdyBhbmQgd2hlcmUgbXkgYXR0ZW50aW9uIG5lZWRzIHRvIGZvY3VzIGlmIEkgZW5jb3VudGVyIGlzc3Vlcywgb3Igd2FudCB0byBsb29rIGludG8gcGVyZm9ybWFuY2UgYXNwZWN0cy4gVGhpcyBgaW9jdGxfcnVuYCBzdWdnZXN0cyB0aGF0IHRoZSBLVk0gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgYW5kIGluaXRpYXRpbmcgdGhlIHZDUFUmIzM5O3MgZXhlY3V0aW9uIGJhc2VkIG9uIGEgc3BlY2lmaWMgdXNlci1zcGFjZSByZXF1ZXN0IG9yIGNvbW1hbmQgdGhhdCBoYXMgYmVlbiBwYXNzZWQgdG8gaXQsIGxpa2VseSB0aHJvdWdoIGEgc3lzdGVtIGNhbGwgbGlrZSBgaW9jdGxgLgoKU28sIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAgaXMgYWxtb3N0IGNlcnRhaW5seSBoYW5kbGluZyBzb21lIGluaXRpYWwgc2V0dXAsIHBvdGVudGlhbGx5IGNoZWNraW5nIHRoZSByZXF1ZXN0ZWQgcnVuIHBhcmFtZXRlcnMsIG1heWJlIHNldHRpbmcgdXAgcmVnaXN0ZXJzIG9yIG90aGVyIGFyY2hpdGVjdHVyYWwgc3RhdGUsIGFuZCB0aGVuIGNhbGxpbmcgYHZjcHVfcnVuYCB0byBhY3R1YWxseSBnZXQgdGhlIHZDUFUgZXhlY3V0aW5nLiBJIGltbWVkaWF0ZWx5IGtub3cgdGhhdCBhbnkgbGF0ZW5jeSBpbnRyb2R1Y2VkIGJ5IHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcm91dGluZXMgaW4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCB3aWxsIGRpcmVjdGx5IGltcGFjdCB0aGUgc3BlZWQgd2l0aCB3aGljaCB0aGUgdkNQVSB3aWxsIGFjdHVhbGx5IGJlZ2luIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLCBzbyBhbnkgcHJvZmlsaW5nIG9yIGFuYWx5c2lzIG9mIGV4ZWN1dGlvbiBsYXRlbmNpZXMgd2lsbCBuZWVkIHRvIGZhY3RvciBpbiB0aGlzIGNydWNpYWwgaW5pdGlhbCBzZXR1cCBwaGFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Y3B1X3J1biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmM9MjQyOD1zdGF0aWMgdm9pZCBrdm1fd3JpdGVfc3lzdGVtX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBzeXN0ZW1fdGltZSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjQzMy1cdGlmICh2Y3B1LVx1MDAzZXZjcHVfaWQgPT0gMCBcdTAwMjZcdTAwMjYgIWhvc3RfaW5pdGlhdGVkKSB7XG5hcmNoL3g4Ni9rdm0veDg2LmM6MjQzNDpcdFx0aWYgKGthLVx1MDAzZWJvb3RfdmNwdV9ydW5zX29sZF9rdm1jbG9jayAhPSBvbGRfbXNyKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTI0MzUtXHRcdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX01BU1RFUkNMT0NLX1VQREFURSwgdmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMjQzNi1cbmFyY2gveDg2L2t2bS94ODYuYzoyNDM3Olx0XHRrYS1cdTAwM2Vib290X3ZjcHVfcnVuc19vbGRfa3ZtY2xvY2sgPSBvbGRfbXNyO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTI0MzgtXHR9XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTMwOTY9c3RhdGljIHZvaWQgcHZjbG9ja191cGRhdGVfdm1fZ3RvZF9jb3B5KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzExNi1cdFx0XHRcdFx1MDAyNlx1MDAyNiAha2EtXHUwMDNlYmFja3dhcmRzX3RzY19vYnNlcnZlZFxuYXJjaC94ODYva3ZtL3g4Ni5jOjMxMTc6XHRcdFx0XHRcdTAwMjZcdTAwMjYgIWthLVx1MDAzZWJvb3RfdmNwdV9ydW5zX29sZF9rdm1jbG9jaztcbmFyY2gveDg2L2t2bS94ODYuYy0zMTE4LVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz01MjI5PXN0YXRpYyB2b2lkIGt2bV9zdGVhbF90aW1lX3NldF9wcmVlbXB0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01MjM5LVx0ICogYW4gaW5zdHJ1Y3Rpb24gYm91bmRhcnkgYW5kIHdpbGwgbm90IHRyaWdnZXIgZ3Vlc3QgZW11bGF0aW9uIG9mIGFueVxuYXJjaC94ODYva3ZtL3g4Ni5jOjUyNDA6XHQgKiBraW5kIChzZWUgdmNwdV9ydW4pLiAgVmVuZG9yIHNwZWNpZmljIGNvZGUgY29udHJvbHMgKGNvbnNlcnZhdGl2ZWx5KVxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyNDEtXHQgKiB3aGVuIHRoaXMgaXMgdHJ1ZSwgZm9yIGV4YW1wbGUgYWxsb3dpbmcgdGhlIHZDUFUgdG8gYmUgbWFya2VkXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTExMTA0PXN0YXRpYyB2b2lkIGt2bV92Y3B1X3JlbG9hZF9hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTExMTMtICogQ2FsbGVkIHdpdGhpbiBrdm0tXHUwMDNlc3JjdSByZWFkIHNpZGUuXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTExMTQ6ICogUmV0dXJucyAxIHRvIGxldCB2Y3B1X3J1bigpIGNvbnRpbnVlIHRoZSBndWVzdCBleGVjdXRpb24gbG9vcCB3aXRob3V0XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTExMTUtICogZXhpdGluZyB0byB0aGUgdXNlcnNwYWNlLiAgT3RoZXJ3aXNlLCB0aGUgdmFsdWUgd2lsbCBiZSByZXR1cm5lZCB0byB0aGVcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTExMTg9c3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE0MzEtXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTE0MzI6XHRcdGV4aXRfZmFzdHBhdGggPSBrdm1feDg2X2NhbGwodmNwdV9ydW4pKHZjcHUsIHJ1bl9mbGFncyk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE0MzMtXHRcdGlmIChsaWtlbHkoZXhpdF9mYXN0cGF0aCAhPSBFWElUX0ZBU1RQQVRIX1JFRU5URVJfR1VFU1QpKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTU2OC1cbmFyY2gveDg2L2t2bS94ODYuYzoxMTU2OTpzdGF0aWMgYm9vbCBrdm1fdmNwdV9ydW5uaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ODYuYy0xMTU3MC17XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTExNjIxPUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fdmNwdV9oYXNfZXZlbnRzKTtcbmFyY2gveDg2L2t2bS94ODYuYy0xMTYyMi1cbmFyY2gveDg2L2t2bS94ODYuYzoxMTYyMzppbnQga3ZtX2FyY2hfdmNwdV9ydW5uYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE2MjQte1xuYXJjaC94ODYva3ZtL3g4Ni5jOjExNjI1Olx0cmV0dXJuIGt2bV92Y3B1X3J1bm5pbmcodmNwdSkgfHwgdmNwdS1cdTAwM2VhcmNoLnB2LnB2X3VuaGFsdGVkIHx8XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE2MjYtXHQgICAgICAga3ZtX3ZjcHVfaGFzX2V2ZW50cyh2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTE2MzA9c3RhdGljIGlubGluZSBpbnQgdmNwdV9ibG9jayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNjMzLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjExNjM0Olx0aWYgKCFrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE2MzUtXHRcdC8qXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNjYwLVx0XHQgKi9cbmFyY2gveDg2L2t2bS94ODYuYzoxMTY2MTpcdFx0aWYgKCFrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHZjcHUpKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNjYyLVx0XHRcdHJldHVybiAxO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTY5Ny0vKiBDYWxsZWQgd2l0aGluIGt2bS1cdTAwM2VzcmN1IHJlYWQgc2lkZS4gICovXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTE2OTg6c3RhdGljIGludCB2Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE2OTkte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTcxMS1cdFx0dmNwdS1cdTAwM2VhcmNoLmF0X2luc3RydWN0aW9uX2JvdW5kYXJ5ID0gZmFsc2U7XG5hcmNoL3g4Ni9rdm0veDg2LmM6MTE3MTI6XHRcdGlmIChrdm1fdmNwdV9ydW5uaW5nKHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE3MTMtXHRcdFx0ciA9IHZjcHVfZW50ZXJfZ3Vlc3QodmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTExNzg2PWZhc3RwYXRoX3QgaGFuZGxlX2Zhc3RwYXRoX2hsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNzkzLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjExNzk0Olx0aWYgKGt2bV92Y3B1X3J1bm5pbmcodmNwdSkpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE3OTUtXHRcdHJldHVybiBFWElUX0ZBU1RQQVRIX1JFRU5URVJfR1VFU1Q7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTExOTEyPXN0YXRpYyB2b2lkIGt2bV9sb2FkX2d1ZXN0X2ZwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExOTIxLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjExOTIyOi8qIFdoZW4gdmNwdV9ydW4gZW5kcywgcmVzdG9yZSB1c2VyIHNwYWNlIEZQVSBjb250ZXh0LiAqL1xuYXJjaC94ODYva3ZtL3g4Ni5jLTExOTIzLXN0YXRpYyB2b2lkIGt2bV9wdXRfZ3Vlc3RfZnB1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTE5NjI9aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTIwNjctXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTIwNjg6XHRyID0gdmNwdV9ydW4odmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTIwNjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLVk0gU3RlYWwgVGltZSBSZXBvcnRpbmcqKgoKT2theSwgc28gSSYjMzk7dmUgdHJhY2VkIHRoZSBLVk0gZXhlY3V0aW9uIHBhdGggcmVsYXRlZCB0byBzdGVhbCB0aW1lLiBTdGFydGluZyB3aXRoIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIHRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgZmlyc3QgcGxhY2UgSSBuZWVkIHRvIGxvb2suIEl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IEtWTSBjaGFuZ2UgSSBuZWVkIHRvIGFuYWx5emUgaXMgaGFwcGVuaW5nIHdpdGhpbiBgcmVjb3JkX3N0ZWFsX3RpbWVgLiBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQsIGFzIEkgc2VlIGl0LCB0aHJvdWdoIGEgY2hhaW4gb2YgY2FsbHMuIEl0IGdvZXMgZnJvbSBgdmNwdV9lbnRlcl9ndWVzdGAsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgYnkgYHZjcHVfcnVuYCwgYW5kIGZpbmFsbHkgdGhhdCBvcmlnaW5hdGVzIGZyb20gb3VyIGVudHJ5IHBvaW50LCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBUaGF0JiMzOTtzIGEgc29saWQsIGlkZW50aWZpYWJsZSwgYW5kIHRlc3RhYmxlIGV4ZWN1dGlvbiBmbG93LiBJIGNhbiBkZWZpbml0ZWx5IGNvbnN0cnVjdCBhIHRlc3QgY2FzZSB0byBpc29sYXRlIGFuZCB2ZXJpZnkgdGhpcy4KCkZ1cnRoZXJtb3JlLCBJIGFsc28gbm90ZWQgYSByZWxldmFudCBtb2RpZmljYXRpb24gaW4gYGtlcm5lbC9zY2hlZC9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AgZnVuY3Rpb24uIEkgd2lsbCBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGRlbHZlIGRlZXBlciBpbnRvIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBLVk0gYW5kIHRoZSBzY2hlZHVsZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAxOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VwZGF0ZV9ycV9jbG9ja190YXNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvY29yZS5jPTgwOD1zdHJ1Y3Qgc3RhdGljX2tleSBwYXJhdmlydF9zdGVhbF9ycV9lbmFibGVkO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtODEwLVxua2VybmVsL3NjaGVkL2NvcmUuYzo4MTE6c3RhdGljIHZvaWQgdXBkYXRlX3JxX2Nsb2NrX3Rhc2soc3RydWN0IHJxICpycSwgczY0IGRlbHRhKVxua2VybmVsL3NjaGVkL2NvcmUuYy04MTIte1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODk0PXZvaWQgdXBkYXRlX3JxX2Nsb2NrKHN0cnVjdCBycSAqcnEpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy05MTUtXG5rZXJuZWwvc2NoZWQvY29yZS5jOjkxNjpcdHVwZGF0ZV9ycV9jbG9ja190YXNrKHJxLCBkZWx0YSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTkxNy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAxOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MjcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNjaGVkdWxlciYjMzk7cyBDbG9jayBVcGRhdGUgTWVjaGFuaXNtKioKCk9rYXksIHNvIGB1cGRhdGVfcnFfY2xvY2tgIHNlZW1zIHRvIGJlIGEgcmVhbCB3b3JraG9yc2UsIGdldHRpbmcgY2FsbGVkIGZyb20gYWxsIGNvcm5lcnMgb2YgdGhlIHNjaGVkdWxlci4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2xvY2sgdXBkYXRlIG1lY2hhbmlzbSB3b3JrcyBhdCBhIGdyYW51bGFyIGxldmVsLiBJIG5vdGljZSBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIOKAkyBhIGAjaWZkZWYgQ09ORklHX1BBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AgcHJvdGVjdGluZyBhIGNoYW5nZSBpbiBgdXBkYXRlX3JxX2Nsb2NrX3Rhc2tgLiBUaGF0JiMzOTtzIGEga2V5IGNsdWUuIE15IGV4cGVydCBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGlzIHJlbGF0ZXMgdG8gdmlydHVhbGl6YXRpb24gYW5kIGhvdyB0aW1lIGlzIGhhbmRsZWQgaW4gdGhvc2UgZW52aXJvbm1lbnRzLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLgoKTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCB2ZXJpZnkgdGhlIGRlZmluaXRpb24gYW5kIHB1cnBvc2Ugb2YgYENPTkZJR19QQVJBVklSVF9USU1FX0FDQ09VTlRJTkdgLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgKndoYXQqIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gZW5hYmxlcyBvciBkaXNhYmxlcy4gVGhpcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBjb250ZXh0OiBJcyBpdCBhYm91dCBndWVzdCB0aW1lIGFjY291bnRpbmc/IFByZWNpc2UgdGltZSBzeW5jaHJvbml6YXRpb24/IE9yIHNvbWUgb3RoZXIgYXNwZWN0IG9mIHZpcnR1YWxpemVkIHRpbWluZz8gS25vd2luZyB0aGUgdW5kZXJseWluZyBwdXJwb3NlIG9mIHRoZSBjb25maWcgb3B0aW9uIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIGNvZGUgYmxvY2smIzM5O3MgYmVoYXZpb3IgYW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSB0aW1pbmcgdXBkYXRlIGNoYW5nZXMuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAxOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vS2NvbmZpZz0xMzM1PWNvbmZpZyBQQVJBVklSVFxuLS1cbmFyY2gvYXJtL0tjb25maWctMTM0Mi1cbmFyY2gvYXJtL0tjb25maWc6MTM0Mzpjb25maWcgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HXG5hcmNoL2FybS9LY29uZmlnLTEzNDQtXHRib29sIFwmIzM0O1BhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1wmIzM0O1xuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0xNjYzPWNvbmZpZyBQQVJBVklSVFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0xNjcwLVxuYXJjaC9hcm02NC9LY29uZmlnOjE2NzE6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xuYXJjaC9hcm02NC9LY29uZmlnLTE2NzItXHRib29sIFwmIzM0O1BhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1wmIzM0O1xuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9NzQ2PWNvbmZpZyBQQVJBVklSVFxuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNzU1LVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo3NTY6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy03NTctXHRib29sIFwmIzM0O1BhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1wmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnPTMzPWNvbmZpZyBQQVJBVklSVF9TUElOTE9DS1Ncbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZy0zNS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnOjM2OmNvbmZpZyBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnLTM3LVx0c2VsZWN0IFBBUkFWSVJUXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTExNDg9Y29uZmlnIFBBUkFWSVJUXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTExNTYtXG5hcmNoL3Jpc2N2L0tjb25maWc6MTE1Nzpjb25maWcgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HXG5hcmNoL3Jpc2N2L0tjb25maWctMTE1OC1cdGJvb2wgXCYjMzQ7UGFyYXZpcnR1YWwgc3RlYWwgdGltZSBhY2NvdW50aW5nXCYjMzQ7XG4tLVxuYXJjaC94ODYvS2NvbmZpZz04NTE9Y29uZmlnIFBWSFxuLS1cbmFyY2gveDg2L0tjb25maWctODU2LVxuYXJjaC94ODYvS2NvbmZpZzo4NTc6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xuYXJjaC94ODYvS2NvbmZpZy04NTgtXHRib29sIFwmIzM0O1BhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDczCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBNdXNpbmdzKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gYFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AgaGVyZS4gVGhhdCBsb29rcyBsaWtlIHRoZSBrZXkgY29uZmlnIG9wdGlvbiB3ZSBuZWVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHRoYXQgZ2V0cyBpbmNsdWRlZCBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIEl0IGp1c3QgbWFrZXMgc2Vuc2UsIHJpZ2h0PyBCdXQgaGFuZyBvbiBhIG1pbnV0ZS4uLiB3YXNuJiMzOTt0IHRoZXJlIHNvbWV0aGluZyBhYm91dCBkZXBlbmRlbmNpZXMgZm9yIHRoYXQgb24geDg2PyBJIHZhZ3VlbHkgcmVtZW1iZXIgYFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AgcmVseWluZyBvbiBgUEFSQVZJUlRgIGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBJJiMzOTtkIGJldHRlciBkb3VibGUgY2hlY2sgdGhhdCBxdWlja2x5LiBUaGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoYXQgaXMgdGhlIGBhcmNoL3g4Ni9LY29uZmlnYCBmaWxlLiBMZXQgbWUgcHVsbCB0aGF0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1MDpcdFxuIDg1MTpcdGNvbmZpZyBQVkhcbiA4NTI6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgcnVubmluZyBQVkggZ3Vlc3RzXCYjMzQ7XG4gODUzOlx0XHRoZWxwXG4gODU0Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFBWSCBlbnRyeSBwb2ludCBmb3IgZ3Vlc3QgdmlydHVhbCBtYWNoaW5lc1xuIDg1NTpcdFx0ICBhcyBzcGVjaWZpZWQgaW4gdGhlIHg4Ni9IVk0gZGlyZWN0IGJvb3QgQUJJLlxuIDg1NjpcdFxuIDg1NzpcdGNvbmZpZyBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdcbiA4NTg6XHRcdGJvb2wgXCYjMzQ7UGFyYXZpcnR1YWwgc3RlYWwgdGltZSBhY2NvdW50aW5nXCYjMzQ7XG4gODU5Olx0XHRkZXBlbmRzIG9uIFBBUkFWSVJUXG4gODYwOlx0XHRoZWxwXG4gODYxOlx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBlbmFibGUgZmluZSBncmFudWxhcml0eSB0YXNrIHN0ZWFsIHRpbWVcbiA4NjI6XHRcdCAgYWNjb3VudGluZy4gVGltZSBzcGVudCBleGVjdXRpbmcgb3RoZXIgdGFza3MgaW4gcGFyYWxsZWwgd2l0aFxuIDg2MzpcdFx0ICB0aGUgY3VycmVudCB2Q1BVIGlzIGRpc2NvdW50ZWQgZnJvbSB0aGUgdkNQVSBwb3dlci4gVG8gYWNjb3VudCBmb3JcbiA4NjQ6XHRcdCAgdGhhdCwgdGhlcmUgY2FuIGJlIGEgc21hbGwgcGVyZm9ybWFuY2UgaW1wYWN0LlxuIDg2NTpcdFxuIDg2NjpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IE4gaGVyZS5cbiA4Njc6XHRcbiA4Njg6XHRjb25maWcgUEFSQVZJUlRfQ0xPQ0tcbiA4Njk6XHRcdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMTAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGlubmVyIG1vbm9sb2d1ZToKCioqRGVwZW5kZW5jeSBDaGVjazogYFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AqKgoKQWxyaWdodCwgc28gdGhlIGRlcGVuZGVuY3kgY2hhaW4gaXMgc29tZXRoaW5nIEkmIzM5O20gaW50aW1hdGVseSBmYW1pbGlhciB3aXRoLiBUaGUgdGV4dCBwb2ludHMgb3V0IHNvbWV0aGluZyBJJiMzOTt2ZSBzZWVuIGNvdW50bGVzcyB0aW1lcyBpbiB0aGVzZSBjb25maWd1cmF0aW9uIHN5c3RlbXM6IGBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdgIHJlbGllcyBvbiBgUEFSQVZJUlRgLiBObyBzdXJwcmlzZSB0aGVyZTsgdGhhdCYjMzk7cyB0aGUgb2J2aW91cyByZWxhdGlvbnNoaXAuIFRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZywgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBhcmNoL3g4Ni9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IG51YW5jZXMgaW4gaG93IGBQQVJBVklSVGAgaXMgZGVmaW5lZCBvciB3aGF0IGl0ICpleGFjdGx5KiBlbmFibGVzIHRoYXQgYFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AgdXNlcy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBsaW5rIEkgd2FudCB0byBzb2xpZGlmeSBpbiBteSBtaW5kIGJlZm9yZSBJIHN0YXJ0IG1ha2luZyBjaGFuZ2VzIG9yIGRpYWdub3NpbmcgaXNzdWVzIHRoYXQgbWF5IGJlIHJlbGF0ZWQgdG8gdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbi4gS25vd2luZyB0aGUgcHJlY2lzZSBpbnRlcmRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBjbGVhbiBhbmQgZWZmZWN0aXZlIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAxOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQVJBVklSVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz03OTY9aWYgSFlQRVJWSVNPUl9HVUVTVFxuYXJjaC94ODYvS2NvbmZpZy03OTctXG5hcmNoL3g4Ni9LY29uZmlnOjc5ODpjb25maWcgUEFSQVZJUlRcbmFyY2gveDg2L0tjb25maWctNzk5LVx0Ym9vbCBcJiMzNDtFbmFibGUgcGFyYXZpcnR1YWxpemF0aW9uIGNvZGVcJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTgwNy1cbmFyY2gveDg2L0tjb25maWc6ODA4OmNvbmZpZyBQQVJBVklSVF9YWExcbmFyY2gveDg2L0tjb25maWctODA5LVx0Ym9vbFxuLS1cbmFyY2gveDg2L0tjb25maWctODEyLVxuYXJjaC94ODYvS2NvbmZpZzo4MTM6Y29uZmlnIFBBUkFWSVJUX1NQSU5MT0NLU1xuYXJjaC94ODYvS2NvbmZpZy04MTQtXHRib29sIFwmIzM0O1BhcmF2aXJ0dWFsaXphdGlvbiBsYXllciBmb3Igc3BpbmxvY2tzXCYjMzQ7XG4tLVxuYXJjaC94ODYvS2NvbmZpZz04NTE9Y29uZmlnIFBWSFxuLS1cbmFyY2gveDg2L0tjb25maWctODU2LVxuYXJjaC94ODYvS2NvbmZpZzo4NTc6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xuYXJjaC94ODYvS2NvbmZpZy04NTgtXHRib29sIFwmIzM0O1BhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1wmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWctODY3LVxuYXJjaC94ODYvS2NvbmZpZzo4Njg6Y29uZmlnIFBBUkFWSVJUX0NMT0NLXG5hcmNoL3g4Ni9LY29uZmlnLTg2OS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2MzAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3kgb2YgUEFSQVZJUlQgb24gSFlQRVJWSVNPUl9HVUVTVCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYFBBUkFWSVJUYCBhZ2Fpbi4gSXQgc3RyaWtlcyBtZSB0aGF0IHRoZXJlIG1pZ2h0IGJlIGFuIGluaGVyZW50IGRlcGVuZGVuY3kgb24gYEhZUEVSVklTT1JfR1VFU1RgIGhlcmUsIGRvZXNuJiMzOTt0IGl0PyBTZWVtcyBsb2dpY2FsLCBidXQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtYWtpbmcgYW55IGFzc3VtcHRpb25zLiBMZXQmIzM5O3MgZGVsdmUgaW50byB0aGUgY29kZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIHRvIHZlcmlmeSB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgcGFyYXZpcnR1YWxpemF0aW9uLCBieSBpdHMgdmVyeSBuYXR1cmUsIHJlbGllcyBvbiB0aGUgcHJlc2VuY2Ugb3IgY29uZmlndXJhdGlvbiBvZiBhIGh5cGVydmlzb3IgZ3Vlc3QgZW52aXJvbm1lbnQuIFBlcmhhcHMgdGhlcmUmIzM5O3MgYW4gY29uZGl0aW9uYWwgY29tcGlsZSB0aW1lIGRlcGVuZGVuY3kgSSBuZWVkIHRvIGNoZWNrLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoYXZlIHRvIHNheS4gTGV0JiMzOTtzIGRpdmUgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzkwOlx0XHQgIHZpc29ycy4gVGhpcyBvcHRpb24gZW5hYmxlcyBiYXNpYyBoeXBlcnZpc29yIGRldGVjdGlvbiBhbmQgcGxhdGZvcm1cbiA3OTE6XHRcdCAgc2V0dXAuXG4gNzkyOlx0XG4gNzkzOlx0XHQgIElmIHlvdSBzYXkgTiwgYWxsIG9wdGlvbnMgaW4gdGhpcyBzdWJtZW51IHdpbGwgYmUgc2tpcHBlZCBhbmRcbiA3OTQ6XHRcdCAgZGlzYWJsZWQsIGFuZCBMaW51eCBndWVzdCBzdXBwb3J0IHdvbiYjMzk7dCBiZSBidWlsdCBpbi5cbiA3OTU6XHRcbiA3OTY6XHRpZiBIWVBFUlZJU09SX0dVRVNUXG4gNzk3Olx0XG4gNzk4Olx0Y29uZmlnIFBBUkFWSVJUXG4gNzk5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBwYXJhdmlydHVhbGl6YXRpb24gY29kZVwmIzM0O1xuIDgwMDpcdFx0ZGVwZW5kcyBvbiBIQVZFX1NUQVRJQ19DQUxMXG4gODAxOlx0XHRzZWxlY3QgSEFWRV9QVl9TVEVBTF9DTE9DS19HRU5cbiA4MDI6XHRcdGhlbHBcbiA4MDM6XHRcdCAgVGhpcyBjaGFuZ2VzIHRoZSBrZXJuZWwgc28gaXQgY2FuIG1vZGlmeSBpdHNlbGYgd2hlbiBpdCBpcyBydW5cbiA4MDQ6XHRcdCAgdW5kZXIgYSBoeXBlcnZpc29yLCBwb3RlbnRpYWxseSBpbXByb3ZpbmcgcGVyZm9ybWFuY2Ugc2lnbmlmaWNhbnRseVxuIDgwNTpcdFx0ICBvdmVyIGZ1bGwgdmlydHVhbGl6YXRpb24uICBIb3dldmVyLCB3aGVuIHJ1biB3aXRob3V0IGEgaHlwZXJ2aXNvclxuIDgwNjpcdFx0ICB0aGUga2VybmVsIGlzIHRoZW9yZXRpY2FsbHkgc2xvd2VyIGFuZCBzbGlnaHRseSBsYXJnZXIuXG4gODA3Olx0XG4gODA4Olx0Y29uZmlnIFBBUkFWSVJUX1hYTFxuIDgwOTpcdFx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE2MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEFuYWx5c2lzIG9mIEtWTSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2UgYEhZUEVSVklTT1JfR1VFU1RgIGlzIGEgbXVzdC1oYXZlIGZvciB0aGUgaHlwZXJ2aXNvciBndWVzdCBmdW5jdGlvbmFsaXR5LiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgYFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AsIGBQQVJBVklSVGAsIGFuZCBgSFlQRVJWSVNPUl9HVUVTVGAgYXJlIGFsbCBhZGRlZCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIFdlIGFsc28gZGVmaW5pdGVseSBuZWVkIHRvIGluY2x1ZGUgYEtWTWAgdG8gaGFuZGxlIHRoZSBLVk0tc3BlY2lmaWMgcGFydHMsIG9idmlvdXNseS4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBzeW1ib2xzIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGNvbm5lY3RlZCBhbmQgd29ya2luZyBhcyBleHBlY3RlZC4gTGV0JiMzOTtzIHNlZS4uLiBJIHNob3VsZCBjaGVjayBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLCBvciBtYXliZSBgdmNwdV9ydW5gLCBvciBldmVuIGByZWNvcmRfc3RlYWxfdGltZWAsIGZvciBwb3RlbnRpYWwgYEZvY3VzU3ltYm9sc2AuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LiBSaWdodCwgYHJlY29yZF9zdGVhbF90aW1lYCBhcHBlYXJzIHRvIGJlIHN0YXRpYy4gSG1tLCBhbmQgYHZjcHVfZW50ZXJfZ3Vlc3RgIGlzIGFsc28gc3RhdGljLiBgdmNwdV9ydW5gIGFzIHdlbGwuIE9rYXksIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAgaXMgKm5vdCogc3RhdGljLCBzbyB0aGF0JiMzOTtzIHNvbWV0aGluZyB0byBtYWtlIGEgbm90ZSBvZi4gQW5kIGZpbmFsbHksIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AgaXMgc3RhdGljLiBJIHNlZSB0aGF0IGB1cGRhdGVfcnFfY2xvY2tgIGlzIG5vdCBzdGF0aWMsIHNvIHRoYXQgbWF5IGJlIGhlbHBmdWwgaW4gdHJhY2luZyB0aGUgZmxvdy4KCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgdXBkYXRlX3JxX2Nsb2NrX3Rhc2tgIG5vdywgYW5kIEkgYmV0IGl0JiMzOTtzIGluIGBrZXJuZWwvc2NoZWQvY29yZS5jYCDigJMgbGV0JiMzOTtzIGNvbmZpcm0gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXBkYXRlX3JxX2Nsb2NrX3Rhc2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9jb3JlLmM9ODA4PXN0cnVjdCBzdGF0aWNfa2V5IHBhcmF2aXJ0X3N0ZWFsX3JxX2VuYWJsZWQ7XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy04MTAtXG5rZXJuZWwvc2NoZWQvY29yZS5jOjgxMTpzdGF0aWMgdm9pZCB1cGRhdGVfcnFfY2xvY2tfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzNjQgZGVsdGEpXG5rZXJuZWwvc2NoZWQvY29yZS5jLTgxMi17XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz04OTQ9dm9pZCB1cGRhdGVfcnFfY2xvY2soc3RydWN0IHJxICpycSlcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTkxNS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6OTE2Olx0dXBkYXRlX3JxX2Nsb2NrX3Rhc2socnEsIGRlbHRhKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTE3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MTUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIGB1cGRhdGVfcnFfY2xvY2tgIEV4cG9ydCBTdGF0dXMqKgoKT2theSwgc28gYHVwZGF0ZV9ycV9jbG9ja2AgaXMgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIHRyYWNrIG9mLCBsaWtlbHkgaW4gYSByZWFsLXRpbWUgZW52aXJvbm1lbnQuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgbWFpbnRhaW5pbmcgc2NoZWR1bGUgY29uc2lzdGVuY3kgYW5kIGxpa2VseSBpbnRlcmFjdGluZyB3aXRoIHRoZSBzeXN0ZW0gY2xvY2suIEkgaW1tZWRpYXRlbHkgbmVlZCB0byBlc3RhYmxpc2ggaWYgaXQmIzM5O3MgZXhwb3J0ZWQuIElzIGl0IHBhcnQgb2YgdGhlIEFQSSwgb3IgaXMgaXQgaW50ZXJuYWw/IElmIGl0JiMzOTtzIGV4cG9ydGVkLCB0aGF0IHNheXMgc29tZXRoaW5nIGFib3V0IGl0cyBpbnRlbmRlZCB1c2UgYW5kIHN0YWJpbGl0eS4gSWYgaXQmIzM5O3Mgbm90IGV4cG9ydGVkLCB0aGVuIGl0IGluZGljYXRlcyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIHRoZSBzeXN0ZW0uIEkgaGF2ZSB0byBzZWUgaWYgSSBjYW4gY2FsbCBpdCBmcm9tIG15IGN1cnJlbnQgY29udGV4dCBhbmQgdGhpcyBtYXkgZGljdGF0ZSB3aGljaCBkaXJlY3Rpb24gSSB0YWtlIGZyb20gaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXBkYXRlX3JxX2Nsb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvY29yZS5jPTgwOD1zdHJ1Y3Qgc3RhdGljX2tleSBwYXJhdmlydF9zdGVhbF9ycV9lbmFibGVkO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtODEwLVxua2VybmVsL3NjaGVkL2NvcmUuYzo4MTE6c3RhdGljIHZvaWQgdXBkYXRlX3JxX2Nsb2NrX3Rhc2soc3RydWN0IHJxICpycSwgczY0IGRlbHRhKVxua2VybmVsL3NjaGVkL2NvcmUuYy04MTIte1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtODQ4LVx0XHQgKiBTaW5jZSBpcnFfdGltZSBpcyBvbmx5IHVwZGF0ZWQgb24ge3NvZnQsfWlycV9leGl0LCB3ZSBtaWdodCBydW4gaW50b1xua2VybmVsL3NjaGVkL2NvcmUuYzo4NDk6XHRcdCAqIHRoaXMgY2FzZSB3aGVuIGEgcHJldmlvdXMgdXBkYXRlX3JxX2Nsb2NrKCkgaGFwcGVuZWQgaW5zaWRlIGFcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODUwLVx0XHQgKiB7c29mdCx9SVJRIHJlZ2lvbi5cbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg5MC0jZW5kaWZcbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODkxOlx0dXBkYXRlX3JxX2Nsb2NrX3BlbHQocnEsIGRlbHRhKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODkyLX1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtODkzLVxua2VybmVsL3NjaGVkL2NvcmUuYzo4OTQ6dm9pZCB1cGRhdGVfcnFfY2xvY2soc3RydWN0IHJxICpycSlcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk1LXtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTkxNS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6OTE2Olx0dXBkYXRlX3JxX2Nsb2NrX3Rhc2socnEsIGRlbHRhKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTE3LX1cbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTk0MT1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaHJ0aWNrKHN0cnVjdCBocnRpbWVyICp0aW1lcilcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTk0OC1cdHJxX2xvY2socnEsIFx1MDAyNnJmKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6OTQ5Olx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTUwLVx0cnEtXHUwMDNlZG9ub3ItXHUwMDNlc2NoZWRfY2xhc3MtXHUwMDNldGFza190aWNrKHJxLCBycS1cdTAwM2Vkb25vciwgMSk7XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz0yMjA2PXZvaWQgZW5xdWV1ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjIwOC1cdGlmICghKGZsYWdzIFx1MDAyNiBFTlFVRVVFX05PQ0xPQ0spKVxua2VybmVsL3NjaGVkL2NvcmUuYzoyMjA5Olx0XHR1cGRhdGVfcnFfY2xvY2socnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYy0yMjEwLVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9MjIzMj1pbmxpbmUgYm9vbCBkZXF1ZXVlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy0yMjM3LVx0aWYgKCEoZmxhZ3MgXHUwMDI2IERFUVVFVUVfTk9DTE9DSykpXG5rZXJuZWwvc2NoZWQvY29yZS5jOjIyMzg6XHRcdHVwZGF0ZV9ycV9jbG9jayhycSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTIyMzktXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz0yNjQ1PXN0YXRpYyBpbnQgbWlncmF0aW9uX2NwdV9zdG9wKHZvaWQgKmRhdGEpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy0yNjk4LVx0XHRpZiAodGFza19vbl9ycV9xdWV1ZWQocCkpIHtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MjY5OTpcdFx0XHR1cGRhdGVfcnFfY2xvY2socnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYy0yNzAwLVx0XHRcdHJxID0gX19taWdyYXRlX3Rhc2socnEsIFx1MDAyNnJmLCBwLCBhcmctXHUwMDNlZGVzdF9jcHUpO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9Mzg5OT1zdGF0aWMgaW50IHR0d3VfcnVubmFibGUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZV9mbGFncylcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTM5MDYtXG5rZXJuZWwvc2NoZWQvY29yZS5jOjM5MDc6XHR1cGRhdGVfcnFfY2xvY2socnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYy0zOTA4LVx0aWYgKHAtXHUwMDNlaXNfYmxvY2tlZCkge1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9MzkyNT12b2lkIHNjaGVkX3R0d3VfcGVuZGluZyh2b2lkICphcmcpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy0zOTM1LVx0cnFfbG9ja19pcnFzYXZlKHJxLCBcdTAwMjZyZik7XG5rZXJuZWwvc2NoZWQvY29yZS5jOjM5MzY6XHR1cGRhdGVfcnFfY2xvY2socnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYy0zOTM3LVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9NDEwMT1zdGF0aWMgdm9pZCB0dHd1X3F1ZXVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNwdSwgaW50IHdha2VfZmxhZ3MpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy00MTA5LVx0cnFfbG9jayhycSwgXHUwMDI2cmYpO1xua2VybmVsL3NjaGVkL2NvcmUuYzo0MTEwOlx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNDExMS1cdHR0d3VfZG9fYWN0aXZhdGUocnEsIHAsIHdha2VfZmxhZ3MsIFx1MDAyNnJmKTtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTQ5NzU9dm9pZCB3YWtlX3VwX25ld190YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTQ5OTMtXHRycSA9IF9fdGFza19ycV9sb2NrKHAsIFx1MDAyNnJmKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NDk5NDpcdHVwZGF0ZV9ycV9jbG9jayhycSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTQ5OTUtXHRwb3N0X2luaXRfZW50aXR5X3V0aWxfYXZnKHApO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9NTcwNT11bnNpZ25lZCBsb25nIGxvbmcgdGFza19zY2hlZF9ydW50aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTU3MzQtXHRcdHByZWZldGNoX2N1cnJfZXhlY19zdGFydChwKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NTczNTpcdFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNTczNi1cdFx0cC1cdTAwM2VzY2hlZF9jbGFzcy1cdTAwM2V1cGRhdGVfY3VycihycSk7XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz01NzkzPXZvaWQgc2NoZWRfdGljayh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNTgxMi1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6NTgxMzpcdHVwZGF0ZV9ycV9jbG9jayhycSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTU4MTQtXHRod19wcmVzc3VyZSA9IGFyY2hfc2NhbGVfaHdfcHJlc3N1cmUoY3B1X29mKHJxKSk7XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz01ODgwPXN0YXRpYyB2b2lkIHNjaGVkX3RpY2tfcmVtb3RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTU5MDUtXHRcdFx0V0FSTl9PTl9PTkNFKHJxLVx1MDAzZWN1cnIgIT0gcnEtXHUwMDNlZG9ub3IpO1xua2VybmVsL3NjaGVkL2NvcmUuYzo1OTA2Olx0XHRcdHVwZGF0ZV9ycV9jbG9jayhycSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTU5MDctXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz02MjU1PXBpY2tfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBycV9mbGFncyAqcmYpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy02MzE3LVx0XHRpZiAoIWNvcmVfY2xvY2tfdXBkYXRlZCkge1xua2VybmVsL3NjaGVkL2NvcmUuYzo2MzE4Olx0XHRcdHVwZGF0ZV9ycV9jbG9jayhycS1cdTAwM2Vjb3JlKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjMxOS1cdFx0XHRjb3JlX2Nsb2NrX3VwZGF0ZWQgPSB0cnVlO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjM1MS1cdFx0XHRpZiAoIShycS1cdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgXHUwMDI2IFJRQ0ZfVVBEQVRFRCkpXG5rZXJuZWwvc2NoZWQvY29yZS5jOjYzNTI6XHRcdFx0XHR1cGRhdGVfcnFfY2xvY2socnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYy02MzUzLVx0XHRcdGdvdG8gcmVzdGFydDtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTYzODQtXHRcdGlmIChpICE9IGNwdSBcdTAwMjZcdTAwMjYgKHJxX2kgIT0gcnEtXHUwMDNlY29yZSB8fCAhY29yZV9jbG9ja191cGRhdGVkKSlcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NjM4NTpcdFx0XHR1cGRhdGVfcnFfY2xvY2socnFfaSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTYzODYtXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy02MzkxLVx0XHRcdGlmICghKHJxLVx1MDAzZWNsb2NrX3VwZGF0ZV9mbGFncyBcdTAwMjYgUlFDRl9VUERBVEVEKSlcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NjM5MjpcdFx0XHRcdHVwZGF0ZV9ycV9jbG9jayhycSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTYzOTMtXHRcdFx0Z290byByZXN0YXJ0O1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9Njg1Mz1zdGF0aWMgaW5saW5lIHZvaWQgcHJveHlfcmVhY3F1aXJlX3JxX2xvY2soc3RydWN0IHJxICpycSwgc3RydWN0IHJxX2ZsYWdzICpyZilcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTY4NTctXHRycV9yZXBpbl9sb2NrKHJxLCByZik7XG5rZXJuZWwvc2NoZWQvY29yZS5jOjY4NTg6XHR1cGRhdGVfcnFfY2xvY2socnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYy02ODU5LX1cbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTcxMjE9c3RhdGljIHZvaWQgX19zY2hlZCBub3RyYWNlIF9fc2NoZWR1bGUoaW50IHNjaGVkX21vZGUpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy03MTc0LVx0cnEtXHUwMDNlY2xvY2tfdXBkYXRlX2ZsYWdzIFx1MDAzY1x1MDAzYz0gMTtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzE3NTpcdHVwZGF0ZV9ycV9jbG9jayhycSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTcxNzYtXHRycS1cdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgPSBSUUNGX1VQREFURUQ7XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz03Njg3PXZvaWQgcnRfbXV0ZXhfc2V0cHJpbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlfdGFzaylcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTc3MDQtXHRycSA9IF9fdGFza19ycV9sb2NrKHAsIFx1MDAyNnJmKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzcwNTpcdHVwZGF0ZV9ycV9jbG9jayhycSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTc3MDYtXHQvKlxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODQ2Mz1zdGF0aWMgaW50IF9fYmFsYW5jZV9wdXNoX2NwdV9zdG9wKHZvaWQgKmFyZylcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg0NzktXHRcdHJxX2xvY2socnEsIFx1MDAyNnJmKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODQ4MDpcdFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODQ4MS1cdFx0aWYgKHRhc2tfcnEocCkgPT0gcnEgXHUwMDI2XHUwMDI2IHRhc2tfb25fcnFfcXVldWVkKHApKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODYyND12b2lkIHNldF9ycV9vZmZsaW5lKHN0cnVjdCBycSAqcnEpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy04NjI4LVxua2VybmVsL3NjaGVkL2NvcmUuYzo4NjI5Olx0XHR1cGRhdGVfcnFfY2xvY2socnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYy04NjMwLVx0XHRmb3JfZWFjaF9jbGFzcyhjbGFzcykge1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODg5Mj1pbnQgc2NoZWRfY3B1X2R5aW5nKHVuc2lnbmVkIGludCBjcHUpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy04OTAwLVx0cnFfbG9ja19pcnFzYXZlKHJxLCBcdTAwMjZyZik7XG5rZXJuZWwvc2NoZWQvY29yZS5jOjg5MDE6XHR1cGRhdGVfcnFfY2xvY2socnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYy04OTAyLVx0aWYgKHJxLVx1MDAzZW5yX3J1bm5pbmcgIT0gMSB8fCBycV9oYXNfcGlubmVkX3Rhc2tzKHJxKSkge1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9OTg3ND1zdGF0aWMgaW50IHRnX3NldF9jZnNfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0Zyxcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTk5MzQtXHRcdGlmIChjZnNfcnEtXHUwMDNldGhyb3R0bGVkKSB7XG5rZXJuZWwvc2NoZWQvY29yZS5jOjk5MzU6XHRcdFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTkzNi1cdFx0XHR1bnRocm90dGxlX2Nmc19ycShjZnNfcnEpO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9MTEyNTM9c3RydWN0IHNjaGVkX2NoYW5nZV9jdHggKnNjaGVkX2NoYW5nZV9iZWdpbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTExMjY2LVx0aWYgKCEoZmxhZ3MgXHUwMDI2IERFUVVFVUVfTk9DTE9DSykpIHtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MTEyNjc6XHRcdHVwZGF0ZV9ycV9jbG9jayhycSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTExMjY4LVx0XHRmbGFncyB8PSBERVFVRVVFX05PQ0xPQ0s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODYwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQZXJmb3JtYW5jZSBCb3R0bGVuZWNrcyBpbiBLVk0qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZGlnIGludG8gYHVwZGF0ZV9ycV9jbG9ja2AsIGJ1dCBjb25zaWRlcmluZyBpdHMgdWJpcXVpdG91cyBuYXR1cmUsIGl0JiMzOTtzIHByb2JhYmx5ICphbHJlYWR5KiBvcHRpbWl6ZWQgYXMgbXVjaCBhcyBwb3NzaWJsZS4gSXQmIzM5O3MgdG9vIGRpc3RyaWJ1dGVkIHRvIGJlIGEgc2luZ2xlLCBmb2N1c2VkIGFyZWEgZm9yIGltcHJvdmVtZW50LCBzbyBsZXQmIzM5O3MgcnVsZSBpdCBvdXQgZm9yIG5vdy4gV2hlcmUgc2hvdWxkIEkgZm9jdXM/CgpUaGUgcmVhbCBlbnRyeSBwb2ludCBmb3IgdGhlIEtWTSB2Q1BVIHJ1biBpcyBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBUaGF04oCZcyBhIGtleSBmdW5jdGlvbjsgaXQmIzM5O3MgYSBob3QgcGF0aCwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gZHJpbGwgZG93biB0aGVyZSBhbmQgc2VlIHdoYXTigJlzIGhhcHBlbmluZy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHBvdGVudGlhbCBmdW5jdGlvbnMsIHRob3VnaC4gCgpJIHNlZSBgcmVjb3JkX3N0ZWFsX3RpbWVgLCB3aGljaCBpcyBzdGF0aWMsIHNvIEkgY2FuJiMzOTt0IGltbWVkaWF0ZWx5IHBvaW50IHRvIGl0IGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24uIEhvd2V2ZXIsIGlmIHRoYXQgaXMgaW5saW5lZCBpbnRvIG90aGVyIGZ1bmN0aW9ucywgaXQgY291bGQgYWxzbyBiZSBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgd2l0aG91dCBiZWluZyBvYnZpb3VzLiBTbywgdGhlIG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgYHJlY29yZF9zdGVhbF90aW1lYCBpcyBiZWluZyBpbmxpbmVkLiBUaGF0IHdpbGwgaW1wYWN0IG15IHBsYW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlY29yZF9zdGVhbF90aW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz0zNzE4PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2VydmljZV9sb2NhbF90bGJfZmx1c2hfcmVxdWVzdHMpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTM3MTktXG5hcmNoL3g4Ni9rdm0veDg2LmM6MzcyMDpzdGF0aWMgdm9pZCByZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzcyMS17XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTExMTE4PXN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMjA4LVx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpKVxuYXJjaC94ODYva3ZtL3g4Ni5jOjExMjA5Olx0XHRcdHJlY29yZF9zdGVhbF90aW1lKHZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTExMjEwLVx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9QTVUsIHZjcHUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU1OQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDIwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBTdGVhbCBUaW1lIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gc3RlYWwgdGltZSBpbiBLVk0uIEl0JiMzOTtzIGEgYml0IHRyaWNreSBiZWNhdXNlIHRoZSBjb2RlIGlzbiYjMzk7dCBleHBsaWNpdGx5IG1hcmtlZCBmb3IgaW5saW5pbmcsIGJ1dCBpdCYjMzk7cyBvbmx5IGNhbGxlZCBvbmNlIGluIGB2Y3B1X2VudGVyX2d1ZXN0YC4gVGhlIGNvbXBpbGVyICptaWdodCogaW5saW5lIGl0LCBzbyB0aGF0JiMzOTtzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGRpZyBpbnRvIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIGJlY2F1c2UgdGhhdCYjMzk7cyB0aGUgaW9jdGwgaGFuZGxlciwgYW5kIHVzdWFsbHkgYSBnb29kIGVudHJ5IHBvaW50IGZvciB0aGlzIHNvcnQgb2YgdGhpbmcuIEJ1dCwgaXQmIzM5O3MgYSBob3QgcGF0aCwgc28gSSBzaG91bGQgYmUgY2FyZWZ1bCBub3QgdG8gZ2V0IGJvZ2dlZCBkb3duIHRoZXJlIGFuZCBtaXNzIHNvbWV0aGluZy4gQXJlIHRoZXJlIG90aGVyIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCwgb3RoZXIgZW50cnkgcG9pbnRzPwoKSSBzZWUgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYHJlY29yZF9zdGVhbF90aW1lYCBhbmQgYHVwZGF0ZV9ycV9jbG9ja190YXNrYC4gTm93LCBib3RoIG9mICp0aG9zZSogYXJlIGNhbGxlZCBmcm9tICp2ZXJ5KiBob3QgcGF0aHM6IGB2Y3B1X3J1bmAgYW5kIGB1cGRhdGVfcnFfY2xvY2tgLCByZXNwZWN0aXZlbHkuIElmIEkgZG9uJiMzOTt0IGdpdmUgU3l6a2FsbGVyIGEgYEZvY3VzU3ltYm9sc2AgbGlzdCwgaXQmIzM5O3MganVzdCBnb2luZyB0byB1c2UgY292ZXJhZ2UgZGF0YSBmcm9tIHRoZSBlbnRpcmUga2VybmVsLCB3aGljaCBpcyBnb2luZyB0byBiZSBpbmNyZWRpYmx5IG5vaXN5LiBJIG5lZWQgdG8gYmUgbW9yZSBwcmVjaXNlIGluIG15IGFuYWx5c2lzLgoKQWgsIEkgc2VlIGl0ISBgcmVjb3JkX3N0ZWFsX3RpbWVgIGlzIGNhbGxlZCB3aGVuIGBLVk1fUkVRX1NURUFMX1VQREFURWAgaXMgc2V0LiBOb3cgdGhlIGtleSBxdWVzdGlvbiBpczogd2hlbiBhbmQgd2hlcmUgaXMgYEtWTV9SRVFfU1RFQUxfVVBEQVRFYCBhY3R1YWxseSAqc2V0Kj8gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMuIFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgbGluayBJJiMzOTttIG1pc3NpbmcgYXQgdGhlIG1vbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX1JFUV9TVEVBTF9VUERBVEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTM4ODQ9aW50IGt2bV9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTQxNjQtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NDE2NTpcdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1NURUFMX1VQREFURSwgdmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNDE2Ni1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTE0OT12b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyMjUtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTIyNjpcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTUyMjctfVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMTExOD1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTIwNy1cdFx0fVxuYXJjaC94ODYva3ZtL3g4Ni5jOjExMjA4Olx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMjA5LVx0XHRcdHJlY29yZF9zdGVhbF90aW1lKHZjcHUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU3NAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEhvdHNwb3RzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB3aXRoaW4gdGhlIEtWTSBoeXBlcnZpc29yLCBhbmQgSSYjMzk7dmUgbmFycm93ZWQgZG93biBhIGNvdXBsZSBvZiBrZXkgYXJlYXMuIEkgc2VlIHRoZSBjb2RlIGlzIHRvdWNoaW5nIGBrdm1fc2V0X21zcl9jb21tb25gIGFuZCBga3ZtX2FyY2hfdmNwdV9sb2FkYC4gTm93LCBJJiMzOTttIGxlYW5pbmcgdG93YXJkIGZvY3VzaW5nIG9uIGBrdm1fc2V0X21zcl9jb21tb25gIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBkZWFscyB3aXRoIE1TUiB3cml0ZXMg4oCTIHdoaWNoIGFyZSBwcmV0dHkgc2lnbmlmaWNhbnQgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGUgZ3Vlc3QgaXRzZWxmLiBUaGF0IGZlZWxzIGxpa2UgYSBsaWtlbHkgc3BvdCBmb3Igc29tZSBpbnRlcmVzdGluZyBzdHVmZiB0byBiZSBoYXBwZW5pbmcuIEJ1dCwgd2FpdCwgYGt2bV9hcmNoX3ZjcHVfbG9hZGAgZ2V0cyBjYWxsZWQgb24gKmV2ZXJ5KiBjb250ZXh0IHN3aXRjaCB0byB0aGUgdkNQVSB0aHJlYWQuLi4gc28gYHJlY29yZF9zdGVhbF90aW1lYCBpcyBwcm9iYWJseSBjYWxsZWQgYSB0b24gaW4gdGhhdCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhbm90aGVyIHBvdGVudGlhbCBhcmVhIG9mIGludmVzdGlnYXRpb24uCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gYGt2bV9zZXRfbXNyX2NvbW1vbmAuIEl0JiMzOTtzIGEgcHJldHR5IGhlZnR5IGZ1bmN0aW9uLCBzbyBkaXZpbmcgc3RyYWlnaHQgaW4gbWlnaHQgYmUgb3ZlcndoZWxtaW5nLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgc3BlY2lmaWMgTVNSIHdyaXRlcyB0aGF0IHRyaWdnZXIgYEtWTV9SRVFfU1RFQUxfVVBEQVRFYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBhY3Rpb24gaXMsIGFuZCB3aGVyZSBJJiMzOTttIGxpa2VseSB0byBmaW5kIHNvbWV0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX1JFUV9TVEVBTF9VUERBVEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTM4ODQ9aW50IGt2bV9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTQxNjQtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NDE2NTpcdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1NURUFMX1VQREFURSwgdmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNDE2Ni1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTE0OT12b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyMjUtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTIyNjpcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTUyMjctfVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMTExOD1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTIwNy1cdFx0fVxuYXJjaC94ODYva3ZtL3g4Ni5jOjExMjA4Olx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMjA5LVx0XHRcdHJlY29yZF9zdGVhbF90aW1lKHZjcHUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ0NgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGt2bV9zZXRfbXNyX2NvbW1vbmAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBga3ZtX3NldF9tc3JfY29tbW9uYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBhcm91bmQgbGluZSA0MTY1LiBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBiYXNlZCBvbiBteSBwcmV2aW91cyBhbmFseXNpcyBhbmQgdGhlIGxpa2VseSBhcmVhIG9mIGludGVyZXN0LiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIGJlaGF2aW9yIGluIHRoaXMgcmVnaW9uLiBUaGlzIHdpbGwgaGVscCB3aXRoIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MTUwOlx0XHRjYXNlIE1TUl9LVk1fU1RFQUxfVElNRTpcbjQxNTE6XHRcdFx0aWYgKCFndWVzdF9wdl9oYXModmNwdSwgS1ZNX0ZFQVRVUkVfU1RFQUxfVElNRSkpXG40MTUyOlx0XHRcdFx0cmV0dXJuIEtWTV9NU1JfUkVUX1VOU1VQUE9SVEVEO1xuNDE1MzpcdFxuNDE1NDpcdFx0XHRpZiAodW5saWtlbHkoIXNjaGVkX2luZm9fb24oKSkpXG40MTU1Olx0XHRcdFx0cmV0dXJuIDE7XG40MTU2Olx0XG40MTU3Olx0XHRcdGlmIChkYXRhIFx1MDAyNiBLVk1fU1RFQUxfUkVTRVJWRURfTUFTSylcbjQxNTg6XHRcdFx0XHRyZXR1cm4gMTtcbjQxNTk6XHRcbjQxNjA6XHRcdFx0dmNwdS1cdTAwM2VhcmNoLnN0Lm1zcl92YWwgPSBkYXRhO1xuNDE2MTpcdFxuNDE2MjpcdFx0XHRpZiAoIShkYXRhIFx1MDAyNiBLVk1fTVNSX0VOQUJMRUQpKVxuNDE2MzpcdFx0XHRcdGJyZWFrO1xuNDE2NDpcdFxuNDE2NTpcdFx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfU1RFQUxfVVBEQVRFLCB2Y3B1KTtcbjQxNjY6XHRcbjQxNjc6XHRcdFx0YnJlYWs7XG40MTY4Olx0XHRjYXNlIE1TUl9LVk1fUFZfRU9JX0VOOlxuNDE2OTpcdFx0XHRpZiAoIWd1ZXN0X3B2X2hhcyh2Y3B1LCBLVk1fRkVBVFVSRV9QVl9FT0kpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk1OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZvciBmdXp6aW5nIHB1cnBvc2VzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgTVNSX0tWTV9TVEVBTF9USU1FYCBpcyBhIGtleSBhcmVhIG9mIGludGVyZXN0IGJlY2F1c2UgdGhlIGd1ZXN0IGhhcyB3cml0ZSBhY2Nlc3MgdG8gaXQsIGFuZCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYSBwcmltZSB0YXJnZXQuIFRoYXQmIzM5O3MgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgcmlwZSBmb3IgZnV6emluZy4gQWxzbywgdGhlIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AgY2hhbmdlLCB3aGljaCBpbnRyb2R1Y2VzIGRlZmVycmVkIGNsb2NrIHVwZGF0ZXMgYmFzZWQgb24gcmVtb3RlIENQVSB1cGRhdGVzIHRvIHRoZSBydW5xdWV1ZSAocnEpIHdoaWxlIHRoZSBvd25lciB2Q1BVIGlzIHByZWVtcHRlZCBpcyBhbHNvIGEgcG9pbnQgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBzb2xpZGlmeSB0aGUgc3RyYXRlZ3kuIE15IGluaXRpYWwgc3VtbWFyeSBvZiB0aGUgZnV6emluZyB0YXJnZXQgaXM6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIGJvdGggY2hhbmdlcyBzZWVtIGxpa2UgZ29vZCBjYW5kaWRhdGVzLgoqICAgKipGb2N1c1N5bWJvbDoqKiBJIHRoaW5rIHRoZSBiZXN0IHN5bWJvbCB0byBmb2N1cyBvbiBpcyBga3ZtX3NldF9tc3JfY29tbW9uYC4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCBpcyB0ZW1wdGluZyBhcyBhIG1haW4gZW50cnkgcG9pbnQsIGJ1dCBpdCBtaWdodCBiZSB0b28gaG90IGFuZCBnZW5lcmFsaXplZCwgc28gSSYjMzk7bGwgc3RheSBmb2N1c2VkIG9uIHRoZSBzcGVjaWZpYyBNU1Igc2V0dGluZyBmdW5jdGlvbi4KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBXZSBkZWZpbml0ZWx5IG5lZWQgYFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AsIGBQQVJBVklSVGAsIGBIWVBFUlZJU09SX0dVRVNUYCwgYW5kIG9mIGNvdXJzZSBgS1ZNYCB0byBlbmFibGUgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHkuCgpJJiMzOTttIHRoaW5raW5nIGEgYml0IG1vcmUgYWJvdXQgYHVwZGF0ZV9ycV9jbG9ja190YXNrYC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgdXBkYXRlX3JxX2Nsb2NrYCwgYW5kIHRoYXQgYHVwZGF0ZV9ycV9jbG9ja2AgaXMgY2FsbGVkIGZyb20gc3RhbmRhcmQgc2NoZWR1bGVyIGZ1bmN0aW9ucyBsaWtlIGB0YXNrX3RpY2tgLCBgZW5xdWV1ZV90YXNrYCwgYW5kIGBkZXF1ZXVlX3Rhc2tgLCBtZWFucyBpdCYjMzk7cyBhIHZlcnkgZ2VuZXJpYyBmdW5jdGlvbi4gU28sIGBrdm1fc2V0X21zcl9jb21tb25gIGlzIHRoZSBiZXR0ZXIgdGFyZ2V0LgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgY29uZmlndXJhdGlvbiBjaGVjay4gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgbWV0LgoKKiAgIGBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdgIGRlcGVuZHMgb24gYFBBUkFWSVJUYC4KKiAgIGBQQVJBVklSVGAgZGVwZW5kcyBvbiBgSFlQRVJWSVNPUl9HVUVTVGAuCgpUaGVyZWZvcmUsIHdlIGhhdmUgdG8gZW5hYmxlIGFsbCB0aHJlZTogYFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AsIGBQQVJBVklSVGAsIGBIWVBFUlZJU09SX0dVRVNUYC4gVGhlIGBLVk1gIGNvbmZpZyBpcyBhbHNvIG5lY2Vzc2FyeSwgc28gd2UgY2FuIHRlc3QgdGhlIEtWTSBmdW5jdGlvbmFsaXR5LiBEb25lLiBOb3csIGxldCYjMzk7cyBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTA0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gU2NoZWR1bGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIEtWTSBzY2hlZHVsaW5nLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZW5hYmxpbmcgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBmaXJzdCwgd2hpY2ggaXMgc3RhbmRhcmQgcHJvY2VkdXJlLiBTbywgSSBzZWUgd2UmIzM5O3JlIGV4cGxpY2l0bHkgZW5hYmxpbmcgYFZJUlRVQUxJWkFUSU9OYCBhbmQgYEtWTWAsIHdoaWNoIGlzIGV4cGVjdGVkIHNpbmNlIEtWTSByZWxpZXMgb24gdmlydHVhbGl6YXRpb24uIFRoZW4gd2UgaGF2ZSBgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HYCwgYFBBUkFWSVJUYCwgYW5kIGBIWVBFUlZJU09SX0dVRVNUYC4gVGhlc2UgYXJlIGFsbCByZWxhdGVkIHRvIHBhcmF2aXJ0dWFsaXphdGlvbiBhbmQgZ3Vlc3Qgc3VwcG9ydCB3aXRoaW4gYSBoeXBlcnZpc29yLCBzbyB0aGV5IG1ha2Ugc2Vuc2UgaW4gdGhpcyBjb250ZXh0LgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG1lYXQgb2YgdGhlIGNoYW5nZS4gSXQmIzM5O3MgbW9kaWZ5aW5nIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AsIGFuZCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9uIHRoZSBzY2hlZHVsZXIuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgd2hlcmUgYHVwZGF0ZV9ycV9jbG9ja190YXNrYCBpcyBjYWxsZWQgZnJvbS4gUmlnaHQsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGB1cGRhdGVfcnFfY2xvY2tgLCBzbyB0aGF0IG1ha2VzIHNlbnNlLiBUaGUga2V5IHBvaW50IG9mIHRoZSBwYXRjaCBpcyBkZWZlcnJpbmcgdGhlIGNsb2NrIHRhc2sgdXBkYXRlIGlmIGBycV9jcHUgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSAmYW1wOyZhbXA7IHZjcHVfaXNfcHJlZW1wdGVkKHJxX2NwdSlgLiBUaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc2NoZWR1bGVyOyB3ZSYjMzk7cmUgZXNzZW50aWFsbHkgZGVsYXlpbmcgdGhlIHVwZGF0ZSB1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgcnVubmluZyBxdWV1ZSBDUFUgZG9lc24mIzM5O3QgbWF0Y2ggdGhlIGN1cnJlbnQgcmF3IFNNUCBwcm9jZXNzb3IgSUQsICphbmQqIHRoZSB2Q1BVIGlzIHByZWVtcHRlZC4gU28gdGhpcyBsaWtlbHkgaGFzIGltcGxpY2F0aW9ucyBvbiB0aW1pbmcgYWNjdXJhY3kgYW5kIHBvdGVudGlhbGx5IG9uIGNvbnRleHQgc3dpdGNoZXMuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gd2h5IHRoaXMgZGVmZXJyYWwgaXMgbmVlZGVkLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBgdmNwdV9pc19wcmVlbXB0ZWRgIGlzIGFjdHVhbGx5IGRvaW5nLiBJcyBpdCBjaGVja2luZyBzb21lIHN0YXRlIGZsYWcsIG9yIGlzIGl0IGEgbW9yZSBpbnZvbHZlZCBjYWxjdWxhdGlvbj8gS25vd2luZyB0aGF0IHdpbGwgYmUgY3J1Y2lhbCB0byBmdWxseSBncmFzcCB0aGUgcGVyZm9ybWFuY2UgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Y3B1X2lzX3ByZWVtcHRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgtMjAtICovXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmg6MjE6I2RlZmluZSB2Y3B1X2lzX3ByZWVtcHRlZCB2Y3B1X2lzX3ByZWVtcHRlZFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zcGlubG9jay5oOjIyOnN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X2lzX3ByZWVtcHRlZChpbnQgY3B1KVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zcGlubG9jay5oLTIzLXtcbi0tXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9xc3BpbmxvY2suaD0xMj1zdGF0aWMgaW5saW5lIGJvb2wgdmlydF9zcGluX2xvY2soc3RydWN0IHFzcGlubG9jayAqbG9jaylcbi0tXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9xc3BpbmxvY2suaC00MS0gKi9cbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3FzcGlubG9jay5oOjQyOiNkZWZpbmUgdmNwdV9pc19wcmVlbXB0ZWQoY3B1KVx0XHRcdFx0XHRcdFx0XFxcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3FzcGlubG9jay5oLTQzLSh7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYXJhdmlydC5oPTEyMD1zdGF0aWMgaW5saW5lIGJvb2wgdmNwdV9pc19kaXNwYXRjaGVkKGludCB2Y3B1KVxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYXJhdmlydC5oLTEyNS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYXJhdmlydC5oOjEyNjojZGVmaW5lIHZjcHVfaXNfcHJlZW1wdGVkIHZjcHVfaXNfcHJlZW1wdGVkXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFyYXZpcnQuaDoxMjc6c3RhdGljIGlubGluZSBib29sIHZjcHVfaXNfcHJlZW1wdGVkKGludCBjcHUpXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFyYXZpcnQuaC0xMjgte1xuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYXJhdmlydC5oLTE2My1cdFx0LypcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYXJhdmlydC5oOjE2NDpcdFx0ICogVGhlIHJlc3VsdCBvZiB2Y3B1X2lzX3ByZWVtcHRlZCgpIGlzIHVzZWQgaW4gYVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgtMTY1LVx0XHQgKiBzcGVjdWxhdGl2ZSB3YXksIGFuZCBpcyBhbHdheXMgc3ViamVjdCB0byBpbnZhbGlkYXRpb25cbi0tXG5hcmNoL3Bvd2VycGMvbGliL3FzcGlubG9jay5jPTM1ND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgcHJvcGFnYXRlX3NsZWVweShzdHJ1Y3QgcW5vZGUgKm5vZGUsIHUzMiB2YWwsIGJvb2wgcGFyYXZpcnQpXG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYy0zNzEtXHRvd25lciA9IGdldF9vd25lcl9jcHUodmFsKTtcbmFyY2gvcG93ZXJwYy9saWIvcXNwaW5sb2NrLmM6MzcyOlx0aWYgKHZjcHVfaXNfcHJlZW1wdGVkKG93bmVyKSlcbmFyY2gvcG93ZXJwYy9saWIvcXNwaW5sb2NrLmMtMzczLVx0XHRuZXh0LVx1MDAzZXNsZWVweSA9IDE7XG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYz0zNzc9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHlpZWxkX3RvX3ByZXYoc3RydWN0IHFzcGlubG9jayAqbG9jaywgc3RydWN0IHFub2RlICpub2RlLCBpbnQgcHJldl9jcHUsIGJvb2wgcGFyYXZpcnQpXG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYy0zOTEtXHQgKi9cbmFyY2gvcG93ZXJwYy9saWIvcXNwaW5sb2NrLmM6MzkyOlx0aWYgKG5vZGUtXHUwMDNlc2xlZXB5IHx8IHZjcHVfaXNfcHJlZW1wdGVkKHByZXZfY3B1KSkge1xuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYy0zOTMtXHRcdHUzMiB2YWwgPSBSRUFEX09OQ0UobG9jay1cdTAwM2V2YWwpO1xuLS1cbmFyY2gvcG93ZXJwYy9saWIvcXNwaW5sb2NrLmMtNDAzLVx0XHRcdFx0ICovXG5hcmNoL3Bvd2VycGMvbGliL3FzcGlubG9jay5jOjQwNDpcdFx0XHRcdGlmICh2Y3B1X2lzX3ByZWVtcHRlZChnZXRfb3duZXJfY3B1KHZhbCkpKVxuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYy00MDUtXHRcdFx0XHRcdG5vZGUtXHUwMDNlbmV4dC1cdTAwM2VzbGVlcHkgPSAxO1xuLS1cbmFyY2gvcG93ZXJwYy9saWIvcXNwaW5sb2NrLmM9NTI3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBxdWV1ZWRfc3Bpbl9sb2NrX21jc19xdWV1ZShzdHJ1Y3QgcXNwaW5sb2NrICpsb2NrLCBib29sIHBhcmF2aXJ0KVxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcXNwaW5sb2NrLmMtNjkxLVx0XHRcdGFzbSB2b2xhdGlsZShcJiMzNDttaXNvXCYjMzQ7IDo6OiBcJiMzNDttZW1vcnlcJiMzNDspO1xuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYzo2OTI6XHRcdGlmICh2Y3B1X2lzX3ByZWVtcHRlZChuZXh0X2NwdSkpXG5hcmNoL3Bvd2VycGMvbGliL3FzcGlubG9jay5jLTY5My1cdFx0XHRwcm9kX2NwdShuZXh0X2NwdSk7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmg9Mzc9ZXh0ZXJuIGludCBzcGluX3JldHJ5O1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgtMzgtXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaDozOTpib29sIGFyY2hfdmNwdV9pc19wcmVlbXB0ZWQoaW50IGNwdSk7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaC00MC1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9zcGlubG9jay5oOjQxOiNkZWZpbmUgdmNwdV9pc19wcmVlbXB0ZWQgYXJjaF92Y3B1X2lzX3ByZWVtcHRlZFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgtNDItXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzb3IuYz02OT12b2lkIG5vdHJhY2Ugc3RvcF9tYWNoaW5lX3lpZWxkKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMtNzgtXHRcdFx0cmV0dXJuO1xuYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzb3IuYzo3OTpcdFx0aWYgKGFyY2hfdmNwdV9pc19wcmVlbXB0ZWQoY3B1KSlcbmFyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMtODAtXHRcdFx0c21wX3lpZWxkX2NwdShjcHUpO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvc21wLmM9Mzk0PXZvaWQgc2NoZWR1bGVfbWNja19oYW5kbGVyKHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYy0zOTgtXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jOjM5OTpib29sIG5vdHJhY2UgYXJjaF92Y3B1X2lzX3ByZWVtcHRlZChpbnQgY3B1KVxuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYy00MDAte1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvc21wLmMtNDA2LX1cbmFyY2gvczM5MC9rZXJuZWwvc21wLmM6NDA3OkVYUE9SVF9TWU1CT0woYXJjaF92Y3B1X2lzX3ByZWVtcHRlZCk7XG5hcmNoL3MzOTAva2VybmVsL3NtcC5jLTQwOC1cbi0tXG5hcmNoL3MzOTAva3ZtL2RpYWcuYz0xODY9c3RhdGljIGludCBfX2RpYWdfdGltZV9zbGljZV9lbmRfZGlyZWN0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vZGlhZy5jLTIxMC1cdFx0LyogdGFyZ2V0IGhvc3QgQ1BVIGFscmVhZHkgcnVubmluZyAqL1xuYXJjaC9zMzkwL2t2bS9kaWFnLmM6MjExOlx0XHRpZiAoIXZjcHVfaXNfcHJlZW1wdGVkKHRjcHVfY3B1KSlcbmFyY2gvczM5MC9rdm0vZGlhZy5jLTIxMi1cdFx0XHRnb3RvIG5vX3lpZWxkO1xuLS1cbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYz0xNTY9c3RhdGljIGlubGluZSB2b2lkIGFyY2hfc3Bpbl9sb2NrX3F1ZXVlZChhcmNoX3NwaW5sb2NrX3QgKmxwKVxuLS1cbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYy0yMDAtXHRvd25lciA9IGFyY2hfc3Bpbl95aWVsZF90YXJnZXQob2xkLCBub2RlKTtcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYzoyMDE6XHRpZiAob3duZXIgXHUwMDI2XHUwMDI2IGFyY2hfdmNwdV9pc19wcmVlbXB0ZWQob3duZXIgLSAxKSlcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYy0yMDItXHRcdHNtcF95aWVsZF9jcHUob3duZXIgLSAxKTtcbi0tXG5hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMtMjEyLVx0XHRcdG93bmVyID0gYXJjaF9zcGluX3lpZWxkX3RhcmdldChvbGQsIG5vZGUpO1xuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jOjIxMzpcdFx0XHRpZiAob3duZXIgXHUwMDI2XHUwMDI2IGFyY2hfdmNwdV9pc19wcmVlbXB0ZWQob3duZXIgLSAxKSlcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYy0yMTQtXHRcdFx0XHRzbXBfeWllbGRfY3B1KG93bmVyIC0gMSk7XG4tLVxuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jLTIzMy1cdFx0Y291bnQgPSBzcGluX3JldHJ5O1xuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jOjIzNDpcdFx0aWYgKCFtYWNoaW5lX2lzX2xwYXIoKSB8fCBhcmNoX3ZjcHVfaXNfcHJlZW1wdGVkKG93bmVyIC0gMSkpXG5hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMtMjM1LVx0XHRcdHNtcF95aWVsZF9jcHUob3duZXIgLSAxKTtcbi0tXG5hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmM9MjUwPXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3NwaW5fbG9ja19jbGFzc2ljKGFyY2hfc3BpbmxvY2tfdCAqbHApXG4tLVxuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jLTI1Ny1cdG93bmVyID0gYXJjaF9zcGluX3lpZWxkX3RhcmdldChSRUFEX09OQ0UobHAtXHUwMDNlbG9jayksIE5VTEwpO1xuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jOjI1ODpcdGlmIChvd25lciBcdTAwMjZcdTAwMjYgYXJjaF92Y3B1X2lzX3ByZWVtcHRlZChvd25lciAtIDEpKVxuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jLTI1OS1cdFx0c21wX3lpZWxkX2NwdShvd25lciAtIDEpO1xuLS1cbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYy0yNzYtXHRcdGNvdW50ID0gc3Bpbl9yZXRyeTtcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYzoyNzc6XHRcdGlmICghbWFjaGluZV9pc19scGFyKCkgfHwgYXJjaF92Y3B1X2lzX3ByZWVtcHRlZChvd25lciAtIDEpKVxuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jLTI3OC1cdFx0XHRzbXBfeWllbGRfY3B1KG93bmVyIC0gMSk7XG4tLVxuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jPTM1Mj12b2lkIGFyY2hfc3Bpbl9yZWxheChhcmNoX3NwaW5sb2NrX3QgKmxwKVxuLS1cbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYy0zNTgtXHRcdHJldHVybjtcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYzozNTk6XHRpZiAobWFjaGluZV9pc19scGFyKCkgXHUwMDI2XHUwMDI2ICFhcmNoX3ZjcHVfaXNfcHJlZW1wdGVkKGNwdSAtIDEpKVxuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jLTM2MC1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jPTI2PXN0YXRpYyB2b2lkIGh2X3Fsb2NrX3dhaXQodTggKmJ5dGUsIHU4IHZhbClcbi0tXG5hcmNoL3g4Ni9oeXBlcnYvaHZfc3BpbmxvY2suYy02Mi0gKi9cbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jOjYzOl9fdmlzaWJsZSBib29sIGh2X3ZjcHVfaXNfcHJlZW1wdGVkKGludCB2Y3B1KVxuYXJjaC94ODYvaHlwZXJ2L2h2X3NwaW5sb2NrLmMtNjQte1xuLS1cbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jLTY3LVxuYXJjaC94ODYvaHlwZXJ2L2h2X3NwaW5sb2NrLmM6Njg6UFZfQ0FMTEVFX1NBVkVfUkVHU19USFVOSyhodl92Y3B1X2lzX3ByZWVtcHRlZCk7XG5hcmNoL3g4Ni9oeXBlcnYvaHZfc3BpbmxvY2suYy02OS1cbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jPTcwPXZvaWQgX19pbml0IGh2X2luaXRfc3BpbmxvY2tzKHZvaWQpXG4tLVxuYXJjaC94ODYvaHlwZXJ2L2h2X3NwaW5sb2NrLmMtODQtXHRwdl9vcHNfbG9jay5raWNrID0gaHZfcWxvY2tfa2ljaztcbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jOjg1Olx0cHZfb3BzX2xvY2sudmNwdV9pc19wcmVlbXB0ZWQgPSBQVl9DQUxMRUVfU0FWRShodl92Y3B1X2lzX3ByZWVtcHRlZCk7XG5hcmNoL3g4Ni9oeXBlcnYvaHZfc3BpbmxvY2suYy04Ni19XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0yMjgtLy8gZnJlZTogd2FzICNkZWZpbmUgWDg2X0ZFQVRVUkVfUFZVTkxPQ0sgICAgICAgICAgICAgICAoIDgqMzImIzQzOzIwKSAvKiBQViB1bmxvY2sgZnVuY3Rpb24gKi9cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmg6MjI5OiNkZWZpbmUgWDg2X0ZFQVRVUkVfVkNQVVBSRUVNUFRcdFx0KCA4KjMyJiM0MzsyMSkgLyogUFYgdmNwdV9pc19wcmVlbXB0ZWQgZnVuY3Rpb24gKi9cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtMjMwLSNkZWZpbmUgWDg2X0ZFQVRVUkVfVERYX0dVRVNUXHRcdCggOCozMiYjNDM7MjIpIC8qIFwmIzM0O3RkeF9ndWVzdFwmIzM0OyBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyBHdWVzdCAqL1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWlkL2xlYWZfdHlwZXMuaD0xMjEyPXN0cnVjdCBsZWFmXzB4NGM3ODAwMDFfMCB7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1aWQvbGVhZl90eXBlcy5oLTEyOTEtXHRcdHB2dW5sb2NrXHRcdFx0OiAgMSwgLy8gUFYgdW5sb2NrIGZ1bmN0aW9uXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVpZC9sZWFmX3R5cGVzLmg6MTI5MjpcdFx0dmNwdXByZWVtcHRcdFx0XHQ6ICAxLCAvLyBQViB2Y3B1X2lzX3ByZWVtcHRlZCBmdW5jdGlvblxuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1aWQvbGVhZl90eXBlcy5oLTEyOTMtXHRcdHRkeF9ndWVzdFx0XHRcdDogIDEsIC8vIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIEd1ZXN0XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vbXNoeXBlcnYuaD0xODQ9dm9pZCBfX2luaXQgaHZfaW5pdF9zcGlubG9ja3Modm9pZCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc2h5cGVydi5oOjE4NTpib29sIGh2X3ZjcHVfaXNfcHJlZW1wdGVkKGludCB2Y3B1KTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL21zaHlwZXJ2LmgtMTg2LSNlbHNlXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaD0xND1zdHJ1Y3QgcHZfbG9ja19vcHMge1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmgtMTctXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oOjE4Olx0c3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIHZjcHVfaXNfcHJlZW1wdGVkO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaC0xOS19IF9fbm9fcmFuZG9taXplX2xheW91dDtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oPTQwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBwdl9xdWV1ZWRfc3Bpbl91bmxvY2soc3RydWN0IHFzcGlubG9jayAqbG9jaylcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oLTQ5LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaDo1MDpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgcHZfdmNwdV9pc19wcmVlbXB0ZWQobG9uZyBjcHUpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oLTUxLXtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg6NTI6XHRyZXR1cm4gUFZPUF9BTFRfQ0FMTEVFMShib29sLCBwdl9vcHNfbG9jaywgdmNwdV9pc19wcmVlbXB0ZWQsIGNwdSxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmgtNTMtXHRcdFx0XHRcJiMzNDt4b3IgJSVlYXgsICUlZWF4XCYjMzQ7LFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg9NzQ9c3RhdGljIGlubGluZSB2b2lkIHF1ZXVlZF9zcGluX3VubG9jayhzdHJ1Y3QgcXNwaW5sb2NrICpsb2NrKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmgtNzktXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oOjgwOiNkZWZpbmUgdmNwdV9pc19wcmVlbXB0ZWQgdmNwdV9pc19wcmVlbXB0ZWRcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg6ODE6c3RhdGljIGlubGluZSBib29sIHZjcHVfaXNfcHJlZW1wdGVkKGxvbmcgY3B1KVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaC04Mi17XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oOjgzOlx0cmV0dXJuIHB2X3ZjcHVfaXNfcHJlZW1wdGVkKGNwdSk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oLTg0LX1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oPTk2PXZvaWQgX19yYXdfY2FsbGVlX3NhdmVfX19uYXRpdmVfcXVldWVkX3NwaW5fdW5sb2NrKHN0cnVjdCBxc3BpbmxvY2sgKmxvY2spO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaDo5Nzpib29sIF9fcmF3X2NhbGxlZV9zYXZlX19fbmF0aXZlX3ZjcHVfaXNfcHJlZW1wdGVkKGxvbmcgY3B1KTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmgtOTgtI2VuZGlmIC8qIENPTkZJR19QQVJBVklSVF9TUElOTE9DS1MgKi9cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oPTEwND1ib29sIHB2X2lzX25hdGl2ZV9zcGluX3VubG9jayh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg6MTA1Ol9fdmlzaWJsZSBib29sIF9fbmF0aXZlX3ZjcHVfaXNfcHJlZW1wdGVkKGxvbmcgY3B1KTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg6MTA2OmJvb2wgcHZfaXNfbmF0aXZlX3ZjcHVfaXNfcHJlZW1wdGVkKHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaC0xMDctXG4tLVxuYXJjaC94ODYva2VybmVsL2t2bS5jPTY0NT1zdGF0aWMgdm9pZCBrdm1fc21wX3NlbmRfY2FsbF9mdW5jX2lwaShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaylcbi0tXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmMtNjUyLVx0Zm9yX2VhY2hfY3B1KGNwdSwgbWFzaykge1xuYXJjaC94ODYva2VybmVsL2t2bS5jOjY1MzpcdFx0aWYgKCFpZGxlX2NwdShjcHUpIFx1MDAyNlx1MDAyNiB2Y3B1X2lzX3ByZWVtcHRlZChjcHUpKSB7XG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmMtNjU0LVx0XHRcdGt2bV9oeXBlcmNhbGwxKEtWTV9IQ19TQ0hFRF9ZSUVMRCwgcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KSk7XG4tLVxuYXJjaC94ODYva2VybmVsL2t2bS5jPTc5Mj1zdGF0aWMgdm9pZCBrdm1fY3Jhc2hfc2h1dGRvd24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxuYXJjaC94ODYva2VybmVsL2t2bS5jLTc5OS0jaWYgZGVmaW5lZChDT05GSUdfWDg2XzMyKSB8fCAhZGVmaW5lZChDT05GSUdfU01QKVxuYXJjaC94ODYva2VybmVsL2t2bS5jOjgwMDpib29sIF9fa3ZtX3ZjcHVfaXNfcHJlZW1wdGVkKGxvbmcgY3B1KTtcbmFyY2gveDg2L2tlcm5lbC9rdm0uYy04MDEtXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM6ODAyOl9fdmlzaWJsZSBib29sIF9fa3ZtX3ZjcHVfaXNfcHJlZW1wdGVkKGxvbmcgY3B1KVxuYXJjaC94ODYva2VybmVsL2t2bS5jLTgwMy17XG4tLVxuYXJjaC94ODYva2VybmVsL2t2bS5jLTgwNy19XG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM6ODA4OlBWX0NBTExFRV9TQVZFX1JFR1NfVEhVTksoX19rdm1fdmNwdV9pc19wcmVlbXB0ZWQpO1xuYXJjaC94ODYva2VybmVsL2t2bS5jLTgwOS1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmMtODEzLVxuYXJjaC94ODYva2VybmVsL2t2bS5jOjgxNDpleHRlcm4gYm9vbCBfX3Jhd19jYWxsZWVfc2F2ZV9fX2t2bV92Y3B1X2lzX3ByZWVtcHRlZChsb25nKTtcbmFyY2gveDg2L2tlcm5lbC9rdm0uYy04MTUtXG4tLVxuYXJjaC94ODYva2VybmVsL2t2bS5jLTgyNC1cbmFyY2gveDg2L2tlcm5lbC9rdm0uYzo4MjU6REVGSU5FX0FTTV9GVU5DKF9fcmF3X2NhbGxlZV9zYXZlX19fa3ZtX3ZjcHVfaXNfcHJlZW1wdGVkLFxuYXJjaC94ODYva2VybmVsL2t2bS5jLTgyNi1cdFx0UFZfVkNQVV9QUkVFTVBURURfQVNNLCAudGV4dCk7XG4tLVxuYXJjaC94ODYva2VybmVsL2t2bS5jPTgyOT1zdGF0aWMgdm9pZCBfX2luaXQga3ZtX2d1ZXN0X2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmMtODQyLSNpZmRlZiBDT05GSUdfUEFSQVZJUlRfU1BJTkxPQ0tTXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM6ODQzOlx0XHRwdl9vcHNfbG9jay52Y3B1X2lzX3ByZWVtcHRlZCA9XG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM6ODQ0Olx0XHRcdFBWX0NBTExFRV9TQVZFKF9fa3ZtX3ZjcHVfaXNfcHJlZW1wdGVkKTtcbmFyY2gveDg2L2tlcm5lbC9rdm0uYy04NDUtI2VuZGlmXG4tLVxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jPTc2PXZvaWQgYXJjaF9jb250ZW5kZWRfcmVsZWFzZV90cmFjZV91bnJlZyh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYy04Ny1cbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYzo4ODpfX3Zpc2libGUgYm9vbCBfX25hdGl2ZV92Y3B1X2lzX3ByZWVtcHRlZChsb25nIGNwdSlcbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYy04OS17XG4tLVxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jLTkxLX1cbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYzo5MjpQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKF9fbmF0aXZlX3ZjcHVfaXNfcHJlZW1wdGVkKTtcbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYy05My1cbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYzo5NDpib29sIHB2X2lzX25hdGl2ZV92Y3B1X2lzX3ByZWVtcHRlZCh2b2lkKVxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jLTk1LXtcbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYzo5NjpcdHJldHVybiBwdl9vcHNfbG9jay52Y3B1X2lzX3ByZWVtcHRlZC5mdW5jID09XG5hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmM6OTc6XHRcdF9fcmF3X2NhbGxlZV9zYXZlX19fbmF0aXZlX3ZjcHVfaXNfcHJlZW1wdGVkO1xuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jLTk4LX1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmM9MTAwPXZvaWQgX19pbml0IHBhcmF2aXJ0X3NldF9jYXAodm9pZClcbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYy0xMDEte1xuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jOjEwMjpcdGlmICghcHZfaXNfbmF0aXZlX3ZjcHVfaXNfcHJlZW1wdGVkKCkpXG5hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmMtMTAzLVx0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1ZDUFVQUkVFTVBUKTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmM9MTA2PXN0cnVjdCBwdl9sb2NrX29wcyBwdl9vcHNfbG9jayA9IHtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmMtMTA4LVx0LmtpY2tcdFx0XHRcdD0gcGFyYXZpcnRfbm9wLFxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jOjEwOTpcdC52Y3B1X2lzX3ByZWVtcHRlZFx0XHQ9IFBWX0NBTExFRV9TQVZFKF9fbmF0aXZlX3ZjcHVfaXNfcHJlZW1wdGVkKSxcbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYy0xMTAtfTtcbi0tXG5hcmNoL3g4Ni94ZW4vc3BpbmxvY2suYz0xMjM9dm9pZCBfX2luaXQgeGVuX2luaXRfc3BpbmxvY2tzKHZvaWQpXG4tLVxuYXJjaC94ODYveGVuL3NwaW5sb2NrLmMtMTQwLVx0cHZfb3BzX2xvY2sua2ljayA9IHhlbl9xbG9ja19raWNrO1xuYXJjaC94ODYveGVuL3NwaW5sb2NrLmM6MTQxOlx0cHZfb3BzX2xvY2sudmNwdV9pc19wcmVlbXB0ZWQgPSBQVl9DQUxMRUVfU0FWRSh4ZW5fdmNwdV9zdG9sZW4pO1xuYXJjaC94ODYveGVuL3NwaW5sb2NrLmMtMTQyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9MjI5OT1leHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpjcHVfY3Vycl9zbmFwc2hvdChpbnQgY3B1KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMjMwOC0gKi9cbmluY2x1ZGUvbGludXgvc2NoZWQuaDoyMzA5OiNpZm5kZWYgdmNwdV9pc19wcmVlbXB0ZWRcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoyMzEwOnN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X2lzX3ByZWVtcHRlZChpbnQgY3B1KVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTIzMTEte1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaD0yMzIzPXN0YXRpYyBpbmxpbmUgYm9vbCBvd25lcl9vbl9jcHUoc3RydWN0IHRhc2tfc3RydWN0ICpvd25lcilcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMjMyOC1cdCAqL1xuaW5jbHVkZS9saW51eC9zY2hlZC5oOjIzMjk6XHRyZXR1cm4gUkVBRF9PTkNFKG93bmVyLVx1MDAzZW9uX2NwdSkgXHUwMDI2XHUwMDI2ICF2Y3B1X2lzX3ByZWVtcHRlZCh0YXNrX2NwdShvd25lcikpO1xuaW5jbHVkZS9saW51eC9zY2hlZC5oLTIzMzAtfVxuLS1cbmtlcm5lbC9sb2NraW5nL211dGV4LmM9Mzg1PWJvb2wgbXV0ZXhfc3Bpbl9vbl9vd25lcihzdHJ1Y3QgbXV0ZXggKmxvY2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqb3duZXIsXG4tLVxua2VybmVsL2xvY2tpbmcvbXV0ZXguYy00MDMtXHRcdC8qXG5rZXJuZWwvbG9ja2luZy9tdXRleC5jOjQwNDpcdFx0ICogVXNlIHZjcHVfaXNfcHJlZW1wdGVkIHRvIGRldGVjdCBsb2NrIGhvbGRlciBwcmVlbXB0aW9uIGlzc3VlLlxua2VybmVsL2xvY2tpbmcvbXV0ZXguYy00MDUtXHRcdCAqL1xuLS1cbmtlcm5lbC9sb2NraW5nL29zcV9sb2NrLmM9OTM9Ym9vbCBvc3FfbG9jayhzdHJ1Y3Qgb3B0aW1pc3RpY19zcGluX3F1ZXVlICpsb2NrKVxuLS1cbmtlcm5lbC9sb2NraW5nL29zcV9sb2NrLmMtMTQyLVx0ICogd2lsbCBjb21lIHdpdGggYW4gSVBJLCB3aGljaCB3aWxsIHdha2Ugc21wX2NvbmRfbG9hZF9yZWxheGVkKCkgaWYgaXRcbmtlcm5lbC9sb2NraW5nL29zcV9sb2NrLmM6MTQzOlx0ICogaXMgaW1wbGVtZW50ZWQgd2l0aCBhIG1vbml0b3Itd2FpdC4gdmNwdV9pc19wcmVlbXB0ZWQoKSByZWxpZXMgb25cbmtlcm5lbC9sb2NraW5nL29zcV9sb2NrLmMtMTQ0LVx0ICogcG9sbGluZywgYmUgY2FyZWZ1bC5cbi0tXG5rZXJuZWwvbG9ja2luZy9vc3FfbG9jay5jLTE0Ni1cdGlmIChzbXBfY29uZF9sb2FkX3JlbGF4ZWQoXHUwMDI2bm9kZS1cdTAwM2Vsb2NrZWQsIFZBTCB8fCBuZWVkX3Jlc2NoZWQoKSB8fFxua2VybmVsL2xvY2tpbmcvb3NxX2xvY2suYzoxNDc6XHRcdFx0XHQgIHZjcHVfaXNfcHJlZW1wdGVkKG5vZGVfY3B1KG5vZGUtXHUwMDNlcHJldikpKSlcbmtlcm5lbC9sb2NraW5nL29zcV9sb2NrLmMtMTQ4LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTgxMT1zdGF0aWMgdm9pZCB1cGRhdGVfcnFfY2xvY2tfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzNjQgZGVsdGEpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy04MzAtXHRcdGlmIChycV9jcHUgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODMxOlx0XHQgICAgdmNwdV9pc19wcmVlbXB0ZWQocnFfY3B1KSkge1xua2VybmVsL3NjaGVkL2NvcmUuYy04MzItXHRcdFx0cnEtXHUwMDNlZGVmZXJyZWRfY2xvY2tfdGFzayAmIzQzOz0gZGVsdGE7XG4tLVxua2VybmVsL3NjaGVkL3NjaGVkLmg9MTQ1OD1zdGF0aWMgaW5saW5lIGJvb2wgYXZhaWxhYmxlX2lkbGVfY3B1KGludCBjcHUpXG4tLVxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTQ2Mi1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjE0NjM6XHRpZiAodmNwdV9pc19wcmVlbXB0ZWQoY3B1KSlcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE0NjQtXHRcdHJldHVybiAwO1xuLS1cbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtMjI4LS8vIGZyZWU6IHdhcyAjZGVmaW5lIFg4Nl9GRUFUVVJFX1BWVU5MT0NLICAgICAgICAgICAgICAgKCA4KjMyJiM0MzsyMCkgLyogUFYgdW5sb2NrIGZ1bmN0aW9uICovXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oOjIyOTojZGVmaW5lIFg4Nl9GRUFUVVJFX1ZDUFVQUkVFTVBUXHRcdCggOCozMiYjNDM7MjEpIC8qIFBWIHZjcHVfaXNfcHJlZW1wdGVkIGZ1bmN0aW9uICovXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTIzMC0jZGVmaW5lIFg4Nl9GRUFUVVJFX1REWF9HVUVTVFx0XHQoIDgqMzImIzQzOzIyKSAvKiBcJiMzNDt0ZHhfZ3Vlc3RcJiMzNDsgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgR3Vlc3QgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwOTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgdmNwdV9pc19wcmVlbXB0ZWRgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgdmNwdV9pc19wcmVlbXB0ZWRgLiBJdCYjMzk7cyBkZWZpbmVkIGluIHRoZSBjb3JlIGBpbmNsdWRlL2xpbnV4L3NjaGVkLmhgIGhlYWRlciwgYnV0IEkga25vdyBhcmNoaXRlY3R1cmVzIGNhbiBvdmVycmlkZSBpdC4gVGhlIHg4NiBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5LCBpcyB3aGF0IEkmIzM5O20gaW50ZXJlc3RlZCBpbiByaWdodCBub3cuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZGVmaW5lZCB3aXRoaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmhgLCBidXQgb25seSBpZiBgQ09ORklHX1BBUkFWSVJUX1NQSU5MT0NLU2AgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBnb29kIHRvIGtlZXAgaW4gbWluZCwgaXQmIzM5O3MgYWxyZWFkeSB0ZWxsaW5nIG1lIGFib3V0IGEgY29uZGl0aW9uYWwgcGF0aC4KCk5vdywgYSBiZWxsIGlzIHJpbmdpbmcgaW4gdGhlIGJhY2sgb2YgbXkgaGVhZC4uLiBJIGJlbGlldmUgYHZjcHVfaXNfcHJlZW1wdGVkYCBpcyB1c2VkIHdpdGhpbiBgdXBkYXRlX3JxX2Nsb2NrX3Rhc2tgLCB3aGljaCBpcywgaWYgSSByZWNhbGwsIHVuZGVyIHRoZSBjb250cm9sIG9mIGBDT05GSUdfUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HYC4gT2theSwgc28gaWYgYFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AgaXMgZW5hYmxlZCwgYnV0IGBQQVJBVklSVF9TUElOTE9DS1NgIGlzbiYjMzk7dCwgYHZjcHVfaXNfcHJlZW1wdGVkYCB3aWxsIHNpbXBseSBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9zY2hlZC5oYCwgd2hpY2ggSSYjMzk7bSBhc3N1bWluZyBpcyBqdXN0IGEgYmFzaWMgYHJldHVybiBmYWxzZWAuIFRvIGNvbmZpcm0gdGhhdCwgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZSBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2xpbnV4L3NjaGVkLmhgLiBMZXQmIzM5O3MgdGFrZSBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY2hlZC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzAwOlx0XG4yMzAxOlx0LypcbjIzMDI6XHQgKiBJbiBvcmRlciB0byByZWR1Y2UgdmFyaW91cyBsb2NrIGhvbGRlciBwcmVlbXB0aW9uIGxhdGVuY2llcyBwcm92aWRlIGFuXG4yMzAzOlx0ICogaW50ZXJmYWNlIHRvIHNlZSBpZiBhIHZDUFUgaXMgY3VycmVudGx5IHJ1bm5pbmcgb3Igbm90LlxuMjMwNDpcdCAqXG4yMzA1Olx0ICogVGhpcyBhbGxvd3MgdXMgdG8gdGVybWluYXRlIG9wdGltaXN0aWMgc3BpbiBsb29wcyBhbmQgYmxvY2ssIGFuYWxvZ291cyB0b1xuMjMwNjpcdCAqIHRoZSBuYXRpdmUgb3B0aW1pc3RpYyBzcGluIGhldXJpc3RpYyBvZiB0ZXN0aW5nIGlmIHRoZSBsb2NrIG93bmVyIHRhc2sgaXNcbjIzMDc6XHQgKiBydW5uaW5nIG9yIG5vdC5cbjIzMDg6XHQgKi9cbjIzMDk6XHQjaWZuZGVmIHZjcHVfaXNfcHJlZW1wdGVkXG4yMzEwOlx0c3RhdGljIGlubGluZSBib29sIHZjcHVfaXNfcHJlZW1wdGVkKGludCBjcHUpXG4yMzExOlx0e1xuMjMxMjpcdFx0cmV0dXJuIGZhbHNlO1xuMjMxMzpcdH1cbjIzMTQ6XHQjZW5kaWZcbjIzMTU6XHRcbjIzMTY6XHRleHRlcm4gbG9uZyBzY2hlZF9zZXRhZmZpbml0eShwaWRfdCBwaWQsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpuZXdfbWFzayk7XG4yMzE3Olx0ZXh0ZXJuIGxvbmcgc2NoZWRfZ2V0YWZmaW5pdHkocGlkX3QgcGlkLCBzdHJ1Y3QgY3B1bWFzayAqbWFzayk7XG4yMzE4Olx0XG4yMzE5Olx0I2lmbmRlZiBUQVNLX1NJWkVfT0ZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc5MTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIG5ldyBjb2RlIGluIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AgaXMgcm9idXN0bHkgdGVzdGVkLiBIbW0sIGl0IGxvb2tzIGxpa2UgZm9yIGB2Y3B1X2lzX3ByZWVtcHRlZGAgdG8gcmV0dXJuIHRydWUgaW4gdGhlIGludGVuZGVkIHNjZW5hcmlvcywgSSBtaWdodCBuZWVkIHRvIGVuYWJsZSBgUEFSQVZJUlRfU1BJTkxPQ0tTYCBhcyB3ZWxsLiBUaGF0IHJpbmdzIGEgYmVsbCwgSSB0aGluayB0aGF0IHdvdWxkIGJlIHRoZSBiZXN0IHdheSB0byBnZXQgY29tcHJlaGVuc2l2ZSBjb3ZlcmFnZSBoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYFBBUkFWSVJUX1NQSU5MT0NLU2AsIHNvIEkmIzM5O2xsIGdvIHRha2UgYSBsb29rIGluIGBhcmNoL3g4Ni9LY29uZmlnYCB0byBjb25maXJtIG15IHN1c3BpY2lvbi4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQVJBVklSVF9TUElOTE9DS1MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9ODA4PWNvbmZpZyBQQVJBVklSVF9YWExcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTgxMi1cbmFyY2gveDg2L0tjb25maWc6ODEzOmNvbmZpZyBQQVJBVklSVF9TUElOTE9DS1NcbmFyY2gveDg2L0tjb25maWctODE0LVx0Ym9vbCBcJiMzNDtQYXJhdmlydHVhbGl6YXRpb24gbGF5ZXIgZm9yIHNwaW5sb2Nrc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODI3OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgeDg2IEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBNeSBmb2N1cyBpcyBvbiB0aGUgYGFyY2gveDg2L0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA4MTMuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCB0aGlzIHNlY3Rpb24gbGlrZWx5IGdvdmVybnMgc29tZSBrZXkgZmVhdHVyZSBvciBhc3BlY3Qgb2YgdGhlIHg4NiBhcmNoaXRlY3R1cmUgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGRlY2lzaW9ucyBhcmUgYmVpbmcgbWFkZSB0aGVyZS4gSSBuZWVkIHRvIGtub3cgd2hhdCYjMzk7cyBiZWluZyBjb25maWd1cmVkLCB1bmRlciB3aGF0IGNvbmRpdGlvbnMsIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgYnJvYWRlciBzeXN0ZW0uIFBlcmhhcHMgSSYjMzk7bSB0cmFja2luZyBkb3duIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24mIzM5O3MgZGVwZW5kZW5jaWVzLCB0cnlpbmcgdG8gdHJvdWJsZXNob290IGEgYnVpbGQgaXNzdWUsIG9yIHNpbXBseSByZWZyZXNoaW5nIG15IHVuZGVyc3RhbmRpbmcgb2YgYSBwYXJ0aWN1bGFyIHg4NiBmZWF0dXJlLiBXaGF0ZXZlciB0aGUgcmVhc29uLCBsaW5lIDgxMyBpcyBteSBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBkZWVwIGRpdmUuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIHdlIGZpbmQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODEwOlx0XHRkZXBlbmRzIG9uIFg4Nl82NFxuIDgxMTpcdFx0c2VsZWN0IEFSQ0hfSEFTX0xBWllfTU1VX01PREVcbiA4MTI6XHRcbiA4MTM6XHRjb25maWcgUEFSQVZJUlRfU1BJTkxPQ0tTXG4gODE0Olx0XHRib29sIFwmIzM0O1BhcmF2aXJ0dWFsaXphdGlvbiBsYXllciBmb3Igc3BpbmxvY2tzXCYjMzQ7XG4gODE1Olx0XHRkZXBlbmRzIG9uIFBBUkFWSVJUIFx1MDAyNlx1MDAyNiBTTVBcbiA4MTY6XHRcdGhlbHBcbiA4MTc6XHRcdCAgUGFyYXZpcnR1YWxpemVkIHNwaW5sb2NrcyBhbGxvdyBhIHB2b3BzIGJhY2tlbmQgdG8gcmVwbGFjZSB0aGVcbiA4MTg6XHRcdCAgc3BpbmxvY2sgaW1wbGVtZW50YXRpb24gd2l0aCBzb21ldGhpbmcgdmlydHVhbGl6YXRpb24tZnJpZW5kbHlcbiA4MTk6XHRcdCAgKGZvciBleGFtcGxlLCBibG9jayB0aGUgdmlydHVhbCBDUFUgcmF0aGVyIHRoYW4gc3Bpbm5pbmcpLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODY5MwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDM4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLVk0gQ29uZmlndXJhdGlvbiBhbmQgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYFBBUkFWSVJUX1NQSU5MT0NLU2AgZml0cyBpbnRvIHRoaXMuIEl0JiMzOTtzIGNsZWFyIHRoYXQgaXQgZGVwZW5kcyBvbiBgUEFSQVZJUlRgIGFuZCBgU01QYCwgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdG8gYWRkIGBQQVJBVklSVF9TUElOTE9DS1NgIHRvIGBFbmFibGVDb25maWdzYC4gVGhhdCYjMzk7cyBhIG5lY2Vzc2FyeSBkZXBlbmRlbmN5LgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSByZWxldmFudCBjb25maWdzIGhlcmU6IGBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdgLCBgUEFSQVZJUlRfU1BJTkxPQ0tTYCwgYFBBUkFWSVJUYCwgYEhZUEVSVklTT1JfR1VFU1RgLCBgVklSVFVBTElaQVRJT05gLCBgS1ZNYCwgYW5kIG9mIGNvdXJzZSBgU01QYC4gQWx0aG91Z2ggYFNNUGAgaXMgdXN1YWxseSBhIGRlZmF1bHQsIGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGtlZXAgaW4gbWluZC4KCk5vdywgbXkgZm9jdXMgaXMgb24gdGhlIGNydWNpYWwgc3ltYm9sIGZvciBvcHRpbWl6YXRpb24uIEkmIzM5O20gY3VycmVudGx5IGxlYW5pbmcgdG93YXJkcyBga3ZtX3NldF9tc3JfY29tbW9uYC4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZSB0aGF0IHdvdWxkIGJlIGJldHRlcj8gSSBjb25zaWRlcmVkIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AsIGJ1dCBpdCYjMzk7cyBzdGF0aWMsIHNvIG5vIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBgdXBkYXRlX3JxX2Nsb2NrYCBpcyBhIHZlcnkgZ2VuZXJpYyBob3QgcGF0aCwgc28gSSYjMzk7bGwgYXZvaWQgaXQuIFRoZSBgcmVjb3JkX3N0ZWFsX3RpbWVgIGlzIGFub3RoZXIgc3RhdGljIG9uZSwgc28gSSYjMzk7bGwgc2tpcCBpdC4gVGhlbiB0aGVyZSYjMzk7cyBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLCB3aGljaCBpcyBhIGhvdCBwYXRoIGJ1dCBpdCYjMzk7cyByZWFsbHkgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBLVk0gdkNQVSBydW4sIHdoaWNoIGlzbiYjMzk7dCB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuCgpga3ZtX3NldF9tc3JfY29tbW9uYCBzZWVtcyBpZGVhbC4gSXQmIzM5O3Mgbm90IGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgc2luY2UgTVNSIHdyaXRlcyBhcmUgcmVsYXRpdmVseSByYXJlIGNvbXBhcmVkIHRvIFZNIGV4aXRzLCBhbmQgaXQgZGlyZWN0bHkgdHJpZ2dlcnMgYEtWTV9SRVFfU1RFQUxfVVBEQVRFYCwgd2hpY2ggdGhlbiBjYWxscyBgcmVjb3JkX3N0ZWFsX3RpbWVgLCBzbyBJJiMzOTtsbCBoYXZlIHRoZSB2aXNpYmlsaXR5IEkgbmVlZC4KCldhaXQsIHRob3VnaCwgYGt2bV9zZXRfbXNyX2NvbW1vbmAgaXMgYWN0dWFsbHkgYSByYXRoZXIgbGFyZ2UgZnVuY3Rpb24sIGFuZCBJJiMzOTtkIHByZWZlciBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYy4gTGV0IG1lIGRvdWJsZS1jaGVjay4uLiBZZXMsIGl0IGhhbmRsZXMgYE1TUl9LVk1fU1RFQUxfVElNRWAsIGJ1dCBjYW4gSSBwaW5wb2ludCBhIG1vcmUgZm9jdXNlZCBmdW5jdGlvbj8gQ2hlY2tpbmcgZm9yIG90aGVyIG9wdGlvbnMgbm93Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zZXRfbXNyX2NvbW1vbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmM9Mzg3OT1zdGF0aWMgdm9pZCBrdm1fZ2V0X3hzdGF0ZV9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0zODgzLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjM4ODQ6aW50IGt2bV9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzg4NS17XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTQyODgtfVxuYXJjaC94ODYva3ZtL3g4Ni5jOjQyODk6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXRfbXNyX2NvbW1vbik7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNDI5MC1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTQwNzE9dm9pZCBrdm1fYXJjaF9hc3luY19wYWdlX3ByZXNlbnRfcXVldWVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTQwNzQtXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTQwNzU6XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9tYigpIGluIGt2bV9zZXRfbXNyX2NvbW1vbigpLiAqL1xuYXJjaC94ODYva3ZtL3g4Ni5jLTE0MDc2LVx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDI6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5NzcKCQkJCQkJCW91dHB1dDogMjAxCgkJCQkJCQl0aG91Z2h0czogMzAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBTdGVhbCBUaW1lIEFjY291bnRpbmcgUGF0Y2gqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBga3ZtX3NldF9tc3JfY29tbW9uYCBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXMgdGhlIGtleSBmdW5jdGlvbiB0byBmb2N1cyBvbi4gSXQmIzM5O3MgZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QsIGFuZCBpdCBzZWVtcyBjZW50cmFsIHRvIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgYmVpbmcgbW9kaWZpZWQg4oCTIHRoZSBNU1Igd3JpdGUgdGhhdCBlbmFibGVzIGFuZCBhZmZlY3RzIHRoZSBzdGVhbCB0aW1lIGFjY291bnRpbmcgbG9naWMgd2l0aGluIEtWTS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIGRpZCBhIHF1aWNrIG1lbnRhbCBzY2FuLiBJIGFsc28gY29uc2lkZXJlZCBga3ZtX2FyY2hfdmNwdV9sb2FkYCBzaW5jZSB0aGF0JiMzOTtzIGludm9sdmVkIG9uIGV2ZXJ5IHZDUFUgY29udGV4dCBzd2l0Y2gsIHdoaWNoIG1ha2VzIGl0IGEgdmVyeSBob3QgcGF0aC4gSG93ZXZlciwgYWZ0ZXIgdGhhdCBxdWljayBsb29rIG92ZXIsIGBrdm1fc2V0X21zcl9jb21tb25gIHN0aWxsIGZlZWxzIGxpa2UgdGhlIGJlc3QgYmV0LiBJdCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBjcnVjaWFsIE1TUiB3cml0ZSByZWxhdGVkIHRvIHRoZSBjaGFuZ2VzLgoKU28sIGhlcmUmIzM5O3MgdGhlIGZpbmFsIHZlcmRpY3Q6CgoqICAgKipXb3J0aEZ1enppbmc6IFRydWUqKi4gVGhpcyBwYXRjaCBkaXJlY3RseSB0b3VjaGVzIGNyaXRpY2FsIEtWTSBhbmQgc2NoZWR1bGVyIGxvZ2ljIHJlbGF0ZWQgdG8gdGltZSBhY2NvdW50aW5nLiBGdW5jdGlvbmFsIGNoYW5nZXMgd2FycmFudCBmdXp6aW5nLgoqICAgKipGb2N1c1N5bWJvbHM6IFxb4oCca3ZtX3NldF9tc3JfY29tbW9u4oCdXSoqLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBwcmltYXJ5IHRhcmdldCBkdWUgdG8gaXRzIGRpcmVjdCByb2xlIGluIGhhbmRsaW5nIHRoZSBNU1Igd3JpdGUgcmVzcG9uc2libGUgZm9yIHRoZSBjaGFuZ2VzIHRvIHRoZSBzdGVhbCB0aW1lIGxvZ2ljLgoqICAgKipFbmFibGVDb25maWdzOiBcW+KAnFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR+KAnSwg4oCcUEFSQVZJUlRfU1BJTkxPQ0tT4oCdLCDigJxQQVJBVklSVOKAnSwg4oCcSFlQRVJWSVNPUl9HVUVTVOKAnSwg4oCcVklSVFVBTElaQVRJT07igJ0sIOKAnEtWTeKAnV0qKi4gVGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZWxldmFudCBiZWNhdXNlIHRoZXkgZW5hYmxlIHRoZSBjb3JlIGZlYXR1cmVzIGFuZCB1bmRlcmx5aW5nIHZpcnR1YWxpemF0aW9uIHRlY2hub2xvZ2llcyB0aGF0IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGguCiogICAqKlJlYXNvbmluZzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN0ZWFsIHRpbWUgYWNjb3VudGluZyBsb2dpYyBpbiBLVk0gYW5kIHRoZSBzY2hlZHVsZXIuIEl0IGNoYW5nZXMgdGhlIG9yZGVyIG9mIHVzZXIgYWNjZXNzIGFuZCBtZW1vcnkgYmFycmllcnMgaW4gYHJlY29yZF9zdGVhbF90aW1lYCAoS1ZNKSBhbmQgZGVmZXJzIGNsb2NrIHRhc2sgdXBkYXRlcyBpbiBgdXBkYXRlX3JxX2Nsb2NrX3Rhc2tgIChzY2hlZHVsZXIpIHdoZW4gdGhlIHZDUFUgaXMgcHJlZW1wdGVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUga2VybmVsIGFuZCBLVk0gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiBga3ZtX3NldF9tc3JfY29tbW9uYCBoYW5kbGVzIHRoZSBNU1Igd3JpdGUgdGhhdCBlbmFibGVzIHN0ZWFsIHRpbWUgYWNjb3VudGluZyBhbmQgdHJpZ2dlcnMgdGhlIEtWTSBsb2dpYy4mIzM0OyoqIFRoaXMgZXhwbGFpbnMgdGhlIGNyaXRpY2FsIGNoYW5nZXMgaW52b2x2ZWQsIGFuZCBob3cgYGt2bV9zZXRfbXNyX2NvbW1vbmAgZGlyZWN0bHkgdGllcyBpbnRvIHRoZSBjaGFuZ2VzLCBzZXJ2aW5nIGFzIHRoZSB0cmlnZ2VyIGZvciB0aGUgbW9kaWZpZWQgS1ZNIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HJiMzNDssCiAgICAmIzM0O1BBUkFWSVJUX1NQSU5MT0NLUyYjMzQ7LAogICAgJiMzNDtQQVJBVklSVCYjMzQ7LAogICAgJiMzNDtIWVBFUlZJU09SX0dVRVNUJiMzNDssCiAgICAmIzM0O1ZJUlRVQUxJWkFUSU9OJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9zZXRfbXNyX2NvbW1vbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3RlYWwgdGltZSBhY2NvdW50aW5nIGxvZ2ljIGluIEtWTSBhbmQgdGhlIHNjaGVkdWxlci4gSXQgY2hhbmdlcyB0aGUgb3JkZXIgb2YgdXNlciBhY2Nlc3MgYW5kIG1lbW9yeSBiYXJyaWVycyBpbiBgcmVjb3JkX3N0ZWFsX3RpbWVgIChLVk0pIGFuZCBkZWZlcnMgY2xvY2sgdGFzayB1cGRhdGVzIGluIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AgKHNjaGVkdWxlcikgd2hlbiB0aGUgdkNQVSBpcyBwcmVlbXB0ZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgYW5kIEtWTSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuIGBrdm1fc2V0X21zcl9jb21tb25gIGhhbmRsZXMgdGhlIE1TUiB3cml0ZSB0aGF0IGVuYWJsZXMgc3RlYWwgdGltZSBhY2NvdW50aW5nIGFuZCB0cmlnZ2VycyB0aGUgS1ZNIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQVJBVklSVF9USU1FX0FDQ09VTlRJTkcmIzM0OywKICAgICYjMzQ7UEFSQVZJUlRfU1BJTkxPQ0tTJiMzNDssCiAgICAmIzM0O1BBUkFWSVJUJiMzNDssCiAgICAmIzM0O0hZUEVSVklTT1JfR1VFU1QmIzM0OywKICAgICYjMzQ7VklSVFVBTElaQVRJT04mIzM0OywKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3NldF9tc3JfY29tbW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzdGVhbCB0aW1lIGFjY291bnRpbmcgbG9naWMgaW4gS1ZNIGFuZCB0aGUgc2NoZWR1bGVyLiBJdCBjaGFuZ2VzIHRoZSBvcmRlciBvZiB1c2VyIGFjY2VzcyBhbmQgbWVtb3J5IGJhcnJpZXJzIGluIGByZWNvcmRfc3RlYWxfdGltZWAgKEtWTSkgYW5kIGRlZmVycyBjbG9jayB0YXNrIHVwZGF0ZXMgaW4gYHVwZGF0ZV9ycV9jbG9ja190YXNrYCAoc2NoZWR1bGVyKSB3aGVuIHRoZSB2Q1BVIGlzIHByZWVtcHRlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBhbmQgS1ZNIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4gYGt2bV9zZXRfbXNyX2NvbW1vbmAgaGFuZGxlcyB0aGUgTVNSIHdyaXRlIHRoYXQgZW5hYmxlcyBzdGVhbCB0aW1lIGFjY291bnRpbmcgYW5kIHRyaWdnZXJzIHRoZSBLVk0gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDI6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9yZGVyIG9mIGd1ZXN0IG1lbW9yeSBhY2Nlc3NlcyBpbiBgcmVjb3JkX3N0ZWFsX3RpbWVgIGFuZCBhZGRzIGEgbmV3IGZpZWxkIGBkZWZlcnJlZF9jbG9ja190YXNrYCB0byBgc3RydWN0IHJxYCBmb3IgcGFyYXZpcnQgc3RlYWwgdGltZSBhY2NvdW50aW5nLiBUaGUgZ3Vlc3QgbWVtb3J5IGFjY2Vzc2VzIHVzZSBgdW5zYWZlX2dldF91c2VyYCB3aGljaCBpbml0aWFsaXplcyB0aGUgbG9jYWwgdmFyaWFibGVzIChgdmVyc2lvbmAgYW5kIGBzdGVhbGApIHVwb24gc3VjY2Vzcywgb3IganVtcHMgdG8gYW4gZXJyb3IgbGFiZWwgdXBvbiBmYWlsdXJlLCBwcmV2ZW50aW5nIGFueSB1c2Ugb2YgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMuIFRoZSBuZXcgYGRlZmVycmVkX2Nsb2NrX3Rhc2tgIGZpZWxkIGlzIHBhcnQgb2YgYHN0cnVjdCBycWAsIHdoaWNoIGlzIGEgcGVyLUNQVSB2YXJpYWJsZSBhbmQgdGh1cyB6ZXJvLWluaXRpYWxpemVkIGJ5IGRlZmF1bHQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBub3IgZG9lcyBpdCBjb3B5IHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODY2ODU4NjdkNWU5Y2Y3MDZmYzhkMzQxYjA2ZjE3OWU2M2RlZDcxZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDAxOjUxOjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDY5NDY5YmJkYzg0YTguLjUyNWExNDQ4MTk1ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTM3NTEsNiAmIzQzOzM3NTEsMzUgQEAgc3RhdGljIHZvaWQgcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCX0KIAogCXN0ID0gKHN0cnVjdCBrdm1fc3RlYWxfdGltZSBfX3VzZXIgKilnaGMtJmd0O2h2YTsKJiM0MzsKJiM0MzsJaWYgKCF1c2VyX2FjY2Vzc19iZWdpbihzdCwgc2l6ZW9mKCpzdCkpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl1bnNhZmVfZ2V0X3VzZXIodmVyc2lvbiwgJmFtcDtzdC0mZ3Q7dmVyc2lvbiwgb3V0KTsKJiM0MzsJaWYgKHZlcnNpb24gJmFtcDsgMSkKJiM0MzsJCXZlcnNpb24gJiM0Mzs9IDE7ICAvKiBmaXJzdCB0aW1lIHdyaXRlLCByYW5kb20ganVuayAqLwomIzQzOwomIzQzOwl2ZXJzaW9uICYjNDM7PSAxOwomIzQzOwl1bnNhZmVfcHV0X3VzZXIodmVyc2lvbiwgJmFtcDtzdC0mZ3Q7dmVyc2lvbiwgb3V0KTsKJiM0MzsKJiM0MzsJLyogUGFpcnMgd2l0aCB0aGUgZ3Vlc3Qgc2lkZSB2aXJ0X3JtYigpIGluIGt2bV9zdGVhbF9jbG9jaygpLiAqLwomIzQzOwlzbXBfd21iKCk7CiYjNDM7CiYjNDM7CXVuc2FmZV9nZXRfdXNlcihzdGVhbCwgJmFtcDtzdC0mZ3Q7c3RlYWwsIG91dCk7CiYjNDM7CXN0ZWFsICYjNDM7PSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheSAtCiYjNDM7CQl2Y3B1LSZndDthcmNoLnN0Lmxhc3Rfc3RlYWw7CiYjNDM7CXZjcHUtJmd0O2FyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwomIzQzOwl1bnNhZmVfcHV0X3VzZXIoc3RlYWwsICZhbXA7c3QtJmd0O3N0ZWFsLCBvdXQpOwomIzQzOwomIzQzOwl2ZXJzaW9uICYjNDM7PSAxOwomIzQzOwl1bnNhZmVfcHV0X3VzZXIodmVyc2lvbiwgJmFtcDtzdC0mZ3Q7dmVyc2lvbiwgb3V0KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUHVibGlzaCB0aGUgc3RlYWx0aW1lIGJlZm9yZSBtYWtpbmcgdGhlIHZDUFUgbG9vayBydW5uYWJsZSB0bwomIzQzOwkgKiB0aGUgZ3Vlc3QuCiYjNDM7CSAqLwomIzQzOwlzbXBfd21iKCk7CiYjNDM7CiAJLyoKIAkgKiBEb2luZyBhIFRMQiBmbHVzaCBoZXJlLCBvbiB0aGUgZ3Vlc3QmIzM5O3MgYmVoYWxmLCBjYW4gYXZvaWQKIAkgKiBleHBlbnNpdmUgSVBJcy4KQEAgLTM3NTksOSAmIzQzOzM3ODgsNiBAQCBzdGF0aWMgdm9pZCByZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCXU4IHN0X3ByZWVtcHRlZCA9IDA7CiAJCWludCBlcnIgPSAtRUZBVUxUOwogCi0JCWlmICghdXNlcl9hY2Nlc3NfYmVnaW4oc3QsIHNpemVvZigqc3QpKSkKLQkJCXJldHVybjsKLQogCQlhc20gdm9sYXRpbGUoJiMzNDsxOiB4Y2hnYiAlMCwgJTJcbiYjMzQ7CiAJCQkgICAgICYjMzQ7eG9yICUxLCAlMVxuJiMzNDsKIAkJCSAgICAgJiMzNDsyOlxuJiMzNDsKQEAgLTM3ODEsMzcgJiM0MzszODA3LDE3IEBAIHN0YXRpYyB2b2lkIHJlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJaWYgKHN0X3ByZWVtcHRlZCAmYW1wOyBLVk1fVkNQVV9GTFVTSF9UTEIpCiAJCQlrdm1fdmNwdV9mbHVzaF90bGJfZ3Vlc3QodmNwdSk7CiAKLQkJaWYgKCF1c2VyX2FjY2Vzc19iZWdpbihzdCwgc2l6ZW9mKCpzdCkpKQotCQkJZ290byBkaXJ0eTsKIAl9IGVsc2UgewotCQlpZiAoIXVzZXJfYWNjZXNzX2JlZ2luKHN0LCBzaXplb2YoKnN0KSkpCi0JCQlyZXR1cm47Ci0KIAkJdW5zYWZlX3B1dF91c2VyKDAsICZhbXA7c3QtJmd0O3ByZWVtcHRlZCwgb3V0KTsKIAkJdmNwdS0mZ3Q7YXJjaC5zdC5wcmVlbXB0ZWQgPSAwOwomIzQzOwkJdXNlcl9hY2Nlc3NfZW5kKCk7CiAJfQogCi0JdW5zYWZlX2dldF91c2VyKHZlcnNpb24sICZhbXA7c3QtJmd0O3ZlcnNpb24sIG91dCk7Ci0JaWYgKHZlcnNpb24gJmFtcDsgMSkKLQkJdmVyc2lvbiAmIzQzOz0gMTsgIC8qIGZpcnN0IHRpbWUgd3JpdGUsIHJhbmRvbSBqdW5rICovCi0KLQl2ZXJzaW9uICYjNDM7PSAxOwotCXVuc2FmZV9wdXRfdXNlcih2ZXJzaW9uLCAmYW1wO3N0LSZndDt2ZXJzaW9uLCBvdXQpOwotCi0Jc21wX3dtYigpOwotCi0JdW5zYWZlX2dldF91c2VyKHN0ZWFsLCAmYW1wO3N0LSZndDtzdGVhbCwgb3V0KTsKLQlzdGVhbCAmIzQzOz0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXkgLQotCQl2Y3B1LSZndDthcmNoLnN0Lmxhc3Rfc3RlYWw7Ci0JdmNwdS0mZ3Q7YXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7Ci0JdW5zYWZlX3B1dF91c2VyKHN0ZWFsLCAmYW1wO3N0LSZndDtzdGVhbCwgb3V0KTsKLQotCXZlcnNpb24gJiM0Mzs9IDE7Ci0JdW5zYWZlX3B1dF91c2VyKHZlcnNpb24sICZhbXA7c3QtJmd0O3ZlcnNpb24sIG91dCk7CiYjNDM7CW1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KHZjcHUtJmd0O2t2bSwgZ2hjLSZndDttZW1zbG90LCBncGFfdG9fZ2ZuKGdoYy0mZ3Q7Z3BhKSk7CiYjNDM7CXJldHVybjsKIAogIG91dDoKIAl1c2VyX2FjY2Vzc19lbmQoKTsKLSBkaXJ0eToKIAltYXJrX3BhZ2VfZGlydHlfaW5fc2xvdCh2Y3B1LSZndDtrdm0sIGdoYy0mZ3Q7bWVtc2xvdCwgZ3BhX3RvX2dmbihnaGMtJmd0O2dwYSkpOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuYwppbmRleCBmNzgyNzUxOTIwMzZiLi41NmFhNDM5MTgyYzc1IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9jb3JlLmMKQEAgLTgxNiw2ICYjNDM7ODE2LDMwIEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9ycV9jbG9ja190YXNrKHN0cnVjdCBycSAqcnEsIHM2NCBkZWx0YSkKICAqLwogCXM2NCBfX21heWJlX3VudXNlZCBzdGVhbCA9IDAsIGlycV9kZWx0YSA9IDA7CiAKJiM0MzsjaWZkZWYgQ09ORklHX1BBUkFWSVJUX1RJTUVfQUNDT1VOVElORwomIzQzOwlpZiAoc3RhdGljX2tleV9mYWxzZSgoJmFtcDtwYXJhdmlydF9zdGVhbF9ycV9lbmFibGVkKSkpIHsKJiM0MzsJCWludCBycV9jcHUgPSBjcHVfb2YocnEpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEEgcmVtb3RlIENQVSBjYW4gdXBkYXRlIHRoaXMgcnEgYmVmb3JlIHRoZSBvd25lciB2Q1BVCiYjNDM7CQkgKiBoYXMgcmUtZW50ZXJlZCB0aGUgZ3Vlc3QgYW5kIHJlZnJlc2hlZCBpdHMgc3RlYWx0aW1lCiYjNDM7CQkgKiBzdGF0ZS4gRG8gbm90IGNoYXJnZSB0aGF0IGVsYXBzZWQgdGltZSB0byB0aGUgY3VycmVudAomIzQzOwkJICogdGFzayB1bnRpbCBzdGVhbHRpbWUgY2FuIGJlIHNhbXBsZWQgYWZ0ZXIgdGhlIHZDUFUgaXMKJiM0MzsJCSAqIG5vIGxvbmdlciBwcmVlbXB0ZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChycV9jcHUgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdmNwdV9pc19wcmVlbXB0ZWQocnFfY3B1KSkgewomIzQzOwkJCXJxLSZndDtkZWZlcnJlZF9jbG9ja190YXNrICYjNDM7PSBkZWx0YTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAocnEtJmd0O2RlZmVycmVkX2Nsb2NrX3Rhc2spIHsKJiM0MzsJCQlkZWx0YSAmIzQzOz0gcnEtJmd0O2RlZmVycmVkX2Nsb2NrX3Rhc2s7CiYjNDM7CQkJcnEtJmd0O2RlZmVycmVkX2Nsb2NrX3Rhc2sgPSAwOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CiAjaWZkZWYgQ09ORklHX0lSUV9USU1FX0FDQ09VTlRJTkcKIAlpZiAoaXJxdGltZV9lbmFibGVkKCkpIHsKIAkJaXJxX2RlbHRhID0gaXJxX3RpbWVfcmVhZChjcHVfb2YocnEpKSAtIHJxLSZndDtwcmV2X2lycV90aW1lOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL3NjaGVkLmggYi9rZXJuZWwvc2NoZWQvc2NoZWQuaAppbmRleCBlNjU2YzcwNTliZjg2Li40ZmQwMDIyOGFmZWYwIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvc2NoZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvc2NoZWQuaApAQCAtMTMyNSw2ICYjNDM7MTMyNSw3IEBAIHN0cnVjdCBycSB7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HCiAJdTY0CQkJcHJldl9zdGVhbF90aW1lX3JxOwomIzQzOwl1NjQJCQlkZWZlcnJlZF9jbG9ja190YXNrOwogI2VuZGlmCiAKIAkvKiBjYWxjX2xvYWQgcmVsYXRlZCBmaWVsZHMgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0OTkKCQkJCQkJCW91dHB1dDogMjEwCgkJCQkJCQl0aG91Z2h0czogMTYyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZXcgUmlza3MgSW50cm9kdWNlZCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHRhc2tlZCB3aXRoIGFzc2Vzc2luZyB0aGlzIHBhdGNoIGZvciBwb3RlbnRpYWwgS01TQU4gdnVsbmVyYWJpbGl0aWVzLiBNeSBpbml0aWFsIHNjYW4gZm9jdXNlZCBvbiB0aGUgbW9kaWZpY2F0aW9ucyBhY3Jvc3MgYGFyY2gveDg2L2t2bS94ODYuY2AsIGBrZXJuZWwvc2NoZWQvY29yZS5jYCwgYW5kIGBrZXJuZWwvc2NoZWQvc2NoZWQuaGAuCgpJbiBgYXJjaC94ODYva3ZtL3g4Ni5jYCwgdGhlIGNoYW5nZXMgd2l0aGluIGByZWNvcmRfc3RlYWxfdGltZWAgaW52b2x2ZSByZW9yZGVyaW5nIG1lbW9yeSBhY2Nlc3NlcyB0byB0aGUgZ3Vlc3QmIzM5O3MgbWVtb3J5IHNwYWNlIHVzaW5nIGB1bnNhZmVfZ2V0X3VzZXJgIGFuZCBgdW5zYWZlX3B1dF91c2VyYC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYm90aCBgdmVyc2lvbmAgYW5kIGBzdGVhbGAgYXJlIHN0YWNrLWFsbG9jYXRlZCBsb2NhbCB2YXJpYWJsZXMsICppbml0aWFsaXplZCBieSBgdW5zYWZlX2dldF91c2VyYCogYmVmb3JlIHRoZXkmIzM5O3JlIGV2ZXIgdXNlZC4gSWYgYHVuc2FmZV9nZXRfdXNlcmAgZmFpbHMsIHdlIGp1bXAgb3V0IHdpdGggYW4gZXJyb3IsIHNvIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFsdWVzIGFyZSBldmVyIHVzZWQuIFRoZSBjb2RlJiMzOTtzIHJlYWRpbmcgZnJvbSBhbmQgd3JpdGluZyB0byB0aGUgKmd1ZXN0JiMzOTtzKiBtZW1vcnksIG5vdCBrZXJuZWwgbWVtb3J5LCBhbmQgdGhlIGFjY2VzcyBpcyBhcHByb3ByaWF0ZWx5IHByb3RlY3RlZC4gSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9ucywgZW5zdXJpbmcgdGhleSYjMzk7cmUgbG9jYWwgdG8gdGhlIGZ1bmN0aW9uIGFuZCBhcmUgY29ycmVjdGx5IGluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgaXMgZXZlciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuCgpUaGUgY2hhbmdlcyBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AgYXJlIHN0cmFpZ2h0Zm9yd2FyZDogYSBuZXcgZmllbGQsIGBycS0mZ3Q7ZGVmZXJyZWRfY2xvY2tfdGFza2AsIGlzIGludHJvZHVjZWQgd2l0aGluIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AuIFRoaXMgaXMgd2l0aGluIGBzdHJ1Y3QgcnFgLCBhbmQgYHN0cnVjdCBycWAgaXMgYSBwZXItQ1BVIGRhdGEgc3RydWN0dXJlLiBQZXItQ1BVIHZhcmlhYmxlcyBhcmUgKmFsd2F5cyogemVyby1pbml0aWFsaXplZCBieSB0aGUga2VybmVsLCByZXNpZGluZyBpbiB0aGUgYC5kYXRhLi5wZXJjcHVgIHNlY3Rpb24gb2YgbWVtb3J5LiBJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCB0aGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gYmVoYXZpb3Igb2YgcGVyLUNQVSB2YXJpYWJsZXMsIGNvbmZpcm1pbmcgdGhhdCB0aGlzIGZpZWxkIGlzIGltcGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gemVyby4gRXZlbiBpZiB0aGVyZSYjMzk7cyBhIHRoZW9yZXRpY2FsIGlzc3VlLCB0aGlzIG1lbW9yeSBpcyBlbnRpcmVseSB3aXRoaW4gdGhlIGtlcm5lbCwgYW5kIHdlJiMzOTtyZSBub3QgY29weWluZyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZS4gS01TQU4gaXMgZm9yIGRldGVjdGluZyBpbmZvcm1hdGlvbiBsZWFrcyBvZiBrZXJuZWwgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgc28gdGhhdCYjMzk7cyBpcnJlbGV2YW50IGhlcmUuCgpOb3csIGxldCYjMzk7cyBnbyBiYWNrIGFuZCBjYXJlZnVsbHkgcnVuIHRocm91Z2ggdGhlIEtNU0FOIHJ1bGUuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Uga2VybmVsIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UgdGhhdCAqbWlnaHQqIGNvbnRhaW4gdW5pbml0aWFsaXplZCBmaWVsZHMuIFRoZXJlJiMzOTtzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gbmV3IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLiBObyBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIGVycm9ycyBhbGxvdyBzdXJyb3VuZGluZyBjb2RlIHRvIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIGB1bnNhZmVfZ2V0X3VzZXJgIGlzIGNvcnJlY3RseSB1c2VkLCBpbml0aWFsaXppbmcgdmFyaWFibGVzIHdoZW4gdGhleSBhcmUgcmVhZCBhbmQgcHJvdmlkaW5nIGVycm9yIGNvbmRpdGlvbnMuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyBuZXcgS01TQU4tc3BlY2lmaWMgcmlza3MuIFN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgc2FmZXR5IHRvb2xzIGxpa2UgS0FTQU4gYXJlIHN1ZmZpY2llbnQuIEkmIzM5O20gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcmRlciBvZiBndWVzdCBtZW1vcnkgYWNjZXNzZXMgaW4gYHJlY29yZF9zdGVhbF90aW1lYCBhbmQgYWRkcyBhIG5ldyBmaWVsZCBgZGVmZXJyZWRfY2xvY2tfdGFza2AgdG8gYHN0cnVjdCBycWAgZm9yIHBhcmF2aXJ0IHN0ZWFsIHRpbWUgYWNjb3VudGluZy4gVGhlIGd1ZXN0IG1lbW9yeSBhY2Nlc3NlcyB1c2UgYHVuc2FmZV9nZXRfdXNlcmAgd2hpY2ggaW5pdGlhbGl6ZXMgdGhlIGxvY2FsIHZhcmlhYmxlcyAoYHZlcnNpb25gIGFuZCBgc3RlYWxgKSB1cG9uIHN1Y2Nlc3MsIG9yIGp1bXBzIHRvIGFuIGVycm9yIGxhYmVsIHVwb24gZmFpbHVyZSwgcHJldmVudGluZyBhbnkgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzLiBUaGUgbmV3IGBkZWZlcnJlZF9jbG9ja190YXNrYCBmaWVsZCBpcyBwYXJ0IG9mIGBzdHJ1Y3QgcnFgLCB3aGljaCBpcyBhIHBlci1DUFUgdmFyaWFibGUgYW5kIHRodXMgemVyby1pbml0aWFsaXplZCBieSBkZWZhdWx0LiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgbm9yIGRvZXMgaXQgY29weSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgb3JkZXIgb2YgZ3Vlc3QgbWVtb3J5IGFjY2Vzc2VzIGluIGByZWNvcmRfc3RlYWxfdGltZWAgYW5kIGFkZHMgYSBuZXcgZmllbGQgYGRlZmVycmVkX2Nsb2NrX3Rhc2tgIHRvIGBzdHJ1Y3QgcnFgIGZvciBwYXJhdmlydCBzdGVhbCB0aW1lIGFjY291bnRpbmcuIFRoZSBndWVzdCBtZW1vcnkgYWNjZXNzZXMgdXNlIGB1bnNhZmVfZ2V0X3VzZXJgIHdoaWNoIGluaXRpYWxpemVzIHRoZSBsb2NhbCB2YXJpYWJsZXMgKGB2ZXJzaW9uYCBhbmQgYHN0ZWFsYCkgdXBvbiBzdWNjZXNzLCBvciBqdW1wcyB0byBhbiBlcnJvciBsYWJlbCB1cG9uIGZhaWx1cmUsIHByZXZlbnRpbmcgYW55IHVzZSBvZiB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcy4gVGhlIG5ldyBgZGVmZXJyZWRfY2xvY2tfdGFza2AgZmllbGQgaXMgcGFydCBvZiBgc3RydWN0IHJxYCwgd2hpY2ggaXMgYSBwZXItQ1BVIHZhcmlhYmxlIGFuZCB0aHVzIHplcm8taW5pdGlhbGl6ZWQgYnkgZGVmYXVsdC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IGNvcHkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgZXJyb3JzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMTo1MTo1Ny4yMTQ5MDUxMTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODY3NDM2NDE3OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HXCIsXG4gICAgXCJQQVJBVklSVF9TUElOTE9DS1NcIixcbiAgICBcIlBBUkFWSVJUXCIsXG4gICAgXCJIWVBFUlZJU09SX0dVRVNUXCIsXG4gICAgXCJWSVJUVUFMSVpBVElPTlwiLFxuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3NldF9tc3JfY29tbW9uXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgb3JkZXIgb2YgZ3Vlc3QgbWVtb3J5IGFjY2Vzc2VzIGluIGByZWNvcmRfc3RlYWxfdGltZWAgYW5kIGFkZHMgYSBuZXcgZmllbGQgYGRlZmVycmVkX2Nsb2NrX3Rhc2tgIHRvIGBzdHJ1Y3QgcnFgIGZvciBwYXJhdmlydCBzdGVhbCB0aW1lIGFjY291bnRpbmcuIFRoZSBndWVzdCBtZW1vcnkgYWNjZXNzZXMgdXNlIGB1bnNhZmVfZ2V0X3VzZXJgIHdoaWNoIGluaXRpYWxpemVzIHRoZSBsb2NhbCB2YXJpYWJsZXMgKGB2ZXJzaW9uYCBhbmQgYHN0ZWFsYCkgdXBvbiBzdWNjZXNzLCBvciBqdW1wcyB0byBhbiBlcnJvciBsYWJlbCB1cG9uIGZhaWx1cmUsIHByZXZlbnRpbmcgYW55IHVzZSBvZiB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcy4gVGhlIG5ldyBgZGVmZXJyZWRfY2xvY2tfdGFza2AgZmllbGQgaXMgcGFydCBvZiBgc3RydWN0IHJxYCwgd2hpY2ggaXMgYSBwZXItQ1BVIHZhcmlhYmxlIGFuZCB0aHVzIHplcm8taW5pdGlhbGl6ZWQgYnkgZGVmYXVsdC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IGNvcHkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgZXJyb3JzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzdGVhbCB0aW1lIGFjY291bnRpbmcgbG9naWMgaW4gS1ZNIGFuZCB0aGUgc2NoZWR1bGVyLiBJdCBjaGFuZ2VzIHRoZSBvcmRlciBvZiB1c2VyIGFjY2VzcyBhbmQgbWVtb3J5IGJhcnJpZXJzIGluIGByZWNvcmRfc3RlYWxfdGltZWAgKEtWTSkgYW5kIGRlZmVycyBjbG9jayB0YXNrIHVwZGF0ZXMgaW4gYHVwZGF0ZV9ycV9jbG9ja190YXNrYCAoc2NoZWR1bGVyKSB3aGVuIHRoZSB2Q1BVIGlzIHByZWVtcHRlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBhbmQgS1ZNIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4gYGt2bV9zZXRfbXNyX2NvbW1vbmAgaGFuZGxlcyB0aGUgTVNSIHdyaXRlIHRoYXQgZW5hYmxlcyBzdGVhbCB0aW1lIGFjY291bnRpbmcgYW5kIHRyaWdnZXJzIHRoZSBLVk0gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAxOjUxOjU3LjIxNDkxMTE1NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzODA0NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODY2ODU4NjdkNWU5Y2Y3MDZmYzhkMzQxYjA2ZjE3OWU2M2RlZDcxZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAyNCAwMTo1MTo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5pbmRleCA2OTQ2OWJiZGM4NGE4Li41MjVhMTQ0ODE5NWUwIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuY1xcbkBAIC0zNzUxLDYgKzM3NTEsMzUgQEAgc3RhdGljIHZvaWQgcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHR9XFxuIFxcbiBcXHRzdCA9IChzdHJ1Y3Qga3ZtX3N0ZWFsX3RpbWUgX191c2VyICopZ2hjLVxcdTAwM2VodmE7XFxuK1xcbitcXHRpZiAoIXVzZXJfYWNjZXNzX2JlZ2luKHN0LCBzaXplb2YoKnN0KSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHVuc2FmZV9nZXRfdXNlcih2ZXJzaW9uLCBcXHUwMDI2c3QtXFx1MDAzZXZlcnNpb24sIG91dCk7XFxuK1xcdGlmICh2ZXJzaW9uIFxcdTAwMjYgMSlcXG4rXFx0XFx0dmVyc2lvbiArPSAxOyAgLyogZmlyc3QgdGltZSB3cml0ZSwgcmFuZG9tIGp1bmsgKi9cXG4rXFxuK1xcdHZlcnNpb24gKz0gMTtcXG4rXFx0dW5zYWZlX3B1dF91c2VyKHZlcnNpb24sIFxcdTAwMjZzdC1cXHUwMDNldmVyc2lvbiwgb3V0KTtcXG4rXFxuK1xcdC8qIFBhaXJzIHdpdGggdGhlIGd1ZXN0IHNpZGUgdmlydF9ybWIoKSBpbiBrdm1fc3RlYWxfY2xvY2soKS4gKi9cXG4rXFx0c21wX3dtYigpO1xcbitcXG4rXFx0dW5zYWZlX2dldF91c2VyKHN0ZWFsLCBcXHUwMDI2c3QtXFx1MDAzZXN0ZWFsLCBvdXQpO1xcbitcXHRzdGVhbCArPSBjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSAtXFxuK1xcdFxcdHZjcHUtXFx1MDAzZWFyY2guc3QubGFzdF9zdGVhbDtcXG4rXFx0dmNwdS1cXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XFxuK1xcdHVuc2FmZV9wdXRfdXNlcihzdGVhbCwgXFx1MDAyNnN0LVxcdTAwM2VzdGVhbCwgb3V0KTtcXG4rXFxuK1xcdHZlcnNpb24gKz0gMTtcXG4rXFx0dW5zYWZlX3B1dF91c2VyKHZlcnNpb24sIFxcdTAwMjZzdC1cXHUwMDNldmVyc2lvbiwgb3V0KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFB1Ymxpc2ggdGhlIHN0ZWFsdGltZSBiZWZvcmUgbWFraW5nIHRoZSB2Q1BVIGxvb2sgcnVubmFibGUgdG9cXG4rXFx0ICogdGhlIGd1ZXN0LlxcbitcXHQgKi9cXG4rXFx0c21wX3dtYigpO1xcbitcXG4gXFx0LypcXG4gXFx0ICogRG9pbmcgYSBUTEIgZmx1c2ggaGVyZSwgb24gdGhlIGd1ZXN0J3MgYmVoYWxmLCBjYW4gYXZvaWRcXG4gXFx0ICogZXhwZW5zaXZlIElQSXMuXFxuQEAgLTM3NTksOSArMzc4OCw2IEBAIHN0YXRpYyB2b2lkIHJlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0dTggc3RfcHJlZW1wdGVkID0gMDtcXG4gXFx0XFx0aW50IGVyciA9IC1FRkFVTFQ7XFxuIFxcbi1cXHRcXHRpZiAoIXVzZXJfYWNjZXNzX2JlZ2luKHN0LCBzaXplb2YoKnN0KSkpXFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFxuIFxcdFxcdGFzbSB2b2xhdGlsZShcXFwiMTogeGNoZ2IgJTAsICUyXFxcXG5cXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcInhvciAlMSwgJTFcXFxcblxcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwiMjpcXFxcblxcXCJcXG5AQCAtMzc4MSwzNyArMzgwNywxNyBAQCBzdGF0aWMgdm9pZCByZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdGlmIChzdF9wcmVlbXB0ZWQgXFx1MDAyNiBLVk1fVkNQVV9GTFVTSF9UTEIpXFxuIFxcdFxcdFxcdGt2bV92Y3B1X2ZsdXNoX3RsYl9ndWVzdCh2Y3B1KTtcXG4gXFxuLVxcdFxcdGlmICghdXNlcl9hY2Nlc3NfYmVnaW4oc3QsIHNpemVvZigqc3QpKSlcXG4tXFx0XFx0XFx0Z290byBkaXJ0eTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0aWYgKCF1c2VyX2FjY2Vzc19iZWdpbihzdCwgc2l6ZW9mKCpzdCkpKVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcbiBcXHRcXHR1bnNhZmVfcHV0X3VzZXIoMCwgXFx1MDAyNnN0LVxcdTAwM2VwcmVlbXB0ZWQsIG91dCk7XFxuIFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guc3QucHJlZW1wdGVkID0gMDtcXG4rXFx0XFx0dXNlcl9hY2Nlc3NfZW5kKCk7XFxuIFxcdH1cXG4gXFxuLVxcdHVuc2FmZV9nZXRfdXNlcih2ZXJzaW9uLCBcXHUwMDI2c3QtXFx1MDAzZXZlcnNpb24sIG91dCk7XFxuLVxcdGlmICh2ZXJzaW9uIFxcdTAwMjYgMSlcXG4tXFx0XFx0dmVyc2lvbiArPSAxOyAgLyogZmlyc3QgdGltZSB3cml0ZSwgcmFuZG9tIGp1bmsgKi9cXG4tXFxuLVxcdHZlcnNpb24gKz0gMTtcXG4tXFx0dW5zYWZlX3B1dF91c2VyKHZlcnNpb24sIFxcdTAwMjZzdC1cXHUwMDNldmVyc2lvbiwgb3V0KTtcXG4tXFxuLVxcdHNtcF93bWIoKTtcXG4tXFxuLVxcdHVuc2FmZV9nZXRfdXNlcihzdGVhbCwgXFx1MDAyNnN0LVxcdTAwM2VzdGVhbCwgb3V0KTtcXG4tXFx0c3RlYWwgKz0gY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkgLVxcbi1cXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnN0Lmxhc3Rfc3RlYWw7XFxuLVxcdHZjcHUtXFx1MDAzZWFyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtXFx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xcbi1cXHR1bnNhZmVfcHV0X3VzZXIoc3RlYWwsIFxcdTAwMjZzdC1cXHUwMDNlc3RlYWwsIG91dCk7XFxuLVxcbi1cXHR2ZXJzaW9uICs9IDE7XFxuLVxcdHVuc2FmZV9wdXRfdXNlcih2ZXJzaW9uLCBcXHUwMDI2c3QtXFx1MDAzZXZlcnNpb24sIG91dCk7XFxuK1xcdG1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KHZjcHUtXFx1MDAzZWt2bSwgZ2hjLVxcdTAwM2VtZW1zbG90LCBncGFfdG9fZ2ZuKGdoYy1cXHUwMDNlZ3BhKSk7XFxuK1xcdHJldHVybjtcXG4gXFxuICBvdXQ6XFxuIFxcdHVzZXJfYWNjZXNzX2VuZCgpO1xcbi0gZGlydHk6XFxuIFxcdG1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KHZjcHUtXFx1MDAzZWt2bSwgZ2hjLVxcdTAwM2VtZW1zbG90LCBncGFfdG9fZ2ZuKGdoYy1cXHUwMDNlZ3BhKSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jXFxuaW5kZXggZjc4Mjc1MTkyMDM2Yi4uNTZhYTQzOTE4MmM3NSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jXFxuKysrIGIva2VybmVsL3NjaGVkL2NvcmUuY1xcbkBAIC04MTYsNiArODE2LDMwIEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9ycV9jbG9ja190YXNrKHN0cnVjdCBycSAqcnEsIHM2NCBkZWx0YSlcXG4gICovXFxuIFxcdHM2NCBfX21heWJlX3VudXNlZCBzdGVhbCA9IDAsIGlycV9kZWx0YSA9IDA7XFxuIFxcbisjaWZkZWYgQ09ORklHX1BBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xcbitcXHRpZiAoc3RhdGljX2tleV9mYWxzZSgoXFx1MDAyNnBhcmF2aXJ0X3N0ZWFsX3JxX2VuYWJsZWQpKSkge1xcbitcXHRcXHRpbnQgcnFfY3B1ID0gY3B1X29mKHJxKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEEgcmVtb3RlIENQVSBjYW4gdXBkYXRlIHRoaXMgcnEgYmVmb3JlIHRoZSBvd25lciB2Q1BVXFxuK1xcdFxcdCAqIGhhcyByZS1lbnRlcmVkIHRoZSBndWVzdCBhbmQgcmVmcmVzaGVkIGl0cyBzdGVhbHRpbWVcXG4rXFx0XFx0ICogc3RhdGUuIERvIG5vdCBjaGFyZ2UgdGhhdCBlbGFwc2VkIHRpbWUgdG8gdGhlIGN1cnJlbnRcXG4rXFx0XFx0ICogdGFzayB1bnRpbCBzdGVhbHRpbWUgY2FuIGJlIHNhbXBsZWQgYWZ0ZXIgdGhlIHZDUFUgaXNcXG4rXFx0XFx0ICogbm8gbG9uZ2VyIHByZWVtcHRlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChycV9jcHUgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgdmNwdV9pc19wcmVlbXB0ZWQocnFfY3B1KSkge1xcbitcXHRcXHRcXHRycS1cXHUwMDNlZGVmZXJyZWRfY2xvY2tfdGFzayArPSBkZWx0YTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAocnEtXFx1MDAzZWRlZmVycmVkX2Nsb2NrX3Rhc2spIHtcXG4rXFx0XFx0XFx0ZGVsdGEgKz0gcnEtXFx1MDAzZWRlZmVycmVkX2Nsb2NrX3Rhc2s7XFxuK1xcdFxcdFxcdHJxLVxcdTAwM2VkZWZlcnJlZF9jbG9ja190YXNrID0gMDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuKyNlbmRpZlxcbitcXG4gI2lmZGVmIENPTkZJR19JUlFfVElNRV9BQ0NPVU5USU5HXFxuIFxcdGlmIChpcnF0aW1lX2VuYWJsZWQoKSkge1xcbiBcXHRcXHRpcnFfZGVsdGEgPSBpcnFfdGltZV9yZWFkKGNwdV9vZihycSkpIC0gcnEtXFx1MDAzZXByZXZfaXJxX3RpbWU7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oIGIva2VybmVsL3NjaGVkL3NjaGVkLmhcXG5pbmRleCBlNjU2YzcwNTliZjg2Li40ZmQwMDIyOGFmZWYwIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oXFxuKysrIGIva2VybmVsL3NjaGVkL3NjaGVkLmhcXG5AQCAtMTMyNSw2ICsxMzI1LDcgQEAgc3RydWN0IHJxIHtcXG4gI2VuZGlmXFxuICNpZmRlZiBDT05GSUdfUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HXFxuIFxcdHU2NFxcdFxcdFxcdHByZXZfc3RlYWxfdGltZV9ycTtcXG4rXFx0dTY0XFx0XFx0XFx0ZGVmZXJyZWRfY2xvY2tfdGFzaztcXG4gI2VuZGlmXFxuIFxcbiBcXHQvKiBjYWxjX2xvYWQgcmVsYXRlZCBmaWVsZHMgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDE6NTE6NTcuNjk5NTQ5OTE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTY1OTkwODg2NDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1wiLFxuICAgIFwiUEFSQVZJUlRfU1BJTkxPQ0tTXCIsXG4gICAgXCJQQVJBVklSVFwiLFxuICAgIFwiSFlQRVJWSVNPUl9HVUVTVFwiLFxuICAgIFwiVklSVFVBTElaQVRJT05cIixcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9zZXRfbXNyX2NvbW1vblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzdGVhbCB0aW1lIGFjY291bnRpbmcgbG9naWMgaW4gS1ZNIGFuZCB0aGUgc2NoZWR1bGVyLiBJdCBjaGFuZ2VzIHRoZSBvcmRlciBvZiB1c2VyIGFjY2VzcyBhbmQgbWVtb3J5IGJhcnJpZXJzIGluIGByZWNvcmRfc3RlYWxfdGltZWAgKEtWTSkgYW5kIGRlZmVycyBjbG9jayB0YXNrIHVwZGF0ZXMgaW4gYHVwZGF0ZV9ycV9jbG9ja190YXNrYCAoc2NoZWR1bGVyKSB3aGVuIHRoZSB2Q1BVIGlzIHByZWVtcHRlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBhbmQgS1ZNIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4gYGt2bV9zZXRfbXNyX2NvbW1vbmAgaGFuZGxlcyB0aGUgTVNSIHdyaXRlIHRoYXQgZW5hYmxlcyBzdGVhbCB0aW1lIGFjY291bnRpbmcgYW5kIHRyaWdnZXJzIHRoZSBLVk0gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg2Njg1ODY3ZDVlOWNmNzA2ZmM4ZDM0MWIwNmYxNzllNjNkZWQ3MWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAwMTo1MTo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggNjk0NjliYmRjODRhOC4uNTI1YTE0NDgxOTVlMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtMzc1MSw2ICszNzUxLDM1IEBAIHN0YXRpYyB2b2lkIHJlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdH1cbiBcbiBcdHN0ID0gKHN0cnVjdCBrdm1fc3RlYWxfdGltZSBfX3VzZXIgKilnaGMtXHUwMDNlaHZhO1xuK1xuK1x0aWYgKCF1c2VyX2FjY2Vzc19iZWdpbihzdCwgc2l6ZW9mKCpzdCkpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR1bnNhZmVfZ2V0X3VzZXIodmVyc2lvbiwgXHUwMDI2c3QtXHUwMDNldmVyc2lvbiwgb3V0KTtcbitcdGlmICh2ZXJzaW9uIFx1MDAyNiAxKVxuK1x0XHR2ZXJzaW9uICs9IDE7ICAvKiBmaXJzdCB0aW1lIHdyaXRlLCByYW5kb20ganVuayAqL1xuK1xuK1x0dmVyc2lvbiArPSAxO1xuK1x0dW5zYWZlX3B1dF91c2VyKHZlcnNpb24sIFx1MDAyNnN0LVx1MDAzZXZlcnNpb24sIG91dCk7XG4rXG4rXHQvKiBQYWlycyB3aXRoIHRoZSBndWVzdCBzaWRlIHZpcnRfcm1iKCkgaW4ga3ZtX3N0ZWFsX2Nsb2NrKCkuICovXG4rXHRzbXBfd21iKCk7XG4rXG4rXHR1bnNhZmVfZ2V0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuK1x0c3RlYWwgKz0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSAtXG4rXHRcdHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsO1xuK1x0dmNwdS1cdTAwM2VhcmNoLnN0Lmxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuK1x0dW5zYWZlX3B1dF91c2VyKHN0ZWFsLCBcdTAwMjZzdC1cdTAwM2VzdGVhbCwgb3V0KTtcbitcbitcdHZlcnNpb24gKz0gMTtcbitcdHVuc2FmZV9wdXRfdXNlcih2ZXJzaW9uLCBcdTAwMjZzdC1cdTAwM2V2ZXJzaW9uLCBvdXQpO1xuK1xuK1x0LypcbitcdCAqIFB1Ymxpc2ggdGhlIHN0ZWFsdGltZSBiZWZvcmUgbWFraW5nIHRoZSB2Q1BVIGxvb2sgcnVubmFibGUgdG9cbitcdCAqIHRoZSBndWVzdC5cbitcdCAqL1xuK1x0c21wX3dtYigpO1xuK1xuIFx0LypcbiBcdCAqIERvaW5nIGEgVExCIGZsdXNoIGhlcmUsIG9uIHRoZSBndWVzdCdzIGJlaGFsZiwgY2FuIGF2b2lkXG4gXHQgKiBleHBlbnNpdmUgSVBJcy5cbkBAIC0zNzU5LDkgKzM3ODgsNiBAQCBzdGF0aWMgdm9pZCByZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHU4IHN0X3ByZWVtcHRlZCA9IDA7XG4gXHRcdGludCBlcnIgPSAtRUZBVUxUO1xuIFxuLVx0XHRpZiAoIXVzZXJfYWNjZXNzX2JlZ2luKHN0LCBzaXplb2YoKnN0KSkpXG4tXHRcdFx0cmV0dXJuO1xuLVxuIFx0XHRhc20gdm9sYXRpbGUoXCIxOiB4Y2hnYiAlMCwgJTJcXG5cIlxuIFx0XHRcdCAgICAgXCJ4b3IgJTEsICUxXFxuXCJcbiBcdFx0XHQgICAgIFwiMjpcXG5cIlxuQEAgLTM3ODEsMzcgKzM4MDcsMTcgQEAgc3RhdGljIHZvaWQgcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRpZiAoc3RfcHJlZW1wdGVkIFx1MDAyNiBLVk1fVkNQVV9GTFVTSF9UTEIpXG4gXHRcdFx0a3ZtX3ZjcHVfZmx1c2hfdGxiX2d1ZXN0KHZjcHUpO1xuIFxuLVx0XHRpZiAoIXVzZXJfYWNjZXNzX2JlZ2luKHN0LCBzaXplb2YoKnN0KSkpXG4tXHRcdFx0Z290byBkaXJ0eTtcbiBcdH0gZWxzZSB7XG4tXHRcdGlmICghdXNlcl9hY2Nlc3NfYmVnaW4oc3QsIHNpemVvZigqc3QpKSlcbi1cdFx0XHRyZXR1cm47XG4tXG4gXHRcdHVuc2FmZV9wdXRfdXNlcigwLCBcdTAwMjZzdC1cdTAwM2VwcmVlbXB0ZWQsIG91dCk7XG4gXHRcdHZjcHUtXHUwMDNlYXJjaC5zdC5wcmVlbXB0ZWQgPSAwO1xuK1x0XHR1c2VyX2FjY2Vzc19lbmQoKTtcbiBcdH1cbiBcbi1cdHVuc2FmZV9nZXRfdXNlcih2ZXJzaW9uLCBcdTAwMjZzdC1cdTAwM2V2ZXJzaW9uLCBvdXQpO1xuLVx0aWYgKHZlcnNpb24gXHUwMDI2IDEpXG4tXHRcdHZlcnNpb24gKz0gMTsgIC8qIGZpcnN0IHRpbWUgd3JpdGUsIHJhbmRvbSBqdW5rICovXG4tXG4tXHR2ZXJzaW9uICs9IDE7XG4tXHR1bnNhZmVfcHV0X3VzZXIodmVyc2lvbiwgXHUwMDI2c3QtXHUwMDNldmVyc2lvbiwgb3V0KTtcbi1cbi1cdHNtcF93bWIoKTtcbi1cbi1cdHVuc2FmZV9nZXRfdXNlcihzdGVhbCwgXHUwMDI2c3QtXHUwMDNlc3RlYWwsIG91dCk7XG4tXHRzdGVhbCArPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5IC1cbi1cdFx0dmNwdS1cdTAwM2VhcmNoLnN0Lmxhc3Rfc3RlYWw7XG4tXHR2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4tXHR1bnNhZmVfcHV0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuLVxuLVx0dmVyc2lvbiArPSAxO1xuLVx0dW5zYWZlX3B1dF91c2VyKHZlcnNpb24sIFx1MDAyNnN0LVx1MDAzZXZlcnNpb24sIG91dCk7XG4rXHRtYXJrX3BhZ2VfZGlydHlfaW5fc2xvdCh2Y3B1LVx1MDAzZWt2bSwgZ2hjLVx1MDAzZW1lbXNsb3QsIGdwYV90b19nZm4oZ2hjLVx1MDAzZWdwYSkpO1xuK1x0cmV0dXJuO1xuIFxuICBvdXQ6XG4gXHR1c2VyX2FjY2Vzc19lbmQoKTtcbi0gZGlydHk6XG4gXHRtYXJrX3BhZ2VfZGlydHlfaW5fc2xvdCh2Y3B1LVx1MDAzZWt2bSwgZ2hjLVx1MDAzZW1lbXNsb3QsIGdwYV90b19nZm4oZ2hjLVx1MDAzZWdwYSkpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuY1xuaW5kZXggZjc4Mjc1MTkyMDM2Yi4uNTZhYTQzOTE4MmM3NSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmNcbisrKyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcbkBAIC04MTYsNiArODE2LDMwIEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9ycV9jbG9ja190YXNrKHN0cnVjdCBycSAqcnEsIHM2NCBkZWx0YSlcbiAgKi9cbiBcdHM2NCBfX21heWJlX3VudXNlZCBzdGVhbCA9IDAsIGlycV9kZWx0YSA9IDA7XG4gXG4rI2lmZGVmIENPTkZJR19QQVJBVklSVF9USU1FX0FDQ09VTlRJTkdcbitcdGlmIChzdGF0aWNfa2V5X2ZhbHNlKChcdTAwMjZwYXJhdmlydF9zdGVhbF9ycV9lbmFibGVkKSkpIHtcbitcdFx0aW50IHJxX2NwdSA9IGNwdV9vZihycSk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIEEgcmVtb3RlIENQVSBjYW4gdXBkYXRlIHRoaXMgcnEgYmVmb3JlIHRoZSBvd25lciB2Q1BVXG4rXHRcdCAqIGhhcyByZS1lbnRlcmVkIHRoZSBndWVzdCBhbmQgcmVmcmVzaGVkIGl0cyBzdGVhbHRpbWVcbitcdFx0ICogc3RhdGUuIERvIG5vdCBjaGFyZ2UgdGhhdCBlbGFwc2VkIHRpbWUgdG8gdGhlIGN1cnJlbnRcbitcdFx0ICogdGFzayB1bnRpbCBzdGVhbHRpbWUgY2FuIGJlIHNhbXBsZWQgYWZ0ZXIgdGhlIHZDUFUgaXNcbitcdFx0ICogbm8gbG9uZ2VyIHByZWVtcHRlZC5cbitcdFx0ICovXG4rXHRcdGlmIChycV9jcHUgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHZjcHVfaXNfcHJlZW1wdGVkKHJxX2NwdSkpIHtcbitcdFx0XHRycS1cdTAwM2VkZWZlcnJlZF9jbG9ja190YXNrICs9IGRlbHRhO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1xuK1x0XHRpZiAocnEtXHUwMDNlZGVmZXJyZWRfY2xvY2tfdGFzaykge1xuK1x0XHRcdGRlbHRhICs9IHJxLVx1MDAzZWRlZmVycmVkX2Nsb2NrX3Rhc2s7XG4rXHRcdFx0cnEtXHUwMDNlZGVmZXJyZWRfY2xvY2tfdGFzayA9IDA7XG4rXHRcdH1cbitcdH1cbisjZW5kaWZcbitcbiAjaWZkZWYgQ09ORklHX0lSUV9USU1FX0FDQ09VTlRJTkdcbiBcdGlmIChpcnF0aW1lX2VuYWJsZWQoKSkge1xuIFx0XHRpcnFfZGVsdGEgPSBpcnFfdGltZV9yZWFkKGNwdV9vZihycSkpIC0gcnEtXHUwMDNlcHJldl9pcnFfdGltZTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvc2NoZWQuaCBiL2tlcm5lbC9zY2hlZC9zY2hlZC5oXG5pbmRleCBlNjU2YzcwNTliZjg2Li40ZmQwMDIyOGFmZWYwIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL3NjaGVkLmhcbisrKyBiL2tlcm5lbC9zY2hlZC9zY2hlZC5oXG5AQCAtMTMyNSw2ICsxMzI1LDcgQEAgc3RydWN0IHJxIHtcbiAjZW5kaWZcbiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xuIFx0dTY0XHRcdFx0cHJldl9zdGVhbF90aW1lX3JxO1xuK1x0dTY0XHRcdFx0ZGVmZXJyZWRfY2xvY2tfdGFzaztcbiAjZW5kaWZcbiBcbiBcdC8qIGNhbGNfbG9hZCByZWxhdGVkIGZpZWxkcyAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDE6NTE6NTcuNjk5NTUxMjg1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ3NDU5NDg5NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGhpcyBQYXRjaDogSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLCBhbmQgaXQncyBtYWtpbmcgc29tZSBjaGFuZ2VzIHRvIGBhcmNoL3g4Ni9rdm0veDg2LmNgIGFuZCBga2VybmVsL3NjaGVkL2NvcmUuY2AuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBgcmVjb3JkX3N0ZWFsX3RpbWVgIGluIEtWTSBpcyBnZXR0aW5nIGEgY2FsbC1vcmRlciBzaHVmZmxlIHdpdGggYHVzZXJfYWNjZXNzX2JlZ2luYCBhbmQgdGhvc2UgdW5zYWZlIG1lbW9yeSBhY2Nlc3NlcywgYW5kIHRoZW4gdGhlIHNjaGVkdWxlciBjb2RlLCBgdXBkYXRlX3JxX2Nsb2NrX3Rhc2tgLCBpcyBnZXR0aW5nIHR3ZWFrZWQgdG8gaGFuZGxlIGRlZmVycmluZyBjbG9jayB1cGRhdGVzIHdoZW4gdGhlcmUncyBhIHJlbW90ZSBDUFUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcnVucXVldWUuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgKnllcyosIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBXZSdyZSB0YWxraW5nIGFib3V0IGNvcmUga2VybmVsIGxvZ2ljIGhlcmUg4oCTIHRoZSBzY2hlZHVsZXIgYW5kIEtWTSwgYm90aCBhcmUgcHJldHR5IGNlbnRyYWwgYW5kIGdldCBoYW1tZXJlZCBwcmV0dHkgaGFyZC4gVGhhdCdzIGEgaGlnaCBzaWduYWwtdG8tbm9pc2UgcmF0aW8uIFRoZXkncmUgYm90aCBoaWdobHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiBcblxuTm93LCBsZXQncyBuYWlsIGRvd24gd2hhdCBmdW5jdGlvbnMgdG8gdGFyZ2V0IGRpcmVjdGx5LiBGcm9tIHRoZSBwYXRjaCB0ZXh0LCBJIHdhbnQgdG8gZm9jdXMgb246XG5cbiogICBgcmVjb3JkX3N0ZWFsX3RpbWVgIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBJdCdzIGBzdGF0aWNgLCBidXQgSSdtIGJldHRpbmcgaXQncyBjYWxsZWQgZnJvbSBzb21ldGhpbmcgbGlrZSBga3ZtX2FyY2hfdmNwdV9sb2FkYCBvciBzb21ldGhpbmcgc2ltaWxhciwgaXQgd2lsbCBuZWVkIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cbiogICBgdXBkYXRlX3JxX2Nsb2NrX3Rhc2tgIGluIGBrZXJuZWwvc2NoZWQvY29yZS5jYCDigJMgYWxzbyBgc3RhdGljYCwgYnV0IGNhbGxlZCBmcm9tIHRoZSBgdXBkYXRlX3JxX2Nsb2NrYCBmdW5jdGlvbi5cblxuVGltZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNhbGxlcnMgb2YgYHJlY29yZF9zdGVhbF90aW1lYC4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBoaXR0aW5nIHRoYXQgY29kZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTAyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDE6NTk6MjUuMTU5MDQzNzAyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDEzNzU4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWNvcmRfc3RlYWxfdGltZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTM3MTg9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXJ2aWNlX2xvY2FsX3RsYl9mbHVzaF9yZXF1ZXN0cyk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTM3MTktXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjM3MjA6c3RhdGljIHZvaWQgcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ODYuYy0zNzIxLXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMTExOD1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMjA4LVxcdFxcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1NURUFMX1VQREFURSwgdmNwdSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjExMjA5OlxcdFxcdFxcdHJlY29yZF9zdGVhbF90aW1lKHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMTIxMC1cXHRcXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9QTVUsIHZjcHUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMTo1OToyNS42NzMxODY4NjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODYzMTA2NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipUcmFjaW5nIHRoZSBTb3VyY2Ugb2YgYHJlY29yZF9zdGVhbF90aW1lYCoqXG5cbk9rYXksIHNvIGByZWNvcmRfc3RlYWxfdGltZWAgaXMgYmVpbmcgY2FsbGVkIHNvbWV3aGVyZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwYXRoLiBUaGUgdGV4dCB0ZWxscyBtZSBpdCBvcmlnaW5hdGVzIGZyb20gYHZjcHVfZW50ZXJfZ3Vlc3RgLiBOb3csIGB2Y3B1X2VudGVyX2d1ZXN0YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIGZpbGUgaXQncyBkZWZpbmVkIGluLCBtYWtpbmcgdGhlIHNlYXJjaCBhIGJpdCBlYXNpZXIuIEkgYWxzbyBzZWUgdGhhdCBpdCBpcyBjYWxsZWQgZnJvbSBgdmNwdV9ydW5gLiBBaCBoYSwgYHZjcHVfcnVuYCBvciBtYXliZSBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBUaGF0IG5hcnJvd3MgaXQgZG93biBjb25zaWRlcmFibHkuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgY2FsbCBzdGFja3Mgb2YgZWl0aGVyIG9mIHRob3NlIHR3byBmdW5jdGlvbnMuIFRpbWUgdG8gbG9vayBmb3IgdGhlIG5leHQgY2x1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ3MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAxOjU5OjI5LjUzNjI5NjcyNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzUwMjU1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2Y3B1X2VudGVyX2d1ZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9OTA2PXZvaWQga3ZtX3JlcXVldWVfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IG5yLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTkxMi1cXHQgKiBpbmplY3Rpb24gd2FzIGJsb2NrZWQgYnkgbmVzdGVkX3J1bl9wZW5kaW5nLiAgSW4gdGhhdCBjYXNlLCBob3dldmVyLFxcbmFyY2gveDg2L2t2bS94ODYuYzo5MTM6XFx0ICogdmNwdV9lbnRlcl9ndWVzdCgpIHJlcXVlc3RzIGFuIGltbWVkaWF0ZSBleGl0LCBhbmQgdGhlIGd1ZXN0XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTkxNC1cXHQgKiBzaG91bGRuJ3QgcHJvY2VlZCBmYXIgZW5vdWdoIHRvIG5lZWQgcmVpbmplY3Rpb24uXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MzY5OD1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfZmx1c2hfdGxiX2N1cnJlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTM3MDUtICogU2VydmljZSBcXFwibG9jYWxcXFwiIFRMQiBmbHVzaCByZXF1ZXN0cywgd2hpY2ggYXJlIHNwZWNpZmljIHRvIHRoZSBjdXJyZW50IE1NVVxcbmFyY2gveDg2L2t2bS94ODYuYzozNzA2OiAqIGNvbnRleHQuICBJbiBhZGRpdGlvbiB0byB0aGUgZ2VuZXJpYyBldmVudCBoYW5kbGluZyBpbiB2Y3B1X2VudGVyX2d1ZXN0KCksXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTM3MDctICogVExCIGZsdXNoZXMgdGhhdCBhcmUgdGFyZ2V0ZWQgYXQgYW4gTU1VIGNvbnRleHQgYWxzbyBuZWVkIHRvIGJlIHNlcnZpY2VkXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA5NjA9dm9pZCBfX2t2bV9zZXRfb3JfY2xlYXJfYXBpY3ZfaW5oaWJpdChzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA5ODAtXFx0XFx0ICogS2ljayBhbGwgdkNQVXMgYmVmb3JlIHNldHRpbmcgYXBpY3ZfaW5oaWJpdF9yZWFzb25zIHRvIGF2b2lkXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwOTgxOlxcdFxcdCAqIGZhbHNlIHBvc2l0aXZlcyBpbiB0aGUgc2FuaXR5IGNoZWNrIFdBUk4gaW4gdmNwdV9lbnRlcl9ndWVzdCgpLlxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDk4Mi1cXHRcXHQgKiBUaGlzIHRhc2sgd2lsbCB3YWl0IGZvciBhbGwgdkNQVXMgdG8gYWNrIHRoZSBraWNrIElSUSBiZWZvcmVcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDk4NC1cXHRcXHQgKiBibG9jayBvbiBhY3F1aXJpbmcgYXBpY3ZfdXBkYXRlX2xvY2sgc28gdGhhdCB2Q1BVcyBjYW4ndFxcbmFyY2gveDg2L2t2bS94ODYuYzoxMDk4NTpcXHRcXHQgKiByZWRvIHZjcHVfZW50ZXJfZ3Vlc3QoKSB3aXRob3V0IHNlZWluZyB0aGUgbmV3IGluaGliaXQgc3RhdGUuXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwOTg2LVxcdFxcdCAqXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTExMDQ9c3RhdGljIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX2FwaWNfYWNjZXNzX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMTE3LSAqL1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMTExODpzdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTExOS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTE2OTg9c3RhdGljIGludCB2Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE3MTItXFx0XFx0aWYgKGt2bV92Y3B1X3J1bm5pbmcodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTE3MTM6XFx0XFx0XFx0ciA9IHZjcHVfZW50ZXJfZ3Vlc3QodmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNzE0LVxcdFxcdH0gZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAxOjU5OjI5LjU4MzgxMTg5MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzgwODIwOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipNeSBMaW5lIG9mIFJlYXNvbmluZyB3aXRoIHZjcHVfcnVuKipcblxuQWxyaWdodCwgc28gdGhlIGNhbGwgZmxvdyBoZXJlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBpdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSBzZWUgYHZjcHVfcnVuYCBhcyB0aGUgY29yZSBleGVjdXRpb24gZW50cnkgcG9pbnQgZm9yIGEgdmlydHVhbCBDUFUuIFRoZSBpbXBvcnRhbnQgcGFydCBpcyAqaG93KiB3ZSdyZSBnZXR0aW5nIHRvIHRoYXQgZnVuY3Rpb24gY2FsbC5cblxuSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhhdCBgdmNwdV9ydW5gIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAuIFRoYXQgbmFtaW5nIGNvbnZlbnRpb24gaXMgYSBiaWcgaGludC4gSSBpbW1lZGlhdGVseSBrbm93IHRoZSBnZW5lcmFsIHByb2Nlc3MgZmxvdyBhbmQgd2hlcmUgbXkgYXR0ZW50aW9uIG5lZWRzIHRvIGZvY3VzIGlmIEkgZW5jb3VudGVyIGlzc3Vlcywgb3Igd2FudCB0byBsb29rIGludG8gcGVyZm9ybWFuY2UgYXNwZWN0cy4gVGhpcyBgaW9jdGxfcnVuYCBzdWdnZXN0cyB0aGF0IHRoZSBLVk0gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgYW5kIGluaXRpYXRpbmcgdGhlIHZDUFUncyBleGVjdXRpb24gYmFzZWQgb24gYSBzcGVjaWZpYyB1c2VyLXNwYWNlIHJlcXVlc3Qgb3IgY29tbWFuZCB0aGF0IGhhcyBiZWVuIHBhc3NlZCB0byBpdCwgbGlrZWx5IHRocm91Z2ggYSBzeXN0ZW0gY2FsbCBsaWtlIGBpb2N0bGAuXG5cblNvLCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGlzIGFsbW9zdCBjZXJ0YWlubHkgaGFuZGxpbmcgc29tZSBpbml0aWFsIHNldHVwLCBwb3RlbnRpYWxseSBjaGVja2luZyB0aGUgcmVxdWVzdGVkIHJ1biBwYXJhbWV0ZXJzLCBtYXliZSBzZXR0aW5nIHVwIHJlZ2lzdGVycyBvciBvdGhlciBhcmNoaXRlY3R1cmFsIHN0YXRlLCBhbmQgdGhlbiBjYWxsaW5nIGB2Y3B1X3J1bmAgdG8gYWN0dWFsbHkgZ2V0IHRoZSB2Q1BVIGV4ZWN1dGluZy4gSSBpbW1lZGlhdGVseSBrbm93IHRoYXQgYW55IGxhdGVuY3kgaW50cm9kdWNlZCBieSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHJvdXRpbmVzIGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAgd2lsbCBkaXJlY3RseSBpbXBhY3QgdGhlIHNwZWVkIHdpdGggd2hpY2ggdGhlIHZDUFUgd2lsbCBhY3R1YWxseSBiZWdpbiBwcm9jZXNzaW5nIGluc3RydWN0aW9ucywgc28gYW55IHByb2ZpbGluZyBvciBhbmFseXNpcyBvZiBleGVjdXRpb24gbGF0ZW5jaWVzIHdpbGwgbmVlZCB0byBmYWN0b3IgaW4gdGhpcyBjcnVjaWFsIGluaXRpYWwgc2V0dXAgcGhhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MzgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMTo1OTozNC45NjE5MDA2NTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxNDE4NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmNwdV9ydW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz0yNDI4PXN0YXRpYyB2b2lkIGt2bV93cml0ZV9zeXN0ZW1fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IHN5c3RlbV90aW1lLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTI0MzMtXFx0aWYgKHZjcHUtXFx1MDAzZXZjcHVfaWQgPT0gMCBcXHUwMDI2XFx1MDAyNiAhaG9zdF9pbml0aWF0ZWQpIHtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MjQzNDpcXHRcXHRpZiAoa2EtXFx1MDAzZWJvb3RfdmNwdV9ydW5zX29sZF9rdm1jbG9jayAhPSBvbGRfbXNyKVxcbmFyY2gveDg2L2t2bS94ODYuYy0yNDM1LVxcdFxcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9NQVNURVJDTE9DS19VUERBVEUsIHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0yNDM2LVxcbmFyY2gveDg2L2t2bS94ODYuYzoyNDM3OlxcdFxcdGthLVxcdTAwM2Vib290X3ZjcHVfcnVuc19vbGRfa3ZtY2xvY2sgPSBvbGRfbXNyO1xcbmFyY2gveDg2L2t2bS94ODYuYy0yNDM4LVxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0zMDk2PXN0YXRpYyB2b2lkIHB2Y2xvY2tfdXBkYXRlX3ZtX2d0b2RfY29weShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzExNi1cXHRcXHRcXHRcXHRcXHUwMDI2XFx1MDAyNiAha2EtXFx1MDAzZWJhY2t3YXJkc190c2Nfb2JzZXJ2ZWRcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MzExNzpcXHRcXHRcXHRcXHRcXHUwMDI2XFx1MDAyNiAha2EtXFx1MDAzZWJvb3RfdmNwdV9ydW5zX29sZF9rdm1jbG9jaztcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzExOC1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz01MjI5PXN0YXRpYyB2b2lkIGt2bV9zdGVhbF90aW1lX3NldF9wcmVlbXB0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyMzktXFx0ICogYW4gaW5zdHJ1Y3Rpb24gYm91bmRhcnkgYW5kIHdpbGwgbm90IHRyaWdnZXIgZ3Vlc3QgZW11bGF0aW9uIG9mIGFueVxcbmFyY2gveDg2L2t2bS94ODYuYzo1MjQwOlxcdCAqIGtpbmQgKHNlZSB2Y3B1X3J1bikuICBWZW5kb3Igc3BlY2lmaWMgY29kZSBjb250cm9scyAoY29uc2VydmF0aXZlbHkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyNDEtXFx0ICogd2hlbiB0aGlzIGlzIHRydWUsIGZvciBleGFtcGxlIGFsbG93aW5nIHRoZSB2Q1BVIHRvIGJlIG1hcmtlZFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTExMTA0PXN0YXRpYyB2b2lkIGt2bV92Y3B1X3JlbG9hZF9hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTExMy0gKiBDYWxsZWQgd2l0aGluIGt2bS1cXHUwMDNlc3JjdSByZWFkIHNpZGUuXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjExMTE0OiAqIFJldHVybnMgMSB0byBsZXQgdmNwdV9ydW4oKSBjb250aW51ZSB0aGUgZ3Vlc3QgZXhlY3V0aW9uIGxvb3Agd2l0aG91dFxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTExNS0gKiBleGl0aW5nIHRvIHRoZSB1c2Vyc3BhY2UuICBPdGhlcndpc2UsIHRoZSB2YWx1ZSB3aWxsIGJlIHJldHVybmVkIHRvIHRoZVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTExMTE4PXN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE0MzEtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjExNDMyOlxcdFxcdGV4aXRfZmFzdHBhdGggPSBrdm1feDg2X2NhbGwodmNwdV9ydW4pKHZjcHUsIHJ1bl9mbGFncyk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNDMzLVxcdFxcdGlmIChsaWtlbHkoZXhpdF9mYXN0cGF0aCAhPSBFWElUX0ZBU1RQQVRIX1JFRU5URVJfR1VFU1QpKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNTY4LVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMTU2OTpzdGF0aWMgYm9vbCBrdm1fdmNwdV9ydW5uaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE1NzAte1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTExNjIxPUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fdmNwdV9oYXNfZXZlbnRzKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE2MjItXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjExNjIzOmludCBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE2MjQte1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMTYyNTpcXHRyZXR1cm4ga3ZtX3ZjcHVfcnVubmluZyh2Y3B1KSB8fCB2Y3B1LVxcdTAwM2VhcmNoLnB2LnB2X3VuaGFsdGVkIHx8XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNjI2LVxcdCAgICAgICBrdm1fdmNwdV9oYXNfZXZlbnRzKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTExNjMwPXN0YXRpYyBpbmxpbmUgaW50IHZjcHVfYmxvY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNjMzLVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMTYzNDpcXHRpZiAoIWt2bV9hcmNoX3ZjcHVfcnVubmFibGUodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE2MzUtXFx0XFx0LypcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTY2MC1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTE2NjE6XFx0XFx0aWYgKCFrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHZjcHUpKVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTY2Mi1cXHRcXHRcXHRyZXR1cm4gMTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTY5Ny0vKiBDYWxsZWQgd2l0aGluIGt2bS1cXHUwMDNlc3JjdSByZWFkIHNpZGUuICAqL1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMTY5ODpzdGF0aWMgaW50IHZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE2OTkte1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNzExLVxcdFxcdHZjcHUtXFx1MDAzZWFyY2guYXRfaW5zdHJ1Y3Rpb25fYm91bmRhcnkgPSBmYWxzZTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTE3MTI6XFx0XFx0aWYgKGt2bV92Y3B1X3J1bm5pbmcodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE3MTMtXFx0XFx0XFx0ciA9IHZjcHVfZW50ZXJfZ3Vlc3QodmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTE3ODY9ZmFzdHBhdGhfdCBoYW5kbGVfZmFzdHBhdGhfaGx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTc5My1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTE3OTQ6XFx0aWYgKGt2bV92Y3B1X3J1bm5pbmcodmNwdSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNzk1LVxcdFxcdHJldHVybiBFWElUX0ZBU1RQQVRIX1JFRU5URVJfR1VFU1Q7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTE5MTI9c3RhdGljIHZvaWQga3ZtX2xvYWRfZ3Vlc3RfZnB1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTkyMS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTE5MjI6LyogV2hlbiB2Y3B1X3J1biBlbmRzLCByZXN0b3JlIHVzZXIgc3BhY2UgRlBVIGNvbnRleHQuICovXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExOTIzLXN0YXRpYyB2b2lkIGt2bV9wdXRfZ3Vlc3RfZnB1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMTk2Mj1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEyMDY3LVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMjA2ODpcXHRyID0gdmNwdV9ydW4odmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEyMDY5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMTo1OTozNS4wMTAwNDY5MzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjQwNzMwNzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtWTSBTdGVhbCBUaW1lIFJlcG9ydGluZyoqXG5cbk9rYXksIHNvIEkndmUgdHJhY2VkIHRoZSBLVk0gZXhlY3V0aW9uIHBhdGggcmVsYXRlZCB0byBzdGVhbCB0aW1lLiBTdGFydGluZyB3aXRoIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIHRoYXQncyB0aGUgZW50cnkgcG9pbnQsIHRoZSBmaXJzdCBwbGFjZSBJIG5lZWQgdG8gbG9vay4gSXQgbG9va3MgbGlrZSB0aGUgcmVsZXZhbnQgS1ZNIGNoYW5nZSBJIG5lZWQgdG8gYW5hbHl6ZSBpcyBoYXBwZW5pbmcgd2l0aGluIGByZWNvcmRfc3RlYWxfdGltZWAuIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCwgYXMgSSBzZWUgaXQsIHRocm91Z2ggYSBjaGFpbiBvZiBjYWxscy4gSXQgZ29lcyBmcm9tIGB2Y3B1X2VudGVyX2d1ZXN0YCwgd2hpY2ggaXRzZWxmIGlzIGNhbGxlZCBieSBgdmNwdV9ydW5gLCBhbmQgZmluYWxseSB0aGF0IG9yaWdpbmF0ZXMgZnJvbSBvdXIgZW50cnkgcG9pbnQsIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAuIFRoYXQncyBhIHNvbGlkLCBpZGVudGlmaWFibGUsIGFuZCB0ZXN0YWJsZSBleGVjdXRpb24gZmxvdy4gSSBjYW4gZGVmaW5pdGVseSBjb25zdHJ1Y3QgYSB0ZXN0IGNhc2UgdG8gaXNvbGF0ZSBhbmQgdmVyaWZ5IHRoaXMuXG5cbkZ1cnRoZXJtb3JlLCBJIGFsc28gbm90ZWQgYSByZWxldmFudCBtb2RpZmljYXRpb24gaW4gYGtlcm5lbC9zY2hlZC9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AgZnVuY3Rpb24uIEkgd2lsbCBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGRlbHZlIGRlZXBlciBpbnRvIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBLVk0gYW5kIHRoZSBzY2hlZHVsZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDE6NTk6NDAuMjUwNzgwMDU5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTAyMTMxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1cGRhdGVfcnFfY2xvY2tfdGFza1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvc2NoZWQvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9zY2hlZC9jb3JlLmM9ODA4PXN0cnVjdCBzdGF0aWNfa2V5IHBhcmF2aXJ0X3N0ZWFsX3JxX2VuYWJsZWQ7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTgxMC1cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjgxMTpzdGF0aWMgdm9pZCB1cGRhdGVfcnFfY2xvY2tfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzNjQgZGVsdGEpXFxua2VybmVsL3NjaGVkL2NvcmUuYy04MTIte1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz04OTQ9dm9pZCB1cGRhdGVfcnFfY2xvY2soc3RydWN0IHJxICpycSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTE1LVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6OTE2OlxcdHVwZGF0ZV9ycV9jbG9ja190YXNrKHJxLCBkZWx0YSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy05MTctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMTo1OTo0MC4yOTk4MDY0NjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM1MzM1NzY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNjaGVkdWxlcidzIENsb2NrIFVwZGF0ZSBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBgdXBkYXRlX3JxX2Nsb2NrYCBzZWVtcyB0byBiZSBhIHJlYWwgd29ya2hvcnNlLCBnZXR0aW5nIGNhbGxlZCBmcm9tIGFsbCBjb3JuZXJzIG9mIHRoZSBzY2hlZHVsZXIuIEludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNsb2NrIHVwZGF0ZSBtZWNoYW5pc20gd29ya3MgYXQgYSBncmFudWxhciBsZXZlbC4gSSBub3RpY2UgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiDigJMgYSBgI2lmZGVmIENPTkZJR19QQVJBVklSVF9USU1FX0FDQ09VTlRJTkdgIHByb3RlY3RpbmcgYSBjaGFuZ2UgaW4gYHVwZGF0ZV9ycV9jbG9ja190YXNrYC4gVGhhdCdzIGEga2V5IGNsdWUuIE15IGV4cGVydCBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGlzIHJlbGF0ZXMgdG8gdmlydHVhbGl6YXRpb24gYW5kIGhvdyB0aW1lIGlzIGhhbmRsZWQgaW4gdGhvc2UgZW52aXJvbm1lbnRzLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5NeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIHZlcmlmeSB0aGUgZGVmaW5pdGlvbiBhbmQgcHVycG9zZSBvZiBgQ09ORklHX1BBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AuIEkgd2FudCB0byBzZWUgZXhhY3RseSAqd2hhdCogdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBlbmFibGVzIG9yIGRpc2FibGVzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBjcnVjaWFsIGNvbnRleHQ6IElzIGl0IGFib3V0IGd1ZXN0IHRpbWUgYWNjb3VudGluZz8gUHJlY2lzZSB0aW1lIHN5bmNocm9uaXphdGlvbj8gT3Igc29tZSBvdGhlciBhc3BlY3Qgb2YgdmlydHVhbGl6ZWQgdGltaW5nPyBLbm93aW5nIHRoZSB1bmRlcmx5aW5nIHB1cnBvc2Ugb2YgdGhlIGNvbmZpZyBvcHRpb24gaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWMgY29kZSBibG9jaydzIGJlaGF2aW9yIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGUgdGltaW5nIHVwZGF0ZSBjaGFuZ2VzLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MjcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMTo1OTo0NC42NTMxNjYxOTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzAwMzI0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vS2NvbmZpZz0xMzM1PWNvbmZpZyBQQVJBVklSVFxcbi0tXFxuYXJjaC9hcm0vS2NvbmZpZy0xMzQyLVxcbmFyY2gvYXJtL0tjb25maWc6MTM0Mzpjb25maWcgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HXFxuYXJjaC9hcm0vS2NvbmZpZy0xMzQ0LVxcdGJvb2wgXFxcIlBhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1xcXCJcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZz0xNjYzPWNvbmZpZyBQQVJBVklSVFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTE2NzAtXFxuYXJjaC9hcm02NC9LY29uZmlnOjE2NzE6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNjcyLVxcdGJvb2wgXFxcIlBhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1xcXCJcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9NzQ2PWNvbmZpZyBQQVJBVklSVFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy03NTUtXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo3NTY6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNzU3LVxcdGJvb2wgXFxcIlBhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnPTMzPWNvbmZpZyBQQVJBVklSVF9TUElOTE9DS1NcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnLTM1LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnOjM2OmNvbmZpZyBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZy0zNy1cXHRzZWxlY3QgUEFSQVZJUlRcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZz0xMTQ4PWNvbmZpZyBQQVJBVklSVFxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTExNTYtXFxuYXJjaC9yaXNjdi9LY29uZmlnOjExNTc6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMTU4LVxcdGJvb2wgXFxcIlBhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1xcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9ODUxPWNvbmZpZyBQVkhcXG4tLVxcbmFyY2gveDg2L0tjb25maWctODU2LVxcbmFyY2gveDg2L0tjb25maWc6ODU3OmNvbmZpZyBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdcXG5hcmNoL3g4Ni9LY29uZmlnLTg1OC1cXHRib29sIFxcXCJQYXJhdmlydHVhbCBzdGVhbCB0aW1lIGFjY291bnRpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAxOjU5OjQ2LjQ4MzIxMTk4MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ1MjI2MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gTXVzaW5ncyoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiBgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HYCBoZXJlLiBUaGF0IGxvb2tzIGxpa2UgdGhlIGtleSBjb25maWcgb3B0aW9uIHdlIG5lZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgdGhhdCBnZXRzIGluY2x1ZGVkIGluIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gSXQganVzdCBtYWtlcyBzZW5zZSwgcmlnaHQ/IEJ1dCBoYW5nIG9uIGEgbWludXRlLi4uIHdhc24ndCB0aGVyZSBzb21ldGhpbmcgYWJvdXQgZGVwZW5kZW5jaWVzIGZvciB0aGF0IG9uIHg4Nj8gSSB2YWd1ZWx5IHJlbWVtYmVyIGBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdgIHJlbHlpbmcgb24gYFBBUkFWSVJUYCBpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gSSdkIGJldHRlciBkb3VibGUgY2hlY2sgdGhhdCBxdWlja2x5LiBUaGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoYXQgaXMgdGhlIGBhcmNoL3g4Ni9LY29uZmlnYCBmaWxlLiBMZXQgbWUgcHVsbCB0aGF0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDczLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDE6NTk6NTEuMDI4NDQxMDg5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg1MDpcXHRcXG4gODUxOlxcdGNvbmZpZyBQVkhcXG4gODUyOlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHJ1bm5pbmcgUFZIIGd1ZXN0c1xcXCJcXG4gODUzOlxcdFxcdGhlbHBcXG4gODU0OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgUFZIIGVudHJ5IHBvaW50IGZvciBndWVzdCB2aXJ0dWFsIG1hY2hpbmVzXFxuIDg1NTpcXHRcXHQgIGFzIHNwZWNpZmllZCBpbiB0aGUgeDg2L0hWTSBkaXJlY3QgYm9vdCBBQkkuXFxuIDg1NjpcXHRcXG4gODU3OlxcdGNvbmZpZyBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdcXG4gODU4OlxcdFxcdGJvb2wgXFxcIlBhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1xcXCJcXG4gODU5OlxcdFxcdGRlcGVuZHMgb24gUEFSQVZJUlRcXG4gODYwOlxcdFxcdGhlbHBcXG4gODYxOlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGVuYWJsZSBmaW5lIGdyYW51bGFyaXR5IHRhc2sgc3RlYWwgdGltZVxcbiA4NjI6XFx0XFx0ICBhY2NvdW50aW5nLiBUaW1lIHNwZW50IGV4ZWN1dGluZyBvdGhlciB0YXNrcyBpbiBwYXJhbGxlbCB3aXRoXFxuIDg2MzpcXHRcXHQgIHRoZSBjdXJyZW50IHZDUFUgaXMgZGlzY291bnRlZCBmcm9tIHRoZSB2Q1BVIHBvd2VyLiBUbyBhY2NvdW50IGZvclxcbiA4NjQ6XFx0XFx0ICB0aGF0LCB0aGVyZSBjYW4gYmUgYSBzbWFsbCBwZXJmb3JtYW5jZSBpbXBhY3QuXFxuIDg2NTpcXHRcXG4gODY2OlxcdFxcdCAgSWYgaW4gZG91YnQsIHNheSBOIGhlcmUuXFxuIDg2NzpcXHRcXG4gODY4OlxcdGNvbmZpZyBQQVJBVklSVF9DTE9DS1xcbiA4Njk6XFx0XFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMTo1OTo1MS4wMjg2Njk2NjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxMjYxNzQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbm5lciBtb25vbG9ndWU6XG5cbioqRGVwZW5kZW5jeSBDaGVjazogYFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZGVwZW5kZW5jeSBjaGFpbiBpcyBzb21ldGhpbmcgSSdtIGludGltYXRlbHkgZmFtaWxpYXIgd2l0aC4gVGhlIHRleHQgcG9pbnRzIG91dCBzb21ldGhpbmcgSSd2ZSBzZWVuIGNvdW50bGVzcyB0aW1lcyBpbiB0aGVzZSBjb25maWd1cmF0aW9uIHN5c3RlbXM6IGBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdgIHJlbGllcyBvbiBgUEFSQVZJUlRgLiBObyBzdXJwcmlzZSB0aGVyZTsgdGhhdCdzIHRoZSBvYnZpb3VzIHJlbGF0aW9uc2hpcC4gVG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgYXJjaC94ODYvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IG51YW5jZXMgaW4gaG93IGBQQVJBVklSVGAgaXMgZGVmaW5lZCBvciB3aGF0IGl0ICpleGFjdGx5KiBlbmFibGVzIHRoYXQgYFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AgdXNlcy4gSXQncyBhIGZ1bmRhbWVudGFsIGxpbmsgSSB3YW50IHRvIHNvbGlkaWZ5IGluIG15IG1pbmQgYmVmb3JlIEkgc3RhcnQgbWFraW5nIGNoYW5nZXMgb3IgZGlhZ25vc2luZyBpc3N1ZXMgdGhhdCBtYXkgYmUgcmVsYXRlZCB0byB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBLbm93aW5nIHRoZSBwcmVjaXNlIGludGVyZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGNsZWFuIGFuZCBlZmZlY3RpdmUgd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMTAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAxOjU5OjU1LjM0MTI4OTM5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDI1NDU1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEFSQVZJUlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTc5Nj1pZiBIWVBFUlZJU09SX0dVRVNUXFxuYXJjaC94ODYvS2NvbmZpZy03OTctXFxuYXJjaC94ODYvS2NvbmZpZzo3OTg6Y29uZmlnIFBBUkFWSVJUXFxuYXJjaC94ODYvS2NvbmZpZy03OTktXFx0Ym9vbCBcXFwiRW5hYmxlIHBhcmF2aXJ0dWFsaXphdGlvbiBjb2RlXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy04MDctXFxuYXJjaC94ODYvS2NvbmZpZzo4MDg6Y29uZmlnIFBBUkFWSVJUX1hYTFxcbmFyY2gveDg2L0tjb25maWctODA5LVxcdGJvb2xcXG4tLVxcbmFyY2gveDg2L0tjb25maWctODEyLVxcbmFyY2gveDg2L0tjb25maWc6ODEzOmNvbmZpZyBQQVJBVklSVF9TUElOTE9DS1NcXG5hcmNoL3g4Ni9LY29uZmlnLTgxNC1cXHRib29sIFxcXCJQYXJhdmlydHVhbGl6YXRpb24gbGF5ZXIgZm9yIHNwaW5sb2Nrc1xcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9ODUxPWNvbmZpZyBQVkhcXG4tLVxcbmFyY2gveDg2L0tjb25maWctODU2LVxcbmFyY2gveDg2L0tjb25maWc6ODU3OmNvbmZpZyBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdcXG5hcmNoL3g4Ni9LY29uZmlnLTg1OC1cXHRib29sIFxcXCJQYXJhdmlydHVhbCBzdGVhbCB0aW1lIGFjY291bnRpbmdcXFwiXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTg2Ny1cXG5hcmNoL3g4Ni9LY29uZmlnOjg2ODpjb25maWcgUEFSQVZJUlRfQ0xPQ0tcXG5hcmNoL3g4Ni9LY29uZmlnLTg2OS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAxOjU5OjU1LjM5MTU0OTczNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTE5NTI4NDE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmN5IG9mIFBBUkFWSVJUIG9uIEhZUEVSVklTT1JfR1VFU1QqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgUEFSQVZJUlRgIGFnYWluLiBJdCBzdHJpa2VzIG1lIHRoYXQgdGhlcmUgbWlnaHQgYmUgYW4gaW5oZXJlbnQgZGVwZW5kZW5jeSBvbiBgSFlQRVJWSVNPUl9HVUVTVGAgaGVyZSwgZG9lc24ndCBpdD8gU2VlbXMgbG9naWNhbCwgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtYWtpbmcgYW55IGFzc3VtcHRpb25zLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBjb2RlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gdG8gdmVyaWZ5IHRoYXQuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIHBhcmF2aXJ0dWFsaXphdGlvbiwgYnkgaXRzIHZlcnkgbmF0dXJlLCByZWxpZXMgb24gdGhlIHByZXNlbmNlIG9yIGNvbmZpZ3VyYXRpb24gb2YgYSBoeXBlcnZpc29yIGd1ZXN0IGVudmlyb25tZW50LiBQZXJoYXBzIHRoZXJlJ3MgYW4gY29uZGl0aW9uYWwgY29tcGlsZSB0aW1lIGRlcGVuZGVuY3kgSSBuZWVkIHRvIGNoZWNrLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoYXZlIHRvIHNheS4gTGV0J3MgZGl2ZSBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MzAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMjowMDowNi41ODY4MzY4OTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzkwOlxcdFxcdCAgdmlzb3JzLiBUaGlzIG9wdGlvbiBlbmFibGVzIGJhc2ljIGh5cGVydmlzb3IgZGV0ZWN0aW9uIGFuZCBwbGF0Zm9ybVxcbiA3OTE6XFx0XFx0ICBzZXR1cC5cXG4gNzkyOlxcdFxcbiA3OTM6XFx0XFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kXFxuIDc5NDpcXHRcXHQgIGRpc2FibGVkLCBhbmQgTGludXggZ3Vlc3Qgc3VwcG9ydCB3b24ndCBiZSBidWlsdCBpbi5cXG4gNzk1OlxcdFxcbiA3OTY6XFx0aWYgSFlQRVJWSVNPUl9HVUVTVFxcbiA3OTc6XFx0XFxuIDc5ODpcXHRjb25maWcgUEFSQVZJUlRcXG4gNzk5OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBwYXJhdmlydHVhbGl6YXRpb24gY29kZVxcXCJcXG4gODAwOlxcdFxcdGRlcGVuZHMgb24gSEFWRV9TVEFUSUNfQ0FMTFxcbiA4MDE6XFx0XFx0c2VsZWN0IEhBVkVfUFZfU1RFQUxfQ0xPQ0tfR0VOXFxuIDgwMjpcXHRcXHRoZWxwXFxuIDgwMzpcXHRcXHQgIFRoaXMgY2hhbmdlcyB0aGUga2VybmVsIHNvIGl0IGNhbiBtb2RpZnkgaXRzZWxmIHdoZW4gaXQgaXMgcnVuXFxuIDgwNDpcXHRcXHQgIHVuZGVyIGEgaHlwZXJ2aXNvciwgcG90ZW50aWFsbHkgaW1wcm92aW5nIHBlcmZvcm1hbmNlIHNpZ25pZmljYW50bHlcXG4gODA1OlxcdFxcdCAgb3ZlciBmdWxsIHZpcnR1YWxpemF0aW9uLiAgSG93ZXZlciwgd2hlbiBydW4gd2l0aG91dCBhIGh5cGVydmlzb3JcXG4gODA2OlxcdFxcdCAgdGhlIGtlcm5lbCBpcyB0aGVvcmV0aWNhbGx5IHNsb3dlciBhbmQgc2xpZ2h0bHkgbGFyZ2VyLlxcbiA4MDc6XFx0XFxuIDgwODpcXHRjb25maWcgUEFSQVZJUlRfWFhMXFxuIDgwOTpcXHRcXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAwOjA2LjU4NzAzMDAxOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjExNzc1NjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgS1ZNIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2UgYEhZUEVSVklTT1JfR1VFU1RgIGlzIGEgbXVzdC1oYXZlIGZvciB0aGUgaHlwZXJ2aXNvciBndWVzdCBmdW5jdGlvbmFsaXR5LiBMZXQncyBtYWtlIHN1cmUgdGhhdCBgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HYCwgYFBBUkFWSVJUYCwgYW5kIGBIWVBFUlZJU09SX0dVRVNUYCBhcmUgYWxsIGFkZGVkIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gV2UgYWxzbyBkZWZpbml0ZWx5IG5lZWQgdG8gaW5jbHVkZSBgS1ZNYCB0byBoYW5kbGUgdGhlIEtWTS1zcGVjaWZpYyBwYXJ0cywgb2J2aW91c2x5LlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgc3ltYm9scyB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBjb25uZWN0ZWQgYW5kIHdvcmtpbmcgYXMgZXhwZWN0ZWQuIExldCdzIHNlZS4uLiBJIHNob3VsZCBjaGVjayBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLCBvciBtYXliZSBgdmNwdV9ydW5gLCBvciBldmVuIGByZWNvcmRfc3RlYWxfdGltZWAsIGZvciBwb3RlbnRpYWwgYEZvY3VzU3ltYm9sc2AuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC4gUmlnaHQsIGByZWNvcmRfc3RlYWxfdGltZWAgYXBwZWFycyB0byBiZSBzdGF0aWMuIEhtbSwgYW5kIGB2Y3B1X2VudGVyX2d1ZXN0YCBpcyBhbHNvIHN0YXRpYy4gYHZjcHVfcnVuYCBhcyB3ZWxsLiBPa2F5LCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGlzICpub3QqIHN0YXRpYywgc28gdGhhdCdzIHNvbWV0aGluZyB0byBtYWtlIGEgbm90ZSBvZi4gQW5kIGZpbmFsbHksIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AgaXMgc3RhdGljLiBJIHNlZSB0aGF0IGB1cGRhdGVfcnFfY2xvY2tgIGlzIG5vdCBzdGF0aWMsIHNvIHRoYXQgbWF5IGJlIGhlbHBmdWwgaW4gdHJhY2luZyB0aGUgZmxvdy5cblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYHVwZGF0ZV9ycV9jbG9ja190YXNrYCBub3csIGFuZCBJIGJldCBpdCdzIGluIGBrZXJuZWwvc2NoZWQvY29yZS5jYCDigJMgbGV0J3MgY29uZmlybSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE2MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAwOjEyLjE5ODgwODUwN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwMjQwNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXBkYXRlX3JxX2Nsb2NrX3Rhc2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3NjaGVkL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvc2NoZWQvY29yZS5jPTgwOD1zdHJ1Y3Qgc3RhdGljX2tleSBwYXJhdmlydF9zdGVhbF9ycV9lbmFibGVkO1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy04MTAtXFxua2VybmVsL3NjaGVkL2NvcmUuYzo4MTE6c3RhdGljIHZvaWQgdXBkYXRlX3JxX2Nsb2NrX3Rhc2soc3RydWN0IHJxICpycSwgczY0IGRlbHRhKVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODEyLXtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODk0PXZvaWQgdXBkYXRlX3JxX2Nsb2NrKHN0cnVjdCBycSAqcnEpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTkxNS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjkxNjpcXHR1cGRhdGVfcnFfY2xvY2tfdGFzayhycSwgZGVsdGEpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTE3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6MDA6MTIuMjQ3ODM1NzkyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTcxNDU2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYHVwZGF0ZV9ycV9jbG9ja2AgRXhwb3J0IFN0YXR1cyoqXG5cbk9rYXksIHNvIGB1cGRhdGVfcnFfY2xvY2tgIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCB0cmFjayBvZiwgbGlrZWx5IGluIGEgcmVhbC10aW1lIGVudmlyb25tZW50LiBUaGF0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgbWFpbnRhaW5pbmcgc2NoZWR1bGUgY29uc2lzdGVuY3kgYW5kIGxpa2VseSBpbnRlcmFjdGluZyB3aXRoIHRoZSBzeXN0ZW0gY2xvY2suIEkgaW1tZWRpYXRlbHkgbmVlZCB0byBlc3RhYmxpc2ggaWYgaXQncyBleHBvcnRlZC4gSXMgaXQgcGFydCBvZiB0aGUgQVBJLCBvciBpcyBpdCBpbnRlcm5hbD8gSWYgaXQncyBleHBvcnRlZCwgdGhhdCBzYXlzIHNvbWV0aGluZyBhYm91dCBpdHMgaW50ZW5kZWQgdXNlIGFuZCBzdGFiaWxpdHkuIElmIGl0J3Mgbm90IGV4cG9ydGVkLCB0aGVuIGl0IGluZGljYXRlcyBpdCdzIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIHN5c3RlbS4gSSBoYXZlIHRvIHNlZSBpZiBJIGNhbiBjYWxsIGl0IGZyb20gbXkgY3VycmVudCBjb250ZXh0IGFuZCB0aGlzIG1heSBkaWN0YXRlIHdoaWNoIGRpcmVjdGlvbiBJIHRha2UgZnJvbSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTkxNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAwOjE1LjY2NDk4NDE0NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM1NTY4NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVwZGF0ZV9ycV9jbG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvc2NoZWQvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9zY2hlZC9jb3JlLmM9ODA4PXN0cnVjdCBzdGF0aWNfa2V5IHBhcmF2aXJ0X3N0ZWFsX3JxX2VuYWJsZWQ7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTgxMC1cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjgxMTpzdGF0aWMgdm9pZCB1cGRhdGVfcnFfY2xvY2tfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzNjQgZGVsdGEpXFxua2VybmVsL3NjaGVkL2NvcmUuYy04MTIte1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy04NDgtXFx0XFx0ICogU2luY2UgaXJxX3RpbWUgaXMgb25seSB1cGRhdGVkIG9uIHtzb2Z0LH1pcnFfZXhpdCwgd2UgbWlnaHQgcnVuIGludG9cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjg0OTpcXHRcXHQgKiB0aGlzIGNhc2Ugd2hlbiBhIHByZXZpb3VzIHVwZGF0ZV9ycV9jbG9jaygpIGhhcHBlbmVkIGluc2lkZSBhXFxua2VybmVsL3NjaGVkL2NvcmUuYy04NTAtXFx0XFx0ICoge3NvZnQsfUlSUSByZWdpb24uXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg5MC0jZW5kaWZcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjg5MTpcXHR1cGRhdGVfcnFfY2xvY2tfcGVsdChycSwgZGVsdGEpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODkyLX1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg5My1cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjg5NDp2b2lkIHVwZGF0ZV9ycV9jbG9jayhzdHJ1Y3QgcnEgKnJxKVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk1LXtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTE1LVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6OTE2OlxcdHVwZGF0ZV9ycV9jbG9ja190YXNrKHJxLCBkZWx0YSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy05MTctfVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz05NDE9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGhydGljayhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTk0OC1cXHRycV9sb2NrKHJxLCBcXHUwMDI2cmYpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6OTQ5OlxcdHVwZGF0ZV9ycV9jbG9jayhycSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy05NTAtXFx0cnEtXFx1MDAzZWRvbm9yLVxcdTAwM2VzY2hlZF9jbGFzcy1cXHUwMDNldGFza190aWNrKHJxLCBycS1cXHUwMDNlZG9ub3IsIDEpO1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz0yMjA2PXZvaWQgZW5xdWV1ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy0yMjA4LVxcdGlmICghKGZsYWdzIFxcdTAwMjYgRU5RVUVVRV9OT0NMT0NLKSlcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjIyMDk6XFx0XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTIyMTAtXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTIyMzI9aW5saW5lIGJvb2wgZGVxdWV1ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy0yMjM3LVxcdGlmICghKGZsYWdzIFxcdTAwMjYgREVRVUVVRV9OT0NMT0NLKSlcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjIyMzg6XFx0XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTIyMzktXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTI2NDU9c3RhdGljIGludCBtaWdyYXRpb25fY3B1X3N0b3Aodm9pZCAqZGF0YSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjY5OC1cXHRcXHRpZiAodGFza19vbl9ycV9xdWV1ZWQocCkpIHtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjI2OTk6XFx0XFx0XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI3MDAtXFx0XFx0XFx0cnEgPSBfX21pZ3JhdGVfdGFzayhycSwgXFx1MDAyNnJmLCBwLCBhcmctXFx1MDAzZWRlc3RfY3B1KTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9Mzg5OT1zdGF0aWMgaW50IHR0d3VfcnVubmFibGUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZV9mbGFncylcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMzkwNi1cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjM5MDc6XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTM5MDgtXFx0aWYgKHAtXFx1MDAzZWlzX2Jsb2NrZWQpIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9MzkyNT12b2lkIHNjaGVkX3R0d3VfcGVuZGluZyh2b2lkICphcmcpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTM5MzUtXFx0cnFfbG9ja19pcnFzYXZlKHJxLCBcXHUwMDI2cmYpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MzkzNjpcXHR1cGRhdGVfcnFfY2xvY2socnEpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMzkzNy1cXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9NDEwMT1zdGF0aWMgdm9pZCB0dHd1X3F1ZXVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNwdSwgaW50IHdha2VfZmxhZ3MpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTQxMDktXFx0cnFfbG9jayhycSwgXFx1MDAyNnJmKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjQxMTA6XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTQxMTEtXFx0dHR3dV9kb19hY3RpdmF0ZShycSwgcCwgd2FrZV9mbGFncywgXFx1MDAyNnJmKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9NDk3NT12b2lkIHdha2VfdXBfbmV3X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy00OTkzLVxcdHJxID0gX190YXNrX3JxX2xvY2socCwgXFx1MDAyNnJmKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjQ5OTQ6XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTQ5OTUtXFx0cG9zdF9pbml0X2VudGl0eV91dGlsX2F2ZyhwKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9NTcwNT11bnNpZ25lZCBsb25nIGxvbmcgdGFza19zY2hlZF9ydW50aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNTczNC1cXHRcXHRwcmVmZXRjaF9jdXJyX2V4ZWNfc3RhcnQocCk7XFxua2VybmVsL3NjaGVkL2NvcmUuYzo1NzM1OlxcdFxcdHVwZGF0ZV9ycV9jbG9jayhycSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy01NzM2LVxcdFxcdHAtXFx1MDAzZXNjaGVkX2NsYXNzLVxcdTAwM2V1cGRhdGVfY3VycihycSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTU3OTM9dm9pZCBzY2hlZF90aWNrKHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTU4MTItXFxua2VybmVsL3NjaGVkL2NvcmUuYzo1ODEzOlxcdHVwZGF0ZV9ycV9jbG9jayhycSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy01ODE0LVxcdGh3X3ByZXNzdXJlID0gYXJjaF9zY2FsZV9od19wcmVzc3VyZShjcHVfb2YocnEpKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9NTg4MD1zdGF0aWMgdm9pZCBzY2hlZF90aWNrX3JlbW90ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTU5MDUtXFx0XFx0XFx0V0FSTl9PTl9PTkNFKHJxLVxcdTAwM2VjdXJyICE9IHJxLVxcdTAwM2Vkb25vcik7XFxua2VybmVsL3NjaGVkL2NvcmUuYzo1OTA2OlxcdFxcdFxcdHVwZGF0ZV9ycV9jbG9jayhycSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy01OTA3LVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz02MjU1PXBpY2tfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBycV9mbGFncyAqcmYpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTYzMTctXFx0XFx0aWYgKCFjb3JlX2Nsb2NrX3VwZGF0ZWQpIHtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjYzMTg6XFx0XFx0XFx0dXBkYXRlX3JxX2Nsb2NrKHJxLVxcdTAwM2Vjb3JlKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTYzMTktXFx0XFx0XFx0Y29yZV9jbG9ja191cGRhdGVkID0gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjM1MS1cXHRcXHRcXHRpZiAoIShycS1cXHUwMDNlY2xvY2tfdXBkYXRlX2ZsYWdzIFxcdTAwMjYgUlFDRl9VUERBVEVEKSlcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjYzNTI6XFx0XFx0XFx0XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTYzNTMtXFx0XFx0XFx0Z290byByZXN0YXJ0O1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy02Mzg0LVxcdFxcdGlmIChpICE9IGNwdSBcXHUwMDI2XFx1MDAyNiAocnFfaSAhPSBycS1cXHUwMDNlY29yZSB8fCAhY29yZV9jbG9ja191cGRhdGVkKSlcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjYzODU6XFx0XFx0XFx0dXBkYXRlX3JxX2Nsb2NrKHJxX2kpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjM4Ni1cXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjM5MS1cXHRcXHRcXHRpZiAoIShycS1cXHUwMDNlY2xvY2tfdXBkYXRlX2ZsYWdzIFxcdTAwMjYgUlFDRl9VUERBVEVEKSlcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjYzOTI6XFx0XFx0XFx0XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTYzOTMtXFx0XFx0XFx0Z290byByZXN0YXJ0O1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz02ODUzPXN0YXRpYyBpbmxpbmUgdm9pZCBwcm94eV9yZWFjcXVpcmVfcnFfbG9jayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy02ODU3LVxcdHJxX3JlcGluX2xvY2socnEsIHJmKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjY4NTg6XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTY4NTktfVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz03MTIxPXN0YXRpYyB2b2lkIF9fc2NoZWQgbm90cmFjZSBfX3NjaGVkdWxlKGludCBzY2hlZF9tb2RlKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy03MTc0LVxcdHJxLVxcdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgXFx1MDAzY1xcdTAwM2M9IDE7XFxua2VybmVsL3NjaGVkL2NvcmUuYzo3MTc1OlxcdHVwZGF0ZV9ycV9jbG9jayhycSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy03MTc2LVxcdHJxLVxcdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgPSBSUUNGX1VQREFURUQ7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTc2ODc9dm9pZCBydF9tdXRleF9zZXRwcmlvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHRhc2tfc3RydWN0ICpwaV90YXNrKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy03NzA0LVxcdHJxID0gX190YXNrX3JxX2xvY2socCwgXFx1MDAyNnJmKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjc3MDU6XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTc3MDYtXFx0LypcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODQ2Mz1zdGF0aWMgaW50IF9fYmFsYW5jZV9wdXNoX2NwdV9zdG9wKHZvaWQgKmFyZylcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODQ3OS1cXHRcXHRycV9sb2NrKHJxLCBcXHUwMDI2cmYpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODQ4MDpcXHRcXHR1cGRhdGVfcnFfY2xvY2socnEpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODQ4MS1cXHRcXHRpZiAodGFza19ycShwKSA9PSBycSBcXHUwMDI2XFx1MDAyNiB0YXNrX29uX3JxX3F1ZXVlZChwKSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODYyND12b2lkIHNldF9ycV9vZmZsaW5lKHN0cnVjdCBycSAqcnEpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg2MjgtXFxua2VybmVsL3NjaGVkL2NvcmUuYzo4NjI5OlxcdFxcdHVwZGF0ZV9ycV9jbG9jayhycSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy04NjMwLVxcdFxcdGZvcl9lYWNoX2NsYXNzKGNsYXNzKSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTg4OTI9aW50IHNjaGVkX2NwdV9keWluZyh1bnNpZ25lZCBpbnQgY3B1KVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy04OTAwLVxcdHJxX2xvY2tfaXJxc2F2ZShycSwgXFx1MDAyNnJmKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjg5MDE6XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg5MDItXFx0aWYgKHJxLVxcdTAwM2Vucl9ydW5uaW5nICE9IDEgfHwgcnFfaGFzX3Bpbm5lZF90YXNrcyhycSkpIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9OTg3ND1zdGF0aWMgaW50IHRnX3NldF9jZnNfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZyxcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTkzNC1cXHRcXHRpZiAoY2ZzX3JxLVxcdTAwM2V0aHJvdHRsZWQpIHtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjk5MzU6XFx0XFx0XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTk5MzYtXFx0XFx0XFx0dW50aHJvdHRsZV9jZnNfcnEoY2ZzX3JxKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9MTEyNTM9c3RydWN0IHNjaGVkX2NoYW5nZV9jdHggKnNjaGVkX2NoYW5nZV9iZWdpbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTEyNjYtXFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBERVFVRVVFX05PQ0xPQ0spKSB7XFxua2VybmVsL3NjaGVkL2NvcmUuYzoxMTI2NzpcXHRcXHR1cGRhdGVfcnFfY2xvY2socnEpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTEyNjgtXFx0XFx0ZmxhZ3MgfD0gREVRVUVVRV9OT0NMT0NLO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMjowMDoxNi4wMDA1NTc5ODFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4NzgwNjIxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUGVyZm9ybWFuY2UgQm90dGxlbmVja3MgaW4gS1ZNKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBkaWcgaW50byBgdXBkYXRlX3JxX2Nsb2NrYCwgYnV0IGNvbnNpZGVyaW5nIGl0cyB1YmlxdWl0b3VzIG5hdHVyZSwgaXQncyBwcm9iYWJseSAqYWxyZWFkeSogb3B0aW1pemVkIGFzIG11Y2ggYXMgcG9zc2libGUuIEl0J3MgdG9vIGRpc3RyaWJ1dGVkIHRvIGJlIGEgc2luZ2xlLCBmb2N1c2VkIGFyZWEgZm9yIGltcHJvdmVtZW50LCBzbyBsZXQncyBydWxlIGl0IG91dCBmb3Igbm93LiBXaGVyZSBzaG91bGQgSSBmb2N1cz9cblxuVGhlIHJlYWwgZW50cnkgcG9pbnQgZm9yIHRoZSBLVk0gdkNQVSBydW4gaXMgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYC4gVGhhdOKAmXMgYSBrZXkgZnVuY3Rpb247IGl0J3MgYSBob3QgcGF0aCwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gZHJpbGwgZG93biB0aGVyZSBhbmQgc2VlIHdoYXTigJlzIGhhcHBlbmluZy4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcG90ZW50aWFsIGZ1bmN0aW9ucywgdGhvdWdoLiBcblxuSSBzZWUgYHJlY29yZF9zdGVhbF90aW1lYCwgd2hpY2ggaXMgc3RhdGljLCBzbyBJIGNhbid0IGltbWVkaWF0ZWx5IHBvaW50IHRvIGl0IGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24uIEhvd2V2ZXIsIGlmIHRoYXQgaXMgaW5saW5lZCBpbnRvIG90aGVyIGZ1bmN0aW9ucywgaXQgY291bGQgYWxzbyBiZSBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgd2l0aG91dCBiZWluZyBvYnZpb3VzLiBTbywgdGhlIG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgYHJlY29yZF9zdGVhbF90aW1lYCBpcyBiZWluZyBpbmxpbmVkLiBUaGF0IHdpbGwgaW1wYWN0IG15IHBsYW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODYwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAwOjIwLjQ4ODM2NzEyNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0OTU2NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVjb3JkX3N0ZWFsX3RpbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz0zNzE4PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2VydmljZV9sb2NhbF90bGJfZmx1c2hfcmVxdWVzdHMpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0zNzE5LVxcbmFyY2gveDg2L2t2bS94ODYuYzozNzIwOnN0YXRpYyB2b2lkIHJlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzcyMS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTExMTg9c3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTIwOC1cXHRcXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpKVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMTIwOTpcXHRcXHRcXHRyZWNvcmRfc3RlYWxfdGltZSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTEyMTAtXFx0XFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfUE1VLCB2Y3B1KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6MDA6MjAuNTM0ODY3NTgxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MDc0ODIwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gU3RlYWwgVGltZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBzdGVhbCB0aW1lIGluIEtWTS4gSXQncyBhIGJpdCB0cmlja3kgYmVjYXVzZSB0aGUgY29kZSBpc24ndCBleHBsaWNpdGx5IG1hcmtlZCBmb3IgaW5saW5pbmcsIGJ1dCBpdCdzIG9ubHkgY2FsbGVkIG9uY2UgaW4gYHZjcHVfZW50ZXJfZ3Vlc3RgLiBUaGUgY29tcGlsZXIgKm1pZ2h0KiBpbmxpbmUgaXQsIHNvIHRoYXQncyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGRpZyBpbnRvIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIGJlY2F1c2UgdGhhdCdzIHRoZSBpb2N0bCBoYW5kbGVyLCBhbmQgdXN1YWxseSBhIGdvb2QgZW50cnkgcG9pbnQgZm9yIHRoaXMgc29ydCBvZiB0aGluZy4gQnV0LCBpdCdzIGEgaG90IHBhdGgsIHNvIEkgc2hvdWxkIGJlIGNhcmVmdWwgbm90IHRvIGdldCBib2dnZWQgZG93biB0aGVyZSBhbmQgbWlzcyBzb21ldGhpbmcuIEFyZSB0aGVyZSBvdGhlciBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQsIG90aGVyIGVudHJ5IHBvaW50cz9cblxuSSBzZWUgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYHJlY29yZF9zdGVhbF90aW1lYCBhbmQgYHVwZGF0ZV9ycV9jbG9ja190YXNrYC4gTm93LCBib3RoIG9mICp0aG9zZSogYXJlIGNhbGxlZCBmcm9tICp2ZXJ5KiBob3QgcGF0aHM6IGB2Y3B1X3J1bmAgYW5kIGB1cGRhdGVfcnFfY2xvY2tgLCByZXNwZWN0aXZlbHkuIElmIEkgZG9uJ3QgZ2l2ZSBTeXprYWxsZXIgYSBgRm9jdXNTeW1ib2xzYCBsaXN0LCBpdCdzIGp1c3QgZ29pbmcgdG8gdXNlIGNvdmVyYWdlIGRhdGEgZnJvbSB0aGUgZW50aXJlIGtlcm5lbCwgd2hpY2ggaXMgZ29pbmcgdG8gYmUgaW5jcmVkaWJseSBub2lzeS4gSSBuZWVkIHRvIGJlIG1vcmUgcHJlY2lzZSBpbiBteSBhbmFseXNpcy5cblxuQWgsIEkgc2VlIGl0ISBgcmVjb3JkX3N0ZWFsX3RpbWVgIGlzIGNhbGxlZCB3aGVuIGBLVk1fUkVRX1NURUFMX1VQREFURWAgaXMgc2V0LiBOb3cgdGhlIGtleSBxdWVzdGlvbiBpczogd2hlbiBhbmQgd2hlcmUgaXMgYEtWTV9SRVFfU1RFQUxfVVBEQVRFYCBhY3R1YWxseSAqc2V0Kj8gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMuIFRoYXQncyB0aGUgY3J1Y2lhbCBsaW5rIEknbSBtaXNzaW5nIGF0IHRoZSBtb21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTU5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAwOjI3LjA0MjM1MjQ0MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzOTcyNzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIktWTV9SRVFfU1RFQUxfVVBEQVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9Mzg4ND1pbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy00MTY0LVxcbmFyY2gveDg2L2t2bS94ODYuYzo0MTY1OlxcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy00MTY2LVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTUxNDk9dm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyMjUtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjUyMjY6XFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1NURUFMX1VQREFURSwgdmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyMjctfVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTExMTE4PXN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTEyMDctXFx0XFx0fVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMTIwODpcXHRcXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpKVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTIwOS1cXHRcXHRcXHRyZWNvcmRfc3RlYWxfdGltZSh2Y3B1KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6MDA6MjcuMjQ2MzMwODkxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMjQzMTgwMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBIb3RzcG90cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHdpdGhpbiB0aGUgS1ZNIGh5cGVydmlzb3IsIGFuZCBJJ3ZlIG5hcnJvd2VkIGRvd24gYSBjb3VwbGUgb2Yga2V5IGFyZWFzLiBJIHNlZSB0aGUgY29kZSBpcyB0b3VjaGluZyBga3ZtX3NldF9tc3JfY29tbW9uYCBhbmQgYGt2bV9hcmNoX3ZjcHVfbG9hZGAuIE5vdywgSSdtIGxlYW5pbmcgdG93YXJkIGZvY3VzaW5nIG9uIGBrdm1fc2V0X21zcl9jb21tb25gIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBkZWFscyB3aXRoIE1TUiB3cml0ZXMg4oCTIHdoaWNoIGFyZSBwcmV0dHkgc2lnbmlmaWNhbnQgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGUgZ3Vlc3QgaXRzZWxmLiBUaGF0IGZlZWxzIGxpa2UgYSBsaWtlbHkgc3BvdCBmb3Igc29tZSBpbnRlcmVzdGluZyBzdHVmZiB0byBiZSBoYXBwZW5pbmcuIEJ1dCwgd2FpdCwgYGt2bV9hcmNoX3ZjcHVfbG9hZGAgZ2V0cyBjYWxsZWQgb24gKmV2ZXJ5KiBjb250ZXh0IHN3aXRjaCB0byB0aGUgdkNQVSB0aHJlYWQuLi4gc28gYHJlY29yZF9zdGVhbF90aW1lYCBpcyBwcm9iYWJseSBjYWxsZWQgYSB0b24gaW4gdGhhdCBmdW5jdGlvbi4gVGhhdCdzIGFub3RoZXIgcG90ZW50aWFsIGFyZWEgb2YgaW52ZXN0aWdhdGlvbi5cblxuQWxyaWdodCwgbGV0J3MgY2lyY2xlIGJhY2sgdG8gYGt2bV9zZXRfbXNyX2NvbW1vbmAuIEl0J3MgYSBwcmV0dHkgaGVmdHkgZnVuY3Rpb24sIHNvIGRpdmluZyBzdHJhaWdodCBpbiBtaWdodCBiZSBvdmVyd2hlbG1pbmcuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBzcGVjaWZpYyBNU1Igd3JpdGVzIHRoYXQgdHJpZ2dlciBgS1ZNX1JFUV9TVEVBTF9VUERBVEVgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGlzLCBhbmQgd2hlcmUgSSdtIGxpa2VseSB0byBmaW5kIHNvbWV0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1NzQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6MDA6MzIuMzcwNjUxMjI2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQxMTAyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fUkVRX1NURUFMX1VQREFURVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTM4ODQ9aW50IGt2bV9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDE2NC1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NDE2NTpcXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfU1RFQUxfVVBEQVRFLCB2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDE2Ni1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz01MTQ5PXZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01MjI1LVxcbmFyY2gveDg2L2t2bS94ODYuYzo1MjI2OlxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy01MjI3LX1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMTExOD1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMjA3LVxcdFxcdH1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTEyMDg6XFx0XFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfU1RFQUxfVVBEQVRFLCB2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTEyMDktXFx0XFx0XFx0cmVjb3JkX3N0ZWFsX3RpbWUodmNwdSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAwOjMyLjQxNzA2NTM5MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTg5NTM1ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBrdm1fc2V0X21zcl9jb21tb25gKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGBrdm1fc2V0X21zcl9jb21tb25gIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBJIHNob3VsZCBmb2N1cyBvbiB0aGUgaW1wbGVtZW50YXRpb24gYXJvdW5kIGxpbmUgNDE2NS4gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgYmFzZWQgb24gbXkgcHJldmlvdXMgYW5hbHlzaXMgYW5kIHRoZSBsaWtlbHkgYXJlYSBvZiBpbnRlcmVzdC4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIGJlaGF2aW9yIGluIHRoaXMgcmVnaW9uLiBUaGlzIHdpbGwgaGVscCB3aXRoIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDQ2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6MDA6MzcuNDA2NjA2MjUzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NDQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDE1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDE1MDpcXHRcXHRjYXNlIE1TUl9LVk1fU1RFQUxfVElNRTpcXG40MTUxOlxcdFxcdFxcdGlmICghZ3Vlc3RfcHZfaGFzKHZjcHUsIEtWTV9GRUFUVVJFX1NURUFMX1RJTUUpKVxcbjQxNTI6XFx0XFx0XFx0XFx0cmV0dXJuIEtWTV9NU1JfUkVUX1VOU1VQUE9SVEVEO1xcbjQxNTM6XFx0XFxuNDE1NDpcXHRcXHRcXHRpZiAodW5saWtlbHkoIXNjaGVkX2luZm9fb24oKSkpXFxuNDE1NTpcXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG40MTU2OlxcdFxcbjQxNTc6XFx0XFx0XFx0aWYgKGRhdGEgXFx1MDAyNiBLVk1fU1RFQUxfUkVTRVJWRURfTUFTSylcXG40MTU4OlxcdFxcdFxcdFxcdHJldHVybiAxO1xcbjQxNTk6XFx0XFxuNDE2MDpcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnN0Lm1zcl92YWwgPSBkYXRhO1xcbjQxNjE6XFx0XFxuNDE2MjpcXHRcXHRcXHRpZiAoIShkYXRhIFxcdTAwMjYgS1ZNX01TUl9FTkFCTEVEKSlcXG40MTYzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQxNjQ6XFx0XFxuNDE2NTpcXHRcXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfU1RFQUxfVVBEQVRFLCB2Y3B1KTtcXG40MTY2OlxcdFxcbjQxNjc6XFx0XFx0XFx0YnJlYWs7XFxuNDE2ODpcXHRcXHRjYXNlIE1TUl9LVk1fUFZfRU9JX0VOOlxcbjQxNjk6XFx0XFx0XFx0aWYgKCFndWVzdF9wdl9oYXModmNwdSwgS1ZNX0ZFQVRVUkVfUFZfRU9JKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6MDA6MzcuNDA3MzYyNjQzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3OTIwNjQ5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcgcHVycG9zZXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBNU1JfS1ZNX1NURUFMX1RJTUVgIGlzIGEga2V5IGFyZWEgb2YgaW50ZXJlc3QgYmVjYXVzZSB0aGUgZ3Vlc3QgaGFzIHdyaXRlIGFjY2VzcyB0byBpdCwgYW5kIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBhIHByaW1lIHRhcmdldC4gVGhhdCdzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UsIHJpcGUgZm9yIGZ1enppbmcuIEFsc28sIHRoZSBgdXBkYXRlX3JxX2Nsb2NrX3Rhc2tgIGNoYW5nZSwgd2hpY2ggaW50cm9kdWNlcyBkZWZlcnJlZCBjbG9jayB1cGRhdGVzIGJhc2VkIG9uIHJlbW90ZSBDUFUgdXBkYXRlcyB0byB0aGUgcnVucXVldWUgKHJxKSB3aGlsZSB0aGUgb3duZXIgdkNQVSBpcyBwcmVlbXB0ZWQgaXMgYWxzbyBhIHBvaW50IGZvciBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIHNvbGlkaWZ5IHRoZSBzdHJhdGVneS4gTXkgaW5pdGlhbCBzdW1tYXJ5IG9mIHRoZSBmdXp6aW5nIHRhcmdldCBpczpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBib3RoIGNoYW5nZXMgc2VlbSBsaWtlIGdvb2QgY2FuZGlkYXRlcy5cbiogICAqKkZvY3VzU3ltYm9sOioqIEkgdGhpbmsgdGhlIGJlc3Qgc3ltYm9sIHRvIGZvY3VzIG9uIGlzIGBrdm1fc2V0X21zcl9jb21tb25gLiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGlzIHRlbXB0aW5nIGFzIGEgbWFpbiBlbnRyeSBwb2ludCwgYnV0IGl0IG1pZ2h0IGJlIHRvbyBob3QgYW5kIGdlbmVyYWxpemVkLCBzbyBJJ2xsIHN0YXkgZm9jdXNlZCBvbiB0aGUgc3BlY2lmaWMgTVNSIHNldHRpbmcgZnVuY3Rpb24uXG4qICAgKipFbmFibGVDb25maWdzOioqIFdlIGRlZmluaXRlbHkgbmVlZCBgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HYCwgYFBBUkFWSVJUYCwgYEhZUEVSVklTT1JfR1VFU1RgLCBhbmQgb2YgY291cnNlIGBLVk1gIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eS5cblxuSSdtIHRoaW5raW5nIGEgYml0IG1vcmUgYWJvdXQgYHVwZGF0ZV9ycV9jbG9ja190YXNrYC4gVGhlIGZhY3QgdGhhdCBpdCdzIGNhbGxlZCBmcm9tIGB1cGRhdGVfcnFfY2xvY2tgLCBhbmQgdGhhdCBgdXBkYXRlX3JxX2Nsb2NrYCBpcyBjYWxsZWQgZnJvbSBzdGFuZGFyZCBzY2hlZHVsZXIgZnVuY3Rpb25zIGxpa2UgYHRhc2tfdGlja2AsIGBlbnF1ZXVlX3Rhc2tgLCBhbmQgYGRlcXVldWVfdGFza2AsIG1lYW5zIGl0J3MgYSB2ZXJ5IGdlbmVyaWMgZnVuY3Rpb24uIFNvLCBga3ZtX3NldF9tc3JfY29tbW9uYCBpcyB0aGUgYmV0dGVyIHRhcmdldC5cblxuTGV0J3MgZG8gYSBxdWljayBjb25maWd1cmF0aW9uIGNoZWNrLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSBtZXQuXG5cbiogICBgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HYCBkZXBlbmRzIG9uIGBQQVJBVklSVGAuXG4qICAgYFBBUkFWSVJUYCBkZXBlbmRzIG9uIGBIWVBFUlZJU09SX0dVRVNUYC5cblxuVGhlcmVmb3JlLCB3ZSBoYXZlIHRvIGVuYWJsZSBhbGwgdGhyZWU6IGBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdgLCBgUEFSQVZJUlRgLCBgSFlQRVJWSVNPUl9HVUVTVGAuIFRoZSBgS1ZNYCBjb25maWcgaXMgYWxzbyBuZWNlc3NhcnksIHNvIHdlIGNhbiB0ZXN0IHRoZSBLVk0gZnVuY3Rpb25hbGl0eS4gRG9uZS4gTm93LCBsZXQncyBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk1OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAwOjQ1LjE5OTQzMDQ5OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2NjUyMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMjowMDo0NS4yNDYwOTk4NTRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE1MTQ4MzAxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIFNjaGVkdWxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gS1ZNIHNjaGVkdWxpbmcsIGFuZCBteSBpbml0aWFsIHRob3VnaHRzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGVuYWJsaW5nIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZmlyc3QsIHdoaWNoIGlzIHN0YW5kYXJkIHByb2NlZHVyZS4gU28sIEkgc2VlIHdlJ3JlIGV4cGxpY2l0bHkgZW5hYmxpbmcgYFZJUlRVQUxJWkFUSU9OYCBhbmQgYEtWTWAsIHdoaWNoIGlzIGV4cGVjdGVkIHNpbmNlIEtWTSByZWxpZXMgb24gdmlydHVhbGl6YXRpb24uIFRoZW4gd2UgaGF2ZSBgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HYCwgYFBBUkFWSVJUYCwgYW5kIGBIWVBFUlZJU09SX0dVRVNUYC4gVGhlc2UgYXJlIGFsbCByZWxhdGVkIHRvIHBhcmF2aXJ0dWFsaXphdGlvbiBhbmQgZ3Vlc3Qgc3VwcG9ydCB3aXRoaW4gYSBoeXBlcnZpc29yLCBzbyB0aGV5IG1ha2Ugc2Vuc2UgaW4gdGhpcyBjb250ZXh0LlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBtZWF0IG9mIHRoZSBjaGFuZ2UuIEl0J3MgbW9kaWZ5aW5nIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AsIGFuZCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9uIHRoZSBzY2hlZHVsZXIuIEknbGwgbmVlZCB0byByZW1lbWJlciB3aGVyZSBgdXBkYXRlX3JxX2Nsb2NrX3Rhc2tgIGlzIGNhbGxlZCBmcm9tLiBSaWdodCwgaXQncyBjYWxsZWQgZnJvbSBgdXBkYXRlX3JxX2Nsb2NrYCwgc28gdGhhdCBtYWtlcyBzZW5zZS4gVGhlIGtleSBwb2ludCBvZiB0aGUgcGF0Y2ggaXMgZGVmZXJyaW5nIHRoZSBjbG9jayB0YXNrIHVwZGF0ZSBpZiBgcnFfY3B1ICE9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgXHUwMDI2XHUwMDI2IHZjcHVfaXNfcHJlZW1wdGVkKHJxX2NwdSlgLiBUaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc2NoZWR1bGVyOyB3ZSdyZSBlc3NlbnRpYWxseSBkZWxheWluZyB0aGUgdXBkYXRlIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBydW5uaW5nIHF1ZXVlIENQVSBkb2Vzbid0IG1hdGNoIHRoZSBjdXJyZW50IHJhdyBTTVAgcHJvY2Vzc29yIElELCAqYW5kKiB0aGUgdkNQVSBpcyBwcmVlbXB0ZWQuIFNvIHRoaXMgbGlrZWx5IGhhcyBpbXBsaWNhdGlvbnMgb24gdGltaW5nIGFjY3VyYWN5IGFuZCBwb3RlbnRpYWxseSBvbiBjb250ZXh0IHN3aXRjaGVzLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHdoeSB0aGlzIGRlZmVycmFsIGlzIG5lZWRlZC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBgdmNwdV9pc19wcmVlbXB0ZWRgIGlzIGFjdHVhbGx5IGRvaW5nLiBJcyBpdCBjaGVja2luZyBzb21lIHN0YXRlIGZsYWcsIG9yIGlzIGl0IGEgbW9yZSBpbnZvbHZlZCBjYWxjdWxhdGlvbj8gS25vd2luZyB0aGF0IHdpbGwgYmUgY3J1Y2lhbCB0byBmdWxseSBncmFzcCB0aGUgcGVyZm9ybWFuY2UgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDEwNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMjowMDo1MS4zOTc1ODUyOTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzcwMDM3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmNwdV9pc19wcmVlbXB0ZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaC0yMC0gKi9cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmg6MjE6I2RlZmluZSB2Y3B1X2lzX3ByZWVtcHRlZCB2Y3B1X2lzX3ByZWVtcHRlZFxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaDoyMjpzdGF0aWMgaW5saW5lIGJvb2wgdmNwdV9pc19wcmVlbXB0ZWQoaW50IGNwdSlcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgtMjMte1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcXNwaW5sb2NrLmg9MTI9c3RhdGljIGlubGluZSBib29sIHZpcnRfc3Bpbl9sb2NrKHN0cnVjdCBxc3BpbmxvY2sgKmxvY2spXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9xc3BpbmxvY2suaC00MS0gKi9cXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9xc3BpbmxvY2suaDo0MjojZGVmaW5lIHZjcHVfaXNfcHJlZW1wdGVkKGNwdSlcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcXNwaW5sb2NrLmgtNDMtKHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFyYXZpcnQuaD0xMjA9c3RhdGljIGlubGluZSBib29sIHZjcHVfaXNfZGlzcGF0Y2hlZChpbnQgdmNwdSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYXJhdmlydC5oLTEyNS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFyYXZpcnQuaDoxMjY6I2RlZmluZSB2Y3B1X2lzX3ByZWVtcHRlZCB2Y3B1X2lzX3ByZWVtcHRlZFxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYXJhdmlydC5oOjEyNzpzdGF0aWMgaW5saW5lIGJvb2wgdmNwdV9pc19wcmVlbXB0ZWQoaW50IGNwdSlcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFyYXZpcnQuaC0xMjgte1xcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgtMTYzLVxcdFxcdC8qXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhcmF2aXJ0Lmg6MTY0OlxcdFxcdCAqIFRoZSByZXN1bHQgb2YgdmNwdV9pc19wcmVlbXB0ZWQoKSBpcyB1c2VkIGluIGFcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFyYXZpcnQuaC0xNjUtXFx0XFx0ICogc3BlY3VsYXRpdmUgd2F5LCBhbmQgaXMgYWx3YXlzIHN1YmplY3QgdG8gaW52YWxpZGF0aW9uXFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3FzcGlubG9jay5jPTM1ND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgcHJvcGFnYXRlX3NsZWVweShzdHJ1Y3QgcW5vZGUgKm5vZGUsIHUzMiB2YWwsIGJvb2wgcGFyYXZpcnQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3FzcGlubG9jay5jLTM3MS1cXHRvd25lciA9IGdldF9vd25lcl9jcHUodmFsKTtcXG5hcmNoL3Bvd2VycGMvbGliL3FzcGlubG9jay5jOjM3MjpcXHRpZiAodmNwdV9pc19wcmVlbXB0ZWQob3duZXIpKVxcbmFyY2gvcG93ZXJwYy9saWIvcXNwaW5sb2NrLmMtMzczLVxcdFxcdG5leHQtXFx1MDAzZXNsZWVweSA9IDE7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3FzcGlubG9jay5jPTM3Nz1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgeWllbGRfdG9fcHJldihzdHJ1Y3QgcXNwaW5sb2NrICpsb2NrLCBzdHJ1Y3QgcW5vZGUgKm5vZGUsIGludCBwcmV2X2NwdSwgYm9vbCBwYXJhdmlydClcXG4tLVxcbmFyY2gvcG93ZXJwYy9saWIvcXNwaW5sb2NrLmMtMzkxLVxcdCAqL1xcbmFyY2gvcG93ZXJwYy9saWIvcXNwaW5sb2NrLmM6MzkyOlxcdGlmIChub2RlLVxcdTAwM2VzbGVlcHkgfHwgdmNwdV9pc19wcmVlbXB0ZWQocHJldl9jcHUpKSB7XFxuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYy0zOTMtXFx0XFx0dTMyIHZhbCA9IFJFQURfT05DRShsb2NrLVxcdTAwM2V2YWwpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYy00MDMtXFx0XFx0XFx0XFx0ICovXFxuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYzo0MDQ6XFx0XFx0XFx0XFx0aWYgKHZjcHVfaXNfcHJlZW1wdGVkKGdldF9vd25lcl9jcHUodmFsKSkpXFxuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYy00MDUtXFx0XFx0XFx0XFx0XFx0bm9kZS1cXHUwMDNlbmV4dC1cXHUwMDNlc2xlZXB5ID0gMTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9saWIvcXNwaW5sb2NrLmM9NTI3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBxdWV1ZWRfc3Bpbl9sb2NrX21jc19xdWV1ZShzdHJ1Y3QgcXNwaW5sb2NrICpsb2NrLCBib29sIHBhcmF2aXJ0KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYy02OTEtXFx0XFx0XFx0YXNtIHZvbGF0aWxlKFxcXCJtaXNvXFxcIiA6OjogXFxcIm1lbW9yeVxcXCIpO1xcbmFyY2gvcG93ZXJwYy9saWIvcXNwaW5sb2NrLmM6NjkyOlxcdFxcdGlmICh2Y3B1X2lzX3ByZWVtcHRlZChuZXh0X2NwdSkpXFxuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYy02OTMtXFx0XFx0XFx0cHJvZF9jcHUobmV4dF9jcHUpO1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmg9Mzc9ZXh0ZXJuIGludCBzcGluX3JldHJ5O1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9zcGlubG9jay5oLTM4LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9zcGlubG9jay5oOjM5OmJvb2wgYXJjaF92Y3B1X2lzX3ByZWVtcHRlZChpbnQgY3B1KTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaC00MC1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaDo0MTojZGVmaW5lIHZjcHVfaXNfcHJlZW1wdGVkIGFyY2hfdmNwdV9pc19wcmVlbXB0ZWRcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaC00Mi1cXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmM9Njk9dm9pZCBub3RyYWNlIHN0b3BfbWFjaGluZV95aWVsZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaylcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMtNzgtXFx0XFx0XFx0cmV0dXJuO1xcbmFyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmM6Nzk6XFx0XFx0aWYgKGFyY2hfdmNwdV9pc19wcmVlbXB0ZWQoY3B1KSlcXG5hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3Nvci5jLTgwLVxcdFxcdFxcdHNtcF95aWVsZF9jcHUoY3B1KTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc21wLmM9Mzk0PXZvaWQgc2NoZWR1bGVfbWNja19oYW5kbGVyKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jLTM5OC1cXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jOjM5OTpib29sIG5vdHJhY2UgYXJjaF92Y3B1X2lzX3ByZWVtcHRlZChpbnQgY3B1KVxcbmFyY2gvczM5MC9rZXJuZWwvc21wLmMtNDAwLXtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc21wLmMtNDA2LX1cXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jOjQwNzpFWFBPUlRfU1lNQk9MKGFyY2hfdmNwdV9pc19wcmVlbXB0ZWQpO1xcbmFyY2gvczM5MC9rZXJuZWwvc21wLmMtNDA4LVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kaWFnLmM9MTg2PXN0YXRpYyBpbnQgX19kaWFnX3RpbWVfc2xpY2VfZW5kX2RpcmVjdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGlhZy5jLTIxMC1cXHRcXHQvKiB0YXJnZXQgaG9zdCBDUFUgYWxyZWFkeSBydW5uaW5nICovXFxuYXJjaC9zMzkwL2t2bS9kaWFnLmM6MjExOlxcdFxcdGlmICghdmNwdV9pc19wcmVlbXB0ZWQodGNwdV9jcHUpKVxcbmFyY2gvczM5MC9rdm0vZGlhZy5jLTIxMi1cXHRcXHRcXHRnb3RvIG5vX3lpZWxkO1xcbi0tXFxuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jPTE1Nj1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zcGluX2xvY2tfcXVldWVkKGFyY2hfc3BpbmxvY2tfdCAqbHApXFxuLS1cXG5hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMtMjAwLVxcdG93bmVyID0gYXJjaF9zcGluX3lpZWxkX3RhcmdldChvbGQsIG5vZGUpO1xcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYzoyMDE6XFx0aWYgKG93bmVyIFxcdTAwMjZcXHUwMDI2IGFyY2hfdmNwdV9pc19wcmVlbXB0ZWQob3duZXIgLSAxKSlcXG5hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMtMjAyLVxcdFxcdHNtcF95aWVsZF9jcHUob3duZXIgLSAxKTtcXG4tLVxcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYy0yMTItXFx0XFx0XFx0b3duZXIgPSBhcmNoX3NwaW5feWllbGRfdGFyZ2V0KG9sZCwgbm9kZSk7XFxuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jOjIxMzpcXHRcXHRcXHRpZiAob3duZXIgXFx1MDAyNlxcdTAwMjYgYXJjaF92Y3B1X2lzX3ByZWVtcHRlZChvd25lciAtIDEpKVxcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYy0yMTQtXFx0XFx0XFx0XFx0c21wX3lpZWxkX2NwdShvd25lciAtIDEpO1xcbi0tXFxuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jLTIzMy1cXHRcXHRjb3VudCA9IHNwaW5fcmV0cnk7XFxuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jOjIzNDpcXHRcXHRpZiAoIW1hY2hpbmVfaXNfbHBhcigpIHx8IGFyY2hfdmNwdV9pc19wcmVlbXB0ZWQob3duZXIgLSAxKSlcXG5hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMtMjM1LVxcdFxcdFxcdHNtcF95aWVsZF9jcHUob3duZXIgLSAxKTtcXG4tLVxcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYz0yNTA9c3RhdGljIGlubGluZSB2b2lkIGFyY2hfc3Bpbl9sb2NrX2NsYXNzaWMoYXJjaF9zcGlubG9ja190ICpscClcXG4tLVxcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYy0yNTctXFx0b3duZXIgPSBhcmNoX3NwaW5feWllbGRfdGFyZ2V0KFJFQURfT05DRShscC1cXHUwMDNlbG9jayksIE5VTEwpO1xcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYzoyNTg6XFx0aWYgKG93bmVyIFxcdTAwMjZcXHUwMDI2IGFyY2hfdmNwdV9pc19wcmVlbXB0ZWQob3duZXIgLSAxKSlcXG5hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMtMjU5LVxcdFxcdHNtcF95aWVsZF9jcHUob3duZXIgLSAxKTtcXG4tLVxcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYy0yNzYtXFx0XFx0Y291bnQgPSBzcGluX3JldHJ5O1xcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYzoyNzc6XFx0XFx0aWYgKCFtYWNoaW5lX2lzX2xwYXIoKSB8fCBhcmNoX3ZjcHVfaXNfcHJlZW1wdGVkKG93bmVyIC0gMSkpXFxuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jLTI3OC1cXHRcXHRcXHRzbXBfeWllbGRfY3B1KG93bmVyIC0gMSk7XFxuLS1cXG5hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmM9MzUyPXZvaWQgYXJjaF9zcGluX3JlbGF4KGFyY2hfc3BpbmxvY2tfdCAqbHApXFxuLS1cXG5hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMtMzU4LVxcdFxcdHJldHVybjtcXG5hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmM6MzU5OlxcdGlmIChtYWNoaW5lX2lzX2xwYXIoKSBcXHUwMDI2XFx1MDAyNiAhYXJjaF92Y3B1X2lzX3ByZWVtcHRlZChjcHUgLSAxKSlcXG5hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMtMzYwLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jPTI2PXN0YXRpYyB2b2lkIGh2X3Fsb2NrX3dhaXQodTggKmJ5dGUsIHU4IHZhbClcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jLTYyLSAqL1xcbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jOjYzOl9fdmlzaWJsZSBib29sIGh2X3ZjcHVfaXNfcHJlZW1wdGVkKGludCB2Y3B1KVxcbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jLTY0LXtcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jLTY3LVxcbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jOjY4OlBWX0NBTExFRV9TQVZFX1JFR1NfVEhVTksoaHZfdmNwdV9pc19wcmVlbXB0ZWQpO1xcbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jLTY5LVxcbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jPTcwPXZvaWQgX19pbml0IGh2X2luaXRfc3BpbmxvY2tzKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvaHZfc3BpbmxvY2suYy04NC1cXHRwdl9vcHNfbG9jay5raWNrID0gaHZfcWxvY2tfa2ljaztcXG5hcmNoL3g4Ni9oeXBlcnYvaHZfc3BpbmxvY2suYzo4NTpcXHRwdl9vcHNfbG9jay52Y3B1X2lzX3ByZWVtcHRlZCA9IFBWX0NBTExFRV9TQVZFKGh2X3ZjcHVfaXNfcHJlZW1wdGVkKTtcXG5hcmNoL3g4Ni9oeXBlcnYvaHZfc3BpbmxvY2suYy04Ni19XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTIyOC0vLyBmcmVlOiB3YXMgI2RlZmluZSBYODZfRkVBVFVSRV9QVlVOTE9DSyAgICAgICAgICAgICAgICggOCozMisyMCkgLyogUFYgdW5sb2NrIGZ1bmN0aW9uICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaDoyMjk6I2RlZmluZSBYODZfRkVBVFVSRV9WQ1BVUFJFRU1QVFxcdFxcdCggOCozMisyMSkgLyogUFYgdmNwdV9pc19wcmVlbXB0ZWQgZnVuY3Rpb24gKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTIzMC0jZGVmaW5lIFg4Nl9GRUFUVVJFX1REWF9HVUVTVFxcdFxcdCggOCozMisyMikgLyogXFxcInRkeF9ndWVzdFxcXCIgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgR3Vlc3QgKi9cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWlkL2xlYWZfdHlwZXMuaD0xMjEyPXN0cnVjdCBsZWFmXzB4NGM3ODAwMDFfMCB7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVpZC9sZWFmX3R5cGVzLmgtMTI5MS1cXHRcXHRwdnVubG9ja1xcdFxcdFxcdDogIDEsIC8vIFBWIHVubG9jayBmdW5jdGlvblxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWlkL2xlYWZfdHlwZXMuaDoxMjkyOlxcdFxcdHZjcHVwcmVlbXB0XFx0XFx0XFx0OiAgMSwgLy8gUFYgdmNwdV9pc19wcmVlbXB0ZWQgZnVuY3Rpb25cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVpZC9sZWFmX3R5cGVzLmgtMTI5My1cXHRcXHR0ZHhfZ3Vlc3RcXHRcXHRcXHQ6ICAxLCAvLyBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyBHdWVzdFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbXNoeXBlcnYuaD0xODQ9dm9pZCBfX2luaXQgaHZfaW5pdF9zcGlubG9ja3Modm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbXNoeXBlcnYuaDoxODU6Ym9vbCBodl92Y3B1X2lzX3ByZWVtcHRlZChpbnQgdmNwdSk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbXNoeXBlcnYuaC0xODYtI2Vsc2VcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg9MTQ9c3RydWN0IHB2X2xvY2tfb3BzIHtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmgtMTctXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaDoxODpcXHRzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgdmNwdV9pc19wcmVlbXB0ZWQ7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaC0xOS19IF9fbm9fcmFuZG9taXplX2xheW91dDtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg9NDA9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHB2X3F1ZXVlZF9zcGluX3VubG9jayhzdHJ1Y3QgcXNwaW5sb2NrICpsb2NrKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaC00OS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oOjUwOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBwdl92Y3B1X2lzX3ByZWVtcHRlZChsb25nIGNwdSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oLTUxLXtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oOjUyOlxcdHJldHVybiBQVk9QX0FMVF9DQUxMRUUxKGJvb2wsIHB2X29wc19sb2NrLCB2Y3B1X2lzX3ByZWVtcHRlZCwgY3B1LFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmgtNTMtXFx0XFx0XFx0XFx0XFxcInhvciAlJWVheCwgJSVlYXhcXFwiLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaD03ND1zdGF0aWMgaW5saW5lIHZvaWQgcXVldWVkX3NwaW5fdW5sb2NrKHN0cnVjdCBxc3BpbmxvY2sgKmxvY2spXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oLTc5LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg6ODA6I2RlZmluZSB2Y3B1X2lzX3ByZWVtcHRlZCB2Y3B1X2lzX3ByZWVtcHRlZFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg6ODE6c3RhdGljIGlubGluZSBib29sIHZjcHVfaXNfcHJlZW1wdGVkKGxvbmcgY3B1KVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmgtODIte1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg6ODM6XFx0cmV0dXJuIHB2X3ZjcHVfaXNfcHJlZW1wdGVkKGNwdSk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaC04NC19XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oPTk2PXZvaWQgX19yYXdfY2FsbGVlX3NhdmVfX19uYXRpdmVfcXVldWVkX3NwaW5fdW5sb2NrKHN0cnVjdCBxc3BpbmxvY2sgKmxvY2spO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg6OTc6Ym9vbCBfX3Jhd19jYWxsZWVfc2F2ZV9fX25hdGl2ZV92Y3B1X2lzX3ByZWVtcHRlZChsb25nIGNwdSk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaC05OC0jZW5kaWYgLyogQ09ORklHX1BBUkFWSVJUX1NQSU5MT0NLUyAqL1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaD0xMDQ9Ym9vbCBwdl9pc19uYXRpdmVfc3Bpbl91bmxvY2sodm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaDoxMDU6X192aXNpYmxlIGJvb2wgX19uYXRpdmVfdmNwdV9pc19wcmVlbXB0ZWQobG9uZyBjcHUpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg6MTA2OmJvb2wgcHZfaXNfbmF0aXZlX3ZjcHVfaXNfcHJlZW1wdGVkKHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmgtMTA3LVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2t2bS5jPTY0NT1zdGF0aWMgdm9pZCBrdm1fc21wX3NlbmRfY2FsbF9mdW5jX2lwaShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaylcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm0uYy02NTItXFx0Zm9yX2VhY2hfY3B1KGNwdSwgbWFzaykge1xcbmFyY2gveDg2L2tlcm5lbC9rdm0uYzo2NTM6XFx0XFx0aWYgKCFpZGxlX2NwdShjcHUpIFxcdTAwMjZcXHUwMDI2IHZjcHVfaXNfcHJlZW1wdGVkKGNwdSkpIHtcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmMtNjU0LVxcdFxcdFxcdGt2bV9oeXBlcmNhbGwxKEtWTV9IQ19TQ0hFRF9ZSUVMRCwgcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KSk7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM9NzkyPXN0YXRpYyB2b2lkIGt2bV9jcmFzaF9zaHV0ZG93bihzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm0uYy03OTktI2lmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikgfHwgIWRlZmluZWQoQ09ORklHX1NNUClcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM6ODAwOmJvb2wgX19rdm1fdmNwdV9pc19wcmVlbXB0ZWQobG9uZyBjcHUpO1xcbmFyY2gveDg2L2tlcm5lbC9rdm0uYy04MDEtXFxuYXJjaC94ODYva2VybmVsL2t2bS5jOjgwMjpfX3Zpc2libGUgYm9vbCBfX2t2bV92Y3B1X2lzX3ByZWVtcHRlZChsb25nIGNwdSlcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmMtODAzLXtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm0uYy04MDctfVxcbmFyY2gveDg2L2tlcm5lbC9rdm0uYzo4MDg6UFZfQ0FMTEVFX1NBVkVfUkVHU19USFVOSyhfX2t2bV92Y3B1X2lzX3ByZWVtcHRlZCk7XFxuYXJjaC94ODYva2VybmVsL2t2bS5jLTgwOS1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm0uYy04MTMtXFxuYXJjaC94ODYva2VybmVsL2t2bS5jOjgxNDpleHRlcm4gYm9vbCBfX3Jhd19jYWxsZWVfc2F2ZV9fX2t2bV92Y3B1X2lzX3ByZWVtcHRlZChsb25nKTtcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmMtODE1LVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2t2bS5jLTgyNC1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM6ODI1OkRFRklORV9BU01fRlVOQyhfX3Jhd19jYWxsZWVfc2F2ZV9fX2t2bV92Y3B1X2lzX3ByZWVtcHRlZCxcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmMtODI2LVxcdFxcdFBWX1ZDUFVfUFJFRU1QVEVEX0FTTSwgLnRleHQpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2t2bS5jPTgyOT1zdGF0aWMgdm9pZCBfX2luaXQga3ZtX2d1ZXN0X2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm0uYy04NDItI2lmZGVmIENPTkZJR19QQVJBVklSVF9TUElOTE9DS1NcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM6ODQzOlxcdFxcdHB2X29wc19sb2NrLnZjcHVfaXNfcHJlZW1wdGVkID1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM6ODQ0OlxcdFxcdFxcdFBWX0NBTExFRV9TQVZFKF9fa3ZtX3ZjcHVfaXNfcHJlZW1wdGVkKTtcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmMtODQ1LSNlbmRpZlxcbi0tXFxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jPTc2PXZvaWQgYXJjaF9jb250ZW5kZWRfcmVsZWFzZV90cmFjZV91bnJlZyh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jLTg3LVxcbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYzo4ODpfX3Zpc2libGUgYm9vbCBfX25hdGl2ZV92Y3B1X2lzX3ByZWVtcHRlZChsb25nIGNwdSlcXG5hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmMtODkte1xcbi0tXFxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jLTkxLX1cXG5hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmM6OTI6UFZfQ0FMTEVFX1NBVkVfUkVHU19USFVOSyhfX25hdGl2ZV92Y3B1X2lzX3ByZWVtcHRlZCk7XFxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jLTkzLVxcbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYzo5NDpib29sIHB2X2lzX25hdGl2ZV92Y3B1X2lzX3ByZWVtcHRlZCh2b2lkKVxcbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYy05NS17XFxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jOjk2OlxcdHJldHVybiBwdl9vcHNfbG9jay52Y3B1X2lzX3ByZWVtcHRlZC5mdW5jID09XFxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jOjk3OlxcdFxcdF9fcmF3X2NhbGxlZV9zYXZlX19fbmF0aXZlX3ZjcHVfaXNfcHJlZW1wdGVkO1xcbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYy05OC19XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmM9MTAwPXZvaWQgX19pbml0IHBhcmF2aXJ0X3NldF9jYXAodm9pZClcXG5hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmMtMTAxLXtcXG5hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmM6MTAyOlxcdGlmICghcHZfaXNfbmF0aXZlX3ZjcHVfaXNfcHJlZW1wdGVkKCkpXFxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jLTEwMy1cXHRcXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1ZDUFVQUkVFTVBUKTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYz0xMDY9c3RydWN0IHB2X2xvY2tfb3BzIHB2X29wc19sb2NrID0ge1xcbi0tXFxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jLTEwOC1cXHQua2lja1xcdFxcdFxcdFxcdD0gcGFyYXZpcnRfbm9wLFxcbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYzoxMDk6XFx0LnZjcHVfaXNfcHJlZW1wdGVkXFx0XFx0PSBQVl9DQUxMRUVfU0FWRShfX25hdGl2ZV92Y3B1X2lzX3ByZWVtcHRlZCksXFxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jLTExMC19O1xcbi0tXFxuYXJjaC94ODYveGVuL3NwaW5sb2NrLmM9MTIzPXZvaWQgX19pbml0IHhlbl9pbml0X3NwaW5sb2Nrcyh2b2lkKVxcbi0tXFxuYXJjaC94ODYveGVuL3NwaW5sb2NrLmMtMTQwLVxcdHB2X29wc19sb2NrLmtpY2sgPSB4ZW5fcWxvY2tfa2ljaztcXG5hcmNoL3g4Ni94ZW4vc3BpbmxvY2suYzoxNDE6XFx0cHZfb3BzX2xvY2sudmNwdV9pc19wcmVlbXB0ZWQgPSBQVl9DQUxMRUVfU0FWRSh4ZW5fdmNwdV9zdG9sZW4pO1xcbmFyY2gveDg2L3hlbi9zcGlubG9jay5jLTE0Mi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9MjI5OT1leHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpjcHVfY3Vycl9zbmFwc2hvdChpbnQgY3B1KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0yMzA4LSAqL1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoyMzA5OiNpZm5kZWYgdmNwdV9pc19wcmVlbXB0ZWRcXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MjMxMDpzdGF0aWMgaW5saW5lIGJvb2wgdmNwdV9pc19wcmVlbXB0ZWQoaW50IGNwdSlcXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMjMxMS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9MjMyMz1zdGF0aWMgaW5saW5lIGJvb2wgb3duZXJfb25fY3B1KHN0cnVjdCB0YXNrX3N0cnVjdCAqb3duZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMjMyOC1cXHQgKi9cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MjMyOTpcXHRyZXR1cm4gUkVBRF9PTkNFKG93bmVyLVxcdTAwM2Vvbl9jcHUpIFxcdTAwMjZcXHUwMDI2ICF2Y3B1X2lzX3ByZWVtcHRlZCh0YXNrX2NwdShvd25lcikpO1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0yMzMwLX1cXG4tLVxcbmtlcm5lbC9sb2NraW5nL211dGV4LmM9Mzg1PWJvb2wgbXV0ZXhfc3Bpbl9vbl9vd25lcihzdHJ1Y3QgbXV0ZXggKmxvY2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqb3duZXIsXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9tdXRleC5jLTQwMy1cXHRcXHQvKlxcbmtlcm5lbC9sb2NraW5nL211dGV4LmM6NDA0OlxcdFxcdCAqIFVzZSB2Y3B1X2lzX3ByZWVtcHRlZCB0byBkZXRlY3QgbG9jayBob2xkZXIgcHJlZW1wdGlvbiBpc3N1ZS5cXG5rZXJuZWwvbG9ja2luZy9tdXRleC5jLTQwNS1cXHRcXHQgKi9cXG4tLVxcbmtlcm5lbC9sb2NraW5nL29zcV9sb2NrLmM9OTM9Ym9vbCBvc3FfbG9jayhzdHJ1Y3Qgb3B0aW1pc3RpY19zcGluX3F1ZXVlICpsb2NrKVxcbi0tXFxua2VybmVsL2xvY2tpbmcvb3NxX2xvY2suYy0xNDItXFx0ICogd2lsbCBjb21lIHdpdGggYW4gSVBJLCB3aGljaCB3aWxsIHdha2Ugc21wX2NvbmRfbG9hZF9yZWxheGVkKCkgaWYgaXRcXG5rZXJuZWwvbG9ja2luZy9vc3FfbG9jay5jOjE0MzpcXHQgKiBpcyBpbXBsZW1lbnRlZCB3aXRoIGEgbW9uaXRvci13YWl0LiB2Y3B1X2lzX3ByZWVtcHRlZCgpIHJlbGllcyBvblxcbmtlcm5lbC9sb2NraW5nL29zcV9sb2NrLmMtMTQ0LVxcdCAqIHBvbGxpbmcsIGJlIGNhcmVmdWwuXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9vc3FfbG9jay5jLTE0Ni1cXHRpZiAoc21wX2NvbmRfbG9hZF9yZWxheGVkKFxcdTAwMjZub2RlLVxcdTAwM2Vsb2NrZWQsIFZBTCB8fCBuZWVkX3Jlc2NoZWQoKSB8fFxcbmtlcm5lbC9sb2NraW5nL29zcV9sb2NrLmM6MTQ3OlxcdFxcdFxcdFxcdCAgdmNwdV9pc19wcmVlbXB0ZWQobm9kZV9jcHUobm9kZS1cXHUwMDNlcHJldikpKSlcXG5rZXJuZWwvbG9ja2luZy9vc3FfbG9jay5jLTE0OC1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODExPXN0YXRpYyB2b2lkIHVwZGF0ZV9ycV9jbG9ja190YXNrKHN0cnVjdCBycSAqcnEsIHM2NCBkZWx0YSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODMwLVxcdFxcdGlmIChycV9jcHUgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODMxOlxcdFxcdCAgICB2Y3B1X2lzX3ByZWVtcHRlZChycV9jcHUpKSB7XFxua2VybmVsL3NjaGVkL2NvcmUuYy04MzItXFx0XFx0XFx0cnEtXFx1MDAzZWRlZmVycmVkX2Nsb2NrX3Rhc2sgKz0gZGVsdGE7XFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD0xNDU4PXN0YXRpYyBpbmxpbmUgYm9vbCBhdmFpbGFibGVfaWRsZV9jcHUoaW50IGNwdSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE0NjItXFxua2VybmVsL3NjaGVkL3NjaGVkLmg6MTQ2MzpcXHRpZiAodmNwdV9pc19wcmVlbXB0ZWQoY3B1KSlcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xNDY0LVxcdFxcdHJldHVybiAwO1xcbi0tXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0yMjgtLy8gZnJlZTogd2FzICNkZWZpbmUgWDg2X0ZFQVRVUkVfUFZVTkxPQ0sgICAgICAgICAgICAgICAoIDgqMzIrMjApIC8qIFBWIHVubG9jayBmdW5jdGlvbiAqL1xcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmg6MjI5OiNkZWZpbmUgWDg2X0ZFQVRVUkVfVkNQVVBSRUVNUFRcXHRcXHQoIDgqMzIrMjEpIC8qIFBWIHZjcHVfaXNfcHJlZW1wdGVkIGZ1bmN0aW9uICovXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0yMzAtI2RlZmluZSBYODZfRkVBVFVSRV9URFhfR1VFU1RcXHRcXHQoIDgqMzIrMjIpIC8qIFxcXCJ0ZHhfZ3Vlc3RcXFwiIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIEd1ZXN0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAwOjUzLjIzNDU5NjUxMloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTkxNTg5NDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHZjcHVfaXNfcHJlZW1wdGVkYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB2Y3B1X2lzX3ByZWVtcHRlZGAuIEl0J3MgZGVmaW5lZCBpbiB0aGUgY29yZSBgaW5jbHVkZS9saW51eC9zY2hlZC5oYCBoZWFkZXIsIGJ1dCBJIGtub3cgYXJjaGl0ZWN0dXJlcyBjYW4gb3ZlcnJpZGUgaXQuIFRoZSB4ODYgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSwgaXMgd2hhdCBJJ20gaW50ZXJlc3RlZCBpbiByaWdodCBub3cuIEl0IGxvb2tzIGxpa2UgaXQncyBkZWZpbmVkIHdpdGhpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaGAsIGJ1dCBvbmx5IGlmIGBDT05GSUdfUEFSQVZJUlRfU1BJTkxPQ0tTYCBpcyBlbmFibGVkLiBUaGF0J3MgZ29vZCB0byBrZWVwIGluIG1pbmQsIGl0J3MgYWxyZWFkeSB0ZWxsaW5nIG1lIGFib3V0IGEgY29uZGl0aW9uYWwgcGF0aC5cblxuTm93LCBhIGJlbGwgaXMgcmluZ2luZyBpbiB0aGUgYmFjayBvZiBteSBoZWFkLi4uIEkgYmVsaWV2ZSBgdmNwdV9pc19wcmVlbXB0ZWRgIGlzIHVzZWQgd2l0aGluIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AsIHdoaWNoIGlzLCBpZiBJIHJlY2FsbCwgdW5kZXIgdGhlIGNvbnRyb2wgb2YgYENPTkZJR19QQVJBVklSVF9USU1FX0FDQ09VTlRJTkdgLiBPa2F5LCBzbyBpZiBgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HYCBpcyBlbmFibGVkLCBidXQgYFBBUkFWSVJUX1NQSU5MT0NLU2AgaXNuJ3QsIGB2Y3B1X2lzX3ByZWVtcHRlZGAgd2lsbCBzaW1wbHkgZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvc2NoZWQuaGAsIHdoaWNoIEknbSBhc3N1bWluZyBpcyBqdXN0IGEgYmFzaWMgYHJldHVybiBmYWxzZWAuIFRvIGNvbmZpcm0gdGhhdCwgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZSBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2xpbnV4L3NjaGVkLmhgLiBMZXQncyB0YWtlIGEgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwOTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6MDA6NTguODI2MTg4NzcxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NjaGVkLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjMwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjMwMDpcXHRcXG4yMzAxOlxcdC8qXFxuMjMwMjpcXHQgKiBJbiBvcmRlciB0byByZWR1Y2UgdmFyaW91cyBsb2NrIGhvbGRlciBwcmVlbXB0aW9uIGxhdGVuY2llcyBwcm92aWRlIGFuXFxuMjMwMzpcXHQgKiBpbnRlcmZhY2UgdG8gc2VlIGlmIGEgdkNQVSBpcyBjdXJyZW50bHkgcnVubmluZyBvciBub3QuXFxuMjMwNDpcXHQgKlxcbjIzMDU6XFx0ICogVGhpcyBhbGxvd3MgdXMgdG8gdGVybWluYXRlIG9wdGltaXN0aWMgc3BpbiBsb29wcyBhbmQgYmxvY2ssIGFuYWxvZ291cyB0b1xcbjIzMDY6XFx0ICogdGhlIG5hdGl2ZSBvcHRpbWlzdGljIHNwaW4gaGV1cmlzdGljIG9mIHRlc3RpbmcgaWYgdGhlIGxvY2sgb3duZXIgdGFzayBpc1xcbjIzMDc6XFx0ICogcnVubmluZyBvciBub3QuXFxuMjMwODpcXHQgKi9cXG4yMzA5OlxcdCNpZm5kZWYgdmNwdV9pc19wcmVlbXB0ZWRcXG4yMzEwOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X2lzX3ByZWVtcHRlZChpbnQgY3B1KVxcbjIzMTE6XFx0e1xcbjIzMTI6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjIzMTM6XFx0fVxcbjIzMTQ6XFx0I2VuZGlmXFxuMjMxNTpcXHRcXG4yMzE2OlxcdGV4dGVybiBsb25nIHNjaGVkX3NldGFmZmluaXR5KHBpZF90IHBpZCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5ld19tYXNrKTtcXG4yMzE3OlxcdGV4dGVybiBsb25nIHNjaGVkX2dldGFmZmluaXR5KHBpZF90IHBpZCwgc3RydWN0IGNwdW1hc2sgKm1hc2spO1xcbjIzMTg6XFx0XFxuMjMxOTpcXHQjaWZuZGVmIFRBU0tfU0laRV9PRlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMjowMDo1OC44MjYzMjcxMTFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ2MzkzMzQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgbmV3IGNvZGUgaW4gYHVwZGF0ZV9ycV9jbG9ja190YXNrYCBpcyByb2J1c3RseSB0ZXN0ZWQuIEhtbSwgaXQgbG9va3MgbGlrZSBmb3IgYHZjcHVfaXNfcHJlZW1wdGVkYCB0byByZXR1cm4gdHJ1ZSBpbiB0aGUgaW50ZW5kZWQgc2NlbmFyaW9zLCBJIG1pZ2h0IG5lZWQgdG8gZW5hYmxlIGBQQVJBVklSVF9TUElOTE9DS1NgIGFzIHdlbGwuIFRoYXQgcmluZ3MgYSBiZWxsLCBJIHRoaW5rIHRoYXQgd291bGQgYmUgdGhlIGJlc3Qgd2F5IHRvIGdldCBjb21wcmVoZW5zaXZlIGNvdmVyYWdlIGhlcmUuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBQQVJBVklSVF9TUElOTE9DS1NgLCBzbyBJJ2xsIGdvIHRha2UgYSBsb29rIGluIGBhcmNoL3g4Ni9LY29uZmlnYCB0byBjb25maXJtIG15IHN1c3BpY2lvbi4gSG9wZWZ1bGx5LCBpdCdzIHN0cmFpZ2h0Zm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5MTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAxOjAzLjI5MDI2MzA4NVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4OTAzMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBUkFWSVJUX1NQSU5MT0NLU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9ODA4PWNvbmZpZyBQQVJBVklSVF9YWExcXG4tLVxcbmFyY2gveDg2L0tjb25maWctODEyLVxcbmFyY2gveDg2L0tjb25maWc6ODEzOmNvbmZpZyBQQVJBVklSVF9TUElOTE9DS1NcXG5hcmNoL3g4Ni9LY29uZmlnLTgxNC1cXHRib29sIFxcXCJQYXJhdmlydHVhbGl6YXRpb24gbGF5ZXIgZm9yIHNwaW5sb2Nrc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6MDE6MDMuMzM4MTYwMTRaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1ODM3NzI1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB4ODYgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgZm9jdXMgaXMgb24gdGhlIGBhcmNoL3g4Ni9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgODEzLiBJJ20gYXNzdW1pbmcgdGhhdCB0aGlzIHNlY3Rpb24gbGlrZWx5IGdvdmVybnMgc29tZSBrZXkgZmVhdHVyZSBvciBhc3BlY3Qgb2YgdGhlIHg4NiBhcmNoaXRlY3R1cmUgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGRlY2lzaW9ucyBhcmUgYmVpbmcgbWFkZSB0aGVyZS4gSSBuZWVkIHRvIGtub3cgd2hhdCdzIGJlaW5nIGNvbmZpZ3VyZWQsIHVuZGVyIHdoYXQgY29uZGl0aW9ucywgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBicm9hZGVyIHN5c3RlbS4gUGVyaGFwcyBJJ20gdHJhY2tpbmcgZG93biBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uJ3MgZGVwZW5kZW5jaWVzLCB0cnlpbmcgdG8gdHJvdWJsZXNob290IGEgYnVpbGQgaXNzdWUsIG9yIHNpbXBseSByZWZyZXNoaW5nIG15IHVuZGVyc3RhbmRpbmcgb2YgYSBwYXJ0aWN1bGFyIHg4NiBmZWF0dXJlLiBXaGF0ZXZlciB0aGUgcmVhc29uLCBsaW5lIDgxMyBpcyBteSBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBkZWVwIGRpdmUuIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgZmluZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyNzksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMjowMTowNy41OTY1NDAxMTVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODEwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODEwOlxcdFxcdGRlcGVuZHMgb24gWDg2XzY0XFxuIDgxMTpcXHRcXHRzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxcbiA4MTI6XFx0XFxuIDgxMzpcXHRjb25maWcgUEFSQVZJUlRfU1BJTkxPQ0tTXFxuIDgxNDpcXHRcXHRib29sIFxcXCJQYXJhdmlydHVhbGl6YXRpb24gbGF5ZXIgZm9yIHNwaW5sb2Nrc1xcXCJcXG4gODE1OlxcdFxcdGRlcGVuZHMgb24gUEFSQVZJUlQgXFx1MDAyNlxcdTAwMjYgU01QXFxuIDgxNjpcXHRcXHRoZWxwXFxuIDgxNzpcXHRcXHQgIFBhcmF2aXJ0dWFsaXplZCBzcGlubG9ja3MgYWxsb3cgYSBwdm9wcyBiYWNrZW5kIHRvIHJlcGxhY2UgdGhlXFxuIDgxODpcXHRcXHQgIHNwaW5sb2NrIGltcGxlbWVudGF0aW9uIHdpdGggc29tZXRoaW5nIHZpcnR1YWxpemF0aW9uLWZyaWVuZGx5XFxuIDgxOTpcXHRcXHQgIChmb3IgZXhhbXBsZSwgYmxvY2sgdGhlIHZpcnR1YWwgQ1BVIHJhdGhlciB0aGFuIHNwaW5uaW5nKS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6MDE6MDcuNTk2NzAyMDY1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NDk1MjczMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNIENvbmZpZ3VyYXRpb24gYW5kIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBgUEFSQVZJUlRfU1BJTkxPQ0tTYCBmaXRzIGludG8gdGhpcy4gSXQncyBjbGVhciB0aGF0IGl0IGRlcGVuZHMgb24gYFBBUkFWSVJUYCBhbmQgYFNNUGAsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIGFkZCBgUEFSQVZJUlRfU1BJTkxPQ0tTYCB0byBgRW5hYmxlQ29uZmlnc2AuIFRoYXQncyBhIG5lY2Vzc2FyeSBkZXBlbmRlbmN5LlxuXG5MZXQncyBkbyBhIHF1aWNrIHJldmlldyBvZiB0aGUgcmVsZXZhbnQgY29uZmlncyBoZXJlOiBgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HYCwgYFBBUkFWSVJUX1NQSU5MT0NLU2AsIGBQQVJBVklSVGAsIGBIWVBFUlZJU09SX0dVRVNUYCwgYFZJUlRVQUxJWkFUSU9OYCwgYEtWTWAsIGFuZCBvZiBjb3Vyc2UgYFNNUGAuIEFsdGhvdWdoIGBTTVBgIGlzIHVzdWFsbHkgYSBkZWZhdWx0LCBpdCdzIGFsd2F5cyBnb29kIHRvIGtlZXAgaW4gbWluZC5cblxuTm93LCBteSBmb2N1cyBpcyBvbiB0aGUgY3J1Y2lhbCBzeW1ib2wgZm9yIG9wdGltaXphdGlvbi4gSSdtIGN1cnJlbnRseSBsZWFuaW5nIHRvd2FyZHMgYGt2bV9zZXRfbXNyX2NvbW1vbmAuIElzIHRoZXJlIGFueXRoaW5nIGVsc2UgdGhhdCB3b3VsZCBiZSBiZXR0ZXI/IEkgY29uc2lkZXJlZCBgdXBkYXRlX3JxX2Nsb2NrX3Rhc2tgLCBidXQgaXQncyBzdGF0aWMsIHNvIG5vIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBgdXBkYXRlX3JxX2Nsb2NrYCBpcyBhIHZlcnkgZ2VuZXJpYyBob3QgcGF0aCwgc28gSSdsbCBhdm9pZCBpdC4gVGhlIGByZWNvcmRfc3RlYWxfdGltZWAgaXMgYW5vdGhlciBzdGF0aWMgb25lLCBzbyBJJ2xsIHNraXAgaXQuIFRoZW4gdGhlcmUncyBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLCB3aGljaCBpcyBhIGhvdCBwYXRoIGJ1dCBpdCdzIHJlYWxseSB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIEtWTSB2Q1BVIHJ1biwgd2hpY2ggaXNuJ3Qgd2hhdCBJJ20gbG9va2luZyBmb3IuXG5cbmBrdm1fc2V0X21zcl9jb21tb25gIHNlZW1zIGlkZWFsLiBJdCdzIG5vdCBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIHNpbmNlIE1TUiB3cml0ZXMgYXJlIHJlbGF0aXZlbHkgcmFyZSBjb21wYXJlZCB0byBWTSBleGl0cywgYW5kIGl0IGRpcmVjdGx5IHRyaWdnZXJzIGBLVk1fUkVRX1NURUFMX1VQREFURWAsIHdoaWNoIHRoZW4gY2FsbHMgYHJlY29yZF9zdGVhbF90aW1lYCwgc28gSSdsbCBoYXZlIHRoZSB2aXNpYmlsaXR5IEkgbmVlZC5cblxuV2FpdCwgdGhvdWdoLCBga3ZtX3NldF9tc3JfY29tbW9uYCBpcyBhY3R1YWxseSBhIHJhdGhlciBsYXJnZSBmdW5jdGlvbiwgYW5kIEknZCBwcmVmZXIgc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMuIExldCBtZSBkb3VibGUtY2hlY2suLi4gWWVzLCBpdCBoYW5kbGVzIGBNU1JfS1ZNX1NURUFMX1RJTUVgLCBidXQgY2FuIEkgcGlucG9pbnQgYSBtb3JlIGZvY3VzZWQgZnVuY3Rpb24/IENoZWNraW5nIGZvciBvdGhlciBvcHRpb25zIG5vdy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY5MywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAxOjE1LjE0NjIzMTUzOFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0MDI4MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3NldF9tc3JfY29tbW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9Mzg3OT1zdGF0aWMgdm9pZCBrdm1fZ2V0X3hzdGF0ZV9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTM4ODMtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjM4ODQ6aW50IGt2bV9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTM4ODUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTQyODgtfVxcbmFyY2gveDg2L2t2bS94ODYuYzo0Mjg5OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X21zcl9jb21tb24pO1xcbmFyY2gveDg2L2t2bS94ODYuYy00MjkwLVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTE0MDcxPXZvaWQga3ZtX2FyY2hfYXN5bmNfcGFnZV9wcmVzZW50X3F1ZXVlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTQwNzQtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjE0MDc1OlxcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX21iKCkgaW4ga3ZtX3NldF9tc3JfY29tbW9uKCkuICovXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTE0MDc2LVxcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAxOjE1LjE5NTY1MDM3M1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDE5Mzg0NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBTdGVhbCBUaW1lIEFjY291bnRpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGBrdm1fc2V0X21zcl9jb21tb25gIGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhcyB0aGUga2V5IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLiBJdCdzIGV4cG9ydGVkLCB3aGljaCBpcyBnb29kLCBhbmQgaXQgc2VlbXMgY2VudHJhbCB0byB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGJlaW5nIG1vZGlmaWVkIOKAkyB0aGUgTVNSIHdyaXRlIHRoYXQgZW5hYmxlcyBhbmQgYWZmZWN0cyB0aGUgc3RlYWwgdGltZSBhY2NvdW50aW5nIGxvZ2ljIHdpdGhpbiBLVk0uXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIGRpZCBhIHF1aWNrIG1lbnRhbCBzY2FuLiBJIGFsc28gY29uc2lkZXJlZCBga3ZtX2FyY2hfdmNwdV9sb2FkYCBzaW5jZSB0aGF0J3MgaW52b2x2ZWQgb24gZXZlcnkgdkNQVSBjb250ZXh0IHN3aXRjaCwgd2hpY2ggbWFrZXMgaXQgYSB2ZXJ5IGhvdCBwYXRoLiBIb3dldmVyLCBhZnRlciB0aGF0IHF1aWNrIGxvb2sgb3ZlciwgYGt2bV9zZXRfbXNyX2NvbW1vbmAgc3RpbGwgZmVlbHMgbGlrZSB0aGUgYmVzdCBiZXQuIEl0IHNlZW1zIHRvIGJlIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGNydWNpYWwgTVNSIHdyaXRlIHJlbGF0ZWQgdG8gdGhlIGNoYW5nZXMuXG5cblNvLCBoZXJlJ3MgdGhlIGZpbmFsIHZlcmRpY3Q6XG5cbiogICAqKldvcnRoRnV6emluZzogVHJ1ZSoqLiBUaGlzIHBhdGNoIGRpcmVjdGx5IHRvdWNoZXMgY3JpdGljYWwgS1ZNIGFuZCBzY2hlZHVsZXIgbG9naWMgcmVsYXRlZCB0byB0aW1lIGFjY291bnRpbmcuIEZ1bmN0aW9uYWwgY2hhbmdlcyB3YXJyYW50IGZ1enppbmcuXG4qICAgKipGb2N1c1N5bWJvbHM6IFxcW+KAnGt2bV9zZXRfbXNyX2NvbW1vbuKAnV0qKi4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgcHJpbWFyeSB0YXJnZXQgZHVlIHRvIGl0cyBkaXJlY3Qgcm9sZSBpbiBoYW5kbGluZyB0aGUgTVNSIHdyaXRlIHJlc3BvbnNpYmxlIGZvciB0aGUgY2hhbmdlcyB0byB0aGUgc3RlYWwgdGltZSBsb2dpYy5cbiogICAqKkVuYWJsZUNvbmZpZ3M6IFxcW+KAnFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR+KAnSwg4oCcUEFSQVZJUlRfU1BJTkxPQ0tT4oCdLCDigJxQQVJBVklSVOKAnSwg4oCcSFlQRVJWSVNPUl9HVUVTVOKAnSwg4oCcVklSVFVBTElaQVRJT07igJ0sIOKAnEtWTeKAnV0qKi4gVGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZWxldmFudCBiZWNhdXNlIHRoZXkgZW5hYmxlIHRoZSBjb3JlIGZlYXR1cmVzIGFuZCB1bmRlcmx5aW5nIHZpcnR1YWxpemF0aW9uIHRlY2hub2xvZ2llcyB0aGF0IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGguXG4qICAgKipSZWFzb25pbmc6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzdGVhbCB0aW1lIGFjY291bnRpbmcgbG9naWMgaW4gS1ZNIGFuZCB0aGUgc2NoZWR1bGVyLiBJdCBjaGFuZ2VzIHRoZSBvcmRlciBvZiB1c2VyIGFjY2VzcyBhbmQgbWVtb3J5IGJhcnJpZXJzIGluIGByZWNvcmRfc3RlYWxfdGltZWAgKEtWTSkgYW5kIGRlZmVycyBjbG9jayB0YXNrIHVwZGF0ZXMgaW4gYHVwZGF0ZV9ycV9jbG9ja190YXNrYCAoc2NoZWR1bGVyKSB3aGVuIHRoZSB2Q1BVIGlzIHByZWVtcHRlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBhbmQgS1ZNIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4gYGt2bV9zZXRfbXNyX2NvbW1vbmAgaGFuZGxlcyB0aGUgTVNSIHdyaXRlIHRoYXQgZW5hYmxlcyBzdGVhbCB0aW1lIGFjY291bnRpbmcgYW5kIHRyaWdnZXJzIHRoZSBLVk0gbG9naWMuXCIqKiBUaGlzIGV4cGxhaW5zIHRoZSBjcml0aWNhbCBjaGFuZ2VzIGludm9sdmVkLCBhbmQgaG93IGBrdm1fc2V0X21zcl9jb21tb25gIGRpcmVjdGx5IHRpZXMgaW50byB0aGUgY2hhbmdlcywgc2VydmluZyBhcyB0aGUgdHJpZ2dlciBmb3IgdGhlIG1vZGlmaWVkIEtWTSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk5NzcsIk91dHB1dFRva2VucyI6MjAxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAxOjIzLjYxNTAzNzUzNVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1Mzk2MTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdcIixcbiAgICBcIlBBUkFWSVJUX1NQSU5MT0NLU1wiLFxuICAgIFwiUEFSQVZJUlRcIixcbiAgICBcIkhZUEVSVklTT1JfR1VFU1RcIixcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCIsXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fc2V0X21zcl9jb21tb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3RlYWwgdGltZSBhY2NvdW50aW5nIGxvZ2ljIGluIEtWTSBhbmQgdGhlIHNjaGVkdWxlci4gSXQgY2hhbmdlcyB0aGUgb3JkZXIgb2YgdXNlciBhY2Nlc3MgYW5kIG1lbW9yeSBiYXJyaWVycyBpbiBgcmVjb3JkX3N0ZWFsX3RpbWVgIChLVk0pIGFuZCBkZWZlcnMgY2xvY2sgdGFzayB1cGRhdGVzIGluIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AgKHNjaGVkdWxlcikgd2hlbiB0aGUgdkNQVSBpcyBwcmVlbXB0ZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgYW5kIEtWTSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuIGBrdm1fc2V0X21zcl9jb21tb25gIGhhbmRsZXMgdGhlIE1TUiB3cml0ZSB0aGF0IGVuYWJsZXMgc3RlYWwgdGltZSBhY2NvdW50aW5nIGFuZCB0cmlnZ2VycyB0aGUgS1ZNIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1wiLFxuICAgIFwiUEFSQVZJUlRfU1BJTkxPQ0tTXCIsXG4gICAgXCJQQVJBVklSVFwiLFxuICAgIFwiSFlQRVJWSVNPUl9HVUVTVFwiLFxuICAgIFwiVklSVFVBTElaQVRJT05cIixcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9zZXRfbXNyX2NvbW1vblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzdGVhbCB0aW1lIGFjY291bnRpbmcgbG9naWMgaW4gS1ZNIGFuZCB0aGUgc2NoZWR1bGVyLiBJdCBjaGFuZ2VzIHRoZSBvcmRlciBvZiB1c2VyIGFjY2VzcyBhbmQgbWVtb3J5IGJhcnJpZXJzIGluIGByZWNvcmRfc3RlYWxfdGltZWAgKEtWTSkgYW5kIGRlZmVycyBjbG9jayB0YXNrIHVwZGF0ZXMgaW4gYHVwZGF0ZV9ycV9jbG9ja190YXNrYCAoc2NoZWR1bGVyKSB3aGVuIHRoZSB2Q1BVIGlzIHByZWVtcHRlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBhbmQgS1ZNIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4gYGt2bV9zZXRfbXNyX2NvbW1vbmAgaGFuZGxlcyB0aGUgTVNSIHdyaXRlIHRoYXQgZW5hYmxlcyBzdGVhbCB0aW1lIGFjY291bnRpbmcgYW5kIHRyaWdnZXJzIHRoZSBLVk0gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAxOjIzLjY5MDQzOTUyN1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyNjgwOTY4MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMjowMToyMy42OTA5MzUxOTdaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjAyNjc1OTcxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcmRlciBvZiBndWVzdCBtZW1vcnkgYWNjZXNzZXMgaW4gYHJlY29yZF9zdGVhbF90aW1lYCBhbmQgYWRkcyBhIG5ldyBmaWVsZCBgZGVmZXJyZWRfY2xvY2tfdGFza2AgdG8gYHN0cnVjdCBycWAgZm9yIHBhcmF2aXJ0IHN0ZWFsIHRpbWUgYWNjb3VudGluZy4gVGhlIGd1ZXN0IG1lbW9yeSBhY2Nlc3NlcyB1c2UgYHVuc2FmZV9nZXRfdXNlcmAgd2hpY2ggaW5pdGlhbGl6ZXMgdGhlIGxvY2FsIHZhcmlhYmxlcyAoYHZlcnNpb25gIGFuZCBgc3RlYWxgKSB1cG9uIHN1Y2Nlc3MsIG9yIGp1bXBzIHRvIGFuIGVycm9yIGxhYmVsIHVwb24gZmFpbHVyZSwgcHJldmVudGluZyBhbnkgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzLiBUaGUgbmV3IGBkZWZlcnJlZF9jbG9ja190YXNrYCBmaWVsZCBpcyBwYXJ0IG9mIGBzdHJ1Y3QgcnFgLCB3aGljaCBpcyBhIHBlci1DUFUgdmFyaWFibGUgYW5kIHRodXMgemVyby1pbml0aWFsaXplZCBieSBkZWZhdWx0LiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgbm9yIGRvZXMgaXQgY29weSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODY2ODU4NjdkNWU5Y2Y3MDZmYzhkMzQxYjA2ZjE3OWU2M2RlZDcxZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDAxOjUxOjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5pbmRleCA2OTQ2OWJiZGM4NGE4Li41MjVhMTQ0ODE5NWUwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC0zNzUxLDYgKzM3NTEsMzUgQEAgc3RhdGljIHZvaWQgcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0fVxuIFxuIFx0c3QgPSAoc3RydWN0IGt2bV9zdGVhbF90aW1lIF9fdXNlciAqKWdoYy1cdTAwM2VodmE7XG4rXG4rXHRpZiAoIXVzZXJfYWNjZXNzX2JlZ2luKHN0LCBzaXplb2YoKnN0KSkpXG4rXHRcdHJldHVybjtcbitcbitcdHVuc2FmZV9nZXRfdXNlcih2ZXJzaW9uLCBcdTAwMjZzdC1cdTAwM2V2ZXJzaW9uLCBvdXQpO1xuK1x0aWYgKHZlcnNpb24gXHUwMDI2IDEpXG4rXHRcdHZlcnNpb24gKz0gMTsgIC8qIGZpcnN0IHRpbWUgd3JpdGUsIHJhbmRvbSBqdW5rICovXG4rXG4rXHR2ZXJzaW9uICs9IDE7XG4rXHR1bnNhZmVfcHV0X3VzZXIodmVyc2lvbiwgXHUwMDI2c3QtXHUwMDNldmVyc2lvbiwgb3V0KTtcbitcbitcdC8qIFBhaXJzIHdpdGggdGhlIGd1ZXN0IHNpZGUgdmlydF9ybWIoKSBpbiBrdm1fc3RlYWxfY2xvY2soKS4gKi9cbitcdHNtcF93bWIoKTtcbitcbitcdHVuc2FmZV9nZXRfdXNlcihzdGVhbCwgXHUwMDI2c3QtXHUwMDNlc3RlYWwsIG91dCk7XG4rXHRzdGVhbCArPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5IC1cbitcdFx0dmNwdS1cdTAwM2VhcmNoLnN0Lmxhc3Rfc3RlYWw7XG4rXHR2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4rXHR1bnNhZmVfcHV0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuK1xuK1x0dmVyc2lvbiArPSAxO1xuK1x0dW5zYWZlX3B1dF91c2VyKHZlcnNpb24sIFx1MDAyNnN0LVx1MDAzZXZlcnNpb24sIG91dCk7XG4rXG4rXHQvKlxuK1x0ICogUHVibGlzaCB0aGUgc3RlYWx0aW1lIGJlZm9yZSBtYWtpbmcgdGhlIHZDUFUgbG9vayBydW5uYWJsZSB0b1xuK1x0ICogdGhlIGd1ZXN0LlxuK1x0ICovXG4rXHRzbXBfd21iKCk7XG4rXG4gXHQvKlxuIFx0ICogRG9pbmcgYSBUTEIgZmx1c2ggaGVyZSwgb24gdGhlIGd1ZXN0J3MgYmVoYWxmLCBjYW4gYXZvaWRcbiBcdCAqIGV4cGVuc2l2ZSBJUElzLlxuQEAgLTM3NTksOSArMzc4OCw2IEBAIHN0YXRpYyB2b2lkIHJlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0dTggc3RfcHJlZW1wdGVkID0gMDtcbiBcdFx0aW50IGVyciA9IC1FRkFVTFQ7XG4gXG4tXHRcdGlmICghdXNlcl9hY2Nlc3NfYmVnaW4oc3QsIHNpemVvZigqc3QpKSlcbi1cdFx0XHRyZXR1cm47XG4tXG4gXHRcdGFzbSB2b2xhdGlsZShcIjE6IHhjaGdiICUwLCAlMlxcblwiXG4gXHRcdFx0ICAgICBcInhvciAlMSwgJTFcXG5cIlxuIFx0XHRcdCAgICAgXCIyOlxcblwiXG5AQCAtMzc4MSwzNyArMzgwNywxNyBAQCBzdGF0aWMgdm9pZCByZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdGlmIChzdF9wcmVlbXB0ZWQgXHUwMDI2IEtWTV9WQ1BVX0ZMVVNIX1RMQilcbiBcdFx0XHRrdm1fdmNwdV9mbHVzaF90bGJfZ3Vlc3QodmNwdSk7XG4gXG4tXHRcdGlmICghdXNlcl9hY2Nlc3NfYmVnaW4oc3QsIHNpemVvZigqc3QpKSlcbi1cdFx0XHRnb3RvIGRpcnR5O1xuIFx0fSBlbHNlIHtcbi1cdFx0aWYgKCF1c2VyX2FjY2Vzc19iZWdpbihzdCwgc2l6ZW9mKCpzdCkpKVxuLVx0XHRcdHJldHVybjtcbi1cbiBcdFx0dW5zYWZlX3B1dF91c2VyKDAsIFx1MDAyNnN0LVx1MDAzZXByZWVtcHRlZCwgb3V0KTtcbiBcdFx0dmNwdS1cdTAwM2VhcmNoLnN0LnByZWVtcHRlZCA9IDA7XG4rXHRcdHVzZXJfYWNjZXNzX2VuZCgpO1xuIFx0fVxuIFxuLVx0dW5zYWZlX2dldF91c2VyKHZlcnNpb24sIFx1MDAyNnN0LVx1MDAzZXZlcnNpb24sIG91dCk7XG4tXHRpZiAodmVyc2lvbiBcdTAwMjYgMSlcbi1cdFx0dmVyc2lvbiArPSAxOyAgLyogZmlyc3QgdGltZSB3cml0ZSwgcmFuZG9tIGp1bmsgKi9cbi1cbi1cdHZlcnNpb24gKz0gMTtcbi1cdHVuc2FmZV9wdXRfdXNlcih2ZXJzaW9uLCBcdTAwMjZzdC1cdTAwM2V2ZXJzaW9uLCBvdXQpO1xuLVxuLVx0c21wX3dtYigpO1xuLVxuLVx0dW5zYWZlX2dldF91c2VyKHN0ZWFsLCBcdTAwMjZzdC1cdTAwM2VzdGVhbCwgb3V0KTtcbi1cdHN0ZWFsICs9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkgLVxuLVx0XHR2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbDtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbi1cdHVuc2FmZV9wdXRfdXNlcihzdGVhbCwgXHUwMDI2c3QtXHUwMDNlc3RlYWwsIG91dCk7XG4tXG4tXHR2ZXJzaW9uICs9IDE7XG4tXHR1bnNhZmVfcHV0X3VzZXIodmVyc2lvbiwgXHUwMDI2c3QtXHUwMDNldmVyc2lvbiwgb3V0KTtcbitcdG1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KHZjcHUtXHUwMDNla3ZtLCBnaGMtXHUwMDNlbWVtc2xvdCwgZ3BhX3RvX2dmbihnaGMtXHUwMDNlZ3BhKSk7XG4rXHRyZXR1cm47XG4gXG4gIG91dDpcbiBcdHVzZXJfYWNjZXNzX2VuZCgpO1xuLSBkaXJ0eTpcbiBcdG1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KHZjcHUtXHUwMDNla3ZtLCBnaGMtXHUwMDNlbWVtc2xvdCwgZ3BhX3RvX2dmbihnaGMtXHUwMDNlZ3BhKSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jXG5pbmRleCBmNzgyNzUxOTIwMzZiLi41NmFhNDM5MTgyYzc1IDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2NvcmUuY1xuKysrIGIva2VybmVsL3NjaGVkL2NvcmUuY1xuQEAgLTgxNiw2ICs4MTYsMzAgQEAgc3RhdGljIHZvaWQgdXBkYXRlX3JxX2Nsb2NrX3Rhc2soc3RydWN0IHJxICpycSwgczY0IGRlbHRhKVxuICAqL1xuIFx0czY0IF9fbWF5YmVfdW51c2VkIHN0ZWFsID0gMCwgaXJxX2RlbHRhID0gMDtcbiBcbisjaWZkZWYgQ09ORklHX1BBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xuK1x0aWYgKHN0YXRpY19rZXlfZmFsc2UoKFx1MDAyNnBhcmF2aXJ0X3N0ZWFsX3JxX2VuYWJsZWQpKSkge1xuK1x0XHRpbnQgcnFfY3B1ID0gY3B1X29mKHJxKTtcbitcbitcdFx0LypcbitcdFx0ICogQSByZW1vdGUgQ1BVIGNhbiB1cGRhdGUgdGhpcyBycSBiZWZvcmUgdGhlIG93bmVyIHZDUFVcbitcdFx0ICogaGFzIHJlLWVudGVyZWQgdGhlIGd1ZXN0IGFuZCByZWZyZXNoZWQgaXRzIHN0ZWFsdGltZVxuK1x0XHQgKiBzdGF0ZS4gRG8gbm90IGNoYXJnZSB0aGF0IGVsYXBzZWQgdGltZSB0byB0aGUgY3VycmVudFxuK1x0XHQgKiB0YXNrIHVudGlsIHN0ZWFsdGltZSBjYW4gYmUgc2FtcGxlZCBhZnRlciB0aGUgdkNQVSBpc1xuK1x0XHQgKiBubyBsb25nZXIgcHJlZW1wdGVkLlxuK1x0XHQgKi9cbitcdFx0aWYgKHJxX2NwdSAhPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgdmNwdV9pc19wcmVlbXB0ZWQocnFfY3B1KSkge1xuK1x0XHRcdHJxLVx1MDAzZWRlZmVycmVkX2Nsb2NrX3Rhc2sgKz0gZGVsdGE7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChycS1cdTAwM2VkZWZlcnJlZF9jbG9ja190YXNrKSB7XG4rXHRcdFx0ZGVsdGEgKz0gcnEtXHUwMDNlZGVmZXJyZWRfY2xvY2tfdGFzaztcbitcdFx0XHRycS1cdTAwM2VkZWZlcnJlZF9jbG9ja190YXNrID0gMDtcbitcdFx0fVxuK1x0fVxuKyNlbmRpZlxuK1xuICNpZmRlZiBDT05GSUdfSVJRX1RJTUVfQUNDT1VOVElOR1xuIFx0aWYgKGlycXRpbWVfZW5hYmxlZCgpKSB7XG4gXHRcdGlycV9kZWx0YSA9IGlycV90aW1lX3JlYWQoY3B1X29mKHJxKSkgLSBycS1cdTAwM2VwcmV2X2lycV90aW1lO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oIGIva2VybmVsL3NjaGVkL3NjaGVkLmhcbmluZGV4IGU2NTZjNzA1OWJmODYuLjRmZDAwMjI4YWZlZjAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvc2NoZWQuaFxuKysrIGIva2VybmVsL3NjaGVkL3NjaGVkLmhcbkBAIC0xMzI1LDYgKzEzMjUsNyBAQCBzdHJ1Y3QgcnEge1xuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HXG4gXHR1NjRcdFx0XHRwcmV2X3N0ZWFsX3RpbWVfcnE7XG4rXHR1NjRcdFx0XHRkZWZlcnJlZF9jbG9ja190YXNrO1xuICNlbmRpZlxuIFxuIFx0LyogY2FsY19sb2FkIHJlbGF0ZWQgZmllbGRzICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMjowMToyMy42OTA5MzU5NTdaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjAyNjc1NzQzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gTmV3IFJpc2tzIEludHJvZHVjZWQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdGFza2VkIHdpdGggYXNzZXNzaW5nIHRoaXMgcGF0Y2ggZm9yIHBvdGVudGlhbCBLTVNBTiB2dWxuZXJhYmlsaXRpZXMuIE15IGluaXRpYWwgc2NhbiBmb2N1c2VkIG9uIHRoZSBtb2RpZmljYXRpb25zIGFjcm9zcyBgYXJjaC94ODYva3ZtL3g4Ni5jYCwgYGtlcm5lbC9zY2hlZC9jb3JlLmNgLCBhbmQgYGtlcm5lbC9zY2hlZC9zY2hlZC5oYC5cblxuSW4gYGFyY2gveDg2L2t2bS94ODYuY2AsIHRoZSBjaGFuZ2VzIHdpdGhpbiBgcmVjb3JkX3N0ZWFsX3RpbWVgIGludm9sdmUgcmVvcmRlcmluZyBtZW1vcnkgYWNjZXNzZXMgdG8gdGhlIGd1ZXN0J3MgbWVtb3J5IHNwYWNlIHVzaW5nIGB1bnNhZmVfZ2V0X3VzZXJgIGFuZCBgdW5zYWZlX3B1dF91c2VyYC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYm90aCBgdmVyc2lvbmAgYW5kIGBzdGVhbGAgYXJlIHN0YWNrLWFsbG9jYXRlZCBsb2NhbCB2YXJpYWJsZXMsICppbml0aWFsaXplZCBieSBgdW5zYWZlX2dldF91c2VyYCogYmVmb3JlIHRoZXkncmUgZXZlciB1c2VkLiBJZiBgdW5zYWZlX2dldF91c2VyYCBmYWlscywgd2UganVtcCBvdXQgd2l0aCBhbiBlcnJvciwgc28gbm8gdW5pbml0aWFsaXplZCBzdGFjayB2YWx1ZXMgYXJlIGV2ZXIgdXNlZC4gVGhlIGNvZGUncyByZWFkaW5nIGZyb20gYW5kIHdyaXRpbmcgdG8gdGhlICpndWVzdCdzKiBtZW1vcnksIG5vdCBrZXJuZWwgbWVtb3J5LCBhbmQgdGhlIGFjY2VzcyBpcyBhcHByb3ByaWF0ZWx5IHByb3RlY3RlZC4gSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGUgdmFyaWFibGUgZGVjbGFyYXRpb25zLCBlbnN1cmluZyB0aGV5J3JlIGxvY2FsIHRvIHRoZSBmdW5jdGlvbiBhbmQgYXJlIGNvcnJlY3RseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IGlzIGV2ZXIgZXhwb3NlZCB0byB1c2VyIHNwYWNlLlxuXG5UaGUgY2hhbmdlcyBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AgYXJlIHN0cmFpZ2h0Zm9yd2FyZDogYSBuZXcgZmllbGQsIGBycS1cdTAwM2VkZWZlcnJlZF9jbG9ja190YXNrYCwgaXMgaW50cm9kdWNlZCB3aXRoaW4gYHVwZGF0ZV9ycV9jbG9ja190YXNrYC4gVGhpcyBpcyB3aXRoaW4gYHN0cnVjdCBycWAsIGFuZCBgc3RydWN0IHJxYCBpcyBhIHBlci1DUFUgZGF0YSBzdHJ1Y3R1cmUuIFBlci1DUFUgdmFyaWFibGVzIGFyZSAqYWx3YXlzKiB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBrZXJuZWwsIHJlc2lkaW5nIGluIHRoZSBgLmRhdGEuLnBlcmNwdWAgc2VjdGlvbiBvZiBtZW1vcnkuIEkndmUgZG91YmxlLWNoZWNrZWQgdGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIGJlaGF2aW9yIG9mIHBlci1DUFUgdmFyaWFibGVzLCBjb25maXJtaW5nIHRoYXQgdGhpcyBmaWVsZCBpcyBpbXBsaWNpdGx5IGluaXRpYWxpemVkIHRvIHplcm8uIEV2ZW4gaWYgdGhlcmUncyBhIHRoZW9yZXRpY2FsIGlzc3VlLCB0aGlzIG1lbW9yeSBpcyBlbnRpcmVseSB3aXRoaW4gdGhlIGtlcm5lbCwgYW5kIHdlJ3JlIG5vdCBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLiBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nIGluZm9ybWF0aW9uIGxlYWtzIG9mIGtlcm5lbCB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBzbyB0aGF0J3MgaXJyZWxldmFudCBoZXJlLlxuXG5Ob3csIGxldCdzIGdvIGJhY2sgYW5kIGNhcmVmdWxseSBydW4gdGhyb3VnaCB0aGUgS01TQU4gcnVsZS4gVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlIHRoYXQgKm1pZ2h0KiBjb250YWluIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gbmV3IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLiBObyBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIGVycm9ycyBhbGxvdyBzdXJyb3VuZGluZyBjb2RlIHRvIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIGB1bnNhZmVfZ2V0X3VzZXJgIGlzIGNvcnJlY3RseSB1c2VkLCBpbml0aWFsaXppbmcgdmFyaWFibGVzIHdoZW4gdGhleSBhcmUgcmVhZCBhbmQgcHJvdmlkaW5nIGVycm9yIGNvbmRpdGlvbnMuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIG5ldyBLTVNBTi1zcGVjaWZpYyByaXNrcy4gU3RhbmRhcmQga2VybmVsIG1lbW9yeSBzYWZldHkgdG9vbHMgbGlrZSBLQVNBTiBhcmUgc3VmZmljaWVudC4gSSdtIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDk5LCJPdXRwdXRUb2tlbnMiOjIxMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMjowMTo0My45NTg1MTIzNloiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9yZGVyIG9mIGd1ZXN0IG1lbW9yeSBhY2Nlc3NlcyBpbiBgcmVjb3JkX3N0ZWFsX3RpbWVgIGFuZCBhZGRzIGEgbmV3IGZpZWxkIGBkZWZlcnJlZF9jbG9ja190YXNrYCB0byBgc3RydWN0IHJxYCBmb3IgcGFyYXZpcnQgc3RlYWwgdGltZSBhY2NvdW50aW5nLiBUaGUgZ3Vlc3QgbWVtb3J5IGFjY2Vzc2VzIHVzZSBgdW5zYWZlX2dldF91c2VyYCB3aGljaCBpbml0aWFsaXplcyB0aGUgbG9jYWwgdmFyaWFibGVzIChgdmVyc2lvbmAgYW5kIGBzdGVhbGApIHVwb24gc3VjY2Vzcywgb3IganVtcHMgdG8gYW4gZXJyb3IgbGFiZWwgdXBvbiBmYWlsdXJlLCBwcmV2ZW50aW5nIGFueSB1c2Ugb2YgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMuIFRoZSBuZXcgYGRlZmVycmVkX2Nsb2NrX3Rhc2tgIGZpZWxkIGlzIHBhcnQgb2YgYHN0cnVjdCBycWAsIHdoaWNoIGlzIGEgcGVyLUNQVSB2YXJpYWJsZSBhbmQgdGh1cyB6ZXJvLWluaXRpYWxpemVkIGJ5IGRlZmF1bHQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBub3IgZG9lcyBpdCBjb3B5IHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgb3JkZXIgb2YgZ3Vlc3QgbWVtb3J5IGFjY2Vzc2VzIGluIGByZWNvcmRfc3RlYWxfdGltZWAgYW5kIGFkZHMgYSBuZXcgZmllbGQgYGRlZmVycmVkX2Nsb2NrX3Rhc2tgIHRvIGBzdHJ1Y3QgcnFgIGZvciBwYXJhdmlydCBzdGVhbCB0aW1lIGFjY291bnRpbmcuIFRoZSBndWVzdCBtZW1vcnkgYWNjZXNzZXMgdXNlIGB1bnNhZmVfZ2V0X3VzZXJgIHdoaWNoIGluaXRpYWxpemVzIHRoZSBsb2NhbCB2YXJpYWJsZXMgKGB2ZXJzaW9uYCBhbmQgYHN0ZWFsYCkgdXBvbiBzdWNjZXNzLCBvciBqdW1wcyB0byBhbiBlcnJvciBsYWJlbCB1cG9uIGZhaWx1cmUsIHByZXZlbnRpbmcgYW55IHVzZSBvZiB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcy4gVGhlIG5ldyBgZGVmZXJyZWRfY2xvY2tfdGFza2AgZmllbGQgaXMgcGFydCBvZiBgc3RydWN0IHJxYCwgd2hpY2ggaXMgYSBwZXItQ1BVIHZhcmlhYmxlIGFuZCB0aHVzIHplcm8taW5pdGlhbGl6ZWQgYnkgZGVmYXVsdC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IGNvcHkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgZXJyb3JzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzcrc9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-24 01:49:59 +0000 UTC FinishedAt: 2026-08-24 02:01:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "818bebeb63dd6bf5f4e07e145f6cdbace520a34c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PARAVIRT_TIME_ACCOUNTING", "PARAVIRT_SPINLOCKS", "PARAVIRT", "HYPERVISOR_GUEST", "VIRTUALIZATION", "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "818bebeb63dd6bf5f4e07e145f6cdbace520a34c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PARAVIRT_TIME_ACCOUNTING", "PARAVIRT_SPINLOCKS", "PARAVIRT", "HYPERVISOR_GUEST", "VIRTUALIZATION", "KVM" ], "series_id": "1ce4811e-e5cb-48e1-9693-74764a63b202" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_set_msr_common" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI0IDAxOjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBUkFWSVJUX1RJTUVfQUNDT1VOVElORyYjMzQ7LAogICAgJiMzNDtQQVJBVklSVF9TUElOTE9DS1MmIzM0OywKICAgICYjMzQ7UEFSQVZJUlQmIzM0OywKICAgICYjMzQ7SFlQRVJWSVNPUl9HVUVTVCYjMzQ7LAogICAgJiMzNDtWSVJUVUFMSVpBVElPTiYjMzQ7LAogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fc2V0X21zcl9jb21tb24mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgb3JkZXIgb2YgZ3Vlc3QgbWVtb3J5IGFjY2Vzc2VzIGluIGByZWNvcmRfc3RlYWxfdGltZWAgYW5kIGFkZHMgYSBuZXcgZmllbGQgYGRlZmVycmVkX2Nsb2NrX3Rhc2tgIHRvIGBzdHJ1Y3QgcnFgIGZvciBwYXJhdmlydCBzdGVhbCB0aW1lIGFjY291bnRpbmcuIFRoZSBndWVzdCBtZW1vcnkgYWNjZXNzZXMgdXNlIGB1bnNhZmVfZ2V0X3VzZXJgIHdoaWNoIGluaXRpYWxpemVzIHRoZSBsb2NhbCB2YXJpYWJsZXMgKGB2ZXJzaW9uYCBhbmQgYHN0ZWFsYCkgdXBvbiBzdWNjZXNzLCBvciBqdW1wcyB0byBhbiBlcnJvciBsYWJlbCB1cG9uIGZhaWx1cmUsIHByZXZlbnRpbmcgYW55IHVzZSBvZiB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcy4gVGhlIG5ldyBgZGVmZXJyZWRfY2xvY2tfdGFza2AgZmllbGQgaXMgcGFydCBvZiBgc3RydWN0IHJxYCwgd2hpY2ggaXMgYSBwZXItQ1BVIHZhcmlhYmxlIGFuZCB0aHVzIHplcm8taW5pdGlhbGl6ZWQgYnkgZGVmYXVsdC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IGNvcHkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgZXJyb3JzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3RlYWwgdGltZSBhY2NvdW50aW5nIGxvZ2ljIGluIEtWTSBhbmQgdGhlIHNjaGVkdWxlci4gSXQgY2hhbmdlcyB0aGUgb3JkZXIgb2YgdXNlciBhY2Nlc3MgYW5kIG1lbW9yeSBiYXJyaWVycyBpbiBgcmVjb3JkX3N0ZWFsX3RpbWVgIChLVk0pIGFuZCBkZWZlcnMgY2xvY2sgdGFzayB1cGRhdGVzIGluIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AgKHNjaGVkdWxlcikgd2hlbiB0aGUgdkNQVSBpcyBwcmVlbXB0ZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgYW5kIEtWTSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuIGBrdm1fc2V0X21zcl9jb21tb25gIGhhbmRsZXMgdGhlIE1TUiB3cml0ZSB0aGF0IGVuYWJsZXMgc3RlYWwgdGltZSBhY2NvdW50aW5nIGFuZCB0cmlnZ2VycyB0aGUgS1ZNIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAxOjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODY2ODU4NjdkNWU5Y2Y3MDZmYzhkMzQxYjA2ZjE3OWU2M2RlZDcxZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDAxOjUxOjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggNjk0NjliYmRjODRhOC4uNTI1YTE0NDgxOTVlMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtMzc1MSw2ICYjNDM7Mzc1MSwzNSBAQCBzdGF0aWMgdm9pZCByZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR9XG4gXG4gXHRzdCA9IChzdHJ1Y3Qga3ZtX3N0ZWFsX3RpbWUgX191c2VyICopZ2hjLVx1MDAzZWh2YTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF1c2VyX2FjY2Vzc19iZWdpbihzdCwgc2l6ZW9mKCpzdCkpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR1bnNhZmVfZ2V0X3VzZXIodmVyc2lvbiwgXHUwMDI2c3QtXHUwMDNldmVyc2lvbiwgb3V0KTtcbiYjNDM7XHRpZiAodmVyc2lvbiBcdTAwMjYgMSlcbiYjNDM7XHRcdHZlcnNpb24gJiM0Mzs9IDE7ICAvKiBmaXJzdCB0aW1lIHdyaXRlLCByYW5kb20ganVuayAqL1xuJiM0MztcbiYjNDM7XHR2ZXJzaW9uICYjNDM7PSAxO1xuJiM0MztcdHVuc2FmZV9wdXRfdXNlcih2ZXJzaW9uLCBcdTAwMjZzdC1cdTAwM2V2ZXJzaW9uLCBvdXQpO1xuJiM0MztcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHRoZSBndWVzdCBzaWRlIHZpcnRfcm1iKCkgaW4ga3ZtX3N0ZWFsX2Nsb2NrKCkuICovXG4mIzQzO1x0c21wX3dtYigpO1xuJiM0MztcbiYjNDM7XHR1bnNhZmVfZ2V0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuJiM0MztcdHN0ZWFsICYjNDM7PSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5IC1cbiYjNDM7XHRcdHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsO1xuJiM0MztcdHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbiYjNDM7XHR1bnNhZmVfcHV0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuJiM0MztcbiYjNDM7XHR2ZXJzaW9uICYjNDM7PSAxO1xuJiM0MztcdHVuc2FmZV9wdXRfdXNlcih2ZXJzaW9uLCBcdTAwMjZzdC1cdTAwM2V2ZXJzaW9uLCBvdXQpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFB1Ymxpc2ggdGhlIHN0ZWFsdGltZSBiZWZvcmUgbWFraW5nIHRoZSB2Q1BVIGxvb2sgcnVubmFibGUgdG9cbiYjNDM7XHQgKiB0aGUgZ3Vlc3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0c21wX3dtYigpO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBEb2luZyBhIFRMQiBmbHVzaCBoZXJlLCBvbiB0aGUgZ3Vlc3QmIzM5O3MgYmVoYWxmLCBjYW4gYXZvaWRcbiBcdCAqIGV4cGVuc2l2ZSBJUElzLlxuQEAgLTM3NTksOSAmIzQzOzM3ODgsNiBAQCBzdGF0aWMgdm9pZCByZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHU4IHN0X3ByZWVtcHRlZCA9IDA7XG4gXHRcdGludCBlcnIgPSAtRUZBVUxUO1xuIFxuLVx0XHRpZiAoIXVzZXJfYWNjZXNzX2JlZ2luKHN0LCBzaXplb2YoKnN0KSkpXG4tXHRcdFx0cmV0dXJuO1xuLVxuIFx0XHRhc20gdm9sYXRpbGUoXCYjMzQ7MTogeGNoZ2IgJTAsICUyXFxuXCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDt4b3IgJTEsICUxXFxuXCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDsyOlxcblwmIzM0O1xuQEAgLTM3ODEsMzcgJiM0MzszODA3LDE3IEBAIHN0YXRpYyB2b2lkIHJlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0aWYgKHN0X3ByZWVtcHRlZCBcdTAwMjYgS1ZNX1ZDUFVfRkxVU0hfVExCKVxuIFx0XHRcdGt2bV92Y3B1X2ZsdXNoX3RsYl9ndWVzdCh2Y3B1KTtcbiBcbi1cdFx0aWYgKCF1c2VyX2FjY2Vzc19iZWdpbihzdCwgc2l6ZW9mKCpzdCkpKVxuLVx0XHRcdGdvdG8gZGlydHk7XG4gXHR9IGVsc2Uge1xuLVx0XHRpZiAoIXVzZXJfYWNjZXNzX2JlZ2luKHN0LCBzaXplb2YoKnN0KSkpXG4tXHRcdFx0cmV0dXJuO1xuLVxuIFx0XHR1bnNhZmVfcHV0X3VzZXIoMCwgXHUwMDI2c3QtXHUwMDNlcHJlZW1wdGVkLCBvdXQpO1xuIFx0XHR2Y3B1LVx1MDAzZWFyY2guc3QucHJlZW1wdGVkID0gMDtcbiYjNDM7XHRcdHVzZXJfYWNjZXNzX2VuZCgpO1xuIFx0fVxuIFxuLVx0dW5zYWZlX2dldF91c2VyKHZlcnNpb24sIFx1MDAyNnN0LVx1MDAzZXZlcnNpb24sIG91dCk7XG4tXHRpZiAodmVyc2lvbiBcdTAwMjYgMSlcbi1cdFx0dmVyc2lvbiAmIzQzOz0gMTsgIC8qIGZpcnN0IHRpbWUgd3JpdGUsIHJhbmRvbSBqdW5rICovXG4tXG4tXHR2ZXJzaW9uICYjNDM7PSAxO1xuLVx0dW5zYWZlX3B1dF91c2VyKHZlcnNpb24sIFx1MDAyNnN0LVx1MDAzZXZlcnNpb24sIG91dCk7XG4tXG4tXHRzbXBfd21iKCk7XG4tXG4tXHR1bnNhZmVfZ2V0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuLVx0c3RlYWwgJiM0Mzs9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkgLVxuLVx0XHR2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbDtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbi1cdHVuc2FmZV9wdXRfdXNlcihzdGVhbCwgXHUwMDI2c3QtXHUwMDNlc3RlYWwsIG91dCk7XG4tXG4tXHR2ZXJzaW9uICYjNDM7PSAxO1xuLVx0dW5zYWZlX3B1dF91c2VyKHZlcnNpb24sIFx1MDAyNnN0LVx1MDAzZXZlcnNpb24sIG91dCk7XG4mIzQzO1x0bWFya19wYWdlX2RpcnR5X2luX3Nsb3QodmNwdS1cdTAwM2Vrdm0sIGdoYy1cdTAwM2VtZW1zbG90LCBncGFfdG9fZ2ZuKGdoYy1cdTAwM2VncGEpKTtcbiYjNDM7XHRyZXR1cm47XG4gXG4gIG91dDpcbiBcdHVzZXJfYWNjZXNzX2VuZCgpO1xuLSBkaXJ0eTpcbiBcdG1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KHZjcHUtXHUwMDNla3ZtLCBnaGMtXHUwMDNlbWVtc2xvdCwgZ3BhX3RvX2dmbihnaGMtXHUwMDNlZ3BhKSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jXG5pbmRleCBmNzgyNzUxOTIwMzZiLi41NmFhNDM5MTgyYzc1IDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2NvcmUuY1xuQEAgLTgxNiw2ICYjNDM7ODE2LDMwIEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9ycV9jbG9ja190YXNrKHN0cnVjdCBycSAqcnEsIHM2NCBkZWx0YSlcbiAgKi9cbiBcdHM2NCBfX21heWJlX3VudXNlZCBzdGVhbCA9IDAsIGlycV9kZWx0YSA9IDA7XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HXG4mIzQzO1x0aWYgKHN0YXRpY19rZXlfZmFsc2UoKFx1MDAyNnBhcmF2aXJ0X3N0ZWFsX3JxX2VuYWJsZWQpKSkge1xuJiM0MztcdFx0aW50IHJxX2NwdSA9IGNwdV9vZihycSk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEEgcmVtb3RlIENQVSBjYW4gdXBkYXRlIHRoaXMgcnEgYmVmb3JlIHRoZSBvd25lciB2Q1BVXG4mIzQzO1x0XHQgKiBoYXMgcmUtZW50ZXJlZCB0aGUgZ3Vlc3QgYW5kIHJlZnJlc2hlZCBpdHMgc3RlYWx0aW1lXG4mIzQzO1x0XHQgKiBzdGF0ZS4gRG8gbm90IGNoYXJnZSB0aGF0IGVsYXBzZWQgdGltZSB0byB0aGUgY3VycmVudFxuJiM0MztcdFx0ICogdGFzayB1bnRpbCBzdGVhbHRpbWUgY2FuIGJlIHNhbXBsZWQgYWZ0ZXIgdGhlIHZDUFUgaXNcbiYjNDM7XHRcdCAqIG5vIGxvbmdlciBwcmVlbXB0ZWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChycV9jcHUgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICB2Y3B1X2lzX3ByZWVtcHRlZChycV9jcHUpKSB7XG4mIzQzO1x0XHRcdHJxLVx1MDAzZWRlZmVycmVkX2Nsb2NrX3Rhc2sgJiM0Mzs9IGRlbHRhO1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJxLVx1MDAzZWRlZmVycmVkX2Nsb2NrX3Rhc2spIHtcbiYjNDM7XHRcdFx0ZGVsdGEgJiM0Mzs9IHJxLVx1MDAzZWRlZmVycmVkX2Nsb2NrX3Rhc2s7XG4mIzQzO1x0XHRcdHJxLVx1MDAzZWRlZmVycmVkX2Nsb2NrX3Rhc2sgPSAwO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuICNpZmRlZiBDT05GSUdfSVJRX1RJTUVfQUNDT1VOVElOR1xuIFx0aWYgKGlycXRpbWVfZW5hYmxlZCgpKSB7XG4gXHRcdGlycV9kZWx0YSA9IGlycV90aW1lX3JlYWQoY3B1X29mKHJxKSkgLSBycS1cdTAwM2VwcmV2X2lycV90aW1lO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oIGIva2VybmVsL3NjaGVkL3NjaGVkLmhcbmluZGV4IGU2NTZjNzA1OWJmODYuLjRmZDAwMjI4YWZlZjAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvc2NoZWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL3NjaGVkLmhcbkBAIC0xMzI1LDYgJiM0MzsxMzI1LDcgQEAgc3RydWN0IHJxIHtcbiAjZW5kaWZcbiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xuIFx0dTY0XHRcdFx0cHJldl9zdGVhbF90aW1lX3JxO1xuJiM0MztcdHU2NFx0XHRcdGRlZmVycmVkX2Nsb2NrX3Rhc2s7XG4gI2VuZGlmXG4gXG4gXHQvKiBjYWxjX2xvYWQgcmVsYXRlZCBmaWVsZHMgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMTo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT45bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HJiMzNDssCiAgICAmIzM0O1BBUkFWSVJUX1NQSU5MT0NLUyYjMzQ7LAogICAgJiMzNDtQQVJBVklSVCYjMzQ7LAogICAgJiMzNDtIWVBFUlZJU09SX0dVRVNUJiMzNDssCiAgICAmIzM0O1ZJUlRVQUxJWkFUSU9OJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9zZXRfbXNyX2NvbW1vbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3RlYWwgdGltZSBhY2NvdW50aW5nIGxvZ2ljIGluIEtWTSBhbmQgdGhlIHNjaGVkdWxlci4gSXQgY2hhbmdlcyB0aGUgb3JkZXIgb2YgdXNlciBhY2Nlc3MgYW5kIG1lbW9yeSBiYXJyaWVycyBpbiBgcmVjb3JkX3N0ZWFsX3RpbWVgIChLVk0pIGFuZCBkZWZlcnMgY2xvY2sgdGFzayB1cGRhdGVzIGluIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AgKHNjaGVkdWxlcikgd2hlbiB0aGUgdkNQVSBpcyBwcmVlbXB0ZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgYW5kIEtWTSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuIGBrdm1fc2V0X21zcl9jb21tb25gIGhhbmRsZXMgdGhlIE1TUiB3cml0ZSB0aGF0IGVuYWJsZXMgc3RlYWwgdGltZSBhY2NvdW50aW5nIGFuZCB0cmlnZ2VycyB0aGUgS1ZNIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODY2ODU4NjdkNWU5Y2Y3MDZmYzhkMzQxYjA2ZjE3OWU2M2RlZDcxZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDAxOjUxOjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDY5NDY5YmJkYzg0YTguLjUyNWExNDQ4MTk1ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTM3NTEsNiAmIzQzOzM3NTEsMzUgQEAgc3RhdGljIHZvaWQgcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCX0KIAogCXN0ID0gKHN0cnVjdCBrdm1fc3RlYWxfdGltZSBfX3VzZXIgKilnaGMtJmd0O2h2YTsKJiM0MzsKJiM0MzsJaWYgKCF1c2VyX2FjY2Vzc19iZWdpbihzdCwgc2l6ZW9mKCpzdCkpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl1bnNhZmVfZ2V0X3VzZXIodmVyc2lvbiwgJmFtcDtzdC0mZ3Q7dmVyc2lvbiwgb3V0KTsKJiM0MzsJaWYgKHZlcnNpb24gJmFtcDsgMSkKJiM0MzsJCXZlcnNpb24gJiM0Mzs9IDE7ICAvKiBmaXJzdCB0aW1lIHdyaXRlLCByYW5kb20ganVuayAqLwomIzQzOwomIzQzOwl2ZXJzaW9uICYjNDM7PSAxOwomIzQzOwl1bnNhZmVfcHV0X3VzZXIodmVyc2lvbiwgJmFtcDtzdC0mZ3Q7dmVyc2lvbiwgb3V0KTsKJiM0MzsKJiM0MzsJLyogUGFpcnMgd2l0aCB0aGUgZ3Vlc3Qgc2lkZSB2aXJ0X3JtYigpIGluIGt2bV9zdGVhbF9jbG9jaygpLiAqLwomIzQzOwlzbXBfd21iKCk7CiYjNDM7CiYjNDM7CXVuc2FmZV9nZXRfdXNlcihzdGVhbCwgJmFtcDtzdC0mZ3Q7c3RlYWwsIG91dCk7CiYjNDM7CXN0ZWFsICYjNDM7PSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheSAtCiYjNDM7CQl2Y3B1LSZndDthcmNoLnN0Lmxhc3Rfc3RlYWw7CiYjNDM7CXZjcHUtJmd0O2FyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwomIzQzOwl1bnNhZmVfcHV0X3VzZXIoc3RlYWwsICZhbXA7c3QtJmd0O3N0ZWFsLCBvdXQpOwomIzQzOwomIzQzOwl2ZXJzaW9uICYjNDM7PSAxOwomIzQzOwl1bnNhZmVfcHV0X3VzZXIodmVyc2lvbiwgJmFtcDtzdC0mZ3Q7dmVyc2lvbiwgb3V0KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUHVibGlzaCB0aGUgc3RlYWx0aW1lIGJlZm9yZSBtYWtpbmcgdGhlIHZDUFUgbG9vayBydW5uYWJsZSB0bwomIzQzOwkgKiB0aGUgZ3Vlc3QuCiYjNDM7CSAqLwomIzQzOwlzbXBfd21iKCk7CiYjNDM7CiAJLyoKIAkgKiBEb2luZyBhIFRMQiBmbHVzaCBoZXJlLCBvbiB0aGUgZ3Vlc3QmIzM5O3MgYmVoYWxmLCBjYW4gYXZvaWQKIAkgKiBleHBlbnNpdmUgSVBJcy4KQEAgLTM3NTksOSAmIzQzOzM3ODgsNiBAQCBzdGF0aWMgdm9pZCByZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCXU4IHN0X3ByZWVtcHRlZCA9IDA7CiAJCWludCBlcnIgPSAtRUZBVUxUOwogCi0JCWlmICghdXNlcl9hY2Nlc3NfYmVnaW4oc3QsIHNpemVvZigqc3QpKSkKLQkJCXJldHVybjsKLQogCQlhc20gdm9sYXRpbGUoJiMzNDsxOiB4Y2hnYiAlMCwgJTJcbiYjMzQ7CiAJCQkgICAgICYjMzQ7eG9yICUxLCAlMVxuJiMzNDsKIAkJCSAgICAgJiMzNDsyOlxuJiMzNDsKQEAgLTM3ODEsMzcgJiM0MzszODA3LDE3IEBAIHN0YXRpYyB2b2lkIHJlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJaWYgKHN0X3ByZWVtcHRlZCAmYW1wOyBLVk1fVkNQVV9GTFVTSF9UTEIpCiAJCQlrdm1fdmNwdV9mbHVzaF90bGJfZ3Vlc3QodmNwdSk7CiAKLQkJaWYgKCF1c2VyX2FjY2Vzc19iZWdpbihzdCwgc2l6ZW9mKCpzdCkpKQotCQkJZ290byBkaXJ0eTsKIAl9IGVsc2UgewotCQlpZiAoIXVzZXJfYWNjZXNzX2JlZ2luKHN0LCBzaXplb2YoKnN0KSkpCi0JCQlyZXR1cm47Ci0KIAkJdW5zYWZlX3B1dF91c2VyKDAsICZhbXA7c3QtJmd0O3ByZWVtcHRlZCwgb3V0KTsKIAkJdmNwdS0mZ3Q7YXJjaC5zdC5wcmVlbXB0ZWQgPSAwOwomIzQzOwkJdXNlcl9hY2Nlc3NfZW5kKCk7CiAJfQogCi0JdW5zYWZlX2dldF91c2VyKHZlcnNpb24sICZhbXA7c3QtJmd0O3ZlcnNpb24sIG91dCk7Ci0JaWYgKHZlcnNpb24gJmFtcDsgMSkKLQkJdmVyc2lvbiAmIzQzOz0gMTsgIC8qIGZpcnN0IHRpbWUgd3JpdGUsIHJhbmRvbSBqdW5rICovCi0KLQl2ZXJzaW9uICYjNDM7PSAxOwotCXVuc2FmZV9wdXRfdXNlcih2ZXJzaW9uLCAmYW1wO3N0LSZndDt2ZXJzaW9uLCBvdXQpOwotCi0Jc21wX3dtYigpOwotCi0JdW5zYWZlX2dldF91c2VyKHN0ZWFsLCAmYW1wO3N0LSZndDtzdGVhbCwgb3V0KTsKLQlzdGVhbCAmIzQzOz0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXkgLQotCQl2Y3B1LSZndDthcmNoLnN0Lmxhc3Rfc3RlYWw7Ci0JdmNwdS0mZ3Q7YXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7Ci0JdW5zYWZlX3B1dF91c2VyKHN0ZWFsLCAmYW1wO3N0LSZndDtzdGVhbCwgb3V0KTsKLQotCXZlcnNpb24gJiM0Mzs9IDE7Ci0JdW5zYWZlX3B1dF91c2VyKHZlcnNpb24sICZhbXA7c3QtJmd0O3ZlcnNpb24sIG91dCk7CiYjNDM7CW1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KHZjcHUtJmd0O2t2bSwgZ2hjLSZndDttZW1zbG90LCBncGFfdG9fZ2ZuKGdoYy0mZ3Q7Z3BhKSk7CiYjNDM7CXJldHVybjsKIAogIG91dDoKIAl1c2VyX2FjY2Vzc19lbmQoKTsKLSBkaXJ0eToKIAltYXJrX3BhZ2VfZGlydHlfaW5fc2xvdCh2Y3B1LSZndDtrdm0sIGdoYy0mZ3Q7bWVtc2xvdCwgZ3BhX3RvX2dmbihnaGMtJmd0O2dwYSkpOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuYwppbmRleCBmNzgyNzUxOTIwMzZiLi41NmFhNDM5MTgyYzc1IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9jb3JlLmMKQEAgLTgxNiw2ICYjNDM7ODE2LDMwIEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9ycV9jbG9ja190YXNrKHN0cnVjdCBycSAqcnEsIHM2NCBkZWx0YSkKICAqLwogCXM2NCBfX21heWJlX3VudXNlZCBzdGVhbCA9IDAsIGlycV9kZWx0YSA9IDA7CiAKJiM0MzsjaWZkZWYgQ09ORklHX1BBUkFWSVJUX1RJTUVfQUNDT1VOVElORwomIzQzOwlpZiAoc3RhdGljX2tleV9mYWxzZSgoJmFtcDtwYXJhdmlydF9zdGVhbF9ycV9lbmFibGVkKSkpIHsKJiM0MzsJCWludCBycV9jcHUgPSBjcHVfb2YocnEpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEEgcmVtb3RlIENQVSBjYW4gdXBkYXRlIHRoaXMgcnEgYmVmb3JlIHRoZSBvd25lciB2Q1BVCiYjNDM7CQkgKiBoYXMgcmUtZW50ZXJlZCB0aGUgZ3Vlc3QgYW5kIHJlZnJlc2hlZCBpdHMgc3RlYWx0aW1lCiYjNDM7CQkgKiBzdGF0ZS4gRG8gbm90IGNoYXJnZSB0aGF0IGVsYXBzZWQgdGltZSB0byB0aGUgY3VycmVudAomIzQzOwkJICogdGFzayB1bnRpbCBzdGVhbHRpbWUgY2FuIGJlIHNhbXBsZWQgYWZ0ZXIgdGhlIHZDUFUgaXMKJiM0MzsJCSAqIG5vIGxvbmdlciBwcmVlbXB0ZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChycV9jcHUgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdmNwdV9pc19wcmVlbXB0ZWQocnFfY3B1KSkgewomIzQzOwkJCXJxLSZndDtkZWZlcnJlZF9jbG9ja190YXNrICYjNDM7PSBkZWx0YTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAocnEtJmd0O2RlZmVycmVkX2Nsb2NrX3Rhc2spIHsKJiM0MzsJCQlkZWx0YSAmIzQzOz0gcnEtJmd0O2RlZmVycmVkX2Nsb2NrX3Rhc2s7CiYjNDM7CQkJcnEtJmd0O2RlZmVycmVkX2Nsb2NrX3Rhc2sgPSAwOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CiAjaWZkZWYgQ09ORklHX0lSUV9USU1FX0FDQ09VTlRJTkcKIAlpZiAoaXJxdGltZV9lbmFibGVkKCkpIHsKIAkJaXJxX2RlbHRhID0gaXJxX3RpbWVfcmVhZChjcHVfb2YocnEpKSAtIHJxLSZndDtwcmV2X2lycV90aW1lOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL3NjaGVkLmggYi9rZXJuZWwvc2NoZWQvc2NoZWQuaAppbmRleCBlNjU2YzcwNTliZjg2Li40ZmQwMDIyOGFmZWYwIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvc2NoZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvc2NoZWQuaApAQCAtMTMyNSw2ICYjNDM7MTMyNSw3IEBAIHN0cnVjdCBycSB7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HCiAJdTY0CQkJcHJldl9zdGVhbF90aW1lX3JxOwomIzQzOwl1NjQJCQlkZWZlcnJlZF9jbG9ja190YXNrOwogI2VuZGlmCiAKIAkvKiBjYWxjX2xvYWQgcmVsYXRlZCBmaWVsZHMgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwMgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRoaXMgUGF0Y2g6IEluaXRpYWwgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLCBhbmQgaXQmIzM5O3MgbWFraW5nIHNvbWUgY2hhbmdlcyB0byBgYXJjaC94ODYva3ZtL3g4Ni5jYCBhbmQgYGtlcm5lbC9zY2hlZC9jb3JlLmNgLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYHJlY29yZF9zdGVhbF90aW1lYCBpbiBLVk0gaXMgZ2V0dGluZyBhIGNhbGwtb3JkZXIgc2h1ZmZsZSB3aXRoIGB1c2VyX2FjY2Vzc19iZWdpbmAgYW5kIHRob3NlIHVuc2FmZSBtZW1vcnkgYWNjZXNzZXMsIGFuZCB0aGVuIHRoZSBzY2hlZHVsZXIgY29kZSwgYHVwZGF0ZV9ycV9jbG9ja190YXNrYCwgaXMgZ2V0dGluZyB0d2Vha2VkIHRvIGhhbmRsZSBkZWZlcnJpbmcgY2xvY2sgdXBkYXRlcyB3aGVuIHRoZXJlJiMzOTtzIGEgcmVtb3RlIENQVSBpbnRlcmFjdGluZyB3aXRoIHRoZSBydW5xdWV1ZS4KCk15IGluaXRpYWwgdGhvdWdodCBpcywgKnllcyosIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb3JlIGtlcm5lbCBsb2dpYyBoZXJlIOKAkyB0aGUgc2NoZWR1bGVyIGFuZCBLVk0sIGJvdGggYXJlIHByZXR0eSBjZW50cmFsIGFuZCBnZXQgaGFtbWVyZWQgcHJldHR5IGhhcmQuIFRoYXQmIzM5O3MgYSBoaWdoIHNpZ25hbC10by1ub2lzZSByYXRpby4gVGhleSYjMzk7cmUgYm90aCBoaWdobHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiAKCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB3aGF0IGZ1bmN0aW9ucyB0byB0YXJnZXQgZGlyZWN0bHkuIEZyb20gdGhlIHBhdGNoIHRleHQsIEkgd2FudCB0byBmb2N1cyBvbjoKCiogICBgcmVjb3JkX3N0ZWFsX3RpbWVgIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBJdCYjMzk7cyBgc3RhdGljYCwgYnV0IEkmIzM5O20gYmV0dGluZyBpdCYjMzk7cyBjYWxsZWQgZnJvbSBzb21ldGhpbmcgbGlrZSBga3ZtX2FyY2hfdmNwdV9sb2FkYCBvciBzb21ldGhpbmcgc2ltaWxhciwgaXQgd2lsbCBuZWVkIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KKiAgIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AgaW4gYGtlcm5lbC9zY2hlZC9jb3JlLmNgIOKAkyBhbHNvIGBzdGF0aWNgLCBidXQgY2FsbGVkIGZyb20gdGhlIGB1cGRhdGVfcnFfY2xvY2tgIGZ1bmN0aW9uLgoKVGltZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNhbGxlcnMgb2YgYHJlY29yZF9zdGVhbF90aW1lYC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhpdHRpbmcgdGhhdCBjb2RlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDE6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjb3JkX3N0ZWFsX3RpbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTM3MTg9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXJ2aWNlX2xvY2FsX3RsYl9mbHVzaF9yZXF1ZXN0cyk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMzcxOS1cbmFyY2gveDg2L2t2bS94ODYuYzozNzIwOnN0YXRpYyB2b2lkIHJlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ODYuYy0zNzIxLXtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTExMTg9c3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTEyMDgtXHRcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1NURUFMX1VQREFURSwgdmNwdSkpXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTEyMDk6XHRcdFx0cmVjb3JkX3N0ZWFsX3RpbWUodmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTEyMTAtXHRcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1BNVSwgdmNwdSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ3MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipUcmFjaW5nIHRoZSBTb3VyY2Ugb2YgYHJlY29yZF9zdGVhbF90aW1lYCoqCgpPa2F5LCBzbyBgcmVjb3JkX3N0ZWFsX3RpbWVgIGlzIGJlaW5nIGNhbGxlZCBzb21ld2hlcmUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcGF0aC4gVGhlIHRleHQgdGVsbHMgbWUgaXQgb3JpZ2luYXRlcyBmcm9tIGB2Y3B1X2VudGVyX2d1ZXN0YC4gTm93LCBgdmNwdV9lbnRlcl9ndWVzdGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0cyBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBmaWxlIGl0JiMzOTtzIGRlZmluZWQgaW4sIG1ha2luZyB0aGUgc2VhcmNoIGEgYml0IGVhc2llci4gSSBhbHNvIHNlZSB0aGF0IGl0IGlzIGNhbGxlZCBmcm9tIGB2Y3B1X3J1bmAuIEFoIGhhLCBgdmNwdV9ydW5gIG9yIG1heWJlIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAuIFRoYXQgbmFycm93cyBpdCBkb3duIGNvbnNpZGVyYWJseS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgY2FsbCBzdGFja3Mgb2YgZWl0aGVyIG9mIHRob3NlIHR3byBmdW5jdGlvbnMuIFRpbWUgdG8gbG9vayBmb3IgdGhlIG5leHQgY2x1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Y3B1X2VudGVyX2d1ZXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz05MDY9dm9pZCBrdm1fcmVxdWV1ZV9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgbnIsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTkxMi1cdCAqIGluamVjdGlvbiB3YXMgYmxvY2tlZCBieSBuZXN0ZWRfcnVuX3BlbmRpbmcuICBJbiB0aGF0IGNhc2UsIGhvd2V2ZXIsXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTEzOlx0ICogdmNwdV9lbnRlcl9ndWVzdCgpIHJlcXVlc3RzIGFuIGltbWVkaWF0ZSBleGl0LCBhbmQgdGhlIGd1ZXN0XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTE0LVx0ICogc2hvdWxkbiYjMzk7dCBwcm9jZWVkIGZhciBlbm91Z2ggdG8gbmVlZCByZWluamVjdGlvbi5cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MzY5OD1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfZmx1c2hfdGxiX2N1cnJlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0zNzA1LSAqIFNlcnZpY2UgXCYjMzQ7bG9jYWxcJiMzNDsgVExCIGZsdXNoIHJlcXVlc3RzLCB3aGljaCBhcmUgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgTU1VXG5hcmNoL3g4Ni9rdm0veDg2LmM6MzcwNjogKiBjb250ZXh0LiAgSW4gYWRkaXRpb24gdG8gdGhlIGdlbmVyaWMgZXZlbnQgaGFuZGxpbmcgaW4gdmNwdV9lbnRlcl9ndWVzdCgpLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTM3MDctICogVExCIGZsdXNoZXMgdGhhdCBhcmUgdGFyZ2V0ZWQgYXQgYW4gTU1VIGNvbnRleHQgYWxzbyBuZWVkIHRvIGJlIHNlcnZpY2VkXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwOTYwPXZvaWQgX19rdm1fc2V0X29yX2NsZWFyX2FwaWN2X2luaGliaXQoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDk4MC1cdFx0ICogS2ljayBhbGwgdkNQVXMgYmVmb3JlIHNldHRpbmcgYXBpY3ZfaW5oaWJpdF9yZWFzb25zIHRvIGF2b2lkXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTA5ODE6XHRcdCAqIGZhbHNlIHBvc2l0aXZlcyBpbiB0aGUgc2FuaXR5IGNoZWNrIFdBUk4gaW4gdmNwdV9lbnRlcl9ndWVzdCgpLlxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwOTgyLVx0XHQgKiBUaGlzIHRhc2sgd2lsbCB3YWl0IGZvciBhbGwgdkNQVXMgdG8gYWNrIHRoZSBraWNrIElSUSBiZWZvcmVcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA5ODQtXHRcdCAqIGJsb2NrIG9uIGFjcXVpcmluZyBhcGljdl91cGRhdGVfbG9jayBzbyB0aGF0IHZDUFVzIGNhbiYjMzk7dFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwOTg1Olx0XHQgKiByZWRvIHZjcHVfZW50ZXJfZ3Vlc3QoKSB3aXRob3V0IHNlZWluZyB0aGUgbmV3IGluaGliaXQgc3RhdGUuXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA5ODYtXHRcdCAqXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTExMTA0PXN0YXRpYyB2b2lkIGt2bV92Y3B1X3JlbG9hZF9hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTExMTctICovXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTExMTg6c3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ODYuYy0xMTExOS17XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTExNjk4PXN0YXRpYyBpbnQgdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTcxMi1cdFx0aWYgKGt2bV92Y3B1X3J1bm5pbmcodmNwdSkpIHtcbmFyY2gveDg2L2t2bS94ODYuYzoxMTcxMzpcdFx0XHRyID0gdmNwdV9lbnRlcl9ndWVzdCh2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy0xMTcxNC1cdFx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjM4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk15IExpbmUgb2YgUmVhc29uaW5nIHdpdGggdmNwdV9ydW4qKgoKQWxyaWdodCwgc28gdGhlIGNhbGwgZmxvdyBoZXJlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBpdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEkgc2VlIGB2Y3B1X3J1bmAgYXMgdGhlIGNvcmUgZXhlY3V0aW9uIGVudHJ5IHBvaW50IGZvciBhIHZpcnR1YWwgQ1BVLiBUaGUgaW1wb3J0YW50IHBhcnQgaXMgKmhvdyogd2UmIzM5O3JlIGdldHRpbmcgdG8gdGhhdCBmdW5jdGlvbiBjYWxsLgoKSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhhdCBgdmNwdV9ydW5gIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAuIFRoYXQgbmFtaW5nIGNvbnZlbnRpb24gaXMgYSBiaWcgaGludC4gSSBpbW1lZGlhdGVseSBrbm93IHRoZSBnZW5lcmFsIHByb2Nlc3MgZmxvdyBhbmQgd2hlcmUgbXkgYXR0ZW50aW9uIG5lZWRzIHRvIGZvY3VzIGlmIEkgZW5jb3VudGVyIGlzc3Vlcywgb3Igd2FudCB0byBsb29rIGludG8gcGVyZm9ybWFuY2UgYXNwZWN0cy4gVGhpcyBgaW9jdGxfcnVuYCBzdWdnZXN0cyB0aGF0IHRoZSBLVk0gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgYW5kIGluaXRpYXRpbmcgdGhlIHZDUFUmIzM5O3MgZXhlY3V0aW9uIGJhc2VkIG9uIGEgc3BlY2lmaWMgdXNlci1zcGFjZSByZXF1ZXN0IG9yIGNvbW1hbmQgdGhhdCBoYXMgYmVlbiBwYXNzZWQgdG8gaXQsIGxpa2VseSB0aHJvdWdoIGEgc3lzdGVtIGNhbGwgbGlrZSBgaW9jdGxgLgoKU28sIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAgaXMgYWxtb3N0IGNlcnRhaW5seSBoYW5kbGluZyBzb21lIGluaXRpYWwgc2V0dXAsIHBvdGVudGlhbGx5IGNoZWNraW5nIHRoZSByZXF1ZXN0ZWQgcnVuIHBhcmFtZXRlcnMsIG1heWJlIHNldHRpbmcgdXAgcmVnaXN0ZXJzIG9yIG90aGVyIGFyY2hpdGVjdHVyYWwgc3RhdGUsIGFuZCB0aGVuIGNhbGxpbmcgYHZjcHVfcnVuYCB0byBhY3R1YWxseSBnZXQgdGhlIHZDUFUgZXhlY3V0aW5nLiBJIGltbWVkaWF0ZWx5IGtub3cgdGhhdCBhbnkgbGF0ZW5jeSBpbnRyb2R1Y2VkIGJ5IHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcm91dGluZXMgaW4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCB3aWxsIGRpcmVjdGx5IGltcGFjdCB0aGUgc3BlZWQgd2l0aCB3aGljaCB0aGUgdkNQVSB3aWxsIGFjdHVhbGx5IGJlZ2luIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLCBzbyBhbnkgcHJvZmlsaW5nIG9yIGFuYWx5c2lzIG9mIGV4ZWN1dGlvbiBsYXRlbmNpZXMgd2lsbCBuZWVkIHRvIGZhY3RvciBpbiB0aGlzIGNydWNpYWwgaW5pdGlhbCBzZXR1cCBwaGFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Y3B1X3J1biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmM9MjQyOD1zdGF0aWMgdm9pZCBrdm1fd3JpdGVfc3lzdGVtX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBzeXN0ZW1fdGltZSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjQzMy1cdGlmICh2Y3B1LVx1MDAzZXZjcHVfaWQgPT0gMCBcdTAwMjZcdTAwMjYgIWhvc3RfaW5pdGlhdGVkKSB7XG5hcmNoL3g4Ni9rdm0veDg2LmM6MjQzNDpcdFx0aWYgKGthLVx1MDAzZWJvb3RfdmNwdV9ydW5zX29sZF9rdm1jbG9jayAhPSBvbGRfbXNyKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTI0MzUtXHRcdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX01BU1RFUkNMT0NLX1VQREFURSwgdmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMjQzNi1cbmFyY2gveDg2L2t2bS94ODYuYzoyNDM3Olx0XHRrYS1cdTAwM2Vib290X3ZjcHVfcnVuc19vbGRfa3ZtY2xvY2sgPSBvbGRfbXNyO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTI0MzgtXHR9XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTMwOTY9c3RhdGljIHZvaWQgcHZjbG9ja191cGRhdGVfdm1fZ3RvZF9jb3B5KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzExNi1cdFx0XHRcdFx1MDAyNlx1MDAyNiAha2EtXHUwMDNlYmFja3dhcmRzX3RzY19vYnNlcnZlZFxuYXJjaC94ODYva3ZtL3g4Ni5jOjMxMTc6XHRcdFx0XHRcdTAwMjZcdTAwMjYgIWthLVx1MDAzZWJvb3RfdmNwdV9ydW5zX29sZF9rdm1jbG9jaztcbmFyY2gveDg2L2t2bS94ODYuYy0zMTE4LVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz01MjI5PXN0YXRpYyB2b2lkIGt2bV9zdGVhbF90aW1lX3NldF9wcmVlbXB0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01MjM5LVx0ICogYW4gaW5zdHJ1Y3Rpb24gYm91bmRhcnkgYW5kIHdpbGwgbm90IHRyaWdnZXIgZ3Vlc3QgZW11bGF0aW9uIG9mIGFueVxuYXJjaC94ODYva3ZtL3g4Ni5jOjUyNDA6XHQgKiBraW5kIChzZWUgdmNwdV9ydW4pLiAgVmVuZG9yIHNwZWNpZmljIGNvZGUgY29udHJvbHMgKGNvbnNlcnZhdGl2ZWx5KVxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyNDEtXHQgKiB3aGVuIHRoaXMgaXMgdHJ1ZSwgZm9yIGV4YW1wbGUgYWxsb3dpbmcgdGhlIHZDUFUgdG8gYmUgbWFya2VkXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTExMTA0PXN0YXRpYyB2b2lkIGt2bV92Y3B1X3JlbG9hZF9hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTExMTMtICogQ2FsbGVkIHdpdGhpbiBrdm0tXHUwMDNlc3JjdSByZWFkIHNpZGUuXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTExMTQ6ICogUmV0dXJucyAxIHRvIGxldCB2Y3B1X3J1bigpIGNvbnRpbnVlIHRoZSBndWVzdCBleGVjdXRpb24gbG9vcCB3aXRob3V0XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTExMTUtICogZXhpdGluZyB0byB0aGUgdXNlcnNwYWNlLiAgT3RoZXJ3aXNlLCB0aGUgdmFsdWUgd2lsbCBiZSByZXR1cm5lZCB0byB0aGVcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTExMTg9c3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE0MzEtXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTE0MzI6XHRcdGV4aXRfZmFzdHBhdGggPSBrdm1feDg2X2NhbGwodmNwdV9ydW4pKHZjcHUsIHJ1bl9mbGFncyk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE0MzMtXHRcdGlmIChsaWtlbHkoZXhpdF9mYXN0cGF0aCAhPSBFWElUX0ZBU1RQQVRIX1JFRU5URVJfR1VFU1QpKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTU2OC1cbmFyY2gveDg2L2t2bS94ODYuYzoxMTU2OTpzdGF0aWMgYm9vbCBrdm1fdmNwdV9ydW5uaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ODYuYy0xMTU3MC17XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTExNjIxPUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fdmNwdV9oYXNfZXZlbnRzKTtcbmFyY2gveDg2L2t2bS94ODYuYy0xMTYyMi1cbmFyY2gveDg2L2t2bS94ODYuYzoxMTYyMzppbnQga3ZtX2FyY2hfdmNwdV9ydW5uYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE2MjQte1xuYXJjaC94ODYva3ZtL3g4Ni5jOjExNjI1Olx0cmV0dXJuIGt2bV92Y3B1X3J1bm5pbmcodmNwdSkgfHwgdmNwdS1cdTAwM2VhcmNoLnB2LnB2X3VuaGFsdGVkIHx8XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE2MjYtXHQgICAgICAga3ZtX3ZjcHVfaGFzX2V2ZW50cyh2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTE2MzA9c3RhdGljIGlubGluZSBpbnQgdmNwdV9ibG9jayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNjMzLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjExNjM0Olx0aWYgKCFrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE2MzUtXHRcdC8qXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNjYwLVx0XHQgKi9cbmFyY2gveDg2L2t2bS94ODYuYzoxMTY2MTpcdFx0aWYgKCFrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHZjcHUpKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNjYyLVx0XHRcdHJldHVybiAxO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTY5Ny0vKiBDYWxsZWQgd2l0aGluIGt2bS1cdTAwM2VzcmN1IHJlYWQgc2lkZS4gICovXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTE2OTg6c3RhdGljIGludCB2Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE2OTkte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTcxMS1cdFx0dmNwdS1cdTAwM2VhcmNoLmF0X2luc3RydWN0aW9uX2JvdW5kYXJ5ID0gZmFsc2U7XG5hcmNoL3g4Ni9rdm0veDg2LmM6MTE3MTI6XHRcdGlmIChrdm1fdmNwdV9ydW5uaW5nKHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE3MTMtXHRcdFx0ciA9IHZjcHVfZW50ZXJfZ3Vlc3QodmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTExNzg2PWZhc3RwYXRoX3QgaGFuZGxlX2Zhc3RwYXRoX2hsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNzkzLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjExNzk0Olx0aWYgKGt2bV92Y3B1X3J1bm5pbmcodmNwdSkpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE3OTUtXHRcdHJldHVybiBFWElUX0ZBU1RQQVRIX1JFRU5URVJfR1VFU1Q7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTExOTEyPXN0YXRpYyB2b2lkIGt2bV9sb2FkX2d1ZXN0X2ZwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExOTIxLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjExOTIyOi8qIFdoZW4gdmNwdV9ydW4gZW5kcywgcmVzdG9yZSB1c2VyIHNwYWNlIEZQVSBjb250ZXh0LiAqL1xuYXJjaC94ODYva3ZtL3g4Ni5jLTExOTIzLXN0YXRpYyB2b2lkIGt2bV9wdXRfZ3Vlc3RfZnB1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTE5NjI9aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTIwNjctXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTIwNjg6XHRyID0gdmNwdV9ydW4odmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTIwNjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLVk0gU3RlYWwgVGltZSBSZXBvcnRpbmcqKgoKT2theSwgc28gSSYjMzk7dmUgdHJhY2VkIHRoZSBLVk0gZXhlY3V0aW9uIHBhdGggcmVsYXRlZCB0byBzdGVhbCB0aW1lLiBTdGFydGluZyB3aXRoIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIHRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgZmlyc3QgcGxhY2UgSSBuZWVkIHRvIGxvb2suIEl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IEtWTSBjaGFuZ2UgSSBuZWVkIHRvIGFuYWx5emUgaXMgaGFwcGVuaW5nIHdpdGhpbiBgcmVjb3JkX3N0ZWFsX3RpbWVgLiBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQsIGFzIEkgc2VlIGl0LCB0aHJvdWdoIGEgY2hhaW4gb2YgY2FsbHMuIEl0IGdvZXMgZnJvbSBgdmNwdV9lbnRlcl9ndWVzdGAsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgYnkgYHZjcHVfcnVuYCwgYW5kIGZpbmFsbHkgdGhhdCBvcmlnaW5hdGVzIGZyb20gb3VyIGVudHJ5IHBvaW50LCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBUaGF0JiMzOTtzIGEgc29saWQsIGlkZW50aWZpYWJsZSwgYW5kIHRlc3RhYmxlIGV4ZWN1dGlvbiBmbG93LiBJIGNhbiBkZWZpbml0ZWx5IGNvbnN0cnVjdCBhIHRlc3QgY2FzZSB0byBpc29sYXRlIGFuZCB2ZXJpZnkgdGhpcy4KCkZ1cnRoZXJtb3JlLCBJIGFsc28gbm90ZWQgYSByZWxldmFudCBtb2RpZmljYXRpb24gaW4gYGtlcm5lbC9zY2hlZC9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AgZnVuY3Rpb24uIEkgd2lsbCBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGRlbHZlIGRlZXBlciBpbnRvIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBLVk0gYW5kIHRoZSBzY2hlZHVsZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAxOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VwZGF0ZV9ycV9jbG9ja190YXNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvY29yZS5jPTgwOD1zdHJ1Y3Qgc3RhdGljX2tleSBwYXJhdmlydF9zdGVhbF9ycV9lbmFibGVkO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtODEwLVxua2VybmVsL3NjaGVkL2NvcmUuYzo4MTE6c3RhdGljIHZvaWQgdXBkYXRlX3JxX2Nsb2NrX3Rhc2soc3RydWN0IHJxICpycSwgczY0IGRlbHRhKVxua2VybmVsL3NjaGVkL2NvcmUuYy04MTIte1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODk0PXZvaWQgdXBkYXRlX3JxX2Nsb2NrKHN0cnVjdCBycSAqcnEpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy05MTUtXG5rZXJuZWwvc2NoZWQvY29yZS5jOjkxNjpcdHVwZGF0ZV9ycV9jbG9ja190YXNrKHJxLCBkZWx0YSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTkxNy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAxOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MjcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNjaGVkdWxlciYjMzk7cyBDbG9jayBVcGRhdGUgTWVjaGFuaXNtKioKCk9rYXksIHNvIGB1cGRhdGVfcnFfY2xvY2tgIHNlZW1zIHRvIGJlIGEgcmVhbCB3b3JraG9yc2UsIGdldHRpbmcgY2FsbGVkIGZyb20gYWxsIGNvcm5lcnMgb2YgdGhlIHNjaGVkdWxlci4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2xvY2sgdXBkYXRlIG1lY2hhbmlzbSB3b3JrcyBhdCBhIGdyYW51bGFyIGxldmVsLiBJIG5vdGljZSBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIOKAkyBhIGAjaWZkZWYgQ09ORklHX1BBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AgcHJvdGVjdGluZyBhIGNoYW5nZSBpbiBgdXBkYXRlX3JxX2Nsb2NrX3Rhc2tgLiBUaGF0JiMzOTtzIGEga2V5IGNsdWUuIE15IGV4cGVydCBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGlzIHJlbGF0ZXMgdG8gdmlydHVhbGl6YXRpb24gYW5kIGhvdyB0aW1lIGlzIGhhbmRsZWQgaW4gdGhvc2UgZW52aXJvbm1lbnRzLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLgoKTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCB2ZXJpZnkgdGhlIGRlZmluaXRpb24gYW5kIHB1cnBvc2Ugb2YgYENPTkZJR19QQVJBVklSVF9USU1FX0FDQ09VTlRJTkdgLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgKndoYXQqIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gZW5hYmxlcyBvciBkaXNhYmxlcy4gVGhpcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBjb250ZXh0OiBJcyBpdCBhYm91dCBndWVzdCB0aW1lIGFjY291bnRpbmc/IFByZWNpc2UgdGltZSBzeW5jaHJvbml6YXRpb24/IE9yIHNvbWUgb3RoZXIgYXNwZWN0IG9mIHZpcnR1YWxpemVkIHRpbWluZz8gS25vd2luZyB0aGUgdW5kZXJseWluZyBwdXJwb3NlIG9mIHRoZSBjb25maWcgb3B0aW9uIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIGNvZGUgYmxvY2smIzM5O3MgYmVoYXZpb3IgYW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSB0aW1pbmcgdXBkYXRlIGNoYW5nZXMuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAxOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vS2NvbmZpZz0xMzM1PWNvbmZpZyBQQVJBVklSVFxuLS1cbmFyY2gvYXJtL0tjb25maWctMTM0Mi1cbmFyY2gvYXJtL0tjb25maWc6MTM0Mzpjb25maWcgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HXG5hcmNoL2FybS9LY29uZmlnLTEzNDQtXHRib29sIFwmIzM0O1BhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1wmIzM0O1xuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0xNjYzPWNvbmZpZyBQQVJBVklSVFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0xNjcwLVxuYXJjaC9hcm02NC9LY29uZmlnOjE2NzE6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xuYXJjaC9hcm02NC9LY29uZmlnLTE2NzItXHRib29sIFwmIzM0O1BhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1wmIzM0O1xuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9NzQ2PWNvbmZpZyBQQVJBVklSVFxuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNzU1LVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo3NTY6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy03NTctXHRib29sIFwmIzM0O1BhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1wmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnPTMzPWNvbmZpZyBQQVJBVklSVF9TUElOTE9DS1Ncbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZy0zNS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnOjM2OmNvbmZpZyBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnLTM3LVx0c2VsZWN0IFBBUkFWSVJUXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTExNDg9Y29uZmlnIFBBUkFWSVJUXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTExNTYtXG5hcmNoL3Jpc2N2L0tjb25maWc6MTE1Nzpjb25maWcgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HXG5hcmNoL3Jpc2N2L0tjb25maWctMTE1OC1cdGJvb2wgXCYjMzQ7UGFyYXZpcnR1YWwgc3RlYWwgdGltZSBhY2NvdW50aW5nXCYjMzQ7XG4tLVxuYXJjaC94ODYvS2NvbmZpZz04NTE9Y29uZmlnIFBWSFxuLS1cbmFyY2gveDg2L0tjb25maWctODU2LVxuYXJjaC94ODYvS2NvbmZpZzo4NTc6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xuYXJjaC94ODYvS2NvbmZpZy04NTgtXHRib29sIFwmIzM0O1BhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDczCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBNdXNpbmdzKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gYFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AgaGVyZS4gVGhhdCBsb29rcyBsaWtlIHRoZSBrZXkgY29uZmlnIG9wdGlvbiB3ZSBuZWVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHRoYXQgZ2V0cyBpbmNsdWRlZCBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIEl0IGp1c3QgbWFrZXMgc2Vuc2UsIHJpZ2h0PyBCdXQgaGFuZyBvbiBhIG1pbnV0ZS4uLiB3YXNuJiMzOTt0IHRoZXJlIHNvbWV0aGluZyBhYm91dCBkZXBlbmRlbmNpZXMgZm9yIHRoYXQgb24geDg2PyBJIHZhZ3VlbHkgcmVtZW1iZXIgYFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AgcmVseWluZyBvbiBgUEFSQVZJUlRgIGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBJJiMzOTtkIGJldHRlciBkb3VibGUgY2hlY2sgdGhhdCBxdWlja2x5LiBUaGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoYXQgaXMgdGhlIGBhcmNoL3g4Ni9LY29uZmlnYCBmaWxlLiBMZXQgbWUgcHVsbCB0aGF0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1MDpcdFxuIDg1MTpcdGNvbmZpZyBQVkhcbiA4NTI6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgcnVubmluZyBQVkggZ3Vlc3RzXCYjMzQ7XG4gODUzOlx0XHRoZWxwXG4gODU0Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFBWSCBlbnRyeSBwb2ludCBmb3IgZ3Vlc3QgdmlydHVhbCBtYWNoaW5lc1xuIDg1NTpcdFx0ICBhcyBzcGVjaWZpZWQgaW4gdGhlIHg4Ni9IVk0gZGlyZWN0IGJvb3QgQUJJLlxuIDg1NjpcdFxuIDg1NzpcdGNvbmZpZyBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdcbiA4NTg6XHRcdGJvb2wgXCYjMzQ7UGFyYXZpcnR1YWwgc3RlYWwgdGltZSBhY2NvdW50aW5nXCYjMzQ7XG4gODU5Olx0XHRkZXBlbmRzIG9uIFBBUkFWSVJUXG4gODYwOlx0XHRoZWxwXG4gODYxOlx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBlbmFibGUgZmluZSBncmFudWxhcml0eSB0YXNrIHN0ZWFsIHRpbWVcbiA4NjI6XHRcdCAgYWNjb3VudGluZy4gVGltZSBzcGVudCBleGVjdXRpbmcgb3RoZXIgdGFza3MgaW4gcGFyYWxsZWwgd2l0aFxuIDg2MzpcdFx0ICB0aGUgY3VycmVudCB2Q1BVIGlzIGRpc2NvdW50ZWQgZnJvbSB0aGUgdkNQVSBwb3dlci4gVG8gYWNjb3VudCBmb3JcbiA4NjQ6XHRcdCAgdGhhdCwgdGhlcmUgY2FuIGJlIGEgc21hbGwgcGVyZm9ybWFuY2UgaW1wYWN0LlxuIDg2NTpcdFxuIDg2NjpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IE4gaGVyZS5cbiA4Njc6XHRcbiA4Njg6XHRjb25maWcgUEFSQVZJUlRfQ0xPQ0tcbiA4Njk6XHRcdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMTAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGlubmVyIG1vbm9sb2d1ZToKCioqRGVwZW5kZW5jeSBDaGVjazogYFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AqKgoKQWxyaWdodCwgc28gdGhlIGRlcGVuZGVuY3kgY2hhaW4gaXMgc29tZXRoaW5nIEkmIzM5O20gaW50aW1hdGVseSBmYW1pbGlhciB3aXRoLiBUaGUgdGV4dCBwb2ludHMgb3V0IHNvbWV0aGluZyBJJiMzOTt2ZSBzZWVuIGNvdW50bGVzcyB0aW1lcyBpbiB0aGVzZSBjb25maWd1cmF0aW9uIHN5c3RlbXM6IGBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdgIHJlbGllcyBvbiBgUEFSQVZJUlRgLiBObyBzdXJwcmlzZSB0aGVyZTsgdGhhdCYjMzk7cyB0aGUgb2J2aW91cyByZWxhdGlvbnNoaXAuIFRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZywgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBhcmNoL3g4Ni9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IG51YW5jZXMgaW4gaG93IGBQQVJBVklSVGAgaXMgZGVmaW5lZCBvciB3aGF0IGl0ICpleGFjdGx5KiBlbmFibGVzIHRoYXQgYFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AgdXNlcy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBsaW5rIEkgd2FudCB0byBzb2xpZGlmeSBpbiBteSBtaW5kIGJlZm9yZSBJIHN0YXJ0IG1ha2luZyBjaGFuZ2VzIG9yIGRpYWdub3NpbmcgaXNzdWVzIHRoYXQgbWF5IGJlIHJlbGF0ZWQgdG8gdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbi4gS25vd2luZyB0aGUgcHJlY2lzZSBpbnRlcmRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBjbGVhbiBhbmQgZWZmZWN0aXZlIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAxOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQVJBVklSVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz03OTY9aWYgSFlQRVJWSVNPUl9HVUVTVFxuYXJjaC94ODYvS2NvbmZpZy03OTctXG5hcmNoL3g4Ni9LY29uZmlnOjc5ODpjb25maWcgUEFSQVZJUlRcbmFyY2gveDg2L0tjb25maWctNzk5LVx0Ym9vbCBcJiMzNDtFbmFibGUgcGFyYXZpcnR1YWxpemF0aW9uIGNvZGVcJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTgwNy1cbmFyY2gveDg2L0tjb25maWc6ODA4OmNvbmZpZyBQQVJBVklSVF9YWExcbmFyY2gveDg2L0tjb25maWctODA5LVx0Ym9vbFxuLS1cbmFyY2gveDg2L0tjb25maWctODEyLVxuYXJjaC94ODYvS2NvbmZpZzo4MTM6Y29uZmlnIFBBUkFWSVJUX1NQSU5MT0NLU1xuYXJjaC94ODYvS2NvbmZpZy04MTQtXHRib29sIFwmIzM0O1BhcmF2aXJ0dWFsaXphdGlvbiBsYXllciBmb3Igc3BpbmxvY2tzXCYjMzQ7XG4tLVxuYXJjaC94ODYvS2NvbmZpZz04NTE9Y29uZmlnIFBWSFxuLS1cbmFyY2gveDg2L0tjb25maWctODU2LVxuYXJjaC94ODYvS2NvbmZpZzo4NTc6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xuYXJjaC94ODYvS2NvbmZpZy04NTgtXHRib29sIFwmIzM0O1BhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1wmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWctODY3LVxuYXJjaC94ODYvS2NvbmZpZzo4Njg6Y29uZmlnIFBBUkFWSVJUX0NMT0NLXG5hcmNoL3g4Ni9LY29uZmlnLTg2OS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2MzAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3kgb2YgUEFSQVZJUlQgb24gSFlQRVJWSVNPUl9HVUVTVCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYFBBUkFWSVJUYCBhZ2Fpbi4gSXQgc3RyaWtlcyBtZSB0aGF0IHRoZXJlIG1pZ2h0IGJlIGFuIGluaGVyZW50IGRlcGVuZGVuY3kgb24gYEhZUEVSVklTT1JfR1VFU1RgIGhlcmUsIGRvZXNuJiMzOTt0IGl0PyBTZWVtcyBsb2dpY2FsLCBidXQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtYWtpbmcgYW55IGFzc3VtcHRpb25zLiBMZXQmIzM5O3MgZGVsdmUgaW50byB0aGUgY29kZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIHRvIHZlcmlmeSB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgcGFyYXZpcnR1YWxpemF0aW9uLCBieSBpdHMgdmVyeSBuYXR1cmUsIHJlbGllcyBvbiB0aGUgcHJlc2VuY2Ugb3IgY29uZmlndXJhdGlvbiBvZiBhIGh5cGVydmlzb3IgZ3Vlc3QgZW52aXJvbm1lbnQuIFBlcmhhcHMgdGhlcmUmIzM5O3MgYW4gY29uZGl0aW9uYWwgY29tcGlsZSB0aW1lIGRlcGVuZGVuY3kgSSBuZWVkIHRvIGNoZWNrLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoYXZlIHRvIHNheS4gTGV0JiMzOTtzIGRpdmUgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzkwOlx0XHQgIHZpc29ycy4gVGhpcyBvcHRpb24gZW5hYmxlcyBiYXNpYyBoeXBlcnZpc29yIGRldGVjdGlvbiBhbmQgcGxhdGZvcm1cbiA3OTE6XHRcdCAgc2V0dXAuXG4gNzkyOlx0XG4gNzkzOlx0XHQgIElmIHlvdSBzYXkgTiwgYWxsIG9wdGlvbnMgaW4gdGhpcyBzdWJtZW51IHdpbGwgYmUgc2tpcHBlZCBhbmRcbiA3OTQ6XHRcdCAgZGlzYWJsZWQsIGFuZCBMaW51eCBndWVzdCBzdXBwb3J0IHdvbiYjMzk7dCBiZSBidWlsdCBpbi5cbiA3OTU6XHRcbiA3OTY6XHRpZiBIWVBFUlZJU09SX0dVRVNUXG4gNzk3Olx0XG4gNzk4Olx0Y29uZmlnIFBBUkFWSVJUXG4gNzk5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBwYXJhdmlydHVhbGl6YXRpb24gY29kZVwmIzM0O1xuIDgwMDpcdFx0ZGVwZW5kcyBvbiBIQVZFX1NUQVRJQ19DQUxMXG4gODAxOlx0XHRzZWxlY3QgSEFWRV9QVl9TVEVBTF9DTE9DS19HRU5cbiA4MDI6XHRcdGhlbHBcbiA4MDM6XHRcdCAgVGhpcyBjaGFuZ2VzIHRoZSBrZXJuZWwgc28gaXQgY2FuIG1vZGlmeSBpdHNlbGYgd2hlbiBpdCBpcyBydW5cbiA4MDQ6XHRcdCAgdW5kZXIgYSBoeXBlcnZpc29yLCBwb3RlbnRpYWxseSBpbXByb3ZpbmcgcGVyZm9ybWFuY2Ugc2lnbmlmaWNhbnRseVxuIDgwNTpcdFx0ICBvdmVyIGZ1bGwgdmlydHVhbGl6YXRpb24uICBIb3dldmVyLCB3aGVuIHJ1biB3aXRob3V0IGEgaHlwZXJ2aXNvclxuIDgwNjpcdFx0ICB0aGUga2VybmVsIGlzIHRoZW9yZXRpY2FsbHkgc2xvd2VyIGFuZCBzbGlnaHRseSBsYXJnZXIuXG4gODA3Olx0XG4gODA4Olx0Y29uZmlnIFBBUkFWSVJUX1hYTFxuIDgwOTpcdFx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE2MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEFuYWx5c2lzIG9mIEtWTSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2UgYEhZUEVSVklTT1JfR1VFU1RgIGlzIGEgbXVzdC1oYXZlIGZvciB0aGUgaHlwZXJ2aXNvciBndWVzdCBmdW5jdGlvbmFsaXR5LiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgYFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AsIGBQQVJBVklSVGAsIGFuZCBgSFlQRVJWSVNPUl9HVUVTVGAgYXJlIGFsbCBhZGRlZCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIFdlIGFsc28gZGVmaW5pdGVseSBuZWVkIHRvIGluY2x1ZGUgYEtWTWAgdG8gaGFuZGxlIHRoZSBLVk0tc3BlY2lmaWMgcGFydHMsIG9idmlvdXNseS4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBzeW1ib2xzIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGNvbm5lY3RlZCBhbmQgd29ya2luZyBhcyBleHBlY3RlZC4gTGV0JiMzOTtzIHNlZS4uLiBJIHNob3VsZCBjaGVjayBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLCBvciBtYXliZSBgdmNwdV9ydW5gLCBvciBldmVuIGByZWNvcmRfc3RlYWxfdGltZWAsIGZvciBwb3RlbnRpYWwgYEZvY3VzU3ltYm9sc2AuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LiBSaWdodCwgYHJlY29yZF9zdGVhbF90aW1lYCBhcHBlYXJzIHRvIGJlIHN0YXRpYy4gSG1tLCBhbmQgYHZjcHVfZW50ZXJfZ3Vlc3RgIGlzIGFsc28gc3RhdGljLiBgdmNwdV9ydW5gIGFzIHdlbGwuIE9rYXksIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAgaXMgKm5vdCogc3RhdGljLCBzbyB0aGF0JiMzOTtzIHNvbWV0aGluZyB0byBtYWtlIGEgbm90ZSBvZi4gQW5kIGZpbmFsbHksIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AgaXMgc3RhdGljLiBJIHNlZSB0aGF0IGB1cGRhdGVfcnFfY2xvY2tgIGlzIG5vdCBzdGF0aWMsIHNvIHRoYXQgbWF5IGJlIGhlbHBmdWwgaW4gdHJhY2luZyB0aGUgZmxvdy4KCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgdXBkYXRlX3JxX2Nsb2NrX3Rhc2tgIG5vdywgYW5kIEkgYmV0IGl0JiMzOTtzIGluIGBrZXJuZWwvc2NoZWQvY29yZS5jYCDigJMgbGV0JiMzOTtzIGNvbmZpcm0gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXBkYXRlX3JxX2Nsb2NrX3Rhc2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9jb3JlLmM9ODA4PXN0cnVjdCBzdGF0aWNfa2V5IHBhcmF2aXJ0X3N0ZWFsX3JxX2VuYWJsZWQ7XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy04MTAtXG5rZXJuZWwvc2NoZWQvY29yZS5jOjgxMTpzdGF0aWMgdm9pZCB1cGRhdGVfcnFfY2xvY2tfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzNjQgZGVsdGEpXG5rZXJuZWwvc2NoZWQvY29yZS5jLTgxMi17XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz04OTQ9dm9pZCB1cGRhdGVfcnFfY2xvY2soc3RydWN0IHJxICpycSlcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTkxNS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6OTE2Olx0dXBkYXRlX3JxX2Nsb2NrX3Rhc2socnEsIGRlbHRhKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTE3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MTUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIGB1cGRhdGVfcnFfY2xvY2tgIEV4cG9ydCBTdGF0dXMqKgoKT2theSwgc28gYHVwZGF0ZV9ycV9jbG9ja2AgaXMgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIHRyYWNrIG9mLCBsaWtlbHkgaW4gYSByZWFsLXRpbWUgZW52aXJvbm1lbnQuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgbWFpbnRhaW5pbmcgc2NoZWR1bGUgY29uc2lzdGVuY3kgYW5kIGxpa2VseSBpbnRlcmFjdGluZyB3aXRoIHRoZSBzeXN0ZW0gY2xvY2suIEkgaW1tZWRpYXRlbHkgbmVlZCB0byBlc3RhYmxpc2ggaWYgaXQmIzM5O3MgZXhwb3J0ZWQuIElzIGl0IHBhcnQgb2YgdGhlIEFQSSwgb3IgaXMgaXQgaW50ZXJuYWw/IElmIGl0JiMzOTtzIGV4cG9ydGVkLCB0aGF0IHNheXMgc29tZXRoaW5nIGFib3V0IGl0cyBpbnRlbmRlZCB1c2UgYW5kIHN0YWJpbGl0eS4gSWYgaXQmIzM5O3Mgbm90IGV4cG9ydGVkLCB0aGVuIGl0IGluZGljYXRlcyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIHRoZSBzeXN0ZW0uIEkgaGF2ZSB0byBzZWUgaWYgSSBjYW4gY2FsbCBpdCBmcm9tIG15IGN1cnJlbnQgY29udGV4dCBhbmQgdGhpcyBtYXkgZGljdGF0ZSB3aGljaCBkaXJlY3Rpb24gSSB0YWtlIGZyb20gaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXBkYXRlX3JxX2Nsb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvY29yZS5jPTgwOD1zdHJ1Y3Qgc3RhdGljX2tleSBwYXJhdmlydF9zdGVhbF9ycV9lbmFibGVkO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtODEwLVxua2VybmVsL3NjaGVkL2NvcmUuYzo4MTE6c3RhdGljIHZvaWQgdXBkYXRlX3JxX2Nsb2NrX3Rhc2soc3RydWN0IHJxICpycSwgczY0IGRlbHRhKVxua2VybmVsL3NjaGVkL2NvcmUuYy04MTIte1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtODQ4LVx0XHQgKiBTaW5jZSBpcnFfdGltZSBpcyBvbmx5IHVwZGF0ZWQgb24ge3NvZnQsfWlycV9leGl0LCB3ZSBtaWdodCBydW4gaW50b1xua2VybmVsL3NjaGVkL2NvcmUuYzo4NDk6XHRcdCAqIHRoaXMgY2FzZSB3aGVuIGEgcHJldmlvdXMgdXBkYXRlX3JxX2Nsb2NrKCkgaGFwcGVuZWQgaW5zaWRlIGFcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODUwLVx0XHQgKiB7c29mdCx9SVJRIHJlZ2lvbi5cbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg5MC0jZW5kaWZcbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODkxOlx0dXBkYXRlX3JxX2Nsb2NrX3BlbHQocnEsIGRlbHRhKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODkyLX1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtODkzLVxua2VybmVsL3NjaGVkL2NvcmUuYzo4OTQ6dm9pZCB1cGRhdGVfcnFfY2xvY2soc3RydWN0IHJxICpycSlcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk1LXtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTkxNS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6OTE2Olx0dXBkYXRlX3JxX2Nsb2NrX3Rhc2socnEsIGRlbHRhKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTE3LX1cbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTk0MT1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaHJ0aWNrKHN0cnVjdCBocnRpbWVyICp0aW1lcilcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTk0OC1cdHJxX2xvY2socnEsIFx1MDAyNnJmKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6OTQ5Olx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTUwLVx0cnEtXHUwMDNlZG9ub3ItXHUwMDNlc2NoZWRfY2xhc3MtXHUwMDNldGFza190aWNrKHJxLCBycS1cdTAwM2Vkb25vciwgMSk7XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz0yMjA2PXZvaWQgZW5xdWV1ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjIwOC1cdGlmICghKGZsYWdzIFx1MDAyNiBFTlFVRVVFX05PQ0xPQ0spKVxua2VybmVsL3NjaGVkL2NvcmUuYzoyMjA5Olx0XHR1cGRhdGVfcnFfY2xvY2socnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYy0yMjEwLVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9MjIzMj1pbmxpbmUgYm9vbCBkZXF1ZXVlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy0yMjM3LVx0aWYgKCEoZmxhZ3MgXHUwMDI2IERFUVVFVUVfTk9DTE9DSykpXG5rZXJuZWwvc2NoZWQvY29yZS5jOjIyMzg6XHRcdHVwZGF0ZV9ycV9jbG9jayhycSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTIyMzktXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz0yNjQ1PXN0YXRpYyBpbnQgbWlncmF0aW9uX2NwdV9zdG9wKHZvaWQgKmRhdGEpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy0yNjk4LVx0XHRpZiAodGFza19vbl9ycV9xdWV1ZWQocCkpIHtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MjY5OTpcdFx0XHR1cGRhdGVfcnFfY2xvY2socnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYy0yNzAwLVx0XHRcdHJxID0gX19taWdyYXRlX3Rhc2socnEsIFx1MDAyNnJmLCBwLCBhcmctXHUwMDNlZGVzdF9jcHUpO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9Mzg5OT1zdGF0aWMgaW50IHR0d3VfcnVubmFibGUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZV9mbGFncylcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTM5MDYtXG5rZXJuZWwvc2NoZWQvY29yZS5jOjM5MDc6XHR1cGRhdGVfcnFfY2xvY2socnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYy0zOTA4LVx0aWYgKHAtXHUwMDNlaXNfYmxvY2tlZCkge1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9MzkyNT12b2lkIHNjaGVkX3R0d3VfcGVuZGluZyh2b2lkICphcmcpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy0zOTM1LVx0cnFfbG9ja19pcnFzYXZlKHJxLCBcdTAwMjZyZik7XG5rZXJuZWwvc2NoZWQvY29yZS5jOjM5MzY6XHR1cGRhdGVfcnFfY2xvY2socnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYy0zOTM3LVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9NDEwMT1zdGF0aWMgdm9pZCB0dHd1X3F1ZXVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNwdSwgaW50IHdha2VfZmxhZ3MpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy00MTA5LVx0cnFfbG9jayhycSwgXHUwMDI2cmYpO1xua2VybmVsL3NjaGVkL2NvcmUuYzo0MTEwOlx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNDExMS1cdHR0d3VfZG9fYWN0aXZhdGUocnEsIHAsIHdha2VfZmxhZ3MsIFx1MDAyNnJmKTtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTQ5NzU9dm9pZCB3YWtlX3VwX25ld190YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTQ5OTMtXHRycSA9IF9fdGFza19ycV9sb2NrKHAsIFx1MDAyNnJmKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NDk5NDpcdHVwZGF0ZV9ycV9jbG9jayhycSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTQ5OTUtXHRwb3N0X2luaXRfZW50aXR5X3V0aWxfYXZnKHApO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9NTcwNT11bnNpZ25lZCBsb25nIGxvbmcgdGFza19zY2hlZF9ydW50aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTU3MzQtXHRcdHByZWZldGNoX2N1cnJfZXhlY19zdGFydChwKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NTczNTpcdFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNTczNi1cdFx0cC1cdTAwM2VzY2hlZF9jbGFzcy1cdTAwM2V1cGRhdGVfY3VycihycSk7XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz01NzkzPXZvaWQgc2NoZWRfdGljayh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNTgxMi1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6NTgxMzpcdHVwZGF0ZV9ycV9jbG9jayhycSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTU4MTQtXHRod19wcmVzc3VyZSA9IGFyY2hfc2NhbGVfaHdfcHJlc3N1cmUoY3B1X29mKHJxKSk7XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz01ODgwPXN0YXRpYyB2b2lkIHNjaGVkX3RpY2tfcmVtb3RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTU5MDUtXHRcdFx0V0FSTl9PTl9PTkNFKHJxLVx1MDAzZWN1cnIgIT0gcnEtXHUwMDNlZG9ub3IpO1xua2VybmVsL3NjaGVkL2NvcmUuYzo1OTA2Olx0XHRcdHVwZGF0ZV9ycV9jbG9jayhycSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTU5MDctXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz02MjU1PXBpY2tfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBycV9mbGFncyAqcmYpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy02MzE3LVx0XHRpZiAoIWNvcmVfY2xvY2tfdXBkYXRlZCkge1xua2VybmVsL3NjaGVkL2NvcmUuYzo2MzE4Olx0XHRcdHVwZGF0ZV9ycV9jbG9jayhycS1cdTAwM2Vjb3JlKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjMxOS1cdFx0XHRjb3JlX2Nsb2NrX3VwZGF0ZWQgPSB0cnVlO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjM1MS1cdFx0XHRpZiAoIShycS1cdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgXHUwMDI2IFJRQ0ZfVVBEQVRFRCkpXG5rZXJuZWwvc2NoZWQvY29yZS5jOjYzNTI6XHRcdFx0XHR1cGRhdGVfcnFfY2xvY2socnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYy02MzUzLVx0XHRcdGdvdG8gcmVzdGFydDtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTYzODQtXHRcdGlmIChpICE9IGNwdSBcdTAwMjZcdTAwMjYgKHJxX2kgIT0gcnEtXHUwMDNlY29yZSB8fCAhY29yZV9jbG9ja191cGRhdGVkKSlcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NjM4NTpcdFx0XHR1cGRhdGVfcnFfY2xvY2socnFfaSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTYzODYtXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy02MzkxLVx0XHRcdGlmICghKHJxLVx1MDAzZWNsb2NrX3VwZGF0ZV9mbGFncyBcdTAwMjYgUlFDRl9VUERBVEVEKSlcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NjM5MjpcdFx0XHRcdHVwZGF0ZV9ycV9jbG9jayhycSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTYzOTMtXHRcdFx0Z290byByZXN0YXJ0O1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9Njg1Mz1zdGF0aWMgaW5saW5lIHZvaWQgcHJveHlfcmVhY3F1aXJlX3JxX2xvY2soc3RydWN0IHJxICpycSwgc3RydWN0IHJxX2ZsYWdzICpyZilcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTY4NTctXHRycV9yZXBpbl9sb2NrKHJxLCByZik7XG5rZXJuZWwvc2NoZWQvY29yZS5jOjY4NTg6XHR1cGRhdGVfcnFfY2xvY2socnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYy02ODU5LX1cbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTcxMjE9c3RhdGljIHZvaWQgX19zY2hlZCBub3RyYWNlIF9fc2NoZWR1bGUoaW50IHNjaGVkX21vZGUpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy03MTc0LVx0cnEtXHUwMDNlY2xvY2tfdXBkYXRlX2ZsYWdzIFx1MDAzY1x1MDAzYz0gMTtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzE3NTpcdHVwZGF0ZV9ycV9jbG9jayhycSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTcxNzYtXHRycS1cdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgPSBSUUNGX1VQREFURUQ7XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz03Njg3PXZvaWQgcnRfbXV0ZXhfc2V0cHJpbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlfdGFzaylcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTc3MDQtXHRycSA9IF9fdGFza19ycV9sb2NrKHAsIFx1MDAyNnJmKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzcwNTpcdHVwZGF0ZV9ycV9jbG9jayhycSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTc3MDYtXHQvKlxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODQ2Mz1zdGF0aWMgaW50IF9fYmFsYW5jZV9wdXNoX2NwdV9zdG9wKHZvaWQgKmFyZylcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg0NzktXHRcdHJxX2xvY2socnEsIFx1MDAyNnJmKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODQ4MDpcdFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODQ4MS1cdFx0aWYgKHRhc2tfcnEocCkgPT0gcnEgXHUwMDI2XHUwMDI2IHRhc2tfb25fcnFfcXVldWVkKHApKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODYyND12b2lkIHNldF9ycV9vZmZsaW5lKHN0cnVjdCBycSAqcnEpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy04NjI4LVxua2VybmVsL3NjaGVkL2NvcmUuYzo4NjI5Olx0XHR1cGRhdGVfcnFfY2xvY2socnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYy04NjMwLVx0XHRmb3JfZWFjaF9jbGFzcyhjbGFzcykge1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODg5Mj1pbnQgc2NoZWRfY3B1X2R5aW5nKHVuc2lnbmVkIGludCBjcHUpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy04OTAwLVx0cnFfbG9ja19pcnFzYXZlKHJxLCBcdTAwMjZyZik7XG5rZXJuZWwvc2NoZWQvY29yZS5jOjg5MDE6XHR1cGRhdGVfcnFfY2xvY2socnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYy04OTAyLVx0aWYgKHJxLVx1MDAzZW5yX3J1bm5pbmcgIT0gMSB8fCBycV9oYXNfcGlubmVkX3Rhc2tzKHJxKSkge1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9OTg3ND1zdGF0aWMgaW50IHRnX3NldF9jZnNfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0Zyxcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTk5MzQtXHRcdGlmIChjZnNfcnEtXHUwMDNldGhyb3R0bGVkKSB7XG5rZXJuZWwvc2NoZWQvY29yZS5jOjk5MzU6XHRcdFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTkzNi1cdFx0XHR1bnRocm90dGxlX2Nmc19ycShjZnNfcnEpO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9MTEyNTM9c3RydWN0IHNjaGVkX2NoYW5nZV9jdHggKnNjaGVkX2NoYW5nZV9iZWdpbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTExMjY2LVx0aWYgKCEoZmxhZ3MgXHUwMDI2IERFUVVFVUVfTk9DTE9DSykpIHtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MTEyNjc6XHRcdHVwZGF0ZV9ycV9jbG9jayhycSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTExMjY4LVx0XHRmbGFncyB8PSBERVFVRVVFX05PQ0xPQ0s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODYwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQZXJmb3JtYW5jZSBCb3R0bGVuZWNrcyBpbiBLVk0qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZGlnIGludG8gYHVwZGF0ZV9ycV9jbG9ja2AsIGJ1dCBjb25zaWRlcmluZyBpdHMgdWJpcXVpdG91cyBuYXR1cmUsIGl0JiMzOTtzIHByb2JhYmx5ICphbHJlYWR5KiBvcHRpbWl6ZWQgYXMgbXVjaCBhcyBwb3NzaWJsZS4gSXQmIzM5O3MgdG9vIGRpc3RyaWJ1dGVkIHRvIGJlIGEgc2luZ2xlLCBmb2N1c2VkIGFyZWEgZm9yIGltcHJvdmVtZW50LCBzbyBsZXQmIzM5O3MgcnVsZSBpdCBvdXQgZm9yIG5vdy4gV2hlcmUgc2hvdWxkIEkgZm9jdXM/CgpUaGUgcmVhbCBlbnRyeSBwb2ludCBmb3IgdGhlIEtWTSB2Q1BVIHJ1biBpcyBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBUaGF04oCZcyBhIGtleSBmdW5jdGlvbjsgaXQmIzM5O3MgYSBob3QgcGF0aCwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gZHJpbGwgZG93biB0aGVyZSBhbmQgc2VlIHdoYXTigJlzIGhhcHBlbmluZy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHBvdGVudGlhbCBmdW5jdGlvbnMsIHRob3VnaC4gCgpJIHNlZSBgcmVjb3JkX3N0ZWFsX3RpbWVgLCB3aGljaCBpcyBzdGF0aWMsIHNvIEkgY2FuJiMzOTt0IGltbWVkaWF0ZWx5IHBvaW50IHRvIGl0IGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24uIEhvd2V2ZXIsIGlmIHRoYXQgaXMgaW5saW5lZCBpbnRvIG90aGVyIGZ1bmN0aW9ucywgaXQgY291bGQgYWxzbyBiZSBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgd2l0aG91dCBiZWluZyBvYnZpb3VzLiBTbywgdGhlIG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgYHJlY29yZF9zdGVhbF90aW1lYCBpcyBiZWluZyBpbmxpbmVkLiBUaGF0IHdpbGwgaW1wYWN0IG15IHBsYW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlY29yZF9zdGVhbF90aW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz0zNzE4PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2VydmljZV9sb2NhbF90bGJfZmx1c2hfcmVxdWVzdHMpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTM3MTktXG5hcmNoL3g4Ni9rdm0veDg2LmM6MzcyMDpzdGF0aWMgdm9pZCByZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzcyMS17XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTExMTE4PXN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMjA4LVx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpKVxuYXJjaC94ODYva3ZtL3g4Ni5jOjExMjA5Olx0XHRcdHJlY29yZF9zdGVhbF90aW1lKHZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTExMjEwLVx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9QTVUsIHZjcHUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU1OQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDIwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBTdGVhbCBUaW1lIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gc3RlYWwgdGltZSBpbiBLVk0uIEl0JiMzOTtzIGEgYml0IHRyaWNreSBiZWNhdXNlIHRoZSBjb2RlIGlzbiYjMzk7dCBleHBsaWNpdGx5IG1hcmtlZCBmb3IgaW5saW5pbmcsIGJ1dCBpdCYjMzk7cyBvbmx5IGNhbGxlZCBvbmNlIGluIGB2Y3B1X2VudGVyX2d1ZXN0YC4gVGhlIGNvbXBpbGVyICptaWdodCogaW5saW5lIGl0LCBzbyB0aGF0JiMzOTtzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGRpZyBpbnRvIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIGJlY2F1c2UgdGhhdCYjMzk7cyB0aGUgaW9jdGwgaGFuZGxlciwgYW5kIHVzdWFsbHkgYSBnb29kIGVudHJ5IHBvaW50IGZvciB0aGlzIHNvcnQgb2YgdGhpbmcuIEJ1dCwgaXQmIzM5O3MgYSBob3QgcGF0aCwgc28gSSBzaG91bGQgYmUgY2FyZWZ1bCBub3QgdG8gZ2V0IGJvZ2dlZCBkb3duIHRoZXJlIGFuZCBtaXNzIHNvbWV0aGluZy4gQXJlIHRoZXJlIG90aGVyIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCwgb3RoZXIgZW50cnkgcG9pbnRzPwoKSSBzZWUgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYHJlY29yZF9zdGVhbF90aW1lYCBhbmQgYHVwZGF0ZV9ycV9jbG9ja190YXNrYC4gTm93LCBib3RoIG9mICp0aG9zZSogYXJlIGNhbGxlZCBmcm9tICp2ZXJ5KiBob3QgcGF0aHM6IGB2Y3B1X3J1bmAgYW5kIGB1cGRhdGVfcnFfY2xvY2tgLCByZXNwZWN0aXZlbHkuIElmIEkgZG9uJiMzOTt0IGdpdmUgU3l6a2FsbGVyIGEgYEZvY3VzU3ltYm9sc2AgbGlzdCwgaXQmIzM5O3MganVzdCBnb2luZyB0byB1c2UgY292ZXJhZ2UgZGF0YSBmcm9tIHRoZSBlbnRpcmUga2VybmVsLCB3aGljaCBpcyBnb2luZyB0byBiZSBpbmNyZWRpYmx5IG5vaXN5LiBJIG5lZWQgdG8gYmUgbW9yZSBwcmVjaXNlIGluIG15IGFuYWx5c2lzLgoKQWgsIEkgc2VlIGl0ISBgcmVjb3JkX3N0ZWFsX3RpbWVgIGlzIGNhbGxlZCB3aGVuIGBLVk1fUkVRX1NURUFMX1VQREFURWAgaXMgc2V0LiBOb3cgdGhlIGtleSBxdWVzdGlvbiBpczogd2hlbiBhbmQgd2hlcmUgaXMgYEtWTV9SRVFfU1RFQUxfVVBEQVRFYCBhY3R1YWxseSAqc2V0Kj8gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMuIFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgbGluayBJJiMzOTttIG1pc3NpbmcgYXQgdGhlIG1vbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX1JFUV9TVEVBTF9VUERBVEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTM4ODQ9aW50IGt2bV9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTQxNjQtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NDE2NTpcdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1NURUFMX1VQREFURSwgdmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNDE2Ni1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTE0OT12b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyMjUtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTIyNjpcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTUyMjctfVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMTExOD1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTIwNy1cdFx0fVxuYXJjaC94ODYva3ZtL3g4Ni5jOjExMjA4Olx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMjA5LVx0XHRcdHJlY29yZF9zdGVhbF90aW1lKHZjcHUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU3NAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEhvdHNwb3RzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB3aXRoaW4gdGhlIEtWTSBoeXBlcnZpc29yLCBhbmQgSSYjMzk7dmUgbmFycm93ZWQgZG93biBhIGNvdXBsZSBvZiBrZXkgYXJlYXMuIEkgc2VlIHRoZSBjb2RlIGlzIHRvdWNoaW5nIGBrdm1fc2V0X21zcl9jb21tb25gIGFuZCBga3ZtX2FyY2hfdmNwdV9sb2FkYC4gTm93LCBJJiMzOTttIGxlYW5pbmcgdG93YXJkIGZvY3VzaW5nIG9uIGBrdm1fc2V0X21zcl9jb21tb25gIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBkZWFscyB3aXRoIE1TUiB3cml0ZXMg4oCTIHdoaWNoIGFyZSBwcmV0dHkgc2lnbmlmaWNhbnQgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGUgZ3Vlc3QgaXRzZWxmLiBUaGF0IGZlZWxzIGxpa2UgYSBsaWtlbHkgc3BvdCBmb3Igc29tZSBpbnRlcmVzdGluZyBzdHVmZiB0byBiZSBoYXBwZW5pbmcuIEJ1dCwgd2FpdCwgYGt2bV9hcmNoX3ZjcHVfbG9hZGAgZ2V0cyBjYWxsZWQgb24gKmV2ZXJ5KiBjb250ZXh0IHN3aXRjaCB0byB0aGUgdkNQVSB0aHJlYWQuLi4gc28gYHJlY29yZF9zdGVhbF90aW1lYCBpcyBwcm9iYWJseSBjYWxsZWQgYSB0b24gaW4gdGhhdCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhbm90aGVyIHBvdGVudGlhbCBhcmVhIG9mIGludmVzdGlnYXRpb24uCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gYGt2bV9zZXRfbXNyX2NvbW1vbmAuIEl0JiMzOTtzIGEgcHJldHR5IGhlZnR5IGZ1bmN0aW9uLCBzbyBkaXZpbmcgc3RyYWlnaHQgaW4gbWlnaHQgYmUgb3ZlcndoZWxtaW5nLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgc3BlY2lmaWMgTVNSIHdyaXRlcyB0aGF0IHRyaWdnZXIgYEtWTV9SRVFfU1RFQUxfVVBEQVRFYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBhY3Rpb24gaXMsIGFuZCB3aGVyZSBJJiMzOTttIGxpa2VseSB0byBmaW5kIHNvbWV0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX1JFUV9TVEVBTF9VUERBVEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTM4ODQ9aW50IGt2bV9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTQxNjQtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NDE2NTpcdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1NURUFMX1VQREFURSwgdmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNDE2Ni1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTE0OT12b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyMjUtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTIyNjpcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTUyMjctfVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMTExOD1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTIwNy1cdFx0fVxuYXJjaC94ODYva3ZtL3g4Ni5jOjExMjA4Olx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMjA5LVx0XHRcdHJlY29yZF9zdGVhbF90aW1lKHZjcHUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ0NgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGt2bV9zZXRfbXNyX2NvbW1vbmAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBga3ZtX3NldF9tc3JfY29tbW9uYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBhcm91bmQgbGluZSA0MTY1LiBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBiYXNlZCBvbiBteSBwcmV2aW91cyBhbmFseXNpcyBhbmQgdGhlIGxpa2VseSBhcmVhIG9mIGludGVyZXN0LiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIGJlaGF2aW9yIGluIHRoaXMgcmVnaW9uLiBUaGlzIHdpbGwgaGVscCB3aXRoIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MTUwOlx0XHRjYXNlIE1TUl9LVk1fU1RFQUxfVElNRTpcbjQxNTE6XHRcdFx0aWYgKCFndWVzdF9wdl9oYXModmNwdSwgS1ZNX0ZFQVRVUkVfU1RFQUxfVElNRSkpXG40MTUyOlx0XHRcdFx0cmV0dXJuIEtWTV9NU1JfUkVUX1VOU1VQUE9SVEVEO1xuNDE1MzpcdFxuNDE1NDpcdFx0XHRpZiAodW5saWtlbHkoIXNjaGVkX2luZm9fb24oKSkpXG40MTU1Olx0XHRcdFx0cmV0dXJuIDE7XG40MTU2Olx0XG40MTU3Olx0XHRcdGlmIChkYXRhIFx1MDAyNiBLVk1fU1RFQUxfUkVTRVJWRURfTUFTSylcbjQxNTg6XHRcdFx0XHRyZXR1cm4gMTtcbjQxNTk6XHRcbjQxNjA6XHRcdFx0dmNwdS1cdTAwM2VhcmNoLnN0Lm1zcl92YWwgPSBkYXRhO1xuNDE2MTpcdFxuNDE2MjpcdFx0XHRpZiAoIShkYXRhIFx1MDAyNiBLVk1fTVNSX0VOQUJMRUQpKVxuNDE2MzpcdFx0XHRcdGJyZWFrO1xuNDE2NDpcdFxuNDE2NTpcdFx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfU1RFQUxfVVBEQVRFLCB2Y3B1KTtcbjQxNjY6XHRcbjQxNjc6XHRcdFx0YnJlYWs7XG40MTY4Olx0XHRjYXNlIE1TUl9LVk1fUFZfRU9JX0VOOlxuNDE2OTpcdFx0XHRpZiAoIWd1ZXN0X3B2X2hhcyh2Y3B1LCBLVk1fRkVBVFVSRV9QVl9FT0kpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk1OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZvciBmdXp6aW5nIHB1cnBvc2VzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgTVNSX0tWTV9TVEVBTF9USU1FYCBpcyBhIGtleSBhcmVhIG9mIGludGVyZXN0IGJlY2F1c2UgdGhlIGd1ZXN0IGhhcyB3cml0ZSBhY2Nlc3MgdG8gaXQsIGFuZCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYSBwcmltZSB0YXJnZXQuIFRoYXQmIzM5O3MgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgcmlwZSBmb3IgZnV6emluZy4gQWxzbywgdGhlIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AgY2hhbmdlLCB3aGljaCBpbnRyb2R1Y2VzIGRlZmVycmVkIGNsb2NrIHVwZGF0ZXMgYmFzZWQgb24gcmVtb3RlIENQVSB1cGRhdGVzIHRvIHRoZSBydW5xdWV1ZSAocnEpIHdoaWxlIHRoZSBvd25lciB2Q1BVIGlzIHByZWVtcHRlZCBpcyBhbHNvIGEgcG9pbnQgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBzb2xpZGlmeSB0aGUgc3RyYXRlZ3kuIE15IGluaXRpYWwgc3VtbWFyeSBvZiB0aGUgZnV6emluZyB0YXJnZXQgaXM6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIGJvdGggY2hhbmdlcyBzZWVtIGxpa2UgZ29vZCBjYW5kaWRhdGVzLgoqICAgKipGb2N1c1N5bWJvbDoqKiBJIHRoaW5rIHRoZSBiZXN0IHN5bWJvbCB0byBmb2N1cyBvbiBpcyBga3ZtX3NldF9tc3JfY29tbW9uYC4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCBpcyB0ZW1wdGluZyBhcyBhIG1haW4gZW50cnkgcG9pbnQsIGJ1dCBpdCBtaWdodCBiZSB0b28gaG90IGFuZCBnZW5lcmFsaXplZCwgc28gSSYjMzk7bGwgc3RheSBmb2N1c2VkIG9uIHRoZSBzcGVjaWZpYyBNU1Igc2V0dGluZyBmdW5jdGlvbi4KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBXZSBkZWZpbml0ZWx5IG5lZWQgYFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AsIGBQQVJBVklSVGAsIGBIWVBFUlZJU09SX0dVRVNUYCwgYW5kIG9mIGNvdXJzZSBgS1ZNYCB0byBlbmFibGUgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHkuCgpJJiMzOTttIHRoaW5raW5nIGEgYml0IG1vcmUgYWJvdXQgYHVwZGF0ZV9ycV9jbG9ja190YXNrYC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgdXBkYXRlX3JxX2Nsb2NrYCwgYW5kIHRoYXQgYHVwZGF0ZV9ycV9jbG9ja2AgaXMgY2FsbGVkIGZyb20gc3RhbmRhcmQgc2NoZWR1bGVyIGZ1bmN0aW9ucyBsaWtlIGB0YXNrX3RpY2tgLCBgZW5xdWV1ZV90YXNrYCwgYW5kIGBkZXF1ZXVlX3Rhc2tgLCBtZWFucyBpdCYjMzk7cyBhIHZlcnkgZ2VuZXJpYyBmdW5jdGlvbi4gU28sIGBrdm1fc2V0X21zcl9jb21tb25gIGlzIHRoZSBiZXR0ZXIgdGFyZ2V0LgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgY29uZmlndXJhdGlvbiBjaGVjay4gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgbWV0LgoKKiAgIGBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdgIGRlcGVuZHMgb24gYFBBUkFWSVJUYC4KKiAgIGBQQVJBVklSVGAgZGVwZW5kcyBvbiBgSFlQRVJWSVNPUl9HVUVTVGAuCgpUaGVyZWZvcmUsIHdlIGhhdmUgdG8gZW5hYmxlIGFsbCB0aHJlZTogYFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AsIGBQQVJBVklSVGAsIGBIWVBFUlZJU09SX0dVRVNUYC4gVGhlIGBLVk1gIGNvbmZpZyBpcyBhbHNvIG5lY2Vzc2FyeSwgc28gd2UgY2FuIHRlc3QgdGhlIEtWTSBmdW5jdGlvbmFsaXR5LiBEb25lLiBOb3csIGxldCYjMzk7cyBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTA0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gU2NoZWR1bGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIEtWTSBzY2hlZHVsaW5nLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZW5hYmxpbmcgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBmaXJzdCwgd2hpY2ggaXMgc3RhbmRhcmQgcHJvY2VkdXJlLiBTbywgSSBzZWUgd2UmIzM5O3JlIGV4cGxpY2l0bHkgZW5hYmxpbmcgYFZJUlRVQUxJWkFUSU9OYCBhbmQgYEtWTWAsIHdoaWNoIGlzIGV4cGVjdGVkIHNpbmNlIEtWTSByZWxpZXMgb24gdmlydHVhbGl6YXRpb24uIFRoZW4gd2UgaGF2ZSBgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HYCwgYFBBUkFWSVJUYCwgYW5kIGBIWVBFUlZJU09SX0dVRVNUYC4gVGhlc2UgYXJlIGFsbCByZWxhdGVkIHRvIHBhcmF2aXJ0dWFsaXphdGlvbiBhbmQgZ3Vlc3Qgc3VwcG9ydCB3aXRoaW4gYSBoeXBlcnZpc29yLCBzbyB0aGV5IG1ha2Ugc2Vuc2UgaW4gdGhpcyBjb250ZXh0LgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG1lYXQgb2YgdGhlIGNoYW5nZS4gSXQmIzM5O3MgbW9kaWZ5aW5nIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AsIGFuZCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9uIHRoZSBzY2hlZHVsZXIuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgd2hlcmUgYHVwZGF0ZV9ycV9jbG9ja190YXNrYCBpcyBjYWxsZWQgZnJvbS4gUmlnaHQsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGB1cGRhdGVfcnFfY2xvY2tgLCBzbyB0aGF0IG1ha2VzIHNlbnNlLiBUaGUga2V5IHBvaW50IG9mIHRoZSBwYXRjaCBpcyBkZWZlcnJpbmcgdGhlIGNsb2NrIHRhc2sgdXBkYXRlIGlmIGBycV9jcHUgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSAmYW1wOyZhbXA7IHZjcHVfaXNfcHJlZW1wdGVkKHJxX2NwdSlgLiBUaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc2NoZWR1bGVyOyB3ZSYjMzk7cmUgZXNzZW50aWFsbHkgZGVsYXlpbmcgdGhlIHVwZGF0ZSB1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgcnVubmluZyBxdWV1ZSBDUFUgZG9lc24mIzM5O3QgbWF0Y2ggdGhlIGN1cnJlbnQgcmF3IFNNUCBwcm9jZXNzb3IgSUQsICphbmQqIHRoZSB2Q1BVIGlzIHByZWVtcHRlZC4gU28gdGhpcyBsaWtlbHkgaGFzIGltcGxpY2F0aW9ucyBvbiB0aW1pbmcgYWNjdXJhY3kgYW5kIHBvdGVudGlhbGx5IG9uIGNvbnRleHQgc3dpdGNoZXMuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gd2h5IHRoaXMgZGVmZXJyYWwgaXMgbmVlZGVkLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBgdmNwdV9pc19wcmVlbXB0ZWRgIGlzIGFjdHVhbGx5IGRvaW5nLiBJcyBpdCBjaGVja2luZyBzb21lIHN0YXRlIGZsYWcsIG9yIGlzIGl0IGEgbW9yZSBpbnZvbHZlZCBjYWxjdWxhdGlvbj8gS25vd2luZyB0aGF0IHdpbGwgYmUgY3J1Y2lhbCB0byBmdWxseSBncmFzcCB0aGUgcGVyZm9ybWFuY2UgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Y3B1X2lzX3ByZWVtcHRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgtMjAtICovXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmg6MjE6I2RlZmluZSB2Y3B1X2lzX3ByZWVtcHRlZCB2Y3B1X2lzX3ByZWVtcHRlZFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zcGlubG9jay5oOjIyOnN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X2lzX3ByZWVtcHRlZChpbnQgY3B1KVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zcGlubG9jay5oLTIzLXtcbi0tXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9xc3BpbmxvY2suaD0xMj1zdGF0aWMgaW5saW5lIGJvb2wgdmlydF9zcGluX2xvY2soc3RydWN0IHFzcGlubG9jayAqbG9jaylcbi0tXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9xc3BpbmxvY2suaC00MS0gKi9cbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3FzcGlubG9jay5oOjQyOiNkZWZpbmUgdmNwdV9pc19wcmVlbXB0ZWQoY3B1KVx0XHRcdFx0XHRcdFx0XFxcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3FzcGlubG9jay5oLTQzLSh7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYXJhdmlydC5oPTEyMD1zdGF0aWMgaW5saW5lIGJvb2wgdmNwdV9pc19kaXNwYXRjaGVkKGludCB2Y3B1KVxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYXJhdmlydC5oLTEyNS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYXJhdmlydC5oOjEyNjojZGVmaW5lIHZjcHVfaXNfcHJlZW1wdGVkIHZjcHVfaXNfcHJlZW1wdGVkXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFyYXZpcnQuaDoxMjc6c3RhdGljIGlubGluZSBib29sIHZjcHVfaXNfcHJlZW1wdGVkKGludCBjcHUpXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFyYXZpcnQuaC0xMjgte1xuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYXJhdmlydC5oLTE2My1cdFx0LypcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYXJhdmlydC5oOjE2NDpcdFx0ICogVGhlIHJlc3VsdCBvZiB2Y3B1X2lzX3ByZWVtcHRlZCgpIGlzIHVzZWQgaW4gYVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgtMTY1LVx0XHQgKiBzcGVjdWxhdGl2ZSB3YXksIGFuZCBpcyBhbHdheXMgc3ViamVjdCB0byBpbnZhbGlkYXRpb25cbi0tXG5hcmNoL3Bvd2VycGMvbGliL3FzcGlubG9jay5jPTM1ND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgcHJvcGFnYXRlX3NsZWVweShzdHJ1Y3QgcW5vZGUgKm5vZGUsIHUzMiB2YWwsIGJvb2wgcGFyYXZpcnQpXG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYy0zNzEtXHRvd25lciA9IGdldF9vd25lcl9jcHUodmFsKTtcbmFyY2gvcG93ZXJwYy9saWIvcXNwaW5sb2NrLmM6MzcyOlx0aWYgKHZjcHVfaXNfcHJlZW1wdGVkKG93bmVyKSlcbmFyY2gvcG93ZXJwYy9saWIvcXNwaW5sb2NrLmMtMzczLVx0XHRuZXh0LVx1MDAzZXNsZWVweSA9IDE7XG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYz0zNzc9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHlpZWxkX3RvX3ByZXYoc3RydWN0IHFzcGlubG9jayAqbG9jaywgc3RydWN0IHFub2RlICpub2RlLCBpbnQgcHJldl9jcHUsIGJvb2wgcGFyYXZpcnQpXG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYy0zOTEtXHQgKi9cbmFyY2gvcG93ZXJwYy9saWIvcXNwaW5sb2NrLmM6MzkyOlx0aWYgKG5vZGUtXHUwMDNlc2xlZXB5IHx8IHZjcHVfaXNfcHJlZW1wdGVkKHByZXZfY3B1KSkge1xuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYy0zOTMtXHRcdHUzMiB2YWwgPSBSRUFEX09OQ0UobG9jay1cdTAwM2V2YWwpO1xuLS1cbmFyY2gvcG93ZXJwYy9saWIvcXNwaW5sb2NrLmMtNDAzLVx0XHRcdFx0ICovXG5hcmNoL3Bvd2VycGMvbGliL3FzcGlubG9jay5jOjQwNDpcdFx0XHRcdGlmICh2Y3B1X2lzX3ByZWVtcHRlZChnZXRfb3duZXJfY3B1KHZhbCkpKVxuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYy00MDUtXHRcdFx0XHRcdG5vZGUtXHUwMDNlbmV4dC1cdTAwM2VzbGVlcHkgPSAxO1xuLS1cbmFyY2gvcG93ZXJwYy9saWIvcXNwaW5sb2NrLmM9NTI3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBxdWV1ZWRfc3Bpbl9sb2NrX21jc19xdWV1ZShzdHJ1Y3QgcXNwaW5sb2NrICpsb2NrLCBib29sIHBhcmF2aXJ0KVxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcXNwaW5sb2NrLmMtNjkxLVx0XHRcdGFzbSB2b2xhdGlsZShcJiMzNDttaXNvXCYjMzQ7IDo6OiBcJiMzNDttZW1vcnlcJiMzNDspO1xuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYzo2OTI6XHRcdGlmICh2Y3B1X2lzX3ByZWVtcHRlZChuZXh0X2NwdSkpXG5hcmNoL3Bvd2VycGMvbGliL3FzcGlubG9jay5jLTY5My1cdFx0XHRwcm9kX2NwdShuZXh0X2NwdSk7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmg9Mzc9ZXh0ZXJuIGludCBzcGluX3JldHJ5O1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgtMzgtXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaDozOTpib29sIGFyY2hfdmNwdV9pc19wcmVlbXB0ZWQoaW50IGNwdSk7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaC00MC1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9zcGlubG9jay5oOjQxOiNkZWZpbmUgdmNwdV9pc19wcmVlbXB0ZWQgYXJjaF92Y3B1X2lzX3ByZWVtcHRlZFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgtNDItXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzb3IuYz02OT12b2lkIG5vdHJhY2Ugc3RvcF9tYWNoaW5lX3lpZWxkKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMtNzgtXHRcdFx0cmV0dXJuO1xuYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzb3IuYzo3OTpcdFx0aWYgKGFyY2hfdmNwdV9pc19wcmVlbXB0ZWQoY3B1KSlcbmFyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMtODAtXHRcdFx0c21wX3lpZWxkX2NwdShjcHUpO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvc21wLmM9Mzk0PXZvaWQgc2NoZWR1bGVfbWNja19oYW5kbGVyKHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYy0zOTgtXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jOjM5OTpib29sIG5vdHJhY2UgYXJjaF92Y3B1X2lzX3ByZWVtcHRlZChpbnQgY3B1KVxuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYy00MDAte1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvc21wLmMtNDA2LX1cbmFyY2gvczM5MC9rZXJuZWwvc21wLmM6NDA3OkVYUE9SVF9TWU1CT0woYXJjaF92Y3B1X2lzX3ByZWVtcHRlZCk7XG5hcmNoL3MzOTAva2VybmVsL3NtcC5jLTQwOC1cbi0tXG5hcmNoL3MzOTAva3ZtL2RpYWcuYz0xODY9c3RhdGljIGludCBfX2RpYWdfdGltZV9zbGljZV9lbmRfZGlyZWN0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vZGlhZy5jLTIxMC1cdFx0LyogdGFyZ2V0IGhvc3QgQ1BVIGFscmVhZHkgcnVubmluZyAqL1xuYXJjaC9zMzkwL2t2bS9kaWFnLmM6MjExOlx0XHRpZiAoIXZjcHVfaXNfcHJlZW1wdGVkKHRjcHVfY3B1KSlcbmFyY2gvczM5MC9rdm0vZGlhZy5jLTIxMi1cdFx0XHRnb3RvIG5vX3lpZWxkO1xuLS1cbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYz0xNTY9c3RhdGljIGlubGluZSB2b2lkIGFyY2hfc3Bpbl9sb2NrX3F1ZXVlZChhcmNoX3NwaW5sb2NrX3QgKmxwKVxuLS1cbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYy0yMDAtXHRvd25lciA9IGFyY2hfc3Bpbl95aWVsZF90YXJnZXQob2xkLCBub2RlKTtcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYzoyMDE6XHRpZiAob3duZXIgXHUwMDI2XHUwMDI2IGFyY2hfdmNwdV9pc19wcmVlbXB0ZWQob3duZXIgLSAxKSlcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYy0yMDItXHRcdHNtcF95aWVsZF9jcHUob3duZXIgLSAxKTtcbi0tXG5hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMtMjEyLVx0XHRcdG93bmVyID0gYXJjaF9zcGluX3lpZWxkX3RhcmdldChvbGQsIG5vZGUpO1xuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jOjIxMzpcdFx0XHRpZiAob3duZXIgXHUwMDI2XHUwMDI2IGFyY2hfdmNwdV9pc19wcmVlbXB0ZWQob3duZXIgLSAxKSlcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYy0yMTQtXHRcdFx0XHRzbXBfeWllbGRfY3B1KG93bmVyIC0gMSk7XG4tLVxuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jLTIzMy1cdFx0Y291bnQgPSBzcGluX3JldHJ5O1xuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jOjIzNDpcdFx0aWYgKCFtYWNoaW5lX2lzX2xwYXIoKSB8fCBhcmNoX3ZjcHVfaXNfcHJlZW1wdGVkKG93bmVyIC0gMSkpXG5hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMtMjM1LVx0XHRcdHNtcF95aWVsZF9jcHUob3duZXIgLSAxKTtcbi0tXG5hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmM9MjUwPXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3NwaW5fbG9ja19jbGFzc2ljKGFyY2hfc3BpbmxvY2tfdCAqbHApXG4tLVxuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jLTI1Ny1cdG93bmVyID0gYXJjaF9zcGluX3lpZWxkX3RhcmdldChSRUFEX09OQ0UobHAtXHUwMDNlbG9jayksIE5VTEwpO1xuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jOjI1ODpcdGlmIChvd25lciBcdTAwMjZcdTAwMjYgYXJjaF92Y3B1X2lzX3ByZWVtcHRlZChvd25lciAtIDEpKVxuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jLTI1OS1cdFx0c21wX3lpZWxkX2NwdShvd25lciAtIDEpO1xuLS1cbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYy0yNzYtXHRcdGNvdW50ID0gc3Bpbl9yZXRyeTtcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYzoyNzc6XHRcdGlmICghbWFjaGluZV9pc19scGFyKCkgfHwgYXJjaF92Y3B1X2lzX3ByZWVtcHRlZChvd25lciAtIDEpKVxuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jLTI3OC1cdFx0XHRzbXBfeWllbGRfY3B1KG93bmVyIC0gMSk7XG4tLVxuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jPTM1Mj12b2lkIGFyY2hfc3Bpbl9yZWxheChhcmNoX3NwaW5sb2NrX3QgKmxwKVxuLS1cbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYy0zNTgtXHRcdHJldHVybjtcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYzozNTk6XHRpZiAobWFjaGluZV9pc19scGFyKCkgXHUwMDI2XHUwMDI2ICFhcmNoX3ZjcHVfaXNfcHJlZW1wdGVkKGNwdSAtIDEpKVxuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jLTM2MC1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jPTI2PXN0YXRpYyB2b2lkIGh2X3Fsb2NrX3dhaXQodTggKmJ5dGUsIHU4IHZhbClcbi0tXG5hcmNoL3g4Ni9oeXBlcnYvaHZfc3BpbmxvY2suYy02Mi0gKi9cbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jOjYzOl9fdmlzaWJsZSBib29sIGh2X3ZjcHVfaXNfcHJlZW1wdGVkKGludCB2Y3B1KVxuYXJjaC94ODYvaHlwZXJ2L2h2X3NwaW5sb2NrLmMtNjQte1xuLS1cbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jLTY3LVxuYXJjaC94ODYvaHlwZXJ2L2h2X3NwaW5sb2NrLmM6Njg6UFZfQ0FMTEVFX1NBVkVfUkVHU19USFVOSyhodl92Y3B1X2lzX3ByZWVtcHRlZCk7XG5hcmNoL3g4Ni9oeXBlcnYvaHZfc3BpbmxvY2suYy02OS1cbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jPTcwPXZvaWQgX19pbml0IGh2X2luaXRfc3BpbmxvY2tzKHZvaWQpXG4tLVxuYXJjaC94ODYvaHlwZXJ2L2h2X3NwaW5sb2NrLmMtODQtXHRwdl9vcHNfbG9jay5raWNrID0gaHZfcWxvY2tfa2ljaztcbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jOjg1Olx0cHZfb3BzX2xvY2sudmNwdV9pc19wcmVlbXB0ZWQgPSBQVl9DQUxMRUVfU0FWRShodl92Y3B1X2lzX3ByZWVtcHRlZCk7XG5hcmNoL3g4Ni9oeXBlcnYvaHZfc3BpbmxvY2suYy04Ni19XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0yMjgtLy8gZnJlZTogd2FzICNkZWZpbmUgWDg2X0ZFQVRVUkVfUFZVTkxPQ0sgICAgICAgICAgICAgICAoIDgqMzImIzQzOzIwKSAvKiBQViB1bmxvY2sgZnVuY3Rpb24gKi9cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmg6MjI5OiNkZWZpbmUgWDg2X0ZFQVRVUkVfVkNQVVBSRUVNUFRcdFx0KCA4KjMyJiM0MzsyMSkgLyogUFYgdmNwdV9pc19wcmVlbXB0ZWQgZnVuY3Rpb24gKi9cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtMjMwLSNkZWZpbmUgWDg2X0ZFQVRVUkVfVERYX0dVRVNUXHRcdCggOCozMiYjNDM7MjIpIC8qIFwmIzM0O3RkeF9ndWVzdFwmIzM0OyBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyBHdWVzdCAqL1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWlkL2xlYWZfdHlwZXMuaD0xMjEyPXN0cnVjdCBsZWFmXzB4NGM3ODAwMDFfMCB7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1aWQvbGVhZl90eXBlcy5oLTEyOTEtXHRcdHB2dW5sb2NrXHRcdFx0OiAgMSwgLy8gUFYgdW5sb2NrIGZ1bmN0aW9uXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVpZC9sZWFmX3R5cGVzLmg6MTI5MjpcdFx0dmNwdXByZWVtcHRcdFx0XHQ6ICAxLCAvLyBQViB2Y3B1X2lzX3ByZWVtcHRlZCBmdW5jdGlvblxuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1aWQvbGVhZl90eXBlcy5oLTEyOTMtXHRcdHRkeF9ndWVzdFx0XHRcdDogIDEsIC8vIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIEd1ZXN0XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vbXNoeXBlcnYuaD0xODQ9dm9pZCBfX2luaXQgaHZfaW5pdF9zcGlubG9ja3Modm9pZCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc2h5cGVydi5oOjE4NTpib29sIGh2X3ZjcHVfaXNfcHJlZW1wdGVkKGludCB2Y3B1KTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL21zaHlwZXJ2LmgtMTg2LSNlbHNlXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaD0xND1zdHJ1Y3QgcHZfbG9ja19vcHMge1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmgtMTctXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oOjE4Olx0c3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIHZjcHVfaXNfcHJlZW1wdGVkO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaC0xOS19IF9fbm9fcmFuZG9taXplX2xheW91dDtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oPTQwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBwdl9xdWV1ZWRfc3Bpbl91bmxvY2soc3RydWN0IHFzcGlubG9jayAqbG9jaylcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oLTQ5LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaDo1MDpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgcHZfdmNwdV9pc19wcmVlbXB0ZWQobG9uZyBjcHUpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oLTUxLXtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg6NTI6XHRyZXR1cm4gUFZPUF9BTFRfQ0FMTEVFMShib29sLCBwdl9vcHNfbG9jaywgdmNwdV9pc19wcmVlbXB0ZWQsIGNwdSxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmgtNTMtXHRcdFx0XHRcJiMzNDt4b3IgJSVlYXgsICUlZWF4XCYjMzQ7LFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg9NzQ9c3RhdGljIGlubGluZSB2b2lkIHF1ZXVlZF9zcGluX3VubG9jayhzdHJ1Y3QgcXNwaW5sb2NrICpsb2NrKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmgtNzktXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oOjgwOiNkZWZpbmUgdmNwdV9pc19wcmVlbXB0ZWQgdmNwdV9pc19wcmVlbXB0ZWRcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg6ODE6c3RhdGljIGlubGluZSBib29sIHZjcHVfaXNfcHJlZW1wdGVkKGxvbmcgY3B1KVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaC04Mi17XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oOjgzOlx0cmV0dXJuIHB2X3ZjcHVfaXNfcHJlZW1wdGVkKGNwdSk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oLTg0LX1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oPTk2PXZvaWQgX19yYXdfY2FsbGVlX3NhdmVfX19uYXRpdmVfcXVldWVkX3NwaW5fdW5sb2NrKHN0cnVjdCBxc3BpbmxvY2sgKmxvY2spO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaDo5Nzpib29sIF9fcmF3X2NhbGxlZV9zYXZlX19fbmF0aXZlX3ZjcHVfaXNfcHJlZW1wdGVkKGxvbmcgY3B1KTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmgtOTgtI2VuZGlmIC8qIENPTkZJR19QQVJBVklSVF9TUElOTE9DS1MgKi9cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oPTEwND1ib29sIHB2X2lzX25hdGl2ZV9zcGluX3VubG9jayh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg6MTA1Ol9fdmlzaWJsZSBib29sIF9fbmF0aXZlX3ZjcHVfaXNfcHJlZW1wdGVkKGxvbmcgY3B1KTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg6MTA2OmJvb2wgcHZfaXNfbmF0aXZlX3ZjcHVfaXNfcHJlZW1wdGVkKHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaC0xMDctXG4tLVxuYXJjaC94ODYva2VybmVsL2t2bS5jPTY0NT1zdGF0aWMgdm9pZCBrdm1fc21wX3NlbmRfY2FsbF9mdW5jX2lwaShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaylcbi0tXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmMtNjUyLVx0Zm9yX2VhY2hfY3B1KGNwdSwgbWFzaykge1xuYXJjaC94ODYva2VybmVsL2t2bS5jOjY1MzpcdFx0aWYgKCFpZGxlX2NwdShjcHUpIFx1MDAyNlx1MDAyNiB2Y3B1X2lzX3ByZWVtcHRlZChjcHUpKSB7XG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmMtNjU0LVx0XHRcdGt2bV9oeXBlcmNhbGwxKEtWTV9IQ19TQ0hFRF9ZSUVMRCwgcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KSk7XG4tLVxuYXJjaC94ODYva2VybmVsL2t2bS5jPTc5Mj1zdGF0aWMgdm9pZCBrdm1fY3Jhc2hfc2h1dGRvd24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxuYXJjaC94ODYva2VybmVsL2t2bS5jLTc5OS0jaWYgZGVmaW5lZChDT05GSUdfWDg2XzMyKSB8fCAhZGVmaW5lZChDT05GSUdfU01QKVxuYXJjaC94ODYva2VybmVsL2t2bS5jOjgwMDpib29sIF9fa3ZtX3ZjcHVfaXNfcHJlZW1wdGVkKGxvbmcgY3B1KTtcbmFyY2gveDg2L2tlcm5lbC9rdm0uYy04MDEtXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM6ODAyOl9fdmlzaWJsZSBib29sIF9fa3ZtX3ZjcHVfaXNfcHJlZW1wdGVkKGxvbmcgY3B1KVxuYXJjaC94ODYva2VybmVsL2t2bS5jLTgwMy17XG4tLVxuYXJjaC94ODYva2VybmVsL2t2bS5jLTgwNy19XG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM6ODA4OlBWX0NBTExFRV9TQVZFX1JFR1NfVEhVTksoX19rdm1fdmNwdV9pc19wcmVlbXB0ZWQpO1xuYXJjaC94ODYva2VybmVsL2t2bS5jLTgwOS1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmMtODEzLVxuYXJjaC94ODYva2VybmVsL2t2bS5jOjgxNDpleHRlcm4gYm9vbCBfX3Jhd19jYWxsZWVfc2F2ZV9fX2t2bV92Y3B1X2lzX3ByZWVtcHRlZChsb25nKTtcbmFyY2gveDg2L2tlcm5lbC9rdm0uYy04MTUtXG4tLVxuYXJjaC94ODYva2VybmVsL2t2bS5jLTgyNC1cbmFyY2gveDg2L2tlcm5lbC9rdm0uYzo4MjU6REVGSU5FX0FTTV9GVU5DKF9fcmF3X2NhbGxlZV9zYXZlX19fa3ZtX3ZjcHVfaXNfcHJlZW1wdGVkLFxuYXJjaC94ODYva2VybmVsL2t2bS5jLTgyNi1cdFx0UFZfVkNQVV9QUkVFTVBURURfQVNNLCAudGV4dCk7XG4tLVxuYXJjaC94ODYva2VybmVsL2t2bS5jPTgyOT1zdGF0aWMgdm9pZCBfX2luaXQga3ZtX2d1ZXN0X2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmMtODQyLSNpZmRlZiBDT05GSUdfUEFSQVZJUlRfU1BJTkxPQ0tTXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM6ODQzOlx0XHRwdl9vcHNfbG9jay52Y3B1X2lzX3ByZWVtcHRlZCA9XG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM6ODQ0Olx0XHRcdFBWX0NBTExFRV9TQVZFKF9fa3ZtX3ZjcHVfaXNfcHJlZW1wdGVkKTtcbmFyY2gveDg2L2tlcm5lbC9rdm0uYy04NDUtI2VuZGlmXG4tLVxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jPTc2PXZvaWQgYXJjaF9jb250ZW5kZWRfcmVsZWFzZV90cmFjZV91bnJlZyh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYy04Ny1cbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYzo4ODpfX3Zpc2libGUgYm9vbCBfX25hdGl2ZV92Y3B1X2lzX3ByZWVtcHRlZChsb25nIGNwdSlcbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYy04OS17XG4tLVxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jLTkxLX1cbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYzo5MjpQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKF9fbmF0aXZlX3ZjcHVfaXNfcHJlZW1wdGVkKTtcbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYy05My1cbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYzo5NDpib29sIHB2X2lzX25hdGl2ZV92Y3B1X2lzX3ByZWVtcHRlZCh2b2lkKVxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jLTk1LXtcbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYzo5NjpcdHJldHVybiBwdl9vcHNfbG9jay52Y3B1X2lzX3ByZWVtcHRlZC5mdW5jID09XG5hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmM6OTc6XHRcdF9fcmF3X2NhbGxlZV9zYXZlX19fbmF0aXZlX3ZjcHVfaXNfcHJlZW1wdGVkO1xuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jLTk4LX1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmM9MTAwPXZvaWQgX19pbml0IHBhcmF2aXJ0X3NldF9jYXAodm9pZClcbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYy0xMDEte1xuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jOjEwMjpcdGlmICghcHZfaXNfbmF0aXZlX3ZjcHVfaXNfcHJlZW1wdGVkKCkpXG5hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmMtMTAzLVx0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1ZDUFVQUkVFTVBUKTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmM9MTA2PXN0cnVjdCBwdl9sb2NrX29wcyBwdl9vcHNfbG9jayA9IHtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmMtMTA4LVx0LmtpY2tcdFx0XHRcdD0gcGFyYXZpcnRfbm9wLFxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jOjEwOTpcdC52Y3B1X2lzX3ByZWVtcHRlZFx0XHQ9IFBWX0NBTExFRV9TQVZFKF9fbmF0aXZlX3ZjcHVfaXNfcHJlZW1wdGVkKSxcbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYy0xMTAtfTtcbi0tXG5hcmNoL3g4Ni94ZW4vc3BpbmxvY2suYz0xMjM9dm9pZCBfX2luaXQgeGVuX2luaXRfc3BpbmxvY2tzKHZvaWQpXG4tLVxuYXJjaC94ODYveGVuL3NwaW5sb2NrLmMtMTQwLVx0cHZfb3BzX2xvY2sua2ljayA9IHhlbl9xbG9ja19raWNrO1xuYXJjaC94ODYveGVuL3NwaW5sb2NrLmM6MTQxOlx0cHZfb3BzX2xvY2sudmNwdV9pc19wcmVlbXB0ZWQgPSBQVl9DQUxMRUVfU0FWRSh4ZW5fdmNwdV9zdG9sZW4pO1xuYXJjaC94ODYveGVuL3NwaW5sb2NrLmMtMTQyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9MjI5OT1leHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpjcHVfY3Vycl9zbmFwc2hvdChpbnQgY3B1KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMjMwOC0gKi9cbmluY2x1ZGUvbGludXgvc2NoZWQuaDoyMzA5OiNpZm5kZWYgdmNwdV9pc19wcmVlbXB0ZWRcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoyMzEwOnN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X2lzX3ByZWVtcHRlZChpbnQgY3B1KVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTIzMTEte1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaD0yMzIzPXN0YXRpYyBpbmxpbmUgYm9vbCBvd25lcl9vbl9jcHUoc3RydWN0IHRhc2tfc3RydWN0ICpvd25lcilcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMjMyOC1cdCAqL1xuaW5jbHVkZS9saW51eC9zY2hlZC5oOjIzMjk6XHRyZXR1cm4gUkVBRF9PTkNFKG93bmVyLVx1MDAzZW9uX2NwdSkgXHUwMDI2XHUwMDI2ICF2Y3B1X2lzX3ByZWVtcHRlZCh0YXNrX2NwdShvd25lcikpO1xuaW5jbHVkZS9saW51eC9zY2hlZC5oLTIzMzAtfVxuLS1cbmtlcm5lbC9sb2NraW5nL211dGV4LmM9Mzg1PWJvb2wgbXV0ZXhfc3Bpbl9vbl9vd25lcihzdHJ1Y3QgbXV0ZXggKmxvY2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqb3duZXIsXG4tLVxua2VybmVsL2xvY2tpbmcvbXV0ZXguYy00MDMtXHRcdC8qXG5rZXJuZWwvbG9ja2luZy9tdXRleC5jOjQwNDpcdFx0ICogVXNlIHZjcHVfaXNfcHJlZW1wdGVkIHRvIGRldGVjdCBsb2NrIGhvbGRlciBwcmVlbXB0aW9uIGlzc3VlLlxua2VybmVsL2xvY2tpbmcvbXV0ZXguYy00MDUtXHRcdCAqL1xuLS1cbmtlcm5lbC9sb2NraW5nL29zcV9sb2NrLmM9OTM9Ym9vbCBvc3FfbG9jayhzdHJ1Y3Qgb3B0aW1pc3RpY19zcGluX3F1ZXVlICpsb2NrKVxuLS1cbmtlcm5lbC9sb2NraW5nL29zcV9sb2NrLmMtMTQyLVx0ICogd2lsbCBjb21lIHdpdGggYW4gSVBJLCB3aGljaCB3aWxsIHdha2Ugc21wX2NvbmRfbG9hZF9yZWxheGVkKCkgaWYgaXRcbmtlcm5lbC9sb2NraW5nL29zcV9sb2NrLmM6MTQzOlx0ICogaXMgaW1wbGVtZW50ZWQgd2l0aCBhIG1vbml0b3Itd2FpdC4gdmNwdV9pc19wcmVlbXB0ZWQoKSByZWxpZXMgb25cbmtlcm5lbC9sb2NraW5nL29zcV9sb2NrLmMtMTQ0LVx0ICogcG9sbGluZywgYmUgY2FyZWZ1bC5cbi0tXG5rZXJuZWwvbG9ja2luZy9vc3FfbG9jay5jLTE0Ni1cdGlmIChzbXBfY29uZF9sb2FkX3JlbGF4ZWQoXHUwMDI2bm9kZS1cdTAwM2Vsb2NrZWQsIFZBTCB8fCBuZWVkX3Jlc2NoZWQoKSB8fFxua2VybmVsL2xvY2tpbmcvb3NxX2xvY2suYzoxNDc6XHRcdFx0XHQgIHZjcHVfaXNfcHJlZW1wdGVkKG5vZGVfY3B1KG5vZGUtXHUwMDNlcHJldikpKSlcbmtlcm5lbC9sb2NraW5nL29zcV9sb2NrLmMtMTQ4LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTgxMT1zdGF0aWMgdm9pZCB1cGRhdGVfcnFfY2xvY2tfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzNjQgZGVsdGEpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy04MzAtXHRcdGlmIChycV9jcHUgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODMxOlx0XHQgICAgdmNwdV9pc19wcmVlbXB0ZWQocnFfY3B1KSkge1xua2VybmVsL3NjaGVkL2NvcmUuYy04MzItXHRcdFx0cnEtXHUwMDNlZGVmZXJyZWRfY2xvY2tfdGFzayAmIzQzOz0gZGVsdGE7XG4tLVxua2VybmVsL3NjaGVkL3NjaGVkLmg9MTQ1OD1zdGF0aWMgaW5saW5lIGJvb2wgYXZhaWxhYmxlX2lkbGVfY3B1KGludCBjcHUpXG4tLVxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTQ2Mi1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjE0NjM6XHRpZiAodmNwdV9pc19wcmVlbXB0ZWQoY3B1KSlcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE0NjQtXHRcdHJldHVybiAwO1xuLS1cbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtMjI4LS8vIGZyZWU6IHdhcyAjZGVmaW5lIFg4Nl9GRUFUVVJFX1BWVU5MT0NLICAgICAgICAgICAgICAgKCA4KjMyJiM0MzsyMCkgLyogUFYgdW5sb2NrIGZ1bmN0aW9uICovXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oOjIyOTojZGVmaW5lIFg4Nl9GRUFUVVJFX1ZDUFVQUkVFTVBUXHRcdCggOCozMiYjNDM7MjEpIC8qIFBWIHZjcHVfaXNfcHJlZW1wdGVkIGZ1bmN0aW9uICovXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTIzMC0jZGVmaW5lIFg4Nl9GRUFUVVJFX1REWF9HVUVTVFx0XHQoIDgqMzImIzQzOzIyKSAvKiBcJiMzNDt0ZHhfZ3Vlc3RcJiMzNDsgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgR3Vlc3QgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwOTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgdmNwdV9pc19wcmVlbXB0ZWRgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgdmNwdV9pc19wcmVlbXB0ZWRgLiBJdCYjMzk7cyBkZWZpbmVkIGluIHRoZSBjb3JlIGBpbmNsdWRlL2xpbnV4L3NjaGVkLmhgIGhlYWRlciwgYnV0IEkga25vdyBhcmNoaXRlY3R1cmVzIGNhbiBvdmVycmlkZSBpdC4gVGhlIHg4NiBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5LCBpcyB3aGF0IEkmIzM5O20gaW50ZXJlc3RlZCBpbiByaWdodCBub3cuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZGVmaW5lZCB3aXRoaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmhgLCBidXQgb25seSBpZiBgQ09ORklHX1BBUkFWSVJUX1NQSU5MT0NLU2AgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBnb29kIHRvIGtlZXAgaW4gbWluZCwgaXQmIzM5O3MgYWxyZWFkeSB0ZWxsaW5nIG1lIGFib3V0IGEgY29uZGl0aW9uYWwgcGF0aC4KCk5vdywgYSBiZWxsIGlzIHJpbmdpbmcgaW4gdGhlIGJhY2sgb2YgbXkgaGVhZC4uLiBJIGJlbGlldmUgYHZjcHVfaXNfcHJlZW1wdGVkYCBpcyB1c2VkIHdpdGhpbiBgdXBkYXRlX3JxX2Nsb2NrX3Rhc2tgLCB3aGljaCBpcywgaWYgSSByZWNhbGwsIHVuZGVyIHRoZSBjb250cm9sIG9mIGBDT05GSUdfUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HYC4gT2theSwgc28gaWYgYFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AgaXMgZW5hYmxlZCwgYnV0IGBQQVJBVklSVF9TUElOTE9DS1NgIGlzbiYjMzk7dCwgYHZjcHVfaXNfcHJlZW1wdGVkYCB3aWxsIHNpbXBseSBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9zY2hlZC5oYCwgd2hpY2ggSSYjMzk7bSBhc3N1bWluZyBpcyBqdXN0IGEgYmFzaWMgYHJldHVybiBmYWxzZWAuIFRvIGNvbmZpcm0gdGhhdCwgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZSBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2xpbnV4L3NjaGVkLmhgLiBMZXQmIzM5O3MgdGFrZSBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY2hlZC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzAwOlx0XG4yMzAxOlx0LypcbjIzMDI6XHQgKiBJbiBvcmRlciB0byByZWR1Y2UgdmFyaW91cyBsb2NrIGhvbGRlciBwcmVlbXB0aW9uIGxhdGVuY2llcyBwcm92aWRlIGFuXG4yMzAzOlx0ICogaW50ZXJmYWNlIHRvIHNlZSBpZiBhIHZDUFUgaXMgY3VycmVudGx5IHJ1bm5pbmcgb3Igbm90LlxuMjMwNDpcdCAqXG4yMzA1Olx0ICogVGhpcyBhbGxvd3MgdXMgdG8gdGVybWluYXRlIG9wdGltaXN0aWMgc3BpbiBsb29wcyBhbmQgYmxvY2ssIGFuYWxvZ291cyB0b1xuMjMwNjpcdCAqIHRoZSBuYXRpdmUgb3B0aW1pc3RpYyBzcGluIGhldXJpc3RpYyBvZiB0ZXN0aW5nIGlmIHRoZSBsb2NrIG93bmVyIHRhc2sgaXNcbjIzMDc6XHQgKiBydW5uaW5nIG9yIG5vdC5cbjIzMDg6XHQgKi9cbjIzMDk6XHQjaWZuZGVmIHZjcHVfaXNfcHJlZW1wdGVkXG4yMzEwOlx0c3RhdGljIGlubGluZSBib29sIHZjcHVfaXNfcHJlZW1wdGVkKGludCBjcHUpXG4yMzExOlx0e1xuMjMxMjpcdFx0cmV0dXJuIGZhbHNlO1xuMjMxMzpcdH1cbjIzMTQ6XHQjZW5kaWZcbjIzMTU6XHRcbjIzMTY6XHRleHRlcm4gbG9uZyBzY2hlZF9zZXRhZmZpbml0eShwaWRfdCBwaWQsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpuZXdfbWFzayk7XG4yMzE3Olx0ZXh0ZXJuIGxvbmcgc2NoZWRfZ2V0YWZmaW5pdHkocGlkX3QgcGlkLCBzdHJ1Y3QgY3B1bWFzayAqbWFzayk7XG4yMzE4Olx0XG4yMzE5Olx0I2lmbmRlZiBUQVNLX1NJWkVfT0ZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc5MTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIG5ldyBjb2RlIGluIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AgaXMgcm9idXN0bHkgdGVzdGVkLiBIbW0sIGl0IGxvb2tzIGxpa2UgZm9yIGB2Y3B1X2lzX3ByZWVtcHRlZGAgdG8gcmV0dXJuIHRydWUgaW4gdGhlIGludGVuZGVkIHNjZW5hcmlvcywgSSBtaWdodCBuZWVkIHRvIGVuYWJsZSBgUEFSQVZJUlRfU1BJTkxPQ0tTYCBhcyB3ZWxsLiBUaGF0IHJpbmdzIGEgYmVsbCwgSSB0aGluayB0aGF0IHdvdWxkIGJlIHRoZSBiZXN0IHdheSB0byBnZXQgY29tcHJlaGVuc2l2ZSBjb3ZlcmFnZSBoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYFBBUkFWSVJUX1NQSU5MT0NLU2AsIHNvIEkmIzM5O2xsIGdvIHRha2UgYSBsb29rIGluIGBhcmNoL3g4Ni9LY29uZmlnYCB0byBjb25maXJtIG15IHN1c3BpY2lvbi4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQVJBVklSVF9TUElOTE9DS1MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9ODA4PWNvbmZpZyBQQVJBVklSVF9YWExcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTgxMi1cbmFyY2gveDg2L0tjb25maWc6ODEzOmNvbmZpZyBQQVJBVklSVF9TUElOTE9DS1NcbmFyY2gveDg2L0tjb25maWctODE0LVx0Ym9vbCBcJiMzNDtQYXJhdmlydHVhbGl6YXRpb24gbGF5ZXIgZm9yIHNwaW5sb2Nrc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODI3OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgeDg2IEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBNeSBmb2N1cyBpcyBvbiB0aGUgYGFyY2gveDg2L0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA4MTMuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCB0aGlzIHNlY3Rpb24gbGlrZWx5IGdvdmVybnMgc29tZSBrZXkgZmVhdHVyZSBvciBhc3BlY3Qgb2YgdGhlIHg4NiBhcmNoaXRlY3R1cmUgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGRlY2lzaW9ucyBhcmUgYmVpbmcgbWFkZSB0aGVyZS4gSSBuZWVkIHRvIGtub3cgd2hhdCYjMzk7cyBiZWluZyBjb25maWd1cmVkLCB1bmRlciB3aGF0IGNvbmRpdGlvbnMsIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgYnJvYWRlciBzeXN0ZW0uIFBlcmhhcHMgSSYjMzk7bSB0cmFja2luZyBkb3duIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24mIzM5O3MgZGVwZW5kZW5jaWVzLCB0cnlpbmcgdG8gdHJvdWJsZXNob290IGEgYnVpbGQgaXNzdWUsIG9yIHNpbXBseSByZWZyZXNoaW5nIG15IHVuZGVyc3RhbmRpbmcgb2YgYSBwYXJ0aWN1bGFyIHg4NiBmZWF0dXJlLiBXaGF0ZXZlciB0aGUgcmVhc29uLCBsaW5lIDgxMyBpcyBteSBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBkZWVwIGRpdmUuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIHdlIGZpbmQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODEwOlx0XHRkZXBlbmRzIG9uIFg4Nl82NFxuIDgxMTpcdFx0c2VsZWN0IEFSQ0hfSEFTX0xBWllfTU1VX01PREVcbiA4MTI6XHRcbiA4MTM6XHRjb25maWcgUEFSQVZJUlRfU1BJTkxPQ0tTXG4gODE0Olx0XHRib29sIFwmIzM0O1BhcmF2aXJ0dWFsaXphdGlvbiBsYXllciBmb3Igc3BpbmxvY2tzXCYjMzQ7XG4gODE1Olx0XHRkZXBlbmRzIG9uIFBBUkFWSVJUIFx1MDAyNlx1MDAyNiBTTVBcbiA4MTY6XHRcdGhlbHBcbiA4MTc6XHRcdCAgUGFyYXZpcnR1YWxpemVkIHNwaW5sb2NrcyBhbGxvdyBhIHB2b3BzIGJhY2tlbmQgdG8gcmVwbGFjZSB0aGVcbiA4MTg6XHRcdCAgc3BpbmxvY2sgaW1wbGVtZW50YXRpb24gd2l0aCBzb21ldGhpbmcgdmlydHVhbGl6YXRpb24tZnJpZW5kbHlcbiA4MTk6XHRcdCAgKGZvciBleGFtcGxlLCBibG9jayB0aGUgdmlydHVhbCBDUFUgcmF0aGVyIHRoYW4gc3Bpbm5pbmcpLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODY5MwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDM4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLVk0gQ29uZmlndXJhdGlvbiBhbmQgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYFBBUkFWSVJUX1NQSU5MT0NLU2AgZml0cyBpbnRvIHRoaXMuIEl0JiMzOTtzIGNsZWFyIHRoYXQgaXQgZGVwZW5kcyBvbiBgUEFSQVZJUlRgIGFuZCBgU01QYCwgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdG8gYWRkIGBQQVJBVklSVF9TUElOTE9DS1NgIHRvIGBFbmFibGVDb25maWdzYC4gVGhhdCYjMzk7cyBhIG5lY2Vzc2FyeSBkZXBlbmRlbmN5LgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSByZWxldmFudCBjb25maWdzIGhlcmU6IGBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdgLCBgUEFSQVZJUlRfU1BJTkxPQ0tTYCwgYFBBUkFWSVJUYCwgYEhZUEVSVklTT1JfR1VFU1RgLCBgVklSVFVBTElaQVRJT05gLCBgS1ZNYCwgYW5kIG9mIGNvdXJzZSBgU01QYC4gQWx0aG91Z2ggYFNNUGAgaXMgdXN1YWxseSBhIGRlZmF1bHQsIGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGtlZXAgaW4gbWluZC4KCk5vdywgbXkgZm9jdXMgaXMgb24gdGhlIGNydWNpYWwgc3ltYm9sIGZvciBvcHRpbWl6YXRpb24uIEkmIzM5O20gY3VycmVudGx5IGxlYW5pbmcgdG93YXJkcyBga3ZtX3NldF9tc3JfY29tbW9uYC4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZSB0aGF0IHdvdWxkIGJlIGJldHRlcj8gSSBjb25zaWRlcmVkIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AsIGJ1dCBpdCYjMzk7cyBzdGF0aWMsIHNvIG5vIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBgdXBkYXRlX3JxX2Nsb2NrYCBpcyBhIHZlcnkgZ2VuZXJpYyBob3QgcGF0aCwgc28gSSYjMzk7bGwgYXZvaWQgaXQuIFRoZSBgcmVjb3JkX3N0ZWFsX3RpbWVgIGlzIGFub3RoZXIgc3RhdGljIG9uZSwgc28gSSYjMzk7bGwgc2tpcCBpdC4gVGhlbiB0aGVyZSYjMzk7cyBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLCB3aGljaCBpcyBhIGhvdCBwYXRoIGJ1dCBpdCYjMzk7cyByZWFsbHkgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBLVk0gdkNQVSBydW4sIHdoaWNoIGlzbiYjMzk7dCB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuCgpga3ZtX3NldF9tc3JfY29tbW9uYCBzZWVtcyBpZGVhbC4gSXQmIzM5O3Mgbm90IGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgc2luY2UgTVNSIHdyaXRlcyBhcmUgcmVsYXRpdmVseSByYXJlIGNvbXBhcmVkIHRvIFZNIGV4aXRzLCBhbmQgaXQgZGlyZWN0bHkgdHJpZ2dlcnMgYEtWTV9SRVFfU1RFQUxfVVBEQVRFYCwgd2hpY2ggdGhlbiBjYWxscyBgcmVjb3JkX3N0ZWFsX3RpbWVgLCBzbyBJJiMzOTtsbCBoYXZlIHRoZSB2aXNpYmlsaXR5IEkgbmVlZC4KCldhaXQsIHRob3VnaCwgYGt2bV9zZXRfbXNyX2NvbW1vbmAgaXMgYWN0dWFsbHkgYSByYXRoZXIgbGFyZ2UgZnVuY3Rpb24sIGFuZCBJJiMzOTtkIHByZWZlciBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYy4gTGV0IG1lIGRvdWJsZS1jaGVjay4uLiBZZXMsIGl0IGhhbmRsZXMgYE1TUl9LVk1fU1RFQUxfVElNRWAsIGJ1dCBjYW4gSSBwaW5wb2ludCBhIG1vcmUgZm9jdXNlZCBmdW5jdGlvbj8gQ2hlY2tpbmcgZm9yIG90aGVyIG9wdGlvbnMgbm93Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zZXRfbXNyX2NvbW1vbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmM9Mzg3OT1zdGF0aWMgdm9pZCBrdm1fZ2V0X3hzdGF0ZV9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0zODgzLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjM4ODQ6aW50IGt2bV9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzg4NS17XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTQyODgtfVxuYXJjaC94ODYva3ZtL3g4Ni5jOjQyODk6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXRfbXNyX2NvbW1vbik7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNDI5MC1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTQwNzE9dm9pZCBrdm1fYXJjaF9hc3luY19wYWdlX3ByZXNlbnRfcXVldWVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTQwNzQtXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTQwNzU6XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9tYigpIGluIGt2bV9zZXRfbXNyX2NvbW1vbigpLiAqL1xuYXJjaC94ODYva3ZtL3g4Ni5jLTE0MDc2LVx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDI6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5NzcKCQkJCQkJCW91dHB1dDogMjAxCgkJCQkJCQl0aG91Z2h0czogMzAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBTdGVhbCBUaW1lIEFjY291bnRpbmcgUGF0Y2gqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBga3ZtX3NldF9tc3JfY29tbW9uYCBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXMgdGhlIGtleSBmdW5jdGlvbiB0byBmb2N1cyBvbi4gSXQmIzM5O3MgZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QsIGFuZCBpdCBzZWVtcyBjZW50cmFsIHRvIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgYmVpbmcgbW9kaWZpZWQg4oCTIHRoZSBNU1Igd3JpdGUgdGhhdCBlbmFibGVzIGFuZCBhZmZlY3RzIHRoZSBzdGVhbCB0aW1lIGFjY291bnRpbmcgbG9naWMgd2l0aGluIEtWTS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIGRpZCBhIHF1aWNrIG1lbnRhbCBzY2FuLiBJIGFsc28gY29uc2lkZXJlZCBga3ZtX2FyY2hfdmNwdV9sb2FkYCBzaW5jZSB0aGF0JiMzOTtzIGludm9sdmVkIG9uIGV2ZXJ5IHZDUFUgY29udGV4dCBzd2l0Y2gsIHdoaWNoIG1ha2VzIGl0IGEgdmVyeSBob3QgcGF0aC4gSG93ZXZlciwgYWZ0ZXIgdGhhdCBxdWljayBsb29rIG92ZXIsIGBrdm1fc2V0X21zcl9jb21tb25gIHN0aWxsIGZlZWxzIGxpa2UgdGhlIGJlc3QgYmV0LiBJdCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBjcnVjaWFsIE1TUiB3cml0ZSByZWxhdGVkIHRvIHRoZSBjaGFuZ2VzLgoKU28sIGhlcmUmIzM5O3MgdGhlIGZpbmFsIHZlcmRpY3Q6CgoqICAgKipXb3J0aEZ1enppbmc6IFRydWUqKi4gVGhpcyBwYXRjaCBkaXJlY3RseSB0b3VjaGVzIGNyaXRpY2FsIEtWTSBhbmQgc2NoZWR1bGVyIGxvZ2ljIHJlbGF0ZWQgdG8gdGltZSBhY2NvdW50aW5nLiBGdW5jdGlvbmFsIGNoYW5nZXMgd2FycmFudCBmdXp6aW5nLgoqICAgKipGb2N1c1N5bWJvbHM6IFxb4oCca3ZtX3NldF9tc3JfY29tbW9u4oCdXSoqLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBwcmltYXJ5IHRhcmdldCBkdWUgdG8gaXRzIGRpcmVjdCByb2xlIGluIGhhbmRsaW5nIHRoZSBNU1Igd3JpdGUgcmVzcG9uc2libGUgZm9yIHRoZSBjaGFuZ2VzIHRvIHRoZSBzdGVhbCB0aW1lIGxvZ2ljLgoqICAgKipFbmFibGVDb25maWdzOiBcW+KAnFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR+KAnSwg4oCcUEFSQVZJUlRfU1BJTkxPQ0tT4oCdLCDigJxQQVJBVklSVOKAnSwg4oCcSFlQRVJWSVNPUl9HVUVTVOKAnSwg4oCcVklSVFVBTElaQVRJT07igJ0sIOKAnEtWTeKAnV0qKi4gVGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZWxldmFudCBiZWNhdXNlIHRoZXkgZW5hYmxlIHRoZSBjb3JlIGZlYXR1cmVzIGFuZCB1bmRlcmx5aW5nIHZpcnR1YWxpemF0aW9uIHRlY2hub2xvZ2llcyB0aGF0IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGguCiogICAqKlJlYXNvbmluZzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN0ZWFsIHRpbWUgYWNjb3VudGluZyBsb2dpYyBpbiBLVk0gYW5kIHRoZSBzY2hlZHVsZXIuIEl0IGNoYW5nZXMgdGhlIG9yZGVyIG9mIHVzZXIgYWNjZXNzIGFuZCBtZW1vcnkgYmFycmllcnMgaW4gYHJlY29yZF9zdGVhbF90aW1lYCAoS1ZNKSBhbmQgZGVmZXJzIGNsb2NrIHRhc2sgdXBkYXRlcyBpbiBgdXBkYXRlX3JxX2Nsb2NrX3Rhc2tgIChzY2hlZHVsZXIpIHdoZW4gdGhlIHZDUFUgaXMgcHJlZW1wdGVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUga2VybmVsIGFuZCBLVk0gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiBga3ZtX3NldF9tc3JfY29tbW9uYCBoYW5kbGVzIHRoZSBNU1Igd3JpdGUgdGhhdCBlbmFibGVzIHN0ZWFsIHRpbWUgYWNjb3VudGluZyBhbmQgdHJpZ2dlcnMgdGhlIEtWTSBsb2dpYy4mIzM0OyoqIFRoaXMgZXhwbGFpbnMgdGhlIGNyaXRpY2FsIGNoYW5nZXMgaW52b2x2ZWQsIGFuZCBob3cgYGt2bV9zZXRfbXNyX2NvbW1vbmAgZGlyZWN0bHkgdGllcyBpbnRvIHRoZSBjaGFuZ2VzLCBzZXJ2aW5nIGFzIHRoZSB0cmlnZ2VyIGZvciB0aGUgbW9kaWZpZWQgS1ZNIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HJiMzNDssCiAgICAmIzM0O1BBUkFWSVJUX1NQSU5MT0NLUyYjMzQ7LAogICAgJiMzNDtQQVJBVklSVCYjMzQ7LAogICAgJiMzNDtIWVBFUlZJU09SX0dVRVNUJiMzNDssCiAgICAmIzM0O1ZJUlRVQUxJWkFUSU9OJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9zZXRfbXNyX2NvbW1vbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3RlYWwgdGltZSBhY2NvdW50aW5nIGxvZ2ljIGluIEtWTSBhbmQgdGhlIHNjaGVkdWxlci4gSXQgY2hhbmdlcyB0aGUgb3JkZXIgb2YgdXNlciBhY2Nlc3MgYW5kIG1lbW9yeSBiYXJyaWVycyBpbiBgcmVjb3JkX3N0ZWFsX3RpbWVgIChLVk0pIGFuZCBkZWZlcnMgY2xvY2sgdGFzayB1cGRhdGVzIGluIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AgKHNjaGVkdWxlcikgd2hlbiB0aGUgdkNQVSBpcyBwcmVlbXB0ZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgYW5kIEtWTSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuIGBrdm1fc2V0X21zcl9jb21tb25gIGhhbmRsZXMgdGhlIE1TUiB3cml0ZSB0aGF0IGVuYWJsZXMgc3RlYWwgdGltZSBhY2NvdW50aW5nIGFuZCB0cmlnZ2VycyB0aGUgS1ZNIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQVJBVklSVF9USU1FX0FDQ09VTlRJTkcmIzM0OywKICAgICYjMzQ7UEFSQVZJUlRfU1BJTkxPQ0tTJiMzNDssCiAgICAmIzM0O1BBUkFWSVJUJiMzNDssCiAgICAmIzM0O0hZUEVSVklTT1JfR1VFU1QmIzM0OywKICAgICYjMzQ7VklSVFVBTElaQVRJT04mIzM0OywKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3NldF9tc3JfY29tbW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzdGVhbCB0aW1lIGFjY291bnRpbmcgbG9naWMgaW4gS1ZNIGFuZCB0aGUgc2NoZWR1bGVyLiBJdCBjaGFuZ2VzIHRoZSBvcmRlciBvZiB1c2VyIGFjY2VzcyBhbmQgbWVtb3J5IGJhcnJpZXJzIGluIGByZWNvcmRfc3RlYWxfdGltZWAgKEtWTSkgYW5kIGRlZmVycyBjbG9jayB0YXNrIHVwZGF0ZXMgaW4gYHVwZGF0ZV9ycV9jbG9ja190YXNrYCAoc2NoZWR1bGVyKSB3aGVuIHRoZSB2Q1BVIGlzIHByZWVtcHRlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBhbmQgS1ZNIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4gYGt2bV9zZXRfbXNyX2NvbW1vbmAgaGFuZGxlcyB0aGUgTVNSIHdyaXRlIHRoYXQgZW5hYmxlcyBzdGVhbCB0aW1lIGFjY291bnRpbmcgYW5kIHRyaWdnZXJzIHRoZSBLVk0gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDI6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9yZGVyIG9mIGd1ZXN0IG1lbW9yeSBhY2Nlc3NlcyBpbiBgcmVjb3JkX3N0ZWFsX3RpbWVgIGFuZCBhZGRzIGEgbmV3IGZpZWxkIGBkZWZlcnJlZF9jbG9ja190YXNrYCB0byBgc3RydWN0IHJxYCBmb3IgcGFyYXZpcnQgc3RlYWwgdGltZSBhY2NvdW50aW5nLiBUaGUgZ3Vlc3QgbWVtb3J5IGFjY2Vzc2VzIHVzZSBgdW5zYWZlX2dldF91c2VyYCB3aGljaCBpbml0aWFsaXplcyB0aGUgbG9jYWwgdmFyaWFibGVzIChgdmVyc2lvbmAgYW5kIGBzdGVhbGApIHVwb24gc3VjY2Vzcywgb3IganVtcHMgdG8gYW4gZXJyb3IgbGFiZWwgdXBvbiBmYWlsdXJlLCBwcmV2ZW50aW5nIGFueSB1c2Ugb2YgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMuIFRoZSBuZXcgYGRlZmVycmVkX2Nsb2NrX3Rhc2tgIGZpZWxkIGlzIHBhcnQgb2YgYHN0cnVjdCBycWAsIHdoaWNoIGlzIGEgcGVyLUNQVSB2YXJpYWJsZSBhbmQgdGh1cyB6ZXJvLWluaXRpYWxpemVkIGJ5IGRlZmF1bHQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBub3IgZG9lcyBpdCBjb3B5IHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODY2ODU4NjdkNWU5Y2Y3MDZmYzhkMzQxYjA2ZjE3OWU2M2RlZDcxZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDAxOjUxOjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDY5NDY5YmJkYzg0YTguLjUyNWExNDQ4MTk1ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTM3NTEsNiAmIzQzOzM3NTEsMzUgQEAgc3RhdGljIHZvaWQgcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCX0KIAogCXN0ID0gKHN0cnVjdCBrdm1fc3RlYWxfdGltZSBfX3VzZXIgKilnaGMtJmd0O2h2YTsKJiM0MzsKJiM0MzsJaWYgKCF1c2VyX2FjY2Vzc19iZWdpbihzdCwgc2l6ZW9mKCpzdCkpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl1bnNhZmVfZ2V0X3VzZXIodmVyc2lvbiwgJmFtcDtzdC0mZ3Q7dmVyc2lvbiwgb3V0KTsKJiM0MzsJaWYgKHZlcnNpb24gJmFtcDsgMSkKJiM0MzsJCXZlcnNpb24gJiM0Mzs9IDE7ICAvKiBmaXJzdCB0aW1lIHdyaXRlLCByYW5kb20ganVuayAqLwomIzQzOwomIzQzOwl2ZXJzaW9uICYjNDM7PSAxOwomIzQzOwl1bnNhZmVfcHV0X3VzZXIodmVyc2lvbiwgJmFtcDtzdC0mZ3Q7dmVyc2lvbiwgb3V0KTsKJiM0MzsKJiM0MzsJLyogUGFpcnMgd2l0aCB0aGUgZ3Vlc3Qgc2lkZSB2aXJ0X3JtYigpIGluIGt2bV9zdGVhbF9jbG9jaygpLiAqLwomIzQzOwlzbXBfd21iKCk7CiYjNDM7CiYjNDM7CXVuc2FmZV9nZXRfdXNlcihzdGVhbCwgJmFtcDtzdC0mZ3Q7c3RlYWwsIG91dCk7CiYjNDM7CXN0ZWFsICYjNDM7PSBjdXJyZW50LSZndDtzY2hlZF9pbmZvLnJ1bl9kZWxheSAtCiYjNDM7CQl2Y3B1LSZndDthcmNoLnN0Lmxhc3Rfc3RlYWw7CiYjNDM7CXZjcHUtJmd0O2FyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtJmd0O3NjaGVkX2luZm8ucnVuX2RlbGF5OwomIzQzOwl1bnNhZmVfcHV0X3VzZXIoc3RlYWwsICZhbXA7c3QtJmd0O3N0ZWFsLCBvdXQpOwomIzQzOwomIzQzOwl2ZXJzaW9uICYjNDM7PSAxOwomIzQzOwl1bnNhZmVfcHV0X3VzZXIodmVyc2lvbiwgJmFtcDtzdC0mZ3Q7dmVyc2lvbiwgb3V0KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUHVibGlzaCB0aGUgc3RlYWx0aW1lIGJlZm9yZSBtYWtpbmcgdGhlIHZDUFUgbG9vayBydW5uYWJsZSB0bwomIzQzOwkgKiB0aGUgZ3Vlc3QuCiYjNDM7CSAqLwomIzQzOwlzbXBfd21iKCk7CiYjNDM7CiAJLyoKIAkgKiBEb2luZyBhIFRMQiBmbHVzaCBoZXJlLCBvbiB0aGUgZ3Vlc3QmIzM5O3MgYmVoYWxmLCBjYW4gYXZvaWQKIAkgKiBleHBlbnNpdmUgSVBJcy4KQEAgLTM3NTksOSAmIzQzOzM3ODgsNiBAQCBzdGF0aWMgdm9pZCByZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCXU4IHN0X3ByZWVtcHRlZCA9IDA7CiAJCWludCBlcnIgPSAtRUZBVUxUOwogCi0JCWlmICghdXNlcl9hY2Nlc3NfYmVnaW4oc3QsIHNpemVvZigqc3QpKSkKLQkJCXJldHVybjsKLQogCQlhc20gdm9sYXRpbGUoJiMzNDsxOiB4Y2hnYiAlMCwgJTJcbiYjMzQ7CiAJCQkgICAgICYjMzQ7eG9yICUxLCAlMVxuJiMzNDsKIAkJCSAgICAgJiMzNDsyOlxuJiMzNDsKQEAgLTM3ODEsMzcgJiM0MzszODA3LDE3IEBAIHN0YXRpYyB2b2lkIHJlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJaWYgKHN0X3ByZWVtcHRlZCAmYW1wOyBLVk1fVkNQVV9GTFVTSF9UTEIpCiAJCQlrdm1fdmNwdV9mbHVzaF90bGJfZ3Vlc3QodmNwdSk7CiAKLQkJaWYgKCF1c2VyX2FjY2Vzc19iZWdpbihzdCwgc2l6ZW9mKCpzdCkpKQotCQkJZ290byBkaXJ0eTsKIAl9IGVsc2UgewotCQlpZiAoIXVzZXJfYWNjZXNzX2JlZ2luKHN0LCBzaXplb2YoKnN0KSkpCi0JCQlyZXR1cm47Ci0KIAkJdW5zYWZlX3B1dF91c2VyKDAsICZhbXA7c3QtJmd0O3ByZWVtcHRlZCwgb3V0KTsKIAkJdmNwdS0mZ3Q7YXJjaC5zdC5wcmVlbXB0ZWQgPSAwOwomIzQzOwkJdXNlcl9hY2Nlc3NfZW5kKCk7CiAJfQogCi0JdW5zYWZlX2dldF91c2VyKHZlcnNpb24sICZhbXA7c3QtJmd0O3ZlcnNpb24sIG91dCk7Ci0JaWYgKHZlcnNpb24gJmFtcDsgMSkKLQkJdmVyc2lvbiAmIzQzOz0gMTsgIC8qIGZpcnN0IHRpbWUgd3JpdGUsIHJhbmRvbSBqdW5rICovCi0KLQl2ZXJzaW9uICYjNDM7PSAxOwotCXVuc2FmZV9wdXRfdXNlcih2ZXJzaW9uLCAmYW1wO3N0LSZndDt2ZXJzaW9uLCBvdXQpOwotCi0Jc21wX3dtYigpOwotCi0JdW5zYWZlX2dldF91c2VyKHN0ZWFsLCAmYW1wO3N0LSZndDtzdGVhbCwgb3V0KTsKLQlzdGVhbCAmIzQzOz0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXkgLQotCQl2Y3B1LSZndDthcmNoLnN0Lmxhc3Rfc3RlYWw7Ci0JdmNwdS0mZ3Q7YXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC0mZ3Q7c2NoZWRfaW5mby5ydW5fZGVsYXk7Ci0JdW5zYWZlX3B1dF91c2VyKHN0ZWFsLCAmYW1wO3N0LSZndDtzdGVhbCwgb3V0KTsKLQotCXZlcnNpb24gJiM0Mzs9IDE7Ci0JdW5zYWZlX3B1dF91c2VyKHZlcnNpb24sICZhbXA7c3QtJmd0O3ZlcnNpb24sIG91dCk7CiYjNDM7CW1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KHZjcHUtJmd0O2t2bSwgZ2hjLSZndDttZW1zbG90LCBncGFfdG9fZ2ZuKGdoYy0mZ3Q7Z3BhKSk7CiYjNDM7CXJldHVybjsKIAogIG91dDoKIAl1c2VyX2FjY2Vzc19lbmQoKTsKLSBkaXJ0eToKIAltYXJrX3BhZ2VfZGlydHlfaW5fc2xvdCh2Y3B1LSZndDtrdm0sIGdoYy0mZ3Q7bWVtc2xvdCwgZ3BhX3RvX2dmbihnaGMtJmd0O2dwYSkpOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuYwppbmRleCBmNzgyNzUxOTIwMzZiLi41NmFhNDM5MTgyYzc1IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9jb3JlLmMKQEAgLTgxNiw2ICYjNDM7ODE2LDMwIEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9ycV9jbG9ja190YXNrKHN0cnVjdCBycSAqcnEsIHM2NCBkZWx0YSkKICAqLwogCXM2NCBfX21heWJlX3VudXNlZCBzdGVhbCA9IDAsIGlycV9kZWx0YSA9IDA7CiAKJiM0MzsjaWZkZWYgQ09ORklHX1BBUkFWSVJUX1RJTUVfQUNDT1VOVElORwomIzQzOwlpZiAoc3RhdGljX2tleV9mYWxzZSgoJmFtcDtwYXJhdmlydF9zdGVhbF9ycV9lbmFibGVkKSkpIHsKJiM0MzsJCWludCBycV9jcHUgPSBjcHVfb2YocnEpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEEgcmVtb3RlIENQVSBjYW4gdXBkYXRlIHRoaXMgcnEgYmVmb3JlIHRoZSBvd25lciB2Q1BVCiYjNDM7CQkgKiBoYXMgcmUtZW50ZXJlZCB0aGUgZ3Vlc3QgYW5kIHJlZnJlc2hlZCBpdHMgc3RlYWx0aW1lCiYjNDM7CQkgKiBzdGF0ZS4gRG8gbm90IGNoYXJnZSB0aGF0IGVsYXBzZWQgdGltZSB0byB0aGUgY3VycmVudAomIzQzOwkJICogdGFzayB1bnRpbCBzdGVhbHRpbWUgY2FuIGJlIHNhbXBsZWQgYWZ0ZXIgdGhlIHZDUFUgaXMKJiM0MzsJCSAqIG5vIGxvbmdlciBwcmVlbXB0ZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChycV9jcHUgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdmNwdV9pc19wcmVlbXB0ZWQocnFfY3B1KSkgewomIzQzOwkJCXJxLSZndDtkZWZlcnJlZF9jbG9ja190YXNrICYjNDM7PSBkZWx0YTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAocnEtJmd0O2RlZmVycmVkX2Nsb2NrX3Rhc2spIHsKJiM0MzsJCQlkZWx0YSAmIzQzOz0gcnEtJmd0O2RlZmVycmVkX2Nsb2NrX3Rhc2s7CiYjNDM7CQkJcnEtJmd0O2RlZmVycmVkX2Nsb2NrX3Rhc2sgPSAwOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CiAjaWZkZWYgQ09ORklHX0lSUV9USU1FX0FDQ09VTlRJTkcKIAlpZiAoaXJxdGltZV9lbmFibGVkKCkpIHsKIAkJaXJxX2RlbHRhID0gaXJxX3RpbWVfcmVhZChjcHVfb2YocnEpKSAtIHJxLSZndDtwcmV2X2lycV90aW1lOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL3NjaGVkLmggYi9rZXJuZWwvc2NoZWQvc2NoZWQuaAppbmRleCBlNjU2YzcwNTliZjg2Li40ZmQwMDIyOGFmZWYwIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvc2NoZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvc2NoZWQuaApAQCAtMTMyNSw2ICYjNDM7MTMyNSw3IEBAIHN0cnVjdCBycSB7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HCiAJdTY0CQkJcHJldl9zdGVhbF90aW1lX3JxOwomIzQzOwl1NjQJCQlkZWZlcnJlZF9jbG9ja190YXNrOwogI2VuZGlmCiAKIAkvKiBjYWxjX2xvYWQgcmVsYXRlZCBmaWVsZHMgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0OTkKCQkJCQkJCW91dHB1dDogMjEwCgkJCQkJCQl0aG91Z2h0czogMTYyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZXcgUmlza3MgSW50cm9kdWNlZCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHRhc2tlZCB3aXRoIGFzc2Vzc2luZyB0aGlzIHBhdGNoIGZvciBwb3RlbnRpYWwgS01TQU4gdnVsbmVyYWJpbGl0aWVzLiBNeSBpbml0aWFsIHNjYW4gZm9jdXNlZCBvbiB0aGUgbW9kaWZpY2F0aW9ucyBhY3Jvc3MgYGFyY2gveDg2L2t2bS94ODYuY2AsIGBrZXJuZWwvc2NoZWQvY29yZS5jYCwgYW5kIGBrZXJuZWwvc2NoZWQvc2NoZWQuaGAuCgpJbiBgYXJjaC94ODYva3ZtL3g4Ni5jYCwgdGhlIGNoYW5nZXMgd2l0aGluIGByZWNvcmRfc3RlYWxfdGltZWAgaW52b2x2ZSByZW9yZGVyaW5nIG1lbW9yeSBhY2Nlc3NlcyB0byB0aGUgZ3Vlc3QmIzM5O3MgbWVtb3J5IHNwYWNlIHVzaW5nIGB1bnNhZmVfZ2V0X3VzZXJgIGFuZCBgdW5zYWZlX3B1dF91c2VyYC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYm90aCBgdmVyc2lvbmAgYW5kIGBzdGVhbGAgYXJlIHN0YWNrLWFsbG9jYXRlZCBsb2NhbCB2YXJpYWJsZXMsICppbml0aWFsaXplZCBieSBgdW5zYWZlX2dldF91c2VyYCogYmVmb3JlIHRoZXkmIzM5O3JlIGV2ZXIgdXNlZC4gSWYgYHVuc2FmZV9nZXRfdXNlcmAgZmFpbHMsIHdlIGp1bXAgb3V0IHdpdGggYW4gZXJyb3IsIHNvIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFsdWVzIGFyZSBldmVyIHVzZWQuIFRoZSBjb2RlJiMzOTtzIHJlYWRpbmcgZnJvbSBhbmQgd3JpdGluZyB0byB0aGUgKmd1ZXN0JiMzOTtzKiBtZW1vcnksIG5vdCBrZXJuZWwgbWVtb3J5LCBhbmQgdGhlIGFjY2VzcyBpcyBhcHByb3ByaWF0ZWx5IHByb3RlY3RlZC4gSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9ucywgZW5zdXJpbmcgdGhleSYjMzk7cmUgbG9jYWwgdG8gdGhlIGZ1bmN0aW9uIGFuZCBhcmUgY29ycmVjdGx5IGluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgaXMgZXZlciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuCgpUaGUgY2hhbmdlcyBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AgYXJlIHN0cmFpZ2h0Zm9yd2FyZDogYSBuZXcgZmllbGQsIGBycS0mZ3Q7ZGVmZXJyZWRfY2xvY2tfdGFza2AsIGlzIGludHJvZHVjZWQgd2l0aGluIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AuIFRoaXMgaXMgd2l0aGluIGBzdHJ1Y3QgcnFgLCBhbmQgYHN0cnVjdCBycWAgaXMgYSBwZXItQ1BVIGRhdGEgc3RydWN0dXJlLiBQZXItQ1BVIHZhcmlhYmxlcyBhcmUgKmFsd2F5cyogemVyby1pbml0aWFsaXplZCBieSB0aGUga2VybmVsLCByZXNpZGluZyBpbiB0aGUgYC5kYXRhLi5wZXJjcHVgIHNlY3Rpb24gb2YgbWVtb3J5LiBJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCB0aGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gYmVoYXZpb3Igb2YgcGVyLUNQVSB2YXJpYWJsZXMsIGNvbmZpcm1pbmcgdGhhdCB0aGlzIGZpZWxkIGlzIGltcGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gemVyby4gRXZlbiBpZiB0aGVyZSYjMzk7cyBhIHRoZW9yZXRpY2FsIGlzc3VlLCB0aGlzIG1lbW9yeSBpcyBlbnRpcmVseSB3aXRoaW4gdGhlIGtlcm5lbCwgYW5kIHdlJiMzOTtyZSBub3QgY29weWluZyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZS4gS01TQU4gaXMgZm9yIGRldGVjdGluZyBpbmZvcm1hdGlvbiBsZWFrcyBvZiBrZXJuZWwgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgc28gdGhhdCYjMzk7cyBpcnJlbGV2YW50IGhlcmUuCgpOb3csIGxldCYjMzk7cyBnbyBiYWNrIGFuZCBjYXJlZnVsbHkgcnVuIHRocm91Z2ggdGhlIEtNU0FOIHJ1bGUuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Uga2VybmVsIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UgdGhhdCAqbWlnaHQqIGNvbnRhaW4gdW5pbml0aWFsaXplZCBmaWVsZHMuIFRoZXJlJiMzOTtzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gbmV3IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLiBObyBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIGVycm9ycyBhbGxvdyBzdXJyb3VuZGluZyBjb2RlIHRvIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIGB1bnNhZmVfZ2V0X3VzZXJgIGlzIGNvcnJlY3RseSB1c2VkLCBpbml0aWFsaXppbmcgdmFyaWFibGVzIHdoZW4gdGhleSBhcmUgcmVhZCBhbmQgcHJvdmlkaW5nIGVycm9yIGNvbmRpdGlvbnMuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyBuZXcgS01TQU4tc3BlY2lmaWMgcmlza3MuIFN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgc2FmZXR5IHRvb2xzIGxpa2UgS0FTQU4gYXJlIHN1ZmZpY2llbnQuIEkmIzM5O20gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcmRlciBvZiBndWVzdCBtZW1vcnkgYWNjZXNzZXMgaW4gYHJlY29yZF9zdGVhbF90aW1lYCBhbmQgYWRkcyBhIG5ldyBmaWVsZCBgZGVmZXJyZWRfY2xvY2tfdGFza2AgdG8gYHN0cnVjdCBycWAgZm9yIHBhcmF2aXJ0IHN0ZWFsIHRpbWUgYWNjb3VudGluZy4gVGhlIGd1ZXN0IG1lbW9yeSBhY2Nlc3NlcyB1c2UgYHVuc2FmZV9nZXRfdXNlcmAgd2hpY2ggaW5pdGlhbGl6ZXMgdGhlIGxvY2FsIHZhcmlhYmxlcyAoYHZlcnNpb25gIGFuZCBgc3RlYWxgKSB1cG9uIHN1Y2Nlc3MsIG9yIGp1bXBzIHRvIGFuIGVycm9yIGxhYmVsIHVwb24gZmFpbHVyZSwgcHJldmVudGluZyBhbnkgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzLiBUaGUgbmV3IGBkZWZlcnJlZF9jbG9ja190YXNrYCBmaWVsZCBpcyBwYXJ0IG9mIGBzdHJ1Y3QgcnFgLCB3aGljaCBpcyBhIHBlci1DUFUgdmFyaWFibGUgYW5kIHRodXMgemVyby1pbml0aWFsaXplZCBieSBkZWZhdWx0LiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgbm9yIGRvZXMgaXQgY29weSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgb3JkZXIgb2YgZ3Vlc3QgbWVtb3J5IGFjY2Vzc2VzIGluIGByZWNvcmRfc3RlYWxfdGltZWAgYW5kIGFkZHMgYSBuZXcgZmllbGQgYGRlZmVycmVkX2Nsb2NrX3Rhc2tgIHRvIGBzdHJ1Y3QgcnFgIGZvciBwYXJhdmlydCBzdGVhbCB0aW1lIGFjY291bnRpbmcuIFRoZSBndWVzdCBtZW1vcnkgYWNjZXNzZXMgdXNlIGB1bnNhZmVfZ2V0X3VzZXJgIHdoaWNoIGluaXRpYWxpemVzIHRoZSBsb2NhbCB2YXJpYWJsZXMgKGB2ZXJzaW9uYCBhbmQgYHN0ZWFsYCkgdXBvbiBzdWNjZXNzLCBvciBqdW1wcyB0byBhbiBlcnJvciBsYWJlbCB1cG9uIGZhaWx1cmUsIHByZXZlbnRpbmcgYW55IHVzZSBvZiB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcy4gVGhlIG5ldyBgZGVmZXJyZWRfY2xvY2tfdGFza2AgZmllbGQgaXMgcGFydCBvZiBgc3RydWN0IHJxYCwgd2hpY2ggaXMgYSBwZXItQ1BVIHZhcmlhYmxlIGFuZCB0aHVzIHplcm8taW5pdGlhbGl6ZWQgYnkgZGVmYXVsdC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IGNvcHkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgZXJyb3JzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMTo1MTo1Ny4yMTQ5MDUxMTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODY3NDM2NDE3OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HXCIsXG4gICAgXCJQQVJBVklSVF9TUElOTE9DS1NcIixcbiAgICBcIlBBUkFWSVJUXCIsXG4gICAgXCJIWVBFUlZJU09SX0dVRVNUXCIsXG4gICAgXCJWSVJUVUFMSVpBVElPTlwiLFxuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3NldF9tc3JfY29tbW9uXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgb3JkZXIgb2YgZ3Vlc3QgbWVtb3J5IGFjY2Vzc2VzIGluIGByZWNvcmRfc3RlYWxfdGltZWAgYW5kIGFkZHMgYSBuZXcgZmllbGQgYGRlZmVycmVkX2Nsb2NrX3Rhc2tgIHRvIGBzdHJ1Y3QgcnFgIGZvciBwYXJhdmlydCBzdGVhbCB0aW1lIGFjY291bnRpbmcuIFRoZSBndWVzdCBtZW1vcnkgYWNjZXNzZXMgdXNlIGB1bnNhZmVfZ2V0X3VzZXJgIHdoaWNoIGluaXRpYWxpemVzIHRoZSBsb2NhbCB2YXJpYWJsZXMgKGB2ZXJzaW9uYCBhbmQgYHN0ZWFsYCkgdXBvbiBzdWNjZXNzLCBvciBqdW1wcyB0byBhbiBlcnJvciBsYWJlbCB1cG9uIGZhaWx1cmUsIHByZXZlbnRpbmcgYW55IHVzZSBvZiB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcy4gVGhlIG5ldyBgZGVmZXJyZWRfY2xvY2tfdGFza2AgZmllbGQgaXMgcGFydCBvZiBgc3RydWN0IHJxYCwgd2hpY2ggaXMgYSBwZXItQ1BVIHZhcmlhYmxlIGFuZCB0aHVzIHplcm8taW5pdGlhbGl6ZWQgYnkgZGVmYXVsdC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IGNvcHkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgZXJyb3JzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzdGVhbCB0aW1lIGFjY291bnRpbmcgbG9naWMgaW4gS1ZNIGFuZCB0aGUgc2NoZWR1bGVyLiBJdCBjaGFuZ2VzIHRoZSBvcmRlciBvZiB1c2VyIGFjY2VzcyBhbmQgbWVtb3J5IGJhcnJpZXJzIGluIGByZWNvcmRfc3RlYWxfdGltZWAgKEtWTSkgYW5kIGRlZmVycyBjbG9jayB0YXNrIHVwZGF0ZXMgaW4gYHVwZGF0ZV9ycV9jbG9ja190YXNrYCAoc2NoZWR1bGVyKSB3aGVuIHRoZSB2Q1BVIGlzIHByZWVtcHRlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBhbmQgS1ZNIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4gYGt2bV9zZXRfbXNyX2NvbW1vbmAgaGFuZGxlcyB0aGUgTVNSIHdyaXRlIHRoYXQgZW5hYmxlcyBzdGVhbCB0aW1lIGFjY291bnRpbmcgYW5kIHRyaWdnZXJzIHRoZSBLVk0gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAxOjUxOjU3LjIxNDkxMTE1NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzODA0NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODY2ODU4NjdkNWU5Y2Y3MDZmYzhkMzQxYjA2ZjE3OWU2M2RlZDcxZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAyNCAwMTo1MTo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5pbmRleCA2OTQ2OWJiZGM4NGE4Li41MjVhMTQ0ODE5NWUwIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuY1xcbkBAIC0zNzUxLDYgKzM3NTEsMzUgQEAgc3RhdGljIHZvaWQgcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHR9XFxuIFxcbiBcXHRzdCA9IChzdHJ1Y3Qga3ZtX3N0ZWFsX3RpbWUgX191c2VyICopZ2hjLVxcdTAwM2VodmE7XFxuK1xcbitcXHRpZiAoIXVzZXJfYWNjZXNzX2JlZ2luKHN0LCBzaXplb2YoKnN0KSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHVuc2FmZV9nZXRfdXNlcih2ZXJzaW9uLCBcXHUwMDI2c3QtXFx1MDAzZXZlcnNpb24sIG91dCk7XFxuK1xcdGlmICh2ZXJzaW9uIFxcdTAwMjYgMSlcXG4rXFx0XFx0dmVyc2lvbiArPSAxOyAgLyogZmlyc3QgdGltZSB3cml0ZSwgcmFuZG9tIGp1bmsgKi9cXG4rXFxuK1xcdHZlcnNpb24gKz0gMTtcXG4rXFx0dW5zYWZlX3B1dF91c2VyKHZlcnNpb24sIFxcdTAwMjZzdC1cXHUwMDNldmVyc2lvbiwgb3V0KTtcXG4rXFxuK1xcdC8qIFBhaXJzIHdpdGggdGhlIGd1ZXN0IHNpZGUgdmlydF9ybWIoKSBpbiBrdm1fc3RlYWxfY2xvY2soKS4gKi9cXG4rXFx0c21wX3dtYigpO1xcbitcXG4rXFx0dW5zYWZlX2dldF91c2VyKHN0ZWFsLCBcXHUwMDI2c3QtXFx1MDAzZXN0ZWFsLCBvdXQpO1xcbitcXHRzdGVhbCArPSBjdXJyZW50LVxcdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSAtXFxuK1xcdFxcdHZjcHUtXFx1MDAzZWFyY2guc3QubGFzdF9zdGVhbDtcXG4rXFx0dmNwdS1cXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XFxuK1xcdHVuc2FmZV9wdXRfdXNlcihzdGVhbCwgXFx1MDAyNnN0LVxcdTAwM2VzdGVhbCwgb3V0KTtcXG4rXFxuK1xcdHZlcnNpb24gKz0gMTtcXG4rXFx0dW5zYWZlX3B1dF91c2VyKHZlcnNpb24sIFxcdTAwMjZzdC1cXHUwMDNldmVyc2lvbiwgb3V0KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFB1Ymxpc2ggdGhlIHN0ZWFsdGltZSBiZWZvcmUgbWFraW5nIHRoZSB2Q1BVIGxvb2sgcnVubmFibGUgdG9cXG4rXFx0ICogdGhlIGd1ZXN0LlxcbitcXHQgKi9cXG4rXFx0c21wX3dtYigpO1xcbitcXG4gXFx0LypcXG4gXFx0ICogRG9pbmcgYSBUTEIgZmx1c2ggaGVyZSwgb24gdGhlIGd1ZXN0J3MgYmVoYWxmLCBjYW4gYXZvaWRcXG4gXFx0ICogZXhwZW5zaXZlIElQSXMuXFxuQEAgLTM3NTksOSArMzc4OCw2IEBAIHN0YXRpYyB2b2lkIHJlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0dTggc3RfcHJlZW1wdGVkID0gMDtcXG4gXFx0XFx0aW50IGVyciA9IC1FRkFVTFQ7XFxuIFxcbi1cXHRcXHRpZiAoIXVzZXJfYWNjZXNzX2JlZ2luKHN0LCBzaXplb2YoKnN0KSkpXFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFxuIFxcdFxcdGFzbSB2b2xhdGlsZShcXFwiMTogeGNoZ2IgJTAsICUyXFxcXG5cXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcInhvciAlMSwgJTFcXFxcblxcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwiMjpcXFxcblxcXCJcXG5AQCAtMzc4MSwzNyArMzgwNywxNyBAQCBzdGF0aWMgdm9pZCByZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdGlmIChzdF9wcmVlbXB0ZWQgXFx1MDAyNiBLVk1fVkNQVV9GTFVTSF9UTEIpXFxuIFxcdFxcdFxcdGt2bV92Y3B1X2ZsdXNoX3RsYl9ndWVzdCh2Y3B1KTtcXG4gXFxuLVxcdFxcdGlmICghdXNlcl9hY2Nlc3NfYmVnaW4oc3QsIHNpemVvZigqc3QpKSlcXG4tXFx0XFx0XFx0Z290byBkaXJ0eTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0aWYgKCF1c2VyX2FjY2Vzc19iZWdpbihzdCwgc2l6ZW9mKCpzdCkpKVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcbiBcXHRcXHR1bnNhZmVfcHV0X3VzZXIoMCwgXFx1MDAyNnN0LVxcdTAwM2VwcmVlbXB0ZWQsIG91dCk7XFxuIFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guc3QucHJlZW1wdGVkID0gMDtcXG4rXFx0XFx0dXNlcl9hY2Nlc3NfZW5kKCk7XFxuIFxcdH1cXG4gXFxuLVxcdHVuc2FmZV9nZXRfdXNlcih2ZXJzaW9uLCBcXHUwMDI2c3QtXFx1MDAzZXZlcnNpb24sIG91dCk7XFxuLVxcdGlmICh2ZXJzaW9uIFxcdTAwMjYgMSlcXG4tXFx0XFx0dmVyc2lvbiArPSAxOyAgLyogZmlyc3QgdGltZSB3cml0ZSwgcmFuZG9tIGp1bmsgKi9cXG4tXFxuLVxcdHZlcnNpb24gKz0gMTtcXG4tXFx0dW5zYWZlX3B1dF91c2VyKHZlcnNpb24sIFxcdTAwMjZzdC1cXHUwMDNldmVyc2lvbiwgb3V0KTtcXG4tXFxuLVxcdHNtcF93bWIoKTtcXG4tXFxuLVxcdHVuc2FmZV9nZXRfdXNlcihzdGVhbCwgXFx1MDAyNnN0LVxcdTAwM2VzdGVhbCwgb3V0KTtcXG4tXFx0c3RlYWwgKz0gY3VycmVudC1cXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkgLVxcbi1cXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnN0Lmxhc3Rfc3RlYWw7XFxuLVxcdHZjcHUtXFx1MDAzZWFyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtXFx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xcbi1cXHR1bnNhZmVfcHV0X3VzZXIoc3RlYWwsIFxcdTAwMjZzdC1cXHUwMDNlc3RlYWwsIG91dCk7XFxuLVxcbi1cXHR2ZXJzaW9uICs9IDE7XFxuLVxcdHVuc2FmZV9wdXRfdXNlcih2ZXJzaW9uLCBcXHUwMDI2c3QtXFx1MDAzZXZlcnNpb24sIG91dCk7XFxuK1xcdG1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KHZjcHUtXFx1MDAzZWt2bSwgZ2hjLVxcdTAwM2VtZW1zbG90LCBncGFfdG9fZ2ZuKGdoYy1cXHUwMDNlZ3BhKSk7XFxuK1xcdHJldHVybjtcXG4gXFxuICBvdXQ6XFxuIFxcdHVzZXJfYWNjZXNzX2VuZCgpO1xcbi0gZGlydHk6XFxuIFxcdG1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KHZjcHUtXFx1MDAzZWt2bSwgZ2hjLVxcdTAwM2VtZW1zbG90LCBncGFfdG9fZ2ZuKGdoYy1cXHUwMDNlZ3BhKSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jXFxuaW5kZXggZjc4Mjc1MTkyMDM2Yi4uNTZhYTQzOTE4MmM3NSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jXFxuKysrIGIva2VybmVsL3NjaGVkL2NvcmUuY1xcbkBAIC04MTYsNiArODE2LDMwIEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9ycV9jbG9ja190YXNrKHN0cnVjdCBycSAqcnEsIHM2NCBkZWx0YSlcXG4gICovXFxuIFxcdHM2NCBfX21heWJlX3VudXNlZCBzdGVhbCA9IDAsIGlycV9kZWx0YSA9IDA7XFxuIFxcbisjaWZkZWYgQ09ORklHX1BBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xcbitcXHRpZiAoc3RhdGljX2tleV9mYWxzZSgoXFx1MDAyNnBhcmF2aXJ0X3N0ZWFsX3JxX2VuYWJsZWQpKSkge1xcbitcXHRcXHRpbnQgcnFfY3B1ID0gY3B1X29mKHJxKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEEgcmVtb3RlIENQVSBjYW4gdXBkYXRlIHRoaXMgcnEgYmVmb3JlIHRoZSBvd25lciB2Q1BVXFxuK1xcdFxcdCAqIGhhcyByZS1lbnRlcmVkIHRoZSBndWVzdCBhbmQgcmVmcmVzaGVkIGl0cyBzdGVhbHRpbWVcXG4rXFx0XFx0ICogc3RhdGUuIERvIG5vdCBjaGFyZ2UgdGhhdCBlbGFwc2VkIHRpbWUgdG8gdGhlIGN1cnJlbnRcXG4rXFx0XFx0ICogdGFzayB1bnRpbCBzdGVhbHRpbWUgY2FuIGJlIHNhbXBsZWQgYWZ0ZXIgdGhlIHZDUFUgaXNcXG4rXFx0XFx0ICogbm8gbG9uZ2VyIHByZWVtcHRlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChycV9jcHUgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgdmNwdV9pc19wcmVlbXB0ZWQocnFfY3B1KSkge1xcbitcXHRcXHRcXHRycS1cXHUwMDNlZGVmZXJyZWRfY2xvY2tfdGFzayArPSBkZWx0YTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAocnEtXFx1MDAzZWRlZmVycmVkX2Nsb2NrX3Rhc2spIHtcXG4rXFx0XFx0XFx0ZGVsdGEgKz0gcnEtXFx1MDAzZWRlZmVycmVkX2Nsb2NrX3Rhc2s7XFxuK1xcdFxcdFxcdHJxLVxcdTAwM2VkZWZlcnJlZF9jbG9ja190YXNrID0gMDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuKyNlbmRpZlxcbitcXG4gI2lmZGVmIENPTkZJR19JUlFfVElNRV9BQ0NPVU5USU5HXFxuIFxcdGlmIChpcnF0aW1lX2VuYWJsZWQoKSkge1xcbiBcXHRcXHRpcnFfZGVsdGEgPSBpcnFfdGltZV9yZWFkKGNwdV9vZihycSkpIC0gcnEtXFx1MDAzZXByZXZfaXJxX3RpbWU7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oIGIva2VybmVsL3NjaGVkL3NjaGVkLmhcXG5pbmRleCBlNjU2YzcwNTliZjg2Li40ZmQwMDIyOGFmZWYwIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oXFxuKysrIGIva2VybmVsL3NjaGVkL3NjaGVkLmhcXG5AQCAtMTMyNSw2ICsxMzI1LDcgQEAgc3RydWN0IHJxIHtcXG4gI2VuZGlmXFxuICNpZmRlZiBDT05GSUdfUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HXFxuIFxcdHU2NFxcdFxcdFxcdHByZXZfc3RlYWxfdGltZV9ycTtcXG4rXFx0dTY0XFx0XFx0XFx0ZGVmZXJyZWRfY2xvY2tfdGFzaztcXG4gI2VuZGlmXFxuIFxcbiBcXHQvKiBjYWxjX2xvYWQgcmVsYXRlZCBmaWVsZHMgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDE6NTE6NTcuNjk5NTQ5OTE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTY1OTkwODg2NDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1wiLFxuICAgIFwiUEFSQVZJUlRfU1BJTkxPQ0tTXCIsXG4gICAgXCJQQVJBVklSVFwiLFxuICAgIFwiSFlQRVJWSVNPUl9HVUVTVFwiLFxuICAgIFwiVklSVFVBTElaQVRJT05cIixcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9zZXRfbXNyX2NvbW1vblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzdGVhbCB0aW1lIGFjY291bnRpbmcgbG9naWMgaW4gS1ZNIGFuZCB0aGUgc2NoZWR1bGVyLiBJdCBjaGFuZ2VzIHRoZSBvcmRlciBvZiB1c2VyIGFjY2VzcyBhbmQgbWVtb3J5IGJhcnJpZXJzIGluIGByZWNvcmRfc3RlYWxfdGltZWAgKEtWTSkgYW5kIGRlZmVycyBjbG9jayB0YXNrIHVwZGF0ZXMgaW4gYHVwZGF0ZV9ycV9jbG9ja190YXNrYCAoc2NoZWR1bGVyKSB3aGVuIHRoZSB2Q1BVIGlzIHByZWVtcHRlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBhbmQgS1ZNIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4gYGt2bV9zZXRfbXNyX2NvbW1vbmAgaGFuZGxlcyB0aGUgTVNSIHdyaXRlIHRoYXQgZW5hYmxlcyBzdGVhbCB0aW1lIGFjY291bnRpbmcgYW5kIHRyaWdnZXJzIHRoZSBLVk0gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg2Njg1ODY3ZDVlOWNmNzA2ZmM4ZDM0MWIwNmYxNzllNjNkZWQ3MWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAwMTo1MTo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggNjk0NjliYmRjODRhOC4uNTI1YTE0NDgxOTVlMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtMzc1MSw2ICszNzUxLDM1IEBAIHN0YXRpYyB2b2lkIHJlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdH1cbiBcbiBcdHN0ID0gKHN0cnVjdCBrdm1fc3RlYWxfdGltZSBfX3VzZXIgKilnaGMtXHUwMDNlaHZhO1xuK1xuK1x0aWYgKCF1c2VyX2FjY2Vzc19iZWdpbihzdCwgc2l6ZW9mKCpzdCkpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR1bnNhZmVfZ2V0X3VzZXIodmVyc2lvbiwgXHUwMDI2c3QtXHUwMDNldmVyc2lvbiwgb3V0KTtcbitcdGlmICh2ZXJzaW9uIFx1MDAyNiAxKVxuK1x0XHR2ZXJzaW9uICs9IDE7ICAvKiBmaXJzdCB0aW1lIHdyaXRlLCByYW5kb20ganVuayAqL1xuK1xuK1x0dmVyc2lvbiArPSAxO1xuK1x0dW5zYWZlX3B1dF91c2VyKHZlcnNpb24sIFx1MDAyNnN0LVx1MDAzZXZlcnNpb24sIG91dCk7XG4rXG4rXHQvKiBQYWlycyB3aXRoIHRoZSBndWVzdCBzaWRlIHZpcnRfcm1iKCkgaW4ga3ZtX3N0ZWFsX2Nsb2NrKCkuICovXG4rXHRzbXBfd21iKCk7XG4rXG4rXHR1bnNhZmVfZ2V0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuK1x0c3RlYWwgKz0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheSAtXG4rXHRcdHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsO1xuK1x0dmNwdS1cdTAwM2VhcmNoLnN0Lmxhc3Rfc3RlYWwgPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5O1xuK1x0dW5zYWZlX3B1dF91c2VyKHN0ZWFsLCBcdTAwMjZzdC1cdTAwM2VzdGVhbCwgb3V0KTtcbitcbitcdHZlcnNpb24gKz0gMTtcbitcdHVuc2FmZV9wdXRfdXNlcih2ZXJzaW9uLCBcdTAwMjZzdC1cdTAwM2V2ZXJzaW9uLCBvdXQpO1xuK1xuK1x0LypcbitcdCAqIFB1Ymxpc2ggdGhlIHN0ZWFsdGltZSBiZWZvcmUgbWFraW5nIHRoZSB2Q1BVIGxvb2sgcnVubmFibGUgdG9cbitcdCAqIHRoZSBndWVzdC5cbitcdCAqL1xuK1x0c21wX3dtYigpO1xuK1xuIFx0LypcbiBcdCAqIERvaW5nIGEgVExCIGZsdXNoIGhlcmUsIG9uIHRoZSBndWVzdCdzIGJlaGFsZiwgY2FuIGF2b2lkXG4gXHQgKiBleHBlbnNpdmUgSVBJcy5cbkBAIC0zNzU5LDkgKzM3ODgsNiBAQCBzdGF0aWMgdm9pZCByZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHU4IHN0X3ByZWVtcHRlZCA9IDA7XG4gXHRcdGludCBlcnIgPSAtRUZBVUxUO1xuIFxuLVx0XHRpZiAoIXVzZXJfYWNjZXNzX2JlZ2luKHN0LCBzaXplb2YoKnN0KSkpXG4tXHRcdFx0cmV0dXJuO1xuLVxuIFx0XHRhc20gdm9sYXRpbGUoXCIxOiB4Y2hnYiAlMCwgJTJcXG5cIlxuIFx0XHRcdCAgICAgXCJ4b3IgJTEsICUxXFxuXCJcbiBcdFx0XHQgICAgIFwiMjpcXG5cIlxuQEAgLTM3ODEsMzcgKzM4MDcsMTcgQEAgc3RhdGljIHZvaWQgcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRpZiAoc3RfcHJlZW1wdGVkIFx1MDAyNiBLVk1fVkNQVV9GTFVTSF9UTEIpXG4gXHRcdFx0a3ZtX3ZjcHVfZmx1c2hfdGxiX2d1ZXN0KHZjcHUpO1xuIFxuLVx0XHRpZiAoIXVzZXJfYWNjZXNzX2JlZ2luKHN0LCBzaXplb2YoKnN0KSkpXG4tXHRcdFx0Z290byBkaXJ0eTtcbiBcdH0gZWxzZSB7XG4tXHRcdGlmICghdXNlcl9hY2Nlc3NfYmVnaW4oc3QsIHNpemVvZigqc3QpKSlcbi1cdFx0XHRyZXR1cm47XG4tXG4gXHRcdHVuc2FmZV9wdXRfdXNlcigwLCBcdTAwMjZzdC1cdTAwM2VwcmVlbXB0ZWQsIG91dCk7XG4gXHRcdHZjcHUtXHUwMDNlYXJjaC5zdC5wcmVlbXB0ZWQgPSAwO1xuK1x0XHR1c2VyX2FjY2Vzc19lbmQoKTtcbiBcdH1cbiBcbi1cdHVuc2FmZV9nZXRfdXNlcih2ZXJzaW9uLCBcdTAwMjZzdC1cdTAwM2V2ZXJzaW9uLCBvdXQpO1xuLVx0aWYgKHZlcnNpb24gXHUwMDI2IDEpXG4tXHRcdHZlcnNpb24gKz0gMTsgIC8qIGZpcnN0IHRpbWUgd3JpdGUsIHJhbmRvbSBqdW5rICovXG4tXG4tXHR2ZXJzaW9uICs9IDE7XG4tXHR1bnNhZmVfcHV0X3VzZXIodmVyc2lvbiwgXHUwMDI2c3QtXHUwMDNldmVyc2lvbiwgb3V0KTtcbi1cbi1cdHNtcF93bWIoKTtcbi1cbi1cdHVuc2FmZV9nZXRfdXNlcihzdGVhbCwgXHUwMDI2c3QtXHUwMDNlc3RlYWwsIG91dCk7XG4tXHRzdGVhbCArPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5IC1cbi1cdFx0dmNwdS1cdTAwM2VhcmNoLnN0Lmxhc3Rfc3RlYWw7XG4tXHR2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4tXHR1bnNhZmVfcHV0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuLVxuLVx0dmVyc2lvbiArPSAxO1xuLVx0dW5zYWZlX3B1dF91c2VyKHZlcnNpb24sIFx1MDAyNnN0LVx1MDAzZXZlcnNpb24sIG91dCk7XG4rXHRtYXJrX3BhZ2VfZGlydHlfaW5fc2xvdCh2Y3B1LVx1MDAzZWt2bSwgZ2hjLVx1MDAzZW1lbXNsb3QsIGdwYV90b19nZm4oZ2hjLVx1MDAzZWdwYSkpO1xuK1x0cmV0dXJuO1xuIFxuICBvdXQ6XG4gXHR1c2VyX2FjY2Vzc19lbmQoKTtcbi0gZGlydHk6XG4gXHRtYXJrX3BhZ2VfZGlydHlfaW5fc2xvdCh2Y3B1LVx1MDAzZWt2bSwgZ2hjLVx1MDAzZW1lbXNsb3QsIGdwYV90b19nZm4oZ2hjLVx1MDAzZWdwYSkpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuY1xuaW5kZXggZjc4Mjc1MTkyMDM2Yi4uNTZhYTQzOTE4MmM3NSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmNcbisrKyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcbkBAIC04MTYsNiArODE2LDMwIEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9ycV9jbG9ja190YXNrKHN0cnVjdCBycSAqcnEsIHM2NCBkZWx0YSlcbiAgKi9cbiBcdHM2NCBfX21heWJlX3VudXNlZCBzdGVhbCA9IDAsIGlycV9kZWx0YSA9IDA7XG4gXG4rI2lmZGVmIENPTkZJR19QQVJBVklSVF9USU1FX0FDQ09VTlRJTkdcbitcdGlmIChzdGF0aWNfa2V5X2ZhbHNlKChcdTAwMjZwYXJhdmlydF9zdGVhbF9ycV9lbmFibGVkKSkpIHtcbitcdFx0aW50IHJxX2NwdSA9IGNwdV9vZihycSk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIEEgcmVtb3RlIENQVSBjYW4gdXBkYXRlIHRoaXMgcnEgYmVmb3JlIHRoZSBvd25lciB2Q1BVXG4rXHRcdCAqIGhhcyByZS1lbnRlcmVkIHRoZSBndWVzdCBhbmQgcmVmcmVzaGVkIGl0cyBzdGVhbHRpbWVcbitcdFx0ICogc3RhdGUuIERvIG5vdCBjaGFyZ2UgdGhhdCBlbGFwc2VkIHRpbWUgdG8gdGhlIGN1cnJlbnRcbitcdFx0ICogdGFzayB1bnRpbCBzdGVhbHRpbWUgY2FuIGJlIHNhbXBsZWQgYWZ0ZXIgdGhlIHZDUFUgaXNcbitcdFx0ICogbm8gbG9uZ2VyIHByZWVtcHRlZC5cbitcdFx0ICovXG4rXHRcdGlmIChycV9jcHUgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHZjcHVfaXNfcHJlZW1wdGVkKHJxX2NwdSkpIHtcbitcdFx0XHRycS1cdTAwM2VkZWZlcnJlZF9jbG9ja190YXNrICs9IGRlbHRhO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1xuK1x0XHRpZiAocnEtXHUwMDNlZGVmZXJyZWRfY2xvY2tfdGFzaykge1xuK1x0XHRcdGRlbHRhICs9IHJxLVx1MDAzZWRlZmVycmVkX2Nsb2NrX3Rhc2s7XG4rXHRcdFx0cnEtXHUwMDNlZGVmZXJyZWRfY2xvY2tfdGFzayA9IDA7XG4rXHRcdH1cbitcdH1cbisjZW5kaWZcbitcbiAjaWZkZWYgQ09ORklHX0lSUV9USU1FX0FDQ09VTlRJTkdcbiBcdGlmIChpcnF0aW1lX2VuYWJsZWQoKSkge1xuIFx0XHRpcnFfZGVsdGEgPSBpcnFfdGltZV9yZWFkKGNwdV9vZihycSkpIC0gcnEtXHUwMDNlcHJldl9pcnFfdGltZTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvc2NoZWQuaCBiL2tlcm5lbC9zY2hlZC9zY2hlZC5oXG5pbmRleCBlNjU2YzcwNTliZjg2Li40ZmQwMDIyOGFmZWYwIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL3NjaGVkLmhcbisrKyBiL2tlcm5lbC9zY2hlZC9zY2hlZC5oXG5AQCAtMTMyNSw2ICsxMzI1LDcgQEAgc3RydWN0IHJxIHtcbiAjZW5kaWZcbiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xuIFx0dTY0XHRcdFx0cHJldl9zdGVhbF90aW1lX3JxO1xuK1x0dTY0XHRcdFx0ZGVmZXJyZWRfY2xvY2tfdGFzaztcbiAjZW5kaWZcbiBcbiBcdC8qIGNhbGNfbG9hZCByZWxhdGVkIGZpZWxkcyAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDE6NTE6NTcuNjk5NTUxMjg1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ3NDU5NDg5NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGhpcyBQYXRjaDogSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLCBhbmQgaXQncyBtYWtpbmcgc29tZSBjaGFuZ2VzIHRvIGBhcmNoL3g4Ni9rdm0veDg2LmNgIGFuZCBga2VybmVsL3NjaGVkL2NvcmUuY2AuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBgcmVjb3JkX3N0ZWFsX3RpbWVgIGluIEtWTSBpcyBnZXR0aW5nIGEgY2FsbC1vcmRlciBzaHVmZmxlIHdpdGggYHVzZXJfYWNjZXNzX2JlZ2luYCBhbmQgdGhvc2UgdW5zYWZlIG1lbW9yeSBhY2Nlc3NlcywgYW5kIHRoZW4gdGhlIHNjaGVkdWxlciBjb2RlLCBgdXBkYXRlX3JxX2Nsb2NrX3Rhc2tgLCBpcyBnZXR0aW5nIHR3ZWFrZWQgdG8gaGFuZGxlIGRlZmVycmluZyBjbG9jayB1cGRhdGVzIHdoZW4gdGhlcmUncyBhIHJlbW90ZSBDUFUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcnVucXVldWUuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgKnllcyosIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBXZSdyZSB0YWxraW5nIGFib3V0IGNvcmUga2VybmVsIGxvZ2ljIGhlcmUg4oCTIHRoZSBzY2hlZHVsZXIgYW5kIEtWTSwgYm90aCBhcmUgcHJldHR5IGNlbnRyYWwgYW5kIGdldCBoYW1tZXJlZCBwcmV0dHkgaGFyZC4gVGhhdCdzIGEgaGlnaCBzaWduYWwtdG8tbm9pc2UgcmF0aW8uIFRoZXkncmUgYm90aCBoaWdobHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiBcblxuTm93LCBsZXQncyBuYWlsIGRvd24gd2hhdCBmdW5jdGlvbnMgdG8gdGFyZ2V0IGRpcmVjdGx5LiBGcm9tIHRoZSBwYXRjaCB0ZXh0LCBJIHdhbnQgdG8gZm9jdXMgb246XG5cbiogICBgcmVjb3JkX3N0ZWFsX3RpbWVgIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBJdCdzIGBzdGF0aWNgLCBidXQgSSdtIGJldHRpbmcgaXQncyBjYWxsZWQgZnJvbSBzb21ldGhpbmcgbGlrZSBga3ZtX2FyY2hfdmNwdV9sb2FkYCBvciBzb21ldGhpbmcgc2ltaWxhciwgaXQgd2lsbCBuZWVkIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cbiogICBgdXBkYXRlX3JxX2Nsb2NrX3Rhc2tgIGluIGBrZXJuZWwvc2NoZWQvY29yZS5jYCDigJMgYWxzbyBgc3RhdGljYCwgYnV0IGNhbGxlZCBmcm9tIHRoZSBgdXBkYXRlX3JxX2Nsb2NrYCBmdW5jdGlvbi5cblxuVGltZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNhbGxlcnMgb2YgYHJlY29yZF9zdGVhbF90aW1lYC4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBoaXR0aW5nIHRoYXQgY29kZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTAyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDE6NTk6MjUuMTU5MDQzNzAyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDEzNzU4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWNvcmRfc3RlYWxfdGltZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTM3MTg9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXJ2aWNlX2xvY2FsX3RsYl9mbHVzaF9yZXF1ZXN0cyk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTM3MTktXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjM3MjA6c3RhdGljIHZvaWQgcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ODYuYy0zNzIxLXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMTExOD1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMjA4LVxcdFxcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1NURUFMX1VQREFURSwgdmNwdSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjExMjA5OlxcdFxcdFxcdHJlY29yZF9zdGVhbF90aW1lKHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMTIxMC1cXHRcXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9QTVUsIHZjcHUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMTo1OToyNS42NzMxODY4NjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODYzMTA2NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipUcmFjaW5nIHRoZSBTb3VyY2Ugb2YgYHJlY29yZF9zdGVhbF90aW1lYCoqXG5cbk9rYXksIHNvIGByZWNvcmRfc3RlYWxfdGltZWAgaXMgYmVpbmcgY2FsbGVkIHNvbWV3aGVyZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwYXRoLiBUaGUgdGV4dCB0ZWxscyBtZSBpdCBvcmlnaW5hdGVzIGZyb20gYHZjcHVfZW50ZXJfZ3Vlc3RgLiBOb3csIGB2Y3B1X2VudGVyX2d1ZXN0YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIGZpbGUgaXQncyBkZWZpbmVkIGluLCBtYWtpbmcgdGhlIHNlYXJjaCBhIGJpdCBlYXNpZXIuIEkgYWxzbyBzZWUgdGhhdCBpdCBpcyBjYWxsZWQgZnJvbSBgdmNwdV9ydW5gLiBBaCBoYSwgYHZjcHVfcnVuYCBvciBtYXliZSBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBUaGF0IG5hcnJvd3MgaXQgZG93biBjb25zaWRlcmFibHkuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgY2FsbCBzdGFja3Mgb2YgZWl0aGVyIG9mIHRob3NlIHR3byBmdW5jdGlvbnMuIFRpbWUgdG8gbG9vayBmb3IgdGhlIG5leHQgY2x1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ3MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAxOjU5OjI5LjUzNjI5NjcyNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzUwMjU1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2Y3B1X2VudGVyX2d1ZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9OTA2PXZvaWQga3ZtX3JlcXVldWVfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IG5yLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTkxMi1cXHQgKiBpbmplY3Rpb24gd2FzIGJsb2NrZWQgYnkgbmVzdGVkX3J1bl9wZW5kaW5nLiAgSW4gdGhhdCBjYXNlLCBob3dldmVyLFxcbmFyY2gveDg2L2t2bS94ODYuYzo5MTM6XFx0ICogdmNwdV9lbnRlcl9ndWVzdCgpIHJlcXVlc3RzIGFuIGltbWVkaWF0ZSBleGl0LCBhbmQgdGhlIGd1ZXN0XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTkxNC1cXHQgKiBzaG91bGRuJ3QgcHJvY2VlZCBmYXIgZW5vdWdoIHRvIG5lZWQgcmVpbmplY3Rpb24uXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MzY5OD1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfZmx1c2hfdGxiX2N1cnJlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTM3MDUtICogU2VydmljZSBcXFwibG9jYWxcXFwiIFRMQiBmbHVzaCByZXF1ZXN0cywgd2hpY2ggYXJlIHNwZWNpZmljIHRvIHRoZSBjdXJyZW50IE1NVVxcbmFyY2gveDg2L2t2bS94ODYuYzozNzA2OiAqIGNvbnRleHQuICBJbiBhZGRpdGlvbiB0byB0aGUgZ2VuZXJpYyBldmVudCBoYW5kbGluZyBpbiB2Y3B1X2VudGVyX2d1ZXN0KCksXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTM3MDctICogVExCIGZsdXNoZXMgdGhhdCBhcmUgdGFyZ2V0ZWQgYXQgYW4gTU1VIGNvbnRleHQgYWxzbyBuZWVkIHRvIGJlIHNlcnZpY2VkXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA5NjA9dm9pZCBfX2t2bV9zZXRfb3JfY2xlYXJfYXBpY3ZfaW5oaWJpdChzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA5ODAtXFx0XFx0ICogS2ljayBhbGwgdkNQVXMgYmVmb3JlIHNldHRpbmcgYXBpY3ZfaW5oaWJpdF9yZWFzb25zIHRvIGF2b2lkXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwOTgxOlxcdFxcdCAqIGZhbHNlIHBvc2l0aXZlcyBpbiB0aGUgc2FuaXR5IGNoZWNrIFdBUk4gaW4gdmNwdV9lbnRlcl9ndWVzdCgpLlxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDk4Mi1cXHRcXHQgKiBUaGlzIHRhc2sgd2lsbCB3YWl0IGZvciBhbGwgdkNQVXMgdG8gYWNrIHRoZSBraWNrIElSUSBiZWZvcmVcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDk4NC1cXHRcXHQgKiBibG9jayBvbiBhY3F1aXJpbmcgYXBpY3ZfdXBkYXRlX2xvY2sgc28gdGhhdCB2Q1BVcyBjYW4ndFxcbmFyY2gveDg2L2t2bS94ODYuYzoxMDk4NTpcXHRcXHQgKiByZWRvIHZjcHVfZW50ZXJfZ3Vlc3QoKSB3aXRob3V0IHNlZWluZyB0aGUgbmV3IGluaGliaXQgc3RhdGUuXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwOTg2LVxcdFxcdCAqXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTExMDQ9c3RhdGljIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX2FwaWNfYWNjZXNzX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMTE3LSAqL1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMTExODpzdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTExOS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTE2OTg9c3RhdGljIGludCB2Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE3MTItXFx0XFx0aWYgKGt2bV92Y3B1X3J1bm5pbmcodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTE3MTM6XFx0XFx0XFx0ciA9IHZjcHVfZW50ZXJfZ3Vlc3QodmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNzE0LVxcdFxcdH0gZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAxOjU5OjI5LjU4MzgxMTg5MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzgwODIwOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipNeSBMaW5lIG9mIFJlYXNvbmluZyB3aXRoIHZjcHVfcnVuKipcblxuQWxyaWdodCwgc28gdGhlIGNhbGwgZmxvdyBoZXJlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBpdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSBzZWUgYHZjcHVfcnVuYCBhcyB0aGUgY29yZSBleGVjdXRpb24gZW50cnkgcG9pbnQgZm9yIGEgdmlydHVhbCBDUFUuIFRoZSBpbXBvcnRhbnQgcGFydCBpcyAqaG93KiB3ZSdyZSBnZXR0aW5nIHRvIHRoYXQgZnVuY3Rpb24gY2FsbC5cblxuSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhhdCBgdmNwdV9ydW5gIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAuIFRoYXQgbmFtaW5nIGNvbnZlbnRpb24gaXMgYSBiaWcgaGludC4gSSBpbW1lZGlhdGVseSBrbm93IHRoZSBnZW5lcmFsIHByb2Nlc3MgZmxvdyBhbmQgd2hlcmUgbXkgYXR0ZW50aW9uIG5lZWRzIHRvIGZvY3VzIGlmIEkgZW5jb3VudGVyIGlzc3Vlcywgb3Igd2FudCB0byBsb29rIGludG8gcGVyZm9ybWFuY2UgYXNwZWN0cy4gVGhpcyBgaW9jdGxfcnVuYCBzdWdnZXN0cyB0aGF0IHRoZSBLVk0gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgYW5kIGluaXRpYXRpbmcgdGhlIHZDUFUncyBleGVjdXRpb24gYmFzZWQgb24gYSBzcGVjaWZpYyB1c2VyLXNwYWNlIHJlcXVlc3Qgb3IgY29tbWFuZCB0aGF0IGhhcyBiZWVuIHBhc3NlZCB0byBpdCwgbGlrZWx5IHRocm91Z2ggYSBzeXN0ZW0gY2FsbCBsaWtlIGBpb2N0bGAuXG5cblNvLCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGlzIGFsbW9zdCBjZXJ0YWlubHkgaGFuZGxpbmcgc29tZSBpbml0aWFsIHNldHVwLCBwb3RlbnRpYWxseSBjaGVja2luZyB0aGUgcmVxdWVzdGVkIHJ1biBwYXJhbWV0ZXJzLCBtYXliZSBzZXR0aW5nIHVwIHJlZ2lzdGVycyBvciBvdGhlciBhcmNoaXRlY3R1cmFsIHN0YXRlLCBhbmQgdGhlbiBjYWxsaW5nIGB2Y3B1X3J1bmAgdG8gYWN0dWFsbHkgZ2V0IHRoZSB2Q1BVIGV4ZWN1dGluZy4gSSBpbW1lZGlhdGVseSBrbm93IHRoYXQgYW55IGxhdGVuY3kgaW50cm9kdWNlZCBieSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHJvdXRpbmVzIGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAgd2lsbCBkaXJlY3RseSBpbXBhY3QgdGhlIHNwZWVkIHdpdGggd2hpY2ggdGhlIHZDUFUgd2lsbCBhY3R1YWxseSBiZWdpbiBwcm9jZXNzaW5nIGluc3RydWN0aW9ucywgc28gYW55IHByb2ZpbGluZyBvciBhbmFseXNpcyBvZiBleGVjdXRpb24gbGF0ZW5jaWVzIHdpbGwgbmVlZCB0byBmYWN0b3IgaW4gdGhpcyBjcnVjaWFsIGluaXRpYWwgc2V0dXAgcGhhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MzgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMTo1OTozNC45NjE5MDA2NTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxNDE4NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmNwdV9ydW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz0yNDI4PXN0YXRpYyB2b2lkIGt2bV93cml0ZV9zeXN0ZW1fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IHN5c3RlbV90aW1lLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTI0MzMtXFx0aWYgKHZjcHUtXFx1MDAzZXZjcHVfaWQgPT0gMCBcXHUwMDI2XFx1MDAyNiAhaG9zdF9pbml0aWF0ZWQpIHtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MjQzNDpcXHRcXHRpZiAoa2EtXFx1MDAzZWJvb3RfdmNwdV9ydW5zX29sZF9rdm1jbG9jayAhPSBvbGRfbXNyKVxcbmFyY2gveDg2L2t2bS94ODYuYy0yNDM1LVxcdFxcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9NQVNURVJDTE9DS19VUERBVEUsIHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0yNDM2LVxcbmFyY2gveDg2L2t2bS94ODYuYzoyNDM3OlxcdFxcdGthLVxcdTAwM2Vib290X3ZjcHVfcnVuc19vbGRfa3ZtY2xvY2sgPSBvbGRfbXNyO1xcbmFyY2gveDg2L2t2bS94ODYuYy0yNDM4LVxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0zMDk2PXN0YXRpYyB2b2lkIHB2Y2xvY2tfdXBkYXRlX3ZtX2d0b2RfY29weShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzExNi1cXHRcXHRcXHRcXHRcXHUwMDI2XFx1MDAyNiAha2EtXFx1MDAzZWJhY2t3YXJkc190c2Nfb2JzZXJ2ZWRcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MzExNzpcXHRcXHRcXHRcXHRcXHUwMDI2XFx1MDAyNiAha2EtXFx1MDAzZWJvb3RfdmNwdV9ydW5zX29sZF9rdm1jbG9jaztcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzExOC1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz01MjI5PXN0YXRpYyB2b2lkIGt2bV9zdGVhbF90aW1lX3NldF9wcmVlbXB0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyMzktXFx0ICogYW4gaW5zdHJ1Y3Rpb24gYm91bmRhcnkgYW5kIHdpbGwgbm90IHRyaWdnZXIgZ3Vlc3QgZW11bGF0aW9uIG9mIGFueVxcbmFyY2gveDg2L2t2bS94ODYuYzo1MjQwOlxcdCAqIGtpbmQgKHNlZSB2Y3B1X3J1bikuICBWZW5kb3Igc3BlY2lmaWMgY29kZSBjb250cm9scyAoY29uc2VydmF0aXZlbHkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyNDEtXFx0ICogd2hlbiB0aGlzIGlzIHRydWUsIGZvciBleGFtcGxlIGFsbG93aW5nIHRoZSB2Q1BVIHRvIGJlIG1hcmtlZFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTExMTA0PXN0YXRpYyB2b2lkIGt2bV92Y3B1X3JlbG9hZF9hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTExMy0gKiBDYWxsZWQgd2l0aGluIGt2bS1cXHUwMDNlc3JjdSByZWFkIHNpZGUuXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjExMTE0OiAqIFJldHVybnMgMSB0byBsZXQgdmNwdV9ydW4oKSBjb250aW51ZSB0aGUgZ3Vlc3QgZXhlY3V0aW9uIGxvb3Agd2l0aG91dFxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTExNS0gKiBleGl0aW5nIHRvIHRoZSB1c2Vyc3BhY2UuICBPdGhlcndpc2UsIHRoZSB2YWx1ZSB3aWxsIGJlIHJldHVybmVkIHRvIHRoZVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTExMTE4PXN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE0MzEtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjExNDMyOlxcdFxcdGV4aXRfZmFzdHBhdGggPSBrdm1feDg2X2NhbGwodmNwdV9ydW4pKHZjcHUsIHJ1bl9mbGFncyk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNDMzLVxcdFxcdGlmIChsaWtlbHkoZXhpdF9mYXN0cGF0aCAhPSBFWElUX0ZBU1RQQVRIX1JFRU5URVJfR1VFU1QpKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNTY4LVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMTU2OTpzdGF0aWMgYm9vbCBrdm1fdmNwdV9ydW5uaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE1NzAte1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTExNjIxPUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fdmNwdV9oYXNfZXZlbnRzKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE2MjItXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjExNjIzOmludCBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE2MjQte1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMTYyNTpcXHRyZXR1cm4ga3ZtX3ZjcHVfcnVubmluZyh2Y3B1KSB8fCB2Y3B1LVxcdTAwM2VhcmNoLnB2LnB2X3VuaGFsdGVkIHx8XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNjI2LVxcdCAgICAgICBrdm1fdmNwdV9oYXNfZXZlbnRzKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTExNjMwPXN0YXRpYyBpbmxpbmUgaW50IHZjcHVfYmxvY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNjMzLVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMTYzNDpcXHRpZiAoIWt2bV9hcmNoX3ZjcHVfcnVubmFibGUodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE2MzUtXFx0XFx0LypcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTY2MC1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTE2NjE6XFx0XFx0aWYgKCFrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHZjcHUpKVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTY2Mi1cXHRcXHRcXHRyZXR1cm4gMTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTY5Ny0vKiBDYWxsZWQgd2l0aGluIGt2bS1cXHUwMDNlc3JjdSByZWFkIHNpZGUuICAqL1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMTY5ODpzdGF0aWMgaW50IHZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE2OTkte1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNzExLVxcdFxcdHZjcHUtXFx1MDAzZWFyY2guYXRfaW5zdHJ1Y3Rpb25fYm91bmRhcnkgPSBmYWxzZTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTE3MTI6XFx0XFx0aWYgKGt2bV92Y3B1X3J1bm5pbmcodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE3MTMtXFx0XFx0XFx0ciA9IHZjcHVfZW50ZXJfZ3Vlc3QodmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTE3ODY9ZmFzdHBhdGhfdCBoYW5kbGVfZmFzdHBhdGhfaGx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTc5My1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTE3OTQ6XFx0aWYgKGt2bV92Y3B1X3J1bm5pbmcodmNwdSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNzk1LVxcdFxcdHJldHVybiBFWElUX0ZBU1RQQVRIX1JFRU5URVJfR1VFU1Q7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTE5MTI9c3RhdGljIHZvaWQga3ZtX2xvYWRfZ3Vlc3RfZnB1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTkyMS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTE5MjI6LyogV2hlbiB2Y3B1X3J1biBlbmRzLCByZXN0b3JlIHVzZXIgc3BhY2UgRlBVIGNvbnRleHQuICovXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExOTIzLXN0YXRpYyB2b2lkIGt2bV9wdXRfZ3Vlc3RfZnB1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMTk2Mj1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEyMDY3LVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMjA2ODpcXHRyID0gdmNwdV9ydW4odmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEyMDY5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMTo1OTozNS4wMTAwNDY5MzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjQwNzMwNzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtWTSBTdGVhbCBUaW1lIFJlcG9ydGluZyoqXG5cbk9rYXksIHNvIEkndmUgdHJhY2VkIHRoZSBLVk0gZXhlY3V0aW9uIHBhdGggcmVsYXRlZCB0byBzdGVhbCB0aW1lLiBTdGFydGluZyB3aXRoIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIHRoYXQncyB0aGUgZW50cnkgcG9pbnQsIHRoZSBmaXJzdCBwbGFjZSBJIG5lZWQgdG8gbG9vay4gSXQgbG9va3MgbGlrZSB0aGUgcmVsZXZhbnQgS1ZNIGNoYW5nZSBJIG5lZWQgdG8gYW5hbHl6ZSBpcyBoYXBwZW5pbmcgd2l0aGluIGByZWNvcmRfc3RlYWxfdGltZWAuIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCwgYXMgSSBzZWUgaXQsIHRocm91Z2ggYSBjaGFpbiBvZiBjYWxscy4gSXQgZ29lcyBmcm9tIGB2Y3B1X2VudGVyX2d1ZXN0YCwgd2hpY2ggaXRzZWxmIGlzIGNhbGxlZCBieSBgdmNwdV9ydW5gLCBhbmQgZmluYWxseSB0aGF0IG9yaWdpbmF0ZXMgZnJvbSBvdXIgZW50cnkgcG9pbnQsIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAuIFRoYXQncyBhIHNvbGlkLCBpZGVudGlmaWFibGUsIGFuZCB0ZXN0YWJsZSBleGVjdXRpb24gZmxvdy4gSSBjYW4gZGVmaW5pdGVseSBjb25zdHJ1Y3QgYSB0ZXN0IGNhc2UgdG8gaXNvbGF0ZSBhbmQgdmVyaWZ5IHRoaXMuXG5cbkZ1cnRoZXJtb3JlLCBJIGFsc28gbm90ZWQgYSByZWxldmFudCBtb2RpZmljYXRpb24gaW4gYGtlcm5lbC9zY2hlZC9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AgZnVuY3Rpb24uIEkgd2lsbCBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGRlbHZlIGRlZXBlciBpbnRvIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBLVk0gYW5kIHRoZSBzY2hlZHVsZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDE6NTk6NDAuMjUwNzgwMDU5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTAyMTMxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1cGRhdGVfcnFfY2xvY2tfdGFza1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvc2NoZWQvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9zY2hlZC9jb3JlLmM9ODA4PXN0cnVjdCBzdGF0aWNfa2V5IHBhcmF2aXJ0X3N0ZWFsX3JxX2VuYWJsZWQ7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTgxMC1cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjgxMTpzdGF0aWMgdm9pZCB1cGRhdGVfcnFfY2xvY2tfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzNjQgZGVsdGEpXFxua2VybmVsL3NjaGVkL2NvcmUuYy04MTIte1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz04OTQ9dm9pZCB1cGRhdGVfcnFfY2xvY2soc3RydWN0IHJxICpycSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTE1LVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6OTE2OlxcdHVwZGF0ZV9ycV9jbG9ja190YXNrKHJxLCBkZWx0YSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy05MTctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMTo1OTo0MC4yOTk4MDY0NjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM1MzM1NzY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNjaGVkdWxlcidzIENsb2NrIFVwZGF0ZSBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBgdXBkYXRlX3JxX2Nsb2NrYCBzZWVtcyB0byBiZSBhIHJlYWwgd29ya2hvcnNlLCBnZXR0aW5nIGNhbGxlZCBmcm9tIGFsbCBjb3JuZXJzIG9mIHRoZSBzY2hlZHVsZXIuIEludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNsb2NrIHVwZGF0ZSBtZWNoYW5pc20gd29ya3MgYXQgYSBncmFudWxhciBsZXZlbC4gSSBub3RpY2UgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiDigJMgYSBgI2lmZGVmIENPTkZJR19QQVJBVklSVF9USU1FX0FDQ09VTlRJTkdgIHByb3RlY3RpbmcgYSBjaGFuZ2UgaW4gYHVwZGF0ZV9ycV9jbG9ja190YXNrYC4gVGhhdCdzIGEga2V5IGNsdWUuIE15IGV4cGVydCBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGlzIHJlbGF0ZXMgdG8gdmlydHVhbGl6YXRpb24gYW5kIGhvdyB0aW1lIGlzIGhhbmRsZWQgaW4gdGhvc2UgZW52aXJvbm1lbnRzLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5NeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIHZlcmlmeSB0aGUgZGVmaW5pdGlvbiBhbmQgcHVycG9zZSBvZiBgQ09ORklHX1BBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AuIEkgd2FudCB0byBzZWUgZXhhY3RseSAqd2hhdCogdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBlbmFibGVzIG9yIGRpc2FibGVzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBjcnVjaWFsIGNvbnRleHQ6IElzIGl0IGFib3V0IGd1ZXN0IHRpbWUgYWNjb3VudGluZz8gUHJlY2lzZSB0aW1lIHN5bmNocm9uaXphdGlvbj8gT3Igc29tZSBvdGhlciBhc3BlY3Qgb2YgdmlydHVhbGl6ZWQgdGltaW5nPyBLbm93aW5nIHRoZSB1bmRlcmx5aW5nIHB1cnBvc2Ugb2YgdGhlIGNvbmZpZyBvcHRpb24gaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWMgY29kZSBibG9jaydzIGJlaGF2aW9yIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGUgdGltaW5nIHVwZGF0ZSBjaGFuZ2VzLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MjcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMTo1OTo0NC42NTMxNjYxOTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzAwMzI0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vS2NvbmZpZz0xMzM1PWNvbmZpZyBQQVJBVklSVFxcbi0tXFxuYXJjaC9hcm0vS2NvbmZpZy0xMzQyLVxcbmFyY2gvYXJtL0tjb25maWc6MTM0Mzpjb25maWcgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HXFxuYXJjaC9hcm0vS2NvbmZpZy0xMzQ0LVxcdGJvb2wgXFxcIlBhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1xcXCJcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZz0xNjYzPWNvbmZpZyBQQVJBVklSVFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTE2NzAtXFxuYXJjaC9hcm02NC9LY29uZmlnOjE2NzE6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNjcyLVxcdGJvb2wgXFxcIlBhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1xcXCJcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9NzQ2PWNvbmZpZyBQQVJBVklSVFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy03NTUtXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo3NTY6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNzU3LVxcdGJvb2wgXFxcIlBhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnPTMzPWNvbmZpZyBQQVJBVklSVF9TUElOTE9DS1NcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnLTM1LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnOjM2OmNvbmZpZyBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZy0zNy1cXHRzZWxlY3QgUEFSQVZJUlRcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZz0xMTQ4PWNvbmZpZyBQQVJBVklSVFxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTExNTYtXFxuYXJjaC9yaXNjdi9LY29uZmlnOjExNTc6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMTU4LVxcdGJvb2wgXFxcIlBhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1xcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9ODUxPWNvbmZpZyBQVkhcXG4tLVxcbmFyY2gveDg2L0tjb25maWctODU2LVxcbmFyY2gveDg2L0tjb25maWc6ODU3OmNvbmZpZyBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdcXG5hcmNoL3g4Ni9LY29uZmlnLTg1OC1cXHRib29sIFxcXCJQYXJhdmlydHVhbCBzdGVhbCB0aW1lIGFjY291bnRpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAxOjU5OjQ2LjQ4MzIxMTk4MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ1MjI2MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gTXVzaW5ncyoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiBgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HYCBoZXJlLiBUaGF0IGxvb2tzIGxpa2UgdGhlIGtleSBjb25maWcgb3B0aW9uIHdlIG5lZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgdGhhdCBnZXRzIGluY2x1ZGVkIGluIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gSXQganVzdCBtYWtlcyBzZW5zZSwgcmlnaHQ/IEJ1dCBoYW5nIG9uIGEgbWludXRlLi4uIHdhc24ndCB0aGVyZSBzb21ldGhpbmcgYWJvdXQgZGVwZW5kZW5jaWVzIGZvciB0aGF0IG9uIHg4Nj8gSSB2YWd1ZWx5IHJlbWVtYmVyIGBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdgIHJlbHlpbmcgb24gYFBBUkFWSVJUYCBpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gSSdkIGJldHRlciBkb3VibGUgY2hlY2sgdGhhdCBxdWlja2x5LiBUaGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoYXQgaXMgdGhlIGBhcmNoL3g4Ni9LY29uZmlnYCBmaWxlLiBMZXQgbWUgcHVsbCB0aGF0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDczLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDE6NTk6NTEuMDI4NDQxMDg5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg1MDpcXHRcXG4gODUxOlxcdGNvbmZpZyBQVkhcXG4gODUyOlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHJ1bm5pbmcgUFZIIGd1ZXN0c1xcXCJcXG4gODUzOlxcdFxcdGhlbHBcXG4gODU0OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgUFZIIGVudHJ5IHBvaW50IGZvciBndWVzdCB2aXJ0dWFsIG1hY2hpbmVzXFxuIDg1NTpcXHRcXHQgIGFzIHNwZWNpZmllZCBpbiB0aGUgeDg2L0hWTSBkaXJlY3QgYm9vdCBBQkkuXFxuIDg1NjpcXHRcXG4gODU3OlxcdGNvbmZpZyBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdcXG4gODU4OlxcdFxcdGJvb2wgXFxcIlBhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1xcXCJcXG4gODU5OlxcdFxcdGRlcGVuZHMgb24gUEFSQVZJUlRcXG4gODYwOlxcdFxcdGhlbHBcXG4gODYxOlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGVuYWJsZSBmaW5lIGdyYW51bGFyaXR5IHRhc2sgc3RlYWwgdGltZVxcbiA4NjI6XFx0XFx0ICBhY2NvdW50aW5nLiBUaW1lIHNwZW50IGV4ZWN1dGluZyBvdGhlciB0YXNrcyBpbiBwYXJhbGxlbCB3aXRoXFxuIDg2MzpcXHRcXHQgIHRoZSBjdXJyZW50IHZDUFUgaXMgZGlzY291bnRlZCBmcm9tIHRoZSB2Q1BVIHBvd2VyLiBUbyBhY2NvdW50IGZvclxcbiA4NjQ6XFx0XFx0ICB0aGF0LCB0aGVyZSBjYW4gYmUgYSBzbWFsbCBwZXJmb3JtYW5jZSBpbXBhY3QuXFxuIDg2NTpcXHRcXG4gODY2OlxcdFxcdCAgSWYgaW4gZG91YnQsIHNheSBOIGhlcmUuXFxuIDg2NzpcXHRcXG4gODY4OlxcdGNvbmZpZyBQQVJBVklSVF9DTE9DS1xcbiA4Njk6XFx0XFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMTo1OTo1MS4wMjg2Njk2NjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxMjYxNzQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbm5lciBtb25vbG9ndWU6XG5cbioqRGVwZW5kZW5jeSBDaGVjazogYFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZGVwZW5kZW5jeSBjaGFpbiBpcyBzb21ldGhpbmcgSSdtIGludGltYXRlbHkgZmFtaWxpYXIgd2l0aC4gVGhlIHRleHQgcG9pbnRzIG91dCBzb21ldGhpbmcgSSd2ZSBzZWVuIGNvdW50bGVzcyB0aW1lcyBpbiB0aGVzZSBjb25maWd1cmF0aW9uIHN5c3RlbXM6IGBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdgIHJlbGllcyBvbiBgUEFSQVZJUlRgLiBObyBzdXJwcmlzZSB0aGVyZTsgdGhhdCdzIHRoZSBvYnZpb3VzIHJlbGF0aW9uc2hpcC4gVG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgYXJjaC94ODYvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IG51YW5jZXMgaW4gaG93IGBQQVJBVklSVGAgaXMgZGVmaW5lZCBvciB3aGF0IGl0ICpleGFjdGx5KiBlbmFibGVzIHRoYXQgYFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR2AgdXNlcy4gSXQncyBhIGZ1bmRhbWVudGFsIGxpbmsgSSB3YW50IHRvIHNvbGlkaWZ5IGluIG15IG1pbmQgYmVmb3JlIEkgc3RhcnQgbWFraW5nIGNoYW5nZXMgb3IgZGlhZ25vc2luZyBpc3N1ZXMgdGhhdCBtYXkgYmUgcmVsYXRlZCB0byB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBLbm93aW5nIHRoZSBwcmVjaXNlIGludGVyZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGNsZWFuIGFuZCBlZmZlY3RpdmUgd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMTAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAxOjU5OjU1LjM0MTI4OTM5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDI1NDU1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEFSQVZJUlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTc5Nj1pZiBIWVBFUlZJU09SX0dVRVNUXFxuYXJjaC94ODYvS2NvbmZpZy03OTctXFxuYXJjaC94ODYvS2NvbmZpZzo3OTg6Y29uZmlnIFBBUkFWSVJUXFxuYXJjaC94ODYvS2NvbmZpZy03OTktXFx0Ym9vbCBcXFwiRW5hYmxlIHBhcmF2aXJ0dWFsaXphdGlvbiBjb2RlXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy04MDctXFxuYXJjaC94ODYvS2NvbmZpZzo4MDg6Y29uZmlnIFBBUkFWSVJUX1hYTFxcbmFyY2gveDg2L0tjb25maWctODA5LVxcdGJvb2xcXG4tLVxcbmFyY2gveDg2L0tjb25maWctODEyLVxcbmFyY2gveDg2L0tjb25maWc6ODEzOmNvbmZpZyBQQVJBVklSVF9TUElOTE9DS1NcXG5hcmNoL3g4Ni9LY29uZmlnLTgxNC1cXHRib29sIFxcXCJQYXJhdmlydHVhbGl6YXRpb24gbGF5ZXIgZm9yIHNwaW5sb2Nrc1xcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9ODUxPWNvbmZpZyBQVkhcXG4tLVxcbmFyY2gveDg2L0tjb25maWctODU2LVxcbmFyY2gveDg2L0tjb25maWc6ODU3OmNvbmZpZyBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdcXG5hcmNoL3g4Ni9LY29uZmlnLTg1OC1cXHRib29sIFxcXCJQYXJhdmlydHVhbCBzdGVhbCB0aW1lIGFjY291bnRpbmdcXFwiXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTg2Ny1cXG5hcmNoL3g4Ni9LY29uZmlnOjg2ODpjb25maWcgUEFSQVZJUlRfQ0xPQ0tcXG5hcmNoL3g4Ni9LY29uZmlnLTg2OS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAxOjU5OjU1LjM5MTU0OTczNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTE5NTI4NDE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmN5IG9mIFBBUkFWSVJUIG9uIEhZUEVSVklTT1JfR1VFU1QqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgUEFSQVZJUlRgIGFnYWluLiBJdCBzdHJpa2VzIG1lIHRoYXQgdGhlcmUgbWlnaHQgYmUgYW4gaW5oZXJlbnQgZGVwZW5kZW5jeSBvbiBgSFlQRVJWSVNPUl9HVUVTVGAgaGVyZSwgZG9lc24ndCBpdD8gU2VlbXMgbG9naWNhbCwgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtYWtpbmcgYW55IGFzc3VtcHRpb25zLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBjb2RlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gdG8gdmVyaWZ5IHRoYXQuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIHBhcmF2aXJ0dWFsaXphdGlvbiwgYnkgaXRzIHZlcnkgbmF0dXJlLCByZWxpZXMgb24gdGhlIHByZXNlbmNlIG9yIGNvbmZpZ3VyYXRpb24gb2YgYSBoeXBlcnZpc29yIGd1ZXN0IGVudmlyb25tZW50LiBQZXJoYXBzIHRoZXJlJ3MgYW4gY29uZGl0aW9uYWwgY29tcGlsZSB0aW1lIGRlcGVuZGVuY3kgSSBuZWVkIHRvIGNoZWNrLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoYXZlIHRvIHNheS4gTGV0J3MgZGl2ZSBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MzAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMjowMDowNi41ODY4MzY4OTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzkwOlxcdFxcdCAgdmlzb3JzLiBUaGlzIG9wdGlvbiBlbmFibGVzIGJhc2ljIGh5cGVydmlzb3IgZGV0ZWN0aW9uIGFuZCBwbGF0Zm9ybVxcbiA3OTE6XFx0XFx0ICBzZXR1cC5cXG4gNzkyOlxcdFxcbiA3OTM6XFx0XFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kXFxuIDc5NDpcXHRcXHQgIGRpc2FibGVkLCBhbmQgTGludXggZ3Vlc3Qgc3VwcG9ydCB3b24ndCBiZSBidWlsdCBpbi5cXG4gNzk1OlxcdFxcbiA3OTY6XFx0aWYgSFlQRVJWSVNPUl9HVUVTVFxcbiA3OTc6XFx0XFxuIDc5ODpcXHRjb25maWcgUEFSQVZJUlRcXG4gNzk5OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBwYXJhdmlydHVhbGl6YXRpb24gY29kZVxcXCJcXG4gODAwOlxcdFxcdGRlcGVuZHMgb24gSEFWRV9TVEFUSUNfQ0FMTFxcbiA4MDE6XFx0XFx0c2VsZWN0IEhBVkVfUFZfU1RFQUxfQ0xPQ0tfR0VOXFxuIDgwMjpcXHRcXHRoZWxwXFxuIDgwMzpcXHRcXHQgIFRoaXMgY2hhbmdlcyB0aGUga2VybmVsIHNvIGl0IGNhbiBtb2RpZnkgaXRzZWxmIHdoZW4gaXQgaXMgcnVuXFxuIDgwNDpcXHRcXHQgIHVuZGVyIGEgaHlwZXJ2aXNvciwgcG90ZW50aWFsbHkgaW1wcm92aW5nIHBlcmZvcm1hbmNlIHNpZ25pZmljYW50bHlcXG4gODA1OlxcdFxcdCAgb3ZlciBmdWxsIHZpcnR1YWxpemF0aW9uLiAgSG93ZXZlciwgd2hlbiBydW4gd2l0aG91dCBhIGh5cGVydmlzb3JcXG4gODA2OlxcdFxcdCAgdGhlIGtlcm5lbCBpcyB0aGVvcmV0aWNhbGx5IHNsb3dlciBhbmQgc2xpZ2h0bHkgbGFyZ2VyLlxcbiA4MDc6XFx0XFxuIDgwODpcXHRjb25maWcgUEFSQVZJUlRfWFhMXFxuIDgwOTpcXHRcXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAwOjA2LjU4NzAzMDAxOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjExNzc1NjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgS1ZNIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2UgYEhZUEVSVklTT1JfR1VFU1RgIGlzIGEgbXVzdC1oYXZlIGZvciB0aGUgaHlwZXJ2aXNvciBndWVzdCBmdW5jdGlvbmFsaXR5LiBMZXQncyBtYWtlIHN1cmUgdGhhdCBgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HYCwgYFBBUkFWSVJUYCwgYW5kIGBIWVBFUlZJU09SX0dVRVNUYCBhcmUgYWxsIGFkZGVkIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gV2UgYWxzbyBkZWZpbml0ZWx5IG5lZWQgdG8gaW5jbHVkZSBgS1ZNYCB0byBoYW5kbGUgdGhlIEtWTS1zcGVjaWZpYyBwYXJ0cywgb2J2aW91c2x5LlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgc3ltYm9scyB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBjb25uZWN0ZWQgYW5kIHdvcmtpbmcgYXMgZXhwZWN0ZWQuIExldCdzIHNlZS4uLiBJIHNob3VsZCBjaGVjayBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLCBvciBtYXliZSBgdmNwdV9ydW5gLCBvciBldmVuIGByZWNvcmRfc3RlYWxfdGltZWAsIGZvciBwb3RlbnRpYWwgYEZvY3VzU3ltYm9sc2AuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC4gUmlnaHQsIGByZWNvcmRfc3RlYWxfdGltZWAgYXBwZWFycyB0byBiZSBzdGF0aWMuIEhtbSwgYW5kIGB2Y3B1X2VudGVyX2d1ZXN0YCBpcyBhbHNvIHN0YXRpYy4gYHZjcHVfcnVuYCBhcyB3ZWxsLiBPa2F5LCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGlzICpub3QqIHN0YXRpYywgc28gdGhhdCdzIHNvbWV0aGluZyB0byBtYWtlIGEgbm90ZSBvZi4gQW5kIGZpbmFsbHksIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AgaXMgc3RhdGljLiBJIHNlZSB0aGF0IGB1cGRhdGVfcnFfY2xvY2tgIGlzIG5vdCBzdGF0aWMsIHNvIHRoYXQgbWF5IGJlIGhlbHBmdWwgaW4gdHJhY2luZyB0aGUgZmxvdy5cblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYHVwZGF0ZV9ycV9jbG9ja190YXNrYCBub3csIGFuZCBJIGJldCBpdCdzIGluIGBrZXJuZWwvc2NoZWQvY29yZS5jYCDigJMgbGV0J3MgY29uZmlybSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE2MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAwOjEyLjE5ODgwODUwN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwMjQwNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXBkYXRlX3JxX2Nsb2NrX3Rhc2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3NjaGVkL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvc2NoZWQvY29yZS5jPTgwOD1zdHJ1Y3Qgc3RhdGljX2tleSBwYXJhdmlydF9zdGVhbF9ycV9lbmFibGVkO1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy04MTAtXFxua2VybmVsL3NjaGVkL2NvcmUuYzo4MTE6c3RhdGljIHZvaWQgdXBkYXRlX3JxX2Nsb2NrX3Rhc2soc3RydWN0IHJxICpycSwgczY0IGRlbHRhKVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODEyLXtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODk0PXZvaWQgdXBkYXRlX3JxX2Nsb2NrKHN0cnVjdCBycSAqcnEpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTkxNS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjkxNjpcXHR1cGRhdGVfcnFfY2xvY2tfdGFzayhycSwgZGVsdGEpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTE3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6MDA6MTIuMjQ3ODM1NzkyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTcxNDU2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYHVwZGF0ZV9ycV9jbG9ja2AgRXhwb3J0IFN0YXR1cyoqXG5cbk9rYXksIHNvIGB1cGRhdGVfcnFfY2xvY2tgIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCB0cmFjayBvZiwgbGlrZWx5IGluIGEgcmVhbC10aW1lIGVudmlyb25tZW50LiBUaGF0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgbWFpbnRhaW5pbmcgc2NoZWR1bGUgY29uc2lzdGVuY3kgYW5kIGxpa2VseSBpbnRlcmFjdGluZyB3aXRoIHRoZSBzeXN0ZW0gY2xvY2suIEkgaW1tZWRpYXRlbHkgbmVlZCB0byBlc3RhYmxpc2ggaWYgaXQncyBleHBvcnRlZC4gSXMgaXQgcGFydCBvZiB0aGUgQVBJLCBvciBpcyBpdCBpbnRlcm5hbD8gSWYgaXQncyBleHBvcnRlZCwgdGhhdCBzYXlzIHNvbWV0aGluZyBhYm91dCBpdHMgaW50ZW5kZWQgdXNlIGFuZCBzdGFiaWxpdHkuIElmIGl0J3Mgbm90IGV4cG9ydGVkLCB0aGVuIGl0IGluZGljYXRlcyBpdCdzIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIHN5c3RlbS4gSSBoYXZlIHRvIHNlZSBpZiBJIGNhbiBjYWxsIGl0IGZyb20gbXkgY3VycmVudCBjb250ZXh0IGFuZCB0aGlzIG1heSBkaWN0YXRlIHdoaWNoIGRpcmVjdGlvbiBJIHRha2UgZnJvbSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTkxNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAwOjE1LjY2NDk4NDE0NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM1NTY4NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVwZGF0ZV9ycV9jbG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvc2NoZWQvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9zY2hlZC9jb3JlLmM9ODA4PXN0cnVjdCBzdGF0aWNfa2V5IHBhcmF2aXJ0X3N0ZWFsX3JxX2VuYWJsZWQ7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTgxMC1cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjgxMTpzdGF0aWMgdm9pZCB1cGRhdGVfcnFfY2xvY2tfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzNjQgZGVsdGEpXFxua2VybmVsL3NjaGVkL2NvcmUuYy04MTIte1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy04NDgtXFx0XFx0ICogU2luY2UgaXJxX3RpbWUgaXMgb25seSB1cGRhdGVkIG9uIHtzb2Z0LH1pcnFfZXhpdCwgd2UgbWlnaHQgcnVuIGludG9cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjg0OTpcXHRcXHQgKiB0aGlzIGNhc2Ugd2hlbiBhIHByZXZpb3VzIHVwZGF0ZV9ycV9jbG9jaygpIGhhcHBlbmVkIGluc2lkZSBhXFxua2VybmVsL3NjaGVkL2NvcmUuYy04NTAtXFx0XFx0ICoge3NvZnQsfUlSUSByZWdpb24uXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg5MC0jZW5kaWZcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjg5MTpcXHR1cGRhdGVfcnFfY2xvY2tfcGVsdChycSwgZGVsdGEpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODkyLX1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg5My1cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjg5NDp2b2lkIHVwZGF0ZV9ycV9jbG9jayhzdHJ1Y3QgcnEgKnJxKVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk1LXtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTE1LVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6OTE2OlxcdHVwZGF0ZV9ycV9jbG9ja190YXNrKHJxLCBkZWx0YSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy05MTctfVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz05NDE9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGhydGljayhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTk0OC1cXHRycV9sb2NrKHJxLCBcXHUwMDI2cmYpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6OTQ5OlxcdHVwZGF0ZV9ycV9jbG9jayhycSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy05NTAtXFx0cnEtXFx1MDAzZWRvbm9yLVxcdTAwM2VzY2hlZF9jbGFzcy1cXHUwMDNldGFza190aWNrKHJxLCBycS1cXHUwMDNlZG9ub3IsIDEpO1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz0yMjA2PXZvaWQgZW5xdWV1ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy0yMjA4LVxcdGlmICghKGZsYWdzIFxcdTAwMjYgRU5RVUVVRV9OT0NMT0NLKSlcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjIyMDk6XFx0XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTIyMTAtXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTIyMzI9aW5saW5lIGJvb2wgZGVxdWV1ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy0yMjM3LVxcdGlmICghKGZsYWdzIFxcdTAwMjYgREVRVUVVRV9OT0NMT0NLKSlcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjIyMzg6XFx0XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTIyMzktXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTI2NDU9c3RhdGljIGludCBtaWdyYXRpb25fY3B1X3N0b3Aodm9pZCAqZGF0YSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjY5OC1cXHRcXHRpZiAodGFza19vbl9ycV9xdWV1ZWQocCkpIHtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjI2OTk6XFx0XFx0XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI3MDAtXFx0XFx0XFx0cnEgPSBfX21pZ3JhdGVfdGFzayhycSwgXFx1MDAyNnJmLCBwLCBhcmctXFx1MDAzZWRlc3RfY3B1KTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9Mzg5OT1zdGF0aWMgaW50IHR0d3VfcnVubmFibGUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZV9mbGFncylcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMzkwNi1cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjM5MDc6XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTM5MDgtXFx0aWYgKHAtXFx1MDAzZWlzX2Jsb2NrZWQpIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9MzkyNT12b2lkIHNjaGVkX3R0d3VfcGVuZGluZyh2b2lkICphcmcpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTM5MzUtXFx0cnFfbG9ja19pcnFzYXZlKHJxLCBcXHUwMDI2cmYpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MzkzNjpcXHR1cGRhdGVfcnFfY2xvY2socnEpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMzkzNy1cXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9NDEwMT1zdGF0aWMgdm9pZCB0dHd1X3F1ZXVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNwdSwgaW50IHdha2VfZmxhZ3MpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTQxMDktXFx0cnFfbG9jayhycSwgXFx1MDAyNnJmKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjQxMTA6XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTQxMTEtXFx0dHR3dV9kb19hY3RpdmF0ZShycSwgcCwgd2FrZV9mbGFncywgXFx1MDAyNnJmKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9NDk3NT12b2lkIHdha2VfdXBfbmV3X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy00OTkzLVxcdHJxID0gX190YXNrX3JxX2xvY2socCwgXFx1MDAyNnJmKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjQ5OTQ6XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTQ5OTUtXFx0cG9zdF9pbml0X2VudGl0eV91dGlsX2F2ZyhwKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9NTcwNT11bnNpZ25lZCBsb25nIGxvbmcgdGFza19zY2hlZF9ydW50aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNTczNC1cXHRcXHRwcmVmZXRjaF9jdXJyX2V4ZWNfc3RhcnQocCk7XFxua2VybmVsL3NjaGVkL2NvcmUuYzo1NzM1OlxcdFxcdHVwZGF0ZV9ycV9jbG9jayhycSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy01NzM2LVxcdFxcdHAtXFx1MDAzZXNjaGVkX2NsYXNzLVxcdTAwM2V1cGRhdGVfY3VycihycSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTU3OTM9dm9pZCBzY2hlZF90aWNrKHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTU4MTItXFxua2VybmVsL3NjaGVkL2NvcmUuYzo1ODEzOlxcdHVwZGF0ZV9ycV9jbG9jayhycSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy01ODE0LVxcdGh3X3ByZXNzdXJlID0gYXJjaF9zY2FsZV9od19wcmVzc3VyZShjcHVfb2YocnEpKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9NTg4MD1zdGF0aWMgdm9pZCBzY2hlZF90aWNrX3JlbW90ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTU5MDUtXFx0XFx0XFx0V0FSTl9PTl9PTkNFKHJxLVxcdTAwM2VjdXJyICE9IHJxLVxcdTAwM2Vkb25vcik7XFxua2VybmVsL3NjaGVkL2NvcmUuYzo1OTA2OlxcdFxcdFxcdHVwZGF0ZV9ycV9jbG9jayhycSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy01OTA3LVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz02MjU1PXBpY2tfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBycV9mbGFncyAqcmYpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTYzMTctXFx0XFx0aWYgKCFjb3JlX2Nsb2NrX3VwZGF0ZWQpIHtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjYzMTg6XFx0XFx0XFx0dXBkYXRlX3JxX2Nsb2NrKHJxLVxcdTAwM2Vjb3JlKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTYzMTktXFx0XFx0XFx0Y29yZV9jbG9ja191cGRhdGVkID0gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjM1MS1cXHRcXHRcXHRpZiAoIShycS1cXHUwMDNlY2xvY2tfdXBkYXRlX2ZsYWdzIFxcdTAwMjYgUlFDRl9VUERBVEVEKSlcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjYzNTI6XFx0XFx0XFx0XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTYzNTMtXFx0XFx0XFx0Z290byByZXN0YXJ0O1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy02Mzg0LVxcdFxcdGlmIChpICE9IGNwdSBcXHUwMDI2XFx1MDAyNiAocnFfaSAhPSBycS1cXHUwMDNlY29yZSB8fCAhY29yZV9jbG9ja191cGRhdGVkKSlcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjYzODU6XFx0XFx0XFx0dXBkYXRlX3JxX2Nsb2NrKHJxX2kpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjM4Ni1cXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjM5MS1cXHRcXHRcXHRpZiAoIShycS1cXHUwMDNlY2xvY2tfdXBkYXRlX2ZsYWdzIFxcdTAwMjYgUlFDRl9VUERBVEVEKSlcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjYzOTI6XFx0XFx0XFx0XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTYzOTMtXFx0XFx0XFx0Z290byByZXN0YXJ0O1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz02ODUzPXN0YXRpYyBpbmxpbmUgdm9pZCBwcm94eV9yZWFjcXVpcmVfcnFfbG9jayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy02ODU3LVxcdHJxX3JlcGluX2xvY2socnEsIHJmKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjY4NTg6XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTY4NTktfVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz03MTIxPXN0YXRpYyB2b2lkIF9fc2NoZWQgbm90cmFjZSBfX3NjaGVkdWxlKGludCBzY2hlZF9tb2RlKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy03MTc0LVxcdHJxLVxcdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgXFx1MDAzY1xcdTAwM2M9IDE7XFxua2VybmVsL3NjaGVkL2NvcmUuYzo3MTc1OlxcdHVwZGF0ZV9ycV9jbG9jayhycSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy03MTc2LVxcdHJxLVxcdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgPSBSUUNGX1VQREFURUQ7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTc2ODc9dm9pZCBydF9tdXRleF9zZXRwcmlvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHRhc2tfc3RydWN0ICpwaV90YXNrKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy03NzA0LVxcdHJxID0gX190YXNrX3JxX2xvY2socCwgXFx1MDAyNnJmKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjc3MDU6XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTc3MDYtXFx0LypcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODQ2Mz1zdGF0aWMgaW50IF9fYmFsYW5jZV9wdXNoX2NwdV9zdG9wKHZvaWQgKmFyZylcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODQ3OS1cXHRcXHRycV9sb2NrKHJxLCBcXHUwMDI2cmYpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODQ4MDpcXHRcXHR1cGRhdGVfcnFfY2xvY2socnEpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODQ4MS1cXHRcXHRpZiAodGFza19ycShwKSA9PSBycSBcXHUwMDI2XFx1MDAyNiB0YXNrX29uX3JxX3F1ZXVlZChwKSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODYyND12b2lkIHNldF9ycV9vZmZsaW5lKHN0cnVjdCBycSAqcnEpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg2MjgtXFxua2VybmVsL3NjaGVkL2NvcmUuYzo4NjI5OlxcdFxcdHVwZGF0ZV9ycV9jbG9jayhycSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy04NjMwLVxcdFxcdGZvcl9lYWNoX2NsYXNzKGNsYXNzKSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTg4OTI9aW50IHNjaGVkX2NwdV9keWluZyh1bnNpZ25lZCBpbnQgY3B1KVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy04OTAwLVxcdHJxX2xvY2tfaXJxc2F2ZShycSwgXFx1MDAyNnJmKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjg5MDE6XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg5MDItXFx0aWYgKHJxLVxcdTAwM2Vucl9ydW5uaW5nICE9IDEgfHwgcnFfaGFzX3Bpbm5lZF90YXNrcyhycSkpIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9OTg3ND1zdGF0aWMgaW50IHRnX3NldF9jZnNfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZyxcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTkzNC1cXHRcXHRpZiAoY2ZzX3JxLVxcdTAwM2V0aHJvdHRsZWQpIHtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjk5MzU6XFx0XFx0XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTk5MzYtXFx0XFx0XFx0dW50aHJvdHRsZV9jZnNfcnEoY2ZzX3JxKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9MTEyNTM9c3RydWN0IHNjaGVkX2NoYW5nZV9jdHggKnNjaGVkX2NoYW5nZV9iZWdpbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTEyNjYtXFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBERVFVRVVFX05PQ0xPQ0spKSB7XFxua2VybmVsL3NjaGVkL2NvcmUuYzoxMTI2NzpcXHRcXHR1cGRhdGVfcnFfY2xvY2socnEpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTEyNjgtXFx0XFx0ZmxhZ3MgfD0gREVRVUVVRV9OT0NMT0NLO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMjowMDoxNi4wMDA1NTc5ODFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4NzgwNjIxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUGVyZm9ybWFuY2UgQm90dGxlbmVja3MgaW4gS1ZNKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBkaWcgaW50byBgdXBkYXRlX3JxX2Nsb2NrYCwgYnV0IGNvbnNpZGVyaW5nIGl0cyB1YmlxdWl0b3VzIG5hdHVyZSwgaXQncyBwcm9iYWJseSAqYWxyZWFkeSogb3B0aW1pemVkIGFzIG11Y2ggYXMgcG9zc2libGUuIEl0J3MgdG9vIGRpc3RyaWJ1dGVkIHRvIGJlIGEgc2luZ2xlLCBmb2N1c2VkIGFyZWEgZm9yIGltcHJvdmVtZW50LCBzbyBsZXQncyBydWxlIGl0IG91dCBmb3Igbm93LiBXaGVyZSBzaG91bGQgSSBmb2N1cz9cblxuVGhlIHJlYWwgZW50cnkgcG9pbnQgZm9yIHRoZSBLVk0gdkNQVSBydW4gaXMgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYC4gVGhhdOKAmXMgYSBrZXkgZnVuY3Rpb247IGl0J3MgYSBob3QgcGF0aCwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gZHJpbGwgZG93biB0aGVyZSBhbmQgc2VlIHdoYXTigJlzIGhhcHBlbmluZy4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcG90ZW50aWFsIGZ1bmN0aW9ucywgdGhvdWdoLiBcblxuSSBzZWUgYHJlY29yZF9zdGVhbF90aW1lYCwgd2hpY2ggaXMgc3RhdGljLCBzbyBJIGNhbid0IGltbWVkaWF0ZWx5IHBvaW50IHRvIGl0IGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24uIEhvd2V2ZXIsIGlmIHRoYXQgaXMgaW5saW5lZCBpbnRvIG90aGVyIGZ1bmN0aW9ucywgaXQgY291bGQgYWxzbyBiZSBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgd2l0aG91dCBiZWluZyBvYnZpb3VzLiBTbywgdGhlIG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgYHJlY29yZF9zdGVhbF90aW1lYCBpcyBiZWluZyBpbmxpbmVkLiBUaGF0IHdpbGwgaW1wYWN0IG15IHBsYW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODYwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAwOjIwLjQ4ODM2NzEyNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0OTU2NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVjb3JkX3N0ZWFsX3RpbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz0zNzE4PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2VydmljZV9sb2NhbF90bGJfZmx1c2hfcmVxdWVzdHMpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0zNzE5LVxcbmFyY2gveDg2L2t2bS94ODYuYzozNzIwOnN0YXRpYyB2b2lkIHJlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzcyMS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTExMTg9c3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTIwOC1cXHRcXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpKVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMTIwOTpcXHRcXHRcXHRyZWNvcmRfc3RlYWxfdGltZSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTEyMTAtXFx0XFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfUE1VLCB2Y3B1KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6MDA6MjAuNTM0ODY3NTgxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MDc0ODIwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gU3RlYWwgVGltZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBzdGVhbCB0aW1lIGluIEtWTS4gSXQncyBhIGJpdCB0cmlja3kgYmVjYXVzZSB0aGUgY29kZSBpc24ndCBleHBsaWNpdGx5IG1hcmtlZCBmb3IgaW5saW5pbmcsIGJ1dCBpdCdzIG9ubHkgY2FsbGVkIG9uY2UgaW4gYHZjcHVfZW50ZXJfZ3Vlc3RgLiBUaGUgY29tcGlsZXIgKm1pZ2h0KiBpbmxpbmUgaXQsIHNvIHRoYXQncyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGRpZyBpbnRvIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIGJlY2F1c2UgdGhhdCdzIHRoZSBpb2N0bCBoYW5kbGVyLCBhbmQgdXN1YWxseSBhIGdvb2QgZW50cnkgcG9pbnQgZm9yIHRoaXMgc29ydCBvZiB0aGluZy4gQnV0LCBpdCdzIGEgaG90IHBhdGgsIHNvIEkgc2hvdWxkIGJlIGNhcmVmdWwgbm90IHRvIGdldCBib2dnZWQgZG93biB0aGVyZSBhbmQgbWlzcyBzb21ldGhpbmcuIEFyZSB0aGVyZSBvdGhlciBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQsIG90aGVyIGVudHJ5IHBvaW50cz9cblxuSSBzZWUgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYHJlY29yZF9zdGVhbF90aW1lYCBhbmQgYHVwZGF0ZV9ycV9jbG9ja190YXNrYC4gTm93LCBib3RoIG9mICp0aG9zZSogYXJlIGNhbGxlZCBmcm9tICp2ZXJ5KiBob3QgcGF0aHM6IGB2Y3B1X3J1bmAgYW5kIGB1cGRhdGVfcnFfY2xvY2tgLCByZXNwZWN0aXZlbHkuIElmIEkgZG9uJ3QgZ2l2ZSBTeXprYWxsZXIgYSBgRm9jdXNTeW1ib2xzYCBsaXN0LCBpdCdzIGp1c3QgZ29pbmcgdG8gdXNlIGNvdmVyYWdlIGRhdGEgZnJvbSB0aGUgZW50aXJlIGtlcm5lbCwgd2hpY2ggaXMgZ29pbmcgdG8gYmUgaW5jcmVkaWJseSBub2lzeS4gSSBuZWVkIHRvIGJlIG1vcmUgcHJlY2lzZSBpbiBteSBhbmFseXNpcy5cblxuQWgsIEkgc2VlIGl0ISBgcmVjb3JkX3N0ZWFsX3RpbWVgIGlzIGNhbGxlZCB3aGVuIGBLVk1fUkVRX1NURUFMX1VQREFURWAgaXMgc2V0LiBOb3cgdGhlIGtleSBxdWVzdGlvbiBpczogd2hlbiBhbmQgd2hlcmUgaXMgYEtWTV9SRVFfU1RFQUxfVVBEQVRFYCBhY3R1YWxseSAqc2V0Kj8gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMuIFRoYXQncyB0aGUgY3J1Y2lhbCBsaW5rIEknbSBtaXNzaW5nIGF0IHRoZSBtb21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTU5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAwOjI3LjA0MjM1MjQ0MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzOTcyNzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIktWTV9SRVFfU1RFQUxfVVBEQVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9Mzg4ND1pbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy00MTY0LVxcbmFyY2gveDg2L2t2bS94ODYuYzo0MTY1OlxcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy00MTY2LVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTUxNDk9dm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyMjUtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjUyMjY6XFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1NURUFMX1VQREFURSwgdmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyMjctfVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTExMTE4PXN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTEyMDctXFx0XFx0fVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMTIwODpcXHRcXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpKVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTIwOS1cXHRcXHRcXHRyZWNvcmRfc3RlYWxfdGltZSh2Y3B1KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6MDA6MjcuMjQ2MzMwODkxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMjQzMTgwMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBIb3RzcG90cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHdpdGhpbiB0aGUgS1ZNIGh5cGVydmlzb3IsIGFuZCBJJ3ZlIG5hcnJvd2VkIGRvd24gYSBjb3VwbGUgb2Yga2V5IGFyZWFzLiBJIHNlZSB0aGUgY29kZSBpcyB0b3VjaGluZyBga3ZtX3NldF9tc3JfY29tbW9uYCBhbmQgYGt2bV9hcmNoX3ZjcHVfbG9hZGAuIE5vdywgSSdtIGxlYW5pbmcgdG93YXJkIGZvY3VzaW5nIG9uIGBrdm1fc2V0X21zcl9jb21tb25gIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBkZWFscyB3aXRoIE1TUiB3cml0ZXMg4oCTIHdoaWNoIGFyZSBwcmV0dHkgc2lnbmlmaWNhbnQgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGUgZ3Vlc3QgaXRzZWxmLiBUaGF0IGZlZWxzIGxpa2UgYSBsaWtlbHkgc3BvdCBmb3Igc29tZSBpbnRlcmVzdGluZyBzdHVmZiB0byBiZSBoYXBwZW5pbmcuIEJ1dCwgd2FpdCwgYGt2bV9hcmNoX3ZjcHVfbG9hZGAgZ2V0cyBjYWxsZWQgb24gKmV2ZXJ5KiBjb250ZXh0IHN3aXRjaCB0byB0aGUgdkNQVSB0aHJlYWQuLi4gc28gYHJlY29yZF9zdGVhbF90aW1lYCBpcyBwcm9iYWJseSBjYWxsZWQgYSB0b24gaW4gdGhhdCBmdW5jdGlvbi4gVGhhdCdzIGFub3RoZXIgcG90ZW50aWFsIGFyZWEgb2YgaW52ZXN0aWdhdGlvbi5cblxuQWxyaWdodCwgbGV0J3MgY2lyY2xlIGJhY2sgdG8gYGt2bV9zZXRfbXNyX2NvbW1vbmAuIEl0J3MgYSBwcmV0dHkgaGVmdHkgZnVuY3Rpb24sIHNvIGRpdmluZyBzdHJhaWdodCBpbiBtaWdodCBiZSBvdmVyd2hlbG1pbmcuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBzcGVjaWZpYyBNU1Igd3JpdGVzIHRoYXQgdHJpZ2dlciBgS1ZNX1JFUV9TVEVBTF9VUERBVEVgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGlzLCBhbmQgd2hlcmUgSSdtIGxpa2VseSB0byBmaW5kIHNvbWV0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1NzQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6MDA6MzIuMzcwNjUxMjI2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQxMTAyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fUkVRX1NURUFMX1VQREFURVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTM4ODQ9aW50IGt2bV9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDE2NC1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NDE2NTpcXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfU1RFQUxfVVBEQVRFLCB2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDE2Ni1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz01MTQ5PXZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01MjI1LVxcbmFyY2gveDg2L2t2bS94ODYuYzo1MjI2OlxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9TVEVBTF9VUERBVEUsIHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy01MjI3LX1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMTExOD1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMjA3LVxcdFxcdH1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTEyMDg6XFx0XFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfU1RFQUxfVVBEQVRFLCB2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTEyMDktXFx0XFx0XFx0cmVjb3JkX3N0ZWFsX3RpbWUodmNwdSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAwOjMyLjQxNzA2NTM5MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTg5NTM1ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBrdm1fc2V0X21zcl9jb21tb25gKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGBrdm1fc2V0X21zcl9jb21tb25gIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBJIHNob3VsZCBmb2N1cyBvbiB0aGUgaW1wbGVtZW50YXRpb24gYXJvdW5kIGxpbmUgNDE2NS4gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgYmFzZWQgb24gbXkgcHJldmlvdXMgYW5hbHlzaXMgYW5kIHRoZSBsaWtlbHkgYXJlYSBvZiBpbnRlcmVzdC4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIGJlaGF2aW9yIGluIHRoaXMgcmVnaW9uLiBUaGlzIHdpbGwgaGVscCB3aXRoIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDQ2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6MDA6MzcuNDA2NjA2MjUzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NDQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDE1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDE1MDpcXHRcXHRjYXNlIE1TUl9LVk1fU1RFQUxfVElNRTpcXG40MTUxOlxcdFxcdFxcdGlmICghZ3Vlc3RfcHZfaGFzKHZjcHUsIEtWTV9GRUFUVVJFX1NURUFMX1RJTUUpKVxcbjQxNTI6XFx0XFx0XFx0XFx0cmV0dXJuIEtWTV9NU1JfUkVUX1VOU1VQUE9SVEVEO1xcbjQxNTM6XFx0XFxuNDE1NDpcXHRcXHRcXHRpZiAodW5saWtlbHkoIXNjaGVkX2luZm9fb24oKSkpXFxuNDE1NTpcXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG40MTU2OlxcdFxcbjQxNTc6XFx0XFx0XFx0aWYgKGRhdGEgXFx1MDAyNiBLVk1fU1RFQUxfUkVTRVJWRURfTUFTSylcXG40MTU4OlxcdFxcdFxcdFxcdHJldHVybiAxO1xcbjQxNTk6XFx0XFxuNDE2MDpcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnN0Lm1zcl92YWwgPSBkYXRhO1xcbjQxNjE6XFx0XFxuNDE2MjpcXHRcXHRcXHRpZiAoIShkYXRhIFxcdTAwMjYgS1ZNX01TUl9FTkFCTEVEKSlcXG40MTYzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQxNjQ6XFx0XFxuNDE2NTpcXHRcXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfU1RFQUxfVVBEQVRFLCB2Y3B1KTtcXG40MTY2OlxcdFxcbjQxNjc6XFx0XFx0XFx0YnJlYWs7XFxuNDE2ODpcXHRcXHRjYXNlIE1TUl9LVk1fUFZfRU9JX0VOOlxcbjQxNjk6XFx0XFx0XFx0aWYgKCFndWVzdF9wdl9oYXModmNwdSwgS1ZNX0ZFQVRVUkVfUFZfRU9JKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6MDA6MzcuNDA3MzYyNjQzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3OTIwNjQ5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcgcHVycG9zZXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBNU1JfS1ZNX1NURUFMX1RJTUVgIGlzIGEga2V5IGFyZWEgb2YgaW50ZXJlc3QgYmVjYXVzZSB0aGUgZ3Vlc3QgaGFzIHdyaXRlIGFjY2VzcyB0byBpdCwgYW5kIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBhIHByaW1lIHRhcmdldC4gVGhhdCdzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UsIHJpcGUgZm9yIGZ1enppbmcuIEFsc28sIHRoZSBgdXBkYXRlX3JxX2Nsb2NrX3Rhc2tgIGNoYW5nZSwgd2hpY2ggaW50cm9kdWNlcyBkZWZlcnJlZCBjbG9jayB1cGRhdGVzIGJhc2VkIG9uIHJlbW90ZSBDUFUgdXBkYXRlcyB0byB0aGUgcnVucXVldWUgKHJxKSB3aGlsZSB0aGUgb3duZXIgdkNQVSBpcyBwcmVlbXB0ZWQgaXMgYWxzbyBhIHBvaW50IGZvciBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIHNvbGlkaWZ5IHRoZSBzdHJhdGVneS4gTXkgaW5pdGlhbCBzdW1tYXJ5IG9mIHRoZSBmdXp6aW5nIHRhcmdldCBpczpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBib3RoIGNoYW5nZXMgc2VlbSBsaWtlIGdvb2QgY2FuZGlkYXRlcy5cbiogICAqKkZvY3VzU3ltYm9sOioqIEkgdGhpbmsgdGhlIGJlc3Qgc3ltYm9sIHRvIGZvY3VzIG9uIGlzIGBrdm1fc2V0X21zcl9jb21tb25gLiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGlzIHRlbXB0aW5nIGFzIGEgbWFpbiBlbnRyeSBwb2ludCwgYnV0IGl0IG1pZ2h0IGJlIHRvbyBob3QgYW5kIGdlbmVyYWxpemVkLCBzbyBJJ2xsIHN0YXkgZm9jdXNlZCBvbiB0aGUgc3BlY2lmaWMgTVNSIHNldHRpbmcgZnVuY3Rpb24uXG4qICAgKipFbmFibGVDb25maWdzOioqIFdlIGRlZmluaXRlbHkgbmVlZCBgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HYCwgYFBBUkFWSVJUYCwgYEhZUEVSVklTT1JfR1VFU1RgLCBhbmQgb2YgY291cnNlIGBLVk1gIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eS5cblxuSSdtIHRoaW5raW5nIGEgYml0IG1vcmUgYWJvdXQgYHVwZGF0ZV9ycV9jbG9ja190YXNrYC4gVGhlIGZhY3QgdGhhdCBpdCdzIGNhbGxlZCBmcm9tIGB1cGRhdGVfcnFfY2xvY2tgLCBhbmQgdGhhdCBgdXBkYXRlX3JxX2Nsb2NrYCBpcyBjYWxsZWQgZnJvbSBzdGFuZGFyZCBzY2hlZHVsZXIgZnVuY3Rpb25zIGxpa2UgYHRhc2tfdGlja2AsIGBlbnF1ZXVlX3Rhc2tgLCBhbmQgYGRlcXVldWVfdGFza2AsIG1lYW5zIGl0J3MgYSB2ZXJ5IGdlbmVyaWMgZnVuY3Rpb24uIFNvLCBga3ZtX3NldF9tc3JfY29tbW9uYCBpcyB0aGUgYmV0dGVyIHRhcmdldC5cblxuTGV0J3MgZG8gYSBxdWljayBjb25maWd1cmF0aW9uIGNoZWNrLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSBtZXQuXG5cbiogICBgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HYCBkZXBlbmRzIG9uIGBQQVJBVklSVGAuXG4qICAgYFBBUkFWSVJUYCBkZXBlbmRzIG9uIGBIWVBFUlZJU09SX0dVRVNUYC5cblxuVGhlcmVmb3JlLCB3ZSBoYXZlIHRvIGVuYWJsZSBhbGwgdGhyZWU6IGBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdgLCBgUEFSQVZJUlRgLCBgSFlQRVJWSVNPUl9HVUVTVGAuIFRoZSBgS1ZNYCBjb25maWcgaXMgYWxzbyBuZWNlc3NhcnksIHNvIHdlIGNhbiB0ZXN0IHRoZSBLVk0gZnVuY3Rpb25hbGl0eS4gRG9uZS4gTm93LCBsZXQncyBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk1OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAwOjQ1LjE5OTQzMDQ5OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2NjUyMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMjowMDo0NS4yNDYwOTk4NTRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE1MTQ4MzAxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIFNjaGVkdWxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gS1ZNIHNjaGVkdWxpbmcsIGFuZCBteSBpbml0aWFsIHRob3VnaHRzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGVuYWJsaW5nIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZmlyc3QsIHdoaWNoIGlzIHN0YW5kYXJkIHByb2NlZHVyZS4gU28sIEkgc2VlIHdlJ3JlIGV4cGxpY2l0bHkgZW5hYmxpbmcgYFZJUlRVQUxJWkFUSU9OYCBhbmQgYEtWTWAsIHdoaWNoIGlzIGV4cGVjdGVkIHNpbmNlIEtWTSByZWxpZXMgb24gdmlydHVhbGl6YXRpb24uIFRoZW4gd2UgaGF2ZSBgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HYCwgYFBBUkFWSVJUYCwgYW5kIGBIWVBFUlZJU09SX0dVRVNUYC4gVGhlc2UgYXJlIGFsbCByZWxhdGVkIHRvIHBhcmF2aXJ0dWFsaXphdGlvbiBhbmQgZ3Vlc3Qgc3VwcG9ydCB3aXRoaW4gYSBoeXBlcnZpc29yLCBzbyB0aGV5IG1ha2Ugc2Vuc2UgaW4gdGhpcyBjb250ZXh0LlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBtZWF0IG9mIHRoZSBjaGFuZ2UuIEl0J3MgbW9kaWZ5aW5nIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AsIGFuZCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9uIHRoZSBzY2hlZHVsZXIuIEknbGwgbmVlZCB0byByZW1lbWJlciB3aGVyZSBgdXBkYXRlX3JxX2Nsb2NrX3Rhc2tgIGlzIGNhbGxlZCBmcm9tLiBSaWdodCwgaXQncyBjYWxsZWQgZnJvbSBgdXBkYXRlX3JxX2Nsb2NrYCwgc28gdGhhdCBtYWtlcyBzZW5zZS4gVGhlIGtleSBwb2ludCBvZiB0aGUgcGF0Y2ggaXMgZGVmZXJyaW5nIHRoZSBjbG9jayB0YXNrIHVwZGF0ZSBpZiBgcnFfY3B1ICE9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgXHUwMDI2XHUwMDI2IHZjcHVfaXNfcHJlZW1wdGVkKHJxX2NwdSlgLiBUaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc2NoZWR1bGVyOyB3ZSdyZSBlc3NlbnRpYWxseSBkZWxheWluZyB0aGUgdXBkYXRlIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBydW5uaW5nIHF1ZXVlIENQVSBkb2Vzbid0IG1hdGNoIHRoZSBjdXJyZW50IHJhdyBTTVAgcHJvY2Vzc29yIElELCAqYW5kKiB0aGUgdkNQVSBpcyBwcmVlbXB0ZWQuIFNvIHRoaXMgbGlrZWx5IGhhcyBpbXBsaWNhdGlvbnMgb24gdGltaW5nIGFjY3VyYWN5IGFuZCBwb3RlbnRpYWxseSBvbiBjb250ZXh0IHN3aXRjaGVzLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHdoeSB0aGlzIGRlZmVycmFsIGlzIG5lZWRlZC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBgdmNwdV9pc19wcmVlbXB0ZWRgIGlzIGFjdHVhbGx5IGRvaW5nLiBJcyBpdCBjaGVja2luZyBzb21lIHN0YXRlIGZsYWcsIG9yIGlzIGl0IGEgbW9yZSBpbnZvbHZlZCBjYWxjdWxhdGlvbj8gS25vd2luZyB0aGF0IHdpbGwgYmUgY3J1Y2lhbCB0byBmdWxseSBncmFzcCB0aGUgcGVyZm9ybWFuY2UgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDEwNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMjowMDo1MS4zOTc1ODUyOTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzcwMDM3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmNwdV9pc19wcmVlbXB0ZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaC0yMC0gKi9cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmg6MjE6I2RlZmluZSB2Y3B1X2lzX3ByZWVtcHRlZCB2Y3B1X2lzX3ByZWVtcHRlZFxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaDoyMjpzdGF0aWMgaW5saW5lIGJvb2wgdmNwdV9pc19wcmVlbXB0ZWQoaW50IGNwdSlcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgtMjMte1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcXNwaW5sb2NrLmg9MTI9c3RhdGljIGlubGluZSBib29sIHZpcnRfc3Bpbl9sb2NrKHN0cnVjdCBxc3BpbmxvY2sgKmxvY2spXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9xc3BpbmxvY2suaC00MS0gKi9cXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9xc3BpbmxvY2suaDo0MjojZGVmaW5lIHZjcHVfaXNfcHJlZW1wdGVkKGNwdSlcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcXNwaW5sb2NrLmgtNDMtKHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFyYXZpcnQuaD0xMjA9c3RhdGljIGlubGluZSBib29sIHZjcHVfaXNfZGlzcGF0Y2hlZChpbnQgdmNwdSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYXJhdmlydC5oLTEyNS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFyYXZpcnQuaDoxMjY6I2RlZmluZSB2Y3B1X2lzX3ByZWVtcHRlZCB2Y3B1X2lzX3ByZWVtcHRlZFxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYXJhdmlydC5oOjEyNzpzdGF0aWMgaW5saW5lIGJvb2wgdmNwdV9pc19wcmVlbXB0ZWQoaW50IGNwdSlcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFyYXZpcnQuaC0xMjgte1xcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgtMTYzLVxcdFxcdC8qXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhcmF2aXJ0Lmg6MTY0OlxcdFxcdCAqIFRoZSByZXN1bHQgb2YgdmNwdV9pc19wcmVlbXB0ZWQoKSBpcyB1c2VkIGluIGFcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFyYXZpcnQuaC0xNjUtXFx0XFx0ICogc3BlY3VsYXRpdmUgd2F5LCBhbmQgaXMgYWx3YXlzIHN1YmplY3QgdG8gaW52YWxpZGF0aW9uXFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3FzcGlubG9jay5jPTM1ND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgcHJvcGFnYXRlX3NsZWVweShzdHJ1Y3QgcW5vZGUgKm5vZGUsIHUzMiB2YWwsIGJvb2wgcGFyYXZpcnQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3FzcGlubG9jay5jLTM3MS1cXHRvd25lciA9IGdldF9vd25lcl9jcHUodmFsKTtcXG5hcmNoL3Bvd2VycGMvbGliL3FzcGlubG9jay5jOjM3MjpcXHRpZiAodmNwdV9pc19wcmVlbXB0ZWQob3duZXIpKVxcbmFyY2gvcG93ZXJwYy9saWIvcXNwaW5sb2NrLmMtMzczLVxcdFxcdG5leHQtXFx1MDAzZXNsZWVweSA9IDE7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3FzcGlubG9jay5jPTM3Nz1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgeWllbGRfdG9fcHJldihzdHJ1Y3QgcXNwaW5sb2NrICpsb2NrLCBzdHJ1Y3QgcW5vZGUgKm5vZGUsIGludCBwcmV2X2NwdSwgYm9vbCBwYXJhdmlydClcXG4tLVxcbmFyY2gvcG93ZXJwYy9saWIvcXNwaW5sb2NrLmMtMzkxLVxcdCAqL1xcbmFyY2gvcG93ZXJwYy9saWIvcXNwaW5sb2NrLmM6MzkyOlxcdGlmIChub2RlLVxcdTAwM2VzbGVlcHkgfHwgdmNwdV9pc19wcmVlbXB0ZWQocHJldl9jcHUpKSB7XFxuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYy0zOTMtXFx0XFx0dTMyIHZhbCA9IFJFQURfT05DRShsb2NrLVxcdTAwM2V2YWwpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYy00MDMtXFx0XFx0XFx0XFx0ICovXFxuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYzo0MDQ6XFx0XFx0XFx0XFx0aWYgKHZjcHVfaXNfcHJlZW1wdGVkKGdldF9vd25lcl9jcHUodmFsKSkpXFxuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYy00MDUtXFx0XFx0XFx0XFx0XFx0bm9kZS1cXHUwMDNlbmV4dC1cXHUwMDNlc2xlZXB5ID0gMTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9saWIvcXNwaW5sb2NrLmM9NTI3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBxdWV1ZWRfc3Bpbl9sb2NrX21jc19xdWV1ZShzdHJ1Y3QgcXNwaW5sb2NrICpsb2NrLCBib29sIHBhcmF2aXJ0KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYy02OTEtXFx0XFx0XFx0YXNtIHZvbGF0aWxlKFxcXCJtaXNvXFxcIiA6OjogXFxcIm1lbW9yeVxcXCIpO1xcbmFyY2gvcG93ZXJwYy9saWIvcXNwaW5sb2NrLmM6NjkyOlxcdFxcdGlmICh2Y3B1X2lzX3ByZWVtcHRlZChuZXh0X2NwdSkpXFxuYXJjaC9wb3dlcnBjL2xpYi9xc3BpbmxvY2suYy02OTMtXFx0XFx0XFx0cHJvZF9jcHUobmV4dF9jcHUpO1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmg9Mzc9ZXh0ZXJuIGludCBzcGluX3JldHJ5O1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9zcGlubG9jay5oLTM4LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9zcGlubG9jay5oOjM5OmJvb2wgYXJjaF92Y3B1X2lzX3ByZWVtcHRlZChpbnQgY3B1KTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaC00MC1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaDo0MTojZGVmaW5lIHZjcHVfaXNfcHJlZW1wdGVkIGFyY2hfdmNwdV9pc19wcmVlbXB0ZWRcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaC00Mi1cXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmM9Njk9dm9pZCBub3RyYWNlIHN0b3BfbWFjaGluZV95aWVsZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaylcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMtNzgtXFx0XFx0XFx0cmV0dXJuO1xcbmFyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmM6Nzk6XFx0XFx0aWYgKGFyY2hfdmNwdV9pc19wcmVlbXB0ZWQoY3B1KSlcXG5hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3Nvci5jLTgwLVxcdFxcdFxcdHNtcF95aWVsZF9jcHUoY3B1KTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc21wLmM9Mzk0PXZvaWQgc2NoZWR1bGVfbWNja19oYW5kbGVyKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jLTM5OC1cXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jOjM5OTpib29sIG5vdHJhY2UgYXJjaF92Y3B1X2lzX3ByZWVtcHRlZChpbnQgY3B1KVxcbmFyY2gvczM5MC9rZXJuZWwvc21wLmMtNDAwLXtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc21wLmMtNDA2LX1cXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jOjQwNzpFWFBPUlRfU1lNQk9MKGFyY2hfdmNwdV9pc19wcmVlbXB0ZWQpO1xcbmFyY2gvczM5MC9rZXJuZWwvc21wLmMtNDA4LVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kaWFnLmM9MTg2PXN0YXRpYyBpbnQgX19kaWFnX3RpbWVfc2xpY2VfZW5kX2RpcmVjdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGlhZy5jLTIxMC1cXHRcXHQvKiB0YXJnZXQgaG9zdCBDUFUgYWxyZWFkeSBydW5uaW5nICovXFxuYXJjaC9zMzkwL2t2bS9kaWFnLmM6MjExOlxcdFxcdGlmICghdmNwdV9pc19wcmVlbXB0ZWQodGNwdV9jcHUpKVxcbmFyY2gvczM5MC9rdm0vZGlhZy5jLTIxMi1cXHRcXHRcXHRnb3RvIG5vX3lpZWxkO1xcbi0tXFxuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jPTE1Nj1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zcGluX2xvY2tfcXVldWVkKGFyY2hfc3BpbmxvY2tfdCAqbHApXFxuLS1cXG5hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMtMjAwLVxcdG93bmVyID0gYXJjaF9zcGluX3lpZWxkX3RhcmdldChvbGQsIG5vZGUpO1xcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYzoyMDE6XFx0aWYgKG93bmVyIFxcdTAwMjZcXHUwMDI2IGFyY2hfdmNwdV9pc19wcmVlbXB0ZWQob3duZXIgLSAxKSlcXG5hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMtMjAyLVxcdFxcdHNtcF95aWVsZF9jcHUob3duZXIgLSAxKTtcXG4tLVxcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYy0yMTItXFx0XFx0XFx0b3duZXIgPSBhcmNoX3NwaW5feWllbGRfdGFyZ2V0KG9sZCwgbm9kZSk7XFxuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jOjIxMzpcXHRcXHRcXHRpZiAob3duZXIgXFx1MDAyNlxcdTAwMjYgYXJjaF92Y3B1X2lzX3ByZWVtcHRlZChvd25lciAtIDEpKVxcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYy0yMTQtXFx0XFx0XFx0XFx0c21wX3lpZWxkX2NwdShvd25lciAtIDEpO1xcbi0tXFxuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jLTIzMy1cXHRcXHRjb3VudCA9IHNwaW5fcmV0cnk7XFxuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jOjIzNDpcXHRcXHRpZiAoIW1hY2hpbmVfaXNfbHBhcigpIHx8IGFyY2hfdmNwdV9pc19wcmVlbXB0ZWQob3duZXIgLSAxKSlcXG5hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMtMjM1LVxcdFxcdFxcdHNtcF95aWVsZF9jcHUob3duZXIgLSAxKTtcXG4tLVxcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYz0yNTA9c3RhdGljIGlubGluZSB2b2lkIGFyY2hfc3Bpbl9sb2NrX2NsYXNzaWMoYXJjaF9zcGlubG9ja190ICpscClcXG4tLVxcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYy0yNTctXFx0b3duZXIgPSBhcmNoX3NwaW5feWllbGRfdGFyZ2V0KFJFQURfT05DRShscC1cXHUwMDNlbG9jayksIE5VTEwpO1xcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYzoyNTg6XFx0aWYgKG93bmVyIFxcdTAwMjZcXHUwMDI2IGFyY2hfdmNwdV9pc19wcmVlbXB0ZWQob3duZXIgLSAxKSlcXG5hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMtMjU5LVxcdFxcdHNtcF95aWVsZF9jcHUob3duZXIgLSAxKTtcXG4tLVxcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYy0yNzYtXFx0XFx0Y291bnQgPSBzcGluX3JldHJ5O1xcbmFyY2gvczM5MC9saWIvc3BpbmxvY2suYzoyNzc6XFx0XFx0aWYgKCFtYWNoaW5lX2lzX2xwYXIoKSB8fCBhcmNoX3ZjcHVfaXNfcHJlZW1wdGVkKG93bmVyIC0gMSkpXFxuYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jLTI3OC1cXHRcXHRcXHRzbXBfeWllbGRfY3B1KG93bmVyIC0gMSk7XFxuLS1cXG5hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmM9MzUyPXZvaWQgYXJjaF9zcGluX3JlbGF4KGFyY2hfc3BpbmxvY2tfdCAqbHApXFxuLS1cXG5hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMtMzU4LVxcdFxcdHJldHVybjtcXG5hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmM6MzU5OlxcdGlmIChtYWNoaW5lX2lzX2xwYXIoKSBcXHUwMDI2XFx1MDAyNiAhYXJjaF92Y3B1X2lzX3ByZWVtcHRlZChjcHUgLSAxKSlcXG5hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMtMzYwLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jPTI2PXN0YXRpYyB2b2lkIGh2X3Fsb2NrX3dhaXQodTggKmJ5dGUsIHU4IHZhbClcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jLTYyLSAqL1xcbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jOjYzOl9fdmlzaWJsZSBib29sIGh2X3ZjcHVfaXNfcHJlZW1wdGVkKGludCB2Y3B1KVxcbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jLTY0LXtcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jLTY3LVxcbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jOjY4OlBWX0NBTExFRV9TQVZFX1JFR1NfVEhVTksoaHZfdmNwdV9pc19wcmVlbXB0ZWQpO1xcbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jLTY5LVxcbmFyY2gveDg2L2h5cGVydi9odl9zcGlubG9jay5jPTcwPXZvaWQgX19pbml0IGh2X2luaXRfc3BpbmxvY2tzKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvaHZfc3BpbmxvY2suYy04NC1cXHRwdl9vcHNfbG9jay5raWNrID0gaHZfcWxvY2tfa2ljaztcXG5hcmNoL3g4Ni9oeXBlcnYvaHZfc3BpbmxvY2suYzo4NTpcXHRwdl9vcHNfbG9jay52Y3B1X2lzX3ByZWVtcHRlZCA9IFBWX0NBTExFRV9TQVZFKGh2X3ZjcHVfaXNfcHJlZW1wdGVkKTtcXG5hcmNoL3g4Ni9oeXBlcnYvaHZfc3BpbmxvY2suYy04Ni19XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTIyOC0vLyBmcmVlOiB3YXMgI2RlZmluZSBYODZfRkVBVFVSRV9QVlVOTE9DSyAgICAgICAgICAgICAgICggOCozMisyMCkgLyogUFYgdW5sb2NrIGZ1bmN0aW9uICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaDoyMjk6I2RlZmluZSBYODZfRkVBVFVSRV9WQ1BVUFJFRU1QVFxcdFxcdCggOCozMisyMSkgLyogUFYgdmNwdV9pc19wcmVlbXB0ZWQgZnVuY3Rpb24gKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTIzMC0jZGVmaW5lIFg4Nl9GRUFUVVJFX1REWF9HVUVTVFxcdFxcdCggOCozMisyMikgLyogXFxcInRkeF9ndWVzdFxcXCIgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgR3Vlc3QgKi9cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWlkL2xlYWZfdHlwZXMuaD0xMjEyPXN0cnVjdCBsZWFmXzB4NGM3ODAwMDFfMCB7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVpZC9sZWFmX3R5cGVzLmgtMTI5MS1cXHRcXHRwdnVubG9ja1xcdFxcdFxcdDogIDEsIC8vIFBWIHVubG9jayBmdW5jdGlvblxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWlkL2xlYWZfdHlwZXMuaDoxMjkyOlxcdFxcdHZjcHVwcmVlbXB0XFx0XFx0XFx0OiAgMSwgLy8gUFYgdmNwdV9pc19wcmVlbXB0ZWQgZnVuY3Rpb25cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVpZC9sZWFmX3R5cGVzLmgtMTI5My1cXHRcXHR0ZHhfZ3Vlc3RcXHRcXHRcXHQ6ICAxLCAvLyBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyBHdWVzdFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbXNoeXBlcnYuaD0xODQ9dm9pZCBfX2luaXQgaHZfaW5pdF9zcGlubG9ja3Modm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbXNoeXBlcnYuaDoxODU6Ym9vbCBodl92Y3B1X2lzX3ByZWVtcHRlZChpbnQgdmNwdSk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbXNoeXBlcnYuaC0xODYtI2Vsc2VcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg9MTQ9c3RydWN0IHB2X2xvY2tfb3BzIHtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmgtMTctXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaDoxODpcXHRzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgdmNwdV9pc19wcmVlbXB0ZWQ7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaC0xOS19IF9fbm9fcmFuZG9taXplX2xheW91dDtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg9NDA9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHB2X3F1ZXVlZF9zcGluX3VubG9jayhzdHJ1Y3QgcXNwaW5sb2NrICpsb2NrKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaC00OS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oOjUwOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBwdl92Y3B1X2lzX3ByZWVtcHRlZChsb25nIGNwdSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oLTUxLXtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oOjUyOlxcdHJldHVybiBQVk9QX0FMVF9DQUxMRUUxKGJvb2wsIHB2X29wc19sb2NrLCB2Y3B1X2lzX3ByZWVtcHRlZCwgY3B1LFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmgtNTMtXFx0XFx0XFx0XFx0XFxcInhvciAlJWVheCwgJSVlYXhcXFwiLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaD03ND1zdGF0aWMgaW5saW5lIHZvaWQgcXVldWVkX3NwaW5fdW5sb2NrKHN0cnVjdCBxc3BpbmxvY2sgKmxvY2spXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oLTc5LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg6ODA6I2RlZmluZSB2Y3B1X2lzX3ByZWVtcHRlZCB2Y3B1X2lzX3ByZWVtcHRlZFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg6ODE6c3RhdGljIGlubGluZSBib29sIHZjcHVfaXNfcHJlZW1wdGVkKGxvbmcgY3B1KVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmgtODIte1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg6ODM6XFx0cmV0dXJuIHB2X3ZjcHVfaXNfcHJlZW1wdGVkKGNwdSk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaC04NC19XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC1zcGlubG9jay5oPTk2PXZvaWQgX19yYXdfY2FsbGVlX3NhdmVfX19uYXRpdmVfcXVldWVkX3NwaW5fdW5sb2NrKHN0cnVjdCBxc3BpbmxvY2sgKmxvY2spO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg6OTc6Ym9vbCBfX3Jhd19jYWxsZWVfc2F2ZV9fX25hdGl2ZV92Y3B1X2lzX3ByZWVtcHRlZChsb25nIGNwdSk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaC05OC0jZW5kaWYgLyogQ09ORklHX1BBUkFWSVJUX1NQSU5MT0NLUyAqL1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaD0xMDQ9Ym9vbCBwdl9pc19uYXRpdmVfc3Bpbl91bmxvY2sodm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaDoxMDU6X192aXNpYmxlIGJvb2wgX19uYXRpdmVfdmNwdV9pc19wcmVlbXB0ZWQobG9uZyBjcHUpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmg6MTA2OmJvb2wgcHZfaXNfbmF0aXZlX3ZjcHVfaXNfcHJlZW1wdGVkKHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LXNwaW5sb2NrLmgtMTA3LVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2t2bS5jPTY0NT1zdGF0aWMgdm9pZCBrdm1fc21wX3NlbmRfY2FsbF9mdW5jX2lwaShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaylcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm0uYy02NTItXFx0Zm9yX2VhY2hfY3B1KGNwdSwgbWFzaykge1xcbmFyY2gveDg2L2tlcm5lbC9rdm0uYzo2NTM6XFx0XFx0aWYgKCFpZGxlX2NwdShjcHUpIFxcdTAwMjZcXHUwMDI2IHZjcHVfaXNfcHJlZW1wdGVkKGNwdSkpIHtcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmMtNjU0LVxcdFxcdFxcdGt2bV9oeXBlcmNhbGwxKEtWTV9IQ19TQ0hFRF9ZSUVMRCwgcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KSk7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM9NzkyPXN0YXRpYyB2b2lkIGt2bV9jcmFzaF9zaHV0ZG93bihzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm0uYy03OTktI2lmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikgfHwgIWRlZmluZWQoQ09ORklHX1NNUClcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM6ODAwOmJvb2wgX19rdm1fdmNwdV9pc19wcmVlbXB0ZWQobG9uZyBjcHUpO1xcbmFyY2gveDg2L2tlcm5lbC9rdm0uYy04MDEtXFxuYXJjaC94ODYva2VybmVsL2t2bS5jOjgwMjpfX3Zpc2libGUgYm9vbCBfX2t2bV92Y3B1X2lzX3ByZWVtcHRlZChsb25nIGNwdSlcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmMtODAzLXtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm0uYy04MDctfVxcbmFyY2gveDg2L2tlcm5lbC9rdm0uYzo4MDg6UFZfQ0FMTEVFX1NBVkVfUkVHU19USFVOSyhfX2t2bV92Y3B1X2lzX3ByZWVtcHRlZCk7XFxuYXJjaC94ODYva2VybmVsL2t2bS5jLTgwOS1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm0uYy04MTMtXFxuYXJjaC94ODYva2VybmVsL2t2bS5jOjgxNDpleHRlcm4gYm9vbCBfX3Jhd19jYWxsZWVfc2F2ZV9fX2t2bV92Y3B1X2lzX3ByZWVtcHRlZChsb25nKTtcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmMtODE1LVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2t2bS5jLTgyNC1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM6ODI1OkRFRklORV9BU01fRlVOQyhfX3Jhd19jYWxsZWVfc2F2ZV9fX2t2bV92Y3B1X2lzX3ByZWVtcHRlZCxcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmMtODI2LVxcdFxcdFBWX1ZDUFVfUFJFRU1QVEVEX0FTTSwgLnRleHQpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2t2bS5jPTgyOT1zdGF0aWMgdm9pZCBfX2luaXQga3ZtX2d1ZXN0X2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm0uYy04NDItI2lmZGVmIENPTkZJR19QQVJBVklSVF9TUElOTE9DS1NcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM6ODQzOlxcdFxcdHB2X29wc19sb2NrLnZjcHVfaXNfcHJlZW1wdGVkID1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM6ODQ0OlxcdFxcdFxcdFBWX0NBTExFRV9TQVZFKF9fa3ZtX3ZjcHVfaXNfcHJlZW1wdGVkKTtcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmMtODQ1LSNlbmRpZlxcbi0tXFxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jPTc2PXZvaWQgYXJjaF9jb250ZW5kZWRfcmVsZWFzZV90cmFjZV91bnJlZyh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jLTg3LVxcbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYzo4ODpfX3Zpc2libGUgYm9vbCBfX25hdGl2ZV92Y3B1X2lzX3ByZWVtcHRlZChsb25nIGNwdSlcXG5hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmMtODkte1xcbi0tXFxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jLTkxLX1cXG5hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmM6OTI6UFZfQ0FMTEVFX1NBVkVfUkVHU19USFVOSyhfX25hdGl2ZV92Y3B1X2lzX3ByZWVtcHRlZCk7XFxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jLTkzLVxcbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYzo5NDpib29sIHB2X2lzX25hdGl2ZV92Y3B1X2lzX3ByZWVtcHRlZCh2b2lkKVxcbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYy05NS17XFxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jOjk2OlxcdHJldHVybiBwdl9vcHNfbG9jay52Y3B1X2lzX3ByZWVtcHRlZC5mdW5jID09XFxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jOjk3OlxcdFxcdF9fcmF3X2NhbGxlZV9zYXZlX19fbmF0aXZlX3ZjcHVfaXNfcHJlZW1wdGVkO1xcbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYy05OC19XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmM9MTAwPXZvaWQgX19pbml0IHBhcmF2aXJ0X3NldF9jYXAodm9pZClcXG5hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmMtMTAxLXtcXG5hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmM6MTAyOlxcdGlmICghcHZfaXNfbmF0aXZlX3ZjcHVfaXNfcHJlZW1wdGVkKCkpXFxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jLTEwMy1cXHRcXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1ZDUFVQUkVFTVBUKTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYz0xMDY9c3RydWN0IHB2X2xvY2tfb3BzIHB2X29wc19sb2NrID0ge1xcbi0tXFxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jLTEwOC1cXHQua2lja1xcdFxcdFxcdFxcdD0gcGFyYXZpcnRfbm9wLFxcbmFyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYzoxMDk6XFx0LnZjcHVfaXNfcHJlZW1wdGVkXFx0XFx0PSBQVl9DQUxMRUVfU0FWRShfX25hdGl2ZV92Y3B1X2lzX3ByZWVtcHRlZCksXFxuYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jLTExMC19O1xcbi0tXFxuYXJjaC94ODYveGVuL3NwaW5sb2NrLmM9MTIzPXZvaWQgX19pbml0IHhlbl9pbml0X3NwaW5sb2Nrcyh2b2lkKVxcbi0tXFxuYXJjaC94ODYveGVuL3NwaW5sb2NrLmMtMTQwLVxcdHB2X29wc19sb2NrLmtpY2sgPSB4ZW5fcWxvY2tfa2ljaztcXG5hcmNoL3g4Ni94ZW4vc3BpbmxvY2suYzoxNDE6XFx0cHZfb3BzX2xvY2sudmNwdV9pc19wcmVlbXB0ZWQgPSBQVl9DQUxMRUVfU0FWRSh4ZW5fdmNwdV9zdG9sZW4pO1xcbmFyY2gveDg2L3hlbi9zcGlubG9jay5jLTE0Mi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9MjI5OT1leHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpjcHVfY3Vycl9zbmFwc2hvdChpbnQgY3B1KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0yMzA4LSAqL1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoyMzA5OiNpZm5kZWYgdmNwdV9pc19wcmVlbXB0ZWRcXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MjMxMDpzdGF0aWMgaW5saW5lIGJvb2wgdmNwdV9pc19wcmVlbXB0ZWQoaW50IGNwdSlcXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMjMxMS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9MjMyMz1zdGF0aWMgaW5saW5lIGJvb2wgb3duZXJfb25fY3B1KHN0cnVjdCB0YXNrX3N0cnVjdCAqb3duZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMjMyOC1cXHQgKi9cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MjMyOTpcXHRyZXR1cm4gUkVBRF9PTkNFKG93bmVyLVxcdTAwM2Vvbl9jcHUpIFxcdTAwMjZcXHUwMDI2ICF2Y3B1X2lzX3ByZWVtcHRlZCh0YXNrX2NwdShvd25lcikpO1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0yMzMwLX1cXG4tLVxcbmtlcm5lbC9sb2NraW5nL211dGV4LmM9Mzg1PWJvb2wgbXV0ZXhfc3Bpbl9vbl9vd25lcihzdHJ1Y3QgbXV0ZXggKmxvY2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqb3duZXIsXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9tdXRleC5jLTQwMy1cXHRcXHQvKlxcbmtlcm5lbC9sb2NraW5nL211dGV4LmM6NDA0OlxcdFxcdCAqIFVzZSB2Y3B1X2lzX3ByZWVtcHRlZCB0byBkZXRlY3QgbG9jayBob2xkZXIgcHJlZW1wdGlvbiBpc3N1ZS5cXG5rZXJuZWwvbG9ja2luZy9tdXRleC5jLTQwNS1cXHRcXHQgKi9cXG4tLVxcbmtlcm5lbC9sb2NraW5nL29zcV9sb2NrLmM9OTM9Ym9vbCBvc3FfbG9jayhzdHJ1Y3Qgb3B0aW1pc3RpY19zcGluX3F1ZXVlICpsb2NrKVxcbi0tXFxua2VybmVsL2xvY2tpbmcvb3NxX2xvY2suYy0xNDItXFx0ICogd2lsbCBjb21lIHdpdGggYW4gSVBJLCB3aGljaCB3aWxsIHdha2Ugc21wX2NvbmRfbG9hZF9yZWxheGVkKCkgaWYgaXRcXG5rZXJuZWwvbG9ja2luZy9vc3FfbG9jay5jOjE0MzpcXHQgKiBpcyBpbXBsZW1lbnRlZCB3aXRoIGEgbW9uaXRvci13YWl0LiB2Y3B1X2lzX3ByZWVtcHRlZCgpIHJlbGllcyBvblxcbmtlcm5lbC9sb2NraW5nL29zcV9sb2NrLmMtMTQ0LVxcdCAqIHBvbGxpbmcsIGJlIGNhcmVmdWwuXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9vc3FfbG9jay5jLTE0Ni1cXHRpZiAoc21wX2NvbmRfbG9hZF9yZWxheGVkKFxcdTAwMjZub2RlLVxcdTAwM2Vsb2NrZWQsIFZBTCB8fCBuZWVkX3Jlc2NoZWQoKSB8fFxcbmtlcm5lbC9sb2NraW5nL29zcV9sb2NrLmM6MTQ3OlxcdFxcdFxcdFxcdCAgdmNwdV9pc19wcmVlbXB0ZWQobm9kZV9jcHUobm9kZS1cXHUwMDNlcHJldikpKSlcXG5rZXJuZWwvbG9ja2luZy9vc3FfbG9jay5jLTE0OC1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODExPXN0YXRpYyB2b2lkIHVwZGF0ZV9ycV9jbG9ja190YXNrKHN0cnVjdCBycSAqcnEsIHM2NCBkZWx0YSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODMwLVxcdFxcdGlmIChycV9jcHUgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODMxOlxcdFxcdCAgICB2Y3B1X2lzX3ByZWVtcHRlZChycV9jcHUpKSB7XFxua2VybmVsL3NjaGVkL2NvcmUuYy04MzItXFx0XFx0XFx0cnEtXFx1MDAzZWRlZmVycmVkX2Nsb2NrX3Rhc2sgKz0gZGVsdGE7XFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD0xNDU4PXN0YXRpYyBpbmxpbmUgYm9vbCBhdmFpbGFibGVfaWRsZV9jcHUoaW50IGNwdSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE0NjItXFxua2VybmVsL3NjaGVkL3NjaGVkLmg6MTQ2MzpcXHRpZiAodmNwdV9pc19wcmVlbXB0ZWQoY3B1KSlcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xNDY0LVxcdFxcdHJldHVybiAwO1xcbi0tXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0yMjgtLy8gZnJlZTogd2FzICNkZWZpbmUgWDg2X0ZFQVRVUkVfUFZVTkxPQ0sgICAgICAgICAgICAgICAoIDgqMzIrMjApIC8qIFBWIHVubG9jayBmdW5jdGlvbiAqL1xcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmg6MjI5OiNkZWZpbmUgWDg2X0ZFQVRVUkVfVkNQVVBSRUVNUFRcXHRcXHQoIDgqMzIrMjEpIC8qIFBWIHZjcHVfaXNfcHJlZW1wdGVkIGZ1bmN0aW9uICovXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0yMzAtI2RlZmluZSBYODZfRkVBVFVSRV9URFhfR1VFU1RcXHRcXHQoIDgqMzIrMjIpIC8qIFxcXCJ0ZHhfZ3Vlc3RcXFwiIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIEd1ZXN0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAwOjUzLjIzNDU5NjUxMloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTkxNTg5NDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHZjcHVfaXNfcHJlZW1wdGVkYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB2Y3B1X2lzX3ByZWVtcHRlZGAuIEl0J3MgZGVmaW5lZCBpbiB0aGUgY29yZSBgaW5jbHVkZS9saW51eC9zY2hlZC5oYCBoZWFkZXIsIGJ1dCBJIGtub3cgYXJjaGl0ZWN0dXJlcyBjYW4gb3ZlcnJpZGUgaXQuIFRoZSB4ODYgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSwgaXMgd2hhdCBJJ20gaW50ZXJlc3RlZCBpbiByaWdodCBub3cuIEl0IGxvb2tzIGxpa2UgaXQncyBkZWZpbmVkIHdpdGhpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQtc3BpbmxvY2suaGAsIGJ1dCBvbmx5IGlmIGBDT05GSUdfUEFSQVZJUlRfU1BJTkxPQ0tTYCBpcyBlbmFibGVkLiBUaGF0J3MgZ29vZCB0byBrZWVwIGluIG1pbmQsIGl0J3MgYWxyZWFkeSB0ZWxsaW5nIG1lIGFib3V0IGEgY29uZGl0aW9uYWwgcGF0aC5cblxuTm93LCBhIGJlbGwgaXMgcmluZ2luZyBpbiB0aGUgYmFjayBvZiBteSBoZWFkLi4uIEkgYmVsaWV2ZSBgdmNwdV9pc19wcmVlbXB0ZWRgIGlzIHVzZWQgd2l0aGluIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AsIHdoaWNoIGlzLCBpZiBJIHJlY2FsbCwgdW5kZXIgdGhlIGNvbnRyb2wgb2YgYENPTkZJR19QQVJBVklSVF9USU1FX0FDQ09VTlRJTkdgLiBPa2F5LCBzbyBpZiBgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HYCBpcyBlbmFibGVkLCBidXQgYFBBUkFWSVJUX1NQSU5MT0NLU2AgaXNuJ3QsIGB2Y3B1X2lzX3ByZWVtcHRlZGAgd2lsbCBzaW1wbHkgZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvc2NoZWQuaGAsIHdoaWNoIEknbSBhc3N1bWluZyBpcyBqdXN0IGEgYmFzaWMgYHJldHVybiBmYWxzZWAuIFRvIGNvbmZpcm0gdGhhdCwgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZSBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2xpbnV4L3NjaGVkLmhgLiBMZXQncyB0YWtlIGEgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwOTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6MDA6NTguODI2MTg4NzcxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NjaGVkLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjMwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjMwMDpcXHRcXG4yMzAxOlxcdC8qXFxuMjMwMjpcXHQgKiBJbiBvcmRlciB0byByZWR1Y2UgdmFyaW91cyBsb2NrIGhvbGRlciBwcmVlbXB0aW9uIGxhdGVuY2llcyBwcm92aWRlIGFuXFxuMjMwMzpcXHQgKiBpbnRlcmZhY2UgdG8gc2VlIGlmIGEgdkNQVSBpcyBjdXJyZW50bHkgcnVubmluZyBvciBub3QuXFxuMjMwNDpcXHQgKlxcbjIzMDU6XFx0ICogVGhpcyBhbGxvd3MgdXMgdG8gdGVybWluYXRlIG9wdGltaXN0aWMgc3BpbiBsb29wcyBhbmQgYmxvY2ssIGFuYWxvZ291cyB0b1xcbjIzMDY6XFx0ICogdGhlIG5hdGl2ZSBvcHRpbWlzdGljIHNwaW4gaGV1cmlzdGljIG9mIHRlc3RpbmcgaWYgdGhlIGxvY2sgb3duZXIgdGFzayBpc1xcbjIzMDc6XFx0ICogcnVubmluZyBvciBub3QuXFxuMjMwODpcXHQgKi9cXG4yMzA5OlxcdCNpZm5kZWYgdmNwdV9pc19wcmVlbXB0ZWRcXG4yMzEwOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X2lzX3ByZWVtcHRlZChpbnQgY3B1KVxcbjIzMTE6XFx0e1xcbjIzMTI6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjIzMTM6XFx0fVxcbjIzMTQ6XFx0I2VuZGlmXFxuMjMxNTpcXHRcXG4yMzE2OlxcdGV4dGVybiBsb25nIHNjaGVkX3NldGFmZmluaXR5KHBpZF90IHBpZCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5ld19tYXNrKTtcXG4yMzE3OlxcdGV4dGVybiBsb25nIHNjaGVkX2dldGFmZmluaXR5KHBpZF90IHBpZCwgc3RydWN0IGNwdW1hc2sgKm1hc2spO1xcbjIzMTg6XFx0XFxuMjMxOTpcXHQjaWZuZGVmIFRBU0tfU0laRV9PRlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMjowMDo1OC44MjYzMjcxMTFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ2MzkzMzQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgbmV3IGNvZGUgaW4gYHVwZGF0ZV9ycV9jbG9ja190YXNrYCBpcyByb2J1c3RseSB0ZXN0ZWQuIEhtbSwgaXQgbG9va3MgbGlrZSBmb3IgYHZjcHVfaXNfcHJlZW1wdGVkYCB0byByZXR1cm4gdHJ1ZSBpbiB0aGUgaW50ZW5kZWQgc2NlbmFyaW9zLCBJIG1pZ2h0IG5lZWQgdG8gZW5hYmxlIGBQQVJBVklSVF9TUElOTE9DS1NgIGFzIHdlbGwuIFRoYXQgcmluZ3MgYSBiZWxsLCBJIHRoaW5rIHRoYXQgd291bGQgYmUgdGhlIGJlc3Qgd2F5IHRvIGdldCBjb21wcmVoZW5zaXZlIGNvdmVyYWdlIGhlcmUuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBQQVJBVklSVF9TUElOTE9DS1NgLCBzbyBJJ2xsIGdvIHRha2UgYSBsb29rIGluIGBhcmNoL3g4Ni9LY29uZmlnYCB0byBjb25maXJtIG15IHN1c3BpY2lvbi4gSG9wZWZ1bGx5LCBpdCdzIHN0cmFpZ2h0Zm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5MTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAxOjAzLjI5MDI2MzA4NVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4OTAzMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBUkFWSVJUX1NQSU5MT0NLU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9ODA4PWNvbmZpZyBQQVJBVklSVF9YWExcXG4tLVxcbmFyY2gveDg2L0tjb25maWctODEyLVxcbmFyY2gveDg2L0tjb25maWc6ODEzOmNvbmZpZyBQQVJBVklSVF9TUElOTE9DS1NcXG5hcmNoL3g4Ni9LY29uZmlnLTgxNC1cXHRib29sIFxcXCJQYXJhdmlydHVhbGl6YXRpb24gbGF5ZXIgZm9yIHNwaW5sb2Nrc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6MDE6MDMuMzM4MTYwMTRaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1ODM3NzI1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB4ODYgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgZm9jdXMgaXMgb24gdGhlIGBhcmNoL3g4Ni9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgODEzLiBJJ20gYXNzdW1pbmcgdGhhdCB0aGlzIHNlY3Rpb24gbGlrZWx5IGdvdmVybnMgc29tZSBrZXkgZmVhdHVyZSBvciBhc3BlY3Qgb2YgdGhlIHg4NiBhcmNoaXRlY3R1cmUgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGRlY2lzaW9ucyBhcmUgYmVpbmcgbWFkZSB0aGVyZS4gSSBuZWVkIHRvIGtub3cgd2hhdCdzIGJlaW5nIGNvbmZpZ3VyZWQsIHVuZGVyIHdoYXQgY29uZGl0aW9ucywgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBicm9hZGVyIHN5c3RlbS4gUGVyaGFwcyBJJ20gdHJhY2tpbmcgZG93biBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uJ3MgZGVwZW5kZW5jaWVzLCB0cnlpbmcgdG8gdHJvdWJsZXNob290IGEgYnVpbGQgaXNzdWUsIG9yIHNpbXBseSByZWZyZXNoaW5nIG15IHVuZGVyc3RhbmRpbmcgb2YgYSBwYXJ0aWN1bGFyIHg4NiBmZWF0dXJlLiBXaGF0ZXZlciB0aGUgcmVhc29uLCBsaW5lIDgxMyBpcyBteSBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBkZWVwIGRpdmUuIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgZmluZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyNzksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMjowMTowNy41OTY1NDAxMTVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODEwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODEwOlxcdFxcdGRlcGVuZHMgb24gWDg2XzY0XFxuIDgxMTpcXHRcXHRzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxcbiA4MTI6XFx0XFxuIDgxMzpcXHRjb25maWcgUEFSQVZJUlRfU1BJTkxPQ0tTXFxuIDgxNDpcXHRcXHRib29sIFxcXCJQYXJhdmlydHVhbGl6YXRpb24gbGF5ZXIgZm9yIHNwaW5sb2Nrc1xcXCJcXG4gODE1OlxcdFxcdGRlcGVuZHMgb24gUEFSQVZJUlQgXFx1MDAyNlxcdTAwMjYgU01QXFxuIDgxNjpcXHRcXHRoZWxwXFxuIDgxNzpcXHRcXHQgIFBhcmF2aXJ0dWFsaXplZCBzcGlubG9ja3MgYWxsb3cgYSBwdm9wcyBiYWNrZW5kIHRvIHJlcGxhY2UgdGhlXFxuIDgxODpcXHRcXHQgIHNwaW5sb2NrIGltcGxlbWVudGF0aW9uIHdpdGggc29tZXRoaW5nIHZpcnR1YWxpemF0aW9uLWZyaWVuZGx5XFxuIDgxOTpcXHRcXHQgIChmb3IgZXhhbXBsZSwgYmxvY2sgdGhlIHZpcnR1YWwgQ1BVIHJhdGhlciB0aGFuIHNwaW5uaW5nKS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6MDE6MDcuNTk2NzAyMDY1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NDk1MjczMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNIENvbmZpZ3VyYXRpb24gYW5kIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBgUEFSQVZJUlRfU1BJTkxPQ0tTYCBmaXRzIGludG8gdGhpcy4gSXQncyBjbGVhciB0aGF0IGl0IGRlcGVuZHMgb24gYFBBUkFWSVJUYCBhbmQgYFNNUGAsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIGFkZCBgUEFSQVZJUlRfU1BJTkxPQ0tTYCB0byBgRW5hYmxlQ29uZmlnc2AuIFRoYXQncyBhIG5lY2Vzc2FyeSBkZXBlbmRlbmN5LlxuXG5MZXQncyBkbyBhIHF1aWNrIHJldmlldyBvZiB0aGUgcmVsZXZhbnQgY29uZmlncyBoZXJlOiBgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HYCwgYFBBUkFWSVJUX1NQSU5MT0NLU2AsIGBQQVJBVklSVGAsIGBIWVBFUlZJU09SX0dVRVNUYCwgYFZJUlRVQUxJWkFUSU9OYCwgYEtWTWAsIGFuZCBvZiBjb3Vyc2UgYFNNUGAuIEFsdGhvdWdoIGBTTVBgIGlzIHVzdWFsbHkgYSBkZWZhdWx0LCBpdCdzIGFsd2F5cyBnb29kIHRvIGtlZXAgaW4gbWluZC5cblxuTm93LCBteSBmb2N1cyBpcyBvbiB0aGUgY3J1Y2lhbCBzeW1ib2wgZm9yIG9wdGltaXphdGlvbi4gSSdtIGN1cnJlbnRseSBsZWFuaW5nIHRvd2FyZHMgYGt2bV9zZXRfbXNyX2NvbW1vbmAuIElzIHRoZXJlIGFueXRoaW5nIGVsc2UgdGhhdCB3b3VsZCBiZSBiZXR0ZXI/IEkgY29uc2lkZXJlZCBgdXBkYXRlX3JxX2Nsb2NrX3Rhc2tgLCBidXQgaXQncyBzdGF0aWMsIHNvIG5vIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBgdXBkYXRlX3JxX2Nsb2NrYCBpcyBhIHZlcnkgZ2VuZXJpYyBob3QgcGF0aCwgc28gSSdsbCBhdm9pZCBpdC4gVGhlIGByZWNvcmRfc3RlYWxfdGltZWAgaXMgYW5vdGhlciBzdGF0aWMgb25lLCBzbyBJJ2xsIHNraXAgaXQuIFRoZW4gdGhlcmUncyBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLCB3aGljaCBpcyBhIGhvdCBwYXRoIGJ1dCBpdCdzIHJlYWxseSB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIEtWTSB2Q1BVIHJ1biwgd2hpY2ggaXNuJ3Qgd2hhdCBJJ20gbG9va2luZyBmb3IuXG5cbmBrdm1fc2V0X21zcl9jb21tb25gIHNlZW1zIGlkZWFsLiBJdCdzIG5vdCBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIHNpbmNlIE1TUiB3cml0ZXMgYXJlIHJlbGF0aXZlbHkgcmFyZSBjb21wYXJlZCB0byBWTSBleGl0cywgYW5kIGl0IGRpcmVjdGx5IHRyaWdnZXJzIGBLVk1fUkVRX1NURUFMX1VQREFURWAsIHdoaWNoIHRoZW4gY2FsbHMgYHJlY29yZF9zdGVhbF90aW1lYCwgc28gSSdsbCBoYXZlIHRoZSB2aXNpYmlsaXR5IEkgbmVlZC5cblxuV2FpdCwgdGhvdWdoLCBga3ZtX3NldF9tc3JfY29tbW9uYCBpcyBhY3R1YWxseSBhIHJhdGhlciBsYXJnZSBmdW5jdGlvbiwgYW5kIEknZCBwcmVmZXIgc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMuIExldCBtZSBkb3VibGUtY2hlY2suLi4gWWVzLCBpdCBoYW5kbGVzIGBNU1JfS1ZNX1NURUFMX1RJTUVgLCBidXQgY2FuIEkgcGlucG9pbnQgYSBtb3JlIGZvY3VzZWQgZnVuY3Rpb24/IENoZWNraW5nIGZvciBvdGhlciBvcHRpb25zIG5vdy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY5MywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAxOjE1LjE0NjIzMTUzOFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0MDI4MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3NldF9tc3JfY29tbW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9Mzg3OT1zdGF0aWMgdm9pZCBrdm1fZ2V0X3hzdGF0ZV9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTM4ODMtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjM4ODQ6aW50IGt2bV9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTM4ODUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTQyODgtfVxcbmFyY2gveDg2L2t2bS94ODYuYzo0Mjg5OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X21zcl9jb21tb24pO1xcbmFyY2gveDg2L2t2bS94ODYuYy00MjkwLVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTE0MDcxPXZvaWQga3ZtX2FyY2hfYXN5bmNfcGFnZV9wcmVzZW50X3F1ZXVlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTQwNzQtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjE0MDc1OlxcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX21iKCkgaW4ga3ZtX3NldF9tc3JfY29tbW9uKCkuICovXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTE0MDc2LVxcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAxOjE1LjE5NTY1MDM3M1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDE5Mzg0NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBTdGVhbCBUaW1lIEFjY291bnRpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGBrdm1fc2V0X21zcl9jb21tb25gIGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhcyB0aGUga2V5IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLiBJdCdzIGV4cG9ydGVkLCB3aGljaCBpcyBnb29kLCBhbmQgaXQgc2VlbXMgY2VudHJhbCB0byB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGJlaW5nIG1vZGlmaWVkIOKAkyB0aGUgTVNSIHdyaXRlIHRoYXQgZW5hYmxlcyBhbmQgYWZmZWN0cyB0aGUgc3RlYWwgdGltZSBhY2NvdW50aW5nIGxvZ2ljIHdpdGhpbiBLVk0uXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIGRpZCBhIHF1aWNrIG1lbnRhbCBzY2FuLiBJIGFsc28gY29uc2lkZXJlZCBga3ZtX2FyY2hfdmNwdV9sb2FkYCBzaW5jZSB0aGF0J3MgaW52b2x2ZWQgb24gZXZlcnkgdkNQVSBjb250ZXh0IHN3aXRjaCwgd2hpY2ggbWFrZXMgaXQgYSB2ZXJ5IGhvdCBwYXRoLiBIb3dldmVyLCBhZnRlciB0aGF0IHF1aWNrIGxvb2sgb3ZlciwgYGt2bV9zZXRfbXNyX2NvbW1vbmAgc3RpbGwgZmVlbHMgbGlrZSB0aGUgYmVzdCBiZXQuIEl0IHNlZW1zIHRvIGJlIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGNydWNpYWwgTVNSIHdyaXRlIHJlbGF0ZWQgdG8gdGhlIGNoYW5nZXMuXG5cblNvLCBoZXJlJ3MgdGhlIGZpbmFsIHZlcmRpY3Q6XG5cbiogICAqKldvcnRoRnV6emluZzogVHJ1ZSoqLiBUaGlzIHBhdGNoIGRpcmVjdGx5IHRvdWNoZXMgY3JpdGljYWwgS1ZNIGFuZCBzY2hlZHVsZXIgbG9naWMgcmVsYXRlZCB0byB0aW1lIGFjY291bnRpbmcuIEZ1bmN0aW9uYWwgY2hhbmdlcyB3YXJyYW50IGZ1enppbmcuXG4qICAgKipGb2N1c1N5bWJvbHM6IFxcW+KAnGt2bV9zZXRfbXNyX2NvbW1vbuKAnV0qKi4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgcHJpbWFyeSB0YXJnZXQgZHVlIHRvIGl0cyBkaXJlY3Qgcm9sZSBpbiBoYW5kbGluZyB0aGUgTVNSIHdyaXRlIHJlc3BvbnNpYmxlIGZvciB0aGUgY2hhbmdlcyB0byB0aGUgc3RlYWwgdGltZSBsb2dpYy5cbiogICAqKkVuYWJsZUNvbmZpZ3M6IFxcW+KAnFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR+KAnSwg4oCcUEFSQVZJUlRfU1BJTkxPQ0tT4oCdLCDigJxQQVJBVklSVOKAnSwg4oCcSFlQRVJWSVNPUl9HVUVTVOKAnSwg4oCcVklSVFVBTElaQVRJT07igJ0sIOKAnEtWTeKAnV0qKi4gVGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZWxldmFudCBiZWNhdXNlIHRoZXkgZW5hYmxlIHRoZSBjb3JlIGZlYXR1cmVzIGFuZCB1bmRlcmx5aW5nIHZpcnR1YWxpemF0aW9uIHRlY2hub2xvZ2llcyB0aGF0IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGguXG4qICAgKipSZWFzb25pbmc6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzdGVhbCB0aW1lIGFjY291bnRpbmcgbG9naWMgaW4gS1ZNIGFuZCB0aGUgc2NoZWR1bGVyLiBJdCBjaGFuZ2VzIHRoZSBvcmRlciBvZiB1c2VyIGFjY2VzcyBhbmQgbWVtb3J5IGJhcnJpZXJzIGluIGByZWNvcmRfc3RlYWxfdGltZWAgKEtWTSkgYW5kIGRlZmVycyBjbG9jayB0YXNrIHVwZGF0ZXMgaW4gYHVwZGF0ZV9ycV9jbG9ja190YXNrYCAoc2NoZWR1bGVyKSB3aGVuIHRoZSB2Q1BVIGlzIHByZWVtcHRlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBhbmQgS1ZNIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4gYGt2bV9zZXRfbXNyX2NvbW1vbmAgaGFuZGxlcyB0aGUgTVNSIHdyaXRlIHRoYXQgZW5hYmxlcyBzdGVhbCB0aW1lIGFjY291bnRpbmcgYW5kIHRyaWdnZXJzIHRoZSBLVk0gbG9naWMuXCIqKiBUaGlzIGV4cGxhaW5zIHRoZSBjcml0aWNhbCBjaGFuZ2VzIGludm9sdmVkLCBhbmQgaG93IGBrdm1fc2V0X21zcl9jb21tb25gIGRpcmVjdGx5IHRpZXMgaW50byB0aGUgY2hhbmdlcywgc2VydmluZyBhcyB0aGUgdHJpZ2dlciBmb3IgdGhlIG1vZGlmaWVkIEtWTSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk5NzcsIk91dHB1dFRva2VucyI6MjAxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAxOjIzLjYxNTAzNzUzNVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1Mzk2MTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdcIixcbiAgICBcIlBBUkFWSVJUX1NQSU5MT0NLU1wiLFxuICAgIFwiUEFSQVZJUlRcIixcbiAgICBcIkhZUEVSVklTT1JfR1VFU1RcIixcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCIsXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fc2V0X21zcl9jb21tb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3RlYWwgdGltZSBhY2NvdW50aW5nIGxvZ2ljIGluIEtWTSBhbmQgdGhlIHNjaGVkdWxlci4gSXQgY2hhbmdlcyB0aGUgb3JkZXIgb2YgdXNlciBhY2Nlc3MgYW5kIG1lbW9yeSBiYXJyaWVycyBpbiBgcmVjb3JkX3N0ZWFsX3RpbWVgIChLVk0pIGFuZCBkZWZlcnMgY2xvY2sgdGFzayB1cGRhdGVzIGluIGB1cGRhdGVfcnFfY2xvY2tfdGFza2AgKHNjaGVkdWxlcikgd2hlbiB0aGUgdkNQVSBpcyBwcmVlbXB0ZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgYW5kIEtWTSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuIGBrdm1fc2V0X21zcl9jb21tb25gIGhhbmRsZXMgdGhlIE1TUiB3cml0ZSB0aGF0IGVuYWJsZXMgc3RlYWwgdGltZSBhY2NvdW50aW5nIGFuZCB0cmlnZ2VycyB0aGUgS1ZNIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1wiLFxuICAgIFwiUEFSQVZJUlRfU1BJTkxPQ0tTXCIsXG4gICAgXCJQQVJBVklSVFwiLFxuICAgIFwiSFlQRVJWSVNPUl9HVUVTVFwiLFxuICAgIFwiVklSVFVBTElaQVRJT05cIixcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9zZXRfbXNyX2NvbW1vblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzdGVhbCB0aW1lIGFjY291bnRpbmcgbG9naWMgaW4gS1ZNIGFuZCB0aGUgc2NoZWR1bGVyLiBJdCBjaGFuZ2VzIHRoZSBvcmRlciBvZiB1c2VyIGFjY2VzcyBhbmQgbWVtb3J5IGJhcnJpZXJzIGluIGByZWNvcmRfc3RlYWxfdGltZWAgKEtWTSkgYW5kIGRlZmVycyBjbG9jayB0YXNrIHVwZGF0ZXMgaW4gYHVwZGF0ZV9ycV9jbG9ja190YXNrYCAoc2NoZWR1bGVyKSB3aGVuIHRoZSB2Q1BVIGlzIHByZWVtcHRlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBhbmQgS1ZNIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4gYGt2bV9zZXRfbXNyX2NvbW1vbmAgaGFuZGxlcyB0aGUgTVNSIHdyaXRlIHRoYXQgZW5hYmxlcyBzdGVhbCB0aW1lIGFjY291bnRpbmcgYW5kIHRyaWdnZXJzIHRoZSBLVk0gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjAxOjIzLjY5MDQzOTUyN1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyNjgwOTY4MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMjowMToyMy42OTA5MzUxOTdaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjAyNjc1OTcxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcmRlciBvZiBndWVzdCBtZW1vcnkgYWNjZXNzZXMgaW4gYHJlY29yZF9zdGVhbF90aW1lYCBhbmQgYWRkcyBhIG5ldyBmaWVsZCBgZGVmZXJyZWRfY2xvY2tfdGFza2AgdG8gYHN0cnVjdCBycWAgZm9yIHBhcmF2aXJ0IHN0ZWFsIHRpbWUgYWNjb3VudGluZy4gVGhlIGd1ZXN0IG1lbW9yeSBhY2Nlc3NlcyB1c2UgYHVuc2FmZV9nZXRfdXNlcmAgd2hpY2ggaW5pdGlhbGl6ZXMgdGhlIGxvY2FsIHZhcmlhYmxlcyAoYHZlcnNpb25gIGFuZCBgc3RlYWxgKSB1cG9uIHN1Y2Nlc3MsIG9yIGp1bXBzIHRvIGFuIGVycm9yIGxhYmVsIHVwb24gZmFpbHVyZSwgcHJldmVudGluZyBhbnkgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzLiBUaGUgbmV3IGBkZWZlcnJlZF9jbG9ja190YXNrYCBmaWVsZCBpcyBwYXJ0IG9mIGBzdHJ1Y3QgcnFgLCB3aGljaCBpcyBhIHBlci1DUFUgdmFyaWFibGUgYW5kIHRodXMgemVyby1pbml0aWFsaXplZCBieSBkZWZhdWx0LiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgbm9yIGRvZXMgaXQgY29weSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODY2ODU4NjdkNWU5Y2Y3MDZmYzhkMzQxYjA2ZjE3OWU2M2RlZDcxZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDAxOjUxOjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5pbmRleCA2OTQ2OWJiZGM4NGE4Li41MjVhMTQ0ODE5NWUwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC0zNzUxLDYgKzM3NTEsMzUgQEAgc3RhdGljIHZvaWQgcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0fVxuIFxuIFx0c3QgPSAoc3RydWN0IGt2bV9zdGVhbF90aW1lIF9fdXNlciAqKWdoYy1cdTAwM2VodmE7XG4rXG4rXHRpZiAoIXVzZXJfYWNjZXNzX2JlZ2luKHN0LCBzaXplb2YoKnN0KSkpXG4rXHRcdHJldHVybjtcbitcbitcdHVuc2FmZV9nZXRfdXNlcih2ZXJzaW9uLCBcdTAwMjZzdC1cdTAwM2V2ZXJzaW9uLCBvdXQpO1xuK1x0aWYgKHZlcnNpb24gXHUwMDI2IDEpXG4rXHRcdHZlcnNpb24gKz0gMTsgIC8qIGZpcnN0IHRpbWUgd3JpdGUsIHJhbmRvbSBqdW5rICovXG4rXG4rXHR2ZXJzaW9uICs9IDE7XG4rXHR1bnNhZmVfcHV0X3VzZXIodmVyc2lvbiwgXHUwMDI2c3QtXHUwMDNldmVyc2lvbiwgb3V0KTtcbitcbitcdC8qIFBhaXJzIHdpdGggdGhlIGd1ZXN0IHNpZGUgdmlydF9ybWIoKSBpbiBrdm1fc3RlYWxfY2xvY2soKS4gKi9cbitcdHNtcF93bWIoKTtcbitcbitcdHVuc2FmZV9nZXRfdXNlcihzdGVhbCwgXHUwMDI2c3QtXHUwMDNlc3RlYWwsIG91dCk7XG4rXHRzdGVhbCArPSBjdXJyZW50LVx1MDAzZXNjaGVkX2luZm8ucnVuX2RlbGF5IC1cbitcdFx0dmNwdS1cdTAwM2VhcmNoLnN0Lmxhc3Rfc3RlYWw7XG4rXHR2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbCA9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXk7XG4rXHR1bnNhZmVfcHV0X3VzZXIoc3RlYWwsIFx1MDAyNnN0LVx1MDAzZXN0ZWFsLCBvdXQpO1xuK1xuK1x0dmVyc2lvbiArPSAxO1xuK1x0dW5zYWZlX3B1dF91c2VyKHZlcnNpb24sIFx1MDAyNnN0LVx1MDAzZXZlcnNpb24sIG91dCk7XG4rXG4rXHQvKlxuK1x0ICogUHVibGlzaCB0aGUgc3RlYWx0aW1lIGJlZm9yZSBtYWtpbmcgdGhlIHZDUFUgbG9vayBydW5uYWJsZSB0b1xuK1x0ICogdGhlIGd1ZXN0LlxuK1x0ICovXG4rXHRzbXBfd21iKCk7XG4rXG4gXHQvKlxuIFx0ICogRG9pbmcgYSBUTEIgZmx1c2ggaGVyZSwgb24gdGhlIGd1ZXN0J3MgYmVoYWxmLCBjYW4gYXZvaWRcbiBcdCAqIGV4cGVuc2l2ZSBJUElzLlxuQEAgLTM3NTksOSArMzc4OCw2IEBAIHN0YXRpYyB2b2lkIHJlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0dTggc3RfcHJlZW1wdGVkID0gMDtcbiBcdFx0aW50IGVyciA9IC1FRkFVTFQ7XG4gXG4tXHRcdGlmICghdXNlcl9hY2Nlc3NfYmVnaW4oc3QsIHNpemVvZigqc3QpKSlcbi1cdFx0XHRyZXR1cm47XG4tXG4gXHRcdGFzbSB2b2xhdGlsZShcIjE6IHhjaGdiICUwLCAlMlxcblwiXG4gXHRcdFx0ICAgICBcInhvciAlMSwgJTFcXG5cIlxuIFx0XHRcdCAgICAgXCIyOlxcblwiXG5AQCAtMzc4MSwzNyArMzgwNywxNyBAQCBzdGF0aWMgdm9pZCByZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdGlmIChzdF9wcmVlbXB0ZWQgXHUwMDI2IEtWTV9WQ1BVX0ZMVVNIX1RMQilcbiBcdFx0XHRrdm1fdmNwdV9mbHVzaF90bGJfZ3Vlc3QodmNwdSk7XG4gXG4tXHRcdGlmICghdXNlcl9hY2Nlc3NfYmVnaW4oc3QsIHNpemVvZigqc3QpKSlcbi1cdFx0XHRnb3RvIGRpcnR5O1xuIFx0fSBlbHNlIHtcbi1cdFx0aWYgKCF1c2VyX2FjY2Vzc19iZWdpbihzdCwgc2l6ZW9mKCpzdCkpKVxuLVx0XHRcdHJldHVybjtcbi1cbiBcdFx0dW5zYWZlX3B1dF91c2VyKDAsIFx1MDAyNnN0LVx1MDAzZXByZWVtcHRlZCwgb3V0KTtcbiBcdFx0dmNwdS1cdTAwM2VhcmNoLnN0LnByZWVtcHRlZCA9IDA7XG4rXHRcdHVzZXJfYWNjZXNzX2VuZCgpO1xuIFx0fVxuIFxuLVx0dW5zYWZlX2dldF91c2VyKHZlcnNpb24sIFx1MDAyNnN0LVx1MDAzZXZlcnNpb24sIG91dCk7XG4tXHRpZiAodmVyc2lvbiBcdTAwMjYgMSlcbi1cdFx0dmVyc2lvbiArPSAxOyAgLyogZmlyc3QgdGltZSB3cml0ZSwgcmFuZG9tIGp1bmsgKi9cbi1cbi1cdHZlcnNpb24gKz0gMTtcbi1cdHVuc2FmZV9wdXRfdXNlcih2ZXJzaW9uLCBcdTAwMjZzdC1cdTAwM2V2ZXJzaW9uLCBvdXQpO1xuLVxuLVx0c21wX3dtYigpO1xuLVxuLVx0dW5zYWZlX2dldF91c2VyKHN0ZWFsLCBcdTAwMjZzdC1cdTAwM2VzdGVhbCwgb3V0KTtcbi1cdHN0ZWFsICs9IGN1cnJlbnQtXHUwMDNlc2NoZWRfaW5mby5ydW5fZGVsYXkgLVxuLVx0XHR2Y3B1LVx1MDAzZWFyY2guc3QubGFzdF9zdGVhbDtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zdC5sYXN0X3N0ZWFsID0gY3VycmVudC1cdTAwM2VzY2hlZF9pbmZvLnJ1bl9kZWxheTtcbi1cdHVuc2FmZV9wdXRfdXNlcihzdGVhbCwgXHUwMDI2c3QtXHUwMDNlc3RlYWwsIG91dCk7XG4tXG4tXHR2ZXJzaW9uICs9IDE7XG4tXHR1bnNhZmVfcHV0X3VzZXIodmVyc2lvbiwgXHUwMDI2c3QtXHUwMDNldmVyc2lvbiwgb3V0KTtcbitcdG1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KHZjcHUtXHUwMDNla3ZtLCBnaGMtXHUwMDNlbWVtc2xvdCwgZ3BhX3RvX2dmbihnaGMtXHUwMDNlZ3BhKSk7XG4rXHRyZXR1cm47XG4gXG4gIG91dDpcbiBcdHVzZXJfYWNjZXNzX2VuZCgpO1xuLSBkaXJ0eTpcbiBcdG1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KHZjcHUtXHUwMDNla3ZtLCBnaGMtXHUwMDNlbWVtc2xvdCwgZ3BhX3RvX2dmbihnaGMtXHUwMDNlZ3BhKSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jXG5pbmRleCBmNzgyNzUxOTIwMzZiLi41NmFhNDM5MTgyYzc1IDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2NvcmUuY1xuKysrIGIva2VybmVsL3NjaGVkL2NvcmUuY1xuQEAgLTgxNiw2ICs4MTYsMzAgQEAgc3RhdGljIHZvaWQgdXBkYXRlX3JxX2Nsb2NrX3Rhc2soc3RydWN0IHJxICpycSwgczY0IGRlbHRhKVxuICAqL1xuIFx0czY0IF9fbWF5YmVfdW51c2VkIHN0ZWFsID0gMCwgaXJxX2RlbHRhID0gMDtcbiBcbisjaWZkZWYgQ09ORklHX1BBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xuK1x0aWYgKHN0YXRpY19rZXlfZmFsc2UoKFx1MDAyNnBhcmF2aXJ0X3N0ZWFsX3JxX2VuYWJsZWQpKSkge1xuK1x0XHRpbnQgcnFfY3B1ID0gY3B1X29mKHJxKTtcbitcbitcdFx0LypcbitcdFx0ICogQSByZW1vdGUgQ1BVIGNhbiB1cGRhdGUgdGhpcyBycSBiZWZvcmUgdGhlIG93bmVyIHZDUFVcbitcdFx0ICogaGFzIHJlLWVudGVyZWQgdGhlIGd1ZXN0IGFuZCByZWZyZXNoZWQgaXRzIHN0ZWFsdGltZVxuK1x0XHQgKiBzdGF0ZS4gRG8gbm90IGNoYXJnZSB0aGF0IGVsYXBzZWQgdGltZSB0byB0aGUgY3VycmVudFxuK1x0XHQgKiB0YXNrIHVudGlsIHN0ZWFsdGltZSBjYW4gYmUgc2FtcGxlZCBhZnRlciB0aGUgdkNQVSBpc1xuK1x0XHQgKiBubyBsb25nZXIgcHJlZW1wdGVkLlxuK1x0XHQgKi9cbitcdFx0aWYgKHJxX2NwdSAhPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgdmNwdV9pc19wcmVlbXB0ZWQocnFfY3B1KSkge1xuK1x0XHRcdHJxLVx1MDAzZWRlZmVycmVkX2Nsb2NrX3Rhc2sgKz0gZGVsdGE7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChycS1cdTAwM2VkZWZlcnJlZF9jbG9ja190YXNrKSB7XG4rXHRcdFx0ZGVsdGEgKz0gcnEtXHUwMDNlZGVmZXJyZWRfY2xvY2tfdGFzaztcbitcdFx0XHRycS1cdTAwM2VkZWZlcnJlZF9jbG9ja190YXNrID0gMDtcbitcdFx0fVxuK1x0fVxuKyNlbmRpZlxuK1xuICNpZmRlZiBDT05GSUdfSVJRX1RJTUVfQUNDT1VOVElOR1xuIFx0aWYgKGlycXRpbWVfZW5hYmxlZCgpKSB7XG4gXHRcdGlycV9kZWx0YSA9IGlycV90aW1lX3JlYWQoY3B1X29mKHJxKSkgLSBycS1cdTAwM2VwcmV2X2lycV90aW1lO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oIGIva2VybmVsL3NjaGVkL3NjaGVkLmhcbmluZGV4IGU2NTZjNzA1OWJmODYuLjRmZDAwMjI4YWZlZjAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvc2NoZWQuaFxuKysrIGIva2VybmVsL3NjaGVkL3NjaGVkLmhcbkBAIC0xMzI1LDYgKzEzMjUsNyBAQCBzdHJ1Y3QgcnEge1xuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HXG4gXHR1NjRcdFx0XHRwcmV2X3N0ZWFsX3RpbWVfcnE7XG4rXHR1NjRcdFx0XHRkZWZlcnJlZF9jbG9ja190YXNrO1xuICNlbmRpZlxuIFxuIFx0LyogY2FsY19sb2FkIHJlbGF0ZWQgZmllbGRzICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMjowMToyMy42OTA5MzU5NTdaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjAyNjc1NzQzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gTmV3IFJpc2tzIEludHJvZHVjZWQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdGFza2VkIHdpdGggYXNzZXNzaW5nIHRoaXMgcGF0Y2ggZm9yIHBvdGVudGlhbCBLTVNBTiB2dWxuZXJhYmlsaXRpZXMuIE15IGluaXRpYWwgc2NhbiBmb2N1c2VkIG9uIHRoZSBtb2RpZmljYXRpb25zIGFjcm9zcyBgYXJjaC94ODYva3ZtL3g4Ni5jYCwgYGtlcm5lbC9zY2hlZC9jb3JlLmNgLCBhbmQgYGtlcm5lbC9zY2hlZC9zY2hlZC5oYC5cblxuSW4gYGFyY2gveDg2L2t2bS94ODYuY2AsIHRoZSBjaGFuZ2VzIHdpdGhpbiBgcmVjb3JkX3N0ZWFsX3RpbWVgIGludm9sdmUgcmVvcmRlcmluZyBtZW1vcnkgYWNjZXNzZXMgdG8gdGhlIGd1ZXN0J3MgbWVtb3J5IHNwYWNlIHVzaW5nIGB1bnNhZmVfZ2V0X3VzZXJgIGFuZCBgdW5zYWZlX3B1dF91c2VyYC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYm90aCBgdmVyc2lvbmAgYW5kIGBzdGVhbGAgYXJlIHN0YWNrLWFsbG9jYXRlZCBsb2NhbCB2YXJpYWJsZXMsICppbml0aWFsaXplZCBieSBgdW5zYWZlX2dldF91c2VyYCogYmVmb3JlIHRoZXkncmUgZXZlciB1c2VkLiBJZiBgdW5zYWZlX2dldF91c2VyYCBmYWlscywgd2UganVtcCBvdXQgd2l0aCBhbiBlcnJvciwgc28gbm8gdW5pbml0aWFsaXplZCBzdGFjayB2YWx1ZXMgYXJlIGV2ZXIgdXNlZC4gVGhlIGNvZGUncyByZWFkaW5nIGZyb20gYW5kIHdyaXRpbmcgdG8gdGhlICpndWVzdCdzKiBtZW1vcnksIG5vdCBrZXJuZWwgbWVtb3J5LCBhbmQgdGhlIGFjY2VzcyBpcyBhcHByb3ByaWF0ZWx5IHByb3RlY3RlZC4gSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGUgdmFyaWFibGUgZGVjbGFyYXRpb25zLCBlbnN1cmluZyB0aGV5J3JlIGxvY2FsIHRvIHRoZSBmdW5jdGlvbiBhbmQgYXJlIGNvcnJlY3RseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IGlzIGV2ZXIgZXhwb3NlZCB0byB1c2VyIHNwYWNlLlxuXG5UaGUgY2hhbmdlcyBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AgYXJlIHN0cmFpZ2h0Zm9yd2FyZDogYSBuZXcgZmllbGQsIGBycS1cdTAwM2VkZWZlcnJlZF9jbG9ja190YXNrYCwgaXMgaW50cm9kdWNlZCB3aXRoaW4gYHVwZGF0ZV9ycV9jbG9ja190YXNrYC4gVGhpcyBpcyB3aXRoaW4gYHN0cnVjdCBycWAsIGFuZCBgc3RydWN0IHJxYCBpcyBhIHBlci1DUFUgZGF0YSBzdHJ1Y3R1cmUuIFBlci1DUFUgdmFyaWFibGVzIGFyZSAqYWx3YXlzKiB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBrZXJuZWwsIHJlc2lkaW5nIGluIHRoZSBgLmRhdGEuLnBlcmNwdWAgc2VjdGlvbiBvZiBtZW1vcnkuIEkndmUgZG91YmxlLWNoZWNrZWQgdGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIGJlaGF2aW9yIG9mIHBlci1DUFUgdmFyaWFibGVzLCBjb25maXJtaW5nIHRoYXQgdGhpcyBmaWVsZCBpcyBpbXBsaWNpdGx5IGluaXRpYWxpemVkIHRvIHplcm8uIEV2ZW4gaWYgdGhlcmUncyBhIHRoZW9yZXRpY2FsIGlzc3VlLCB0aGlzIG1lbW9yeSBpcyBlbnRpcmVseSB3aXRoaW4gdGhlIGtlcm5lbCwgYW5kIHdlJ3JlIG5vdCBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLiBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nIGluZm9ybWF0aW9uIGxlYWtzIG9mIGtlcm5lbCB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBzbyB0aGF0J3MgaXJyZWxldmFudCBoZXJlLlxuXG5Ob3csIGxldCdzIGdvIGJhY2sgYW5kIGNhcmVmdWxseSBydW4gdGhyb3VnaCB0aGUgS01TQU4gcnVsZS4gVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlIHRoYXQgKm1pZ2h0KiBjb250YWluIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gbmV3IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLiBObyBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIGVycm9ycyBhbGxvdyBzdXJyb3VuZGluZyBjb2RlIHRvIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIGB1bnNhZmVfZ2V0X3VzZXJgIGlzIGNvcnJlY3RseSB1c2VkLCBpbml0aWFsaXppbmcgdmFyaWFibGVzIHdoZW4gdGhleSBhcmUgcmVhZCBhbmQgcHJvdmlkaW5nIGVycm9yIGNvbmRpdGlvbnMuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIG5ldyBLTVNBTi1zcGVjaWZpYyByaXNrcy4gU3RhbmRhcmQga2VybmVsIG1lbW9yeSBzYWZldHkgdG9vbHMgbGlrZSBLQVNBTiBhcmUgc3VmZmljaWVudC4gSSdtIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDk5LCJPdXRwdXRUb2tlbnMiOjIxMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMjowMTo0My45NTg1MTIzNloiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9yZGVyIG9mIGd1ZXN0IG1lbW9yeSBhY2Nlc3NlcyBpbiBgcmVjb3JkX3N0ZWFsX3RpbWVgIGFuZCBhZGRzIGEgbmV3IGZpZWxkIGBkZWZlcnJlZF9jbG9ja190YXNrYCB0byBgc3RydWN0IHJxYCBmb3IgcGFyYXZpcnQgc3RlYWwgdGltZSBhY2NvdW50aW5nLiBUaGUgZ3Vlc3QgbWVtb3J5IGFjY2Vzc2VzIHVzZSBgdW5zYWZlX2dldF91c2VyYCB3aGljaCBpbml0aWFsaXplcyB0aGUgbG9jYWwgdmFyaWFibGVzIChgdmVyc2lvbmAgYW5kIGBzdGVhbGApIHVwb24gc3VjY2Vzcywgb3IganVtcHMgdG8gYW4gZXJyb3IgbGFiZWwgdXBvbiBmYWlsdXJlLCBwcmV2ZW50aW5nIGFueSB1c2Ugb2YgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMuIFRoZSBuZXcgYGRlZmVycmVkX2Nsb2NrX3Rhc2tgIGZpZWxkIGlzIHBhcnQgb2YgYHN0cnVjdCBycWAsIHdoaWNoIGlzIGEgcGVyLUNQVSB2YXJpYWJsZSBhbmQgdGh1cyB6ZXJvLWluaXRpYWxpemVkIGJ5IGRlZmF1bHQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBub3IgZG9lcyBpdCBjb3B5IHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgb3JkZXIgb2YgZ3Vlc3QgbWVtb3J5IGFjY2Vzc2VzIGluIGByZWNvcmRfc3RlYWxfdGltZWAgYW5kIGFkZHMgYSBuZXcgZmllbGQgYGRlZmVycmVkX2Nsb2NrX3Rhc2tgIHRvIGBzdHJ1Y3QgcnFgIGZvciBwYXJhdmlydCBzdGVhbCB0aW1lIGFjY291bnRpbmcuIFRoZSBndWVzdCBtZW1vcnkgYWNjZXNzZXMgdXNlIGB1bnNhZmVfZ2V0X3VzZXJgIHdoaWNoIGluaXRpYWxpemVzIHRoZSBsb2NhbCB2YXJpYWJsZXMgKGB2ZXJzaW9uYCBhbmQgYHN0ZWFsYCkgdXBvbiBzdWNjZXNzLCBvciBqdW1wcyB0byBhbiBlcnJvciBsYWJlbCB1cG9uIGZhaWx1cmUsIHByZXZlbnRpbmcgYW55IHVzZSBvZiB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcy4gVGhlIG5ldyBgZGVmZXJyZWRfY2xvY2tfdGFza2AgZmllbGQgaXMgcGFydCBvZiBgc3RydWN0IHJxYCwgd2hpY2ggaXMgYSBwZXItQ1BVIHZhcmlhYmxlIGFuZCB0aHVzIHplcm8taW5pdGlhbGl6ZWQgYnkgZGVmYXVsdC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IGNvcHkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgZXJyb3JzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzcrc9[1] Phase: Succeeded StartedAt: 2026-08-24 02:01:55 +0000 UTC FinishedAt: 2026-08-24 02:01:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcrc9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-24 02:01:55 +0000 UTC FinishedAt: 2026-08-24 02:01:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcrc9[2] Phase: Succeeded StartedAt: 2026-08-24 02:01:55 +0000 UTC FinishedAt: 2026-08-24 05:42:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-24 02:01:55 +0000 UTC FinishedAt: 2026-08-24 05:42:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-24 02:01:55 +0000 UTC FinishedAt: 2026-08-24 02:02:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-24 02:01:55 +0000 UTC FinishedAt: 2026-08-24 02:01:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzcrc9/series-workflowzcrc9-convert-artifact-3519062124/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-24 02:02:05 +0000 UTC FinishedAt: 2026-08-24 02:18:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-24 02:02:05 +0000 UTC FinishedAt: 2026-08-24 02:18:50 +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:*2660e4d4-ade6-4b7e-9eaf-603c02f35e9c,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-workflowzcrc9/series-workflowzcrc9-convert-artifact-3519062124/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": "b1e2369a-dc63-4cf7-8692-35b5b2b11f99", "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-workflowzcrc9/series-workflowzcrc9-build-action-2715683482/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-24 02:02:05 +0000 UTC FinishedAt: 2026-08-24 02:18:39 +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:*2660e4d4-ade6-4b7e-9eaf-603c02f35e9c,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-workflowzcrc9/series-workflowzcrc9-convert-artifact-3519062124/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": "b1e2369a-dc63-4cf7-8692-35b5b2b11f99", "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-workflowzcrc9/series-workflowzcrc9-build-action-2715683482/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-24 02:18:50 +0000 UTC FinishedAt: 2026-08-24 02:18:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-24 02:18:50 +0000 UTC FinishedAt: 2026-08-24 02:18:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-24 02:18:50 +0000 UTC FinishedAt: 2026-08-24 02:19:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-24 02:18:50 +0000 UTC FinishedAt: 2026-08-24 02:18:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzcrc9/series-workflowzcrc9-convert-artifact-701689643/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-24 02:19:00 +0000 UTC FinishedAt: 2026-08-24 02:20:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-24 02:19:00 +0000 UTC FinishedAt: 2026-08-24 02:20:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b1e2369a-dc63-4cf7-8692-35b5b2b11f99,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-workflowzcrc9/series-workflowzcrc9-build-action-2715683482/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-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-24 02:20:59 +0000 UTC FinishedAt: 2026-08-24 02:20:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-24 02:20:59 +0000 UTC FinishedAt: 2026-08-24 02:20:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-24 02:20:59 +0000 UTC FinishedAt: 2026-08-24 02:37:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-24 02:20:59 +0000 UTC FinishedAt: 2026-08-24 02:37: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:*2660e4d4-ade6-4b7e-9eaf-603c02f35e9c,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-workflowzcrc9/series-workflowzcrc9-convert-artifact-701689643/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": "6ad92894-8d02-4886-baa6-e5c38da5ef24", "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-workflowzcrc9/series-workflowzcrc9-build-action-1253875535/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-24 02:20:59 +0000 UTC FinishedAt: 2026-08-24 02:37: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:*2660e4d4-ade6-4b7e-9eaf-603c02f35e9c,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-workflowzcrc9/series-workflowzcrc9-convert-artifact-701689643/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": "6ad92894-8d02-4886-baa6-e5c38da5ef24", "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-workflowzcrc9/series-workflowzcrc9-build-action-1253875535/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-24 02:37:14 +0000 UTC FinishedAt: 2026-08-24 02:37:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-24 02:37:14 +0000 UTC FinishedAt: 2026-08-24 02:37:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-24 02:37:14 +0000 UTC FinishedAt: 2026-08-24 02:39:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-24 02:37:14 +0000 UTC FinishedAt: 2026-08-24 02:39:06 +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:*6ad92894-8d02-4886-baa6-e5c38da5ef24,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-workflowzcrc9/series-workflowzcrc9-build-action-1253875535/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-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-24 02:39:16 +0000 UTC FinishedAt: 2026-08-24 05:42:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-24 02:39:16 +0000 UTC FinishedAt: 2026-08-24 05:42:10 +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":["kvm_set_msr_common"],"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:*b1e2369a-dc63-4cf7-8692-35b5b2b11f99,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6ad92894-8d02-4886-baa6-e5c38da5ef24,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-workflowzcrc9/series-workflowzcrc9-build-action-2715683482/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-workflowzcrc9/series-workflowzcrc9-build-action-1253875535/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-24 02:39:16 +0000 UTC FinishedAt: 2026-08-24 02:39:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-24 02:39:16 +0000 UTC FinishedAt: 2026-08-24 02:39:21 +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":["kvm_set_msr_common"],"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-workflowzcrc9/series-workflowzcrc9-convert-artifact-3572153668/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-24 02:39:16 +0000 UTC FinishedAt: 2026-08-24 02:39:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-24 02:39:16 +0000 UTC FinishedAt: 2026-08-24 02:39:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-24 02:39:16 +0000 UTC FinishedAt: 2026-08-24 02:39:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-24 02:39:26 +0000 UTC FinishedAt: 2026-08-24 05:42:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcrc9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_msr_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARAVIRT_TIME_ACCOUNTING","PARAVIRT_SPINLOCKS","PARAVIRT","HYPERVISOR_GUEST","VIRTUALIZATION","KVM"],"series_id":"1ce4811e-e5cb-48e1-9693-74764a63b202","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-24 02:39:26 +0000 UTC FinishedAt: 2026-08-24 05:42:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b1e2369a-dc63-4cf7-8692-35b5b2b11f99,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6ad92894-8d02-4886-baa6-e5c38da5ef24,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-workflowzcrc9/series-workflowzcrc9-build-action-2715683482/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-workflowzcrc9/series-workflowzcrc9-build-action-1253875535/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-workflowzcrc9/series-workflowzcrc9-convert-artifact-3572153668/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}