Name: series-workflowgcjzj Phase: Succeeded StartedAt: 2026-08-11 00:09:14 +0000 UTC FinishedAt: 2026-08-11 04:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgcjzj[0] Phase: Succeeded StartedAt: 2026-08-11 00:09:14 +0000 UTC FinishedAt: 2026-08-11 00:56:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgcjzj[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 00:09:14 +0000 UTC FinishedAt: 2026-08-11 00:56:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "315f4bd234b3b8a3ed3a71fd4c53b110cf373720", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFT_CT", "NF_CONNTRACK_TIMEOUT", "NETFILTER_ADVANCED", "NF_TABLES", "NF_CONNTRACK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "315f4bd234b3b8a3ed3a71fd4c53b110cf373720", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFT_CT", "NF_CONNTRACK_TIMEOUT", "NETFILTER_ADVANCED", "NF_TABLES", "NF_CONNTRACK" ], "series_id": "db27af48-cd39-4fa3-a1b0-aea71a40d527" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nft_ct_timeout_obj_eval" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GVF9DVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfVElNRU9VVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9jdF90aW1lb3V0X29ial9ldmFsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYSB0aW1lb3V0IG9iamVjdCBvZiBvbmUgcHJvdG9jb2wgY291bGQgYmUgYXR0YWNoZWQgdG8gYSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IG9mIGEgZGlmZmVyZW50IHByb3RvY29sLiBUaGlzIGNhbiBvY2N1ciwgZm9yIGV4YW1wbGUsIHdoZW4gYW4gSUNNUCBlcnJvciBwYWNrZXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkuIFRoZSB0aW1lb3V0IG9iamVjdCYjMzk7cyBkYXRhIGFycmF5IGlzIHNpemVkIGFjY29yZGluZyB0byBpdHMgcHJvdG9jb2wgKGUuZy4sIElDTVAgaGFzIGZld2VyIHN0YXRlcyB0aGFuIFRDUCkuIElmIGEgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgdXNlcyBhbiBJQ01QIHRpbWVvdXQgb2JqZWN0LCBpdCB3aWxsIGFjY2VzcyB0aGUgdGltZW91dCBkYXRhIGFycmF5IHVzaW5nIFRDUCBzdGF0ZSBpbmRpY2VzLCByZXN1bHRpbmcgaW4gYW4gb3V0LW9mLWJvdW5kcyByZWFkLlxuXG5UaGlzIHZ1bG5lcmFiaWxpdHkgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhlIHRpbWVvdXQgb2JqZWN0cyBhcmUgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jYCwgZW5zdXJpbmcgdGhleSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBpdCB3aWxsIGVmZmVjdGl2ZWx5IGNhdGNoIHRoaXMgYnVnLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBsYXllciA0IHByb3RvY29sIGNoZWNrIHRvIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIFRoaXMgcHJldmVudHMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5JiMzOTtzIHByb3RvY29sIGFuZCB0aGUgY29uZmlndXJlZCB0aW1lb3V0IG9iamVjdCYjMzk7cyBwcm90b2NvbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAobmZ0YWJsZXMpLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGhhbmRsZXMgdmFyaW91cyBwYWNrZXQgYW5kIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3RhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTM3OWRhYjJiMTEzY2I2NjY1YjJjNmM1M2E0YWRhMGMzMGI0NWY0N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDAwOjU0OjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG5pbmRleCAwM2E4OGM3N2UwZjAyLi5kNjE4YmZhOTYwMmZhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xuQEAgLTg4NSw3ICYjNDM7ODg1LDggQEAgc3RhdGljIHZvaWQgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcbiBcdGlmIChwcml2LVx1MDAzZWw0cHJvdG8gIT0gcGt0LVx1MDAzZXRwcm90KVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoIWN0IHx8IG5mX2N0X2lzX3RlbXBsYXRlKGN0KSB8fCBuZl9jdF9pc19jb25maXJtZWQoY3QpKVxuJiM0MztcdGlmICghY3QgfHwgbmZfY3RfaXNfdGVtcGxhdGUoY3QpIHx8IG5mX2N0X2lzX2NvbmZpcm1lZChjdCkgfHxcbiYjNDM7XHQgICAgcHJpdi1cdTAwM2VsNHByb3RvICE9IG5mX2N0X3Byb3RvbnVtKGN0KSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0dGltZW91dCA9IG5mX2N0X3RpbWVvdXRfZmluZChjdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GVF9DVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfVElNRU9VVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9jdF90aW1lb3V0X29ial9ldmFsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBsYXllciA0IHByb3RvY29sIGNoZWNrIHRvIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIFRoaXMgcHJldmVudHMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5JiMzOTtzIHByb3RvY29sIGFuZCB0aGUgY29uZmlndXJlZCB0aW1lb3V0IG9iamVjdCYjMzk7cyBwcm90b2NvbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAobmZ0YWJsZXMpLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGhhbmRsZXMgdmFyaW91cyBwYWNrZXQgYW5kIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3RhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTM3OWRhYjJiMTEzY2I2NjY1YjJjNmM1M2E0YWRhMGMzMGI0NWY0NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDAwOjU0OjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfY3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMKaW5kZXggMDNhODhjNzdlMGYwMi4uZDYxOGJmYTk2MDJmYSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jCkBAIC04ODUsNyAmIzQzOzg4NSw4IEBAIHN0YXRpYyB2b2lkIG5mdF9jdF90aW1lb3V0X29ial9ldmFsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmosCiAJaWYgKHByaXYtJmd0O2w0cHJvdG8gIT0gcGt0LSZndDt0cHJvdCkKIAkJcmV0dXJuOwogCi0JaWYgKCFjdCB8fCBuZl9jdF9pc190ZW1wbGF0ZShjdCkgfHwgbmZfY3RfaXNfY29uZmlybWVkKGN0KSkKJiM0MzsJaWYgKCFjdCB8fCBuZl9jdF9pc190ZW1wbGF0ZShjdCkgfHwgbmZfY3RfaXNfY29uZmlybWVkKGN0KSB8fAomIzQzOwkgICAgcHJpdi0mZ3Q7bDRwcm90byAhPSBuZl9jdF9wcm90b251bShjdCkpCiAJCXJldHVybjsKIAogCXRpbWVvdXQgPSBuZl9jdF90aW1lb3V0X2ZpbmQoY3QpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbmZ0X2N0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L25ldGZpbHRlci9uZnRfY3QuY2AuIFNlZW1zIGxpa2UgdGhlIGNydXggb2YgdGhlIGNoYW5nZSBpcyBpbiB0aGUgYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNoZWNrIGlzIHRyeWluZyB0byBhY2hpZXZlLgoKSXQgYXBwZWFycyBhIG5ldyBjb25kaXRpb24sIGBwcml2LSZndDtsNHByb3RvICE9IG5mX2N0X3Byb3RvbnVtKGN0KWAsIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBleGlzdGluZyBgaWZgIHN0YXRlbWVudDogYGlmICghY3QgfHwgbmZfY3RfaXNfdGVtcGxhdGUoY3QpIHx8IG5mX2N0X2lzX2NvbmZpcm1lZChjdCkpYC4gVGhpcyBpcyBpbnRlcmVzdGluZy4gTGV0IG1lIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGVzZSBleGlzdGluZyBjb25kaXRpb25zIGhhbmRsZS4gUmlnaHQsIHdlJiMzOTtyZSBza2lwcGluZyBldmFsdWF0aW9uIGlmIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IChgY3RgKSBpcyBOVUxMLCBhIHRlbXBsYXRlLCBvciBjb25maXJtZWQuIEFkZGluZyBhIGNoZWNrIGZvciB0aGUgTDQgcHJvdG9jb2wgdG8gdGhpcyBzZWVtcy4uLiBwb3RlbnRpYWxseSBzaWduaWZpY2FudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgcHJpdi0mZ3Q7bDRwcm90b2AgYW5kIGBuZl9jdF9wcm90b251bShjdClgIHJlcHJlc2VudCBpbiB0aGlzIGNvbnRleHQuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBzY2VuYXJpbyBkb2VzIHRoaXMgY29uZGl0aW9uIGFkZHJlc3M/IFdoeSBhcmUgd2UgZXhwbGljaXRseSBjb21wYXJpbmcgdGhlIEw0IHByb3RvY29sIGZyb20gc29tZSAmIzM0O3ByaXYmIzM0OyBzdHJ1Y3R1cmUgd2l0aCB0aGUgcHJvdG9jb2wgZXh0cmFjdGVkIGZyb20gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnk/IERvZXMgdGhpcyByZWxhdGUgdG8gcHJvdG9jb2wtc3BlY2lmaWMgdGltZW91dCBiZWhhdmlvcj8gQXJlIHdlIHByZXZlbnRpbmcgYSBjb25mbGljdCBvciBhIG1pc2ludGVycHJldGF0aW9uIG9mIEw0IHByb3RvY29sPyBMb29rcyBsaWtlIEkgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBwcml2YCBhbmQgYGN0YCBtb3JlIHRob3JvdWdobHkuIFRoaXMgY29uZGl0aW9uYWwgZmVlbHMgbGlrZSBpdCYjMzk7cyBndWFyZGluZyBhZ2FpbnN0IHNvbWUgZWRnZSBjYXNlLCBvciBwZXJoYXBzIGl0IHByb3ZpZGVzIG9wdGltaXphdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9ODcxPXN0cnVjdCBuZnRfY3RfdGltZW91dF9vYmoge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtODc1LVxubmV0L25ldGZpbHRlci9uZnRfY3QuYzo4NzY6c3RhdGljIHZvaWQgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtODc3LVx0XHRcdFx0ICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTEwMDk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfb2JqZWN0X29wcyBuZnRfY3RfdGltZW91dF9vYmpfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTAxMS1cdC5zaXplXHRcdD0gc2l6ZW9mKHN0cnVjdCBuZnRfY3RfdGltZW91dF9vYmopLFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMDEyOlx0LmV2YWxcdFx0PSBuZnRfY3RfdGltZW91dF9vYmpfZXZhbCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTAxMy1cdC5pbml0XHRcdD0gbmZ0X2N0X3RpbWVvdXRfb2JqX2luaXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpBbHJpZ2h0LCBzbyB0aGUgZnVuY3Rpb24gYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCBpcyB0aGUgZXZhbHVhdGlvbiBmdW5jdGlvbiBmb3IgdGhhdCBgbmZ0X2N0X3RpbWVvdXRfb2JqX29wc2Agb2JqZWN0IHdpdGhpbiBuZnRhYmxlcy4gTXkgZmlyc3QgdGhvdWdodCBpczogJiMzNDtZdXAsIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBhbmQgdGhhdCBtZWFucyBpdCYjMzk7cyBwcmltZSByZWFsIGVzdGF0ZSBmb3IgZnV6emluZyYjMzQ7LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb3JlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnVuY3Rpb25hbGl0eSBoZXJlLCBzbyBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBjb3VsZCBoYXZlIHByZXR0eSBzaWduaWZpY2FudCBjb25zZXF1ZW5jZXMuIE5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIGxvY2F0ZSB0aGUgYXNzb2NpYXRlZCBjb25maWcgb3B0aW9uIGluIGBuZnRfY3QuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIHRoaW5nLCBob3cgaXQmIzM5O3MgaG9va2VkIGludG8gdGhlIGJ1aWxkIHByb2Nlc3MuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGJlIGNydWNpYWwgZm9yIGNvbnRyb2xsaW5nIHRoZSB0YXJnZXQgZHVyaW5nIGZ1enppbmcsIGFuZCBJIGtub3cgSSBjYW4gZmluZCB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgdGhlcmUuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfY3QubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTExPW9iai0kKENPTkZJR19ORlRfTlVNR0VOKVx0JiM0Mzs9IG5mdF9udW1nZW4ub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMTI6b2JqLSQoQ09ORklHX05GVF9DVClcdFx0JiM0Mzs9IG5mdF9jdC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTExMy1vYmotJChDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRClcdCYjNDM7PSBuZnRfZmxvd19vZmZsb2FkLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQ1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEZXBlbmRlbmNpZXMgYW5kIHRoZSBgTkZUX0NUYCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIGBORlRfQ1RgLCB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBGaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIHRob3JvdWdobHkuIEl0JiMzOTtzIG5vdCBqdXN0IGFib3V0IHRoaXMgb25lIHNldHRpbmcgaW4gaXNvbGF0aW9uOyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgZWNvc3lzdGVtLiBBcmUgdGhlcmUgYW55IG90aGVyIHBhY2thZ2VzIG9yIG1vZHVsZXMgdGhhdCByZWx5IG9uIGBORlRfQ1RgIGJlaW5nIHNldCBpbiBhIHBhcnRpY3VsYXIgd2F5PyBBcmUgdGhlcmUgYW55IGRvd25zdHJlYW0gaW1wbGljYXRpb25zIGlmIGl0JiMzOTtzIGRpc2FibGVkIG9yIGNvbmZpZ3VyZWQgZGlmZmVyZW50bHk/IEkgbmVlZCBhIGNvbXBsZXRlIHBpY3R1cmUgdG8gYXZvaWQgYW55IHVuZXhwZWN0ZWQgaXNzdWVzIG9yIGNvbmZsaWN0cyBmdXJ0aGVyIGRvd24gdGhlIGxpbmUuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRvY3VtZW50YXRpb24sIHNlYXJjaCB0aGUgY29kZWJhc2UsIGFuZCBtYXliZSBldmVuIGNvbnN1bHQgd2l0aCBvdGhlcnMgdG8gY29uZmlybSB0aGUgZnVsbCBzZXQgb2YgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBhYm91dCBlbnN1cmluZyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgYmVmb3JlIHByb2NlZWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GVF9DVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz00ODU9Y29uZmlnIE5GVF9OVU1HRU5cbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDkwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ5MTpjb25maWcgTkZUX0NUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDkyLVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQ1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW5pdGlhbCBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIGJhc2VkIG9uIHdoYXQgSSYjMzk7bSB3b3JraW5nIHdpdGgsIHRoZSBjb3JlIHJlcXVpcmVtZW50cyBsb29rIGxpa2UgdGhleSYjMzk7cmUgZ29pbmcgdG8gaW52b2x2ZSBgTkZUX0NUYCBhbmQgYE5GX0NPTk5UUkFDS2Ag4oCTIHRob3NlIGFyZSBwcmV0dHkgZnVuZGFtZW50YWwgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcsIHdoaWNoIEkgbmVlZC4gSSYjMzk7bSBhbHNvIHRoaW5raW5nIHRoYXQgYE5GX1RBQkxFU2Agd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGluIHRoZSBtaXgsIGdpdmVuIHRoZSBkaXJlY3Rpb24gd2UmIzM5O3JlIG1vdmluZyBpbiB3aXRoIE5ldGZpbHRlci4gSXTigJlzIHRoZSBsaWtlbHkgYmFzZSBkZXBlbmRlbmN5LiBUbyBiZSBzdXJlIGFib3V0IHRoZSBgTkZUX0NUYCBkZXBlbmRlbmN5LCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBhbmQgdmVyaWZ5IGl0cyBpbXBsaWNhdGlvbnMuIFRoYXQmIzM5O2xsIGdpdmUgYSBtb3JlIHByZWNpc2UgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBhbmQgYW55IG90aGVyIGtleSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0ODA6XHRjb25maWcgTkZfVEFCTEVTX05FVERFVlxuIDQ4MTpcdFx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFwmIzM0O1xuIDQ4MjpcdFx0aGVscFxuIDQ4MzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBcJiMzNDtuZXRkZXZcJiMzNDsgdGFibGUuXG4gNDg0Olx0XG4gNDg1Olx0Y29uZmlnIE5GVF9OVU1HRU5cbiA0ODY6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbnVtYmVyIGdlbmVyYXRvciBtb2R1bGVcJiMzNDtcbiA0ODc6XHRcdGhlbHBcbiA0ODg6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgbnVtYmVyIGdlbmVyYXRvciBleHByZXNzaW9uIHVzZWQgdG8gcGVyZm9ybVxuIDQ4OTpcdFx0ICBpbmNyZW1lbnRhbCBjb3VudGluZyBhbmQgcmFuZG9tIG51bWJlcnMgYm91bmQgdG8gYSB1cHBlciBsaW1pdC5cbiA0OTA6XHRcbiA0OTE6XHRjb25maWcgTkZUX0NUXG4gNDkyOlx0XHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xuIDQ5MzpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBjb25udHJhY2sgbW9kdWxlXCYjMzQ7XG4gNDk0Olx0XHRoZWxwXG4gNDk1Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIFwmIzM0O2N0XCYjMzQ7IGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0byBtYXRjaFxuIDQ5NjpcdFx0ICBjb25uZWN0aW9uIHRyYWNraW5nIGluZm9ybWF0aW9uIHN1Y2ggYXMgdGhlIGZsb3cgc3RhdGUuXG4gNDk3Olx0XG4gNDk4Olx0Y29uZmlnIE5GVF9FWFRIRFJfRENDUFxuIDQ5OTpcdFx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIGV4dGhkciBEQ0NQIHN1cHBvcnQgKERFUFJFQ0FURUQpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMDIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIEZ1bmN0aW9uIGZvciBBUEkgU3VpdGFiaWxpdHkqKgoKT2theSwgc28gdGhlIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgZnVuY3Rpb24gaXMgdGhlIG9uZSB3ZSYjMzk7cmUgZm9jdXNpbmcgb24uIEZpcnN0LCBsZXQmIzM5O3Mgc2VlIGlmIGl0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgLiBZdXAsIGl0IGlzLiBUaGF0JiMzOTtzIGEgcG9pbnQgdG8gY29uc2lkZXIuIEJ1dCBoYW5nIG9uLCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgLmV2YWxgIHdpdGhpbiBgbmZ0X2N0X3RpbWVvdXRfb2JqX29wc2AuIEFuZCB0aGUgcHJvbXB0IGlzIHRlbGxpbmcgbWUgdG8gZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludHMuCgpUaGUgdGhpbmcgaXMsIHNpbmNlIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIOKAkyBgLmV2YWwgPSBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAg4oCTIGl0ICpjYW4mIzM5O3QqIGJlIGlubGluZWQuIFRoYXQgbWVhbnMgaXQgKndpbGwqIGhhdmUgYSB1bmlxdWUgc3ltYm9sIGFkZHJlc3MsIHdoaWNoIGlzIGdvb2QuIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsLiBXZSBjb3VsZCBjb25zaWRlciBpbmNsdWRpbmcgYG5mdF9jdF90aW1lb3V0X29ial9pbml0YCBvciBqdXN0IHN0aWNrIHdpdGggdGhlIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAuCgpHaXZlbiB0aGF0IGl0JiMzOTtzIG5vdCBpbmxpbmVkLCBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGlzIHBlcmZlY3RseSBmaW5lIHRvIGluY2x1ZGUuIFRoZSBuZXh0IHRoaW5nIEkgd2FudCB0byBjaGVjayBpcyBpZiBgTkZfQ09OTlRSQUNLX1RJTUVPVVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHJlcXVpcmVkIGZvciB0aGlzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfY3RfdGltZW91dF9vYmpfZXZhbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfY3QuYz04NzE9c3RydWN0IG5mdF9jdF90aW1lb3V0X29iaiB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy04NzUtXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjg3NjpzdGF0aWMgdm9pZCBuZnRfY3RfdGltZW91dF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy04NzctXHRcdFx0XHQgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTAwOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9vYmplY3Rfb3BzIG5mdF9jdF90aW1lb3V0X29ial9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMDExLVx0LnNpemVcdFx0PSBzaXplb2Yoc3RydWN0IG5mdF9jdF90aW1lb3V0X29iaiksXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEwMTI6XHQuZXZhbFx0XHQ9IG5mdF9jdF90aW1lb3V0X29ial9ldmFsLFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMDEzLVx0LmluaXRcdFx0PSBuZnRfY3RfdGltZW91dF9vYmpfaW5pdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgxMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L25ldGZpbHRlci9uZnRfY3QuY2AsIHByZXNlbnRlZCBhcyBhIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWwqKgoKT2theSwgdGltZSB0byBkaXNzZWN0IGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgd2l0aGluIHRoZSBOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aW1lb3V0cyBhcmUgaGFuZGxlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbmV3IGZpcmV3YWxsIGZyYW1ld29yay4gU28sIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yICpldmFsdWF0aW5nKiB0aGUgdGltZW91dCBvYmplY3QsIHdoaWNoIG1lYW5zIGl0IGxpa2VseSBkZXRlcm1pbmVzIHRoZSByZWxldmFudCB0aW1lb3V0IGR1cmF0aW9uIGJhc2VkIG9uIHNvbWUgY3JpdGVyaWEuIEkgZXhwZWN0IHRvIHNlZSBhbiBleGFtaW5hdGlvbiBvZiBjb25uZWN0aW9uIHN0YXRlLCBtYXliZSBydWxlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCBvciBldmVuIHNvbWUgZm9ybSBvZiBkeW5hbWljIGFkanVzdG1lbnQuIEl0JiMzOTtzIHRoZSBjb3JlIGxvZ2ljIHRoYXQgZmlndXJlcyBvdXQgKndoZW4qIGEgY29ubmVjdGlvbiBzaG91bGQgYmUgY29uc2lkZXJlZCBpbmFjdGl2ZSBhbmQgcG90ZW50aWFsbHkgY2xlYW5lZCB1cC4gVGhpcyBpcyBhIGNyaXRpY2FsIHBpZWNlIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSBpbiBhIGNvbXBsZXggbmV0d29yayBzZXR1cC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGNvbm5lY3Rpb24gdHJhY2tpbmcgdGFibGUgYW5kIGhvdyBpdCBpbmZsdWVuY2VzIHRoZSBjb25uZWN0aW9uJiMzOTtzIHN0YXRlIHRyYW5zaXRpb25zLiBUaGlzIHNob3VsZCBiZSBhbiBpbnRlcmVzdGluZyBjaHVuayBvZiBjb2RlIHRvIGV4cGxvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfY3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODYwOlx0XHRcdFx0XHRcdCAgTlVMTCk7XG4gODYxOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDg2MjpcdFx0XHRnb3RvIGVycjtcbiA4NjM6XHRcbiA4NjQ6XHRcdHJldCA9IGw0cHJvdG8tXHUwMDNlY3RubF90aW1lb3V0Lm5sYXR0cl90b19vYmoodGIsIG5ldCwgdGltZW91dHMpO1xuIDg2NTpcdFxuIDg2NjpcdGVycjpcbiA4Njc6XHRcdGtmcmVlKHRiKTtcbiA4Njg6XHRcdHJldHVybiByZXQ7XG4gODY5Olx0fVxuIDg3MDpcdFxuIDg3MTpcdHN0cnVjdCBuZnRfY3RfdGltZW91dF9vYmoge1xuIDg3MjpcdFx0c3RydWN0IG5mX2N0X3RpbWVvdXQgICAgKnRpbWVvdXQ7XG4gODczOlx0XHR1OFx0XHRcdGw0cHJvdG87XG4gODc0Olx0fTtcbiA4NzU6XHRcbiA4NzY6XHRzdGF0aWMgdm9pZCBuZnRfY3RfdGltZW91dF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxuIDg3NzpcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbiA4Nzg6XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbiA4Nzk6XHR7XG4gODgwOlx0XHRjb25zdCBzdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XG4gODgxOlx0XHRzdHJ1Y3QgbmZfY29ubiAqY3QgPSAoc3RydWN0IG5mX2Nvbm4gKilza2JfbmZjdChwa3QtXHUwMDNlc2tiKTtcbiA4ODI6XHRcdHN0cnVjdCBuZl9jb25uX3RpbWVvdXQgKnRpbWVvdXQ7XG4gODgzOlx0XHRjb25zdCB1bnNpZ25lZCBpbnQgKnZhbHVlcztcbiA4ODQ6XHRcbiA4ODU6XHRcdGlmIChwcml2LVx1MDAzZWw0cHJvdG8gIT0gcGt0LVx1MDAzZXRwcm90KVxuIDg4NjpcdFx0XHRyZXR1cm47XG4gODg3Olx0XG4gODg4Olx0XHRpZiAoIWN0IHx8IG5mX2N0X2lzX3RlbXBsYXRlKGN0KSB8fCBuZl9jdF9pc19jb25maXJtZWQoY3QpIHx8XG4gODg5Olx0XHQgICAgcHJpdi1cdTAwM2VsNHByb3RvICE9IG5mX2N0X3Byb3RvbnVtKGN0KSlcbiA4OTA6XHRcdFx0cmV0dXJuO1xuIDg5MTpcdFxuIDg5MjpcdFx0dGltZW91dCA9IG5mX2N0X3RpbWVvdXRfZmluZChjdCk7XG4gODkzOlx0XHRpZiAoIXRpbWVvdXQpIHtcbiA4OTQ6XHRcdFx0dGltZW91dCA9IG5mX2N0X3RpbWVvdXRfZXh0X2FkZChjdCwgcHJpdi1cdTAwM2V0aW1lb3V0LCBHRlBfQVRPTUlDKTtcbiA4OTU6XHRcdFx0aWYgKCF0aW1lb3V0KSB7XG4gODk2Olx0XHRcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xuIDg5NzpcdFx0XHRcdHJldHVybjtcbiA4OTg6XHRcdFx0fVxuIDg5OTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Njg4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkNvbmRpdGlvbmFsIENvbXBpbGF0aW9uIENvbnVuZHJ1bXM6IG5mdF9jdF90aW1lb3V0X29ial9ldmFsKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgYW5kIGEgcXVlc3Rpb24ga2VlcHMgcG9raW5nIGF0IHRoZSBiYWNrIG9mIG15IG1pbmQ6IGlzIHRoZSBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGZ1bmN0aW9uIGJlaW5nIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHk/IEl0IGZlZWxzIGxpa2UgaXQgKnNob3VsZG4mIzM5O3QqIGJlLCBnaXZlbiBpdHMgbGlrZWx5IGNvcmUgcm9sZSBpbiBjb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXRzLCBidXQgSSYjMzk7dmUgbGVhcm5lZCB0byBuZXZlciBhc3N1bWUgYW55dGhpbmcsIGVzcGVjaWFsbHkgd2l0aCB0aGUgY29tcGxleGl0aWVzIG9mIHRoZXNlIG5ldHdvcmtpbmcgc3RhY2tzLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIGZ1bmRhbWVudGFsLCBzbyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHdvdWxkIGludHJvZHVjZSB1bm5lY2Vzc2FyeSBjb21wbGV4aXR5LiBUaGUgcG9zc2liaWxpdGllcyBpbiBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhcmUgdmFzdCwgZnJvbSBzaW1wbGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9wdGltaXphdGlvbnMgdG8gbXVjaCBtb3JlIGludm9sdmVkIGZlYXR1cmUgZmxhZ3MuIFVuZGVyc3RhbmRpbmcgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyBrZXkgdG8gdHJ1bHkgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBjb2RlIHdvcmtzIGluIGFueSBnaXZlbiBzY2VuYXJpbywgc28gaXQgaXMgc29tZXRoaW5nIEkgbXVzdCBkZXRlcm1pbmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IHRoaXMgaXMgYmVpbmcgaGFuZGxlZCwgc28gdGhhdCBJIGRvbiYjMzk7dCBvdmVybG9vayBzb21lIG51YW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX05GX0NPTk5UUkFDS19USU1FT1VUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfY3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTgzNj1zdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X25vdHJhY2tfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtODQxLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYzo4NDI6I2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfVElNRU9VVFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy04NDMtc3RhdGljIGludFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTAxOD1zdGF0aWMgc3RydWN0IG5mdF9vYmplY3RfdHlwZSBuZnRfY3RfdGltZW91dF9vYmpfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTAyNC19O1xubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMDI1OiNlbmRpZiAvKiBDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVQgKi9cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTAyNi1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTEzNzk9c3RhdGljIGludCBfX2luaXQgbmZ0X2N0X21vZHVsZV9pbml0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMzk5LVx0XHRnb3RvIGVycjM7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjE0MDA6I2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfVElNRU9VVFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDAxLVx0ZXJyID0gbmZ0X3JlZ2lzdGVyX29iaihcdTAwMjZuZnRfY3RfdGltZW91dF9vYmpfdHlwZSk7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDA2LVxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxNDA3OiNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVRcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQwOC1lcnI0OlxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTQyMD1zdGF0aWMgdm9pZCBfX2V4aXQgbmZ0X2N0X21vZHVsZV9leGl0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MjEte1xubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxNDIyOiNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVRcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQyMy1cdG5mdF91bnJlZ2lzdGVyX29iaihcdTAwMjZuZnRfY3RfdGltZW91dF9vYmpfdHlwZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NjMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgQ29ublRyYWNrIFRpbWVvdXQgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4gTXkgaW5pdGlhbCBodW5jaCB3YXMgcmlnaHQ7IHRoZSB0aW1lb3V0IGNvbmZpZ3VyYXRpb24gbXVzdCBiZSB1bmRlciBgQ09ORklHX05GX0NPTk5UUkFDS19USU1FT1VUYC4gTm93LCB0byBjb25maXJtIHRoZSBzcGVjaWZpYyBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMsIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBLY29uZmlnIGZvciB0aGF0LiBMZXQmIzM5O3MgcHVsbCB1cCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBhbmQgc2VlIHdoYXQgYE5GX0NPTk5UUkFDS19USU1FT1VUYCByZXZlYWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIG1vZHVsZXMsIGFueSBwb3RlbnRpYWwgZGVmYXVsdHMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG92ZXJhbGwgY29ubmVjdGlvbiB0cmFja2luZyBmdW5jdGlvbmFsaXR5LiBUaGlzIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBjcml0aWNhbCBmb3IgZmluZS10dW5pbmcgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9DT05OVFJBQ0tfVElNRU9VVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xNTc9Y29uZmlnIE5GX0NPTk5UUkFDS19FVkVOVFNcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjgtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCYjMzk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvbnNpZGVyYXRpb25zLgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgTmV0d29yayBGZWF0dXJlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUgaGVyZSwgd2UgYXJlIGxvb2tpbmcgYXQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHRoZSBmaXJzdCB0aGluZ3MgdGhhdCBqdW1wIG91dCBhcmUgdGhlIHJlcXVpcmVtZW50cyBmb3IgYE5GVF9DVGAgYW5kIGBORl9DT05OVFJBQ0tfVElNRU9VVGAuIEltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRob3NlICpkZXBlbmRlbmNpZXMqIG9mIHRoZXNlIG9wdGlvbnMuIFdlIGFsc28gaGF2ZSBgTkZfVEFCTEVTYCBhbmQgYE5GX0NPTk5UUkFDS2AgZmxhZ2dlZCBhcyBkZXBlbmRlbmNpZXMuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBvbiB0aG9zZSBgTkZfQ09OTlRSQUNLX1RJTUVPVVRgIGRlcGVuZGVuY2llcywgYXMgSSBuZWVkIHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCB3aGF0IGVuYWJsZXMgYW5kIHdoYXQgZGVwZW5kcyB1cG9uIGl0LiBXZSBtdXN0IGVuc3VyZSBldmVyeXRoaW5nIGlzIGNvcnJlY3QgYXMgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGNhbiBpbmZsdWVuY2UgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBgTiYjMzk7LlxuIDE2NjpcdFxuIDE2NzpcdGNvbmZpZyBORl9DT05OVFJBQ0tfVElNRU9VVFxuIDE2ODpcdFx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQmIzM5O1xuIDE2OTpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAxNzA6XHRcdGhlbHBcbiAxNzE6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBjb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXRcbiAxNzI6XHRcdCAgZXh0ZW5zaW9uLiBUaGlzIGFsbG93cyB5b3UgdG8gYXR0YWNoIHRpbWVvdXQgcG9saWNpZXMgdG8gZmxvd1xuIDE3MzpcdFx0ICB2aWEgdGhlIENUIHRhcmdldC5cbiAxNzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEzNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBzZWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGBORVRGSUxURVJfQURWQU5DRURgIGRlcGVuZGVuY3kgaGVyZS4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGxpc3QgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGludm9sdmVkOiBgTkZUX0NUYCwgYE5GX0NPTk5UUkFDS19USU1FT1VUYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9UQUJMRVNgLCBhbmQgYE5GX0NPTk5UUkFDS2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlcnJlbGF0ZSB0byBmdWxseSBncmFzcCB0aGUgY2hhbmdlLgoKTXkgYXR0ZW50aW9uIGlzIHNwZWNpZmljYWxseSBkcmF3biB0byB0aGUgYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCBmdW5jdGlvbi4gSSYjMzk7bSBhc3N1bWluZyB0aGlzIGlzIHRoZSBrZXkgc3ltYm9sIGluIHRoZSBwYXRjaC4gVGhlIGZpcnN0IHF1ZXN0aW9uIEkgaGF2ZSBpcywgaXMgdGhpcyBmdW5jdGlvbiAqYWN0dWFsbHkqIHJlYWNoYWJsZT8gWWVzLCBpdCYjMzk7cyBhbiBuZnRhYmxlcyBvYmplY3QgZXZhbHVhdGlvbiBmdW5jdGlvbi4gVGhhdCB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgY3JpdGljYWwsIGFzIGl0IGlzIGNhbGxlZCB3aGVuIGEgcGFja2V0IGhpdHMgYSBydWxlIHRoYXQgcmVmZXJlbmNlcyB0aGlzIHRpbWVvdXQgb2JqZWN0LCB3aGljaCBpcyBwcmVjaXNlbHkgdGhlIGJlaGF2aW9yIEkmIzM5O2QgZXhwZWN0LiBUaGUgcGF0Y2ggaXMgaW50ZW5kZWQgdG8gZml4IGEgYnVnIHdoZXJlIGBwcml2LSZndDtsNHByb3RvICE9IG5mX2N0X3Byb3RvbnVtKGN0KWAgd2FzIG1pc3NpbmcuIFRoaXMgaXMgYSBjbGVhciwgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gaG93IHRpbWVvdXRzIGFyZSBoYW5kbGVkIGluIHRoZSBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBjb2RlLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hhdCBJIGRvLiBJdCBzZWVtcyBsaWtlIHRoZSBwcmltYXJ5IGRlcGVuZGVuY3kgaXMgYE5GVF9DVGAgd2hpY2ggbmVlZHMgYE5GX0NPTk5UUkFDS2AgYW5kIGBORl9UQUJMRVNgLCB3aGljaCBJIGFzc3VtZSBhcmUgaW1wbGllZCBzaW5jZSBpdCBpcyBpbiBhbiBgaWYgTkZfVEFCTEVTYCBibG9jay4gSSBuZWVkIHRvIGtlZXAgdGhpcyByZWxhdGlvbnNoaXAgaW4gbWluZCBhcyBJIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmIE5GX1RBQkxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDU1PWNvbmZpZyBORl9UQUJMRVNcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDcwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3MTppZiBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzItY29uZmlnIE5GX1RBQkxFU19JTkVUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTYyNT1jb25maWcgTkZUX1NPQ0tFVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjctXHRzZWxlY3QgTkZfU09DS0VUX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2Mjg6XHRzZWxlY3QgTkZfU09DS0VUX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjktXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTY0MD1jb25maWcgTkZUX1RQUk9YWVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDItXHRzZWxlY3QgTkZfREVGUkFHX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDM6XHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDQtXHRzZWxlY3QgTkZfVFBST1hZX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDU6XHRzZWxlY3QgTkZfVFBST1hZX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDYtXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTY0OT1jb25maWcgTkZUX1NZTlBST1hZXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTY1OS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NjA6aWYgTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTY2MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA3MQoJCQkJCQkJb3V0cHV0OiAxNTgKCQkJCQkJCXRob3VnaHRzOiA0MDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhc29uaW5nIGZvciBGdXp6aW5nIFJlY29tbWVuZGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBORlRfQ1RgICppcyogaW5kZWVkIG5lc3RlZCB3aXRoaW4gYGlmIE5GX1RBQkxFU2AsIHdoaWNoIG1lYW5zIHdlIGRlZmluaXRlbHkgbmVlZCBgTkZfVEFCTEVTYCBjb25maWd1cmVkLiBJJiMzOTt2ZSBnb3QgbXkgbGlzdCBvZiByZWxldmFudCBjb25maWdzOiBgTkZUX0NUYCwgYE5GX0NPTk5UUkFDS19USU1FT1VUYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9UQUJMRVNgLCBhbmQgYE5GX0NPTk5UUkFDS2AuIFRoZSBwcmltYXJ5IGZvY3VzLCBob3dldmVyLCBpcyBvbiBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgLgoKTGV0IG1lIHRoaW5rLi4uIGlzIHRoaXMgdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCYjMzk7cyBjaGFuZ2VkPyBZZXMsIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgaXMgdGhlIG9ubHkgb25lIG1vZGlmaWVkLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gTm93LCBpcyBpdCAqc3RhdGljKj8gT2theSwgeWVzLCBpdCBpcy4gQnV0LCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgd2hpY2ggbWVhbnMgaXQgd29uJiMzOTt0IGdldCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gU28sIHdoaWxlIGl0JiMzOTtzIHN0YXRpYyBpbiB0aGUgc291cmNlLCBpdCYjMzk7bGwgc3RpbGwgaGF2ZSBpdHMgb3duIGRpc3RpbmN0IHN5bWJvbC4gSSBkb24mIzM5O3QgbmVlZCB0byBjb25zaWRlciBhbnkgc3Vycm91bmRpbmcgZnVuY3Rpb25zIGxpa2UgYG5mdF9jdF90aW1lb3V0X29ial9pbml0YCBvciBgbmZ0X2N0X2V2YWxgOyBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGlzIHRoZSBrZXkuIFRoZSBjb21waWxlciB3b24mIzM5O3Qgb3B0aW1pemUgaXQgYXdheS4KClJpZ2h0LCBsZXQgbWUgc29saWRpZnkgbXkgcmVhc29uaW5nLiBUaGUgcGF0Y2ggaXMgYWRkaW5nIGEgY2hlY2sgd2l0aGluIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNgOiBzcGVjaWZpY2FsbHksIGBwcml2LSZndDtsNHByb3RvICE9IG5mX2N0X3Byb3RvbnVtKGN0KWAuIFRoaXMgcHJldmVudHMgYSBzaXR1YXRpb24gd2hlcmUgdGhlIGxheWVyIDQgcHJvdG9jb2wgb2YgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgZG9lc24mIzM5O3QgbWF0Y2ggdGhlIG9uZSBjb25maWd1cmVkIGluIHRoZSB0aW1lb3V0IG9iamVjdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbSwgYW5kIGNyaXRpY2FsbHksIGl0JiMzOTtzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBuZnRhYmxlcyBydWxlcy4gVGhlcmVmb3JlLCBmdXp6aW5nIGlzICpoaWdobHkqIHJlY29tbWVuZGVkIGhlcmUuIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBuZXcgY2hlY2sgY29ycmVjdGx5IGhhbmRsZXMgYSB3aWRlIHJhbmdlIG9mIHBhY2tldCBhbmQgY29ubmVjdGlvbiB0cmFja2luZyBzdGF0ZXMuIFdlIHdhbnQgdG8gaWRlbnRpZnkgYW55IGVkZ2UgY2FzZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvdXJzIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZUX0NUJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19USU1FT1VUJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGxheWVyIDQgcHJvdG9jb2wgY2hlY2sgdG8gYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCBpbiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbS4gVGhpcyBwcmV2ZW50cyBhIG1pc21hdGNoIGJldHdlZW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkmIzM5O3MgcHJvdG9jb2wgYW5kIHRoZSBjb25maWd1cmVkIHRpbWVvdXQgb2JqZWN0JiMzOTtzIHByb3RvY29sLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChuZnRhYmxlcyksIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaGFuZGxlcyB2YXJpb3VzIHBhY2tldCBhbmQgY29ubmVjdGlvbiB0cmFja2luZyBzdGF0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GVF9DVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfVElNRU9VVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9jdF90aW1lb3V0X29ial9ldmFsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBsYXllciA0IHByb3RvY29sIGNoZWNrIHRvIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIFRoaXMgcHJldmVudHMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5JiMzOTtzIHByb3RvY29sIGFuZCB0aGUgY29uZmlndXJlZCB0aW1lb3V0IG9iamVjdCYjMzk7cyBwcm90b2NvbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAobmZ0YWJsZXMpLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGhhbmRsZXMgdmFyaW91cyBwYWNrZXQgYW5kIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3RhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGEgdGltZW91dCBvYmplY3Qgb2Ygb25lIHByb3RvY29sIGNvdWxkIGJlIGF0dGFjaGVkIHRvIGEgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSBvZiBhIGRpZmZlcmVudCBwcm90b2NvbC4gVGhpcyBjYW4gb2NjdXIsIGZvciBleGFtcGxlLCB3aGVuIGFuIElDTVAgZXJyb3IgcGFja2V0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIFRDUCBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5LiBUaGUgdGltZW91dCBvYmplY3QmIzM5O3MgZGF0YSBhcnJheSBpcyBzaXplZCBhY2NvcmRpbmcgdG8gaXRzIHByb3RvY29sIChlLmcuLCBJQ01QIGhhcyBmZXdlciBzdGF0ZXMgdGhhbiBUQ1ApLiBJZiBhIFRDUCBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IHVzZXMgYW4gSUNNUCB0aW1lb3V0IG9iamVjdCwgaXQgd2lsbCBhY2Nlc3MgdGhlIHRpbWVvdXQgZGF0YSBhcnJheSB1c2luZyBUQ1Agc3RhdGUgaW5kaWNlcywgcmVzdWx0aW5nIGluIGFuIG91dC1vZi1ib3VuZHMgcmVhZC5cblxuVGhpcyB2dWxuZXJhYmlsaXR5IGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQuIFRoZSB0aW1lb3V0IG9iamVjdHMgYXJlIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY2AsIGVuc3VyaW5nIHRoZXkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtBU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgaXQgd2lsbCBlZmZlY3RpdmVseSBjYXRjaCB0aGlzIGJ1Zy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5Mzc5ZGFiMmIxMTNjYjY2NjViMmM2YzUzYTRhZGEwYzMwYjQ1ZjQ3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMDA6NTQ6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jIGIvbmV0L25ldGZpbHRlci9uZnRfY3QuYwppbmRleCAwM2E4OGM3N2UwZjAyLi5kNjE4YmZhOTYwMmZhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMKQEAgLTg4NSw3ICYjNDM7ODg1LDggQEAgc3RhdGljIHZvaWQgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaiwKIAlpZiAocHJpdi0mZ3Q7bDRwcm90byAhPSBwa3QtJmd0O3Rwcm90KQogCQlyZXR1cm47CiAKLQlpZiAoIWN0IHx8IG5mX2N0X2lzX3RlbXBsYXRlKGN0KSB8fCBuZl9jdF9pc19jb25maXJtZWQoY3QpKQomIzQzOwlpZiAoIWN0IHx8IG5mX2N0X2lzX3RlbXBsYXRlKGN0KSB8fCBuZl9jdF9pc19jb25maXJtZWQoY3QpIHx8CiYjNDM7CSAgICBwcml2LSZndDtsNHByb3RvICE9IG5mX2N0X3Byb3RvbnVtKGN0KSkKIAkJcmV0dXJuOwogCiAJdGltZW91dCA9IG5mX2N0X3RpbWVvdXRfZmluZChjdCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDIyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldGZpbHRlciBQYXRjaCBmb3IgQ29ubmVjdGlvbiBUcmFja2luZyBUaW1lb3V0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNgLiBJdCYjMzk7cyB0b3VjaGluZyBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gUmlnaHQgYXdheSwgSSBzZWUgdGhlIGNvcmUgY2hhbmdlIGlzIGFkZGluZyBhIGNoZWNrOiBgcHJpdi0mZ3Q7bDRwcm90byAhPSBuZl9jdF9wcm90b251bShjdClgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBtdXN0IGJlIGEgYnVnIGZpeC4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHByb3RvY29sIG1pc21hdGNoIGJldHdlZW4gd2hhdCB0aGUgdGltZW91dCBvYmplY3QgKnRoaW5rcyogaXQgc2hvdWxkIGhhbmRsZSwgYW5kIHdoYXQgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgaXMgYWN0dWFsbHkgaGFuZGxpbmcuCgpMZXQmIzM5O3MgZXhhbWluZSB0aGUgY29kZSBzbmlwcGV0LiBUaGUgcGF0Y2ggYWRkcyB0aGlzIGNvbmRpdGlvbiB3aXRoaW4gdGhlIGBpZmAgc3RhdGVtZW50LCBlZmZlY3RpdmVseSBzaG9ydC1jaXJjdWl0aW5nIHRoZSB0aW1lb3V0IGxvb2t1cC4gQmVmb3JlIHRoaXMgY2hhbmdlLCB0aGUgYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCB3b3VsZCBwcm9jZWVkIHRvIGxvb2sgZm9yIGEgdGltZW91dCBvYmplY3QgdXNpbmcgYG5mX2N0X3RpbWVvdXRfZmluZChjdClgIGlmIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IHdhc24mIzM5O3QgYSB0ZW1wbGF0ZSBvciBhbHJlYWR5IGNvbmZpcm1lZC4gTm93LCBpZiBgcHJpdi0mZ3Q7bDRwcm90b2AgZG9lc24mIzM5O3QgYWxpZ24gd2l0aCBgbmZfY3RfcHJvdG9udW0oY3QpYCAsIGl0IGJhaWxzIG91dCBlYXJseS4KCkRpZ2dpbmcgZGVlcGVyLCBJIHNlZSBgcHJpdmAgaXMgYSBgc3RydWN0IG5mdF9jdF90aW1lb3V0X29iaiAqYCBvYnRhaW5lZCB0aHJvdWdoIGBuZnRfb2JqX2RhdGEob2JqKWAuIFNvIGBwcml2YCBob2xkcyB0aGUgdGltZW91dCBvYmplY3QmIzM5O3MgcHJpdmF0ZSBkYXRhLiBUaGlzIG1ha2VzIG1lIGNvbnNpZGVyOiB3aGF0IGhhcHBlbnMgaWYgdGhlIHRpbWVvdXQgb2JqZWN0IGlzIHNldCB1cCBmb3IsIHNheSwgVENQLCBidXQgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgZW5kcyB1cCBiZWluZyBVRFA/IFRoYXQgY291bGQgbGVhZCB0byBhbGwgc29ydHMgb2YgcHJvYmxlbXMg4oCTIHBvdGVudGlhbGx5IG91dC1vZi1ib3VuZHMgcmVhZHMgb3IgZXZlbiB0eXBlIGNvbmZ1c2lvbiBpZiB0aGUgdGltZW91dCBvYmplY3QgYWNjZXNzZXMgZGF0YSBpbmNvcnJlY3RseSBiZWNhdXNlIG9mIGEgcHJvdG9jb2wgbWlzbWF0Y2guIFRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgc3BlY2lmaWNhbGx5IHByZXZlbnRpbmcgdGhhdC4KCkFuZCwgYXMgYSBmaW5hbCB2ZXJpZmljYXRpb24sIEkgbmVlZCB0byBjb25maXJtOiBgbmZfY3RfdGltZW91dF9maW5kKGN0KWAgcmV0dXJucyB0aGUgdGltZW91dCBvYmplY3QgKmFzc29jaWF0ZWQqIHdpdGggdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkuIFRoaXMgcmVpbmZvcmNlcyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcm9ibGVtIGFuZCB0aGUgcHVycG9zZSBvZiB0aGUgZml4LiBJdCYjMzk7cyBhIHNvbGlkIGRlZmVuc2UgYWdhaW5zdCB0aGVzZSBwb3RlbnRpYWxseSBzZXJpb3VzLCBzdWJ0bGUgYnVncyB3aXRoaW4gdGhlIE5ldGZpbHRlciBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9jdF90aW1lb3V0X29ial9ldmFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfY3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTg3MT1zdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTg3NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6ODc2OnN0YXRpYyB2b2lkIG5mdF9jdF90aW1lb3V0X29ial9ldmFsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmosXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTg3Ny1cdFx0XHRcdCAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xMDA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X29iamVjdF9vcHMgbmZ0X2N0X3RpbWVvdXRfb2JqX29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEwMTEtXHQuc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTAxMjpcdC5ldmFsXHRcdD0gbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEwMTMtXHQuaW5pdFx0XHQ9IG5mdF9jdF90aW1lb3V0X29ial9pbml0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTE0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcGx5IGZhbWlsaWFyIHdpdGggY29kZSBhbmQgcHJvYmFibHkgd29ya2luZyBvbiBhIHN5c3RlbSBpbnZvbHZpbmcgTkZUcyBhbmQgcG90ZW50aWFsIHRpbWVvdXRzOgoKKipBbmFseXppbmcgYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgZnVuY3Rpb24uIFRoZSBuYW1pbmcgc3VnZ2VzdHMgaXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSBvZiBjb2RlIHJlbGF0ZWQgdG8gTmV0d29yayBGaWx0ZXIgKG5mdCkgY29ubmVjdGlvbiB0cmFja2luZyAoY3QpIGFuZCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHRoZSBldmFsdWF0aW9uIG9mIHRpbWVvdXQgb2JqZWN0cy4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgbGlrZWx5IGluIGEgcGFydCBvZiB0aGUgc3lzdGVtIHRoYXQgbWFuYWdlcyBjb25uZWN0aW9uIHN0YXRlIGFuZCBob3cgbG9uZyB0aG9zZSBzdGF0ZXMgcGVyc2lzdCBiZWZvcmUgYmVpbmcgY29uc2lkZXJlZCBzdGFsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcywgYmVjYXVzZSB0aW1lb3V0IGNvbmZpZ3VyYXRpb25zIGFyZSBhIGtleSBwYXJ0IG9mIHByZXZlbnRpbmcgcmVzb3VyY2UgZXhoYXVzdGlvbiBhbmQgZW5zdXJpbmcgdGhlIGVmZmljaWVudCBmdW5jdGlvbmluZyBvZiB0aGUgbmV0d29yay4gR2l2ZW4gdGhhdCAmIzM0O25mdCYjMzQ7IGFuZCAmIzM0O2N0JiMzNDsgYXJlIHByZXNlbnQsIEkgYW50aWNpcGF0ZSBpdCB3aWxsIGJlIGludm9sdmVkIHdpdGggYSBOZXRmaWx0ZXIgY29tcG9uZW50IHRoYXQgdHJhY2tzIGNvbm5lY3Rpb24gc3RhdGVzLCBhbmQgcHJvYmFibHkgdGhlIHRpbWVvdXQgdGhhdCBpcyBzZXQgZm9yIGl0LCByZWxhdGluZyB0byBORlRzLiBNeSBmYW1pbGlhcml0eSB3aXRoIHRoZSBjb2RlIG1lYW5zIEkgd2lsbCB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgYXMgY29ubmVjdGlvbiB0cmFja2luZyBpcyBhIHZlcnkgdGVtcHRpbmcgdGFyZ2V0IGZvciBET1MsIGFuZCBORlRzIGxpa2VseSBoYXZlIHRoZWlyIG93biwgc3BlY2lhbCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBoZXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NzA6XHRcbiA4NzE6XHRzdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqIHtcbiA4NzI6XHRcdHN0cnVjdCBuZl9jdF90aW1lb3V0ICAgICp0aW1lb3V0O1xuIDg3MzpcdFx0dThcdFx0XHRsNHByb3RvO1xuIDg3NDpcdH07XG4gODc1Olx0XG4gODc2Olx0c3RhdGljIHZvaWQgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcbiA4Nzc6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4gODc4Olx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4gODc5Olx0e1xuIDg4MDpcdFx0Y29uc3Qgc3RydWN0IG5mdF9jdF90aW1lb3V0X29iaiAqcHJpdiA9IG5mdF9vYmpfZGF0YShvYmopO1xuIDg4MTpcdFx0c3RydWN0IG5mX2Nvbm4gKmN0ID0gKHN0cnVjdCBuZl9jb25uICopc2tiX25mY3QocGt0LVx1MDAzZXNrYik7XG4gODgyOlx0XHRzdHJ1Y3QgbmZfY29ubl90aW1lb3V0ICp0aW1lb3V0O1xuIDg4MzpcdFx0Y29uc3QgdW5zaWduZWQgaW50ICp2YWx1ZXM7XG4gODg0Olx0XG4gODg1Olx0XHRpZiAocHJpdi1cdTAwM2VsNHByb3RvICE9IHBrdC1cdTAwM2V0cHJvdClcbiA4ODY6XHRcdFx0cmV0dXJuO1xuIDg4NzpcdFxuIDg4ODpcdFx0aWYgKCFjdCB8fCBuZl9jdF9pc190ZW1wbGF0ZShjdCkgfHwgbmZfY3RfaXNfY29uZmlybWVkKGN0KSB8fFxuIDg4OTpcdFx0ICAgIHByaXYtXHUwMDNlbDRwcm90byAhPSBuZl9jdF9wcm90b251bShjdCkpXG4gODkwOlx0XHRcdHJldHVybjtcbiA4OTE6XHRcbiA4OTI6XHRcdHRpbWVvdXQgPSBuZl9jdF90aW1lb3V0X2ZpbmQoY3QpO1xuIDg5MzpcdFx0aWYgKCF0aW1lb3V0KSB7XG4gODk0Olx0XHRcdHRpbWVvdXQgPSBuZl9jdF90aW1lb3V0X2V4dF9hZGQoY3QsIHByaXYtXHUwMDNldGltZW91dCwgR0ZQX0FUT01JQyk7XG4gODk1Olx0XHRcdGlmICghdGltZW91dCkge1xuIDg5NjpcdFx0XHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcbiA4OTc6XHRcdFx0XHRyZXR1cm47XG4gODk4Olx0XHRcdH1cbiA4OTk6XHRcdH1cbiA5MDA6XHRcbiA5MDE6XHRcdC8qIGFkanVzdCB0aGUgdGltZW91dCBhcyBwZXIgJiMzOTtuZXcmIzM5OyBzdGF0ZS4gY3QgaXMgdW5jb25maXJtZWQsXG4gOTAyOlx0XHQgKiBzbyB0aGUgY3VycmVudCB0aW1lc3RhbXAgbXVzdCBub3QgYmUgYWRkZWQuXG4gOTAzOlx0XHQgKi9cbiA5MDQ6XHRcdHZhbHVlcyA9IG5mX2N0X3RpbWVvdXRfZGF0YSh0aW1lb3V0KTtcbiA5MDU6XHRcdGlmICh2YWx1ZXMpXG4gOTA2Olx0XHRcdG5mX2N0X3JlZnJlc2goY3QsIHZhbHVlc1swXSk7XG4gOTA3Olx0fVxuIDkwODpcdFxuIDkwOTpcdHN0YXRpYyBpbnQgbmZ0X2N0X3RpbWVvdXRfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiA5MTA6XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxuIDkxMTpcdFx0XHRcdFx0ICAgc3RydWN0IG5mdF9vYmplY3QgKm9iailcbiA5MTI6XHR7XG4gOTEzOlx0XHRzdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XG4gOTE0Olx0XHRjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG87XG4gOTE1Olx0XHRzdHJ1Y3QgbmZfY3RfdGltZW91dCAqdGltZW91dDtcbiA5MTY6XHRcdGludCBsM251bSA9IGN0eC1cdTAwM2VmYW1pbHk7XG4gOTE3Olx0XHRfX3U4IGw0bnVtO1xuIDkxODpcdFx0aW50IHJldDtcbiA5MTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE3NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgYSBQcm90b2NvbCBNaXNtYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBidWcgZml4LCBhbmQgaXQgc2VlbXMgdGhlIGNvcmUgaXNzdWUgaXMgdGhhdCBhIGNoZWNrLCBzcGVjaWZpY2FsbHkgYHByaXYtJmd0O2w0cHJvdG8gIT0gbmZfY3RfcHJvdG9udW0oY3QpYCwgd2FzIG1pc3NpbmcuIFJpZ2h0LCBzbyBpZiB0aG9zZSBhcmVuJiMzOTt0IGVxdWFsIOKAkyBtZWFuaW5nIHRoZSBleHBlY3RlZCBMYXllciA0IHByb3RvY29sIChgcHJpdi0mZ3Q7bDRwcm90b2ApIGRvZXNuJiMzOTt0IG1hdGNoIHRoZSBvbmUgdGhlIGNvbm5lY3Rpb24gdHJhY2tlciAoYGN0YCkgYWN0dWFsbHkgc2VlcyDigJMgdGhlbiB3ZSYjMzk7cmUgc3VwcG9zZWQgdG8gY2FsbCBgbmZfY3RfdGltZW91dF9leHRfYWRkYCB3aXRoIGBwcml2LSZndDt0aW1lb3V0YC4gQW5kIGBwcml2LSZndDt0aW1lb3V0YCwgdGhhdCYjMzk7cyBhIHRpbWVvdXQgb2JqZWN0IHNwZWNpZmljIHRvIGBwcml2LSZndDtsNHByb3RvYC4KCldhaXQgYSBzZWNvbmTigKYgbGV0IG1lIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSB0aGlzIHN0cmFpZ2h0LiBUaGUgZnVuY3Rpb24gYG5mX2N0X3RpbWVvdXRfZXh0X2FkZGAgdGFrZXMgdGhlIGNvbm5lY3Rpb24gdHJhY2tlciAoYGN0YCkgKmFuZCogdGhlIHRpbWVvdXQgb2JqZWN0IChgcHJpdi0mZ3Q7dGltZW91dGApLiBPa2F5LCB0aGF0IHNlZW1zIHJpZ2h0IHNvIGZhci4gTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBuZWVkIHRvIHZlcmlmeSB3aGF0IHRoYXQgZnVuY3Rpb24gYG5mX2N0X3RpbWVvdXRfZXh0X2FkZGAgZG9lcy4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgaXQgdG8gbWFrZSBzdXJlIHRoZSBsb2dpYyB0aGVyZSBpcyBzb3VuZCBpbiB0aGlzIHNjZW5hcmlvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9jdF90aW1lb3V0X2V4dF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg9Njg9c3RhdGljIGlubGluZVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg6Njk6c3RydWN0IG5mX2Nvbm5fdGltZW91dCAqbmZfY3RfdGltZW91dF9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdCxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTcwLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmZfY3RfdGltZW91dCAqdGltZW91dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MTc1ND1pbml0X2Nvbm50cmFjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZl9jb25uICp0bXBsLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xNzg3LVx0aWYgKHRpbWVvdXRfZXh0KVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jOjE3ODg6XHRcdG5mX2N0X3RpbWVvdXRfZXh0X2FkZChjdCwgcmN1X2RlcmVmZXJlbmNlKHRpbWVvdXRfZXh0LVx1MDAzZXRpbWVvdXQpLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTE3ODktXHRcdFx0XHQgICAgICBHRlBfQVRPTUlDKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmM9Nzk9aW50IG5mX2N0X3NldF90aW1lb3V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuYy0xMjItXHR9XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmM6MTIzOlx0dGltZW91dF9leHQgPSBuZl9jdF90aW1lb3V0X2V4dF9hZGQoY3QsIHRpbWVvdXQsIEdGUF9BVE9NSUMpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5jLTEyNC1cdGlmICghdGltZW91dF9leHQpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTg3Nj1zdGF0aWMgdm9pZCBuZnRfY3RfdGltZW91dF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtODkzLVx0aWYgKCF0aW1lb3V0KSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjg5NDpcdFx0dGltZW91dCA9IG5mX2N0X3RpbWVvdXRfZXh0X2FkZChjdCwgcHJpdi1cdTAwM2V0aW1lb3V0LCBHRlBfQVRPTUlDKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtODk1LVx0XHRpZiAoIXRpbWVvdXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA4NQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcywgYXMgdGhvdWdoIHRoZXNlIGFyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBuZl9jdF90aW1lb3V0X2V4dF9hZGRgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVybmFsIHdvcmtpbmdzIG9mIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIHNwZWNpZmljYWxseSB0aGUgdGltZW91dCBleHRlbnNpb24gbWVjaGFuaXNtIGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBTbywgbXkgZmlyc3Qgc3RlcCBpcyB0byBsb2NhdGUgYW5kIHJlYWQgdGhlIGBuZl9jdF90aW1lb3V0X2V4dF9hZGRgIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLiBUaGUgcGF0aCBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgZGVmaW5lZCB3aXRoaW4gdGhlIGNvcmUgTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgY29tcG9uZW50cywgc3BlY2lmaWNhbGx5IGluIGBpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaGAuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGhlYWRlciBmaWxlIHJldmVhbHMgYWJvdXQgdGhlIHN0cnVjdHVyZSBhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBJJiMzOTttIGhvcGluZyBpdCBjbGVhcmx5IG91dGxpbmVzIHRoZSBwYXJhbWV0ZXJzLCByZXR1cm4gdmFsdWUsIGFuZCBhbnkgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgaW4gYWRkaW5nIGEgdGltZW91dCBleHRlbnNpb24gdG8gYSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5LiBVbmRlcnN0YW5kaW5nIHRoZSBzaWduYXR1cmUgYW5kIHN1cnJvdW5kaW5nIGNvbW1lbnRzIHdpbGwgYmUgY3J1Y2lhbCB0byBncmFzcGluZyBpdHMgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGJyb2FkZXIgY29ubmVjdGlvbiB0cmFja2luZyBsaWZlY3ljbGUuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IGN1c3RvbSB0aW1lb3V0IHJ1bGVzIGFyZSBpbmplY3RlZCBpbnRvIGEgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjU6XHQjZW5kaWZcbiAgNjY6XHR9XG4gIDY3Olx0XG4gIDY4Olx0c3RhdGljIGlubGluZVxuICA2OTpcdHN0cnVjdCBuZl9jb25uX3RpbWVvdXQgKm5mX2N0X3RpbWVvdXRfZXh0X2FkZChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gIDcwOlx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBuZl9jdF90aW1lb3V0ICp0aW1lb3V0LFxuICA3MTpcdFx0XHRcdFx0XHQgICAgICBnZnBfdCBnZnApXG4gIDcyOlx0e1xuICA3MzpcdCNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVRcbiAgNzQ6XHRcdHN0cnVjdCBuZl9jb25uX3RpbWVvdXQgKnRpbWVvdXRfZXh0O1xuICA3NTpcdFxuICA3NjpcdFx0aWYgKCF0aW1lb3V0KVxuICA3NzpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgNzg6XHRcbiAgNzk6XHRcdHRpbWVvdXRfZXh0ID0gbmZfY3RfZXh0X2FkZChjdCwgTkZfQ1RfRVhUX1RJTUVPVVQsIGdmcCk7XG4gIDgwOlx0XHRpZiAoIXRpbWVvdXRfZXh0IHx8IHRpbWVvdXRfZXh0LVx1MDAzZXRpbWVvdXQpXG4gIDgxOlx0XHRcdHJldHVybiBOVUxMO1xuICA4MjpcdFxuICA4MzpcdFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2dGltZW91dC1cdTAwM2VyZWZjbnQpKVxuICA4NDpcdFx0XHRyZXR1cm4gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY1NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb25uZWN0aW9uIFRyYWNraW5nIFRpbWVvdXQgQnVnKioKCk9rYXksIHNvIGBuZl9jdF90aW1lb3V0X2V4dF9hZGRgIGlzIGp1c3QgdGFja2luZyBhIHRpbWVvdXQgZXh0ZW5zaW9uIG9udG8gYSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5LiBUaGUgcXVlc3Rpb24gaXMsIGlmIHRoZSBwcm90b2NvbCBvZiB0aGUgdGltZW91dCBvYmplY3QgKGBwcml2LSZndDtsNHByb3RvYCkgZG9lc24mIzM5O3QgbWF0Y2ggdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkmIzM5O3MgcHJvdG9jb2wgKGBuZl9jdF9wcm90b251bShjdClgKSwgd2hlcmUmIzM5O3MgdGhlIHZ1bG5lcmFiaWxpdHk/IEFoLCB0aGUgcHJvYmxlbSBpcyB0aGUgKm1pc21hdGNoKiBiZXR3ZWVuIHRoZSB0aW1lb3V0IG9iamVjdCYjMzk7cyBwcm90b2NvbCBhbmQgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkmIzM5O3MgcHJvdG9jb2wuIFRoZSBzeXN0ZW0gY291bGQgaW5jb3JyZWN0bHkgYXNzdW1lIHRoZSB0aW1lb3V0IG9iamVjdCBpcyByZWxldmFudCBmb3IgdGhlIGVudHJ5JiMzOTtzIHByb3RvY29sLiBUaGlzIHNlZW1zIGRhbmdlcm91cyBnaXZlbiBUQ1AgYW5kIFVEUCB0aW1lb3V0cyBoYXZlIGRpc3RpbmN0IGRhdGEgc3RydWN0dXJlcy4KCkxldCYjMzk7cyB0cmFjZSBob3cgYG5mX2N0X3RpbWVvdXRfZGF0YSh0aW1lb3V0KWAgaXMgdXNlZC4gTG9va2luZyBhdCBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgLCBJIHNlZToKCmBgYGMKCXZhbHVlcyA9IG5mX2N0X3RpbWVvdXRfZGF0YSh0aW1lb3V0KTsKCWlmICh2YWx1ZXMpCgkJbmZfY3RfcmVmcmVzaChjdCwgdmFsdWVzWzBdKTsKYGBgCgpSaWdodCwgYHZhbHVlc1swXWAgc2ltcGx5IHBvaW50cyB0byB0aGUgZmlyc3QgdGltZW91dCB2YWx1ZS4gQnV0IHdoYXQgaWYgdGhhdCB0aW1lb3V0IG9iamVjdCBpcyB1c2VkIG91dHNpZGUgdGhpcyBwYXJ0aWN1bGFyIGV2YWx1YXRpb24/IFdlIG5lZWQgdG8gdmVyaWZ5IGFsbCBpbnN0YW5jZXMgb2YgYG5mX2N0X3RpbWVvdXRfZGF0YWAgdXNhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2N0X3RpbWVvdXRfZGF0YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaD00Mj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCAqXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaDo0MzpuZl9jdF90aW1lb3V0X2RhdGEoY29uc3Qgc3RydWN0IG5mX2Nvbm5fdGltZW91dCAqdClcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTQ0LXtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaD05ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCAqbmZfY3RfdGltZW91dF9sb29rdXAoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTEwMS1cdGlmICh0aW1lb3V0X2V4dCBcdTAwMjZcdTAwMjYgcmN1X2FjY2Vzc19wb2ludGVyKHRpbWVvdXRfZXh0LVx1MDAzZXRpbWVvdXQpKVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg6MTAyOlx0XHR0aW1lb3V0cyA9IG5mX2N0X3RpbWVvdXRfZGF0YSh0aW1lb3V0X2V4dCk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC0xMDMtI2VuZGlmXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYz04NzY9c3RhdGljIHZvaWQgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTkwMy1cdCAqL1xubmV0L25ldGZpbHRlci9uZnRfY3QuYzo5MDQ6XHR2YWx1ZXMgPSBuZl9jdF90aW1lb3V0X2RhdGEodGltZW91dCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTkwNS1cdGlmICh2YWx1ZXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MTUKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbmZfY3RfdGltZW91dF9kYXRhYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgY29ubmVjdGlvbiB0aW1lb3V0cyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIG5ldGZpbHRlciBjb25udHJhY2sgc3lzdGVtLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdGhlIGBuZl9jdF90aW1lb3V0X2RhdGFgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBjaGVjayB0aGUgc3BlY2lmaWMgZGVmaW5pdGlvbnMgaW4gYGluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oYC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBoZWFkZXIgdG8gY29udGFpbiB0aGUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbnkgYXNzb2NpYXRlZCBtYWNyb3Mgb3IgZnVuY3Rpb25zIHRoYXQgZ292ZXJuIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUgbWFuYWdlcyB0aGUgZXhwaXJhdGlvbiBvZiBjb25uZWN0aW9ucy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgdGhlIHRpbWVvdXQgdmFsdWVzIHRoZW1zZWx2ZXMsIHBvdGVudGlhbGx5IHBlci1wcm90b2NvbCBvciBjb25uZWN0aW9uIHN0YXRlLCBhbmQgbWF5YmUgZXZlbiBmbGFncyBvciBtZWNoYW5pc21zIHJlbGF0ZWQgdG8gaG93IHRpbWVvdXRzIGFyZSBjYWxjdWxhdGVkIG9yIG1vZGlmaWVkLiBJdCYjMzk7cyB0aW1lIHRvIHJlZnJlc2ggYW5kIGFuYWx5emUgdGhpcyBjb3JlIHBpZWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzNTpcdFxuICAzNjpcdFx0dGltZW91dCA9IHJjdV9kZXJlZmVyZW5jZSh0aW1lb3V0X2V4dC1cdTAwM2V0aW1lb3V0KTtcbiAgMzc6XHRcdGlmICh0aW1lb3V0IFx1MDAyNlx1MDAyNiByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2dGltZW91dC1cdTAwM2VyZWZjbnQpKVxuICAzODpcdFx0XHRrZnJlZV9yY3UodGltZW91dCwgcmN1KTtcbiAgMzk6XHQjZW5kaWZcbiAgNDA6XHR9XG4gIDQxOlx0XG4gIDQyOlx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgKlxuICA0MzpcdG5mX2N0X3RpbWVvdXRfZGF0YShjb25zdCBzdHJ1Y3QgbmZfY29ubl90aW1lb3V0ICp0KVxuICA0NDpcdHtcbiAgNDU6XHQjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19USU1FT1VUXG4gIDQ2Olx0XHRzdHJ1Y3QgbmZfY3RfdGltZW91dCAqdGltZW91dDtcbiAgNDc6XHRcbiAgNDg6XHRcdHRpbWVvdXQgPSByY3VfZGVyZWZlcmVuY2UodC1cdTAwM2V0aW1lb3V0KTtcbiAgNDk6XHRcdGlmICh0aW1lb3V0ID09IE5VTEwpXG4gIDUwOlx0XHRcdHJldHVybiBOVUxMO1xuICA1MTpcdFxuICA1MjpcdFx0cmV0dXJuICh1bnNpZ25lZCBpbnQgKil0aW1lb3V0LVx1MDAzZWRhdGE7XG4gIDUzOlx0I2Vsc2VcbiAgNTQ6XHRcdHJldHVybiBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDMyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIENvbm5lY3Rpb24gVHJhY2tpbmcgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIHRpbWVvdXRzIGluIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFNwZWNpZmljYWxseSwgdGhlIGB0aW1lb3V0LSZndDtkYXRhYCBhcnJheSBpcyBhbiBgdW5zaWduZWQgaW50YCBhcnJheSAob3IgYHUzMmAgZm9yIHVzKSwgYW5kIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IG1pZ2h0IGJlIHVzaW5nIHRoZSAqd3JvbmcqIHRpbWVvdXQgdmFsdWVzIGlmIHRoZSBwcm90b2NvbHMgZG9uJiMzOTt0IG1hdGNoLiBUaGlzIGlzIHdoZXJlIHRoZSByZWQgZmxhZ3MgZ28gdXAuCgpJIGtub3cgVENQIGhhcyBhIGJvYXRsb2FkIG9mIHRpbWVvdXQgdmFsdWVzIOKAkyB3ZSYjMzk7cmUgdGFsa2luZyB0aGluZ3MgbGlrZSBgVENQX0NPTk5UUkFDS19TWU5fU0VOVGAsIGBUQ1BfQ09OTlRSQUNLX0VTVEFCTElTSEVEYCwgYW5kIGEgYnVuY2ggbW9yZS4gVURQLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgbXVjaCBzaW1wbGVyLCB3aXRoIGZhciBmZXdlciBzdGF0ZXMgYW5kIHRoZXJlZm9yZSBmZXdlciB0aW1lb3V0cywgbGlrZSBgVURQX0NUX1VOUkVQTElFRGAgYW5kIGBVRFBfQ1RfUkVQTElFRGAuCgpUaGUgcHJvYmxlbSBpcywgaWYgd2UgZW5kIHVwIGluIGEgc2l0dWF0aW9uIHdoZXJlIGEgVURQIGNvbm5lY3Rpb24gdXNlcyBhIFRDUCB0aW1lb3V0IG9iamVjdCwgaXQgKmNvdWxkKiBiZSBva2F5LiBVRFAgaXMgZ29pbmcgdG8gYWNjZXNzIGB0aW1lb3V0LSZndDtkYXRhYCB1c2luZyBpdHMgb3duIFVEUCBzdGF0ZSBpbmRpY2VzLiBTaW5jZSBUQ1AgaGFzIG1vcmUgc3RhdGVzLCB0aG9zZSBpbmRpY2VzIHNob3VsZCBiZSBpbiBib3VuZHMuIEhvd2V2ZXIsIGZsaXAgdGhlIHNjcmlwdC4gSWYgYSBUQ1AgY29ubmVjdGlvbiB1c2VzIGEgVURQIHRpbWVvdXQgb2JqZWN0LCB3ZSYjMzk7cmUgaW4gcmVhbCB0cm91YmxlLiBUQ1Agd2lsbCBhY2Nlc3MgYHRpbWVvdXQtJmd0O2RhdGFgIHVzaW5nIGl0cyBUQ1Agc3RhdGUgaW5kaWNlcy4gVENQIGhhcyB1cCB0byBmb3VydGVlbiBkaWZmZXJlbnQgc3RhdGVzIChvciBzb21ldGhpbmcgYXJvdW5kIHRoYXQgbnVtYmVyKS4gVURQIG9ubHkgaGFzIHR3by4gU28sIGlmIHdlIHRyeSBzb21ldGhpbmcgbGlrZSBgdGltZW91dC0mZ3Q7ZGF0YVtUQ1BfQ09OTlRSQUNLX0VTVEFCTElTSEVEXWAgb24gYSBVRFAgb2JqZWN0LCB3ZSYjMzk7cmUgKmd1YXJhbnRlZWQqIHRvIGhhdmUgYW4gb3V0LW9mLWJvdW5kcyByZWFkLiBUaGlzIGlzIGEgY2xhc3NpYyB2dWxuZXJhYmlsaXR5IQoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoaXMuIEJlZm9yZSBJIGdvIHRvbyBkZWVwLCBJIG5lZWQgdG8gc2VlIGhvdyB0aGlzIGB0aW1lb3V0LSZndDtkYXRhYCBhcnJheSBpcyBhY3R1YWxseSBhbGxvY2F0ZWQuIEkgaGF2ZSB0byBsb29rIGRlZXBlciB0byBzZWUgaG93IHRoZSBvYmplY3QgaXMgY29uc3RydWN0ZWQgdG8gY29uZmlybSBteSBzdXNwaWNpb25zIGFuZCB2ZXJpZnkgaG93IHdlIGNhbiBnZXQgaW50byB0aGlzIHNpdHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG5mX2N0X3RpbWVvdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC0xMy1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oOjE0OnN0cnVjdCBuZl9jdF90aW1lb3V0IHtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTE1LVx0cmVmY291bnRfdFx0XHRyZWZjbnQ7XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg9MjI9c3RydWN0IG5mX2Nvbm5fdGltZW91dCB7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaDoyMzpcdHN0cnVjdCBuZl9jdF90aW1lb3V0IF9fcmN1ICp0aW1lb3V0O1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmgtMjQtfTtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaD0yNj1zdGF0aWMgaW5saW5lIHZvaWQgbmZfY3RfdGltZW91dF9wdXQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTI5LVx0c3RydWN0IG5mX2Nvbm5fdGltZW91dCAqdGltZW91dF9leHQ7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaDozMDpcdHN0cnVjdCBuZl9jdF90aW1lb3V0ICp0aW1lb3V0O1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmgtMzEtXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg9NDM9bmZfY3RfdGltZW91dF9kYXRhKGNvbnN0IHN0cnVjdCBuZl9jb25uX3RpbWVvdXQgKnQpXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmgtNDUtI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfVElNRU9VVFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg6NDY6XHRzdHJ1Y3QgbmZfY3RfdGltZW91dCAqdGltZW91dDtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTQ3LVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oPTY5PXN0cnVjdCBuZl9jb25uX3RpbWVvdXQgKm5mX2N0X3RpbWVvdXRfZXh0X2FkZChzdHJ1Y3QgbmZfY29ubiAqY3QsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaDo3MDpcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5mX2N0X3RpbWVvdXQgKnRpbWVvdXQsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC03MS1cdFx0XHRcdFx0ICAgICAgZ2ZwX3QgZ2ZwKVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oPTk0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50ICpuZl9jdF90aW1lb3V0X2xvb2t1cChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmgtMTA3LSNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVRcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oOjEwODp2b2lkIG5mX2N0X3VudGltZW91dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZl9jdF90aW1lb3V0ICp0aW1lb3V0KTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTEwOS1pbnQgbmZfY3Rfc2V0X3RpbWVvdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY29ubiAqY3QsIHU4IGwzbnVtLCB1OCBsNG51bSxcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaD0xMjA9c3RhdGljIGlubGluZSB2b2lkIG5mX2N0X2Rlc3Ryb3lfdGltZW91dChzdHJ1Y3QgbmZfY29ubiAqY3QpXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmgtMTI2LSNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVRcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oOjEyNzpzdHJ1Y3QgbmZfY3RfdGltZW91dF9ob29rcyB7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaDoxMjg6XHRzdHJ1Y3QgbmZfY3RfdGltZW91dCAqKCp0aW1lb3V0X2ZpbmRfZ2V0KShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg6MTI5Olx0dm9pZCAoKnRpbWVvdXRfcHV0KShzdHJ1Y3QgbmZfY3RfdGltZW91dCAqdGltZW91dCk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC0xMzAtfTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTEzMS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oOjEzMjpleHRlcm4gY29uc3Qgc3RydWN0IG5mX2N0X3RpbWVvdXRfaG9va3MgX19yY3UgKm5mX2N0X3RpbWVvdXRfaG9vaztcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTEzMy0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc1MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gbmZfY3RfdGltZW91dCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29ubnRyYWNrIHRpbWVvdXQgc3RydWN0dXJlLCBzbyB0aGUgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byBgaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmhgLiBJJiMzOTttIGhvcGluZyBpdCYjMzk7cyB3ZWxsLWRvY3VtZW50ZWQg4oCTIEkmIzM5O20gbm90IGxvb2tpbmcgZm9yIGFueSBzdXJwcmlzZXMsIGp1c3QgYSBzb2xpZCBkZWZpbml0aW9uLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGRpZmZlcmVudCB0aW1lb3V0IHZhbHVlcyBhcmUgc3RydWN0dXJlZCwgaWYgdGhlcmUgYXJlIGFueSBmbGFncywgYW5kIGhvdyB0aGlzIHN0cnVjdCByZWxhdGVzIHRvIHRoZSBjb3JlIGNvbm50cmFjayBzdGF0ZSBtYW5hZ2VtZW50LiBJIHdhbnQgdG8gc2VlIGNsZWFybHkgaG93IHRpbWVvdXRzIGFyZSBoYW5kbGVkIGF0IHRoZSBkYXRhIHN0cnVjdHVyZSBsZXZlbCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRoZSBmaWVsZHMgdGhhdCBkZWZpbmUgdGhlIGdyYW51bGFyaXR5IGFuZCB0aGUgZGlmZmVyZW50IHRpbWVvdXQgaW50ZXJ2YWxzIChsaWtlIGVzdGFibGlzaGVkLCBjbG9zaW5nLCBldGMuKS4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGhlYWRlciBmaWxlIHByb3ZpZGVzIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBJIG5lZWQgZm9yIHRoaXMgY3VycmVudCBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4gICAyOlx0I2lmbmRlZiBfTkZfQ09OTlRSQUNLX1RJTUVPVVRfSFxuICAgMzpcdCNkZWZpbmUgX05GX0NPTk5UUkFDS19USU1FT1VUX0hcbiAgIDQ6XHRcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmV0X25hbWVzcGFjZS5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGVfY29tbW9uLmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudC5oXHUwMDNlXG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5oXHUwMDNlXG4gIDExOlx0XG4gIDEyOlx0I2RlZmluZSBDVE5MX1RJTUVPVVRfTkFNRV9NQVhcdDMyXG4gIDEzOlx0XG4gIDE0Olx0c3RydWN0IG5mX2N0X3RpbWVvdXQge1xuICAxNTpcdFx0cmVmY291bnRfdFx0XHRyZWZjbnQ7XG4gIDE2Olx0XHRfX3UxNlx0XHRcdGwzbnVtO1xuICAxNzpcdFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpsNHByb3RvO1xuICAxODpcdFx0c3RydWN0IHJjdV9oZWFkXHRcdHJjdTtcbiAgMTk6XHRcdGNoYXJcdFx0XHRkYXRhW107XG4gIDIwOlx0fTtcbiAgMjE6XHRcbiAgMjI6XHRzdHJ1Y3QgbmZfY29ubl90aW1lb3V0IHtcbiAgMjM6XHRcdHN0cnVjdCBuZl9jdF90aW1lb3V0IF9fcmN1ICp0aW1lb3V0O1xuICAyNDpcdH07XG4gIDI1Olx0XG4gIDI2Olx0c3RhdGljIGlubGluZSB2b2lkIG5mX2N0X3RpbWVvdXRfcHV0KGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdClcbiAgMjc6XHR7XG4gIDI4Olx0I2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfVElNRU9VVFxuICAyOTpcdFx0c3RydWN0IG5mX2Nvbm5fdGltZW91dCAqdGltZW91dF9leHQ7XG4gIDMwOlx0XHRzdHJ1Y3QgbmZfY3RfdGltZW91dCAqdGltZW91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ3NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyBgbmZfY3RfdGltZW91dGAgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbmZfY3RfdGltZW91dGAgc3RydWN0IGFuZCBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGF0IGBkYXRhW11gIOKAkyB0aGF0JiMzOTtzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyLiBUaGF0IG1lYW5zIHRoZSBzaXplIG9mIHRoZSB3aG9sZSBgc3RydWN0YCBpc24mIzM5O3QgZml4ZWQgYXQgY29tcGlsZSB0aW1lLiBJdHMgc2l6ZSBkeW5hbWljYWxseSBhZGFwdHMgYXQgcnVudGltZS4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgdGhlIHNpemUgb2YgYW4gaW5zdGFuY2Ugb2YgYHN0cnVjdCBuZl9jdF90aW1lb3V0YCBpcyBnb2luZyB0byBiZSBhbGxvY2F0ZWQgd2l0aCBhIHNpemUgZGVwZW5kaW5nIG9uIHRoZSBwcm90b2NvbC4gCgpOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0ICpob3cqIHRoYXQgYWxsb2NhdGlvbiBhY3R1YWxseSBoYXBwZW5zLiBXaGVyZSBpbiB0aGUgY29kZSBpcyB0aGUgbWVtb3J5IGJlaW5nIGNhcnZlZCBvdXQgZm9yIHRoaXMgdGhpbmcsIGFuZCBob3cgZG9lcyB0aGUgY29kZSBkZXRlcm1pbmUgdGhlIGNvcnJlY3Qgc2l6ZT8gTGV0JiMzOTtzIHRyYWNlIHRoaXMgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jLipzaXplb2YuKm5mX2N0X3RpbWVvdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfY3QuYz05MDk9c3RhdGljIGludCBuZnRfY3RfdGltZW91dF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtOTM2LVxubmV0L25ldGZpbHRlci9uZnRfY3QuYzo5Mzc6XHR0aW1lb3V0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5mX2N0X3RpbWVvdXQpICYjNDM7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTkzOC1cdFx0XHQgIGw0cHJvdG8tXHUwMDNlY3RubF90aW1lb3V0Lm9ial9zaXplLCBHRlBfS0VSTkVMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg1MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgT3V0LW9mLUJvdW5kcyBSZWFkIGluIENvbm5lY3Rpb24gVHJhY2tpbmcqKgoKT2theSwgbGV0JiMzOTtzIHNlZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhczogdGhlIGFsbG9jYXRpb24gb2YgYGw0cHJvdG8tJmd0O2N0bmxfdGltZW91dC5vYmpfc2l6ZWAgaW1wbGllcyB0aGF0IGlmIGEgVURQIHRpbWVvdXQgb2JqZWN0IGlzIGNyZWF0ZWQsIGl0IGFsbG9jYXRlcyBgc2l6ZW9mKHN0cnVjdCBuZl9jdF90aW1lb3V0KWAgcGx1cyB0aGUgYFVEUF9USU1FT1VUX09CSl9TSVpFYC4gUmlnaHQuIEFuZCBpZiBhIFRDUCBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IHVzZXMgKnRoYXQqIFVEUCB0aW1lb3V0IG9iamVjdCwgaXQgd2lsbCB0cnkgdG8gYWNjZXNzIHNvbWV0aGluZyBsaWtlIGB0aW1lb3V0LSZndDtkYXRhW1RDUF9TVEFURV1gLiBDbGVhcmx5LCBiZWNhdXNlIGBUQ1BfVElNRU9VVF9PQkpfU0laRWAgaXMgc2lnbmlmaWNhbnRseSBsYXJnZXIgdGhhbiBgVURQX1RJTUVPVVRfT0JKX1NJWkVgLCB0aGlzIHNjcmVhbXMgb3V0LW9mLWJvdW5kcyByZWFkLCByaWdodD8KCkJ1dCwgaG9sZCBvbi4gTG9va2luZyBjbG9zZXIgYXQgYG5mX2N0X3JlZnJlc2hgLCBpdCB0YWtlcyB0aGUgdmFsdWUgZnJvbSBgdmFsdWVzWzBdYC4gQW5kLCBpbiB0aGUgYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCBmdW5jdGlvbiwgaXQgZG9lcyBhIHNpbWlsYXIgdGhpbmcuCgpgYGBjCnZhbHVlcyA9IG5mX2N0X3RpbWVvdXRfZGF0YSh0aW1lb3V0KTsKaWYgKHZhbHVlcykKICAgIG5mX2N0X3JlZnJlc2goY3QsIHZhbHVlc1swXSk7CmBgYAoKQWgsIHJpZ2h0LCBgdmFsdWVzWzBdYCBpcyBqdXN0IHRoZSBmaXJzdCBlbGVtZW50LiBTbywgaXMgdGhlcmUgKmFjdHVhbGx5KiBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaGVyZT8gQWN0dWFsbHksIGB2YWx1ZXNbMF1gIHdpbGwgYWx3YXlzIGJlIHdpdGhpbiBib3VuZHMsIGFzIGxvbmcgYXMgYG9ial9zaXplICZndDs9IHNpemVvZih1bnNpZ25lZCBpbnQpYC4gSG1tLCB0aGF0IHNlZW1zIG9rYXkuCgpIb3dldmVyLCBJIGNhbiYjMzk7dCBiZSB0b28gaGFzdHkuIEkgbmVlZCB0byB0aGluayBhYm91dCAqb3RoZXIqIHBsYWNlcyB0aGF0IHVzZSB0aGUgdGltZW91dCBvYmplY3QuIFRoZSB0aW1lb3V0IG9iamVjdCBpcyB1bHRpbWF0ZWx5IGF0dGFjaGVkIHRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IHVzaW5nIGBuZl9jdF90aW1lb3V0X2V4dF9hZGRgLCBhbmQgb25jZSBhdHRhY2hlZCwgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgaXMgZ29pbmcgdG8gYmUgdXNpbmcgdGhhdCB0aW1lb3V0IG9iamVjdCBmb3IgZXZlcnkgc2luZ2xlIHN0YXRlIHRyYW5zaXRpb24uIFdoaWNoIG1lYW5zIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgd2hlcmUgYG5mX2N0X3RpbWVvdXRfbG9va3VwYCBhbmQgYG5mX2N0X3RpbWVvdXRfZGF0YWAgYXJlIGFjdHVhbGx5IHVzZWQgdGhyb3VnaG91dCB0aGUgY29kZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBhbmQgdGhhdCB0aG9zZSBmdW5jdGlvbnMgYXJlbiYjMzk7dCBiZWluZyB1c2VkIGluIGEgd2F5IHRoYXQgKndvdWxkKiByZXN1bHQgaW4gYW4gb3V0LW9mLWJvdW5kcyByZWFkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9jdF90aW1lb3V0X2xvb2t1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaD02OT1zdHJ1Y3QgbmZfY29ubl90aW1lb3V0ICpuZl9jdF90aW1lb3V0X2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTkzLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg6OTQ6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgKm5mX2N0X3RpbWVvdXRfbG9va3VwKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdClcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTk1LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MTk1Nj1zdGF0aWMgaW50IGdlbmVyaWNfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTk1OC17XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MTk1OTpcdGNvbnN0IHVuc2lnbmVkIGludCAqdGltZW91dCA9IG5mX2N0X3RpbWVvdXRfbG9va3VwKGN0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xOTYwLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5jPTI2Nj1pbnQgbmZfY29ubnRyYWNrX2dyZV9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5jLTI3NC1cdGlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSkge1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmM6Mjc1Olx0XHR1bnNpZ25lZCBpbnQgKnRpbWVvdXRzID0gbmZfY3RfdGltZW91dF9sb29rdXAoY3QpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmMtMjc2LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYz03MD1pbnQgbmZfY29ubnRyYWNrX2ljbXBfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMtNzctXHQgICBhbmQgYWxzbyB0byBoYW5kbGUgY29ycmVjdGx5IElDTVAgZWNobyByZXBseSBkdXBsaWNhdGVzLiAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jOjc4Olx0dW5zaWduZWQgaW50ICp0aW1lb3V0ID0gbmZfY3RfdGltZW91dF9sb29rdXAoY3QpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jLTc5LVx0c3RhdGljIGNvbnN0IHVfaW50OF90IHZhbGlkX25ld1tdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jPTg5PWludCBuZl9jb25udHJhY2tfaWNtcHY2X3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMtOTMte1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmM6OTQ6XHR1bnNpZ25lZCBpbnQgKnRpbWVvdXQgPSBuZl9jdF90aW1lb3V0X2xvb2t1cChjdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYy05NS1cdHN0YXRpYyBjb25zdCB1OCB2YWxpZF9uZXdbXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM9MzI3PWludCBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy01MjEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6NTIyOlx0dGltZW91dHMgPSBuZl9jdF90aW1lb3V0X2xvb2t1cChjdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtNTIzLVx0aWYgKCF0aW1lb3V0cylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz03MjI9c3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNzYwLVx0XHR0biA9IG5mX3RjcF9wZXJuZXQobmZfY3RfbmV0KGN0KSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo3NjE6XHRcdHRpbWVvdXRzID0gbmZfY3RfdGltZW91dF9sb29rdXAoY3QpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNzYyLVx0XHRpZiAoIXRpbWVvdXRzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTkxNz12b2lkIG5mX2Nvbm50cmFja190Y3Bfc2V0X2Nsb3Npbmcoc3RydWN0IG5mX2Nvbm4gKmN0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTkzNS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjkzNjpcdHRpbWVvdXRzID0gbmZfY3RfdGltZW91dF9sb29rdXAoY3QpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtOTM3LVx0aWYgKCF0aW1lb3V0cykge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTk2Mz1pbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyNzYtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMjc3Olx0dGltZW91dHMgPSBuZl9jdF90aW1lb3V0X2xvb2t1cChjdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMjc4LVx0aWYgKCF0aW1lb3V0cylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYz04ND1pbnQgbmZfY29ubnRyYWNrX3VkcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jLTk1LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmM6OTY6XHR0aW1lb3V0cyA9IG5mX2N0X3RpbWVvdXRfbG9va3VwKGN0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jLTk3LVx0aWYgKCF0aW1lb3V0cylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMDgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YDoKCioqRGlzc2VjdGluZyBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YC4gVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb24gaW4gdGhlIG5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZSwgcmlnaHQ/IEl0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGZvciBUQ1AgY29ubmVjdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29udHJvbCBmbG93LiBJdCYjMzk7cyBoYW5kbGluZyBUQ1AgcGFja2V0cyBhbmQgZmlndXJpbmcgb3V0IHRoZWlyIHJvbGUgaW4gdGhlIG9uZ29pbmcgY29ubmVjdGlvbi4gSSBoYXZlIHRvIHRoaW5rIGFib3V0IHN0YXRlIHRyYW5zaXRpb25zIOKAkyB3aGF0IGhhcHBlbnMgd2hlbiBpdCBzZWVzIGEgU1lOLCBTWU4tQUNLLCBBQ0ssIEZJTiwgUlNULCBhbmQgc28gb24uIEl0JiMzOTtzIGdvdCB0byBwYXJzZSB0aGUgVENQIGZsYWdzIHRvIGRldGVybWluZSB0aGUgY29ubmVjdGlvbiYjMzk7cyBzdGF0ZSwgb3IgbW9kaWZ5IGV4aXN0aW5nIHN0YXRlLCBiYXNlZCBvbiB0aGUgZmxvdyBpdCBpcyBzZWVpbmcuCgpJJiMzOTttIHBpY3R1cmluZyBpdCBoYW5kbGluZyB2YXJpb3VzIHNjZW5hcmlvczogaW5pdGlhbCBjb25uZWN0aW9uIHNldHVwLCBkYXRhIHRyYW5zZmVyLCBjb25uZWN0aW9uIHRlYXJkb3duIChncmFjZWZ1bCBvciBhYnJ1cHQpLiBJdOKAmXMgZXNzZW50aWFsIGZvciBlbnN1cmluZyBjb25uZWN0aW9ucyBhcmUgcHJvcGVybHkgdHJhY2tlZCwgc28gTkFULCBmaXJld2FsbCBydWxlcywgYW5kIG90aGVyIHN0YXRlZnVsIG9wZXJhdGlvbnMgY2FuIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhlcmUgaXMgYSBsb3Qgb2Ygc3RhdGUgdG8ganVnZ2xlOiBzZXF1ZW5jZSBudW1iZXJzLCBhY2tub3dsZWRnZW1lbnQgbnVtYmVycywgd2luZG93IHNpemVzLCBhbmQgcG90ZW50aWFsbHkgcmV0cmFuc21pc3Npb25zIG9yIG91dC1vZi1vcmRlciBwYWNrZXRzLiBUaGUgY29ubmVjdGlvbiB0cmFja2luZyByZWxpZXMgb24gYWxsIHRoYXQgaW5mb3JtYXRpb24sIGFuZCBzbyBpdCBpcyBhbiBpbXBvcnRhbnQgZnVuY3Rpb24uIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIHRvbywgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gVGhlIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGluIHRoZSBmYXN0IHBhdGgsIHNvIGVmZmljaWVuY3kgaXMgcGFyYW1vdW50LiBBbnkgYm90dGxlbmVja3MgaGVyZSBjYW4gaHVydCB0aHJvdWdocHV0LiBJdCBpcyByZWFsbHkgdGhlIGhlYXJ0IG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjcwOlx0XHRjdC1cdTAwM2Vwcm90by50Y3AubGFzdF9kaXIgPSBkaXI7XG4xMjcxOlx0XG4xMjcyOlx0XHRjdC1cdTAwM2Vwcm90by50Y3Auc3RhdGUgPSBuZXdfc3RhdGU7XG4xMjczOlx0XHRpZiAob2xkX3N0YXRlICE9IG5ld19zdGF0ZVxuMTI3NDpcdFx0ICAgIFx1MDAyNlx1MDAyNiBuZXdfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19GSU5fV0FJVClcbjEyNzU6XHRcdFx0Y3QtXHUwMDNlcHJvdG8udGNwLnNlZW5bZGlyXS5mbGFncyB8PSBJUF9DVF9UQ1BfRkxBR19DTE9TRV9JTklUO1xuMTI3NjpcdFxuMTI3NzpcdFx0dGltZW91dHMgPSBuZl9jdF90aW1lb3V0X2xvb2t1cChjdCk7XG4xMjc4Olx0XHRpZiAoIXRpbWVvdXRzKVxuMTI3OTpcdFx0XHR0aW1lb3V0cyA9IHRuLVx1MDAzZXRpbWVvdXRzO1xuMTI4MDpcdFxuMTI4MTpcdFx0aWYgKGN0LVx1MDAzZXByb3RvLnRjcC5yZXRyYW5zIFx1MDAzZT0gdG4tXHUwMDNldGNwX21heF9yZXRyYW5zIFx1MDAyNlx1MDAyNlxuMTI4MjpcdFx0ICAgIHRpbWVvdXRzW25ld19zdGF0ZV0gXHUwMDNlIHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfUkVUUkFOU10pXG4xMjgzOlx0XHRcdHRpbWVvdXQgPSB0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1JFVFJBTlNdO1xuMTI4NDpcdFx0ZWxzZSBpZiAodW5saWtlbHkoaW5kZXggPT0gVENQX1JTVF9TRVQpKVxuMTI4NTpcdFx0XHR0aW1lb3V0ID0gdGltZW91dHNbVENQX0NPTk5UUkFDS19DTE9TRV07XG4xMjg2Olx0XHRlbHNlIGlmICgoY3QtXHUwMDNlcHJvdG8udGNwLnNlZW5bMF0uZmxhZ3MgfCBjdC1cdTAwM2Vwcm90by50Y3Auc2VlblsxXS5mbGFncykgXHUwMDI2XG4xMjg3Olx0XHRcdCBJUF9DVF9UQ1BfRkxBR19EQVRBX1VOQUNLTk9XTEVER0VEIFx1MDAyNlx1MDAyNlxuMTI4ODpcdFx0XHQgdGltZW91dHNbbmV3X3N0YXRlXSBcdTAwM2UgdGltZW91dHNbVENQX0NPTk5UUkFDS19VTkFDS10pXG4xMjg5Olx0XHRcdHRpbWVvdXQgPSB0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1VOQUNLXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3ODYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE91dC1vZi1Cb3VuZHMgUmVhZCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBhY2Nlc3NpbmcgYHRpbWVvdXRzW25ld19zdGF0ZV1gLiBNeSBtaW5kIGlzIHJhY2luZyDigJMgaWYgYHRpbWVvdXRzYCBpcyBhY3R1YWxseSBhIFVEUCB0aW1lb3V0IG9iamVjdCwgaXRzIHNpemUgaXMgb25seSBhIGNvdXBsZSBvZiB1bnNpZ25lZCBpbnRzLCBidXQgYG5ld19zdGF0ZWAgY291bGQgYmUgbXVjaCBsYXJnZXIuIFRoYXQmIzM5O3MgYSB0ZXh0Ym9vayBvdXQtb2YtYm91bmRzIHJlYWQhIFdlIGFsbCBrbm93IEtBU0FOIGlzIHRoZXJlIHRvIGRldGVjdCB0aG9zZSwgcmlnaHQ/CgpCdXQsIHdhaXQuLi4gaXMgdGhlcmUgYW55ICp1bmluaXRpYWxpemVkKiBtZW1vcnkgaW52b2x2ZWQ/IFRoZSB0aW1lb3V0IG9iamVjdCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AsIHNvIGl0JiMzOTtzIGZ1bGx5IHplcm9lZC4gU28sIHdoaWxlIGl0ICppcyogYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBpdCB3aWxsIGxpa2VseSBqdXN0IHJlYWQgaW50byBhZGphY2VudCBtZW1vcnkuIEFuZCBLQVNBTiB3aWxsIGNhdGNoICp0aGF0KiBvdXQtb2YtYm91bmRzIHJlYWQsIHJlZ2FyZGxlc3MuIEkmIzM5O20gcHJldHR5IHN1cmUgS0FTQU4gd2lsbCBjYXRjaCB0aGlzLgoKTm93LCBob2xkIG9uLi4uIHdoYXQgaWYgdGhlIG91dC1vZi1ib3VuZHMgcmVhZCBlbmRzIHVwIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb2YgYW4gYWRqYWNlbnQgYWxsb2NhdGlvbj8gS0FTQU4gc3RpbGwgY2F0Y2hlcyB0aGF0ISBLTVNBTiBpcyBtb3JlIGdlYXJlZCB0b3dhcmRzIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBzcGVjaWZpY2FsbHksIGJ1dCB0aGUgY29yZSBpc3N1ZSBoZXJlIGlzIGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzcywgc28gS0FTQU4gaXMgZGVmaW5pdGVseSB0aGUgdG9vbCBmb3IgdGhlIGpvYi4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIGVsc2UgaW4gdGhlIHBhdGNoIHRvIGJlIGF3YXJlIG9mLiBBaCwgcmlnaHQsIHRoZSBgcHJpdi0mZ3Q7bDRwcm90byAhPSBuZl9jdF9wcm90b251bShjdClgIGNoZWNrLiBUaGF0IHByZXZlbnRzIGF0dGFjaGluZyB0aGUgdGltZW91dCBvYmplY3Qgb2Ygb25lIHByb3RvY29sIHRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IG9mIGFub3RoZXIuIEdvb2QuIFRoaXMgYmxvY2tzIHR5cGUgY29uZnVzaW9uIGFuZCBmdXJ0aGVyIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuCgpPa2F5LCBpcyB0aGVyZSBhbnkgcG9zc2liaWxpdHkgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlPyBJIHJlbWVtYmVyIHRoZSB0aW1lb3V0IG9iamVjdCB2YWx1ZXMgYmVpbmcgcmVhZCBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmssIGFuZCBJIGtub3cgdGhleSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIFdhaXQsIGhvdyBpcyB0aGUgdGltZW91dCBvYmplY3QgaW5pdGlhbGl6ZWQ/IEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IHBvaW50IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkwOTpcdHN0YXRpYyBpbnQgbmZ0X2N0X3RpbWVvdXRfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiA5MTA6XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxuIDkxMTpcdFx0XHRcdFx0ICAgc3RydWN0IG5mdF9vYmplY3QgKm9iailcbiA5MTI6XHR7XG4gOTEzOlx0XHRzdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XG4gOTE0Olx0XHRjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG87XG4gOTE1Olx0XHRzdHJ1Y3QgbmZfY3RfdGltZW91dCAqdGltZW91dDtcbiA5MTY6XHRcdGludCBsM251bSA9IGN0eC1cdTAwM2VmYW1pbHk7XG4gOTE3Olx0XHRfX3U4IGw0bnVtO1xuIDkxODpcdFx0aW50IHJldDtcbiA5MTk6XHRcbiA5MjA6XHRcdGlmICghdGJbTkZUQV9DVF9USU1FT1VUX0w0UFJPVE9dIHx8XG4gOTIxOlx0XHQgICAgIXRiW05GVEFfQ1RfVElNRU9VVF9EQVRBXSlcbiA5MjI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gOTIzOlx0XG4gOTI0Olx0XHRpZiAodGJbTkZUQV9DVF9USU1FT1VUX0wzUFJPVE9dKVxuIDkyNTpcdFx0XHRsM251bSA9IG50b2hzKG5sYV9nZXRfYmUxNih0YltORlRBX0NUX1RJTUVPVVRfTDNQUk9UT10pKTtcbiA5MjY6XHRcbiA5Mjc6XHRcdGw0bnVtID0gbmxhX2dldF91OCh0YltORlRBX0NUX1RJTUVPVVRfTDRQUk9UT10pO1xuIDkyODpcdFx0cHJpdi1cdTAwM2VsNHByb3RvID0gbDRudW07XG4gOTI5Olx0XG4gOTMwOlx0XHRsNHByb3RvID0gbmZfY3RfbDRwcm90b19maW5kKGw0bnVtKTtcbiA5MzE6XHRcbiA5MzI6XHRcdGlmIChsNHByb3RvLVx1MDAzZWw0cHJvdG8gIT0gbDRudW0pIHtcbiA5MzM6XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4gOTM0Olx0XHRcdGdvdG8gZXJyX3Byb3RvX3B1dDtcbiA5MzU6XHRcdH1cbiA5MzY6XHRcbiA5Mzc6XHRcdHRpbWVvdXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmZfY3RfdGltZW91dCkgJiM0MztcbiA5Mzg6XHRcdFx0XHQgIGw0cHJvdG8tXHUwMDNlY3RubF90aW1lb3V0Lm9ial9zaXplLCBHRlBfS0VSTkVMKTtcbiA5Mzk6XHRcdGlmICh0aW1lb3V0ID09IE5VTEwpIHtcbiA5NDA6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiA5NDE6XHRcdFx0Z290byBlcnJfcHJvdG9fcHV0O1xuIDk0MjpcdFx0fVxuIDk0MzpcdFxuIDk0NDpcdFx0cmV0ID0gbmZ0X2N0X3RpbWVvdXRfcGFyc2VfcG9saWN5KFx1MDAyNnRpbWVvdXQtXHUwMDNlZGF0YSwgbDRwcm90bywgY3R4LVx1MDAzZW5ldCxcbiA5NDU6XHRcdFx0XHRcdFx0ICB0YltORlRBX0NUX1RJTUVPVVRfREFUQV0pO1xuIDk0NjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA5NDc6XHRcdFx0Z290byBlcnJfZnJlZV90aW1lb3V0O1xuIDk0ODpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMwMAoJCQkJCQkJb3V0cHV0OiAyMTEKCQkJCQkJCXRob3VnaHRzOiAxMDA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29ubmVjdGlvbiBUcmFja2luZyBUaW1lb3V0IEJ1ZyoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2YgdGhpcyBjb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQgaXNzdWUuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgcHJvYmxlbSBsaWVzIGluIGEgcHJvdG9jb2wgbWlzbWF0Y2ggd2l0aGluIHRoZSB0aW1lb3V0IG9iamVjdC4KCkluaXRpYWxseSwgYG5mdF9jdF90aW1lb3V0X3BhcnNlX3BvbGljeWAgcGFyc2VzIG5ldGxpbmsgYXR0cmlidXRlcyBhbmQgcG9wdWxhdGVzIHRoZSBgdGltZW91dC0mZ3Q7ZGF0YWAgc3RydWN0dXJlLiBJbXBvcnRhbnRseSwgYGt6YWxsb2NgIGlzIHVzZWQsIHNvIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSB6ZXJvZWQsIG1ha2luZyB0aGlzIHN0cmljdGx5IGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4KClRoZSBidWcgc3VyZmFjZXMgYmVjYXVzZSBhIHRpbWVvdXQgb2JqZWN0IGRlc2lnbmVkIGZvciBvbmUgcHJvdG9jb2wgaXMgZ2V0dGluZyBhdHRhY2hlZCB0byBhIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgZm9yIGEgKmRpZmZlcmVudCogcHJvdG9jb2wuIFRoaXMgbGVhZHMgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgdHJpZXMgdG8gYWNjZXNzIHRoZSBgdGltZW91dHNgIGFycmF5IHVzaW5nIGFuIGluZGV4IChgbmV3X3N0YXRlYCkgdGhhdCBleGNlZWRzIHRoZSBib3VuZHMgZGVmaW5lZCBieSB0aGUgdGltZW91dCBvYmplY3QmIzM5O3MgcHJvdG9jb2wuIEl0JiMzOTtzIGEgY2xhc3NpYyBleGFtcGxlIG9mIHJlYWRpbmcgcGFzdCB0aGUgYWxsb2NhdGVkIG1lbW9yeS4gS0FTQU4gc2hvdWxkIGJlIGFibGUgdG8gY2F0Y2ggdGhpcy4KCkkgc3RhcnRlZCBkaWdnaW5nIGRlZXBlciBieSBsb29raW5nIGF0IGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAuIFRoZSBjb2RlIGluY2x1ZGVzIHNldmVyYWwgY2hlY2tzIHVzaW5nIGBwcml2LSZndDtsNHByb3RvYCwgd2hpY2ggaXMgdGhlIHByb3RvY29sIG9mIHRoZSB0aW1lb3V0IG9iamVjdC4gVGhlIG1vc3QgaW1wb3J0YW50IGNoZWNrIGlzIGBwcml2LSZndDtsNHByb3RvICE9IHBrdC0mZ3Q7dHByb3RgLiBXaGlsZSB0aGlzIGNoZWNrcyB0aGF0IHRoZSBwYWNrZXQmIzM5O3MgcHJvdG9jb2wgbWF0Y2hlcyB0aGUgdGltZW91dCBvYmplY3QmIzM5O3MgcHJvdG9jb2wsIEkgdGhvdWdodCBhYm91dCBhIHNwZWNpZmljIGVkZ2UgY2FzZSB3aGVyZSB0aGUgcGFja2V0JiMzOTtzIHByb3RvY29sIGlzIGRpZmZlcmVudCBmcm9tIHRoZSB0cmFja2VkIGNvbm5lY3Rpb24mIzM5O3MgcHJvdG9jb2wsIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBJQ01QIGVycm9ycy4gQSBUQ1AgY29ubmVjdGlvbiBtaWdodCBnZW5lcmF0ZSBhbiBJQ01QIGVycm9yIHBhY2tldC4gSW4gdGhpcyBjYXNlLCBgcGt0LSZndDt0cHJvdGAgaXMgSUNNUCAodGhlIElDTVAgZXJyb3IgcGFja2V0KSwgd2hpbGUgYG5mX2N0X3Byb3RvbnVtKGN0KWAgaXMgVENQICh0aGUgb3JpZ2luYWwgY29ubmVjdGlvbiB0aGF0IGNhdXNlZCB0aGUgSUNNUCBlcnJvcikuCgpUaGUga2V5IGlzIHRoYXQgaWYgYHBrdC0mZ3Q7dHByb3RgIGlzIElDTVAgYW5kIGBwcml2LSZndDtsNHByb3RvYCBpcyBhbHNvIElDTVAsIHRoZSBmaXJzdCBjaGVjayB3aWxsIHBhc3MsIGJ1dCB0aGUgSUNNUCB0aW1lb3V0IG9iamVjdCBpcyBzdGlsbCBhdHRhY2hlZCB0byB0aGUgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkuCgpTbywgaWYgYG5mX2N0X3RpbWVvdXRfZXh0X2FkZGAgaXMgY2FsbGVkIHdpdGggYW4gSUNNUCB0aW1lb3V0IG9iamVjdCAoYHByaXYtJmd0O3RpbWVvdXRgKSBhbmQgYSBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSAoYGN0YCksIHdlJiMzOTtyZSBzZXR0aW5nIHRoZSBzdGFnZSBmb3IgdGhlIGJ1Zy4gTGF0ZXIsIHdoZW4gdGhhdCBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSBwcm9jZXNzZXMgYSAqVENQKiBwYWNrZXQsIGl0IHdpbGwgaW5jb3JyZWN0bHkgYWNjZXNzIHRoZSBJQ01QIHRpbWVvdXQgb2JqZWN0LiBUaGUgSUNNUCB0aW1lb3V0IG9iamVjdCBvbmx5IGhhcyBhIHNtYWxsIHN0YXRlIGFycmF5IChwZXJoYXBzIG9uZSBvciB0d28gZW50cmllcywgZGVmaW5lZCBieSBgSUNNUF9DVF9NQVhgKS4gVGhlIFRDUCBjb25uZWN0aW9uLCBvbiB0aGUgb3RoZXIgaGFuZCwgd2lsbCB0cnkgdG8gYWNjZXNzIHRoZSBhcnJheSB1c2luZyBgVENQX0NPTk5UUkFDS19FU1RBQkxJU0hFRGAgKHdoaWNoIGlzIGxpa2VseSBsYXJnZXIpLgoKVGhpcyBpcyB0aGUgb3V0LW9mLWJvdW5kcyByZWFkISBUaGUgSUNNUCB0aW1lb3V0IG9iamVjdCBnZXRzIGF0dGFjaGVkIHRvIHRoZSBUQ1AgY29ubmVjdGlvbiBlbnRyeSBhbmQgdGhlIFRDUCBlbnRyeSByZWFkcyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIHRpbWVvdXQgb2JqZWN0JiMzOTtzIGRhdGEgYXJyYXkuCgpTaW5jZSB0aGlzIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgS0FTQU4gd2lsbCBkZWZpbml0ZWx5IGNhdGNoIGl0LiBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LCBhcyB3ZSBhcmVuJiMzOTt0IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlOyBga3phbGxvY2AgdG9vayBjYXJlIG9mIHRoYXQuCgpUbyBzdW0gaXQgdXA6CgoxLiAgVGhlIGNydWNpYWwgYHByaXYtJmd0O2w0cHJvdG8gIT0gbmZfY3RfcHJvdG9udW0oY3QpYCBjaGVjayBpcyBtaXNzaW5nLgoyLiAgV2l0aG91dCB0aGUgY2hlY2ssIHRpbWVvdXQgb2JqZWN0cyBvZiBkaWZmZXJlbnQgcHJvdG9jb2xzIGNhbiBiZSBpbmNvcnJlY3RseSBhdHRhY2hlZCB0byBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJpZXMuIElDTVAgZXJyb3IgcGFja2V0cyBhc3NvY2lhdGVkIHdpdGggVENQIGNvbm5lY3Rpb25zIGFyZSBhIGNsYXNzaWMgZXhhbXBsZS4KMy4gIFRoZSBzaXplIG9mIHRoZSB0aW1lb3V0IG9iamVjdCYjMzk7cyBkYXRhIGFycmF5IGRlcGVuZHMgb24gaXRzIHByb3RvY29sIChlLmcuLCBgVURQX1RJTUVPVVRfT0JKX1NJWkVgLCBgVENQX1RJTUVPVVRfT0JKX1NJWkVgKS4KNC4gIFdoZW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgYWNjZXNzZXMgdGhlIGFycmF5IHVzaW5nIGl0cyBvd24gcHJvdG9jb2wmIzM5O3Mgc3RhdGUgaW5kaWNlcywgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGNhbiBvY2N1ciBpZiB0aGUgYXR0YWNoZWQgdGltZW91dCBvYmplY3QgaXMgZGVzaWduZWQgZm9yIGEgcHJvdG9jb2wgd2l0aCBmZXdlciBzdGF0ZXMuCjUuICBUaGlzIGlzIGEgY2xlYW4gb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkuCjYuICBUaGUgdXNlIG9mIGBremFsbG9jYCBuZWdhdGVzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucy4KNy4gIEtBU0FOIGlzIHRoZSBjb3JyZWN0IHRvb2wgdG8gZGV0ZWN0IHRoaXMgb3V0LW9mLWJvdW5kcyByZWFkLgoKVGhlcmVmb3JlLCBJJiMzOTtsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIHdpdGggdGhlIHJlYXNvbmluZyBJJiMzOTt2ZSBsYWlkIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYSB0aW1lb3V0IG9iamVjdCBvZiBvbmUgcHJvdG9jb2wgY291bGQgYmUgYXR0YWNoZWQgdG8gYSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IG9mIGEgZGlmZmVyZW50IHByb3RvY29sLiBUaGlzIGNhbiBvY2N1ciwgZm9yIGV4YW1wbGUsIHdoZW4gYW4gSUNNUCBlcnJvciBwYWNrZXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkuIFRoZSB0aW1lb3V0IG9iamVjdCYjMzk7cyBkYXRhIGFycmF5IGlzIHNpemVkIGFjY29yZGluZyB0byBpdHMgcHJvdG9jb2wgKGUuZy4sIElDTVAgaGFzIGZld2VyIHN0YXRlcyB0aGFuIFRDUCkuIElmIGEgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgdXNlcyBhbiBJQ01QIHRpbWVvdXQgb2JqZWN0LCBpdCB3aWxsIGFjY2VzcyB0aGUgdGltZW91dCBkYXRhIGFycmF5IHVzaW5nIFRDUCBzdGF0ZSBpbmRpY2VzLCByZXN1bHRpbmcgaW4gYW4gb3V0LW9mLWJvdW5kcyByZWFkLlxuXG5UaGlzIHZ1bG5lcmFiaWxpdHkgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhlIHRpbWVvdXQgb2JqZWN0cyBhcmUgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jYCwgZW5zdXJpbmcgdGhleSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBpdCB3aWxsIGVmZmVjdGl2ZWx5IGNhdGNoIHRoaXMgYnVnLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBhIHRpbWVvdXQgb2JqZWN0IG9mIG9uZSBwcm90b2NvbCBjb3VsZCBiZSBhdHRhY2hlZCB0byBhIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgb2YgYSBkaWZmZXJlbnQgcHJvdG9jb2wuIFRoaXMgY2FuIG9jY3VyLCBmb3IgZXhhbXBsZSwgd2hlbiBhbiBJQ01QIGVycm9yIHBhY2tldCBpcyBhc3NvY2lhdGVkIHdpdGggYSBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeS4gVGhlIHRpbWVvdXQgb2JqZWN0JiMzOTtzIGRhdGEgYXJyYXkgaXMgc2l6ZWQgYWNjb3JkaW5nIHRvIGl0cyBwcm90b2NvbCAoZS5nLiwgSUNNUCBoYXMgZmV3ZXIgc3RhdGVzIHRoYW4gVENQKS4gSWYgYSBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSB1c2VzIGFuIElDTVAgdGltZW91dCBvYmplY3QsIGl0IHdpbGwgYWNjZXNzIHRoZSB0aW1lb3V0IGRhdGEgYXJyYXkgdXNpbmcgVENQIHN0YXRlIGluZGljZXMsIHJlc3VsdGluZyBpbiBhbiBvdXQtb2YtYm91bmRzIHJlYWQuXG5cblRoaXMgdnVsbmVyYWJpbGl0eSBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkLiBUaGUgdGltZW91dCBvYmplY3RzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NgLCBlbnN1cmluZyB0aGV5IGFyZSBmdWxseSBpbml0aWFsaXplZCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLQVNBTiBpcyB0aGUgYXBwcm9wcmlhdGUgdG9vbCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYW5kIGl0IHdpbGwgZWZmZWN0aXZlbHkgY2F0Y2ggdGhpcyBidWcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTQ6MjMuMjg5NDE4ODE2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3ODQ0MjI2MTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GVF9DVFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1RJTUVPVVRcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZnRfY3RfdGltZW91dF9vYmpfZXZhbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYSB0aW1lb3V0IG9iamVjdCBvZiBvbmUgcHJvdG9jb2wgY291bGQgYmUgYXR0YWNoZWQgdG8gYSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IG9mIGEgZGlmZmVyZW50IHByb3RvY29sLiBUaGlzIGNhbiBvY2N1ciwgZm9yIGV4YW1wbGUsIHdoZW4gYW4gSUNNUCBlcnJvciBwYWNrZXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkuIFRoZSB0aW1lb3V0IG9iamVjdCdzIGRhdGEgYXJyYXkgaXMgc2l6ZWQgYWNjb3JkaW5nIHRvIGl0cyBwcm90b2NvbCAoZS5nLiwgSUNNUCBoYXMgZmV3ZXIgc3RhdGVzIHRoYW4gVENQKS4gSWYgYSBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSB1c2VzIGFuIElDTVAgdGltZW91dCBvYmplY3QsIGl0IHdpbGwgYWNjZXNzIHRoZSB0aW1lb3V0IGRhdGEgYXJyYXkgdXNpbmcgVENQIHN0YXRlIGluZGljZXMsIHJlc3VsdGluZyBpbiBhbiBvdXQtb2YtYm91bmRzIHJlYWQuXFxuXFxuVGhpcyB2dWxuZXJhYmlsaXR5IGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQuIFRoZSB0aW1lb3V0IG9iamVjdHMgYXJlIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY2AsIGVuc3VyaW5nIHRoZXkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtBU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgaXQgd2lsbCBlZmZlY3RpdmVseSBjYXRjaCB0aGlzIGJ1Zy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBsYXllciA0IHByb3RvY29sIGNoZWNrIHRvIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIFRoaXMgcHJldmVudHMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5J3MgcHJvdG9jb2wgYW5kIHRoZSBjb25maWd1cmVkIHRpbWVvdXQgb2JqZWN0J3MgcHJvdG9jb2wuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKG5mdGFibGVzKSwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBoYW5kbGVzIHZhcmlvdXMgcGFja2V0IGFuZCBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTQ6MjMuMjg5NDI1OTQ2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcxMzg4NzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTM3OWRhYjJiMTEzY2I2NjY1YjJjNmM1M2E0YWRhMGMzMGI0NWY0N1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwMDo1NDoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jIGIvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xcbmluZGV4IDAzYTg4Yzc3ZTBmMDIuLmQ2MThiZmE5NjAyZmEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcXG5AQCAtODg1LDcgKzg4NSw4IEBAIHN0YXRpYyB2b2lkIG5mdF9jdF90aW1lb3V0X29ial9ldmFsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmosXFxuIFxcdGlmIChwcml2LVxcdTAwM2VsNHByb3RvICE9IHBrdC1cXHUwMDNldHByb3QpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGlmICghY3QgfHwgbmZfY3RfaXNfdGVtcGxhdGUoY3QpIHx8IG5mX2N0X2lzX2NvbmZpcm1lZChjdCkpXFxuK1xcdGlmICghY3QgfHwgbmZfY3RfaXNfdGVtcGxhdGUoY3QpIHx8IG5mX2N0X2lzX2NvbmZpcm1lZChjdCkgfHxcXG4rXFx0ICAgIHByaXYtXFx1MDAzZWw0cHJvdG8gIT0gbmZfY3RfcHJvdG9udW0oY3QpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHR0aW1lb3V0ID0gbmZfY3RfdGltZW91dF9maW5kKGN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTQ6MjQuNzYxOTA5MjE2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDM4NzY1ODA1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZUX0NUXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfVElNRU9VVFwiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9jdF90aW1lb3V0X29ial9ldmFsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGxheWVyIDQgcHJvdG9jb2wgY2hlY2sgdG8gYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCBpbiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbS4gVGhpcyBwcmV2ZW50cyBhIG1pc21hdGNoIGJldHdlZW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkncyBwcm90b2NvbCBhbmQgdGhlIGNvbmZpZ3VyZWQgdGltZW91dCBvYmplY3QncyBwcm90b2NvbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAobmZ0YWJsZXMpLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGhhbmRsZXMgdmFyaW91cyBwYWNrZXQgYW5kIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3RhdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5Mzc5ZGFiMmIxMTNjYjY2NjViMmM2YzUzYTRhZGEwYzMwYjQ1ZjQ3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDA6NTQ6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jIGIvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xuaW5kZXggMDNhODhjNzdlMGYwMi4uZDYxOGJmYTk2MDJmYSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcbkBAIC04ODUsNyArODg1LDggQEAgc3RhdGljIHZvaWQgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcbiBcdGlmIChwcml2LVx1MDAzZWw0cHJvdG8gIT0gcGt0LVx1MDAzZXRwcm90KVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoIWN0IHx8IG5mX2N0X2lzX3RlbXBsYXRlKGN0KSB8fCBuZl9jdF9pc19jb25maXJtZWQoY3QpKVxuK1x0aWYgKCFjdCB8fCBuZl9jdF9pc190ZW1wbGF0ZShjdCkgfHwgbmZfY3RfaXNfY29uZmlybWVkKGN0KSB8fFxuK1x0ICAgIHByaXYtXHUwMDNlbDRwcm90byAhPSBuZl9jdF9wcm90b251bShjdCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHRpbWVvdXQgPSBuZl9jdF90aW1lb3V0X2ZpbmQoY3QpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTQ6MjQuNzYxOTExMzQ3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2Mjg2MjU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIG5mdF9jdCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvbmV0ZmlsdGVyL25mdF9jdC5jYC4gU2VlbXMgbGlrZSB0aGUgY3J1eCBvZiB0aGUgY2hhbmdlIGlzIGluIHRoZSBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY2hlY2sgaXMgdHJ5aW5nIHRvIGFjaGlldmUuXG5cbkl0IGFwcGVhcnMgYSBuZXcgY29uZGl0aW9uLCBgcHJpdi1cdTAwM2VsNHByb3RvICE9IG5mX2N0X3Byb3RvbnVtKGN0KWAsIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBleGlzdGluZyBgaWZgIHN0YXRlbWVudDogYGlmICghY3QgfHwgbmZfY3RfaXNfdGVtcGxhdGUoY3QpIHx8IG5mX2N0X2lzX2NvbmZpcm1lZChjdCkpYC4gVGhpcyBpcyBpbnRlcmVzdGluZy4gTGV0IG1lIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGVzZSBleGlzdGluZyBjb25kaXRpb25zIGhhbmRsZS4gUmlnaHQsIHdlJ3JlIHNraXBwaW5nIGV2YWx1YXRpb24gaWYgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgKGBjdGApIGlzIE5VTEwsIGEgdGVtcGxhdGUsIG9yIGNvbmZpcm1lZC4gQWRkaW5nIGEgY2hlY2sgZm9yIHRoZSBMNCBwcm90b2NvbCB0byB0aGlzIHNlZW1zLi4uIHBvdGVudGlhbGx5IHNpZ25pZmljYW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBwcml2LVx1MDAzZWw0cHJvdG9gIGFuZCBgbmZfY3RfcHJvdG9udW0oY3QpYCByZXByZXNlbnQgaW4gdGhpcyBjb250ZXh0LlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBzY2VuYXJpbyBkb2VzIHRoaXMgY29uZGl0aW9uIGFkZHJlc3M/IFdoeSBhcmUgd2UgZXhwbGljaXRseSBjb21wYXJpbmcgdGhlIEw0IHByb3RvY29sIGZyb20gc29tZSBcInByaXZcIiBzdHJ1Y3R1cmUgd2l0aCB0aGUgcHJvdG9jb2wgZXh0cmFjdGVkIGZyb20gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnk/IERvZXMgdGhpcyByZWxhdGUgdG8gcHJvdG9jb2wtc3BlY2lmaWMgdGltZW91dCBiZWhhdmlvcj8gQXJlIHdlIHByZXZlbnRpbmcgYSBjb25mbGljdCBvciBhIG1pc2ludGVycHJldGF0aW9uIG9mIEw0IHByb3RvY29sPyBMb29rcyBsaWtlIEkgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBwcml2YCBhbmQgYGN0YCBtb3JlIHRob3JvdWdobHkuIFRoaXMgY29uZGl0aW9uYWwgZmVlbHMgbGlrZSBpdCdzIGd1YXJkaW5nIGFnYWluc3Qgc29tZSBlZGdlIGNhc2UsIG9yIHBlcmhhcHMgaXQgcHJvdmlkZXMgb3B0aW1pemF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyNSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU0OjI4LjkyNDc3NzI0NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTkxOTQ0MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZnRfY3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTg3MT1zdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtODc1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6ODc2OnN0YXRpYyB2b2lkIG5mdF9jdF90aW1lb3V0X29ial9ldmFsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmosXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy04NzctXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTAwOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9vYmplY3Rfb3BzIG5mdF9jdF90aW1lb3V0X29ial9vcHMgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEwMTEtXFx0LnNpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEwMTI6XFx0LmV2YWxcXHRcXHQ9IG5mdF9jdF90aW1lb3V0X29ial9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTAxMy1cXHQuaW5pdFxcdFxcdD0gbmZ0X2N0X3RpbWVvdXRfb2JqX2luaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU0OjI5LjE0Mzk3NzE1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDQ0Mzk2OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmdW5jdGlvbiBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGlzIHRoZSBldmFsdWF0aW9uIGZ1bmN0aW9uIGZvciB0aGF0IGBuZnRfY3RfdGltZW91dF9vYmpfb3BzYCBvYmplY3Qgd2l0aGluIG5mdGFibGVzLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBcIll1cCwgZGVmaW5pdGVseSByZWFjaGFibGUsIGFuZCB0aGF0IG1lYW5zIGl0J3MgcHJpbWUgcmVhbCBlc3RhdGUgZm9yIGZ1enppbmdcIi4gV2UncmUgdGFsa2luZyBhYm91dCBjb3JlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnVuY3Rpb25hbGl0eSBoZXJlLCBzbyBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBjb3VsZCBoYXZlIHByZXR0eSBzaWduaWZpY2FudCBjb25zZXF1ZW5jZXMuIE5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIGxvY2F0ZSB0aGUgYXNzb2NpYXRlZCBjb25maWcgb3B0aW9uIGluIGBuZnRfY3QuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIHRoaW5nLCBob3cgaXQncyBob29rZWQgaW50byB0aGUgYnVpbGQgcHJvY2Vzcy4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYmUgY3J1Y2lhbCBmb3IgY29udHJvbGxpbmcgdGhlIHRhcmdldCBkdXJpbmcgZnV6emluZywgYW5kIEkga25vdyBJIGNhbiBmaW5kIHdoYXQgSSdtIGxvb2tpbmcgZm9yIHRoZXJlLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NDozMi4yODg0MTk0NDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NTc3NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9jdC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTExPW9iai0kKENPTkZJR19ORlRfTlVNR0VOKVxcdCs9IG5mdF9udW1nZW4ub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTEyOm9iai0kKENPTkZJR19ORlRfQ1QpXFx0XFx0Kz0gbmZ0X2N0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTExMy1vYmotJChDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRClcXHQrPSBuZnRfZmxvd19vZmZsb2FkLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTQ6MzIuNDQ4MDYyNjU1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5MjYzNzczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEZXBlbmRlbmNpZXMgYW5kIHRoZSBgTkZUX0NUYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCBgTkZUX0NUYCwgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gRmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyB0aG9yb3VnaGx5LiBJdCdzIG5vdCBqdXN0IGFib3V0IHRoaXMgb25lIHNldHRpbmcgaW4gaXNvbGF0aW9uOyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgZWNvc3lzdGVtLiBBcmUgdGhlcmUgYW55IG90aGVyIHBhY2thZ2VzIG9yIG1vZHVsZXMgdGhhdCByZWx5IG9uIGBORlRfQ1RgIGJlaW5nIHNldCBpbiBhIHBhcnRpY3VsYXIgd2F5PyBBcmUgdGhlcmUgYW55IGRvd25zdHJlYW0gaW1wbGljYXRpb25zIGlmIGl0J3MgZGlzYWJsZWQgb3IgY29uZmlndXJlZCBkaWZmZXJlbnRseT8gSSBuZWVkIGEgY29tcGxldGUgcGljdHVyZSB0byBhdm9pZCBhbnkgdW5leHBlY3RlZCBpc3N1ZXMgb3IgY29uZmxpY3RzIGZ1cnRoZXIgZG93biB0aGUgbGluZS4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkb2N1bWVudGF0aW9uLCBzZWFyY2ggdGhlIGNvZGViYXNlLCBhbmQgbWF5YmUgZXZlbiBjb25zdWx0IHdpdGggb3RoZXJzIHRvIGNvbmZpcm0gdGhlIGZ1bGwgc2V0IG9mIGRlcGVuZGVuY2llcy4gSXQncyBhYm91dCBlbnN1cmluZyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgYmVmb3JlIHByb2NlZWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNDUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NDozNS40NDA3MDI5MDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMjY2MzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORlRfQ1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ4NT1jb25maWcgTkZUX05VTUdFTlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5MC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDkxOmNvbmZpZyBORlRfQ1RcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDkyLVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU0OjM1LjU3MDk3NDM5M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODE3NDAyNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkluaXRpYWwgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgYmFzZWQgb24gd2hhdCBJJ20gd29ya2luZyB3aXRoLCB0aGUgY29yZSByZXF1aXJlbWVudHMgbG9vayBsaWtlIHRoZXkncmUgZ29pbmcgdG8gaW52b2x2ZSBgTkZUX0NUYCBhbmQgYE5GX0NPTk5UUkFDS2Ag4oCTIHRob3NlIGFyZSBwcmV0dHkgZnVuZGFtZW50YWwgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcsIHdoaWNoIEkgbmVlZC4gSSdtIGFsc28gdGhpbmtpbmcgdGhhdCBgTkZfVEFCTEVTYCB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgaW4gdGhlIG1peCwgZ2l2ZW4gdGhlIGRpcmVjdGlvbiB3ZSdyZSBtb3ZpbmcgaW4gd2l0aCBOZXRmaWx0ZXIuIEl04oCZcyB0aGUgbGlrZWx5IGJhc2UgZGVwZW5kZW5jeS4gVG8gYmUgc3VyZSBhYm91dCB0aGUgYE5GVF9DVGAgZGVwZW5kZW5jeSwgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIHZlcmlmeSBpdHMgaW1wbGljYXRpb25zLiBUaGF0J2xsIGdpdmUgYSBtb3JlIHByZWNpc2UgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBhbmQgYW55IG90aGVyIGtleSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NDozOC42NTI3MTc1ODRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0ODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0ODA6XFx0Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcXG4gNDgxOlxcdFxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XFxcIlxcbiA0ODI6XFx0XFx0aGVscFxcbiA0ODM6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBcXFwibmV0ZGV2XFxcIiB0YWJsZS5cXG4gNDg0OlxcdFxcbiA0ODU6XFx0Y29uZmlnIE5GVF9OVU1HRU5cXG4gNDg2OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlXFxcIlxcbiA0ODc6XFx0XFx0aGVscFxcbiA0ODg6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBudW1iZXIgZ2VuZXJhdG9yIGV4cHJlc3Npb24gdXNlZCB0byBwZXJmb3JtXFxuIDQ4OTpcXHRcXHQgIGluY3JlbWVudGFsIGNvdW50aW5nIGFuZCByYW5kb20gbnVtYmVycyBib3VuZCB0byBhIHVwcGVyIGxpbWl0LlxcbiA0OTA6XFx0XFxuIDQ5MTpcXHRjb25maWcgTkZUX0NUXFxuIDQ5MjpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbiA0OTM6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgY29ubnRyYWNrIG1vZHVsZVxcXCJcXG4gNDk0OlxcdFxcdGhlbHBcXG4gNDk1OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXFxcImN0XFxcIiBleHByZXNzaW9uIHRoYXQgeW91IGNhbiB1c2UgdG8gbWF0Y2hcXG4gNDk2OlxcdFxcdCAgY29ubmVjdGlvbiB0cmFja2luZyBpbmZvcm1hdGlvbiBzdWNoIGFzIHRoZSBmbG93IHN0YXRlLlxcbiA0OTc6XFx0XFxuIDQ5ODpcXHRjb25maWcgTkZUX0VYVEhEUl9EQ0NQXFxuIDQ5OTpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIGV4dGhkciBEQ0NQIHN1cHBvcnQgKERFUFJFQ0FURUQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NDozOC42NTI5NzIxNzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg3NzkwOTUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgRnVuY3Rpb24gZm9yIEFQSSBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIHNvIHRoZSBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGZ1bmN0aW9uIGlzIHRoZSBvbmUgd2UncmUgZm9jdXNpbmcgb24uIEZpcnN0LCBsZXQncyBzZWUgaWYgaXQncyBkZWNsYXJlZCBgc3RhdGljYC4gWXVwLCBpdCBpcy4gVGhhdCdzIGEgcG9pbnQgdG8gY29uc2lkZXIuIEJ1dCBoYW5nIG9uLCBpdCdzIGFzc2lnbmVkIHRvIGAuZXZhbGAgd2l0aGluIGBuZnRfY3RfdGltZW91dF9vYmpfb3BzYC4gQW5kIHRoZSBwcm9tcHQgaXMgdGVsbGluZyBtZSB0byBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeXBvaW50cy5cblxuVGhlIHRoaW5nIGlzLCBzaW5jZSBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciDigJMgYC5ldmFsID0gbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIOKAkyBpdCAqY2FuJ3QqIGJlIGlubGluZWQuIFRoYXQgbWVhbnMgaXQgKndpbGwqIGhhdmUgYSB1bmlxdWUgc3ltYm9sIGFkZHJlc3MsIHdoaWNoIGlzIGdvb2QuIFRoYXQncyBhIGtleSBkZXRhaWwuIFdlIGNvdWxkIGNvbnNpZGVyIGluY2x1ZGluZyBgbmZ0X2N0X3RpbWVvdXRfb2JqX2luaXRgIG9yIGp1c3Qgc3RpY2sgd2l0aCB0aGUgYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYC5cblxuR2l2ZW4gdGhhdCBpdCdzIG5vdCBpbmxpbmVkLCBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGlzIHBlcmZlY3RseSBmaW5lIHRvIGluY2x1ZGUuIFRoZSBuZXh0IHRoaW5nIEkgd2FudCB0byBjaGVjayBpcyBpZiBgTkZfQ09OTlRSQUNLX1RJTUVPVVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHJlcXVpcmVkIGZvciB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDAyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTQ6NDMuNTMwODg1NDkzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzM2MTA1NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZnRfY3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTg3MT1zdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtODc1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6ODc2OnN0YXRpYyB2b2lkIG5mdF9jdF90aW1lb3V0X29ial9ldmFsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmosXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy04NzctXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTAwOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9vYmplY3Rfb3BzIG5mdF9jdF90aW1lb3V0X29ial9vcHMgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEwMTEtXFx0LnNpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEwMTI6XFx0LmV2YWxcXHRcXHQ9IG5mdF9jdF90aW1lb3V0X29ial9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTAxMy1cXHQuaW5pdFxcdFxcdD0gbmZ0X2N0X3RpbWVvdXRfb2JqX2luaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU0OjQzLjgwNDUxNDQxNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTUxNzExMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgZnVuY3Rpb24gd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mdF9jdC5jYCwgcHJlc2VudGVkIGFzIGEgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIG5mdF9jdF90aW1lb3V0X29ial9ldmFsKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgd2l0aGluIHRoZSBOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aW1lb3V0cyBhcmUgaGFuZGxlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbmV3IGZpcmV3YWxsIGZyYW1ld29yay4gU28sIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yICpldmFsdWF0aW5nKiB0aGUgdGltZW91dCBvYmplY3QsIHdoaWNoIG1lYW5zIGl0IGxpa2VseSBkZXRlcm1pbmVzIHRoZSByZWxldmFudCB0aW1lb3V0IGR1cmF0aW9uIGJhc2VkIG9uIHNvbWUgY3JpdGVyaWEuIEkgZXhwZWN0IHRvIHNlZSBhbiBleGFtaW5hdGlvbiBvZiBjb25uZWN0aW9uIHN0YXRlLCBtYXliZSBydWxlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCBvciBldmVuIHNvbWUgZm9ybSBvZiBkeW5hbWljIGFkanVzdG1lbnQuIEl0J3MgdGhlIGNvcmUgbG9naWMgdGhhdCBmaWd1cmVzIG91dCAqd2hlbiogYSBjb25uZWN0aW9uIHNob3VsZCBiZSBjb25zaWRlcmVkIGluYWN0aXZlIGFuZCBwb3RlbnRpYWxseSBjbGVhbmVkIHVwLiBUaGlzIGlzIGEgY3JpdGljYWwgcGllY2UgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlIGluIGEgY29tcGxleCBuZXR3b3JrIHNldHVwLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9uIHRyYWNraW5nIHRhYmxlIGFuZCBob3cgaXQgaW5mbHVlbmNlcyB0aGUgY29ubmVjdGlvbidzIHN0YXRlIHRyYW5zaXRpb25zLiBUaGlzIHNob3VsZCBiZSBhbiBpbnRlcmVzdGluZyBjaHVuayBvZiBjb2RlIHRvIGV4cGxvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MTEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NDo0Ni45NTYyMzAzMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZnRfY3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NjA6XFx0XFx0XFx0XFx0XFx0XFx0ICBOVUxMKTtcXG4gODYxOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA4NjI6XFx0XFx0XFx0Z290byBlcnI7XFxuIDg2MzpcXHRcXG4gODY0OlxcdFxcdHJldCA9IGw0cHJvdG8tXFx1MDAzZWN0bmxfdGltZW91dC5ubGF0dHJfdG9fb2JqKHRiLCBuZXQsIHRpbWVvdXRzKTtcXG4gODY1OlxcdFxcbiA4NjY6XFx0ZXJyOlxcbiA4Njc6XFx0XFx0a2ZyZWUodGIpO1xcbiA4Njg6XFx0XFx0cmV0dXJuIHJldDtcXG4gODY5OlxcdH1cXG4gODcwOlxcdFxcbiA4NzE6XFx0c3RydWN0IG5mdF9jdF90aW1lb3V0X29iaiB7XFxuIDg3MjpcXHRcXHRzdHJ1Y3QgbmZfY3RfdGltZW91dCAgICAqdGltZW91dDtcXG4gODczOlxcdFxcdHU4XFx0XFx0XFx0bDRwcm90bztcXG4gODc0OlxcdH07XFxuIDg3NTpcXHRcXG4gODc2OlxcdHN0YXRpYyB2b2lkIG5mdF9jdF90aW1lb3V0X29ial9ldmFsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmosXFxuIDg3NzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbiA4Nzg6XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbiA4Nzk6XFx0e1xcbiA4ODA6XFx0XFx0Y29uc3Qgc3RydWN0IG5mdF9jdF90aW1lb3V0X29iaiAqcHJpdiA9IG5mdF9vYmpfZGF0YShvYmopO1xcbiA4ODE6XFx0XFx0c3RydWN0IG5mX2Nvbm4gKmN0ID0gKHN0cnVjdCBuZl9jb25uICopc2tiX25mY3QocGt0LVxcdTAwM2Vza2IpO1xcbiA4ODI6XFx0XFx0c3RydWN0IG5mX2Nvbm5fdGltZW91dCAqdGltZW91dDtcXG4gODgzOlxcdFxcdGNvbnN0IHVuc2lnbmVkIGludCAqdmFsdWVzO1xcbiA4ODQ6XFx0XFxuIDg4NTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlbDRwcm90byAhPSBwa3QtXFx1MDAzZXRwcm90KVxcbiA4ODY6XFx0XFx0XFx0cmV0dXJuO1xcbiA4ODc6XFx0XFxuIDg4ODpcXHRcXHRpZiAoIWN0IHx8IG5mX2N0X2lzX3RlbXBsYXRlKGN0KSB8fCBuZl9jdF9pc19jb25maXJtZWQoY3QpIHx8XFxuIDg4OTpcXHRcXHQgICAgcHJpdi1cXHUwMDNlbDRwcm90byAhPSBuZl9jdF9wcm90b251bShjdCkpXFxuIDg5MDpcXHRcXHRcXHRyZXR1cm47XFxuIDg5MTpcXHRcXG4gODkyOlxcdFxcdHRpbWVvdXQgPSBuZl9jdF90aW1lb3V0X2ZpbmQoY3QpO1xcbiA4OTM6XFx0XFx0aWYgKCF0aW1lb3V0KSB7XFxuIDg5NDpcXHRcXHRcXHR0aW1lb3V0ID0gbmZfY3RfdGltZW91dF9leHRfYWRkKGN0LCBwcml2LVxcdTAwM2V0aW1lb3V0LCBHRlBfQVRPTUlDKTtcXG4gODk1OlxcdFxcdFxcdGlmICghdGltZW91dCkge1xcbiA4OTY6XFx0XFx0XFx0XFx0cmVncy1cXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcXG4gODk3OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gODk4OlxcdFxcdFxcdH1cXG4gODk5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTQ6NDYuOTU2MzkzMTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAxODgyNDM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkNvbmRpdGlvbmFsIENvbXBpbGF0aW9uIENvbnVuZHJ1bXM6IG5mdF9jdF90aW1lb3V0X29ial9ldmFsKipcblxuQWxyaWdodCwgSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBhIHF1ZXN0aW9uIGtlZXBzIHBva2luZyBhdCB0aGUgYmFjayBvZiBteSBtaW5kOiBpcyB0aGUgYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCBmdW5jdGlvbiBiZWluZyBjb21waWxlZCBjb25kaXRpb25hbGx5PyBJdCBmZWVscyBsaWtlIGl0ICpzaG91bGRuJ3QqIGJlLCBnaXZlbiBpdHMgbGlrZWx5IGNvcmUgcm9sZSBpbiBjb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXRzLCBidXQgSSd2ZSBsZWFybmVkIHRvIG5ldmVyIGFzc3VtZSBhbnl0aGluZywgZXNwZWNpYWxseSB3aXRoIHRoZSBjb21wbGV4aXRpZXMgb2YgdGhlc2UgbmV0d29ya2luZyBzdGFja3MuIFRoaXMgZnVuY3Rpb24gc2VlbXMgZnVuZGFtZW50YWwsIHNvIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gd291bGQgaW50cm9kdWNlIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkuIFRoZSBwb3NzaWJpbGl0aWVzIGluIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFyZSB2YXN0LCBmcm9tIHNpbXBsZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb3B0aW1pemF0aW9ucyB0byBtdWNoIG1vcmUgaW52b2x2ZWQgZmVhdHVyZSBmbGFncy4gVW5kZXJzdGFuZGluZyB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIGtleSB0byB0cnVseSB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGNvZGUgd29ya3MgaW4gYW55IGdpdmVuIHNjZW5hcmlvLCBzbyBpdCBpcyBzb21ldGhpbmcgSSBtdXN0IGRldGVybWluZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhpcyBpcyBiZWluZyBoYW5kbGVkLCBzbyB0aGF0IEkgZG9uJ3Qgb3Zlcmxvb2sgc29tZSBudWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2ODgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU0OjQ5Ljk3NTIyMDQ0NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MjkyNDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19ORl9DT05OVFJBQ0tfVElNRU9VVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9jdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9ODM2PXN0YXRpYyBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfbm90cmFja190eXBlIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTg0MS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjg0MjojaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19USU1FT1VUXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy04NDMtc3RhdGljIGludFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xMDE4PXN0YXRpYyBzdHJ1Y3QgbmZ0X29iamVjdF90eXBlIG5mdF9jdF90aW1lb3V0X29ial90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEwMjQtfTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEwMjU6I2VuZGlmIC8qIENPTkZJR19ORl9DT05OVFJBQ0tfVElNRU9VVCAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTAyNi1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTM3OT1zdGF0aWMgaW50IF9faW5pdCBuZnRfY3RfbW9kdWxlX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTM5OS1cXHRcXHRnb3RvIGVycjM7XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxNDAwOiNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MDEtXFx0ZXJyID0gbmZ0X3JlZ2lzdGVyX29iaihcXHUwMDI2bmZ0X2N0X3RpbWVvdXRfb2JqX3R5cGUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDA2LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQwNzojaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19USU1FT1VUXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDA4LWVycjQ6XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTE0MjA9c3RhdGljIHZvaWQgX19leGl0IG5mdF9jdF9tb2R1bGVfZXhpdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQyMS17XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxNDIyOiNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MjMtXFx0bmZ0X3VucmVnaXN0ZXJfb2JqKFxcdTAwMjZuZnRfY3RfdGltZW91dF9vYmpfdHlwZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU0OjUwLjE2MTUxODk0M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTcwNTM0ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBDb25uVHJhY2sgVGltZW91dCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIHNlZS4gTXkgaW5pdGlhbCBodW5jaCB3YXMgcmlnaHQ7IHRoZSB0aW1lb3V0IGNvbmZpZ3VyYXRpb24gbXVzdCBiZSB1bmRlciBgQ09ORklHX05GX0NPTk5UUkFDS19USU1FT1VUYC4gTm93LCB0byBjb25maXJtIHRoZSBzcGVjaWZpYyBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMsIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIEtjb25maWcgZm9yIHRoYXQuIExldCdzIHB1bGwgdXAgdGhlIHJlbGV2YW50IHNlY3Rpb24gYW5kIHNlZSB3aGF0IGBORl9DT05OVFJBQ0tfVElNRU9VVGAgcmV2ZWFscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBtb2R1bGVzLCBhbnkgcG90ZW50aWFsIGRlZmF1bHRzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnVuY3Rpb25hbGl0eS4gVGhpcyBjb25maWd1cmF0aW9uIHdpbGwgYmUgY3JpdGljYWwgZm9yIGZpbmUtdHVuaW5nIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDYzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTQ6NTMuMTMyMDU2OTkxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTIzMTQ1MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0NPTk5UUkFDS19USU1FT1VUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xNTc9Y29uZmlnIE5GX0NPTk5UUkFDS19FVkVOVFNcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQnXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU0OjUzLjM0NDQyOTEzNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI4MTg4NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb25zaWRlcmF0aW9ucy5cblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgTmV0d29yayBGZWF0dXJlcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlIGhlcmUsIHdlIGFyZSBsb29raW5nIGF0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB0aGUgZmlyc3QgdGhpbmdzIHRoYXQganVtcCBvdXQgYXJlIHRoZSByZXF1aXJlbWVudHMgZm9yIGBORlRfQ1RgIGFuZCBgTkZfQ09OTlRSQUNLX1RJTUVPVVRgLiBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIGFib3V0IHRob3NlICpkZXBlbmRlbmNpZXMqIG9mIHRoZXNlIG9wdGlvbnMuIFdlIGFsc28gaGF2ZSBgTkZfVEFCTEVTYCBhbmQgYE5GX0NPTk5UUkFDS2AgZmxhZ2dlZCBhcyBkZXBlbmRlbmNpZXMuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBvbiB0aG9zZSBgTkZfQ09OTlRSQUNLX1RJTUVPVVRgIGRlcGVuZGVuY2llcywgYXMgSSBuZWVkIHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCB3aGF0IGVuYWJsZXMgYW5kIHdoYXQgZGVwZW5kcyB1cG9uIGl0LiBXZSBtdXN0IGVuc3VyZSBldmVyeXRoaW5nIGlzIGNvcnJlY3QgYXMgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGNhbiBpbmZsdWVuY2UgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc1OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU0OjU2LjM3MjYyMDU0MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE2NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IGBOJy5cXG4gMTY2OlxcdFxcbiAxNjc6XFx0Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FT1VUXFxuIDE2ODpcXHRcXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0J1xcbiAxNjk6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gMTcwOlxcdFxcdGhlbHBcXG4gMTcxOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBjb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXRcXG4gMTcyOlxcdFxcdCAgZXh0ZW5zaW9uLiBUaGlzIGFsbG93cyB5b3UgdG8gYXR0YWNoIHRpbWVvdXQgcG9saWNpZXMgdG8gZmxvd1xcbiAxNzM6XFx0XFx0ICB2aWEgdGhlIENUIHRhcmdldC5cXG4gMTc0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NDo1Ni4zNzI3ODAwNDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2ODg3ODc4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBgTkVURklMVEVSX0FEVkFOQ0VEYCBkZXBlbmRlbmN5IGhlcmUuIFRoYXQncyB0aGUgYmFzZWxpbmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGxpc3QgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGludm9sdmVkOiBgTkZUX0NUYCwgYE5GX0NPTk5UUkFDS19USU1FT1VUYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9UQUJMRVNgLCBhbmQgYE5GX0NPTk5UUkFDS2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlcnJlbGF0ZSB0byBmdWxseSBncmFzcCB0aGUgY2hhbmdlLlxuXG5NeSBhdHRlbnRpb24gaXMgc3BlY2lmaWNhbGx5IGRyYXduIHRvIHRoZSBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGZ1bmN0aW9uLiBJJ20gYXNzdW1pbmcgdGhpcyBpcyB0aGUga2V5IHN5bWJvbCBpbiB0aGUgcGF0Y2guIFRoZSBmaXJzdCBxdWVzdGlvbiBJIGhhdmUgaXMsIGlzIHRoaXMgZnVuY3Rpb24gKmFjdHVhbGx5KiByZWFjaGFibGU/IFllcywgaXQncyBhbiBuZnRhYmxlcyBvYmplY3QgZXZhbHVhdGlvbiBmdW5jdGlvbi4gVGhhdCB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgY3JpdGljYWwsIGFzIGl0IGlzIGNhbGxlZCB3aGVuIGEgcGFja2V0IGhpdHMgYSBydWxlIHRoYXQgcmVmZXJlbmNlcyB0aGlzIHRpbWVvdXQgb2JqZWN0LCB3aGljaCBpcyBwcmVjaXNlbHkgdGhlIGJlaGF2aW9yIEknZCBleHBlY3QuIFRoZSBwYXRjaCBpcyBpbnRlbmRlZCB0byBmaXggYSBidWcgd2hlcmUgYHByaXYtXHUwMDNlbDRwcm90byAhPSBuZl9jdF9wcm90b251bShjdClgIHdhcyBtaXNzaW5nLiBUaGlzIGlzIGEgY2xlYXIsIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGhvdyB0aW1lb3V0cyBhcmUgaGFuZGxlZCBpbiB0aGUgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgY29kZS5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBiZWNhdXNlIHRoYXQncyB3aGF0IEkgZG8uIEl0IHNlZW1zIGxpa2UgdGhlIHByaW1hcnkgZGVwZW5kZW5jeSBpcyBgTkZUX0NUYCB3aGljaCBuZWVkcyBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX1RBQkxFU2AsIHdoaWNoIEkgYXNzdW1lIGFyZSBpbXBsaWVkIHNpbmNlIGl0IGlzIGluIGFuIGBpZiBORl9UQUJMRVNgIGJsb2NrLiBJIG5lZWQgdG8ga2VlcCB0aGlzIHJlbGF0aW9uc2hpcCBpbiBtaW5kIGFzIEkgZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEzNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU1OjAwLjk0MTY2MTY4MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg4Nzk3NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWYgTkZfVEFCTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDU1PWNvbmZpZyBORl9UQUJMRVNcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3MTppZiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDcyLWNvbmZpZyBORl9UQUJMRVNfSU5FVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTYyNT1jb25maWcgTkZUX1NPQ0tFVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYyNy1cXHRzZWxlY3QgTkZfU09DS0VUX0lQVjRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjI4OlxcdHNlbGVjdCBORl9TT0NLRVRfSVBWNiBpZiBORl9UQUJMRVNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjktXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTY0MD1jb25maWcgTkZUX1RQUk9YWVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY0Mi1cXHRzZWxlY3QgTkZfREVGUkFHX0lQVjRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjQzOlxcdHNlbGVjdCBORl9ERUZSQUdfSVBWNiBpZiBORl9UQUJMRVNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDQtXFx0c2VsZWN0IE5GX1RQUk9YWV9JUFY0XFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY0NTpcXHRzZWxlY3QgTkZfVFBST1hZX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQ2LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDk9Y29uZmlnIE5GVF9TWU5QUk9YWVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY1OS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjYwOmlmIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjYxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NTowMS4wMzA1NDY2MTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM5NTAyMDQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFzb25pbmcgZm9yIEZ1enppbmcgUmVjb21tZW5kYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBORlRfQ1RgICppcyogaW5kZWVkIG5lc3RlZCB3aXRoaW4gYGlmIE5GX1RBQkxFU2AsIHdoaWNoIG1lYW5zIHdlIGRlZmluaXRlbHkgbmVlZCBgTkZfVEFCTEVTYCBjb25maWd1cmVkLiBJJ3ZlIGdvdCBteSBsaXN0IG9mIHJlbGV2YW50IGNvbmZpZ3M6IGBORlRfQ1RgLCBgTkZfQ09OTlRSQUNLX1RJTUVPVVRgLCBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYE5GX1RBQkxFU2AsIGFuZCBgTkZfQ09OTlRSQUNLYC4gVGhlIHByaW1hcnkgZm9jdXMsIGhvd2V2ZXIsIGlzIG9uIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAuXG5cbkxldCBtZSB0aGluay4uLiBpcyB0aGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQncyBjaGFuZ2VkPyBZZXMsIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgaXMgdGhlIG9ubHkgb25lIG1vZGlmaWVkLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gTm93LCBpcyBpdCAqc3RhdGljKj8gT2theSwgeWVzLCBpdCBpcy4gQnV0LCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtZWFucyBpdCB3b24ndCBnZXQgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFNvLCB3aGlsZSBpdCdzIHN0YXRpYyBpbiB0aGUgc291cmNlLCBpdCdsbCBzdGlsbCBoYXZlIGl0cyBvd24gZGlzdGluY3Qgc3ltYm9sLiBJIGRvbid0IG5lZWQgdG8gY29uc2lkZXIgYW55IHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyBsaWtlIGBuZnRfY3RfdGltZW91dF9vYmpfaW5pdGAgb3IgYG5mdF9jdF9ldmFsYDsgYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCBpcyB0aGUga2V5LiBUaGUgY29tcGlsZXIgd29uJ3Qgb3B0aW1pemUgaXQgYXdheS5cblxuUmlnaHQsIGxldCBtZSBzb2xpZGlmeSBteSByZWFzb25pbmcuIFRoZSBwYXRjaCBpcyBhZGRpbmcgYSBjaGVjayB3aXRoaW4gYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCBpbiBgbmV0L25ldGZpbHRlci9uZnRfY3QuY2A6IHNwZWNpZmljYWxseSwgYHByaXYtXHUwMDNlbDRwcm90byAhPSBuZl9jdF9wcm90b251bShjdClgLiBUaGlzIHByZXZlbnRzIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBsYXllciA0IHByb3RvY29sIG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IGRvZXNuJ3QgbWF0Y2ggdGhlIG9uZSBjb25maWd1cmVkIGluIHRoZSB0aW1lb3V0IG9iamVjdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbSwgYW5kIGNyaXRpY2FsbHksIGl0J3MgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIG5mdGFibGVzIHJ1bGVzLiBUaGVyZWZvcmUsIGZ1enppbmcgaXMgKmhpZ2hseSogcmVjb21tZW5kZWQgaGVyZS4gV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGlzIG5ldyBjaGVjayBjb3JyZWN0bHkgaGFuZGxlcyBhIHdpZGUgcmFuZ2Ugb2YgcGFja2V0IGFuZCBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRlcy4gV2Ugd2FudCB0byBpZGVudGlmeSBhbnkgZWRnZSBjYXNlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW91cnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNzEsIk91dHB1dFRva2VucyI6MTU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU1OjA4LjQyNTU3MDQ2M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjkxNDEwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZUX0NUXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfVElNRU9VVFwiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9jdF90aW1lb3V0X29ial9ldmFsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGxheWVyIDQgcHJvdG9jb2wgY2hlY2sgdG8gYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCBpbiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbS4gVGhpcyBwcmV2ZW50cyBhIG1pc21hdGNoIGJldHdlZW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkncyBwcm90b2NvbCBhbmQgdGhlIGNvbmZpZ3VyZWQgdGltZW91dCBvYmplY3QncyBwcm90b2NvbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAobmZ0YWJsZXMpLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGhhbmRsZXMgdmFyaW91cyBwYWNrZXQgYW5kIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3RhdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GVF9DVFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1RJTUVPVVRcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZnRfY3RfdGltZW91dF9vYmpfZXZhbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBsYXllciA0IHByb3RvY29sIGNoZWNrIHRvIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIFRoaXMgcHJldmVudHMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5J3MgcHJvdG9jb2wgYW5kIHRoZSBjb25maWd1cmVkIHRpbWVvdXQgb2JqZWN0J3MgcHJvdG9jb2wuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKG5mdGFibGVzKSwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBoYW5kbGVzIHZhcmlvdXMgcGFja2V0IGFuZCBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTU6MDguNjM4NDk0NjY5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQ5NTEwNjUxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU1OjA4LjYzOTM1MzE0OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MjQ5NDI0MjczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYSB0aW1lb3V0IG9iamVjdCBvZiBvbmUgcHJvdG9jb2wgY291bGQgYmUgYXR0YWNoZWQgdG8gYSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IG9mIGEgZGlmZmVyZW50IHByb3RvY29sLiBUaGlzIGNhbiBvY2N1ciwgZm9yIGV4YW1wbGUsIHdoZW4gYW4gSUNNUCBlcnJvciBwYWNrZXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkuIFRoZSB0aW1lb3V0IG9iamVjdCdzIGRhdGEgYXJyYXkgaXMgc2l6ZWQgYWNjb3JkaW5nIHRvIGl0cyBwcm90b2NvbCAoZS5nLiwgSUNNUCBoYXMgZmV3ZXIgc3RhdGVzIHRoYW4gVENQKS4gSWYgYSBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSB1c2VzIGFuIElDTVAgdGltZW91dCBvYmplY3QsIGl0IHdpbGwgYWNjZXNzIHRoZSB0aW1lb3V0IGRhdGEgYXJyYXkgdXNpbmcgVENQIHN0YXRlIGluZGljZXMsIHJlc3VsdGluZyBpbiBhbiBvdXQtb2YtYm91bmRzIHJlYWQuXFxuXFxuVGhpcyB2dWxuZXJhYmlsaXR5IGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQuIFRoZSB0aW1lb3V0IG9iamVjdHMgYXJlIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY2AsIGVuc3VyaW5nIHRoZXkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtBU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgaXQgd2lsbCBlZmZlY3RpdmVseSBjYXRjaCB0aGlzIGJ1Zy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDkzNzlkYWIyYjExM2NiNjY2NWIyYzZjNTNhNGFkYTBjMzBiNDVmNDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwMDo1NDoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG5pbmRleCAwM2E4OGM3N2UwZjAyLi5kNjE4YmZhOTYwMmZhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xuQEAgLTg4NSw3ICs4ODUsOCBAQCBzdGF0aWMgdm9pZCBuZnRfY3RfdGltZW91dF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxuIFx0aWYgKHByaXYtXHUwMDNlbDRwcm90byAhPSBwa3QtXHUwMDNldHByb3QpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmICghY3QgfHwgbmZfY3RfaXNfdGVtcGxhdGUoY3QpIHx8IG5mX2N0X2lzX2NvbmZpcm1lZChjdCkpXG4rXHRpZiAoIWN0IHx8IG5mX2N0X2lzX3RlbXBsYXRlKGN0KSB8fCBuZl9jdF9pc19jb25maXJtZWQoY3QpIHx8XG4rXHQgICAgcHJpdi1cdTAwM2VsNHByb3RvICE9IG5mX2N0X3Byb3RvbnVtKGN0KSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0dGltZW91dCA9IG5mX2N0X3RpbWVvdXRfZmluZChjdCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NTowOC42MzkzNTUxNjhaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU1NzkxNzU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXRmaWx0ZXIgUGF0Y2ggZm9yIENvbm5lY3Rpb24gVHJhY2tpbmcgVGltZW91dHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L25ldGZpbHRlci9uZnRfY3QuY2AuIEl0J3MgdG91Y2hpbmcgYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFJpZ2h0IGF3YXksIEkgc2VlIHRoZSBjb3JlIGNoYW5nZSBpcyBhZGRpbmcgYSBjaGVjazogYHByaXYtXHUwMDNlbDRwcm90byAhPSBuZl9jdF9wcm90b251bShjdClgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBtdXN0IGJlIGEgYnVnIGZpeC4gSXQgc2VlbXMgbGlrZSBpdCdzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgcHJvdG9jb2wgbWlzbWF0Y2ggYmV0d2VlbiB3aGF0IHRoZSB0aW1lb3V0IG9iamVjdCAqdGhpbmtzKiBpdCBzaG91bGQgaGFuZGxlLCBhbmQgd2hhdCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSBpcyBhY3R1YWxseSBoYW5kbGluZy5cblxuTGV0J3MgZXhhbWluZSB0aGUgY29kZSBzbmlwcGV0LiBUaGUgcGF0Y2ggYWRkcyB0aGlzIGNvbmRpdGlvbiB3aXRoaW4gdGhlIGBpZmAgc3RhdGVtZW50LCBlZmZlY3RpdmVseSBzaG9ydC1jaXJjdWl0aW5nIHRoZSB0aW1lb3V0IGxvb2t1cC4gQmVmb3JlIHRoaXMgY2hhbmdlLCB0aGUgYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCB3b3VsZCBwcm9jZWVkIHRvIGxvb2sgZm9yIGEgdGltZW91dCBvYmplY3QgdXNpbmcgYG5mX2N0X3RpbWVvdXRfZmluZChjdClgIGlmIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IHdhc24ndCBhIHRlbXBsYXRlIG9yIGFscmVhZHkgY29uZmlybWVkLiBOb3csIGlmIGBwcml2LVx1MDAzZWw0cHJvdG9gIGRvZXNuJ3QgYWxpZ24gd2l0aCBgbmZfY3RfcHJvdG9udW0oY3QpYCAsIGl0IGJhaWxzIG91dCBlYXJseS5cblxuRGlnZ2luZyBkZWVwZXIsIEkgc2VlIGBwcml2YCBpcyBhIGBzdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqICpgIG9idGFpbmVkIHRocm91Z2ggYG5mdF9vYmpfZGF0YShvYmopYC4gU28gYHByaXZgIGhvbGRzIHRoZSB0aW1lb3V0IG9iamVjdCdzIHByaXZhdGUgZGF0YS4gVGhpcyBtYWtlcyBtZSBjb25zaWRlcjogd2hhdCBoYXBwZW5zIGlmIHRoZSB0aW1lb3V0IG9iamVjdCBpcyBzZXQgdXAgZm9yLCBzYXksIFRDUCwgYnV0IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IGVuZHMgdXAgYmVpbmcgVURQPyBUaGF0IGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHByb2JsZW1zIOKAkyBwb3RlbnRpYWxseSBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIGV2ZW4gdHlwZSBjb25mdXNpb24gaWYgdGhlIHRpbWVvdXQgb2JqZWN0IGFjY2Vzc2VzIGRhdGEgaW5jb3JyZWN0bHkgYmVjYXVzZSBvZiBhIHByb3RvY29sIG1pc21hdGNoLiBUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIHNwZWNpZmljYWxseSBwcmV2ZW50aW5nIHRoYXQuXG5cbkFuZCwgYXMgYSBmaW5hbCB2ZXJpZmljYXRpb24sIEkgbmVlZCB0byBjb25maXJtOiBgbmZfY3RfdGltZW91dF9maW5kKGN0KWAgcmV0dXJucyB0aGUgdGltZW91dCBvYmplY3QgKmFzc29jaWF0ZWQqIHdpdGggdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkuIFRoaXMgcmVpbmZvcmNlcyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcm9ibGVtIGFuZCB0aGUgcHVycG9zZSBvZiB0aGUgZml4LiBJdCdzIGEgc29saWQgZGVmZW5zZSBhZ2FpbnN0IHRoZXNlIHBvdGVudGlhbGx5IHNlcmlvdXMsIHN1YnRsZSBidWdzIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU1OjE1LjE5NzI3NjYyM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2NzkyNTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9jdF90aW1lb3V0X29ial9ldmFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZnRfY3QuYz04NzE9c3RydWN0IG5mdF9jdF90aW1lb3V0X29iaiB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTg3NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjg3NjpzdGF0aWMgdm9pZCBuZnRfY3RfdGltZW91dF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtODc3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTEwMDk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfb2JqZWN0X29wcyBuZnRfY3RfdGltZW91dF9vYmpfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMDExLVxcdC5zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IG5mdF9jdF90aW1lb3V0X29iaiksXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMDEyOlxcdC5ldmFsXFx0XFx0PSBuZnRfY3RfdGltZW91dF9vYmpfZXZhbCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEwMTMtXFx0LmluaXRcXHRcXHQ9IG5mdF9jdF90aW1lb3V0X29ial9pbml0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NToxNS40MDQwNzQ0NTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNDk5OTI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggY29kZSBhbmQgcHJvYmFibHkgd29ya2luZyBvbiBhIHN5c3RlbSBpbnZvbHZpbmcgTkZUcyBhbmQgcG90ZW50aWFsIHRpbWVvdXRzOlxuXG4qKkFuYWx5emluZyBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgZnVuY3Rpb24uIFRoZSBuYW1pbmcgc3VnZ2VzdHMgaXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIGNvZGUgcmVsYXRlZCB0byBOZXR3b3JrIEZpbHRlciAobmZ0KSBjb25uZWN0aW9uIHRyYWNraW5nIChjdCkgYW5kIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggdGhlIGV2YWx1YXRpb24gb2YgdGltZW91dCBvYmplY3RzLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGxpa2VseSBpbiBhIHBhcnQgb2YgdGhlIHN5c3RlbSB0aGF0IG1hbmFnZXMgY29ubmVjdGlvbiBzdGF0ZSBhbmQgaG93IGxvbmcgdGhvc2Ugc3RhdGVzIHBlcnNpc3QgYmVmb3JlIGJlaW5nIGNvbnNpZGVyZWQgc3RhbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMsIGJlY2F1c2UgdGltZW91dCBjb25maWd1cmF0aW9ucyBhcmUgYSBrZXkgcGFydCBvZiBwcmV2ZW50aW5nIHJlc291cmNlIGV4aGF1c3Rpb24gYW5kIGVuc3VyaW5nIHRoZSBlZmZpY2llbnQgZnVuY3Rpb25pbmcgb2YgdGhlIG5ldHdvcmsuIEdpdmVuIHRoYXQgXCJuZnRcIiBhbmQgXCJjdFwiIGFyZSBwcmVzZW50LCBJIGFudGljaXBhdGUgaXQgd2lsbCBiZSBpbnZvbHZlZCB3aXRoIGEgTmV0ZmlsdGVyIGNvbXBvbmVudCB0aGF0IHRyYWNrcyBjb25uZWN0aW9uIHN0YXRlcywgYW5kIHByb2JhYmx5IHRoZSB0aW1lb3V0IHRoYXQgaXMgc2V0IGZvciBpdCwgcmVsYXRpbmcgdG8gTkZUcy4gTXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgY29kZSBtZWFucyBJIHdpbGwgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGFzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaXMgYSB2ZXJ5IHRlbXB0aW5nIHRhcmdldCBmb3IgRE9TLCBhbmQgTkZUcyBsaWtlbHkgaGF2ZSB0aGVpciBvd24sIHNwZWNpYWwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgaGVyZS4gTGV0J3Mgc2VlIGhvdyBpdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU1OjE4LjYxOTA3OTI3MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZnRfY3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NzA6XFx0XFxuIDg3MTpcXHRzdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqIHtcXG4gODcyOlxcdFxcdHN0cnVjdCBuZl9jdF90aW1lb3V0ICAgICp0aW1lb3V0O1xcbiA4NzM6XFx0XFx0dThcXHRcXHRcXHRsNHByb3RvO1xcbiA4NzQ6XFx0fTtcXG4gODc1OlxcdFxcbiA4NzY6XFx0c3RhdGljIHZvaWQgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcXG4gODc3OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuIDg3ODpcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuIDg3OTpcXHR7XFxuIDg4MDpcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XFxuIDg4MTpcXHRcXHRzdHJ1Y3QgbmZfY29ubiAqY3QgPSAoc3RydWN0IG5mX2Nvbm4gKilza2JfbmZjdChwa3QtXFx1MDAzZXNrYik7XFxuIDg4MjpcXHRcXHRzdHJ1Y3QgbmZfY29ubl90aW1lb3V0ICp0aW1lb3V0O1xcbiA4ODM6XFx0XFx0Y29uc3QgdW5zaWduZWQgaW50ICp2YWx1ZXM7XFxuIDg4NDpcXHRcXG4gODg1OlxcdFxcdGlmIChwcml2LVxcdTAwM2VsNHByb3RvICE9IHBrdC1cXHUwMDNldHByb3QpXFxuIDg4NjpcXHRcXHRcXHRyZXR1cm47XFxuIDg4NzpcXHRcXG4gODg4OlxcdFxcdGlmICghY3QgfHwgbmZfY3RfaXNfdGVtcGxhdGUoY3QpIHx8IG5mX2N0X2lzX2NvbmZpcm1lZChjdCkgfHxcXG4gODg5OlxcdFxcdCAgICBwcml2LVxcdTAwM2VsNHByb3RvICE9IG5mX2N0X3Byb3RvbnVtKGN0KSlcXG4gODkwOlxcdFxcdFxcdHJldHVybjtcXG4gODkxOlxcdFxcbiA4OTI6XFx0XFx0dGltZW91dCA9IG5mX2N0X3RpbWVvdXRfZmluZChjdCk7XFxuIDg5MzpcXHRcXHRpZiAoIXRpbWVvdXQpIHtcXG4gODk0OlxcdFxcdFxcdHRpbWVvdXQgPSBuZl9jdF90aW1lb3V0X2V4dF9hZGQoY3QsIHByaXYtXFx1MDAzZXRpbWVvdXQsIEdGUF9BVE9NSUMpO1xcbiA4OTU6XFx0XFx0XFx0aWYgKCF0aW1lb3V0KSB7XFxuIDg5NjpcXHRcXHRcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xcbiA4OTc6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA4OTg6XFx0XFx0XFx0fVxcbiA4OTk6XFx0XFx0fVxcbiA5MDA6XFx0XFxuIDkwMTpcXHRcXHQvKiBhZGp1c3QgdGhlIHRpbWVvdXQgYXMgcGVyICduZXcnIHN0YXRlLiBjdCBpcyB1bmNvbmZpcm1lZCxcXG4gOTAyOlxcdFxcdCAqIHNvIHRoZSBjdXJyZW50IHRpbWVzdGFtcCBtdXN0IG5vdCBiZSBhZGRlZC5cXG4gOTAzOlxcdFxcdCAqL1xcbiA5MDQ6XFx0XFx0dmFsdWVzID0gbmZfY3RfdGltZW91dF9kYXRhKHRpbWVvdXQpO1xcbiA5MDU6XFx0XFx0aWYgKHZhbHVlcylcXG4gOTA2OlxcdFxcdFxcdG5mX2N0X3JlZnJlc2goY3QsIHZhbHVlc1swXSk7XFxuIDkwNzpcXHR9XFxuIDkwODpcXHRcXG4gOTA5OlxcdHN0YXRpYyBpbnQgbmZ0X2N0X3RpbWVvdXRfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gOTEwOlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbiA5MTE6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9vYmplY3QgKm9iailcXG4gOTEyOlxcdHtcXG4gOTEzOlxcdFxcdHN0cnVjdCBuZnRfY3RfdGltZW91dF9vYmogKnByaXYgPSBuZnRfb2JqX2RhdGEob2JqKTtcXG4gOTE0OlxcdFxcdGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbDRwcm90bztcXG4gOTE1OlxcdFxcdHN0cnVjdCBuZl9jdF90aW1lb3V0ICp0aW1lb3V0O1xcbiA5MTY6XFx0XFx0aW50IGwzbnVtID0gY3R4LVxcdTAwM2VmYW1pbHk7XFxuIDkxNzpcXHRcXHRfX3U4IGw0bnVtO1xcbiA5MTg6XFx0XFx0aW50IHJldDtcXG4gOTE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NToxOC42MTkyNTcyNDFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MTg4MTYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBQcm90b2NvbCBNaXNtYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYnVnIGZpeCwgYW5kIGl0IHNlZW1zIHRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYSBjaGVjaywgc3BlY2lmaWNhbGx5IGBwcml2LVx1MDAzZWw0cHJvdG8gIT0gbmZfY3RfcHJvdG9udW0oY3QpYCwgd2FzIG1pc3NpbmcuIFJpZ2h0LCBzbyBpZiB0aG9zZSBhcmVuJ3QgZXF1YWwg4oCTIG1lYW5pbmcgdGhlIGV4cGVjdGVkIExheWVyIDQgcHJvdG9jb2wgKGBwcml2LVx1MDAzZWw0cHJvdG9gKSBkb2Vzbid0IG1hdGNoIHRoZSBvbmUgdGhlIGNvbm5lY3Rpb24gdHJhY2tlciAoYGN0YCkgYWN0dWFsbHkgc2VlcyDigJMgdGhlbiB3ZSdyZSBzdXBwb3NlZCB0byBjYWxsIGBuZl9jdF90aW1lb3V0X2V4dF9hZGRgIHdpdGggYHByaXYtXHUwMDNldGltZW91dGAuIEFuZCBgcHJpdi1cdTAwM2V0aW1lb3V0YCwgdGhhdCdzIGEgdGltZW91dCBvYmplY3Qgc3BlY2lmaWMgdG8gYHByaXYtXHUwMDNlbDRwcm90b2AuXG5cbldhaXQgYSBzZWNvbmTigKYgbGV0IG1lIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSB0aGlzIHN0cmFpZ2h0LiBUaGUgZnVuY3Rpb24gYG5mX2N0X3RpbWVvdXRfZXh0X2FkZGAgdGFrZXMgdGhlIGNvbm5lY3Rpb24gdHJhY2tlciAoYGN0YCkgKmFuZCogdGhlIHRpbWVvdXQgb2JqZWN0IChgcHJpdi1cdTAwM2V0aW1lb3V0YCkuIE9rYXksIHRoYXQgc2VlbXMgcmlnaHQgc28gZmFyLiBOb3csIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgdGhhdCBmdW5jdGlvbiBgbmZfY3RfdGltZW91dF9leHRfYWRkYCBkb2VzLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGl0IHRvIG1ha2Ugc3VyZSB0aGUgbG9naWMgdGhlcmUgaXMgc291bmQgaW4gdGhpcyBzY2VuYXJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE3NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU1OjIyLjQxMTE0MzI0NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxMDM3Njc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jdF90aW1lb3V0X2V4dF9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oPTY4PXN0YXRpYyBpbmxpbmVcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaDo2OTpzdHJ1Y3QgbmZfY29ubl90aW1lb3V0ICpuZl9jdF90aW1lb3V0X2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTcwLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZl9jdF90aW1lb3V0ICp0aW1lb3V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jPTE3NTQ9aW5pdF9jb25udHJhY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xNzg3LVxcdGlmICh0aW1lb3V0X2V4dClcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MTc4ODpcXHRcXHRuZl9jdF90aW1lb3V0X2V4dF9hZGQoY3QsIHJjdV9kZXJlZmVyZW5jZSh0aW1lb3V0X2V4dC1cXHUwMDNldGltZW91dCksXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTE3ODktXFx0XFx0XFx0XFx0ICAgICAgR0ZQX0FUT01JQyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmM9Nzk9aW50IG5mX2N0X3NldF90aW1lb3V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5jLTEyMi1cXHR9XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5jOjEyMzpcXHR0aW1lb3V0X2V4dCA9IG5mX2N0X3RpbWVvdXRfZXh0X2FkZChjdCwgdGltZW91dCwgR0ZQX0FUT01JQyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5jLTEyNC1cXHRpZiAoIXRpbWVvdXRfZXh0KSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTg3Nj1zdGF0aWMgdm9pZCBuZnRfY3RfdGltZW91dF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy04OTMtXFx0aWYgKCF0aW1lb3V0KSB7XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzo4OTQ6XFx0XFx0dGltZW91dCA9IG5mX2N0X3RpbWVvdXRfZXh0X2FkZChjdCwgcHJpdi1cXHUwMDNldGltZW91dCwgR0ZQX0FUT01JQyk7XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy04OTUtXFx0XFx0aWYgKCF0aW1lb3V0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU1OjI2LjgyMTUyNTU2NFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjgzNzE1MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcywgYXMgdGhvdWdoIHRoZXNlIGFyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYG5mX2N0X3RpbWVvdXRfZXh0X2FkZGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcm5hbCB3b3JraW5ncyBvZiBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBzcGVjaWZpY2FsbHkgdGhlIHRpbWVvdXQgZXh0ZW5zaW9uIG1lY2hhbmlzbSBpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gU28sIG15IGZpcnN0IHN0ZXAgaXMgdG8gbG9jYXRlIGFuZCByZWFkIHRoZSBgbmZfY3RfdGltZW91dF9leHRfYWRkYCBmdW5jdGlvbiBkZWNsYXJhdGlvbi4gVGhlIHBhdGggc3VnZ2VzdHMgaXQncyBsaWtlbHkgZGVmaW5lZCB3aXRoaW4gdGhlIGNvcmUgTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgY29tcG9uZW50cywgc3BlY2lmaWNhbGx5IGluIGBpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaGAuIExldCdzIHNlZSB3aGF0IHRoYXQgaGVhZGVyIGZpbGUgcmV2ZWFscyBhYm91dCB0aGUgc3RydWN0dXJlIGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uIEknbSBob3BpbmcgaXQgY2xlYXJseSBvdXRsaW5lcyB0aGUgcGFyYW1ldGVycywgcmV0dXJuIHZhbHVlLCBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIGFkZGluZyBhIHRpbWVvdXQgZXh0ZW5zaW9uIHRvIGEgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeS4gVW5kZXJzdGFuZGluZyB0aGUgc2lnbmF0dXJlIGFuZCBzdXJyb3VuZGluZyBjb21tZW50cyB3aWxsIGJlIGNydWNpYWwgdG8gZ3Jhc3BpbmcgaXRzIGludGVuZGVkIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBicm9hZGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGlmZWN5Y2xlLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBjdXN0b20gdGltZW91dCBydWxlcyBhcmUgaW5qZWN0ZWQgaW50byBhIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwODUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NTozMC4xMDUyNDM5MTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDY1OlxcdCNlbmRpZlxcbiAgNjY6XFx0fVxcbiAgNjc6XFx0XFxuICA2ODpcXHRzdGF0aWMgaW5saW5lXFxuICA2OTpcXHRzdHJ1Y3QgbmZfY29ubl90aW1lb3V0ICpuZl9jdF90aW1lb3V0X2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbiAgNzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5mX2N0X3RpbWVvdXQgKnRpbWVvdXQsXFxuICA3MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBnZnBfdCBnZnApXFxuICA3MjpcXHR7XFxuICA3MzpcXHQjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19USU1FT1VUXFxuICA3NDpcXHRcXHRzdHJ1Y3QgbmZfY29ubl90aW1lb3V0ICp0aW1lb3V0X2V4dDtcXG4gIDc1OlxcdFxcbiAgNzY6XFx0XFx0aWYgKCF0aW1lb3V0KVxcbiAgNzc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdHRpbWVvdXRfZXh0ID0gbmZfY3RfZXh0X2FkZChjdCwgTkZfQ1RfRVhUX1RJTUVPVVQsIGdmcCk7XFxuICA4MDpcXHRcXHRpZiAoIXRpbWVvdXRfZXh0IHx8IHRpbWVvdXRfZXh0LVxcdTAwM2V0aW1lb3V0KVxcbiAgODE6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA4MjpcXHRcXG4gIDgzOlxcdFxcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFxcdTAwMjZ0aW1lb3V0LVxcdTAwM2VyZWZjbnQpKVxcbiAgODQ6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU1OjMwLjEwNTM0OTMwMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDYyMTgxODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvbm5lY3Rpb24gVHJhY2tpbmcgVGltZW91dCBCdWcqKlxuXG5Pa2F5LCBzbyBgbmZfY3RfdGltZW91dF9leHRfYWRkYCBpcyBqdXN0IHRhY2tpbmcgYSB0aW1lb3V0IGV4dGVuc2lvbiBvbnRvIGEgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeS4gVGhlIHF1ZXN0aW9uIGlzLCBpZiB0aGUgcHJvdG9jb2wgb2YgdGhlIHRpbWVvdXQgb2JqZWN0IChgcHJpdi1cdTAwM2VsNHByb3RvYCkgZG9lc24ndCBtYXRjaCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSdzIHByb3RvY29sIChgbmZfY3RfcHJvdG9udW0oY3QpYCksIHdoZXJlJ3MgdGhlIHZ1bG5lcmFiaWxpdHk/IEFoLCB0aGUgcHJvYmxlbSBpcyB0aGUgKm1pc21hdGNoKiBiZXR3ZWVuIHRoZSB0aW1lb3V0IG9iamVjdCdzIHByb3RvY29sIGFuZCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSdzIHByb3RvY29sLiBUaGUgc3lzdGVtIGNvdWxkIGluY29ycmVjdGx5IGFzc3VtZSB0aGUgdGltZW91dCBvYmplY3QgaXMgcmVsZXZhbnQgZm9yIHRoZSBlbnRyeSdzIHByb3RvY29sLiBUaGlzIHNlZW1zIGRhbmdlcm91cyBnaXZlbiBUQ1AgYW5kIFVEUCB0aW1lb3V0cyBoYXZlIGRpc3RpbmN0IGRhdGEgc3RydWN0dXJlcy5cblxuTGV0J3MgdHJhY2UgaG93IGBuZl9jdF90aW1lb3V0X2RhdGEodGltZW91dClgIGlzIHVzZWQuIExvb2tpbmcgYXQgYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCwgSSBzZWU6XG5cbmBgYGNcblx0dmFsdWVzID0gbmZfY3RfdGltZW91dF9kYXRhKHRpbWVvdXQpO1xuXHRpZiAodmFsdWVzKVxuXHRcdG5mX2N0X3JlZnJlc2goY3QsIHZhbHVlc1swXSk7XG5gYGBcblxuUmlnaHQsIGB2YWx1ZXNbMF1gIHNpbXBseSBwb2ludHMgdG8gdGhlIGZpcnN0IHRpbWVvdXQgdmFsdWUuIEJ1dCB3aGF0IGlmIHRoYXQgdGltZW91dCBvYmplY3QgaXMgdXNlZCBvdXRzaWRlIHRoaXMgcGFydGljdWxhciBldmFsdWF0aW9uPyBXZSBuZWVkIHRvIHZlcmlmeSBhbGwgaW5zdGFuY2VzIG9mIGBuZl9jdF90aW1lb3V0X2RhdGFgIHVzYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjU2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTU6MzQuNTY3NTM0NDk4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTgwMTA2OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2N0X3RpbWVvdXRfZGF0YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg9NDI9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgKlxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oOjQzOm5mX2N0X3RpbWVvdXRfZGF0YShjb25zdCBzdHJ1Y3QgbmZfY29ubl90aW1lb3V0ICp0KVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTQ0LXtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oPTk0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50ICpuZl9jdF90aW1lb3V0X2xvb2t1cChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC0xMDEtXFx0aWYgKHRpbWVvdXRfZXh0IFxcdTAwMjZcXHUwMDI2IHJjdV9hY2Nlc3NfcG9pbnRlcih0aW1lb3V0X2V4dC1cXHUwMDNldGltZW91dCkpXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg6MTAyOlxcdFxcdHRpbWVvdXRzID0gbmZfY3RfdGltZW91dF9kYXRhKHRpbWVvdXRfZXh0KTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC0xMDMtI2VuZGlmXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTg3Nj1zdGF0aWMgdm9pZCBuZnRfY3RfdGltZW91dF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy05MDMtXFx0ICovXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzo5MDQ6XFx0dmFsdWVzID0gbmZfY3RfdGltZW91dF9kYXRhKHRpbWVvdXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtOTA1LVxcdGlmICh2YWx1ZXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU1OjM4Ljc0NzY0Njg4NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDcwNTkwOTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBuZl9jdF90aW1lb3V0X2RhdGFgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGNvbm5lY3Rpb24gdGltZW91dHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBuZXRmaWx0ZXIgY29ubnRyYWNrIHN5c3RlbS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRoZSBgbmZfY3RfdGltZW91dF9kYXRhYCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgY2hlY2sgdGhlIHNwZWNpZmljIGRlZmluaXRpb25zIGluIGBpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaGAuIEknbSBleHBlY3RpbmcgdGhpcyBoZWFkZXIgdG8gY29udGFpbiB0aGUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbnkgYXNzb2NpYXRlZCBtYWNyb3Mgb3IgZnVuY3Rpb25zIHRoYXQgZ292ZXJuIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUgbWFuYWdlcyB0aGUgZXhwaXJhdGlvbiBvZiBjb25uZWN0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB0aGUgdGltZW91dCB2YWx1ZXMgdGhlbXNlbHZlcywgcG90ZW50aWFsbHkgcGVyLXByb3RvY29sIG9yIGNvbm5lY3Rpb24gc3RhdGUsIGFuZCBtYXliZSBldmVuIGZsYWdzIG9yIG1lY2hhbmlzbXMgcmVsYXRlZCB0byBob3cgdGltZW91dHMgYXJlIGNhbGN1bGF0ZWQgb3IgbW9kaWZpZWQuIEl0J3MgdGltZSB0byByZWZyZXNoIGFuZCBhbmFseXplIHRoaXMgY29yZSBwaWVjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUxNSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU1OjQxLjgxODI0MTA3N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzU6XFx0XFxuICAzNjpcXHRcXHR0aW1lb3V0ID0gcmN1X2RlcmVmZXJlbmNlKHRpbWVvdXRfZXh0LVxcdTAwM2V0aW1lb3V0KTtcXG4gIDM3OlxcdFxcdGlmICh0aW1lb3V0IFxcdTAwMjZcXHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2dGltZW91dC1cXHUwMDNlcmVmY250KSlcXG4gIDM4OlxcdFxcdFxcdGtmcmVlX3JjdSh0aW1lb3V0LCByY3UpO1xcbiAgMzk6XFx0I2VuZGlmXFxuICA0MDpcXHR9XFxuICA0MTpcXHRcXG4gIDQyOlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50ICpcXG4gIDQzOlxcdG5mX2N0X3RpbWVvdXRfZGF0YShjb25zdCBzdHJ1Y3QgbmZfY29ubl90aW1lb3V0ICp0KVxcbiAgNDQ6XFx0e1xcbiAgNDU6XFx0I2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfVElNRU9VVFxcbiAgNDY6XFx0XFx0c3RydWN0IG5mX2N0X3RpbWVvdXQgKnRpbWVvdXQ7XFxuICA0NzpcXHRcXG4gIDQ4OlxcdFxcdHRpbWVvdXQgPSByY3VfZGVyZWZlcmVuY2UodC1cXHUwMDNldGltZW91dCk7XFxuICA0OTpcXHRcXHRpZiAodGltZW91dCA9PSBOVUxMKVxcbiAgNTA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA1MTpcXHRcXG4gIDUyOlxcdFxcdHJldHVybiAodW5zaWduZWQgaW50ICopdGltZW91dC1cXHUwMDNlZGF0YTtcXG4gIDUzOlxcdCNlbHNlXFxuICA1NDpcXHRcXHRyZXR1cm4gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTU6NDEuODE4MzYxMDg2WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NTQ4MzA3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgQ29ubmVjdGlvbiBUcmFja2luZyBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBob3cgd2UncmUgaGFuZGxpbmcgdGltZW91dHMgaW4gY29ubmVjdGlvbiB0cmFja2luZy4gU3BlY2lmaWNhbGx5LCB0aGUgYHRpbWVvdXQtXHUwMDNlZGF0YWAgYXJyYXkgaXMgYW4gYHVuc2lnbmVkIGludGAgYXJyYXkgKG9yIGB1MzJgIGZvciB1cyksIGFuZCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSBtaWdodCBiZSB1c2luZyB0aGUgKndyb25nKiB0aW1lb3V0IHZhbHVlcyBpZiB0aGUgcHJvdG9jb2xzIGRvbid0IG1hdGNoLiBUaGlzIGlzIHdoZXJlIHRoZSByZWQgZmxhZ3MgZ28gdXAuXG5cbkkga25vdyBUQ1AgaGFzIGEgYm9hdGxvYWQgb2YgdGltZW91dCB2YWx1ZXMg4oCTIHdlJ3JlIHRhbGtpbmcgdGhpbmdzIGxpa2UgYFRDUF9DT05OVFJBQ0tfU1lOX1NFTlRgLCBgVENQX0NPTk5UUkFDS19FU1RBQkxJU0hFRGAsIGFuZCBhIGJ1bmNoIG1vcmUuIFVEUCwgb24gdGhlIG90aGVyIGhhbmQsIGlzIG11Y2ggc2ltcGxlciwgd2l0aCBmYXIgZmV3ZXIgc3RhdGVzIGFuZCB0aGVyZWZvcmUgZmV3ZXIgdGltZW91dHMsIGxpa2UgYFVEUF9DVF9VTlJFUExJRURgIGFuZCBgVURQX0NUX1JFUExJRURgLlxuXG5UaGUgcHJvYmxlbSBpcywgaWYgd2UgZW5kIHVwIGluIGEgc2l0dWF0aW9uIHdoZXJlIGEgVURQIGNvbm5lY3Rpb24gdXNlcyBhIFRDUCB0aW1lb3V0IG9iamVjdCwgaXQgKmNvdWxkKiBiZSBva2F5LiBVRFAgaXMgZ29pbmcgdG8gYWNjZXNzIGB0aW1lb3V0LVx1MDAzZWRhdGFgIHVzaW5nIGl0cyBvd24gVURQIHN0YXRlIGluZGljZXMuIFNpbmNlIFRDUCBoYXMgbW9yZSBzdGF0ZXMsIHRob3NlIGluZGljZXMgc2hvdWxkIGJlIGluIGJvdW5kcy4gSG93ZXZlciwgZmxpcCB0aGUgc2NyaXB0LiBJZiBhIFRDUCBjb25uZWN0aW9uIHVzZXMgYSBVRFAgdGltZW91dCBvYmplY3QsIHdlJ3JlIGluIHJlYWwgdHJvdWJsZS4gVENQIHdpbGwgYWNjZXNzIGB0aW1lb3V0LVx1MDAzZWRhdGFgIHVzaW5nIGl0cyBUQ1Agc3RhdGUgaW5kaWNlcy4gVENQIGhhcyB1cCB0byBmb3VydGVlbiBkaWZmZXJlbnQgc3RhdGVzIChvciBzb21ldGhpbmcgYXJvdW5kIHRoYXQgbnVtYmVyKS4gVURQIG9ubHkgaGFzIHR3by4gU28sIGlmIHdlIHRyeSBzb21ldGhpbmcgbGlrZSBgdGltZW91dC1cdTAwM2VkYXRhW1RDUF9DT05OVFJBQ0tfRVNUQUJMSVNIRURdYCBvbiBhIFVEUCBvYmplY3QsIHdlJ3JlICpndWFyYW50ZWVkKiB0byBoYXZlIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhpcyBpcyBhIGNsYXNzaWMgdnVsbmVyYWJpbGl0eSFcblxuTm93LCBsZXQncyB2ZXJpZnkgdGhpcy4gQmVmb3JlIEkgZ28gdG9vIGRlZXAsIEkgbmVlZCB0byBzZWUgaG93IHRoaXMgYHRpbWVvdXQtXHUwMDNlZGF0YWAgYXJyYXkgaXMgYWN0dWFsbHkgYWxsb2NhdGVkLiBJIGhhdmUgdG8gbG9vayBkZWVwZXIgdG8gc2VlIGhvdyB0aGUgb2JqZWN0IGlzIGNvbnN0cnVjdGVkIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9ucyBhbmQgdmVyaWZ5IGhvdyB3ZSBjYW4gZ2V0IGludG8gdGhpcyBzaXR1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMzIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NTo0Ny4yNzMxOTQ5OTZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MzkzMDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBuZl9jdF90aW1lb3V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTEzLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oOjE0OnN0cnVjdCBuZl9jdF90aW1lb3V0IHtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC0xNS1cXHRyZWZjb3VudF90XFx0XFx0cmVmY250O1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg9MjI9c3RydWN0IG5mX2Nvbm5fdGltZW91dCB7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg6MjM6XFx0c3RydWN0IG5mX2N0X3RpbWVvdXQgX19yY3UgKnRpbWVvdXQ7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmgtMjQtfTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oPTI2PXN0YXRpYyBpbmxpbmUgdm9pZCBuZl9jdF90aW1lb3V0X3B1dChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC0yOS1cXHRzdHJ1Y3QgbmZfY29ubl90aW1lb3V0ICp0aW1lb3V0X2V4dDtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaDozMDpcXHRzdHJ1Y3QgbmZfY3RfdGltZW91dCAqdGltZW91dDtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC0zMS1cXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oPTQzPW5mX2N0X3RpbWVvdXRfZGF0YShjb25zdCBzdHJ1Y3QgbmZfY29ubl90aW1lb3V0ICp0KVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmgtNDUtI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfVElNRU9VVFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oOjQ2OlxcdHN0cnVjdCBuZl9jdF90aW1lb3V0ICp0aW1lb3V0O1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTQ3LVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg9Njk9c3RydWN0IG5mX2Nvbm5fdGltZW91dCAqbmZfY3RfdGltZW91dF9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdCxcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaDo3MDpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmZfY3RfdGltZW91dCAqdGltZW91dCxcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC03MS1cXHRcXHRcXHRcXHRcXHQgICAgICBnZnBfdCBnZnApXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaD05ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCAqbmZfY3RfdGltZW91dF9sb29rdXAoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmgtMTA3LSNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaDoxMDg6dm9pZCBuZl9jdF91bnRpbWVvdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY3RfdGltZW91dCAqdGltZW91dCk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmgtMTA5LWludCBuZl9jdF9zZXRfdGltZW91dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZl9jb25uICpjdCwgdTggbDNudW0sIHU4IGw0bnVtLFxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg9MTIwPXN0YXRpYyBpbmxpbmUgdm9pZCBuZl9jdF9kZXN0cm95X3RpbWVvdXQoc3RydWN0IG5mX2Nvbm4gKmN0KVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmgtMTI2LSNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaDoxMjc6c3RydWN0IG5mX2N0X3RpbWVvdXRfaG9va3Mge1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oOjEyODpcXHRzdHJ1Y3QgbmZfY3RfdGltZW91dCAqKCp0aW1lb3V0X2ZpbmRfZ2V0KShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oOjEyOTpcXHR2b2lkICgqdGltZW91dF9wdXQpKHN0cnVjdCBuZl9jdF90aW1lb3V0ICp0aW1lb3V0KTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC0xMzAtfTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC0xMzEtXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg6MTMyOmV4dGVybiBjb25zdCBzdHJ1Y3QgbmZfY3RfdGltZW91dF9ob29rcyBfX3JjdSAqbmZfY3RfdGltZW91dF9ob29rO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTEzMy0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTU6NDcuMzYwNTk0MzRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4MjEyMTY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBuZl9jdF90aW1lb3V0KipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29ubnRyYWNrIHRpbWVvdXQgc3RydWN0dXJlLCBzbyB0aGUgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byBgaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmhgLiBJJ20gaG9waW5nIGl0J3Mgd2VsbC1kb2N1bWVudGVkIOKAkyBJJ20gbm90IGxvb2tpbmcgZm9yIGFueSBzdXJwcmlzZXMsIGp1c3QgYSBzb2xpZCBkZWZpbml0aW9uLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgZGlmZmVyZW50IHRpbWVvdXQgdmFsdWVzIGFyZSBzdHJ1Y3R1cmVkLCBpZiB0aGVyZSBhcmUgYW55IGZsYWdzLCBhbmQgaG93IHRoaXMgc3RydWN0IHJlbGF0ZXMgdG8gdGhlIGNvcmUgY29ubnRyYWNrIHN0YXRlIG1hbmFnZW1lbnQuIEkgd2FudCB0byBzZWUgY2xlYXJseSBob3cgdGltZW91dHMgYXJlIGhhbmRsZWQgYXQgdGhlIGRhdGEgc3RydWN0dXJlIGxldmVsLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdGhlIGZpZWxkcyB0aGF0IGRlZmluZSB0aGUgZ3JhbnVsYXJpdHkgYW5kIHRoZSBkaWZmZXJlbnQgdGltZW91dCBpbnRlcnZhbHMgKGxpa2UgZXN0YWJsaXNoZWQsIGNsb3NpbmcsIGV0Yy4pLiBMZXQncyBzZWUgaWYgdGhpcyBoZWFkZXIgZmlsZSBwcm92aWRlcyB0aGUgbG93LWxldmVsIGRldGFpbHMgSSBuZWVkIGZvciB0aGlzIGN1cnJlbnQgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NTMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NTo1MC41NDI3MTk5MTRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4gICAyOlxcdCNpZm5kZWYgX05GX0NPTk5UUkFDS19USU1FT1VUX0hcXG4gICAzOlxcdCNkZWZpbmUgX05GX0NPTk5UUkFDS19USU1FT1VUX0hcXG4gICA0OlxcdFxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRfbmFtZXNwYWNlLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlX2NvbW1vbi5oXFx1MDAzZVxcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFxcdTAwM2VcXG4gIDEwOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuaFxcdTAwM2VcXG4gIDExOlxcdFxcbiAgMTI6XFx0I2RlZmluZSBDVE5MX1RJTUVPVVRfTkFNRV9NQVhcXHQzMlxcbiAgMTM6XFx0XFxuICAxNDpcXHRzdHJ1Y3QgbmZfY3RfdGltZW91dCB7XFxuICAxNTpcXHRcXHRyZWZjb3VudF90XFx0XFx0cmVmY250O1xcbiAgMTY6XFx0XFx0X191MTZcXHRcXHRcXHRsM251bTtcXG4gIDE3OlxcdFxcdGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbDRwcm90bztcXG4gIDE4OlxcdFxcdHN0cnVjdCByY3VfaGVhZFxcdFxcdHJjdTtcXG4gIDE5OlxcdFxcdGNoYXJcXHRcXHRcXHRkYXRhW107XFxuICAyMDpcXHR9O1xcbiAgMjE6XFx0XFxuICAyMjpcXHRzdHJ1Y3QgbmZfY29ubl90aW1lb3V0IHtcXG4gIDIzOlxcdFxcdHN0cnVjdCBuZl9jdF90aW1lb3V0IF9fcmN1ICp0aW1lb3V0O1xcbiAgMjQ6XFx0fTtcXG4gIDI1OlxcdFxcbiAgMjY6XFx0c3RhdGljIGlubGluZSB2b2lkIG5mX2N0X3RpbWVvdXRfcHV0KGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdClcXG4gIDI3OlxcdHtcXG4gIDI4OlxcdCNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG4gIDI5OlxcdFxcdHN0cnVjdCBuZl9jb25uX3RpbWVvdXQgKnRpbWVvdXRfZXh0O1xcbiAgMzA6XFx0XFx0c3RydWN0IG5mX2N0X3RpbWVvdXQgKnRpbWVvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU1OjUwLjU0Mjg3NDgzNFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDE0ODY5MTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgYG5mX2N0X3RpbWVvdXRgIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBuZl9jdF90aW1lb3V0YCBzdHJ1Y3QgYW5kIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgYGRhdGFbXWAg4oCTIHRoYXQncyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlci4gVGhhdCBtZWFucyB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUgYHN0cnVjdGAgaXNuJ3QgZml4ZWQgYXQgY29tcGlsZSB0aW1lLiBJdHMgc2l6ZSBkeW5hbWljYWxseSBhZGFwdHMgYXQgcnVudGltZS4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgdGhlIHNpemUgb2YgYW4gaW5zdGFuY2Ugb2YgYHN0cnVjdCBuZl9jdF90aW1lb3V0YCBpcyBnb2luZyB0byBiZSBhbGxvY2F0ZWQgd2l0aCBhIHNpemUgZGVwZW5kaW5nIG9uIHRoZSBwcm90b2NvbC4gXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKmhvdyogdGhhdCBhbGxvY2F0aW9uIGFjdHVhbGx5IGhhcHBlbnMuIFdoZXJlIGluIHRoZSBjb2RlIGlzIHRoZSBtZW1vcnkgYmVpbmcgY2FydmVkIG91dCBmb3IgdGhpcyB0aGluZywgYW5kIGhvdyBkb2VzIHRoZSBjb2RlIGRldGVybWluZSB0aGUgY29ycmVjdCBzaXplPyBMZXQncyB0cmFjZSB0aGlzIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ3NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTU6NTMuNTU3NzQ3MloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxNTQ5OTM0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJremFsbG9jLipzaXplb2YuKm5mX2N0X3RpbWVvdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9OTA5PXN0YXRpYyBpbnQgbmZ0X2N0X3RpbWVvdXRfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtOTM2LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6OTM3OlxcdHRpbWVvdXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmZfY3RfdGltZW91dCkgK1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtOTM4LVxcdFxcdFxcdCAgbDRwcm90by1cXHUwMDNlY3RubF90aW1lb3V0Lm9ial9zaXplLCBHRlBfS0VSTkVMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTU6NTcuNzczMjUxODMzWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NDUxMjkzNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE91dC1vZi1Cb3VuZHMgUmVhZCBpbiBDb25uZWN0aW9uIFRyYWNraW5nKipcblxuT2theSwgbGV0J3Mgc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiB0aGUgYWxsb2NhdGlvbiBvZiBgbDRwcm90by1cdTAwM2VjdG5sX3RpbWVvdXQub2JqX3NpemVgIGltcGxpZXMgdGhhdCBpZiBhIFVEUCB0aW1lb3V0IG9iamVjdCBpcyBjcmVhdGVkLCBpdCBhbGxvY2F0ZXMgYHNpemVvZihzdHJ1Y3QgbmZfY3RfdGltZW91dClgIHBsdXMgdGhlIGBVRFBfVElNRU9VVF9PQkpfU0laRWAuIFJpZ2h0LiBBbmQgaWYgYSBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSB1c2VzICp0aGF0KiBVRFAgdGltZW91dCBvYmplY3QsIGl0IHdpbGwgdHJ5IHRvIGFjY2VzcyBzb21ldGhpbmcgbGlrZSBgdGltZW91dC1cdTAwM2VkYXRhW1RDUF9TVEFURV1gLiBDbGVhcmx5LCBiZWNhdXNlIGBUQ1BfVElNRU9VVF9PQkpfU0laRWAgaXMgc2lnbmlmaWNhbnRseSBsYXJnZXIgdGhhbiBgVURQX1RJTUVPVVRfT0JKX1NJWkVgLCB0aGlzIHNjcmVhbXMgb3V0LW9mLWJvdW5kcyByZWFkLCByaWdodD9cblxuQnV0LCBob2xkIG9uLiBMb29raW5nIGNsb3NlciBhdCBgbmZfY3RfcmVmcmVzaGAsIGl0IHRha2VzIHRoZSB2YWx1ZSBmcm9tIGB2YWx1ZXNbMF1gLiBBbmQsIGluIHRoZSBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGZ1bmN0aW9uLCBpdCBkb2VzIGEgc2ltaWxhciB0aGluZy5cblxuYGBgY1xudmFsdWVzID0gbmZfY3RfdGltZW91dF9kYXRhKHRpbWVvdXQpO1xuaWYgKHZhbHVlcylcbiAgICBuZl9jdF9yZWZyZXNoKGN0LCB2YWx1ZXNbMF0pO1xuYGBgXG5cbkFoLCByaWdodCwgYHZhbHVlc1swXWAgaXMganVzdCB0aGUgZmlyc3QgZWxlbWVudC4gU28sIGlzIHRoZXJlICphY3R1YWxseSogYW4gb3V0LW9mLWJvdW5kcyByZWFkIGhlcmU/IEFjdHVhbGx5LCBgdmFsdWVzWzBdYCB3aWxsIGFsd2F5cyBiZSB3aXRoaW4gYm91bmRzLCBhcyBsb25nIGFzIGBvYmpfc2l6ZSBcdTAwM2U9IHNpemVvZih1bnNpZ25lZCBpbnQpYC4gSG1tLCB0aGF0IHNlZW1zIG9rYXkuXG5cbkhvd2V2ZXIsIEkgY2FuJ3QgYmUgdG9vIGhhc3R5LiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgKm90aGVyKiBwbGFjZXMgdGhhdCB1c2UgdGhlIHRpbWVvdXQgb2JqZWN0LiBUaGUgdGltZW91dCBvYmplY3QgaXMgdWx0aW1hdGVseSBhdHRhY2hlZCB0byB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSB1c2luZyBgbmZfY3RfdGltZW91dF9leHRfYWRkYCwgYW5kIG9uY2UgYXR0YWNoZWQsIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IGlzIGdvaW5nIHRvIGJlIHVzaW5nIHRoYXQgdGltZW91dCBvYmplY3QgZm9yIGV2ZXJ5IHNpbmdsZSBzdGF0ZSB0cmFuc2l0aW9uLiBXaGljaCBtZWFucyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoZXJlIGBuZl9jdF90aW1lb3V0X2xvb2t1cGAgYW5kIGBuZl9jdF90aW1lb3V0X2RhdGFgIGFyZSBhY3R1YWxseSB1c2VkIHRocm91Z2hvdXQgdGhlIGNvZGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZywgYW5kIHRoYXQgdGhvc2UgZnVuY3Rpb25zIGFyZW4ndCBiZWluZyB1c2VkIGluIGEgd2F5IHRoYXQgKndvdWxkKiByZXN1bHQgaW4gYW4gb3V0LW9mLWJvdW5kcyByZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODUzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU2OjAzLjQxODM4NTFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjI5NDc2MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY3RfdGltZW91dF9sb29rdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oPTY5PXN0cnVjdCBuZl9jb25uX3RpbWVvdXQgKm5mX2N0X3RpbWVvdXRfZXh0X2FkZChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC05My1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaDo5NDpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCAqbmZfY3RfdGltZW91dF9sb29rdXAoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTk1LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYz0xOTU2PXN0YXRpYyBpbnQgZ2VuZXJpY19wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTE5NTgte1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYzoxOTU5OlxcdGNvbnN0IHVuc2lnbmVkIGludCAqdGltZW91dCA9IG5mX2N0X3RpbWVvdXRfbG9va3VwKGN0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTk2MC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5jPTI2Nj1pbnQgbmZfY29ubnRyYWNrX2dyZV9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmMtMjc0LVxcdGlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5jOjI3NTpcXHRcXHR1bnNpZ25lZCBpbnQgKnRpbWVvdXRzID0gbmZfY3RfdGltZW91dF9sb29rdXAoY3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5jLTI3Ni1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYz03MD1pbnQgbmZfY29ubnRyYWNrX2ljbXBfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYy03Ny1cXHQgICBhbmQgYWxzbyB0byBoYW5kbGUgY29ycmVjdGx5IElDTVAgZWNobyByZXBseSBkdXBsaWNhdGVzLiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYzo3ODpcXHR1bnNpZ25lZCBpbnQgKnRpbWVvdXQgPSBuZl9jdF90aW1lb3V0X2xvb2t1cChjdCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jLTc5LVxcdHN0YXRpYyBjb25zdCB1X2ludDhfdCB2YWxpZF9uZXdbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jPTg5PWludCBuZl9jb25udHJhY2tfaWNtcHY2X3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYy05My17XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmM6OTQ6XFx0dW5zaWduZWQgaW50ICp0aW1lb3V0ID0gbmZfY3RfdGltZW91dF9sb29rdXAoY3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jLTk1LVxcdHN0YXRpYyBjb25zdCB1OCB2YWxpZF9uZXdbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYz0zMjc9aW50IG5mX2Nvbm50cmFja19zY3RwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtNTIxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYzo1MjI6XFx0dGltZW91dHMgPSBuZl9jdF90aW1lb3V0X2xvb2t1cChjdCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTUyMy1cXHRpZiAoIXRpbWVvdXRzKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9NzIyPXN0YXRpYyB2b2lkIF9fY29sZCBuZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNzYwLVxcdFxcdHRuID0gbmZfdGNwX3Blcm5ldChuZl9jdF9uZXQoY3QpKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo3NjE6XFx0XFx0dGltZW91dHMgPSBuZl9jdF90aW1lb3V0X2xvb2t1cChjdCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNzYyLVxcdFxcdGlmICghdGltZW91dHMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz05MTc9dm9pZCBuZl9jb25udHJhY2tfdGNwX3NldF9jbG9zaW5nKHN0cnVjdCBuZl9jb25uICpjdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTkzNS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo5MzY6XFx0dGltZW91dHMgPSBuZl9jdF90aW1lb3V0X2xvb2t1cChjdCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtOTM3LVxcdGlmICghdGltZW91dHMpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTk2Mz1pbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTI3Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMjc3OlxcdHRpbWVvdXRzID0gbmZfY3RfdGltZW91dF9sb29rdXAoY3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyNzgtXFx0aWYgKCF0aW1lb3V0cylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jPTg0PWludCBuZl9jb25udHJhY2tfdWRwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYy05NS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYzo5NjpcXHR0aW1lb3V0cyA9IG5mX2N0X3RpbWVvdXRfbG9va3VwKGN0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYy05Ny1cXHRpZiAoIXRpbWVvdXRzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NjowNy45ODEzMzg0NjFaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxMzc1NjIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGA6XG5cbioqRGlzc2VjdGluZyBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGAuIFRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uIGluIHRoZSBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUsIHJpZ2h0PyBJdCdzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGZvciBUQ1AgY29ubmVjdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29udHJvbCBmbG93LiBJdCdzIGhhbmRsaW5nIFRDUCBwYWNrZXRzIGFuZCBmaWd1cmluZyBvdXQgdGhlaXIgcm9sZSBpbiB0aGUgb25nb2luZyBjb25uZWN0aW9uLiBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgc3RhdGUgdHJhbnNpdGlvbnMg4oCTIHdoYXQgaGFwcGVucyB3aGVuIGl0IHNlZXMgYSBTWU4sIFNZTi1BQ0ssIEFDSywgRklOLCBSU1QsIGFuZCBzbyBvbi4gSXQncyBnb3QgdG8gcGFyc2UgdGhlIFRDUCBmbGFncyB0byBkZXRlcm1pbmUgdGhlIGNvbm5lY3Rpb24ncyBzdGF0ZSwgb3IgbW9kaWZ5IGV4aXN0aW5nIHN0YXRlLCBiYXNlZCBvbiB0aGUgZmxvdyBpdCBpcyBzZWVpbmcuXG5cbkknbSBwaWN0dXJpbmcgaXQgaGFuZGxpbmcgdmFyaW91cyBzY2VuYXJpb3M6IGluaXRpYWwgY29ubmVjdGlvbiBzZXR1cCwgZGF0YSB0cmFuc2ZlciwgY29ubmVjdGlvbiB0ZWFyZG93biAoZ3JhY2VmdWwgb3IgYWJydXB0KS4gSXTigJlzIGVzc2VudGlhbCBmb3IgZW5zdXJpbmcgY29ubmVjdGlvbnMgYXJlIHByb3Blcmx5IHRyYWNrZWQsIHNvIE5BVCwgZmlyZXdhbGwgcnVsZXMsIGFuZCBvdGhlciBzdGF0ZWZ1bCBvcGVyYXRpb25zIGNhbiBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoZXJlIGlzIGEgbG90IG9mIHN0YXRlIHRvIGp1Z2dsZTogc2VxdWVuY2UgbnVtYmVycywgYWNrbm93bGVkZ2VtZW50IG51bWJlcnMsIHdpbmRvdyBzaXplcywgYW5kIHBvdGVudGlhbGx5IHJldHJhbnNtaXNzaW9ucyBvciBvdXQtb2Ytb3JkZXIgcGFja2V0cy4gVGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgcmVsaWVzIG9uIGFsbCB0aGF0IGluZm9ybWF0aW9uLCBhbmQgc28gaXQgaXMgYW4gaW1wb3J0YW50IGZ1bmN0aW9uLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCB0b28sIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIFRoZSBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBpbiB0aGUgZmFzdCBwYXRoLCBzbyBlZmZpY2llbmN5IGlzIHBhcmFtb3VudC4gQW55IGJvdHRsZW5lY2tzIGhlcmUgY2FuIGh1cnQgdGhyb3VnaHB1dC4gSXQgaXMgcmVhbGx5IHRoZSBoZWFydCBvZiB0aGUgY29ubmVjdGlvbiB0cmFja2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMDgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NjoxMS41OTUwOTgyODVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM5MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNzA6XFx0XFx0Y3QtXFx1MDAzZXByb3RvLnRjcC5sYXN0X2RpciA9IGRpcjtcXG4xMjcxOlxcdFxcbjEyNzI6XFx0XFx0Y3QtXFx1MDAzZXByb3RvLnRjcC5zdGF0ZSA9IG5ld19zdGF0ZTtcXG4xMjczOlxcdFxcdGlmIChvbGRfc3RhdGUgIT0gbmV3X3N0YXRlXFxuMTI3NDpcXHRcXHQgICAgXFx1MDAyNlxcdTAwMjYgbmV3X3N0YXRlID09IFRDUF9DT05OVFJBQ0tfRklOX1dBSVQpXFxuMTI3NTpcXHRcXHRcXHRjdC1cXHUwMDNlcHJvdG8udGNwLnNlZW5bZGlyXS5mbGFncyB8PSBJUF9DVF9UQ1BfRkxBR19DTE9TRV9JTklUO1xcbjEyNzY6XFx0XFxuMTI3NzpcXHRcXHR0aW1lb3V0cyA9IG5mX2N0X3RpbWVvdXRfbG9va3VwKGN0KTtcXG4xMjc4OlxcdFxcdGlmICghdGltZW91dHMpXFxuMTI3OTpcXHRcXHRcXHR0aW1lb3V0cyA9IHRuLVxcdTAwM2V0aW1lb3V0cztcXG4xMjgwOlxcdFxcbjEyODE6XFx0XFx0aWYgKGN0LVxcdTAwM2Vwcm90by50Y3AucmV0cmFucyBcXHUwMDNlPSB0bi1cXHUwMDNldGNwX21heF9yZXRyYW5zIFxcdTAwMjZcXHUwMDI2XFxuMTI4MjpcXHRcXHQgICAgdGltZW91dHNbbmV3X3N0YXRlXSBcXHUwMDNlIHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfUkVUUkFOU10pXFxuMTI4MzpcXHRcXHRcXHR0aW1lb3V0ID0gdGltZW91dHNbVENQX0NPTk5UUkFDS19SRVRSQU5TXTtcXG4xMjg0OlxcdFxcdGVsc2UgaWYgKHVubGlrZWx5KGluZGV4ID09IFRDUF9SU1RfU0VUKSlcXG4xMjg1OlxcdFxcdFxcdHRpbWVvdXQgPSB0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX0NMT1NFXTtcXG4xMjg2OlxcdFxcdGVsc2UgaWYgKChjdC1cXHUwMDNlcHJvdG8udGNwLnNlZW5bMF0uZmxhZ3MgfCBjdC1cXHUwMDNlcHJvdG8udGNwLnNlZW5bMV0uZmxhZ3MpIFxcdTAwMjZcXG4xMjg3OlxcdFxcdFxcdCBJUF9DVF9UQ1BfRkxBR19EQVRBX1VOQUNLTk9XTEVER0VEIFxcdTAwMjZcXHUwMDI2XFxuMTI4ODpcXHRcXHRcXHQgdGltZW91dHNbbmV3X3N0YXRlXSBcXHUwMDNlIHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfVU5BQ0tdKVxcbjEyODk6XFx0XFx0XFx0dGltZW91dCA9IHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfVU5BQ0tdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NjoxMS41OTU0Mzk1NjVaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgwODY0NjYwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgT3V0LW9mLUJvdW5kcyBSZWFkKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBhY2Nlc3NpbmcgYHRpbWVvdXRzW25ld19zdGF0ZV1gLiBNeSBtaW5kIGlzIHJhY2luZyDigJMgaWYgYHRpbWVvdXRzYCBpcyBhY3R1YWxseSBhIFVEUCB0aW1lb3V0IG9iamVjdCwgaXRzIHNpemUgaXMgb25seSBhIGNvdXBsZSBvZiB1bnNpZ25lZCBpbnRzLCBidXQgYG5ld19zdGF0ZWAgY291bGQgYmUgbXVjaCBsYXJnZXIuIFRoYXQncyBhIHRleHRib29rIG91dC1vZi1ib3VuZHMgcmVhZCEgV2UgYWxsIGtub3cgS0FTQU4gaXMgdGhlcmUgdG8gZGV0ZWN0IHRob3NlLCByaWdodD9cblxuQnV0LCB3YWl0Li4uIGlzIHRoZXJlIGFueSAqdW5pbml0aWFsaXplZCogbWVtb3J5IGludm9sdmVkPyBUaGUgdGltZW91dCBvYmplY3QgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCBzbyBpdCdzIGZ1bGx5IHplcm9lZC4gU28sIHdoaWxlIGl0ICppcyogYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBpdCB3aWxsIGxpa2VseSBqdXN0IHJlYWQgaW50byBhZGphY2VudCBtZW1vcnkuIEFuZCBLQVNBTiB3aWxsIGNhdGNoICp0aGF0KiBvdXQtb2YtYm91bmRzIHJlYWQsIHJlZ2FyZGxlc3MuIEknbSBwcmV0dHkgc3VyZSBLQVNBTiB3aWxsIGNhdGNoIHRoaXMuXG5cbk5vdywgaG9sZCBvbi4uLiB3aGF0IGlmIHRoZSBvdXQtb2YtYm91bmRzIHJlYWQgZW5kcyB1cCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9mIGFuIGFkamFjZW50IGFsbG9jYXRpb24/IEtBU0FOIHN0aWxsIGNhdGNoZXMgdGhhdCEgS01TQU4gaXMgbW9yZSBnZWFyZWQgdG93YXJkcyBkZXRlY3RpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgc3BlY2lmaWNhbGx5LCBidXQgdGhlIGNvcmUgaXNzdWUgaGVyZSBpcyBhbiBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3MsIHNvIEtBU0FOIGlzIGRlZmluaXRlbHkgdGhlIHRvb2wgZm9yIHRoZSBqb2IuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUncyBhbnl0aGluZyBlbHNlIGluIHRoZSBwYXRjaCB0byBiZSBhd2FyZSBvZi4gQWgsIHJpZ2h0LCB0aGUgYHByaXYtXHUwMDNlbDRwcm90byAhPSBuZl9jdF9wcm90b251bShjdClgIGNoZWNrLiBUaGF0IHByZXZlbnRzIGF0dGFjaGluZyB0aGUgdGltZW91dCBvYmplY3Qgb2Ygb25lIHByb3RvY29sIHRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IG9mIGFub3RoZXIuIEdvb2QuIFRoaXMgYmxvY2tzIHR5cGUgY29uZnVzaW9uIGFuZCBmdXJ0aGVyIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuXG5cbk9rYXksIGlzIHRoZXJlIGFueSBwb3NzaWJpbGl0eSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2U/IEkgcmVtZW1iZXIgdGhlIHRpbWVvdXQgb2JqZWN0IHZhbHVlcyBiZWluZyByZWFkIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluaywgYW5kIEkga25vdyB0aGV5IGFyZSBmdWxseSBpbml0aWFsaXplZC4gV2FpdCwgaG93IGlzIHRoZSB0aW1lb3V0IG9iamVjdCBpbml0aWFsaXplZD8gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgcG9pbnQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTY6MTguNDA0MDg5NTYzWiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NjUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9jdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwOSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkwOTpcXHRzdGF0aWMgaW50IG5mdF9jdF90aW1lb3V0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuIDkxMDpcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSxcXG4gOTExOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopXFxuIDkxMjpcXHR7XFxuIDkxMzpcXHRcXHRzdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XFxuIDkxNDpcXHRcXHRjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG87XFxuIDkxNTpcXHRcXHRzdHJ1Y3QgbmZfY3RfdGltZW91dCAqdGltZW91dDtcXG4gOTE2OlxcdFxcdGludCBsM251bSA9IGN0eC1cXHUwMDNlZmFtaWx5O1xcbiA5MTc6XFx0XFx0X191OCBsNG51bTtcXG4gOTE4OlxcdFxcdGludCByZXQ7XFxuIDkxOTpcXHRcXG4gOTIwOlxcdFxcdGlmICghdGJbTkZUQV9DVF9USU1FT1VUX0w0UFJPVE9dIHx8XFxuIDkyMTpcXHRcXHQgICAgIXRiW05GVEFfQ1RfVElNRU9VVF9EQVRBXSlcXG4gOTIyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA5MjM6XFx0XFxuIDkyNDpcXHRcXHRpZiAodGJbTkZUQV9DVF9USU1FT1VUX0wzUFJPVE9dKVxcbiA5MjU6XFx0XFx0XFx0bDNudW0gPSBudG9ocyhubGFfZ2V0X2JlMTYodGJbTkZUQV9DVF9USU1FT1VUX0wzUFJPVE9dKSk7XFxuIDkyNjpcXHRcXG4gOTI3OlxcdFxcdGw0bnVtID0gbmxhX2dldF91OCh0YltORlRBX0NUX1RJTUVPVVRfTDRQUk9UT10pO1xcbiA5Mjg6XFx0XFx0cHJpdi1cXHUwMDNlbDRwcm90byA9IGw0bnVtO1xcbiA5Mjk6XFx0XFxuIDkzMDpcXHRcXHRsNHByb3RvID0gbmZfY3RfbDRwcm90b19maW5kKGw0bnVtKTtcXG4gOTMxOlxcdFxcbiA5MzI6XFx0XFx0aWYgKGw0cHJvdG8tXFx1MDAzZWw0cHJvdG8gIT0gbDRudW0pIHtcXG4gOTMzOlxcdFxcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbiA5MzQ6XFx0XFx0XFx0Z290byBlcnJfcHJvdG9fcHV0O1xcbiA5MzU6XFx0XFx0fVxcbiA5MzY6XFx0XFxuIDkzNzpcXHRcXHR0aW1lb3V0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5mX2N0X3RpbWVvdXQpICtcXG4gOTM4OlxcdFxcdFxcdFxcdCAgbDRwcm90by1cXHUwMDNlY3RubF90aW1lb3V0Lm9ial9zaXplLCBHRlBfS0VSTkVMKTtcXG4gOTM5OlxcdFxcdGlmICh0aW1lb3V0ID09IE5VTEwpIHtcXG4gOTQwOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDk0MTpcXHRcXHRcXHRnb3RvIGVycl9wcm90b19wdXQ7XFxuIDk0MjpcXHRcXHR9XFxuIDk0MzpcXHRcXG4gOTQ0OlxcdFxcdHJldCA9IG5mdF9jdF90aW1lb3V0X3BhcnNlX3BvbGljeShcXHUwMDI2dGltZW91dC1cXHUwMDNlZGF0YSwgbDRwcm90bywgY3R4LVxcdTAwM2VuZXQsXFxuIDk0NTpcXHRcXHRcXHRcXHRcXHRcXHQgIHRiW05GVEFfQ1RfVElNRU9VVF9EQVRBXSk7XFxuIDk0NjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gOTQ3OlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfdGltZW91dDtcXG4gOTQ4OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NjoxOC40MDQ0Njg4NjNaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI3MjkwMjM0MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25uZWN0aW9uIFRyYWNraW5nIFRpbWVvdXQgQnVnKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBicmVha2Rvd24gb2YgdGhpcyBjb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQgaXNzdWUuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgcHJvYmxlbSBsaWVzIGluIGEgcHJvdG9jb2wgbWlzbWF0Y2ggd2l0aGluIHRoZSB0aW1lb3V0IG9iamVjdC5cblxuSW5pdGlhbGx5LCBgbmZ0X2N0X3RpbWVvdXRfcGFyc2VfcG9saWN5YCBwYXJzZXMgbmV0bGluayBhdHRyaWJ1dGVzIGFuZCBwb3B1bGF0ZXMgdGhlIGB0aW1lb3V0LVx1MDAzZWRhdGFgIHN0cnVjdHVyZS4gSW1wb3J0YW50bHksIGBremFsbG9jYCBpcyB1c2VkLCBzbyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgemVyb2VkLCBtYWtpbmcgdGhpcyBzdHJpY3RseSBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIGFuZCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuXG5cblRoZSBidWcgc3VyZmFjZXMgYmVjYXVzZSBhIHRpbWVvdXQgb2JqZWN0IGRlc2lnbmVkIGZvciBvbmUgcHJvdG9jb2wgaXMgZ2V0dGluZyBhdHRhY2hlZCB0byBhIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgZm9yIGEgKmRpZmZlcmVudCogcHJvdG9jb2wuIFRoaXMgbGVhZHMgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgdHJpZXMgdG8gYWNjZXNzIHRoZSBgdGltZW91dHNgIGFycmF5IHVzaW5nIGFuIGluZGV4IChgbmV3X3N0YXRlYCkgdGhhdCBleGNlZWRzIHRoZSBib3VuZHMgZGVmaW5lZCBieSB0aGUgdGltZW91dCBvYmplY3QncyBwcm90b2NvbC4gSXQncyBhIGNsYXNzaWMgZXhhbXBsZSBvZiByZWFkaW5nIHBhc3QgdGhlIGFsbG9jYXRlZCBtZW1vcnkuIEtBU0FOIHNob3VsZCBiZSBhYmxlIHRvIGNhdGNoIHRoaXMuXG5cbkkgc3RhcnRlZCBkaWdnaW5nIGRlZXBlciBieSBsb29raW5nIGF0IGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAuIFRoZSBjb2RlIGluY2x1ZGVzIHNldmVyYWwgY2hlY2tzIHVzaW5nIGBwcml2LVx1MDAzZWw0cHJvdG9gLCB3aGljaCBpcyB0aGUgcHJvdG9jb2wgb2YgdGhlIHRpbWVvdXQgb2JqZWN0LiBUaGUgbW9zdCBpbXBvcnRhbnQgY2hlY2sgaXMgYHByaXYtXHUwMDNlbDRwcm90byAhPSBwa3QtXHUwMDNldHByb3RgLiBXaGlsZSB0aGlzIGNoZWNrcyB0aGF0IHRoZSBwYWNrZXQncyBwcm90b2NvbCBtYXRjaGVzIHRoZSB0aW1lb3V0IG9iamVjdCdzIHByb3RvY29sLCBJIHRob3VnaHQgYWJvdXQgYSBzcGVjaWZpYyBlZGdlIGNhc2Ugd2hlcmUgdGhlIHBhY2tldCdzIHByb3RvY29sIGlzIGRpZmZlcmVudCBmcm9tIHRoZSB0cmFja2VkIGNvbm5lY3Rpb24ncyBwcm90b2NvbCwgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIElDTVAgZXJyb3JzLiBBIFRDUCBjb25uZWN0aW9uIG1pZ2h0IGdlbmVyYXRlIGFuIElDTVAgZXJyb3IgcGFja2V0LiBJbiB0aGlzIGNhc2UsIGBwa3QtXHUwMDNldHByb3RgIGlzIElDTVAgKHRoZSBJQ01QIGVycm9yIHBhY2tldCksIHdoaWxlIGBuZl9jdF9wcm90b251bShjdClgIGlzIFRDUCAodGhlIG9yaWdpbmFsIGNvbm5lY3Rpb24gdGhhdCBjYXVzZWQgdGhlIElDTVAgZXJyb3IpLlxuXG5UaGUga2V5IGlzIHRoYXQgaWYgYHBrdC1cdTAwM2V0cHJvdGAgaXMgSUNNUCBhbmQgYHByaXYtXHUwMDNlbDRwcm90b2AgaXMgYWxzbyBJQ01QLCB0aGUgZmlyc3QgY2hlY2sgd2lsbCBwYXNzLCBidXQgdGhlIElDTVAgdGltZW91dCBvYmplY3QgaXMgc3RpbGwgYXR0YWNoZWQgdG8gdGhlIFRDUCBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5LlxuXG5TbywgaWYgYG5mX2N0X3RpbWVvdXRfZXh0X2FkZGAgaXMgY2FsbGVkIHdpdGggYW4gSUNNUCB0aW1lb3V0IG9iamVjdCAoYHByaXYtXHUwMDNldGltZW91dGApIGFuZCBhIFRDUCBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IChgY3RgKSwgd2UncmUgc2V0dGluZyB0aGUgc3RhZ2UgZm9yIHRoZSBidWcuIExhdGVyLCB3aGVuIHRoYXQgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgcHJvY2Vzc2VzIGEgKlRDUCogcGFja2V0LCBpdCB3aWxsIGluY29ycmVjdGx5IGFjY2VzcyB0aGUgSUNNUCB0aW1lb3V0IG9iamVjdC4gVGhlIElDTVAgdGltZW91dCBvYmplY3Qgb25seSBoYXMgYSBzbWFsbCBzdGF0ZSBhcnJheSAocGVyaGFwcyBvbmUgb3IgdHdvIGVudHJpZXMsIGRlZmluZWQgYnkgYElDTVBfQ1RfTUFYYCkuIFRoZSBUQ1AgY29ubmVjdGlvbiwgb24gdGhlIG90aGVyIGhhbmQsIHdpbGwgdHJ5IHRvIGFjY2VzcyB0aGUgYXJyYXkgdXNpbmcgYFRDUF9DT05OVFJBQ0tfRVNUQUJMSVNIRURgICh3aGljaCBpcyBsaWtlbHkgbGFyZ2VyKS5cblxuVGhpcyBpcyB0aGUgb3V0LW9mLWJvdW5kcyByZWFkISBUaGUgSUNNUCB0aW1lb3V0IG9iamVjdCBnZXRzIGF0dGFjaGVkIHRvIHRoZSBUQ1AgY29ubmVjdGlvbiBlbnRyeSBhbmQgdGhlIFRDUCBlbnRyeSByZWFkcyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIHRpbWVvdXQgb2JqZWN0J3MgZGF0YSBhcnJheS5cblxuU2luY2UgdGhpcyBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIEtBU0FOIHdpbGwgZGVmaW5pdGVseSBjYXRjaCBpdC4gS01TQU4gaXMgbm90IG5lY2Vzc2FyeSwgYXMgd2UgYXJlbid0IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlOyBga3phbGxvY2AgdG9vayBjYXJlIG9mIHRoYXQuXG5cblRvIHN1bSBpdCB1cDpcblxuMS4gIFRoZSBjcnVjaWFsIGBwcml2LVx1MDAzZWw0cHJvdG8gIT0gbmZfY3RfcHJvdG9udW0oY3QpYCBjaGVjayBpcyBtaXNzaW5nLlxuMi4gIFdpdGhvdXQgdGhlIGNoZWNrLCB0aW1lb3V0IG9iamVjdHMgb2YgZGlmZmVyZW50IHByb3RvY29scyBjYW4gYmUgaW5jb3JyZWN0bHkgYXR0YWNoZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZyBlbnRyaWVzLiBJQ01QIGVycm9yIHBhY2tldHMgYXNzb2NpYXRlZCB3aXRoIFRDUCBjb25uZWN0aW9ucyBhcmUgYSBjbGFzc2ljIGV4YW1wbGUuXG4zLiAgVGhlIHNpemUgb2YgdGhlIHRpbWVvdXQgb2JqZWN0J3MgZGF0YSBhcnJheSBkZXBlbmRzIG9uIGl0cyBwcm90b2NvbCAoZS5nLiwgYFVEUF9USU1FT1VUX09CSl9TSVpFYCwgYFRDUF9USU1FT1VUX09CSl9TSVpFYCkuXG40LiAgV2hlbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSBhY2Nlc3NlcyB0aGUgYXJyYXkgdXNpbmcgaXRzIG93biBwcm90b2NvbCdzIHN0YXRlIGluZGljZXMsIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBjYW4gb2NjdXIgaWYgdGhlIGF0dGFjaGVkIHRpbWVvdXQgb2JqZWN0IGlzIGRlc2lnbmVkIGZvciBhIHByb3RvY29sIHdpdGggZmV3ZXIgc3RhdGVzLlxuNS4gIFRoaXMgaXMgYSBjbGVhbiBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS5cbjYuICBUaGUgdXNlIG9mIGBremFsbG9jYCBuZWdhdGVzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucy5cbjcuICBLQVNBTiBpcyB0aGUgY29ycmVjdCB0b29sIHRvIGRldGVjdCB0aGlzIG91dC1vZi1ib3VuZHMgcmVhZC5cblxuVGhlcmVmb3JlLCBJJ2xsIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgd2l0aCB0aGUgcmVhc29uaW5nIEkndmUgbGFpZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzAwLCJPdXRwdXRUb2tlbnMiOjIxMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NjozMS4xMzM1MTgzMjlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGEgdGltZW91dCBvYmplY3Qgb2Ygb25lIHByb3RvY29sIGNvdWxkIGJlIGF0dGFjaGVkIHRvIGEgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSBvZiBhIGRpZmZlcmVudCBwcm90b2NvbC4gVGhpcyBjYW4gb2NjdXIsIGZvciBleGFtcGxlLCB3aGVuIGFuIElDTVAgZXJyb3IgcGFja2V0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIFRDUCBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5LiBUaGUgdGltZW91dCBvYmplY3QncyBkYXRhIGFycmF5IGlzIHNpemVkIGFjY29yZGluZyB0byBpdHMgcHJvdG9jb2wgKGUuZy4sIElDTVAgaGFzIGZld2VyIHN0YXRlcyB0aGFuIFRDUCkuIElmIGEgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgdXNlcyBhbiBJQ01QIHRpbWVvdXQgb2JqZWN0LCBpdCB3aWxsIGFjY2VzcyB0aGUgdGltZW91dCBkYXRhIGFycmF5IHVzaW5nIFRDUCBzdGF0ZSBpbmRpY2VzLCByZXN1bHRpbmcgaW4gYW4gb3V0LW9mLWJvdW5kcyByZWFkLlxcblxcblRoaXMgdnVsbmVyYWJpbGl0eSBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkLiBUaGUgdGltZW91dCBvYmplY3RzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NgLCBlbnN1cmluZyB0aGV5IGFyZSBmdWxseSBpbml0aWFsaXplZCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLQVNBTiBpcyB0aGUgYXBwcm9wcmlhdGUgdG9vbCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYW5kIGl0IHdpbGwgZWZmZWN0aXZlbHkgY2F0Y2ggdGhpcyBidWcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBhIHRpbWVvdXQgb2JqZWN0IG9mIG9uZSBwcm90b2NvbCBjb3VsZCBiZSBhdHRhY2hlZCB0byBhIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgb2YgYSBkaWZmZXJlbnQgcHJvdG9jb2wuIFRoaXMgY2FuIG9jY3VyLCBmb3IgZXhhbXBsZSwgd2hlbiBhbiBJQ01QIGVycm9yIHBhY2tldCBpcyBhc3NvY2lhdGVkIHdpdGggYSBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeS4gVGhlIHRpbWVvdXQgb2JqZWN0J3MgZGF0YSBhcnJheSBpcyBzaXplZCBhY2NvcmRpbmcgdG8gaXRzIHByb3RvY29sIChlLmcuLCBJQ01QIGhhcyBmZXdlciBzdGF0ZXMgdGhhbiBUQ1ApLiBJZiBhIFRDUCBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IHVzZXMgYW4gSUNNUCB0aW1lb3V0IG9iamVjdCwgaXQgd2lsbCBhY2Nlc3MgdGhlIHRpbWVvdXQgZGF0YSBhcnJheSB1c2luZyBUQ1Agc3RhdGUgaW5kaWNlcywgcmVzdWx0aW5nIGluIGFuIG91dC1vZi1ib3VuZHMgcmVhZC5cXG5cXG5UaGlzIHZ1bG5lcmFiaWxpdHkgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhlIHRpbWVvdXQgb2JqZWN0cyBhcmUgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jYCwgZW5zdXJpbmcgdGhleSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBpdCB3aWxsIGVmZmVjdGl2ZWx5IGNhdGNoIHRoaXMgYnVnLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgcjzj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 00:09:14 +0000 UTC FinishedAt: 2026-08-11 00:56:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "315f4bd234b3b8a3ed3a71fd4c53b110cf373720", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFT_CT", "NF_CONNTRACK_TIMEOUT", "NETFILTER_ADVANCED", "NF_TABLES", "NF_CONNTRACK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "315f4bd234b3b8a3ed3a71fd4c53b110cf373720", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFT_CT", "NF_CONNTRACK_TIMEOUT", "NETFILTER_ADVANCED", "NF_TABLES", "NF_CONNTRACK" ], "series_id": "db27af48-cd39-4fa3-a1b0-aea71a40d527" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nft_ct_timeout_obj_eval" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GVF9DVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfVElNRU9VVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9jdF90aW1lb3V0X29ial9ldmFsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYSB0aW1lb3V0IG9iamVjdCBvZiBvbmUgcHJvdG9jb2wgY291bGQgYmUgYXR0YWNoZWQgdG8gYSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IG9mIGEgZGlmZmVyZW50IHByb3RvY29sLiBUaGlzIGNhbiBvY2N1ciwgZm9yIGV4YW1wbGUsIHdoZW4gYW4gSUNNUCBlcnJvciBwYWNrZXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkuIFRoZSB0aW1lb3V0IG9iamVjdCYjMzk7cyBkYXRhIGFycmF5IGlzIHNpemVkIGFjY29yZGluZyB0byBpdHMgcHJvdG9jb2wgKGUuZy4sIElDTVAgaGFzIGZld2VyIHN0YXRlcyB0aGFuIFRDUCkuIElmIGEgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgdXNlcyBhbiBJQ01QIHRpbWVvdXQgb2JqZWN0LCBpdCB3aWxsIGFjY2VzcyB0aGUgdGltZW91dCBkYXRhIGFycmF5IHVzaW5nIFRDUCBzdGF0ZSBpbmRpY2VzLCByZXN1bHRpbmcgaW4gYW4gb3V0LW9mLWJvdW5kcyByZWFkLlxuXG5UaGlzIHZ1bG5lcmFiaWxpdHkgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhlIHRpbWVvdXQgb2JqZWN0cyBhcmUgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jYCwgZW5zdXJpbmcgdGhleSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBpdCB3aWxsIGVmZmVjdGl2ZWx5IGNhdGNoIHRoaXMgYnVnLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBsYXllciA0IHByb3RvY29sIGNoZWNrIHRvIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIFRoaXMgcHJldmVudHMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5JiMzOTtzIHByb3RvY29sIGFuZCB0aGUgY29uZmlndXJlZCB0aW1lb3V0IG9iamVjdCYjMzk7cyBwcm90b2NvbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAobmZ0YWJsZXMpLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGhhbmRsZXMgdmFyaW91cyBwYWNrZXQgYW5kIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3RhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTM3OWRhYjJiMTEzY2I2NjY1YjJjNmM1M2E0YWRhMGMzMGI0NWY0N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDAwOjU0OjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG5pbmRleCAwM2E4OGM3N2UwZjAyLi5kNjE4YmZhOTYwMmZhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xuQEAgLTg4NSw3ICYjNDM7ODg1LDggQEAgc3RhdGljIHZvaWQgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcbiBcdGlmIChwcml2LVx1MDAzZWw0cHJvdG8gIT0gcGt0LVx1MDAzZXRwcm90KVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoIWN0IHx8IG5mX2N0X2lzX3RlbXBsYXRlKGN0KSB8fCBuZl9jdF9pc19jb25maXJtZWQoY3QpKVxuJiM0MztcdGlmICghY3QgfHwgbmZfY3RfaXNfdGVtcGxhdGUoY3QpIHx8IG5mX2N0X2lzX2NvbmZpcm1lZChjdCkgfHxcbiYjNDM7XHQgICAgcHJpdi1cdTAwM2VsNHByb3RvICE9IG5mX2N0X3Byb3RvbnVtKGN0KSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0dGltZW91dCA9IG5mX2N0X3RpbWVvdXRfZmluZChjdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GVF9DVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfVElNRU9VVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9jdF90aW1lb3V0X29ial9ldmFsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBsYXllciA0IHByb3RvY29sIGNoZWNrIHRvIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIFRoaXMgcHJldmVudHMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5JiMzOTtzIHByb3RvY29sIGFuZCB0aGUgY29uZmlndXJlZCB0aW1lb3V0IG9iamVjdCYjMzk7cyBwcm90b2NvbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAobmZ0YWJsZXMpLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGhhbmRsZXMgdmFyaW91cyBwYWNrZXQgYW5kIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3RhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTM3OWRhYjJiMTEzY2I2NjY1YjJjNmM1M2E0YWRhMGMzMGI0NWY0NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDAwOjU0OjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfY3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMKaW5kZXggMDNhODhjNzdlMGYwMi4uZDYxOGJmYTk2MDJmYSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jCkBAIC04ODUsNyAmIzQzOzg4NSw4IEBAIHN0YXRpYyB2b2lkIG5mdF9jdF90aW1lb3V0X29ial9ldmFsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmosCiAJaWYgKHByaXYtJmd0O2w0cHJvdG8gIT0gcGt0LSZndDt0cHJvdCkKIAkJcmV0dXJuOwogCi0JaWYgKCFjdCB8fCBuZl9jdF9pc190ZW1wbGF0ZShjdCkgfHwgbmZfY3RfaXNfY29uZmlybWVkKGN0KSkKJiM0MzsJaWYgKCFjdCB8fCBuZl9jdF9pc190ZW1wbGF0ZShjdCkgfHwgbmZfY3RfaXNfY29uZmlybWVkKGN0KSB8fAomIzQzOwkgICAgcHJpdi0mZ3Q7bDRwcm90byAhPSBuZl9jdF9wcm90b251bShjdCkpCiAJCXJldHVybjsKIAogCXRpbWVvdXQgPSBuZl9jdF90aW1lb3V0X2ZpbmQoY3QpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbmZ0X2N0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L25ldGZpbHRlci9uZnRfY3QuY2AuIFNlZW1zIGxpa2UgdGhlIGNydXggb2YgdGhlIGNoYW5nZSBpcyBpbiB0aGUgYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNoZWNrIGlzIHRyeWluZyB0byBhY2hpZXZlLgoKSXQgYXBwZWFycyBhIG5ldyBjb25kaXRpb24sIGBwcml2LSZndDtsNHByb3RvICE9IG5mX2N0X3Byb3RvbnVtKGN0KWAsIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBleGlzdGluZyBgaWZgIHN0YXRlbWVudDogYGlmICghY3QgfHwgbmZfY3RfaXNfdGVtcGxhdGUoY3QpIHx8IG5mX2N0X2lzX2NvbmZpcm1lZChjdCkpYC4gVGhpcyBpcyBpbnRlcmVzdGluZy4gTGV0IG1lIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGVzZSBleGlzdGluZyBjb25kaXRpb25zIGhhbmRsZS4gUmlnaHQsIHdlJiMzOTtyZSBza2lwcGluZyBldmFsdWF0aW9uIGlmIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IChgY3RgKSBpcyBOVUxMLCBhIHRlbXBsYXRlLCBvciBjb25maXJtZWQuIEFkZGluZyBhIGNoZWNrIGZvciB0aGUgTDQgcHJvdG9jb2wgdG8gdGhpcyBzZWVtcy4uLiBwb3RlbnRpYWxseSBzaWduaWZpY2FudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgcHJpdi0mZ3Q7bDRwcm90b2AgYW5kIGBuZl9jdF9wcm90b251bShjdClgIHJlcHJlc2VudCBpbiB0aGlzIGNvbnRleHQuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBzY2VuYXJpbyBkb2VzIHRoaXMgY29uZGl0aW9uIGFkZHJlc3M/IFdoeSBhcmUgd2UgZXhwbGljaXRseSBjb21wYXJpbmcgdGhlIEw0IHByb3RvY29sIGZyb20gc29tZSAmIzM0O3ByaXYmIzM0OyBzdHJ1Y3R1cmUgd2l0aCB0aGUgcHJvdG9jb2wgZXh0cmFjdGVkIGZyb20gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnk/IERvZXMgdGhpcyByZWxhdGUgdG8gcHJvdG9jb2wtc3BlY2lmaWMgdGltZW91dCBiZWhhdmlvcj8gQXJlIHdlIHByZXZlbnRpbmcgYSBjb25mbGljdCBvciBhIG1pc2ludGVycHJldGF0aW9uIG9mIEw0IHByb3RvY29sPyBMb29rcyBsaWtlIEkgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBwcml2YCBhbmQgYGN0YCBtb3JlIHRob3JvdWdobHkuIFRoaXMgY29uZGl0aW9uYWwgZmVlbHMgbGlrZSBpdCYjMzk7cyBndWFyZGluZyBhZ2FpbnN0IHNvbWUgZWRnZSBjYXNlLCBvciBwZXJoYXBzIGl0IHByb3ZpZGVzIG9wdGltaXphdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9ODcxPXN0cnVjdCBuZnRfY3RfdGltZW91dF9vYmoge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtODc1LVxubmV0L25ldGZpbHRlci9uZnRfY3QuYzo4NzY6c3RhdGljIHZvaWQgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtODc3LVx0XHRcdFx0ICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTEwMDk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfb2JqZWN0X29wcyBuZnRfY3RfdGltZW91dF9vYmpfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTAxMS1cdC5zaXplXHRcdD0gc2l6ZW9mKHN0cnVjdCBuZnRfY3RfdGltZW91dF9vYmopLFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMDEyOlx0LmV2YWxcdFx0PSBuZnRfY3RfdGltZW91dF9vYmpfZXZhbCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTAxMy1cdC5pbml0XHRcdD0gbmZ0X2N0X3RpbWVvdXRfb2JqX2luaXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpBbHJpZ2h0LCBzbyB0aGUgZnVuY3Rpb24gYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCBpcyB0aGUgZXZhbHVhdGlvbiBmdW5jdGlvbiBmb3IgdGhhdCBgbmZ0X2N0X3RpbWVvdXRfb2JqX29wc2Agb2JqZWN0IHdpdGhpbiBuZnRhYmxlcy4gTXkgZmlyc3QgdGhvdWdodCBpczogJiMzNDtZdXAsIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBhbmQgdGhhdCBtZWFucyBpdCYjMzk7cyBwcmltZSByZWFsIGVzdGF0ZSBmb3IgZnV6emluZyYjMzQ7LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb3JlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnVuY3Rpb25hbGl0eSBoZXJlLCBzbyBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBjb3VsZCBoYXZlIHByZXR0eSBzaWduaWZpY2FudCBjb25zZXF1ZW5jZXMuIE5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIGxvY2F0ZSB0aGUgYXNzb2NpYXRlZCBjb25maWcgb3B0aW9uIGluIGBuZnRfY3QuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIHRoaW5nLCBob3cgaXQmIzM5O3MgaG9va2VkIGludG8gdGhlIGJ1aWxkIHByb2Nlc3MuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGJlIGNydWNpYWwgZm9yIGNvbnRyb2xsaW5nIHRoZSB0YXJnZXQgZHVyaW5nIGZ1enppbmcsIGFuZCBJIGtub3cgSSBjYW4gZmluZCB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgdGhlcmUuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfY3QubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTExPW9iai0kKENPTkZJR19ORlRfTlVNR0VOKVx0JiM0Mzs9IG5mdF9udW1nZW4ub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMTI6b2JqLSQoQ09ORklHX05GVF9DVClcdFx0JiM0Mzs9IG5mdF9jdC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTExMy1vYmotJChDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRClcdCYjNDM7PSBuZnRfZmxvd19vZmZsb2FkLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQ1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEZXBlbmRlbmNpZXMgYW5kIHRoZSBgTkZUX0NUYCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIGBORlRfQ1RgLCB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBGaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIHRob3JvdWdobHkuIEl0JiMzOTtzIG5vdCBqdXN0IGFib3V0IHRoaXMgb25lIHNldHRpbmcgaW4gaXNvbGF0aW9uOyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgZWNvc3lzdGVtLiBBcmUgdGhlcmUgYW55IG90aGVyIHBhY2thZ2VzIG9yIG1vZHVsZXMgdGhhdCByZWx5IG9uIGBORlRfQ1RgIGJlaW5nIHNldCBpbiBhIHBhcnRpY3VsYXIgd2F5PyBBcmUgdGhlcmUgYW55IGRvd25zdHJlYW0gaW1wbGljYXRpb25zIGlmIGl0JiMzOTtzIGRpc2FibGVkIG9yIGNvbmZpZ3VyZWQgZGlmZmVyZW50bHk/IEkgbmVlZCBhIGNvbXBsZXRlIHBpY3R1cmUgdG8gYXZvaWQgYW55IHVuZXhwZWN0ZWQgaXNzdWVzIG9yIGNvbmZsaWN0cyBmdXJ0aGVyIGRvd24gdGhlIGxpbmUuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRvY3VtZW50YXRpb24sIHNlYXJjaCB0aGUgY29kZWJhc2UsIGFuZCBtYXliZSBldmVuIGNvbnN1bHQgd2l0aCBvdGhlcnMgdG8gY29uZmlybSB0aGUgZnVsbCBzZXQgb2YgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBhYm91dCBlbnN1cmluZyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgYmVmb3JlIHByb2NlZWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GVF9DVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz00ODU9Y29uZmlnIE5GVF9OVU1HRU5cbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDkwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ5MTpjb25maWcgTkZUX0NUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDkyLVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQ1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW5pdGlhbCBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIGJhc2VkIG9uIHdoYXQgSSYjMzk7bSB3b3JraW5nIHdpdGgsIHRoZSBjb3JlIHJlcXVpcmVtZW50cyBsb29rIGxpa2UgdGhleSYjMzk7cmUgZ29pbmcgdG8gaW52b2x2ZSBgTkZUX0NUYCBhbmQgYE5GX0NPTk5UUkFDS2Ag4oCTIHRob3NlIGFyZSBwcmV0dHkgZnVuZGFtZW50YWwgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcsIHdoaWNoIEkgbmVlZC4gSSYjMzk7bSBhbHNvIHRoaW5raW5nIHRoYXQgYE5GX1RBQkxFU2Agd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGluIHRoZSBtaXgsIGdpdmVuIHRoZSBkaXJlY3Rpb24gd2UmIzM5O3JlIG1vdmluZyBpbiB3aXRoIE5ldGZpbHRlci4gSXTigJlzIHRoZSBsaWtlbHkgYmFzZSBkZXBlbmRlbmN5LiBUbyBiZSBzdXJlIGFib3V0IHRoZSBgTkZUX0NUYCBkZXBlbmRlbmN5LCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBhbmQgdmVyaWZ5IGl0cyBpbXBsaWNhdGlvbnMuIFRoYXQmIzM5O2xsIGdpdmUgYSBtb3JlIHByZWNpc2UgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBhbmQgYW55IG90aGVyIGtleSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0ODA6XHRjb25maWcgTkZfVEFCTEVTX05FVERFVlxuIDQ4MTpcdFx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFwmIzM0O1xuIDQ4MjpcdFx0aGVscFxuIDQ4MzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBcJiMzNDtuZXRkZXZcJiMzNDsgdGFibGUuXG4gNDg0Olx0XG4gNDg1Olx0Y29uZmlnIE5GVF9OVU1HRU5cbiA0ODY6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbnVtYmVyIGdlbmVyYXRvciBtb2R1bGVcJiMzNDtcbiA0ODc6XHRcdGhlbHBcbiA0ODg6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgbnVtYmVyIGdlbmVyYXRvciBleHByZXNzaW9uIHVzZWQgdG8gcGVyZm9ybVxuIDQ4OTpcdFx0ICBpbmNyZW1lbnRhbCBjb3VudGluZyBhbmQgcmFuZG9tIG51bWJlcnMgYm91bmQgdG8gYSB1cHBlciBsaW1pdC5cbiA0OTA6XHRcbiA0OTE6XHRjb25maWcgTkZUX0NUXG4gNDkyOlx0XHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xuIDQ5MzpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBjb25udHJhY2sgbW9kdWxlXCYjMzQ7XG4gNDk0Olx0XHRoZWxwXG4gNDk1Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIFwmIzM0O2N0XCYjMzQ7IGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0byBtYXRjaFxuIDQ5NjpcdFx0ICBjb25uZWN0aW9uIHRyYWNraW5nIGluZm9ybWF0aW9uIHN1Y2ggYXMgdGhlIGZsb3cgc3RhdGUuXG4gNDk3Olx0XG4gNDk4Olx0Y29uZmlnIE5GVF9FWFRIRFJfRENDUFxuIDQ5OTpcdFx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIGV4dGhkciBEQ0NQIHN1cHBvcnQgKERFUFJFQ0FURUQpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMDIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIEZ1bmN0aW9uIGZvciBBUEkgU3VpdGFiaWxpdHkqKgoKT2theSwgc28gdGhlIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgZnVuY3Rpb24gaXMgdGhlIG9uZSB3ZSYjMzk7cmUgZm9jdXNpbmcgb24uIEZpcnN0LCBsZXQmIzM5O3Mgc2VlIGlmIGl0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgLiBZdXAsIGl0IGlzLiBUaGF0JiMzOTtzIGEgcG9pbnQgdG8gY29uc2lkZXIuIEJ1dCBoYW5nIG9uLCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgLmV2YWxgIHdpdGhpbiBgbmZ0X2N0X3RpbWVvdXRfb2JqX29wc2AuIEFuZCB0aGUgcHJvbXB0IGlzIHRlbGxpbmcgbWUgdG8gZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludHMuCgpUaGUgdGhpbmcgaXMsIHNpbmNlIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIOKAkyBgLmV2YWwgPSBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAg4oCTIGl0ICpjYW4mIzM5O3QqIGJlIGlubGluZWQuIFRoYXQgbWVhbnMgaXQgKndpbGwqIGhhdmUgYSB1bmlxdWUgc3ltYm9sIGFkZHJlc3MsIHdoaWNoIGlzIGdvb2QuIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsLiBXZSBjb3VsZCBjb25zaWRlciBpbmNsdWRpbmcgYG5mdF9jdF90aW1lb3V0X29ial9pbml0YCBvciBqdXN0IHN0aWNrIHdpdGggdGhlIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAuCgpHaXZlbiB0aGF0IGl0JiMzOTtzIG5vdCBpbmxpbmVkLCBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGlzIHBlcmZlY3RseSBmaW5lIHRvIGluY2x1ZGUuIFRoZSBuZXh0IHRoaW5nIEkgd2FudCB0byBjaGVjayBpcyBpZiBgTkZfQ09OTlRSQUNLX1RJTUVPVVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHJlcXVpcmVkIGZvciB0aGlzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfY3RfdGltZW91dF9vYmpfZXZhbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfY3QuYz04NzE9c3RydWN0IG5mdF9jdF90aW1lb3V0X29iaiB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy04NzUtXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjg3NjpzdGF0aWMgdm9pZCBuZnRfY3RfdGltZW91dF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy04NzctXHRcdFx0XHQgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTAwOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9vYmplY3Rfb3BzIG5mdF9jdF90aW1lb3V0X29ial9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMDExLVx0LnNpemVcdFx0PSBzaXplb2Yoc3RydWN0IG5mdF9jdF90aW1lb3V0X29iaiksXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEwMTI6XHQuZXZhbFx0XHQ9IG5mdF9jdF90aW1lb3V0X29ial9ldmFsLFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMDEzLVx0LmluaXRcdFx0PSBuZnRfY3RfdGltZW91dF9vYmpfaW5pdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgxMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L25ldGZpbHRlci9uZnRfY3QuY2AsIHByZXNlbnRlZCBhcyBhIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWwqKgoKT2theSwgdGltZSB0byBkaXNzZWN0IGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgd2l0aGluIHRoZSBOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aW1lb3V0cyBhcmUgaGFuZGxlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbmV3IGZpcmV3YWxsIGZyYW1ld29yay4gU28sIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yICpldmFsdWF0aW5nKiB0aGUgdGltZW91dCBvYmplY3QsIHdoaWNoIG1lYW5zIGl0IGxpa2VseSBkZXRlcm1pbmVzIHRoZSByZWxldmFudCB0aW1lb3V0IGR1cmF0aW9uIGJhc2VkIG9uIHNvbWUgY3JpdGVyaWEuIEkgZXhwZWN0IHRvIHNlZSBhbiBleGFtaW5hdGlvbiBvZiBjb25uZWN0aW9uIHN0YXRlLCBtYXliZSBydWxlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCBvciBldmVuIHNvbWUgZm9ybSBvZiBkeW5hbWljIGFkanVzdG1lbnQuIEl0JiMzOTtzIHRoZSBjb3JlIGxvZ2ljIHRoYXQgZmlndXJlcyBvdXQgKndoZW4qIGEgY29ubmVjdGlvbiBzaG91bGQgYmUgY29uc2lkZXJlZCBpbmFjdGl2ZSBhbmQgcG90ZW50aWFsbHkgY2xlYW5lZCB1cC4gVGhpcyBpcyBhIGNyaXRpY2FsIHBpZWNlIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSBpbiBhIGNvbXBsZXggbmV0d29yayBzZXR1cC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGNvbm5lY3Rpb24gdHJhY2tpbmcgdGFibGUgYW5kIGhvdyBpdCBpbmZsdWVuY2VzIHRoZSBjb25uZWN0aW9uJiMzOTtzIHN0YXRlIHRyYW5zaXRpb25zLiBUaGlzIHNob3VsZCBiZSBhbiBpbnRlcmVzdGluZyBjaHVuayBvZiBjb2RlIHRvIGV4cGxvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfY3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODYwOlx0XHRcdFx0XHRcdCAgTlVMTCk7XG4gODYxOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDg2MjpcdFx0XHRnb3RvIGVycjtcbiA4NjM6XHRcbiA4NjQ6XHRcdHJldCA9IGw0cHJvdG8tXHUwMDNlY3RubF90aW1lb3V0Lm5sYXR0cl90b19vYmoodGIsIG5ldCwgdGltZW91dHMpO1xuIDg2NTpcdFxuIDg2NjpcdGVycjpcbiA4Njc6XHRcdGtmcmVlKHRiKTtcbiA4Njg6XHRcdHJldHVybiByZXQ7XG4gODY5Olx0fVxuIDg3MDpcdFxuIDg3MTpcdHN0cnVjdCBuZnRfY3RfdGltZW91dF9vYmoge1xuIDg3MjpcdFx0c3RydWN0IG5mX2N0X3RpbWVvdXQgICAgKnRpbWVvdXQ7XG4gODczOlx0XHR1OFx0XHRcdGw0cHJvdG87XG4gODc0Olx0fTtcbiA4NzU6XHRcbiA4NzY6XHRzdGF0aWMgdm9pZCBuZnRfY3RfdGltZW91dF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxuIDg3NzpcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbiA4Nzg6XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbiA4Nzk6XHR7XG4gODgwOlx0XHRjb25zdCBzdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XG4gODgxOlx0XHRzdHJ1Y3QgbmZfY29ubiAqY3QgPSAoc3RydWN0IG5mX2Nvbm4gKilza2JfbmZjdChwa3QtXHUwMDNlc2tiKTtcbiA4ODI6XHRcdHN0cnVjdCBuZl9jb25uX3RpbWVvdXQgKnRpbWVvdXQ7XG4gODgzOlx0XHRjb25zdCB1bnNpZ25lZCBpbnQgKnZhbHVlcztcbiA4ODQ6XHRcbiA4ODU6XHRcdGlmIChwcml2LVx1MDAzZWw0cHJvdG8gIT0gcGt0LVx1MDAzZXRwcm90KVxuIDg4NjpcdFx0XHRyZXR1cm47XG4gODg3Olx0XG4gODg4Olx0XHRpZiAoIWN0IHx8IG5mX2N0X2lzX3RlbXBsYXRlKGN0KSB8fCBuZl9jdF9pc19jb25maXJtZWQoY3QpIHx8XG4gODg5Olx0XHQgICAgcHJpdi1cdTAwM2VsNHByb3RvICE9IG5mX2N0X3Byb3RvbnVtKGN0KSlcbiA4OTA6XHRcdFx0cmV0dXJuO1xuIDg5MTpcdFxuIDg5MjpcdFx0dGltZW91dCA9IG5mX2N0X3RpbWVvdXRfZmluZChjdCk7XG4gODkzOlx0XHRpZiAoIXRpbWVvdXQpIHtcbiA4OTQ6XHRcdFx0dGltZW91dCA9IG5mX2N0X3RpbWVvdXRfZXh0X2FkZChjdCwgcHJpdi1cdTAwM2V0aW1lb3V0LCBHRlBfQVRPTUlDKTtcbiA4OTU6XHRcdFx0aWYgKCF0aW1lb3V0KSB7XG4gODk2Olx0XHRcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xuIDg5NzpcdFx0XHRcdHJldHVybjtcbiA4OTg6XHRcdFx0fVxuIDg5OTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Njg4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkNvbmRpdGlvbmFsIENvbXBpbGF0aW9uIENvbnVuZHJ1bXM6IG5mdF9jdF90aW1lb3V0X29ial9ldmFsKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgYW5kIGEgcXVlc3Rpb24ga2VlcHMgcG9raW5nIGF0IHRoZSBiYWNrIG9mIG15IG1pbmQ6IGlzIHRoZSBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGZ1bmN0aW9uIGJlaW5nIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHk/IEl0IGZlZWxzIGxpa2UgaXQgKnNob3VsZG4mIzM5O3QqIGJlLCBnaXZlbiBpdHMgbGlrZWx5IGNvcmUgcm9sZSBpbiBjb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXRzLCBidXQgSSYjMzk7dmUgbGVhcm5lZCB0byBuZXZlciBhc3N1bWUgYW55dGhpbmcsIGVzcGVjaWFsbHkgd2l0aCB0aGUgY29tcGxleGl0aWVzIG9mIHRoZXNlIG5ldHdvcmtpbmcgc3RhY2tzLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIGZ1bmRhbWVudGFsLCBzbyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHdvdWxkIGludHJvZHVjZSB1bm5lY2Vzc2FyeSBjb21wbGV4aXR5LiBUaGUgcG9zc2liaWxpdGllcyBpbiBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhcmUgdmFzdCwgZnJvbSBzaW1wbGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9wdGltaXphdGlvbnMgdG8gbXVjaCBtb3JlIGludm9sdmVkIGZlYXR1cmUgZmxhZ3MuIFVuZGVyc3RhbmRpbmcgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyBrZXkgdG8gdHJ1bHkgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBjb2RlIHdvcmtzIGluIGFueSBnaXZlbiBzY2VuYXJpbywgc28gaXQgaXMgc29tZXRoaW5nIEkgbXVzdCBkZXRlcm1pbmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IHRoaXMgaXMgYmVpbmcgaGFuZGxlZCwgc28gdGhhdCBJIGRvbiYjMzk7dCBvdmVybG9vayBzb21lIG51YW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX05GX0NPTk5UUkFDS19USU1FT1VUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfY3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTgzNj1zdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X25vdHJhY2tfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtODQxLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYzo4NDI6I2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfVElNRU9VVFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy04NDMtc3RhdGljIGludFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTAxOD1zdGF0aWMgc3RydWN0IG5mdF9vYmplY3RfdHlwZSBuZnRfY3RfdGltZW91dF9vYmpfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTAyNC19O1xubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMDI1OiNlbmRpZiAvKiBDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVQgKi9cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTAyNi1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTEzNzk9c3RhdGljIGludCBfX2luaXQgbmZ0X2N0X21vZHVsZV9pbml0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMzk5LVx0XHRnb3RvIGVycjM7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjE0MDA6I2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfVElNRU9VVFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDAxLVx0ZXJyID0gbmZ0X3JlZ2lzdGVyX29iaihcdTAwMjZuZnRfY3RfdGltZW91dF9vYmpfdHlwZSk7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDA2LVxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxNDA3OiNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVRcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQwOC1lcnI0OlxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTQyMD1zdGF0aWMgdm9pZCBfX2V4aXQgbmZ0X2N0X21vZHVsZV9leGl0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MjEte1xubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxNDIyOiNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVRcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQyMy1cdG5mdF91bnJlZ2lzdGVyX29iaihcdTAwMjZuZnRfY3RfdGltZW91dF9vYmpfdHlwZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NjMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgQ29ublRyYWNrIFRpbWVvdXQgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4gTXkgaW5pdGlhbCBodW5jaCB3YXMgcmlnaHQ7IHRoZSB0aW1lb3V0IGNvbmZpZ3VyYXRpb24gbXVzdCBiZSB1bmRlciBgQ09ORklHX05GX0NPTk5UUkFDS19USU1FT1VUYC4gTm93LCB0byBjb25maXJtIHRoZSBzcGVjaWZpYyBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMsIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBLY29uZmlnIGZvciB0aGF0LiBMZXQmIzM5O3MgcHVsbCB1cCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBhbmQgc2VlIHdoYXQgYE5GX0NPTk5UUkFDS19USU1FT1VUYCByZXZlYWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIG1vZHVsZXMsIGFueSBwb3RlbnRpYWwgZGVmYXVsdHMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG92ZXJhbGwgY29ubmVjdGlvbiB0cmFja2luZyBmdW5jdGlvbmFsaXR5LiBUaGlzIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBjcml0aWNhbCBmb3IgZmluZS10dW5pbmcgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9DT05OVFJBQ0tfVElNRU9VVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xNTc9Y29uZmlnIE5GX0NPTk5UUkFDS19FVkVOVFNcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjgtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCYjMzk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvbnNpZGVyYXRpb25zLgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgTmV0d29yayBGZWF0dXJlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUgaGVyZSwgd2UgYXJlIGxvb2tpbmcgYXQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHRoZSBmaXJzdCB0aGluZ3MgdGhhdCBqdW1wIG91dCBhcmUgdGhlIHJlcXVpcmVtZW50cyBmb3IgYE5GVF9DVGAgYW5kIGBORl9DT05OVFJBQ0tfVElNRU9VVGAuIEltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRob3NlICpkZXBlbmRlbmNpZXMqIG9mIHRoZXNlIG9wdGlvbnMuIFdlIGFsc28gaGF2ZSBgTkZfVEFCTEVTYCBhbmQgYE5GX0NPTk5UUkFDS2AgZmxhZ2dlZCBhcyBkZXBlbmRlbmNpZXMuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBvbiB0aG9zZSBgTkZfQ09OTlRSQUNLX1RJTUVPVVRgIGRlcGVuZGVuY2llcywgYXMgSSBuZWVkIHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCB3aGF0IGVuYWJsZXMgYW5kIHdoYXQgZGVwZW5kcyB1cG9uIGl0LiBXZSBtdXN0IGVuc3VyZSBldmVyeXRoaW5nIGlzIGNvcnJlY3QgYXMgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGNhbiBpbmZsdWVuY2UgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBgTiYjMzk7LlxuIDE2NjpcdFxuIDE2NzpcdGNvbmZpZyBORl9DT05OVFJBQ0tfVElNRU9VVFxuIDE2ODpcdFx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQmIzM5O1xuIDE2OTpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAxNzA6XHRcdGhlbHBcbiAxNzE6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBjb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXRcbiAxNzI6XHRcdCAgZXh0ZW5zaW9uLiBUaGlzIGFsbG93cyB5b3UgdG8gYXR0YWNoIHRpbWVvdXQgcG9saWNpZXMgdG8gZmxvd1xuIDE3MzpcdFx0ICB2aWEgdGhlIENUIHRhcmdldC5cbiAxNzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEzNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBzZWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGBORVRGSUxURVJfQURWQU5DRURgIGRlcGVuZGVuY3kgaGVyZS4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGxpc3QgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGludm9sdmVkOiBgTkZUX0NUYCwgYE5GX0NPTk5UUkFDS19USU1FT1VUYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9UQUJMRVNgLCBhbmQgYE5GX0NPTk5UUkFDS2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlcnJlbGF0ZSB0byBmdWxseSBncmFzcCB0aGUgY2hhbmdlLgoKTXkgYXR0ZW50aW9uIGlzIHNwZWNpZmljYWxseSBkcmF3biB0byB0aGUgYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCBmdW5jdGlvbi4gSSYjMzk7bSBhc3N1bWluZyB0aGlzIGlzIHRoZSBrZXkgc3ltYm9sIGluIHRoZSBwYXRjaC4gVGhlIGZpcnN0IHF1ZXN0aW9uIEkgaGF2ZSBpcywgaXMgdGhpcyBmdW5jdGlvbiAqYWN0dWFsbHkqIHJlYWNoYWJsZT8gWWVzLCBpdCYjMzk7cyBhbiBuZnRhYmxlcyBvYmplY3QgZXZhbHVhdGlvbiBmdW5jdGlvbi4gVGhhdCB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgY3JpdGljYWwsIGFzIGl0IGlzIGNhbGxlZCB3aGVuIGEgcGFja2V0IGhpdHMgYSBydWxlIHRoYXQgcmVmZXJlbmNlcyB0aGlzIHRpbWVvdXQgb2JqZWN0LCB3aGljaCBpcyBwcmVjaXNlbHkgdGhlIGJlaGF2aW9yIEkmIzM5O2QgZXhwZWN0LiBUaGUgcGF0Y2ggaXMgaW50ZW5kZWQgdG8gZml4IGEgYnVnIHdoZXJlIGBwcml2LSZndDtsNHByb3RvICE9IG5mX2N0X3Byb3RvbnVtKGN0KWAgd2FzIG1pc3NpbmcuIFRoaXMgaXMgYSBjbGVhciwgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gaG93IHRpbWVvdXRzIGFyZSBoYW5kbGVkIGluIHRoZSBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBjb2RlLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hhdCBJIGRvLiBJdCBzZWVtcyBsaWtlIHRoZSBwcmltYXJ5IGRlcGVuZGVuY3kgaXMgYE5GVF9DVGAgd2hpY2ggbmVlZHMgYE5GX0NPTk5UUkFDS2AgYW5kIGBORl9UQUJMRVNgLCB3aGljaCBJIGFzc3VtZSBhcmUgaW1wbGllZCBzaW5jZSBpdCBpcyBpbiBhbiBgaWYgTkZfVEFCTEVTYCBibG9jay4gSSBuZWVkIHRvIGtlZXAgdGhpcyByZWxhdGlvbnNoaXAgaW4gbWluZCBhcyBJIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmIE5GX1RBQkxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDU1PWNvbmZpZyBORl9UQUJMRVNcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDcwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3MTppZiBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzItY29uZmlnIE5GX1RBQkxFU19JTkVUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTYyNT1jb25maWcgTkZUX1NPQ0tFVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjctXHRzZWxlY3QgTkZfU09DS0VUX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2Mjg6XHRzZWxlY3QgTkZfU09DS0VUX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjktXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTY0MD1jb25maWcgTkZUX1RQUk9YWVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDItXHRzZWxlY3QgTkZfREVGUkFHX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDM6XHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDQtXHRzZWxlY3QgTkZfVFBST1hZX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDU6XHRzZWxlY3QgTkZfVFBST1hZX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDYtXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTY0OT1jb25maWcgTkZUX1NZTlBST1hZXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTY1OS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NjA6aWYgTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTY2MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA3MQoJCQkJCQkJb3V0cHV0OiAxNTgKCQkJCQkJCXRob3VnaHRzOiA0MDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhc29uaW5nIGZvciBGdXp6aW5nIFJlY29tbWVuZGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBORlRfQ1RgICppcyogaW5kZWVkIG5lc3RlZCB3aXRoaW4gYGlmIE5GX1RBQkxFU2AsIHdoaWNoIG1lYW5zIHdlIGRlZmluaXRlbHkgbmVlZCBgTkZfVEFCTEVTYCBjb25maWd1cmVkLiBJJiMzOTt2ZSBnb3QgbXkgbGlzdCBvZiByZWxldmFudCBjb25maWdzOiBgTkZUX0NUYCwgYE5GX0NPTk5UUkFDS19USU1FT1VUYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9UQUJMRVNgLCBhbmQgYE5GX0NPTk5UUkFDS2AuIFRoZSBwcmltYXJ5IGZvY3VzLCBob3dldmVyLCBpcyBvbiBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgLgoKTGV0IG1lIHRoaW5rLi4uIGlzIHRoaXMgdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCYjMzk7cyBjaGFuZ2VkPyBZZXMsIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgaXMgdGhlIG9ubHkgb25lIG1vZGlmaWVkLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gTm93LCBpcyBpdCAqc3RhdGljKj8gT2theSwgeWVzLCBpdCBpcy4gQnV0LCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgd2hpY2ggbWVhbnMgaXQgd29uJiMzOTt0IGdldCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gU28sIHdoaWxlIGl0JiMzOTtzIHN0YXRpYyBpbiB0aGUgc291cmNlLCBpdCYjMzk7bGwgc3RpbGwgaGF2ZSBpdHMgb3duIGRpc3RpbmN0IHN5bWJvbC4gSSBkb24mIzM5O3QgbmVlZCB0byBjb25zaWRlciBhbnkgc3Vycm91bmRpbmcgZnVuY3Rpb25zIGxpa2UgYG5mdF9jdF90aW1lb3V0X29ial9pbml0YCBvciBgbmZ0X2N0X2V2YWxgOyBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGlzIHRoZSBrZXkuIFRoZSBjb21waWxlciB3b24mIzM5O3Qgb3B0aW1pemUgaXQgYXdheS4KClJpZ2h0LCBsZXQgbWUgc29saWRpZnkgbXkgcmVhc29uaW5nLiBUaGUgcGF0Y2ggaXMgYWRkaW5nIGEgY2hlY2sgd2l0aGluIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNgOiBzcGVjaWZpY2FsbHksIGBwcml2LSZndDtsNHByb3RvICE9IG5mX2N0X3Byb3RvbnVtKGN0KWAuIFRoaXMgcHJldmVudHMgYSBzaXR1YXRpb24gd2hlcmUgdGhlIGxheWVyIDQgcHJvdG9jb2wgb2YgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgZG9lc24mIzM5O3QgbWF0Y2ggdGhlIG9uZSBjb25maWd1cmVkIGluIHRoZSB0aW1lb3V0IG9iamVjdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbSwgYW5kIGNyaXRpY2FsbHksIGl0JiMzOTtzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBuZnRhYmxlcyBydWxlcy4gVGhlcmVmb3JlLCBmdXp6aW5nIGlzICpoaWdobHkqIHJlY29tbWVuZGVkIGhlcmUuIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBuZXcgY2hlY2sgY29ycmVjdGx5IGhhbmRsZXMgYSB3aWRlIHJhbmdlIG9mIHBhY2tldCBhbmQgY29ubmVjdGlvbiB0cmFja2luZyBzdGF0ZXMuIFdlIHdhbnQgdG8gaWRlbnRpZnkgYW55IGVkZ2UgY2FzZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvdXJzIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZUX0NUJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19USU1FT1VUJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGxheWVyIDQgcHJvdG9jb2wgY2hlY2sgdG8gYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCBpbiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbS4gVGhpcyBwcmV2ZW50cyBhIG1pc21hdGNoIGJldHdlZW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkmIzM5O3MgcHJvdG9jb2wgYW5kIHRoZSBjb25maWd1cmVkIHRpbWVvdXQgb2JqZWN0JiMzOTtzIHByb3RvY29sLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChuZnRhYmxlcyksIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaGFuZGxlcyB2YXJpb3VzIHBhY2tldCBhbmQgY29ubmVjdGlvbiB0cmFja2luZyBzdGF0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GVF9DVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfVElNRU9VVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9jdF90aW1lb3V0X29ial9ldmFsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBsYXllciA0IHByb3RvY29sIGNoZWNrIHRvIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIFRoaXMgcHJldmVudHMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5JiMzOTtzIHByb3RvY29sIGFuZCB0aGUgY29uZmlndXJlZCB0aW1lb3V0IG9iamVjdCYjMzk7cyBwcm90b2NvbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAobmZ0YWJsZXMpLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGhhbmRsZXMgdmFyaW91cyBwYWNrZXQgYW5kIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3RhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGEgdGltZW91dCBvYmplY3Qgb2Ygb25lIHByb3RvY29sIGNvdWxkIGJlIGF0dGFjaGVkIHRvIGEgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSBvZiBhIGRpZmZlcmVudCBwcm90b2NvbC4gVGhpcyBjYW4gb2NjdXIsIGZvciBleGFtcGxlLCB3aGVuIGFuIElDTVAgZXJyb3IgcGFja2V0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIFRDUCBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5LiBUaGUgdGltZW91dCBvYmplY3QmIzM5O3MgZGF0YSBhcnJheSBpcyBzaXplZCBhY2NvcmRpbmcgdG8gaXRzIHByb3RvY29sIChlLmcuLCBJQ01QIGhhcyBmZXdlciBzdGF0ZXMgdGhhbiBUQ1ApLiBJZiBhIFRDUCBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IHVzZXMgYW4gSUNNUCB0aW1lb3V0IG9iamVjdCwgaXQgd2lsbCBhY2Nlc3MgdGhlIHRpbWVvdXQgZGF0YSBhcnJheSB1c2luZyBUQ1Agc3RhdGUgaW5kaWNlcywgcmVzdWx0aW5nIGluIGFuIG91dC1vZi1ib3VuZHMgcmVhZC5cblxuVGhpcyB2dWxuZXJhYmlsaXR5IGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQuIFRoZSB0aW1lb3V0IG9iamVjdHMgYXJlIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY2AsIGVuc3VyaW5nIHRoZXkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtBU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgaXQgd2lsbCBlZmZlY3RpdmVseSBjYXRjaCB0aGlzIGJ1Zy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5Mzc5ZGFiMmIxMTNjYjY2NjViMmM2YzUzYTRhZGEwYzMwYjQ1ZjQ3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMDA6NTQ6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jIGIvbmV0L25ldGZpbHRlci9uZnRfY3QuYwppbmRleCAwM2E4OGM3N2UwZjAyLi5kNjE4YmZhOTYwMmZhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMKQEAgLTg4NSw3ICYjNDM7ODg1LDggQEAgc3RhdGljIHZvaWQgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaiwKIAlpZiAocHJpdi0mZ3Q7bDRwcm90byAhPSBwa3QtJmd0O3Rwcm90KQogCQlyZXR1cm47CiAKLQlpZiAoIWN0IHx8IG5mX2N0X2lzX3RlbXBsYXRlKGN0KSB8fCBuZl9jdF9pc19jb25maXJtZWQoY3QpKQomIzQzOwlpZiAoIWN0IHx8IG5mX2N0X2lzX3RlbXBsYXRlKGN0KSB8fCBuZl9jdF9pc19jb25maXJtZWQoY3QpIHx8CiYjNDM7CSAgICBwcml2LSZndDtsNHByb3RvICE9IG5mX2N0X3Byb3RvbnVtKGN0KSkKIAkJcmV0dXJuOwogCiAJdGltZW91dCA9IG5mX2N0X3RpbWVvdXRfZmluZChjdCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDIyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldGZpbHRlciBQYXRjaCBmb3IgQ29ubmVjdGlvbiBUcmFja2luZyBUaW1lb3V0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNgLiBJdCYjMzk7cyB0b3VjaGluZyBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gUmlnaHQgYXdheSwgSSBzZWUgdGhlIGNvcmUgY2hhbmdlIGlzIGFkZGluZyBhIGNoZWNrOiBgcHJpdi0mZ3Q7bDRwcm90byAhPSBuZl9jdF9wcm90b251bShjdClgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBtdXN0IGJlIGEgYnVnIGZpeC4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHByb3RvY29sIG1pc21hdGNoIGJldHdlZW4gd2hhdCB0aGUgdGltZW91dCBvYmplY3QgKnRoaW5rcyogaXQgc2hvdWxkIGhhbmRsZSwgYW5kIHdoYXQgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgaXMgYWN0dWFsbHkgaGFuZGxpbmcuCgpMZXQmIzM5O3MgZXhhbWluZSB0aGUgY29kZSBzbmlwcGV0LiBUaGUgcGF0Y2ggYWRkcyB0aGlzIGNvbmRpdGlvbiB3aXRoaW4gdGhlIGBpZmAgc3RhdGVtZW50LCBlZmZlY3RpdmVseSBzaG9ydC1jaXJjdWl0aW5nIHRoZSB0aW1lb3V0IGxvb2t1cC4gQmVmb3JlIHRoaXMgY2hhbmdlLCB0aGUgYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCB3b3VsZCBwcm9jZWVkIHRvIGxvb2sgZm9yIGEgdGltZW91dCBvYmplY3QgdXNpbmcgYG5mX2N0X3RpbWVvdXRfZmluZChjdClgIGlmIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IHdhc24mIzM5O3QgYSB0ZW1wbGF0ZSBvciBhbHJlYWR5IGNvbmZpcm1lZC4gTm93LCBpZiBgcHJpdi0mZ3Q7bDRwcm90b2AgZG9lc24mIzM5O3QgYWxpZ24gd2l0aCBgbmZfY3RfcHJvdG9udW0oY3QpYCAsIGl0IGJhaWxzIG91dCBlYXJseS4KCkRpZ2dpbmcgZGVlcGVyLCBJIHNlZSBgcHJpdmAgaXMgYSBgc3RydWN0IG5mdF9jdF90aW1lb3V0X29iaiAqYCBvYnRhaW5lZCB0aHJvdWdoIGBuZnRfb2JqX2RhdGEob2JqKWAuIFNvIGBwcml2YCBob2xkcyB0aGUgdGltZW91dCBvYmplY3QmIzM5O3MgcHJpdmF0ZSBkYXRhLiBUaGlzIG1ha2VzIG1lIGNvbnNpZGVyOiB3aGF0IGhhcHBlbnMgaWYgdGhlIHRpbWVvdXQgb2JqZWN0IGlzIHNldCB1cCBmb3IsIHNheSwgVENQLCBidXQgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgZW5kcyB1cCBiZWluZyBVRFA/IFRoYXQgY291bGQgbGVhZCB0byBhbGwgc29ydHMgb2YgcHJvYmxlbXMg4oCTIHBvdGVudGlhbGx5IG91dC1vZi1ib3VuZHMgcmVhZHMgb3IgZXZlbiB0eXBlIGNvbmZ1c2lvbiBpZiB0aGUgdGltZW91dCBvYmplY3QgYWNjZXNzZXMgZGF0YSBpbmNvcnJlY3RseSBiZWNhdXNlIG9mIGEgcHJvdG9jb2wgbWlzbWF0Y2guIFRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgc3BlY2lmaWNhbGx5IHByZXZlbnRpbmcgdGhhdC4KCkFuZCwgYXMgYSBmaW5hbCB2ZXJpZmljYXRpb24sIEkgbmVlZCB0byBjb25maXJtOiBgbmZfY3RfdGltZW91dF9maW5kKGN0KWAgcmV0dXJucyB0aGUgdGltZW91dCBvYmplY3QgKmFzc29jaWF0ZWQqIHdpdGggdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkuIFRoaXMgcmVpbmZvcmNlcyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcm9ibGVtIGFuZCB0aGUgcHVycG9zZSBvZiB0aGUgZml4LiBJdCYjMzk7cyBhIHNvbGlkIGRlZmVuc2UgYWdhaW5zdCB0aGVzZSBwb3RlbnRpYWxseSBzZXJpb3VzLCBzdWJ0bGUgYnVncyB3aXRoaW4gdGhlIE5ldGZpbHRlciBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9jdF90aW1lb3V0X29ial9ldmFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfY3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTg3MT1zdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTg3NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6ODc2OnN0YXRpYyB2b2lkIG5mdF9jdF90aW1lb3V0X29ial9ldmFsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmosXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTg3Ny1cdFx0XHRcdCAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xMDA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X29iamVjdF9vcHMgbmZ0X2N0X3RpbWVvdXRfb2JqX29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEwMTEtXHQuc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTAxMjpcdC5ldmFsXHRcdD0gbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEwMTMtXHQuaW5pdFx0XHQ9IG5mdF9jdF90aW1lb3V0X29ial9pbml0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTE0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcGx5IGZhbWlsaWFyIHdpdGggY29kZSBhbmQgcHJvYmFibHkgd29ya2luZyBvbiBhIHN5c3RlbSBpbnZvbHZpbmcgTkZUcyBhbmQgcG90ZW50aWFsIHRpbWVvdXRzOgoKKipBbmFseXppbmcgYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgZnVuY3Rpb24uIFRoZSBuYW1pbmcgc3VnZ2VzdHMgaXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSBvZiBjb2RlIHJlbGF0ZWQgdG8gTmV0d29yayBGaWx0ZXIgKG5mdCkgY29ubmVjdGlvbiB0cmFja2luZyAoY3QpIGFuZCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHRoZSBldmFsdWF0aW9uIG9mIHRpbWVvdXQgb2JqZWN0cy4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgbGlrZWx5IGluIGEgcGFydCBvZiB0aGUgc3lzdGVtIHRoYXQgbWFuYWdlcyBjb25uZWN0aW9uIHN0YXRlIGFuZCBob3cgbG9uZyB0aG9zZSBzdGF0ZXMgcGVyc2lzdCBiZWZvcmUgYmVpbmcgY29uc2lkZXJlZCBzdGFsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcywgYmVjYXVzZSB0aW1lb3V0IGNvbmZpZ3VyYXRpb25zIGFyZSBhIGtleSBwYXJ0IG9mIHByZXZlbnRpbmcgcmVzb3VyY2UgZXhoYXVzdGlvbiBhbmQgZW5zdXJpbmcgdGhlIGVmZmljaWVudCBmdW5jdGlvbmluZyBvZiB0aGUgbmV0d29yay4gR2l2ZW4gdGhhdCAmIzM0O25mdCYjMzQ7IGFuZCAmIzM0O2N0JiMzNDsgYXJlIHByZXNlbnQsIEkgYW50aWNpcGF0ZSBpdCB3aWxsIGJlIGludm9sdmVkIHdpdGggYSBOZXRmaWx0ZXIgY29tcG9uZW50IHRoYXQgdHJhY2tzIGNvbm5lY3Rpb24gc3RhdGVzLCBhbmQgcHJvYmFibHkgdGhlIHRpbWVvdXQgdGhhdCBpcyBzZXQgZm9yIGl0LCByZWxhdGluZyB0byBORlRzLiBNeSBmYW1pbGlhcml0eSB3aXRoIHRoZSBjb2RlIG1lYW5zIEkgd2lsbCB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgYXMgY29ubmVjdGlvbiB0cmFja2luZyBpcyBhIHZlcnkgdGVtcHRpbmcgdGFyZ2V0IGZvciBET1MsIGFuZCBORlRzIGxpa2VseSBoYXZlIHRoZWlyIG93biwgc3BlY2lhbCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBoZXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NzA6XHRcbiA4NzE6XHRzdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqIHtcbiA4NzI6XHRcdHN0cnVjdCBuZl9jdF90aW1lb3V0ICAgICp0aW1lb3V0O1xuIDg3MzpcdFx0dThcdFx0XHRsNHByb3RvO1xuIDg3NDpcdH07XG4gODc1Olx0XG4gODc2Olx0c3RhdGljIHZvaWQgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcbiA4Nzc6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4gODc4Olx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4gODc5Olx0e1xuIDg4MDpcdFx0Y29uc3Qgc3RydWN0IG5mdF9jdF90aW1lb3V0X29iaiAqcHJpdiA9IG5mdF9vYmpfZGF0YShvYmopO1xuIDg4MTpcdFx0c3RydWN0IG5mX2Nvbm4gKmN0ID0gKHN0cnVjdCBuZl9jb25uICopc2tiX25mY3QocGt0LVx1MDAzZXNrYik7XG4gODgyOlx0XHRzdHJ1Y3QgbmZfY29ubl90aW1lb3V0ICp0aW1lb3V0O1xuIDg4MzpcdFx0Y29uc3QgdW5zaWduZWQgaW50ICp2YWx1ZXM7XG4gODg0Olx0XG4gODg1Olx0XHRpZiAocHJpdi1cdTAwM2VsNHByb3RvICE9IHBrdC1cdTAwM2V0cHJvdClcbiA4ODY6XHRcdFx0cmV0dXJuO1xuIDg4NzpcdFxuIDg4ODpcdFx0aWYgKCFjdCB8fCBuZl9jdF9pc190ZW1wbGF0ZShjdCkgfHwgbmZfY3RfaXNfY29uZmlybWVkKGN0KSB8fFxuIDg4OTpcdFx0ICAgIHByaXYtXHUwMDNlbDRwcm90byAhPSBuZl9jdF9wcm90b251bShjdCkpXG4gODkwOlx0XHRcdHJldHVybjtcbiA4OTE6XHRcbiA4OTI6XHRcdHRpbWVvdXQgPSBuZl9jdF90aW1lb3V0X2ZpbmQoY3QpO1xuIDg5MzpcdFx0aWYgKCF0aW1lb3V0KSB7XG4gODk0Olx0XHRcdHRpbWVvdXQgPSBuZl9jdF90aW1lb3V0X2V4dF9hZGQoY3QsIHByaXYtXHUwMDNldGltZW91dCwgR0ZQX0FUT01JQyk7XG4gODk1Olx0XHRcdGlmICghdGltZW91dCkge1xuIDg5NjpcdFx0XHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcbiA4OTc6XHRcdFx0XHRyZXR1cm47XG4gODk4Olx0XHRcdH1cbiA4OTk6XHRcdH1cbiA5MDA6XHRcbiA5MDE6XHRcdC8qIGFkanVzdCB0aGUgdGltZW91dCBhcyBwZXIgJiMzOTtuZXcmIzM5OyBzdGF0ZS4gY3QgaXMgdW5jb25maXJtZWQsXG4gOTAyOlx0XHQgKiBzbyB0aGUgY3VycmVudCB0aW1lc3RhbXAgbXVzdCBub3QgYmUgYWRkZWQuXG4gOTAzOlx0XHQgKi9cbiA5MDQ6XHRcdHZhbHVlcyA9IG5mX2N0X3RpbWVvdXRfZGF0YSh0aW1lb3V0KTtcbiA5MDU6XHRcdGlmICh2YWx1ZXMpXG4gOTA2Olx0XHRcdG5mX2N0X3JlZnJlc2goY3QsIHZhbHVlc1swXSk7XG4gOTA3Olx0fVxuIDkwODpcdFxuIDkwOTpcdHN0YXRpYyBpbnQgbmZ0X2N0X3RpbWVvdXRfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiA5MTA6XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxuIDkxMTpcdFx0XHRcdFx0ICAgc3RydWN0IG5mdF9vYmplY3QgKm9iailcbiA5MTI6XHR7XG4gOTEzOlx0XHRzdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XG4gOTE0Olx0XHRjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG87XG4gOTE1Olx0XHRzdHJ1Y3QgbmZfY3RfdGltZW91dCAqdGltZW91dDtcbiA5MTY6XHRcdGludCBsM251bSA9IGN0eC1cdTAwM2VmYW1pbHk7XG4gOTE3Olx0XHRfX3U4IGw0bnVtO1xuIDkxODpcdFx0aW50IHJldDtcbiA5MTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE3NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgYSBQcm90b2NvbCBNaXNtYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBidWcgZml4LCBhbmQgaXQgc2VlbXMgdGhlIGNvcmUgaXNzdWUgaXMgdGhhdCBhIGNoZWNrLCBzcGVjaWZpY2FsbHkgYHByaXYtJmd0O2w0cHJvdG8gIT0gbmZfY3RfcHJvdG9udW0oY3QpYCwgd2FzIG1pc3NpbmcuIFJpZ2h0LCBzbyBpZiB0aG9zZSBhcmVuJiMzOTt0IGVxdWFsIOKAkyBtZWFuaW5nIHRoZSBleHBlY3RlZCBMYXllciA0IHByb3RvY29sIChgcHJpdi0mZ3Q7bDRwcm90b2ApIGRvZXNuJiMzOTt0IG1hdGNoIHRoZSBvbmUgdGhlIGNvbm5lY3Rpb24gdHJhY2tlciAoYGN0YCkgYWN0dWFsbHkgc2VlcyDigJMgdGhlbiB3ZSYjMzk7cmUgc3VwcG9zZWQgdG8gY2FsbCBgbmZfY3RfdGltZW91dF9leHRfYWRkYCB3aXRoIGBwcml2LSZndDt0aW1lb3V0YC4gQW5kIGBwcml2LSZndDt0aW1lb3V0YCwgdGhhdCYjMzk7cyBhIHRpbWVvdXQgb2JqZWN0IHNwZWNpZmljIHRvIGBwcml2LSZndDtsNHByb3RvYC4KCldhaXQgYSBzZWNvbmTigKYgbGV0IG1lIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSB0aGlzIHN0cmFpZ2h0LiBUaGUgZnVuY3Rpb24gYG5mX2N0X3RpbWVvdXRfZXh0X2FkZGAgdGFrZXMgdGhlIGNvbm5lY3Rpb24gdHJhY2tlciAoYGN0YCkgKmFuZCogdGhlIHRpbWVvdXQgb2JqZWN0IChgcHJpdi0mZ3Q7dGltZW91dGApLiBPa2F5LCB0aGF0IHNlZW1zIHJpZ2h0IHNvIGZhci4gTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBuZWVkIHRvIHZlcmlmeSB3aGF0IHRoYXQgZnVuY3Rpb24gYG5mX2N0X3RpbWVvdXRfZXh0X2FkZGAgZG9lcy4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgaXQgdG8gbWFrZSBzdXJlIHRoZSBsb2dpYyB0aGVyZSBpcyBzb3VuZCBpbiB0aGlzIHNjZW5hcmlvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9jdF90aW1lb3V0X2V4dF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg9Njg9c3RhdGljIGlubGluZVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg6Njk6c3RydWN0IG5mX2Nvbm5fdGltZW91dCAqbmZfY3RfdGltZW91dF9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdCxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTcwLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmZfY3RfdGltZW91dCAqdGltZW91dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MTc1ND1pbml0X2Nvbm50cmFjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZl9jb25uICp0bXBsLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xNzg3LVx0aWYgKHRpbWVvdXRfZXh0KVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jOjE3ODg6XHRcdG5mX2N0X3RpbWVvdXRfZXh0X2FkZChjdCwgcmN1X2RlcmVmZXJlbmNlKHRpbWVvdXRfZXh0LVx1MDAzZXRpbWVvdXQpLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTE3ODktXHRcdFx0XHQgICAgICBHRlBfQVRPTUlDKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmM9Nzk9aW50IG5mX2N0X3NldF90aW1lb3V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuYy0xMjItXHR9XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmM6MTIzOlx0dGltZW91dF9leHQgPSBuZl9jdF90aW1lb3V0X2V4dF9hZGQoY3QsIHRpbWVvdXQsIEdGUF9BVE9NSUMpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5jLTEyNC1cdGlmICghdGltZW91dF9leHQpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTg3Nj1zdGF0aWMgdm9pZCBuZnRfY3RfdGltZW91dF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtODkzLVx0aWYgKCF0aW1lb3V0KSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjg5NDpcdFx0dGltZW91dCA9IG5mX2N0X3RpbWVvdXRfZXh0X2FkZChjdCwgcHJpdi1cdTAwM2V0aW1lb3V0LCBHRlBfQVRPTUlDKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtODk1LVx0XHRpZiAoIXRpbWVvdXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA4NQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcywgYXMgdGhvdWdoIHRoZXNlIGFyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBuZl9jdF90aW1lb3V0X2V4dF9hZGRgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVybmFsIHdvcmtpbmdzIG9mIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIHNwZWNpZmljYWxseSB0aGUgdGltZW91dCBleHRlbnNpb24gbWVjaGFuaXNtIGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBTbywgbXkgZmlyc3Qgc3RlcCBpcyB0byBsb2NhdGUgYW5kIHJlYWQgdGhlIGBuZl9jdF90aW1lb3V0X2V4dF9hZGRgIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLiBUaGUgcGF0aCBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgZGVmaW5lZCB3aXRoaW4gdGhlIGNvcmUgTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgY29tcG9uZW50cywgc3BlY2lmaWNhbGx5IGluIGBpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaGAuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGhlYWRlciBmaWxlIHJldmVhbHMgYWJvdXQgdGhlIHN0cnVjdHVyZSBhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBJJiMzOTttIGhvcGluZyBpdCBjbGVhcmx5IG91dGxpbmVzIHRoZSBwYXJhbWV0ZXJzLCByZXR1cm4gdmFsdWUsIGFuZCBhbnkgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgaW4gYWRkaW5nIGEgdGltZW91dCBleHRlbnNpb24gdG8gYSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5LiBVbmRlcnN0YW5kaW5nIHRoZSBzaWduYXR1cmUgYW5kIHN1cnJvdW5kaW5nIGNvbW1lbnRzIHdpbGwgYmUgY3J1Y2lhbCB0byBncmFzcGluZyBpdHMgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGJyb2FkZXIgY29ubmVjdGlvbiB0cmFja2luZyBsaWZlY3ljbGUuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IGN1c3RvbSB0aW1lb3V0IHJ1bGVzIGFyZSBpbmplY3RlZCBpbnRvIGEgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjU6XHQjZW5kaWZcbiAgNjY6XHR9XG4gIDY3Olx0XG4gIDY4Olx0c3RhdGljIGlubGluZVxuICA2OTpcdHN0cnVjdCBuZl9jb25uX3RpbWVvdXQgKm5mX2N0X3RpbWVvdXRfZXh0X2FkZChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gIDcwOlx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBuZl9jdF90aW1lb3V0ICp0aW1lb3V0LFxuICA3MTpcdFx0XHRcdFx0XHQgICAgICBnZnBfdCBnZnApXG4gIDcyOlx0e1xuICA3MzpcdCNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVRcbiAgNzQ6XHRcdHN0cnVjdCBuZl9jb25uX3RpbWVvdXQgKnRpbWVvdXRfZXh0O1xuICA3NTpcdFxuICA3NjpcdFx0aWYgKCF0aW1lb3V0KVxuICA3NzpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgNzg6XHRcbiAgNzk6XHRcdHRpbWVvdXRfZXh0ID0gbmZfY3RfZXh0X2FkZChjdCwgTkZfQ1RfRVhUX1RJTUVPVVQsIGdmcCk7XG4gIDgwOlx0XHRpZiAoIXRpbWVvdXRfZXh0IHx8IHRpbWVvdXRfZXh0LVx1MDAzZXRpbWVvdXQpXG4gIDgxOlx0XHRcdHJldHVybiBOVUxMO1xuICA4MjpcdFxuICA4MzpcdFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2dGltZW91dC1cdTAwM2VyZWZjbnQpKVxuICA4NDpcdFx0XHRyZXR1cm4gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY1NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb25uZWN0aW9uIFRyYWNraW5nIFRpbWVvdXQgQnVnKioKCk9rYXksIHNvIGBuZl9jdF90aW1lb3V0X2V4dF9hZGRgIGlzIGp1c3QgdGFja2luZyBhIHRpbWVvdXQgZXh0ZW5zaW9uIG9udG8gYSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5LiBUaGUgcXVlc3Rpb24gaXMsIGlmIHRoZSBwcm90b2NvbCBvZiB0aGUgdGltZW91dCBvYmplY3QgKGBwcml2LSZndDtsNHByb3RvYCkgZG9lc24mIzM5O3QgbWF0Y2ggdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkmIzM5O3MgcHJvdG9jb2wgKGBuZl9jdF9wcm90b251bShjdClgKSwgd2hlcmUmIzM5O3MgdGhlIHZ1bG5lcmFiaWxpdHk/IEFoLCB0aGUgcHJvYmxlbSBpcyB0aGUgKm1pc21hdGNoKiBiZXR3ZWVuIHRoZSB0aW1lb3V0IG9iamVjdCYjMzk7cyBwcm90b2NvbCBhbmQgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkmIzM5O3MgcHJvdG9jb2wuIFRoZSBzeXN0ZW0gY291bGQgaW5jb3JyZWN0bHkgYXNzdW1lIHRoZSB0aW1lb3V0IG9iamVjdCBpcyByZWxldmFudCBmb3IgdGhlIGVudHJ5JiMzOTtzIHByb3RvY29sLiBUaGlzIHNlZW1zIGRhbmdlcm91cyBnaXZlbiBUQ1AgYW5kIFVEUCB0aW1lb3V0cyBoYXZlIGRpc3RpbmN0IGRhdGEgc3RydWN0dXJlcy4KCkxldCYjMzk7cyB0cmFjZSBob3cgYG5mX2N0X3RpbWVvdXRfZGF0YSh0aW1lb3V0KWAgaXMgdXNlZC4gTG9va2luZyBhdCBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgLCBJIHNlZToKCmBgYGMKCXZhbHVlcyA9IG5mX2N0X3RpbWVvdXRfZGF0YSh0aW1lb3V0KTsKCWlmICh2YWx1ZXMpCgkJbmZfY3RfcmVmcmVzaChjdCwgdmFsdWVzWzBdKTsKYGBgCgpSaWdodCwgYHZhbHVlc1swXWAgc2ltcGx5IHBvaW50cyB0byB0aGUgZmlyc3QgdGltZW91dCB2YWx1ZS4gQnV0IHdoYXQgaWYgdGhhdCB0aW1lb3V0IG9iamVjdCBpcyB1c2VkIG91dHNpZGUgdGhpcyBwYXJ0aWN1bGFyIGV2YWx1YXRpb24/IFdlIG5lZWQgdG8gdmVyaWZ5IGFsbCBpbnN0YW5jZXMgb2YgYG5mX2N0X3RpbWVvdXRfZGF0YWAgdXNhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2N0X3RpbWVvdXRfZGF0YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaD00Mj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCAqXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaDo0MzpuZl9jdF90aW1lb3V0X2RhdGEoY29uc3Qgc3RydWN0IG5mX2Nvbm5fdGltZW91dCAqdClcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTQ0LXtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaD05ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCAqbmZfY3RfdGltZW91dF9sb29rdXAoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTEwMS1cdGlmICh0aW1lb3V0X2V4dCBcdTAwMjZcdTAwMjYgcmN1X2FjY2Vzc19wb2ludGVyKHRpbWVvdXRfZXh0LVx1MDAzZXRpbWVvdXQpKVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg6MTAyOlx0XHR0aW1lb3V0cyA9IG5mX2N0X3RpbWVvdXRfZGF0YSh0aW1lb3V0X2V4dCk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC0xMDMtI2VuZGlmXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYz04NzY9c3RhdGljIHZvaWQgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTkwMy1cdCAqL1xubmV0L25ldGZpbHRlci9uZnRfY3QuYzo5MDQ6XHR2YWx1ZXMgPSBuZl9jdF90aW1lb3V0X2RhdGEodGltZW91dCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTkwNS1cdGlmICh2YWx1ZXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MTUKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbmZfY3RfdGltZW91dF9kYXRhYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgY29ubmVjdGlvbiB0aW1lb3V0cyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIG5ldGZpbHRlciBjb25udHJhY2sgc3lzdGVtLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdGhlIGBuZl9jdF90aW1lb3V0X2RhdGFgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBjaGVjayB0aGUgc3BlY2lmaWMgZGVmaW5pdGlvbnMgaW4gYGluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oYC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBoZWFkZXIgdG8gY29udGFpbiB0aGUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbnkgYXNzb2NpYXRlZCBtYWNyb3Mgb3IgZnVuY3Rpb25zIHRoYXQgZ292ZXJuIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUgbWFuYWdlcyB0aGUgZXhwaXJhdGlvbiBvZiBjb25uZWN0aW9ucy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgdGhlIHRpbWVvdXQgdmFsdWVzIHRoZW1zZWx2ZXMsIHBvdGVudGlhbGx5IHBlci1wcm90b2NvbCBvciBjb25uZWN0aW9uIHN0YXRlLCBhbmQgbWF5YmUgZXZlbiBmbGFncyBvciBtZWNoYW5pc21zIHJlbGF0ZWQgdG8gaG93IHRpbWVvdXRzIGFyZSBjYWxjdWxhdGVkIG9yIG1vZGlmaWVkLiBJdCYjMzk7cyB0aW1lIHRvIHJlZnJlc2ggYW5kIGFuYWx5emUgdGhpcyBjb3JlIHBpZWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzNTpcdFxuICAzNjpcdFx0dGltZW91dCA9IHJjdV9kZXJlZmVyZW5jZSh0aW1lb3V0X2V4dC1cdTAwM2V0aW1lb3V0KTtcbiAgMzc6XHRcdGlmICh0aW1lb3V0IFx1MDAyNlx1MDAyNiByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2dGltZW91dC1cdTAwM2VyZWZjbnQpKVxuICAzODpcdFx0XHRrZnJlZV9yY3UodGltZW91dCwgcmN1KTtcbiAgMzk6XHQjZW5kaWZcbiAgNDA6XHR9XG4gIDQxOlx0XG4gIDQyOlx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgKlxuICA0MzpcdG5mX2N0X3RpbWVvdXRfZGF0YShjb25zdCBzdHJ1Y3QgbmZfY29ubl90aW1lb3V0ICp0KVxuICA0NDpcdHtcbiAgNDU6XHQjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19USU1FT1VUXG4gIDQ2Olx0XHRzdHJ1Y3QgbmZfY3RfdGltZW91dCAqdGltZW91dDtcbiAgNDc6XHRcbiAgNDg6XHRcdHRpbWVvdXQgPSByY3VfZGVyZWZlcmVuY2UodC1cdTAwM2V0aW1lb3V0KTtcbiAgNDk6XHRcdGlmICh0aW1lb3V0ID09IE5VTEwpXG4gIDUwOlx0XHRcdHJldHVybiBOVUxMO1xuICA1MTpcdFxuICA1MjpcdFx0cmV0dXJuICh1bnNpZ25lZCBpbnQgKil0aW1lb3V0LVx1MDAzZWRhdGE7XG4gIDUzOlx0I2Vsc2VcbiAgNTQ6XHRcdHJldHVybiBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDMyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIENvbm5lY3Rpb24gVHJhY2tpbmcgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIHRpbWVvdXRzIGluIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFNwZWNpZmljYWxseSwgdGhlIGB0aW1lb3V0LSZndDtkYXRhYCBhcnJheSBpcyBhbiBgdW5zaWduZWQgaW50YCBhcnJheSAob3IgYHUzMmAgZm9yIHVzKSwgYW5kIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IG1pZ2h0IGJlIHVzaW5nIHRoZSAqd3JvbmcqIHRpbWVvdXQgdmFsdWVzIGlmIHRoZSBwcm90b2NvbHMgZG9uJiMzOTt0IG1hdGNoLiBUaGlzIGlzIHdoZXJlIHRoZSByZWQgZmxhZ3MgZ28gdXAuCgpJIGtub3cgVENQIGhhcyBhIGJvYXRsb2FkIG9mIHRpbWVvdXQgdmFsdWVzIOKAkyB3ZSYjMzk7cmUgdGFsa2luZyB0aGluZ3MgbGlrZSBgVENQX0NPTk5UUkFDS19TWU5fU0VOVGAsIGBUQ1BfQ09OTlRSQUNLX0VTVEFCTElTSEVEYCwgYW5kIGEgYnVuY2ggbW9yZS4gVURQLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgbXVjaCBzaW1wbGVyLCB3aXRoIGZhciBmZXdlciBzdGF0ZXMgYW5kIHRoZXJlZm9yZSBmZXdlciB0aW1lb3V0cywgbGlrZSBgVURQX0NUX1VOUkVQTElFRGAgYW5kIGBVRFBfQ1RfUkVQTElFRGAuCgpUaGUgcHJvYmxlbSBpcywgaWYgd2UgZW5kIHVwIGluIGEgc2l0dWF0aW9uIHdoZXJlIGEgVURQIGNvbm5lY3Rpb24gdXNlcyBhIFRDUCB0aW1lb3V0IG9iamVjdCwgaXQgKmNvdWxkKiBiZSBva2F5LiBVRFAgaXMgZ29pbmcgdG8gYWNjZXNzIGB0aW1lb3V0LSZndDtkYXRhYCB1c2luZyBpdHMgb3duIFVEUCBzdGF0ZSBpbmRpY2VzLiBTaW5jZSBUQ1AgaGFzIG1vcmUgc3RhdGVzLCB0aG9zZSBpbmRpY2VzIHNob3VsZCBiZSBpbiBib3VuZHMuIEhvd2V2ZXIsIGZsaXAgdGhlIHNjcmlwdC4gSWYgYSBUQ1AgY29ubmVjdGlvbiB1c2VzIGEgVURQIHRpbWVvdXQgb2JqZWN0LCB3ZSYjMzk7cmUgaW4gcmVhbCB0cm91YmxlLiBUQ1Agd2lsbCBhY2Nlc3MgYHRpbWVvdXQtJmd0O2RhdGFgIHVzaW5nIGl0cyBUQ1Agc3RhdGUgaW5kaWNlcy4gVENQIGhhcyB1cCB0byBmb3VydGVlbiBkaWZmZXJlbnQgc3RhdGVzIChvciBzb21ldGhpbmcgYXJvdW5kIHRoYXQgbnVtYmVyKS4gVURQIG9ubHkgaGFzIHR3by4gU28sIGlmIHdlIHRyeSBzb21ldGhpbmcgbGlrZSBgdGltZW91dC0mZ3Q7ZGF0YVtUQ1BfQ09OTlRSQUNLX0VTVEFCTElTSEVEXWAgb24gYSBVRFAgb2JqZWN0LCB3ZSYjMzk7cmUgKmd1YXJhbnRlZWQqIHRvIGhhdmUgYW4gb3V0LW9mLWJvdW5kcyByZWFkLiBUaGlzIGlzIGEgY2xhc3NpYyB2dWxuZXJhYmlsaXR5IQoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoaXMuIEJlZm9yZSBJIGdvIHRvbyBkZWVwLCBJIG5lZWQgdG8gc2VlIGhvdyB0aGlzIGB0aW1lb3V0LSZndDtkYXRhYCBhcnJheSBpcyBhY3R1YWxseSBhbGxvY2F0ZWQuIEkgaGF2ZSB0byBsb29rIGRlZXBlciB0byBzZWUgaG93IHRoZSBvYmplY3QgaXMgY29uc3RydWN0ZWQgdG8gY29uZmlybSBteSBzdXNwaWNpb25zIGFuZCB2ZXJpZnkgaG93IHdlIGNhbiBnZXQgaW50byB0aGlzIHNpdHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG5mX2N0X3RpbWVvdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC0xMy1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oOjE0OnN0cnVjdCBuZl9jdF90aW1lb3V0IHtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTE1LVx0cmVmY291bnRfdFx0XHRyZWZjbnQ7XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg9MjI9c3RydWN0IG5mX2Nvbm5fdGltZW91dCB7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaDoyMzpcdHN0cnVjdCBuZl9jdF90aW1lb3V0IF9fcmN1ICp0aW1lb3V0O1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmgtMjQtfTtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaD0yNj1zdGF0aWMgaW5saW5lIHZvaWQgbmZfY3RfdGltZW91dF9wdXQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTI5LVx0c3RydWN0IG5mX2Nvbm5fdGltZW91dCAqdGltZW91dF9leHQ7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaDozMDpcdHN0cnVjdCBuZl9jdF90aW1lb3V0ICp0aW1lb3V0O1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmgtMzEtXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg9NDM9bmZfY3RfdGltZW91dF9kYXRhKGNvbnN0IHN0cnVjdCBuZl9jb25uX3RpbWVvdXQgKnQpXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmgtNDUtI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfVElNRU9VVFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg6NDY6XHRzdHJ1Y3QgbmZfY3RfdGltZW91dCAqdGltZW91dDtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTQ3LVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oPTY5PXN0cnVjdCBuZl9jb25uX3RpbWVvdXQgKm5mX2N0X3RpbWVvdXRfZXh0X2FkZChzdHJ1Y3QgbmZfY29ubiAqY3QsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaDo3MDpcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5mX2N0X3RpbWVvdXQgKnRpbWVvdXQsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC03MS1cdFx0XHRcdFx0ICAgICAgZ2ZwX3QgZ2ZwKVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oPTk0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50ICpuZl9jdF90aW1lb3V0X2xvb2t1cChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmgtMTA3LSNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVRcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oOjEwODp2b2lkIG5mX2N0X3VudGltZW91dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZl9jdF90aW1lb3V0ICp0aW1lb3V0KTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTEwOS1pbnQgbmZfY3Rfc2V0X3RpbWVvdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY29ubiAqY3QsIHU4IGwzbnVtLCB1OCBsNG51bSxcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaD0xMjA9c3RhdGljIGlubGluZSB2b2lkIG5mX2N0X2Rlc3Ryb3lfdGltZW91dChzdHJ1Y3QgbmZfY29ubiAqY3QpXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmgtMTI2LSNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVRcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oOjEyNzpzdHJ1Y3QgbmZfY3RfdGltZW91dF9ob29rcyB7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaDoxMjg6XHRzdHJ1Y3QgbmZfY3RfdGltZW91dCAqKCp0aW1lb3V0X2ZpbmRfZ2V0KShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg6MTI5Olx0dm9pZCAoKnRpbWVvdXRfcHV0KShzdHJ1Y3QgbmZfY3RfdGltZW91dCAqdGltZW91dCk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC0xMzAtfTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTEzMS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oOjEzMjpleHRlcm4gY29uc3Qgc3RydWN0IG5mX2N0X3RpbWVvdXRfaG9va3MgX19yY3UgKm5mX2N0X3RpbWVvdXRfaG9vaztcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTEzMy0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc1MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gbmZfY3RfdGltZW91dCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29ubnRyYWNrIHRpbWVvdXQgc3RydWN0dXJlLCBzbyB0aGUgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byBgaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmhgLiBJJiMzOTttIGhvcGluZyBpdCYjMzk7cyB3ZWxsLWRvY3VtZW50ZWQg4oCTIEkmIzM5O20gbm90IGxvb2tpbmcgZm9yIGFueSBzdXJwcmlzZXMsIGp1c3QgYSBzb2xpZCBkZWZpbml0aW9uLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGRpZmZlcmVudCB0aW1lb3V0IHZhbHVlcyBhcmUgc3RydWN0dXJlZCwgaWYgdGhlcmUgYXJlIGFueSBmbGFncywgYW5kIGhvdyB0aGlzIHN0cnVjdCByZWxhdGVzIHRvIHRoZSBjb3JlIGNvbm50cmFjayBzdGF0ZSBtYW5hZ2VtZW50LiBJIHdhbnQgdG8gc2VlIGNsZWFybHkgaG93IHRpbWVvdXRzIGFyZSBoYW5kbGVkIGF0IHRoZSBkYXRhIHN0cnVjdHVyZSBsZXZlbCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRoZSBmaWVsZHMgdGhhdCBkZWZpbmUgdGhlIGdyYW51bGFyaXR5IGFuZCB0aGUgZGlmZmVyZW50IHRpbWVvdXQgaW50ZXJ2YWxzIChsaWtlIGVzdGFibGlzaGVkLCBjbG9zaW5nLCBldGMuKS4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGhlYWRlciBmaWxlIHByb3ZpZGVzIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBJIG5lZWQgZm9yIHRoaXMgY3VycmVudCBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4gICAyOlx0I2lmbmRlZiBfTkZfQ09OTlRSQUNLX1RJTUVPVVRfSFxuICAgMzpcdCNkZWZpbmUgX05GX0NPTk5UUkFDS19USU1FT1VUX0hcbiAgIDQ6XHRcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmV0X25hbWVzcGFjZS5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGVfY29tbW9uLmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudC5oXHUwMDNlXG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5oXHUwMDNlXG4gIDExOlx0XG4gIDEyOlx0I2RlZmluZSBDVE5MX1RJTUVPVVRfTkFNRV9NQVhcdDMyXG4gIDEzOlx0XG4gIDE0Olx0c3RydWN0IG5mX2N0X3RpbWVvdXQge1xuICAxNTpcdFx0cmVmY291bnRfdFx0XHRyZWZjbnQ7XG4gIDE2Olx0XHRfX3UxNlx0XHRcdGwzbnVtO1xuICAxNzpcdFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpsNHByb3RvO1xuICAxODpcdFx0c3RydWN0IHJjdV9oZWFkXHRcdHJjdTtcbiAgMTk6XHRcdGNoYXJcdFx0XHRkYXRhW107XG4gIDIwOlx0fTtcbiAgMjE6XHRcbiAgMjI6XHRzdHJ1Y3QgbmZfY29ubl90aW1lb3V0IHtcbiAgMjM6XHRcdHN0cnVjdCBuZl9jdF90aW1lb3V0IF9fcmN1ICp0aW1lb3V0O1xuICAyNDpcdH07XG4gIDI1Olx0XG4gIDI2Olx0c3RhdGljIGlubGluZSB2b2lkIG5mX2N0X3RpbWVvdXRfcHV0KGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdClcbiAgMjc6XHR7XG4gIDI4Olx0I2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfVElNRU9VVFxuICAyOTpcdFx0c3RydWN0IG5mX2Nvbm5fdGltZW91dCAqdGltZW91dF9leHQ7XG4gIDMwOlx0XHRzdHJ1Y3QgbmZfY3RfdGltZW91dCAqdGltZW91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ3NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyBgbmZfY3RfdGltZW91dGAgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbmZfY3RfdGltZW91dGAgc3RydWN0IGFuZCBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGF0IGBkYXRhW11gIOKAkyB0aGF0JiMzOTtzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyLiBUaGF0IG1lYW5zIHRoZSBzaXplIG9mIHRoZSB3aG9sZSBgc3RydWN0YCBpc24mIzM5O3QgZml4ZWQgYXQgY29tcGlsZSB0aW1lLiBJdHMgc2l6ZSBkeW5hbWljYWxseSBhZGFwdHMgYXQgcnVudGltZS4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgdGhlIHNpemUgb2YgYW4gaW5zdGFuY2Ugb2YgYHN0cnVjdCBuZl9jdF90aW1lb3V0YCBpcyBnb2luZyB0byBiZSBhbGxvY2F0ZWQgd2l0aCBhIHNpemUgZGVwZW5kaW5nIG9uIHRoZSBwcm90b2NvbC4gCgpOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0ICpob3cqIHRoYXQgYWxsb2NhdGlvbiBhY3R1YWxseSBoYXBwZW5zLiBXaGVyZSBpbiB0aGUgY29kZSBpcyB0aGUgbWVtb3J5IGJlaW5nIGNhcnZlZCBvdXQgZm9yIHRoaXMgdGhpbmcsIGFuZCBob3cgZG9lcyB0aGUgY29kZSBkZXRlcm1pbmUgdGhlIGNvcnJlY3Qgc2l6ZT8gTGV0JiMzOTtzIHRyYWNlIHRoaXMgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jLipzaXplb2YuKm5mX2N0X3RpbWVvdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfY3QuYz05MDk9c3RhdGljIGludCBuZnRfY3RfdGltZW91dF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtOTM2LVxubmV0L25ldGZpbHRlci9uZnRfY3QuYzo5Mzc6XHR0aW1lb3V0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5mX2N0X3RpbWVvdXQpICYjNDM7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTkzOC1cdFx0XHQgIGw0cHJvdG8tXHUwMDNlY3RubF90aW1lb3V0Lm9ial9zaXplLCBHRlBfS0VSTkVMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg1MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgT3V0LW9mLUJvdW5kcyBSZWFkIGluIENvbm5lY3Rpb24gVHJhY2tpbmcqKgoKT2theSwgbGV0JiMzOTtzIHNlZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhczogdGhlIGFsbG9jYXRpb24gb2YgYGw0cHJvdG8tJmd0O2N0bmxfdGltZW91dC5vYmpfc2l6ZWAgaW1wbGllcyB0aGF0IGlmIGEgVURQIHRpbWVvdXQgb2JqZWN0IGlzIGNyZWF0ZWQsIGl0IGFsbG9jYXRlcyBgc2l6ZW9mKHN0cnVjdCBuZl9jdF90aW1lb3V0KWAgcGx1cyB0aGUgYFVEUF9USU1FT1VUX09CSl9TSVpFYC4gUmlnaHQuIEFuZCBpZiBhIFRDUCBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IHVzZXMgKnRoYXQqIFVEUCB0aW1lb3V0IG9iamVjdCwgaXQgd2lsbCB0cnkgdG8gYWNjZXNzIHNvbWV0aGluZyBsaWtlIGB0aW1lb3V0LSZndDtkYXRhW1RDUF9TVEFURV1gLiBDbGVhcmx5LCBiZWNhdXNlIGBUQ1BfVElNRU9VVF9PQkpfU0laRWAgaXMgc2lnbmlmaWNhbnRseSBsYXJnZXIgdGhhbiBgVURQX1RJTUVPVVRfT0JKX1NJWkVgLCB0aGlzIHNjcmVhbXMgb3V0LW9mLWJvdW5kcyByZWFkLCByaWdodD8KCkJ1dCwgaG9sZCBvbi4gTG9va2luZyBjbG9zZXIgYXQgYG5mX2N0X3JlZnJlc2hgLCBpdCB0YWtlcyB0aGUgdmFsdWUgZnJvbSBgdmFsdWVzWzBdYC4gQW5kLCBpbiB0aGUgYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCBmdW5jdGlvbiwgaXQgZG9lcyBhIHNpbWlsYXIgdGhpbmcuCgpgYGBjCnZhbHVlcyA9IG5mX2N0X3RpbWVvdXRfZGF0YSh0aW1lb3V0KTsKaWYgKHZhbHVlcykKICAgIG5mX2N0X3JlZnJlc2goY3QsIHZhbHVlc1swXSk7CmBgYAoKQWgsIHJpZ2h0LCBgdmFsdWVzWzBdYCBpcyBqdXN0IHRoZSBmaXJzdCBlbGVtZW50LiBTbywgaXMgdGhlcmUgKmFjdHVhbGx5KiBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaGVyZT8gQWN0dWFsbHksIGB2YWx1ZXNbMF1gIHdpbGwgYWx3YXlzIGJlIHdpdGhpbiBib3VuZHMsIGFzIGxvbmcgYXMgYG9ial9zaXplICZndDs9IHNpemVvZih1bnNpZ25lZCBpbnQpYC4gSG1tLCB0aGF0IHNlZW1zIG9rYXkuCgpIb3dldmVyLCBJIGNhbiYjMzk7dCBiZSB0b28gaGFzdHkuIEkgbmVlZCB0byB0aGluayBhYm91dCAqb3RoZXIqIHBsYWNlcyB0aGF0IHVzZSB0aGUgdGltZW91dCBvYmplY3QuIFRoZSB0aW1lb3V0IG9iamVjdCBpcyB1bHRpbWF0ZWx5IGF0dGFjaGVkIHRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IHVzaW5nIGBuZl9jdF90aW1lb3V0X2V4dF9hZGRgLCBhbmQgb25jZSBhdHRhY2hlZCwgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgaXMgZ29pbmcgdG8gYmUgdXNpbmcgdGhhdCB0aW1lb3V0IG9iamVjdCBmb3IgZXZlcnkgc2luZ2xlIHN0YXRlIHRyYW5zaXRpb24uIFdoaWNoIG1lYW5zIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgd2hlcmUgYG5mX2N0X3RpbWVvdXRfbG9va3VwYCBhbmQgYG5mX2N0X3RpbWVvdXRfZGF0YWAgYXJlIGFjdHVhbGx5IHVzZWQgdGhyb3VnaG91dCB0aGUgY29kZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBhbmQgdGhhdCB0aG9zZSBmdW5jdGlvbnMgYXJlbiYjMzk7dCBiZWluZyB1c2VkIGluIGEgd2F5IHRoYXQgKndvdWxkKiByZXN1bHQgaW4gYW4gb3V0LW9mLWJvdW5kcyByZWFkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9jdF90aW1lb3V0X2xvb2t1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaD02OT1zdHJ1Y3QgbmZfY29ubl90aW1lb3V0ICpuZl9jdF90aW1lb3V0X2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTkzLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg6OTQ6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgKm5mX2N0X3RpbWVvdXRfbG9va3VwKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdClcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTk1LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MTk1Nj1zdGF0aWMgaW50IGdlbmVyaWNfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTk1OC17XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MTk1OTpcdGNvbnN0IHVuc2lnbmVkIGludCAqdGltZW91dCA9IG5mX2N0X3RpbWVvdXRfbG9va3VwKGN0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xOTYwLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5jPTI2Nj1pbnQgbmZfY29ubnRyYWNrX2dyZV9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5jLTI3NC1cdGlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSkge1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmM6Mjc1Olx0XHR1bnNpZ25lZCBpbnQgKnRpbWVvdXRzID0gbmZfY3RfdGltZW91dF9sb29rdXAoY3QpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmMtMjc2LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYz03MD1pbnQgbmZfY29ubnRyYWNrX2ljbXBfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMtNzctXHQgICBhbmQgYWxzbyB0byBoYW5kbGUgY29ycmVjdGx5IElDTVAgZWNobyByZXBseSBkdXBsaWNhdGVzLiAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jOjc4Olx0dW5zaWduZWQgaW50ICp0aW1lb3V0ID0gbmZfY3RfdGltZW91dF9sb29rdXAoY3QpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jLTc5LVx0c3RhdGljIGNvbnN0IHVfaW50OF90IHZhbGlkX25ld1tdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jPTg5PWludCBuZl9jb25udHJhY2tfaWNtcHY2X3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMtOTMte1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmM6OTQ6XHR1bnNpZ25lZCBpbnQgKnRpbWVvdXQgPSBuZl9jdF90aW1lb3V0X2xvb2t1cChjdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYy05NS1cdHN0YXRpYyBjb25zdCB1OCB2YWxpZF9uZXdbXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM9MzI3PWludCBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy01MjEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6NTIyOlx0dGltZW91dHMgPSBuZl9jdF90aW1lb3V0X2xvb2t1cChjdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtNTIzLVx0aWYgKCF0aW1lb3V0cylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz03MjI9c3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNzYwLVx0XHR0biA9IG5mX3RjcF9wZXJuZXQobmZfY3RfbmV0KGN0KSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo3NjE6XHRcdHRpbWVvdXRzID0gbmZfY3RfdGltZW91dF9sb29rdXAoY3QpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNzYyLVx0XHRpZiAoIXRpbWVvdXRzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTkxNz12b2lkIG5mX2Nvbm50cmFja190Y3Bfc2V0X2Nsb3Npbmcoc3RydWN0IG5mX2Nvbm4gKmN0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTkzNS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjkzNjpcdHRpbWVvdXRzID0gbmZfY3RfdGltZW91dF9sb29rdXAoY3QpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtOTM3LVx0aWYgKCF0aW1lb3V0cykge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTk2Mz1pbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyNzYtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMjc3Olx0dGltZW91dHMgPSBuZl9jdF90aW1lb3V0X2xvb2t1cChjdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMjc4LVx0aWYgKCF0aW1lb3V0cylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYz04ND1pbnQgbmZfY29ubnRyYWNrX3VkcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jLTk1LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmM6OTY6XHR0aW1lb3V0cyA9IG5mX2N0X3RpbWVvdXRfbG9va3VwKGN0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jLTk3LVx0aWYgKCF0aW1lb3V0cylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMDgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YDoKCioqRGlzc2VjdGluZyBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YC4gVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb24gaW4gdGhlIG5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZSwgcmlnaHQ/IEl0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGZvciBUQ1AgY29ubmVjdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29udHJvbCBmbG93LiBJdCYjMzk7cyBoYW5kbGluZyBUQ1AgcGFja2V0cyBhbmQgZmlndXJpbmcgb3V0IHRoZWlyIHJvbGUgaW4gdGhlIG9uZ29pbmcgY29ubmVjdGlvbi4gSSBoYXZlIHRvIHRoaW5rIGFib3V0IHN0YXRlIHRyYW5zaXRpb25zIOKAkyB3aGF0IGhhcHBlbnMgd2hlbiBpdCBzZWVzIGEgU1lOLCBTWU4tQUNLLCBBQ0ssIEZJTiwgUlNULCBhbmQgc28gb24uIEl0JiMzOTtzIGdvdCB0byBwYXJzZSB0aGUgVENQIGZsYWdzIHRvIGRldGVybWluZSB0aGUgY29ubmVjdGlvbiYjMzk7cyBzdGF0ZSwgb3IgbW9kaWZ5IGV4aXN0aW5nIHN0YXRlLCBiYXNlZCBvbiB0aGUgZmxvdyBpdCBpcyBzZWVpbmcuCgpJJiMzOTttIHBpY3R1cmluZyBpdCBoYW5kbGluZyB2YXJpb3VzIHNjZW5hcmlvczogaW5pdGlhbCBjb25uZWN0aW9uIHNldHVwLCBkYXRhIHRyYW5zZmVyLCBjb25uZWN0aW9uIHRlYXJkb3duIChncmFjZWZ1bCBvciBhYnJ1cHQpLiBJdOKAmXMgZXNzZW50aWFsIGZvciBlbnN1cmluZyBjb25uZWN0aW9ucyBhcmUgcHJvcGVybHkgdHJhY2tlZCwgc28gTkFULCBmaXJld2FsbCBydWxlcywgYW5kIG90aGVyIHN0YXRlZnVsIG9wZXJhdGlvbnMgY2FuIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhlcmUgaXMgYSBsb3Qgb2Ygc3RhdGUgdG8ganVnZ2xlOiBzZXF1ZW5jZSBudW1iZXJzLCBhY2tub3dsZWRnZW1lbnQgbnVtYmVycywgd2luZG93IHNpemVzLCBhbmQgcG90ZW50aWFsbHkgcmV0cmFuc21pc3Npb25zIG9yIG91dC1vZi1vcmRlciBwYWNrZXRzLiBUaGUgY29ubmVjdGlvbiB0cmFja2luZyByZWxpZXMgb24gYWxsIHRoYXQgaW5mb3JtYXRpb24sIGFuZCBzbyBpdCBpcyBhbiBpbXBvcnRhbnQgZnVuY3Rpb24uIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIHRvbywgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gVGhlIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGluIHRoZSBmYXN0IHBhdGgsIHNvIGVmZmljaWVuY3kgaXMgcGFyYW1vdW50LiBBbnkgYm90dGxlbmVja3MgaGVyZSBjYW4gaHVydCB0aHJvdWdocHV0LiBJdCBpcyByZWFsbHkgdGhlIGhlYXJ0IG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjcwOlx0XHRjdC1cdTAwM2Vwcm90by50Y3AubGFzdF9kaXIgPSBkaXI7XG4xMjcxOlx0XG4xMjcyOlx0XHRjdC1cdTAwM2Vwcm90by50Y3Auc3RhdGUgPSBuZXdfc3RhdGU7XG4xMjczOlx0XHRpZiAob2xkX3N0YXRlICE9IG5ld19zdGF0ZVxuMTI3NDpcdFx0ICAgIFx1MDAyNlx1MDAyNiBuZXdfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19GSU5fV0FJVClcbjEyNzU6XHRcdFx0Y3QtXHUwMDNlcHJvdG8udGNwLnNlZW5bZGlyXS5mbGFncyB8PSBJUF9DVF9UQ1BfRkxBR19DTE9TRV9JTklUO1xuMTI3NjpcdFxuMTI3NzpcdFx0dGltZW91dHMgPSBuZl9jdF90aW1lb3V0X2xvb2t1cChjdCk7XG4xMjc4Olx0XHRpZiAoIXRpbWVvdXRzKVxuMTI3OTpcdFx0XHR0aW1lb3V0cyA9IHRuLVx1MDAzZXRpbWVvdXRzO1xuMTI4MDpcdFxuMTI4MTpcdFx0aWYgKGN0LVx1MDAzZXByb3RvLnRjcC5yZXRyYW5zIFx1MDAzZT0gdG4tXHUwMDNldGNwX21heF9yZXRyYW5zIFx1MDAyNlx1MDAyNlxuMTI4MjpcdFx0ICAgIHRpbWVvdXRzW25ld19zdGF0ZV0gXHUwMDNlIHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfUkVUUkFOU10pXG4xMjgzOlx0XHRcdHRpbWVvdXQgPSB0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1JFVFJBTlNdO1xuMTI4NDpcdFx0ZWxzZSBpZiAodW5saWtlbHkoaW5kZXggPT0gVENQX1JTVF9TRVQpKVxuMTI4NTpcdFx0XHR0aW1lb3V0ID0gdGltZW91dHNbVENQX0NPTk5UUkFDS19DTE9TRV07XG4xMjg2Olx0XHRlbHNlIGlmICgoY3QtXHUwMDNlcHJvdG8udGNwLnNlZW5bMF0uZmxhZ3MgfCBjdC1cdTAwM2Vwcm90by50Y3Auc2VlblsxXS5mbGFncykgXHUwMDI2XG4xMjg3Olx0XHRcdCBJUF9DVF9UQ1BfRkxBR19EQVRBX1VOQUNLTk9XTEVER0VEIFx1MDAyNlx1MDAyNlxuMTI4ODpcdFx0XHQgdGltZW91dHNbbmV3X3N0YXRlXSBcdTAwM2UgdGltZW91dHNbVENQX0NPTk5UUkFDS19VTkFDS10pXG4xMjg5Olx0XHRcdHRpbWVvdXQgPSB0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1VOQUNLXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3ODYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE91dC1vZi1Cb3VuZHMgUmVhZCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBhY2Nlc3NpbmcgYHRpbWVvdXRzW25ld19zdGF0ZV1gLiBNeSBtaW5kIGlzIHJhY2luZyDigJMgaWYgYHRpbWVvdXRzYCBpcyBhY3R1YWxseSBhIFVEUCB0aW1lb3V0IG9iamVjdCwgaXRzIHNpemUgaXMgb25seSBhIGNvdXBsZSBvZiB1bnNpZ25lZCBpbnRzLCBidXQgYG5ld19zdGF0ZWAgY291bGQgYmUgbXVjaCBsYXJnZXIuIFRoYXQmIzM5O3MgYSB0ZXh0Ym9vayBvdXQtb2YtYm91bmRzIHJlYWQhIFdlIGFsbCBrbm93IEtBU0FOIGlzIHRoZXJlIHRvIGRldGVjdCB0aG9zZSwgcmlnaHQ/CgpCdXQsIHdhaXQuLi4gaXMgdGhlcmUgYW55ICp1bmluaXRpYWxpemVkKiBtZW1vcnkgaW52b2x2ZWQ/IFRoZSB0aW1lb3V0IG9iamVjdCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AsIHNvIGl0JiMzOTtzIGZ1bGx5IHplcm9lZC4gU28sIHdoaWxlIGl0ICppcyogYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBpdCB3aWxsIGxpa2VseSBqdXN0IHJlYWQgaW50byBhZGphY2VudCBtZW1vcnkuIEFuZCBLQVNBTiB3aWxsIGNhdGNoICp0aGF0KiBvdXQtb2YtYm91bmRzIHJlYWQsIHJlZ2FyZGxlc3MuIEkmIzM5O20gcHJldHR5IHN1cmUgS0FTQU4gd2lsbCBjYXRjaCB0aGlzLgoKTm93LCBob2xkIG9uLi4uIHdoYXQgaWYgdGhlIG91dC1vZi1ib3VuZHMgcmVhZCBlbmRzIHVwIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb2YgYW4gYWRqYWNlbnQgYWxsb2NhdGlvbj8gS0FTQU4gc3RpbGwgY2F0Y2hlcyB0aGF0ISBLTVNBTiBpcyBtb3JlIGdlYXJlZCB0b3dhcmRzIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBzcGVjaWZpY2FsbHksIGJ1dCB0aGUgY29yZSBpc3N1ZSBoZXJlIGlzIGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzcywgc28gS0FTQU4gaXMgZGVmaW5pdGVseSB0aGUgdG9vbCBmb3IgdGhlIGpvYi4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIGVsc2UgaW4gdGhlIHBhdGNoIHRvIGJlIGF3YXJlIG9mLiBBaCwgcmlnaHQsIHRoZSBgcHJpdi0mZ3Q7bDRwcm90byAhPSBuZl9jdF9wcm90b251bShjdClgIGNoZWNrLiBUaGF0IHByZXZlbnRzIGF0dGFjaGluZyB0aGUgdGltZW91dCBvYmplY3Qgb2Ygb25lIHByb3RvY29sIHRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IG9mIGFub3RoZXIuIEdvb2QuIFRoaXMgYmxvY2tzIHR5cGUgY29uZnVzaW9uIGFuZCBmdXJ0aGVyIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuCgpPa2F5LCBpcyB0aGVyZSBhbnkgcG9zc2liaWxpdHkgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlPyBJIHJlbWVtYmVyIHRoZSB0aW1lb3V0IG9iamVjdCB2YWx1ZXMgYmVpbmcgcmVhZCBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmssIGFuZCBJIGtub3cgdGhleSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIFdhaXQsIGhvdyBpcyB0aGUgdGltZW91dCBvYmplY3QgaW5pdGlhbGl6ZWQ/IEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IHBvaW50IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkwOTpcdHN0YXRpYyBpbnQgbmZ0X2N0X3RpbWVvdXRfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiA5MTA6XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxuIDkxMTpcdFx0XHRcdFx0ICAgc3RydWN0IG5mdF9vYmplY3QgKm9iailcbiA5MTI6XHR7XG4gOTEzOlx0XHRzdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XG4gOTE0Olx0XHRjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG87XG4gOTE1Olx0XHRzdHJ1Y3QgbmZfY3RfdGltZW91dCAqdGltZW91dDtcbiA5MTY6XHRcdGludCBsM251bSA9IGN0eC1cdTAwM2VmYW1pbHk7XG4gOTE3Olx0XHRfX3U4IGw0bnVtO1xuIDkxODpcdFx0aW50IHJldDtcbiA5MTk6XHRcbiA5MjA6XHRcdGlmICghdGJbTkZUQV9DVF9USU1FT1VUX0w0UFJPVE9dIHx8XG4gOTIxOlx0XHQgICAgIXRiW05GVEFfQ1RfVElNRU9VVF9EQVRBXSlcbiA5MjI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gOTIzOlx0XG4gOTI0Olx0XHRpZiAodGJbTkZUQV9DVF9USU1FT1VUX0wzUFJPVE9dKVxuIDkyNTpcdFx0XHRsM251bSA9IG50b2hzKG5sYV9nZXRfYmUxNih0YltORlRBX0NUX1RJTUVPVVRfTDNQUk9UT10pKTtcbiA5MjY6XHRcbiA5Mjc6XHRcdGw0bnVtID0gbmxhX2dldF91OCh0YltORlRBX0NUX1RJTUVPVVRfTDRQUk9UT10pO1xuIDkyODpcdFx0cHJpdi1cdTAwM2VsNHByb3RvID0gbDRudW07XG4gOTI5Olx0XG4gOTMwOlx0XHRsNHByb3RvID0gbmZfY3RfbDRwcm90b19maW5kKGw0bnVtKTtcbiA5MzE6XHRcbiA5MzI6XHRcdGlmIChsNHByb3RvLVx1MDAzZWw0cHJvdG8gIT0gbDRudW0pIHtcbiA5MzM6XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4gOTM0Olx0XHRcdGdvdG8gZXJyX3Byb3RvX3B1dDtcbiA5MzU6XHRcdH1cbiA5MzY6XHRcbiA5Mzc6XHRcdHRpbWVvdXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmZfY3RfdGltZW91dCkgJiM0MztcbiA5Mzg6XHRcdFx0XHQgIGw0cHJvdG8tXHUwMDNlY3RubF90aW1lb3V0Lm9ial9zaXplLCBHRlBfS0VSTkVMKTtcbiA5Mzk6XHRcdGlmICh0aW1lb3V0ID09IE5VTEwpIHtcbiA5NDA6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiA5NDE6XHRcdFx0Z290byBlcnJfcHJvdG9fcHV0O1xuIDk0MjpcdFx0fVxuIDk0MzpcdFxuIDk0NDpcdFx0cmV0ID0gbmZ0X2N0X3RpbWVvdXRfcGFyc2VfcG9saWN5KFx1MDAyNnRpbWVvdXQtXHUwMDNlZGF0YSwgbDRwcm90bywgY3R4LVx1MDAzZW5ldCxcbiA5NDU6XHRcdFx0XHRcdFx0ICB0YltORlRBX0NUX1RJTUVPVVRfREFUQV0pO1xuIDk0NjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA5NDc6XHRcdFx0Z290byBlcnJfZnJlZV90aW1lb3V0O1xuIDk0ODpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMwMAoJCQkJCQkJb3V0cHV0OiAyMTEKCQkJCQkJCXRob3VnaHRzOiAxMDA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29ubmVjdGlvbiBUcmFja2luZyBUaW1lb3V0IEJ1ZyoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2YgdGhpcyBjb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQgaXNzdWUuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgcHJvYmxlbSBsaWVzIGluIGEgcHJvdG9jb2wgbWlzbWF0Y2ggd2l0aGluIHRoZSB0aW1lb3V0IG9iamVjdC4KCkluaXRpYWxseSwgYG5mdF9jdF90aW1lb3V0X3BhcnNlX3BvbGljeWAgcGFyc2VzIG5ldGxpbmsgYXR0cmlidXRlcyBhbmQgcG9wdWxhdGVzIHRoZSBgdGltZW91dC0mZ3Q7ZGF0YWAgc3RydWN0dXJlLiBJbXBvcnRhbnRseSwgYGt6YWxsb2NgIGlzIHVzZWQsIHNvIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSB6ZXJvZWQsIG1ha2luZyB0aGlzIHN0cmljdGx5IGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4KClRoZSBidWcgc3VyZmFjZXMgYmVjYXVzZSBhIHRpbWVvdXQgb2JqZWN0IGRlc2lnbmVkIGZvciBvbmUgcHJvdG9jb2wgaXMgZ2V0dGluZyBhdHRhY2hlZCB0byBhIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgZm9yIGEgKmRpZmZlcmVudCogcHJvdG9jb2wuIFRoaXMgbGVhZHMgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgdHJpZXMgdG8gYWNjZXNzIHRoZSBgdGltZW91dHNgIGFycmF5IHVzaW5nIGFuIGluZGV4IChgbmV3X3N0YXRlYCkgdGhhdCBleGNlZWRzIHRoZSBib3VuZHMgZGVmaW5lZCBieSB0aGUgdGltZW91dCBvYmplY3QmIzM5O3MgcHJvdG9jb2wuIEl0JiMzOTtzIGEgY2xhc3NpYyBleGFtcGxlIG9mIHJlYWRpbmcgcGFzdCB0aGUgYWxsb2NhdGVkIG1lbW9yeS4gS0FTQU4gc2hvdWxkIGJlIGFibGUgdG8gY2F0Y2ggdGhpcy4KCkkgc3RhcnRlZCBkaWdnaW5nIGRlZXBlciBieSBsb29raW5nIGF0IGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAuIFRoZSBjb2RlIGluY2x1ZGVzIHNldmVyYWwgY2hlY2tzIHVzaW5nIGBwcml2LSZndDtsNHByb3RvYCwgd2hpY2ggaXMgdGhlIHByb3RvY29sIG9mIHRoZSB0aW1lb3V0IG9iamVjdC4gVGhlIG1vc3QgaW1wb3J0YW50IGNoZWNrIGlzIGBwcml2LSZndDtsNHByb3RvICE9IHBrdC0mZ3Q7dHByb3RgLiBXaGlsZSB0aGlzIGNoZWNrcyB0aGF0IHRoZSBwYWNrZXQmIzM5O3MgcHJvdG9jb2wgbWF0Y2hlcyB0aGUgdGltZW91dCBvYmplY3QmIzM5O3MgcHJvdG9jb2wsIEkgdGhvdWdodCBhYm91dCBhIHNwZWNpZmljIGVkZ2UgY2FzZSB3aGVyZSB0aGUgcGFja2V0JiMzOTtzIHByb3RvY29sIGlzIGRpZmZlcmVudCBmcm9tIHRoZSB0cmFja2VkIGNvbm5lY3Rpb24mIzM5O3MgcHJvdG9jb2wsIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBJQ01QIGVycm9ycy4gQSBUQ1AgY29ubmVjdGlvbiBtaWdodCBnZW5lcmF0ZSBhbiBJQ01QIGVycm9yIHBhY2tldC4gSW4gdGhpcyBjYXNlLCBgcGt0LSZndDt0cHJvdGAgaXMgSUNNUCAodGhlIElDTVAgZXJyb3IgcGFja2V0KSwgd2hpbGUgYG5mX2N0X3Byb3RvbnVtKGN0KWAgaXMgVENQICh0aGUgb3JpZ2luYWwgY29ubmVjdGlvbiB0aGF0IGNhdXNlZCB0aGUgSUNNUCBlcnJvcikuCgpUaGUga2V5IGlzIHRoYXQgaWYgYHBrdC0mZ3Q7dHByb3RgIGlzIElDTVAgYW5kIGBwcml2LSZndDtsNHByb3RvYCBpcyBhbHNvIElDTVAsIHRoZSBmaXJzdCBjaGVjayB3aWxsIHBhc3MsIGJ1dCB0aGUgSUNNUCB0aW1lb3V0IG9iamVjdCBpcyBzdGlsbCBhdHRhY2hlZCB0byB0aGUgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkuCgpTbywgaWYgYG5mX2N0X3RpbWVvdXRfZXh0X2FkZGAgaXMgY2FsbGVkIHdpdGggYW4gSUNNUCB0aW1lb3V0IG9iamVjdCAoYHByaXYtJmd0O3RpbWVvdXRgKSBhbmQgYSBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSAoYGN0YCksIHdlJiMzOTtyZSBzZXR0aW5nIHRoZSBzdGFnZSBmb3IgdGhlIGJ1Zy4gTGF0ZXIsIHdoZW4gdGhhdCBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSBwcm9jZXNzZXMgYSAqVENQKiBwYWNrZXQsIGl0IHdpbGwgaW5jb3JyZWN0bHkgYWNjZXNzIHRoZSBJQ01QIHRpbWVvdXQgb2JqZWN0LiBUaGUgSUNNUCB0aW1lb3V0IG9iamVjdCBvbmx5IGhhcyBhIHNtYWxsIHN0YXRlIGFycmF5IChwZXJoYXBzIG9uZSBvciB0d28gZW50cmllcywgZGVmaW5lZCBieSBgSUNNUF9DVF9NQVhgKS4gVGhlIFRDUCBjb25uZWN0aW9uLCBvbiB0aGUgb3RoZXIgaGFuZCwgd2lsbCB0cnkgdG8gYWNjZXNzIHRoZSBhcnJheSB1c2luZyBgVENQX0NPTk5UUkFDS19FU1RBQkxJU0hFRGAgKHdoaWNoIGlzIGxpa2VseSBsYXJnZXIpLgoKVGhpcyBpcyB0aGUgb3V0LW9mLWJvdW5kcyByZWFkISBUaGUgSUNNUCB0aW1lb3V0IG9iamVjdCBnZXRzIGF0dGFjaGVkIHRvIHRoZSBUQ1AgY29ubmVjdGlvbiBlbnRyeSBhbmQgdGhlIFRDUCBlbnRyeSByZWFkcyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIHRpbWVvdXQgb2JqZWN0JiMzOTtzIGRhdGEgYXJyYXkuCgpTaW5jZSB0aGlzIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgS0FTQU4gd2lsbCBkZWZpbml0ZWx5IGNhdGNoIGl0LiBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LCBhcyB3ZSBhcmVuJiMzOTt0IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlOyBga3phbGxvY2AgdG9vayBjYXJlIG9mIHRoYXQuCgpUbyBzdW0gaXQgdXA6CgoxLiAgVGhlIGNydWNpYWwgYHByaXYtJmd0O2w0cHJvdG8gIT0gbmZfY3RfcHJvdG9udW0oY3QpYCBjaGVjayBpcyBtaXNzaW5nLgoyLiAgV2l0aG91dCB0aGUgY2hlY2ssIHRpbWVvdXQgb2JqZWN0cyBvZiBkaWZmZXJlbnQgcHJvdG9jb2xzIGNhbiBiZSBpbmNvcnJlY3RseSBhdHRhY2hlZCB0byBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJpZXMuIElDTVAgZXJyb3IgcGFja2V0cyBhc3NvY2lhdGVkIHdpdGggVENQIGNvbm5lY3Rpb25zIGFyZSBhIGNsYXNzaWMgZXhhbXBsZS4KMy4gIFRoZSBzaXplIG9mIHRoZSB0aW1lb3V0IG9iamVjdCYjMzk7cyBkYXRhIGFycmF5IGRlcGVuZHMgb24gaXRzIHByb3RvY29sIChlLmcuLCBgVURQX1RJTUVPVVRfT0JKX1NJWkVgLCBgVENQX1RJTUVPVVRfT0JKX1NJWkVgKS4KNC4gIFdoZW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgYWNjZXNzZXMgdGhlIGFycmF5IHVzaW5nIGl0cyBvd24gcHJvdG9jb2wmIzM5O3Mgc3RhdGUgaW5kaWNlcywgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGNhbiBvY2N1ciBpZiB0aGUgYXR0YWNoZWQgdGltZW91dCBvYmplY3QgaXMgZGVzaWduZWQgZm9yIGEgcHJvdG9jb2wgd2l0aCBmZXdlciBzdGF0ZXMuCjUuICBUaGlzIGlzIGEgY2xlYW4gb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkuCjYuICBUaGUgdXNlIG9mIGBremFsbG9jYCBuZWdhdGVzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucy4KNy4gIEtBU0FOIGlzIHRoZSBjb3JyZWN0IHRvb2wgdG8gZGV0ZWN0IHRoaXMgb3V0LW9mLWJvdW5kcyByZWFkLgoKVGhlcmVmb3JlLCBJJiMzOTtsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIHdpdGggdGhlIHJlYXNvbmluZyBJJiMzOTt2ZSBsYWlkIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYSB0aW1lb3V0IG9iamVjdCBvZiBvbmUgcHJvdG9jb2wgY291bGQgYmUgYXR0YWNoZWQgdG8gYSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IG9mIGEgZGlmZmVyZW50IHByb3RvY29sLiBUaGlzIGNhbiBvY2N1ciwgZm9yIGV4YW1wbGUsIHdoZW4gYW4gSUNNUCBlcnJvciBwYWNrZXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkuIFRoZSB0aW1lb3V0IG9iamVjdCYjMzk7cyBkYXRhIGFycmF5IGlzIHNpemVkIGFjY29yZGluZyB0byBpdHMgcHJvdG9jb2wgKGUuZy4sIElDTVAgaGFzIGZld2VyIHN0YXRlcyB0aGFuIFRDUCkuIElmIGEgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgdXNlcyBhbiBJQ01QIHRpbWVvdXQgb2JqZWN0LCBpdCB3aWxsIGFjY2VzcyB0aGUgdGltZW91dCBkYXRhIGFycmF5IHVzaW5nIFRDUCBzdGF0ZSBpbmRpY2VzLCByZXN1bHRpbmcgaW4gYW4gb3V0LW9mLWJvdW5kcyByZWFkLlxuXG5UaGlzIHZ1bG5lcmFiaWxpdHkgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhlIHRpbWVvdXQgb2JqZWN0cyBhcmUgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jYCwgZW5zdXJpbmcgdGhleSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBpdCB3aWxsIGVmZmVjdGl2ZWx5IGNhdGNoIHRoaXMgYnVnLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBhIHRpbWVvdXQgb2JqZWN0IG9mIG9uZSBwcm90b2NvbCBjb3VsZCBiZSBhdHRhY2hlZCB0byBhIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgb2YgYSBkaWZmZXJlbnQgcHJvdG9jb2wuIFRoaXMgY2FuIG9jY3VyLCBmb3IgZXhhbXBsZSwgd2hlbiBhbiBJQ01QIGVycm9yIHBhY2tldCBpcyBhc3NvY2lhdGVkIHdpdGggYSBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeS4gVGhlIHRpbWVvdXQgb2JqZWN0JiMzOTtzIGRhdGEgYXJyYXkgaXMgc2l6ZWQgYWNjb3JkaW5nIHRvIGl0cyBwcm90b2NvbCAoZS5nLiwgSUNNUCBoYXMgZmV3ZXIgc3RhdGVzIHRoYW4gVENQKS4gSWYgYSBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSB1c2VzIGFuIElDTVAgdGltZW91dCBvYmplY3QsIGl0IHdpbGwgYWNjZXNzIHRoZSB0aW1lb3V0IGRhdGEgYXJyYXkgdXNpbmcgVENQIHN0YXRlIGluZGljZXMsIHJlc3VsdGluZyBpbiBhbiBvdXQtb2YtYm91bmRzIHJlYWQuXG5cblRoaXMgdnVsbmVyYWJpbGl0eSBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkLiBUaGUgdGltZW91dCBvYmplY3RzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NgLCBlbnN1cmluZyB0aGV5IGFyZSBmdWxseSBpbml0aWFsaXplZCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLQVNBTiBpcyB0aGUgYXBwcm9wcmlhdGUgdG9vbCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYW5kIGl0IHdpbGwgZWZmZWN0aXZlbHkgY2F0Y2ggdGhpcyBidWcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTQ6MjMuMjg5NDE4ODE2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3ODQ0MjI2MTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GVF9DVFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1RJTUVPVVRcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZnRfY3RfdGltZW91dF9vYmpfZXZhbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYSB0aW1lb3V0IG9iamVjdCBvZiBvbmUgcHJvdG9jb2wgY291bGQgYmUgYXR0YWNoZWQgdG8gYSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IG9mIGEgZGlmZmVyZW50IHByb3RvY29sLiBUaGlzIGNhbiBvY2N1ciwgZm9yIGV4YW1wbGUsIHdoZW4gYW4gSUNNUCBlcnJvciBwYWNrZXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkuIFRoZSB0aW1lb3V0IG9iamVjdCdzIGRhdGEgYXJyYXkgaXMgc2l6ZWQgYWNjb3JkaW5nIHRvIGl0cyBwcm90b2NvbCAoZS5nLiwgSUNNUCBoYXMgZmV3ZXIgc3RhdGVzIHRoYW4gVENQKS4gSWYgYSBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSB1c2VzIGFuIElDTVAgdGltZW91dCBvYmplY3QsIGl0IHdpbGwgYWNjZXNzIHRoZSB0aW1lb3V0IGRhdGEgYXJyYXkgdXNpbmcgVENQIHN0YXRlIGluZGljZXMsIHJlc3VsdGluZyBpbiBhbiBvdXQtb2YtYm91bmRzIHJlYWQuXFxuXFxuVGhpcyB2dWxuZXJhYmlsaXR5IGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQuIFRoZSB0aW1lb3V0IG9iamVjdHMgYXJlIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY2AsIGVuc3VyaW5nIHRoZXkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtBU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgaXQgd2lsbCBlZmZlY3RpdmVseSBjYXRjaCB0aGlzIGJ1Zy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBsYXllciA0IHByb3RvY29sIGNoZWNrIHRvIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIFRoaXMgcHJldmVudHMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5J3MgcHJvdG9jb2wgYW5kIHRoZSBjb25maWd1cmVkIHRpbWVvdXQgb2JqZWN0J3MgcHJvdG9jb2wuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKG5mdGFibGVzKSwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBoYW5kbGVzIHZhcmlvdXMgcGFja2V0IGFuZCBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTQ6MjMuMjg5NDI1OTQ2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcxMzg4NzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTM3OWRhYjJiMTEzY2I2NjY1YjJjNmM1M2E0YWRhMGMzMGI0NWY0N1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwMDo1NDoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jIGIvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xcbmluZGV4IDAzYTg4Yzc3ZTBmMDIuLmQ2MThiZmE5NjAyZmEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcXG5AQCAtODg1LDcgKzg4NSw4IEBAIHN0YXRpYyB2b2lkIG5mdF9jdF90aW1lb3V0X29ial9ldmFsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmosXFxuIFxcdGlmIChwcml2LVxcdTAwM2VsNHByb3RvICE9IHBrdC1cXHUwMDNldHByb3QpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGlmICghY3QgfHwgbmZfY3RfaXNfdGVtcGxhdGUoY3QpIHx8IG5mX2N0X2lzX2NvbmZpcm1lZChjdCkpXFxuK1xcdGlmICghY3QgfHwgbmZfY3RfaXNfdGVtcGxhdGUoY3QpIHx8IG5mX2N0X2lzX2NvbmZpcm1lZChjdCkgfHxcXG4rXFx0ICAgIHByaXYtXFx1MDAzZWw0cHJvdG8gIT0gbmZfY3RfcHJvdG9udW0oY3QpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHR0aW1lb3V0ID0gbmZfY3RfdGltZW91dF9maW5kKGN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTQ6MjQuNzYxOTA5MjE2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDM4NzY1ODA1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZUX0NUXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfVElNRU9VVFwiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9jdF90aW1lb3V0X29ial9ldmFsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGxheWVyIDQgcHJvdG9jb2wgY2hlY2sgdG8gYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCBpbiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbS4gVGhpcyBwcmV2ZW50cyBhIG1pc21hdGNoIGJldHdlZW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkncyBwcm90b2NvbCBhbmQgdGhlIGNvbmZpZ3VyZWQgdGltZW91dCBvYmplY3QncyBwcm90b2NvbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAobmZ0YWJsZXMpLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGhhbmRsZXMgdmFyaW91cyBwYWNrZXQgYW5kIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3RhdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5Mzc5ZGFiMmIxMTNjYjY2NjViMmM2YzUzYTRhZGEwYzMwYjQ1ZjQ3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDA6NTQ6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jIGIvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xuaW5kZXggMDNhODhjNzdlMGYwMi4uZDYxOGJmYTk2MDJmYSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcbkBAIC04ODUsNyArODg1LDggQEAgc3RhdGljIHZvaWQgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcbiBcdGlmIChwcml2LVx1MDAzZWw0cHJvdG8gIT0gcGt0LVx1MDAzZXRwcm90KVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoIWN0IHx8IG5mX2N0X2lzX3RlbXBsYXRlKGN0KSB8fCBuZl9jdF9pc19jb25maXJtZWQoY3QpKVxuK1x0aWYgKCFjdCB8fCBuZl9jdF9pc190ZW1wbGF0ZShjdCkgfHwgbmZfY3RfaXNfY29uZmlybWVkKGN0KSB8fFxuK1x0ICAgIHByaXYtXHUwMDNlbDRwcm90byAhPSBuZl9jdF9wcm90b251bShjdCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHRpbWVvdXQgPSBuZl9jdF90aW1lb3V0X2ZpbmQoY3QpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTQ6MjQuNzYxOTExMzQ3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2Mjg2MjU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIG5mdF9jdCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvbmV0ZmlsdGVyL25mdF9jdC5jYC4gU2VlbXMgbGlrZSB0aGUgY3J1eCBvZiB0aGUgY2hhbmdlIGlzIGluIHRoZSBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY2hlY2sgaXMgdHJ5aW5nIHRvIGFjaGlldmUuXG5cbkl0IGFwcGVhcnMgYSBuZXcgY29uZGl0aW9uLCBgcHJpdi1cdTAwM2VsNHByb3RvICE9IG5mX2N0X3Byb3RvbnVtKGN0KWAsIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBleGlzdGluZyBgaWZgIHN0YXRlbWVudDogYGlmICghY3QgfHwgbmZfY3RfaXNfdGVtcGxhdGUoY3QpIHx8IG5mX2N0X2lzX2NvbmZpcm1lZChjdCkpYC4gVGhpcyBpcyBpbnRlcmVzdGluZy4gTGV0IG1lIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGVzZSBleGlzdGluZyBjb25kaXRpb25zIGhhbmRsZS4gUmlnaHQsIHdlJ3JlIHNraXBwaW5nIGV2YWx1YXRpb24gaWYgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgKGBjdGApIGlzIE5VTEwsIGEgdGVtcGxhdGUsIG9yIGNvbmZpcm1lZC4gQWRkaW5nIGEgY2hlY2sgZm9yIHRoZSBMNCBwcm90b2NvbCB0byB0aGlzIHNlZW1zLi4uIHBvdGVudGlhbGx5IHNpZ25pZmljYW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBwcml2LVx1MDAzZWw0cHJvdG9gIGFuZCBgbmZfY3RfcHJvdG9udW0oY3QpYCByZXByZXNlbnQgaW4gdGhpcyBjb250ZXh0LlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBzY2VuYXJpbyBkb2VzIHRoaXMgY29uZGl0aW9uIGFkZHJlc3M/IFdoeSBhcmUgd2UgZXhwbGljaXRseSBjb21wYXJpbmcgdGhlIEw0IHByb3RvY29sIGZyb20gc29tZSBcInByaXZcIiBzdHJ1Y3R1cmUgd2l0aCB0aGUgcHJvdG9jb2wgZXh0cmFjdGVkIGZyb20gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnk/IERvZXMgdGhpcyByZWxhdGUgdG8gcHJvdG9jb2wtc3BlY2lmaWMgdGltZW91dCBiZWhhdmlvcj8gQXJlIHdlIHByZXZlbnRpbmcgYSBjb25mbGljdCBvciBhIG1pc2ludGVycHJldGF0aW9uIG9mIEw0IHByb3RvY29sPyBMb29rcyBsaWtlIEkgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBwcml2YCBhbmQgYGN0YCBtb3JlIHRob3JvdWdobHkuIFRoaXMgY29uZGl0aW9uYWwgZmVlbHMgbGlrZSBpdCdzIGd1YXJkaW5nIGFnYWluc3Qgc29tZSBlZGdlIGNhc2UsIG9yIHBlcmhhcHMgaXQgcHJvdmlkZXMgb3B0aW1pemF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyNSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU0OjI4LjkyNDc3NzI0NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTkxOTQ0MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZnRfY3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTg3MT1zdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtODc1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6ODc2OnN0YXRpYyB2b2lkIG5mdF9jdF90aW1lb3V0X29ial9ldmFsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmosXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy04NzctXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTAwOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9vYmplY3Rfb3BzIG5mdF9jdF90aW1lb3V0X29ial9vcHMgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEwMTEtXFx0LnNpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEwMTI6XFx0LmV2YWxcXHRcXHQ9IG5mdF9jdF90aW1lb3V0X29ial9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTAxMy1cXHQuaW5pdFxcdFxcdD0gbmZ0X2N0X3RpbWVvdXRfb2JqX2luaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU0OjI5LjE0Mzk3NzE1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDQ0Mzk2OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmdW5jdGlvbiBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGlzIHRoZSBldmFsdWF0aW9uIGZ1bmN0aW9uIGZvciB0aGF0IGBuZnRfY3RfdGltZW91dF9vYmpfb3BzYCBvYmplY3Qgd2l0aGluIG5mdGFibGVzLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBcIll1cCwgZGVmaW5pdGVseSByZWFjaGFibGUsIGFuZCB0aGF0IG1lYW5zIGl0J3MgcHJpbWUgcmVhbCBlc3RhdGUgZm9yIGZ1enppbmdcIi4gV2UncmUgdGFsa2luZyBhYm91dCBjb3JlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnVuY3Rpb25hbGl0eSBoZXJlLCBzbyBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBjb3VsZCBoYXZlIHByZXR0eSBzaWduaWZpY2FudCBjb25zZXF1ZW5jZXMuIE5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIGxvY2F0ZSB0aGUgYXNzb2NpYXRlZCBjb25maWcgb3B0aW9uIGluIGBuZnRfY3QuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIHRoaW5nLCBob3cgaXQncyBob29rZWQgaW50byB0aGUgYnVpbGQgcHJvY2Vzcy4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYmUgY3J1Y2lhbCBmb3IgY29udHJvbGxpbmcgdGhlIHRhcmdldCBkdXJpbmcgZnV6emluZywgYW5kIEkga25vdyBJIGNhbiBmaW5kIHdoYXQgSSdtIGxvb2tpbmcgZm9yIHRoZXJlLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NDozMi4yODg0MTk0NDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NTc3NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9jdC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTExPW9iai0kKENPTkZJR19ORlRfTlVNR0VOKVxcdCs9IG5mdF9udW1nZW4ub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTEyOm9iai0kKENPTkZJR19ORlRfQ1QpXFx0XFx0Kz0gbmZ0X2N0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTExMy1vYmotJChDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRClcXHQrPSBuZnRfZmxvd19vZmZsb2FkLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTQ6MzIuNDQ4MDYyNjU1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5MjYzNzczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEZXBlbmRlbmNpZXMgYW5kIHRoZSBgTkZUX0NUYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCBgTkZUX0NUYCwgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gRmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyB0aG9yb3VnaGx5LiBJdCdzIG5vdCBqdXN0IGFib3V0IHRoaXMgb25lIHNldHRpbmcgaW4gaXNvbGF0aW9uOyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgZWNvc3lzdGVtLiBBcmUgdGhlcmUgYW55IG90aGVyIHBhY2thZ2VzIG9yIG1vZHVsZXMgdGhhdCByZWx5IG9uIGBORlRfQ1RgIGJlaW5nIHNldCBpbiBhIHBhcnRpY3VsYXIgd2F5PyBBcmUgdGhlcmUgYW55IGRvd25zdHJlYW0gaW1wbGljYXRpb25zIGlmIGl0J3MgZGlzYWJsZWQgb3IgY29uZmlndXJlZCBkaWZmZXJlbnRseT8gSSBuZWVkIGEgY29tcGxldGUgcGljdHVyZSB0byBhdm9pZCBhbnkgdW5leHBlY3RlZCBpc3N1ZXMgb3IgY29uZmxpY3RzIGZ1cnRoZXIgZG93biB0aGUgbGluZS4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkb2N1bWVudGF0aW9uLCBzZWFyY2ggdGhlIGNvZGViYXNlLCBhbmQgbWF5YmUgZXZlbiBjb25zdWx0IHdpdGggb3RoZXJzIHRvIGNvbmZpcm0gdGhlIGZ1bGwgc2V0IG9mIGRlcGVuZGVuY2llcy4gSXQncyBhYm91dCBlbnN1cmluZyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgYmVmb3JlIHByb2NlZWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNDUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NDozNS40NDA3MDI5MDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMjY2MzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORlRfQ1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ4NT1jb25maWcgTkZUX05VTUdFTlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5MC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDkxOmNvbmZpZyBORlRfQ1RcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDkyLVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU0OjM1LjU3MDk3NDM5M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODE3NDAyNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkluaXRpYWwgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgYmFzZWQgb24gd2hhdCBJJ20gd29ya2luZyB3aXRoLCB0aGUgY29yZSByZXF1aXJlbWVudHMgbG9vayBsaWtlIHRoZXkncmUgZ29pbmcgdG8gaW52b2x2ZSBgTkZUX0NUYCBhbmQgYE5GX0NPTk5UUkFDS2Ag4oCTIHRob3NlIGFyZSBwcmV0dHkgZnVuZGFtZW50YWwgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcsIHdoaWNoIEkgbmVlZC4gSSdtIGFsc28gdGhpbmtpbmcgdGhhdCBgTkZfVEFCTEVTYCB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgaW4gdGhlIG1peCwgZ2l2ZW4gdGhlIGRpcmVjdGlvbiB3ZSdyZSBtb3ZpbmcgaW4gd2l0aCBOZXRmaWx0ZXIuIEl04oCZcyB0aGUgbGlrZWx5IGJhc2UgZGVwZW5kZW5jeS4gVG8gYmUgc3VyZSBhYm91dCB0aGUgYE5GVF9DVGAgZGVwZW5kZW5jeSwgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIHZlcmlmeSBpdHMgaW1wbGljYXRpb25zLiBUaGF0J2xsIGdpdmUgYSBtb3JlIHByZWNpc2UgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBhbmQgYW55IG90aGVyIGtleSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NDozOC42NTI3MTc1ODRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0ODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0ODA6XFx0Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcXG4gNDgxOlxcdFxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XFxcIlxcbiA0ODI6XFx0XFx0aGVscFxcbiA0ODM6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBcXFwibmV0ZGV2XFxcIiB0YWJsZS5cXG4gNDg0OlxcdFxcbiA0ODU6XFx0Y29uZmlnIE5GVF9OVU1HRU5cXG4gNDg2OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlXFxcIlxcbiA0ODc6XFx0XFx0aGVscFxcbiA0ODg6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBudW1iZXIgZ2VuZXJhdG9yIGV4cHJlc3Npb24gdXNlZCB0byBwZXJmb3JtXFxuIDQ4OTpcXHRcXHQgIGluY3JlbWVudGFsIGNvdW50aW5nIGFuZCByYW5kb20gbnVtYmVycyBib3VuZCB0byBhIHVwcGVyIGxpbWl0LlxcbiA0OTA6XFx0XFxuIDQ5MTpcXHRjb25maWcgTkZUX0NUXFxuIDQ5MjpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbiA0OTM6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgY29ubnRyYWNrIG1vZHVsZVxcXCJcXG4gNDk0OlxcdFxcdGhlbHBcXG4gNDk1OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXFxcImN0XFxcIiBleHByZXNzaW9uIHRoYXQgeW91IGNhbiB1c2UgdG8gbWF0Y2hcXG4gNDk2OlxcdFxcdCAgY29ubmVjdGlvbiB0cmFja2luZyBpbmZvcm1hdGlvbiBzdWNoIGFzIHRoZSBmbG93IHN0YXRlLlxcbiA0OTc6XFx0XFxuIDQ5ODpcXHRjb25maWcgTkZUX0VYVEhEUl9EQ0NQXFxuIDQ5OTpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIGV4dGhkciBEQ0NQIHN1cHBvcnQgKERFUFJFQ0FURUQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NDozOC42NTI5NzIxNzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg3NzkwOTUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgRnVuY3Rpb24gZm9yIEFQSSBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIHNvIHRoZSBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGZ1bmN0aW9uIGlzIHRoZSBvbmUgd2UncmUgZm9jdXNpbmcgb24uIEZpcnN0LCBsZXQncyBzZWUgaWYgaXQncyBkZWNsYXJlZCBgc3RhdGljYC4gWXVwLCBpdCBpcy4gVGhhdCdzIGEgcG9pbnQgdG8gY29uc2lkZXIuIEJ1dCBoYW5nIG9uLCBpdCdzIGFzc2lnbmVkIHRvIGAuZXZhbGAgd2l0aGluIGBuZnRfY3RfdGltZW91dF9vYmpfb3BzYC4gQW5kIHRoZSBwcm9tcHQgaXMgdGVsbGluZyBtZSB0byBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeXBvaW50cy5cblxuVGhlIHRoaW5nIGlzLCBzaW5jZSBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciDigJMgYC5ldmFsID0gbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIOKAkyBpdCAqY2FuJ3QqIGJlIGlubGluZWQuIFRoYXQgbWVhbnMgaXQgKndpbGwqIGhhdmUgYSB1bmlxdWUgc3ltYm9sIGFkZHJlc3MsIHdoaWNoIGlzIGdvb2QuIFRoYXQncyBhIGtleSBkZXRhaWwuIFdlIGNvdWxkIGNvbnNpZGVyIGluY2x1ZGluZyBgbmZ0X2N0X3RpbWVvdXRfb2JqX2luaXRgIG9yIGp1c3Qgc3RpY2sgd2l0aCB0aGUgYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYC5cblxuR2l2ZW4gdGhhdCBpdCdzIG5vdCBpbmxpbmVkLCBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGlzIHBlcmZlY3RseSBmaW5lIHRvIGluY2x1ZGUuIFRoZSBuZXh0IHRoaW5nIEkgd2FudCB0byBjaGVjayBpcyBpZiBgTkZfQ09OTlRSQUNLX1RJTUVPVVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHJlcXVpcmVkIGZvciB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDAyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTQ6NDMuNTMwODg1NDkzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzM2MTA1NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZnRfY3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTg3MT1zdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtODc1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6ODc2OnN0YXRpYyB2b2lkIG5mdF9jdF90aW1lb3V0X29ial9ldmFsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmosXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy04NzctXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTAwOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9vYmplY3Rfb3BzIG5mdF9jdF90aW1lb3V0X29ial9vcHMgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEwMTEtXFx0LnNpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEwMTI6XFx0LmV2YWxcXHRcXHQ9IG5mdF9jdF90aW1lb3V0X29ial9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTAxMy1cXHQuaW5pdFxcdFxcdD0gbmZ0X2N0X3RpbWVvdXRfb2JqX2luaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU0OjQzLjgwNDUxNDQxNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTUxNzExMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgZnVuY3Rpb24gd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mdF9jdC5jYCwgcHJlc2VudGVkIGFzIGEgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIG5mdF9jdF90aW1lb3V0X29ial9ldmFsKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgd2l0aGluIHRoZSBOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aW1lb3V0cyBhcmUgaGFuZGxlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbmV3IGZpcmV3YWxsIGZyYW1ld29yay4gU28sIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yICpldmFsdWF0aW5nKiB0aGUgdGltZW91dCBvYmplY3QsIHdoaWNoIG1lYW5zIGl0IGxpa2VseSBkZXRlcm1pbmVzIHRoZSByZWxldmFudCB0aW1lb3V0IGR1cmF0aW9uIGJhc2VkIG9uIHNvbWUgY3JpdGVyaWEuIEkgZXhwZWN0IHRvIHNlZSBhbiBleGFtaW5hdGlvbiBvZiBjb25uZWN0aW9uIHN0YXRlLCBtYXliZSBydWxlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCBvciBldmVuIHNvbWUgZm9ybSBvZiBkeW5hbWljIGFkanVzdG1lbnQuIEl0J3MgdGhlIGNvcmUgbG9naWMgdGhhdCBmaWd1cmVzIG91dCAqd2hlbiogYSBjb25uZWN0aW9uIHNob3VsZCBiZSBjb25zaWRlcmVkIGluYWN0aXZlIGFuZCBwb3RlbnRpYWxseSBjbGVhbmVkIHVwLiBUaGlzIGlzIGEgY3JpdGljYWwgcGllY2UgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlIGluIGEgY29tcGxleCBuZXR3b3JrIHNldHVwLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9uIHRyYWNraW5nIHRhYmxlIGFuZCBob3cgaXQgaW5mbHVlbmNlcyB0aGUgY29ubmVjdGlvbidzIHN0YXRlIHRyYW5zaXRpb25zLiBUaGlzIHNob3VsZCBiZSBhbiBpbnRlcmVzdGluZyBjaHVuayBvZiBjb2RlIHRvIGV4cGxvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MTEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NDo0Ni45NTYyMzAzMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZnRfY3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NjA6XFx0XFx0XFx0XFx0XFx0XFx0ICBOVUxMKTtcXG4gODYxOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA4NjI6XFx0XFx0XFx0Z290byBlcnI7XFxuIDg2MzpcXHRcXG4gODY0OlxcdFxcdHJldCA9IGw0cHJvdG8tXFx1MDAzZWN0bmxfdGltZW91dC5ubGF0dHJfdG9fb2JqKHRiLCBuZXQsIHRpbWVvdXRzKTtcXG4gODY1OlxcdFxcbiA4NjY6XFx0ZXJyOlxcbiA4Njc6XFx0XFx0a2ZyZWUodGIpO1xcbiA4Njg6XFx0XFx0cmV0dXJuIHJldDtcXG4gODY5OlxcdH1cXG4gODcwOlxcdFxcbiA4NzE6XFx0c3RydWN0IG5mdF9jdF90aW1lb3V0X29iaiB7XFxuIDg3MjpcXHRcXHRzdHJ1Y3QgbmZfY3RfdGltZW91dCAgICAqdGltZW91dDtcXG4gODczOlxcdFxcdHU4XFx0XFx0XFx0bDRwcm90bztcXG4gODc0OlxcdH07XFxuIDg3NTpcXHRcXG4gODc2OlxcdHN0YXRpYyB2b2lkIG5mdF9jdF90aW1lb3V0X29ial9ldmFsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmosXFxuIDg3NzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbiA4Nzg6XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbiA4Nzk6XFx0e1xcbiA4ODA6XFx0XFx0Y29uc3Qgc3RydWN0IG5mdF9jdF90aW1lb3V0X29iaiAqcHJpdiA9IG5mdF9vYmpfZGF0YShvYmopO1xcbiA4ODE6XFx0XFx0c3RydWN0IG5mX2Nvbm4gKmN0ID0gKHN0cnVjdCBuZl9jb25uICopc2tiX25mY3QocGt0LVxcdTAwM2Vza2IpO1xcbiA4ODI6XFx0XFx0c3RydWN0IG5mX2Nvbm5fdGltZW91dCAqdGltZW91dDtcXG4gODgzOlxcdFxcdGNvbnN0IHVuc2lnbmVkIGludCAqdmFsdWVzO1xcbiA4ODQ6XFx0XFxuIDg4NTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlbDRwcm90byAhPSBwa3QtXFx1MDAzZXRwcm90KVxcbiA4ODY6XFx0XFx0XFx0cmV0dXJuO1xcbiA4ODc6XFx0XFxuIDg4ODpcXHRcXHRpZiAoIWN0IHx8IG5mX2N0X2lzX3RlbXBsYXRlKGN0KSB8fCBuZl9jdF9pc19jb25maXJtZWQoY3QpIHx8XFxuIDg4OTpcXHRcXHQgICAgcHJpdi1cXHUwMDNlbDRwcm90byAhPSBuZl9jdF9wcm90b251bShjdCkpXFxuIDg5MDpcXHRcXHRcXHRyZXR1cm47XFxuIDg5MTpcXHRcXG4gODkyOlxcdFxcdHRpbWVvdXQgPSBuZl9jdF90aW1lb3V0X2ZpbmQoY3QpO1xcbiA4OTM6XFx0XFx0aWYgKCF0aW1lb3V0KSB7XFxuIDg5NDpcXHRcXHRcXHR0aW1lb3V0ID0gbmZfY3RfdGltZW91dF9leHRfYWRkKGN0LCBwcml2LVxcdTAwM2V0aW1lb3V0LCBHRlBfQVRPTUlDKTtcXG4gODk1OlxcdFxcdFxcdGlmICghdGltZW91dCkge1xcbiA4OTY6XFx0XFx0XFx0XFx0cmVncy1cXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcXG4gODk3OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gODk4OlxcdFxcdFxcdH1cXG4gODk5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTQ6NDYuOTU2MzkzMTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAxODgyNDM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkNvbmRpdGlvbmFsIENvbXBpbGF0aW9uIENvbnVuZHJ1bXM6IG5mdF9jdF90aW1lb3V0X29ial9ldmFsKipcblxuQWxyaWdodCwgSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBhIHF1ZXN0aW9uIGtlZXBzIHBva2luZyBhdCB0aGUgYmFjayBvZiBteSBtaW5kOiBpcyB0aGUgYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCBmdW5jdGlvbiBiZWluZyBjb21waWxlZCBjb25kaXRpb25hbGx5PyBJdCBmZWVscyBsaWtlIGl0ICpzaG91bGRuJ3QqIGJlLCBnaXZlbiBpdHMgbGlrZWx5IGNvcmUgcm9sZSBpbiBjb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXRzLCBidXQgSSd2ZSBsZWFybmVkIHRvIG5ldmVyIGFzc3VtZSBhbnl0aGluZywgZXNwZWNpYWxseSB3aXRoIHRoZSBjb21wbGV4aXRpZXMgb2YgdGhlc2UgbmV0d29ya2luZyBzdGFja3MuIFRoaXMgZnVuY3Rpb24gc2VlbXMgZnVuZGFtZW50YWwsIHNvIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gd291bGQgaW50cm9kdWNlIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkuIFRoZSBwb3NzaWJpbGl0aWVzIGluIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFyZSB2YXN0LCBmcm9tIHNpbXBsZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb3B0aW1pemF0aW9ucyB0byBtdWNoIG1vcmUgaW52b2x2ZWQgZmVhdHVyZSBmbGFncy4gVW5kZXJzdGFuZGluZyB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIGtleSB0byB0cnVseSB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGNvZGUgd29ya3MgaW4gYW55IGdpdmVuIHNjZW5hcmlvLCBzbyBpdCBpcyBzb21ldGhpbmcgSSBtdXN0IGRldGVybWluZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhpcyBpcyBiZWluZyBoYW5kbGVkLCBzbyB0aGF0IEkgZG9uJ3Qgb3Zlcmxvb2sgc29tZSBudWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2ODgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU0OjQ5Ljk3NTIyMDQ0NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MjkyNDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19ORl9DT05OVFJBQ0tfVElNRU9VVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9jdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9ODM2PXN0YXRpYyBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfbm90cmFja190eXBlIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTg0MS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjg0MjojaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19USU1FT1VUXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy04NDMtc3RhdGljIGludFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xMDE4PXN0YXRpYyBzdHJ1Y3QgbmZ0X29iamVjdF90eXBlIG5mdF9jdF90aW1lb3V0X29ial90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEwMjQtfTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEwMjU6I2VuZGlmIC8qIENPTkZJR19ORl9DT05OVFJBQ0tfVElNRU9VVCAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTAyNi1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTM3OT1zdGF0aWMgaW50IF9faW5pdCBuZnRfY3RfbW9kdWxlX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTM5OS1cXHRcXHRnb3RvIGVycjM7XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxNDAwOiNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MDEtXFx0ZXJyID0gbmZ0X3JlZ2lzdGVyX29iaihcXHUwMDI2bmZ0X2N0X3RpbWVvdXRfb2JqX3R5cGUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDA2LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQwNzojaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19USU1FT1VUXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDA4LWVycjQ6XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTE0MjA9c3RhdGljIHZvaWQgX19leGl0IG5mdF9jdF9tb2R1bGVfZXhpdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQyMS17XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxNDIyOiNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MjMtXFx0bmZ0X3VucmVnaXN0ZXJfb2JqKFxcdTAwMjZuZnRfY3RfdGltZW91dF9vYmpfdHlwZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU0OjUwLjE2MTUxODk0M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTcwNTM0ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBDb25uVHJhY2sgVGltZW91dCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIHNlZS4gTXkgaW5pdGlhbCBodW5jaCB3YXMgcmlnaHQ7IHRoZSB0aW1lb3V0IGNvbmZpZ3VyYXRpb24gbXVzdCBiZSB1bmRlciBgQ09ORklHX05GX0NPTk5UUkFDS19USU1FT1VUYC4gTm93LCB0byBjb25maXJtIHRoZSBzcGVjaWZpYyBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMsIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIEtjb25maWcgZm9yIHRoYXQuIExldCdzIHB1bGwgdXAgdGhlIHJlbGV2YW50IHNlY3Rpb24gYW5kIHNlZSB3aGF0IGBORl9DT05OVFJBQ0tfVElNRU9VVGAgcmV2ZWFscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBtb2R1bGVzLCBhbnkgcG90ZW50aWFsIGRlZmF1bHRzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnVuY3Rpb25hbGl0eS4gVGhpcyBjb25maWd1cmF0aW9uIHdpbGwgYmUgY3JpdGljYWwgZm9yIGZpbmUtdHVuaW5nIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDYzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTQ6NTMuMTMyMDU2OTkxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTIzMTQ1MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0NPTk5UUkFDS19USU1FT1VUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xNTc9Y29uZmlnIE5GX0NPTk5UUkFDS19FVkVOVFNcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQnXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU0OjUzLjM0NDQyOTEzNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI4MTg4NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb25zaWRlcmF0aW9ucy5cblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgTmV0d29yayBGZWF0dXJlcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlIGhlcmUsIHdlIGFyZSBsb29raW5nIGF0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB0aGUgZmlyc3QgdGhpbmdzIHRoYXQganVtcCBvdXQgYXJlIHRoZSByZXF1aXJlbWVudHMgZm9yIGBORlRfQ1RgIGFuZCBgTkZfQ09OTlRSQUNLX1RJTUVPVVRgLiBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIGFib3V0IHRob3NlICpkZXBlbmRlbmNpZXMqIG9mIHRoZXNlIG9wdGlvbnMuIFdlIGFsc28gaGF2ZSBgTkZfVEFCTEVTYCBhbmQgYE5GX0NPTk5UUkFDS2AgZmxhZ2dlZCBhcyBkZXBlbmRlbmNpZXMuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBvbiB0aG9zZSBgTkZfQ09OTlRSQUNLX1RJTUVPVVRgIGRlcGVuZGVuY2llcywgYXMgSSBuZWVkIHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCB3aGF0IGVuYWJsZXMgYW5kIHdoYXQgZGVwZW5kcyB1cG9uIGl0LiBXZSBtdXN0IGVuc3VyZSBldmVyeXRoaW5nIGlzIGNvcnJlY3QgYXMgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGNhbiBpbmZsdWVuY2UgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc1OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU0OjU2LjM3MjYyMDU0MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE2NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IGBOJy5cXG4gMTY2OlxcdFxcbiAxNjc6XFx0Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FT1VUXFxuIDE2ODpcXHRcXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0J1xcbiAxNjk6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gMTcwOlxcdFxcdGhlbHBcXG4gMTcxOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBjb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXRcXG4gMTcyOlxcdFxcdCAgZXh0ZW5zaW9uLiBUaGlzIGFsbG93cyB5b3UgdG8gYXR0YWNoIHRpbWVvdXQgcG9saWNpZXMgdG8gZmxvd1xcbiAxNzM6XFx0XFx0ICB2aWEgdGhlIENUIHRhcmdldC5cXG4gMTc0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NDo1Ni4zNzI3ODAwNDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2ODg3ODc4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBgTkVURklMVEVSX0FEVkFOQ0VEYCBkZXBlbmRlbmN5IGhlcmUuIFRoYXQncyB0aGUgYmFzZWxpbmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGxpc3QgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGludm9sdmVkOiBgTkZUX0NUYCwgYE5GX0NPTk5UUkFDS19USU1FT1VUYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9UQUJMRVNgLCBhbmQgYE5GX0NPTk5UUkFDS2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlcnJlbGF0ZSB0byBmdWxseSBncmFzcCB0aGUgY2hhbmdlLlxuXG5NeSBhdHRlbnRpb24gaXMgc3BlY2lmaWNhbGx5IGRyYXduIHRvIHRoZSBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGZ1bmN0aW9uLiBJJ20gYXNzdW1pbmcgdGhpcyBpcyB0aGUga2V5IHN5bWJvbCBpbiB0aGUgcGF0Y2guIFRoZSBmaXJzdCBxdWVzdGlvbiBJIGhhdmUgaXMsIGlzIHRoaXMgZnVuY3Rpb24gKmFjdHVhbGx5KiByZWFjaGFibGU/IFllcywgaXQncyBhbiBuZnRhYmxlcyBvYmplY3QgZXZhbHVhdGlvbiBmdW5jdGlvbi4gVGhhdCB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgY3JpdGljYWwsIGFzIGl0IGlzIGNhbGxlZCB3aGVuIGEgcGFja2V0IGhpdHMgYSBydWxlIHRoYXQgcmVmZXJlbmNlcyB0aGlzIHRpbWVvdXQgb2JqZWN0LCB3aGljaCBpcyBwcmVjaXNlbHkgdGhlIGJlaGF2aW9yIEknZCBleHBlY3QuIFRoZSBwYXRjaCBpcyBpbnRlbmRlZCB0byBmaXggYSBidWcgd2hlcmUgYHByaXYtXHUwMDNlbDRwcm90byAhPSBuZl9jdF9wcm90b251bShjdClgIHdhcyBtaXNzaW5nLiBUaGlzIGlzIGEgY2xlYXIsIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGhvdyB0aW1lb3V0cyBhcmUgaGFuZGxlZCBpbiB0aGUgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgY29kZS5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBiZWNhdXNlIHRoYXQncyB3aGF0IEkgZG8uIEl0IHNlZW1zIGxpa2UgdGhlIHByaW1hcnkgZGVwZW5kZW5jeSBpcyBgTkZUX0NUYCB3aGljaCBuZWVkcyBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX1RBQkxFU2AsIHdoaWNoIEkgYXNzdW1lIGFyZSBpbXBsaWVkIHNpbmNlIGl0IGlzIGluIGFuIGBpZiBORl9UQUJMRVNgIGJsb2NrLiBJIG5lZWQgdG8ga2VlcCB0aGlzIHJlbGF0aW9uc2hpcCBpbiBtaW5kIGFzIEkgZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEzNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU1OjAwLjk0MTY2MTY4MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg4Nzk3NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWYgTkZfVEFCTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDU1PWNvbmZpZyBORl9UQUJMRVNcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3MTppZiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDcyLWNvbmZpZyBORl9UQUJMRVNfSU5FVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTYyNT1jb25maWcgTkZUX1NPQ0tFVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYyNy1cXHRzZWxlY3QgTkZfU09DS0VUX0lQVjRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjI4OlxcdHNlbGVjdCBORl9TT0NLRVRfSVBWNiBpZiBORl9UQUJMRVNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjktXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTY0MD1jb25maWcgTkZUX1RQUk9YWVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY0Mi1cXHRzZWxlY3QgTkZfREVGUkFHX0lQVjRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjQzOlxcdHNlbGVjdCBORl9ERUZSQUdfSVBWNiBpZiBORl9UQUJMRVNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDQtXFx0c2VsZWN0IE5GX1RQUk9YWV9JUFY0XFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY0NTpcXHRzZWxlY3QgTkZfVFBST1hZX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQ2LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDk9Y29uZmlnIE5GVF9TWU5QUk9YWVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY1OS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjYwOmlmIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjYxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NTowMS4wMzA1NDY2MTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM5NTAyMDQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFzb25pbmcgZm9yIEZ1enppbmcgUmVjb21tZW5kYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBORlRfQ1RgICppcyogaW5kZWVkIG5lc3RlZCB3aXRoaW4gYGlmIE5GX1RBQkxFU2AsIHdoaWNoIG1lYW5zIHdlIGRlZmluaXRlbHkgbmVlZCBgTkZfVEFCTEVTYCBjb25maWd1cmVkLiBJJ3ZlIGdvdCBteSBsaXN0IG9mIHJlbGV2YW50IGNvbmZpZ3M6IGBORlRfQ1RgLCBgTkZfQ09OTlRSQUNLX1RJTUVPVVRgLCBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYE5GX1RBQkxFU2AsIGFuZCBgTkZfQ09OTlRSQUNLYC4gVGhlIHByaW1hcnkgZm9jdXMsIGhvd2V2ZXIsIGlzIG9uIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAuXG5cbkxldCBtZSB0aGluay4uLiBpcyB0aGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQncyBjaGFuZ2VkPyBZZXMsIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgaXMgdGhlIG9ubHkgb25lIG1vZGlmaWVkLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gTm93LCBpcyBpdCAqc3RhdGljKj8gT2theSwgeWVzLCBpdCBpcy4gQnV0LCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtZWFucyBpdCB3b24ndCBnZXQgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFNvLCB3aGlsZSBpdCdzIHN0YXRpYyBpbiB0aGUgc291cmNlLCBpdCdsbCBzdGlsbCBoYXZlIGl0cyBvd24gZGlzdGluY3Qgc3ltYm9sLiBJIGRvbid0IG5lZWQgdG8gY29uc2lkZXIgYW55IHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyBsaWtlIGBuZnRfY3RfdGltZW91dF9vYmpfaW5pdGAgb3IgYG5mdF9jdF9ldmFsYDsgYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCBpcyB0aGUga2V5LiBUaGUgY29tcGlsZXIgd29uJ3Qgb3B0aW1pemUgaXQgYXdheS5cblxuUmlnaHQsIGxldCBtZSBzb2xpZGlmeSBteSByZWFzb25pbmcuIFRoZSBwYXRjaCBpcyBhZGRpbmcgYSBjaGVjayB3aXRoaW4gYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCBpbiBgbmV0L25ldGZpbHRlci9uZnRfY3QuY2A6IHNwZWNpZmljYWxseSwgYHByaXYtXHUwMDNlbDRwcm90byAhPSBuZl9jdF9wcm90b251bShjdClgLiBUaGlzIHByZXZlbnRzIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBsYXllciA0IHByb3RvY29sIG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IGRvZXNuJ3QgbWF0Y2ggdGhlIG9uZSBjb25maWd1cmVkIGluIHRoZSB0aW1lb3V0IG9iamVjdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbSwgYW5kIGNyaXRpY2FsbHksIGl0J3MgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIG5mdGFibGVzIHJ1bGVzLiBUaGVyZWZvcmUsIGZ1enppbmcgaXMgKmhpZ2hseSogcmVjb21tZW5kZWQgaGVyZS4gV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGlzIG5ldyBjaGVjayBjb3JyZWN0bHkgaGFuZGxlcyBhIHdpZGUgcmFuZ2Ugb2YgcGFja2V0IGFuZCBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRlcy4gV2Ugd2FudCB0byBpZGVudGlmeSBhbnkgZWRnZSBjYXNlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW91cnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNzEsIk91dHB1dFRva2VucyI6MTU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU1OjA4LjQyNTU3MDQ2M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjkxNDEwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZUX0NUXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfVElNRU9VVFwiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9jdF90aW1lb3V0X29ial9ldmFsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGxheWVyIDQgcHJvdG9jb2wgY2hlY2sgdG8gYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCBpbiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbS4gVGhpcyBwcmV2ZW50cyBhIG1pc21hdGNoIGJldHdlZW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkncyBwcm90b2NvbCBhbmQgdGhlIGNvbmZpZ3VyZWQgdGltZW91dCBvYmplY3QncyBwcm90b2NvbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAobmZ0YWJsZXMpLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGhhbmRsZXMgdmFyaW91cyBwYWNrZXQgYW5kIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3RhdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GVF9DVFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1RJTUVPVVRcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZnRfY3RfdGltZW91dF9vYmpfZXZhbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBsYXllciA0IHByb3RvY29sIGNoZWNrIHRvIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIFRoaXMgcHJldmVudHMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5J3MgcHJvdG9jb2wgYW5kIHRoZSBjb25maWd1cmVkIHRpbWVvdXQgb2JqZWN0J3MgcHJvdG9jb2wuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKG5mdGFibGVzKSwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBoYW5kbGVzIHZhcmlvdXMgcGFja2V0IGFuZCBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTU6MDguNjM4NDk0NjY5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQ5NTEwNjUxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU1OjA4LjYzOTM1MzE0OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MjQ5NDI0MjczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYSB0aW1lb3V0IG9iamVjdCBvZiBvbmUgcHJvdG9jb2wgY291bGQgYmUgYXR0YWNoZWQgdG8gYSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IG9mIGEgZGlmZmVyZW50IHByb3RvY29sLiBUaGlzIGNhbiBvY2N1ciwgZm9yIGV4YW1wbGUsIHdoZW4gYW4gSUNNUCBlcnJvciBwYWNrZXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkuIFRoZSB0aW1lb3V0IG9iamVjdCdzIGRhdGEgYXJyYXkgaXMgc2l6ZWQgYWNjb3JkaW5nIHRvIGl0cyBwcm90b2NvbCAoZS5nLiwgSUNNUCBoYXMgZmV3ZXIgc3RhdGVzIHRoYW4gVENQKS4gSWYgYSBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSB1c2VzIGFuIElDTVAgdGltZW91dCBvYmplY3QsIGl0IHdpbGwgYWNjZXNzIHRoZSB0aW1lb3V0IGRhdGEgYXJyYXkgdXNpbmcgVENQIHN0YXRlIGluZGljZXMsIHJlc3VsdGluZyBpbiBhbiBvdXQtb2YtYm91bmRzIHJlYWQuXFxuXFxuVGhpcyB2dWxuZXJhYmlsaXR5IGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQuIFRoZSB0aW1lb3V0IG9iamVjdHMgYXJlIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY2AsIGVuc3VyaW5nIHRoZXkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtBU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgaXQgd2lsbCBlZmZlY3RpdmVseSBjYXRjaCB0aGlzIGJ1Zy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDkzNzlkYWIyYjExM2NiNjY2NWIyYzZjNTNhNGFkYTBjMzBiNDVmNDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwMDo1NDoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG5pbmRleCAwM2E4OGM3N2UwZjAyLi5kNjE4YmZhOTYwMmZhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xuQEAgLTg4NSw3ICs4ODUsOCBAQCBzdGF0aWMgdm9pZCBuZnRfY3RfdGltZW91dF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxuIFx0aWYgKHByaXYtXHUwMDNlbDRwcm90byAhPSBwa3QtXHUwMDNldHByb3QpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmICghY3QgfHwgbmZfY3RfaXNfdGVtcGxhdGUoY3QpIHx8IG5mX2N0X2lzX2NvbmZpcm1lZChjdCkpXG4rXHRpZiAoIWN0IHx8IG5mX2N0X2lzX3RlbXBsYXRlKGN0KSB8fCBuZl9jdF9pc19jb25maXJtZWQoY3QpIHx8XG4rXHQgICAgcHJpdi1cdTAwM2VsNHByb3RvICE9IG5mX2N0X3Byb3RvbnVtKGN0KSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0dGltZW91dCA9IG5mX2N0X3RpbWVvdXRfZmluZChjdCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NTowOC42MzkzNTUxNjhaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU1NzkxNzU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXRmaWx0ZXIgUGF0Y2ggZm9yIENvbm5lY3Rpb24gVHJhY2tpbmcgVGltZW91dHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L25ldGZpbHRlci9uZnRfY3QuY2AuIEl0J3MgdG91Y2hpbmcgYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFJpZ2h0IGF3YXksIEkgc2VlIHRoZSBjb3JlIGNoYW5nZSBpcyBhZGRpbmcgYSBjaGVjazogYHByaXYtXHUwMDNlbDRwcm90byAhPSBuZl9jdF9wcm90b251bShjdClgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBtdXN0IGJlIGEgYnVnIGZpeC4gSXQgc2VlbXMgbGlrZSBpdCdzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgcHJvdG9jb2wgbWlzbWF0Y2ggYmV0d2VlbiB3aGF0IHRoZSB0aW1lb3V0IG9iamVjdCAqdGhpbmtzKiBpdCBzaG91bGQgaGFuZGxlLCBhbmQgd2hhdCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSBpcyBhY3R1YWxseSBoYW5kbGluZy5cblxuTGV0J3MgZXhhbWluZSB0aGUgY29kZSBzbmlwcGV0LiBUaGUgcGF0Y2ggYWRkcyB0aGlzIGNvbmRpdGlvbiB3aXRoaW4gdGhlIGBpZmAgc3RhdGVtZW50LCBlZmZlY3RpdmVseSBzaG9ydC1jaXJjdWl0aW5nIHRoZSB0aW1lb3V0IGxvb2t1cC4gQmVmb3JlIHRoaXMgY2hhbmdlLCB0aGUgYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCB3b3VsZCBwcm9jZWVkIHRvIGxvb2sgZm9yIGEgdGltZW91dCBvYmplY3QgdXNpbmcgYG5mX2N0X3RpbWVvdXRfZmluZChjdClgIGlmIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IHdhc24ndCBhIHRlbXBsYXRlIG9yIGFscmVhZHkgY29uZmlybWVkLiBOb3csIGlmIGBwcml2LVx1MDAzZWw0cHJvdG9gIGRvZXNuJ3QgYWxpZ24gd2l0aCBgbmZfY3RfcHJvdG9udW0oY3QpYCAsIGl0IGJhaWxzIG91dCBlYXJseS5cblxuRGlnZ2luZyBkZWVwZXIsIEkgc2VlIGBwcml2YCBpcyBhIGBzdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqICpgIG9idGFpbmVkIHRocm91Z2ggYG5mdF9vYmpfZGF0YShvYmopYC4gU28gYHByaXZgIGhvbGRzIHRoZSB0aW1lb3V0IG9iamVjdCdzIHByaXZhdGUgZGF0YS4gVGhpcyBtYWtlcyBtZSBjb25zaWRlcjogd2hhdCBoYXBwZW5zIGlmIHRoZSB0aW1lb3V0IG9iamVjdCBpcyBzZXQgdXAgZm9yLCBzYXksIFRDUCwgYnV0IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IGVuZHMgdXAgYmVpbmcgVURQPyBUaGF0IGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHByb2JsZW1zIOKAkyBwb3RlbnRpYWxseSBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIGV2ZW4gdHlwZSBjb25mdXNpb24gaWYgdGhlIHRpbWVvdXQgb2JqZWN0IGFjY2Vzc2VzIGRhdGEgaW5jb3JyZWN0bHkgYmVjYXVzZSBvZiBhIHByb3RvY29sIG1pc21hdGNoLiBUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIHNwZWNpZmljYWxseSBwcmV2ZW50aW5nIHRoYXQuXG5cbkFuZCwgYXMgYSBmaW5hbCB2ZXJpZmljYXRpb24sIEkgbmVlZCB0byBjb25maXJtOiBgbmZfY3RfdGltZW91dF9maW5kKGN0KWAgcmV0dXJucyB0aGUgdGltZW91dCBvYmplY3QgKmFzc29jaWF0ZWQqIHdpdGggdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkuIFRoaXMgcmVpbmZvcmNlcyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcm9ibGVtIGFuZCB0aGUgcHVycG9zZSBvZiB0aGUgZml4LiBJdCdzIGEgc29saWQgZGVmZW5zZSBhZ2FpbnN0IHRoZXNlIHBvdGVudGlhbGx5IHNlcmlvdXMsIHN1YnRsZSBidWdzIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU1OjE1LjE5NzI3NjYyM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2NzkyNTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9jdF90aW1lb3V0X29ial9ldmFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZnRfY3QuYz04NzE9c3RydWN0IG5mdF9jdF90aW1lb3V0X29iaiB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTg3NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjg3NjpzdGF0aWMgdm9pZCBuZnRfY3RfdGltZW91dF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtODc3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTEwMDk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfb2JqZWN0X29wcyBuZnRfY3RfdGltZW91dF9vYmpfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMDExLVxcdC5zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IG5mdF9jdF90aW1lb3V0X29iaiksXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMDEyOlxcdC5ldmFsXFx0XFx0PSBuZnRfY3RfdGltZW91dF9vYmpfZXZhbCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEwMTMtXFx0LmluaXRcXHRcXHQ9IG5mdF9jdF90aW1lb3V0X29ial9pbml0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NToxNS40MDQwNzQ0NTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNDk5OTI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggY29kZSBhbmQgcHJvYmFibHkgd29ya2luZyBvbiBhIHN5c3RlbSBpbnZvbHZpbmcgTkZUcyBhbmQgcG90ZW50aWFsIHRpbWVvdXRzOlxuXG4qKkFuYWx5emluZyBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAgZnVuY3Rpb24uIFRoZSBuYW1pbmcgc3VnZ2VzdHMgaXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIGNvZGUgcmVsYXRlZCB0byBOZXR3b3JrIEZpbHRlciAobmZ0KSBjb25uZWN0aW9uIHRyYWNraW5nIChjdCkgYW5kIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggdGhlIGV2YWx1YXRpb24gb2YgdGltZW91dCBvYmplY3RzLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGxpa2VseSBpbiBhIHBhcnQgb2YgdGhlIHN5c3RlbSB0aGF0IG1hbmFnZXMgY29ubmVjdGlvbiBzdGF0ZSBhbmQgaG93IGxvbmcgdGhvc2Ugc3RhdGVzIHBlcnNpc3QgYmVmb3JlIGJlaW5nIGNvbnNpZGVyZWQgc3RhbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMsIGJlY2F1c2UgdGltZW91dCBjb25maWd1cmF0aW9ucyBhcmUgYSBrZXkgcGFydCBvZiBwcmV2ZW50aW5nIHJlc291cmNlIGV4aGF1c3Rpb24gYW5kIGVuc3VyaW5nIHRoZSBlZmZpY2llbnQgZnVuY3Rpb25pbmcgb2YgdGhlIG5ldHdvcmsuIEdpdmVuIHRoYXQgXCJuZnRcIiBhbmQgXCJjdFwiIGFyZSBwcmVzZW50LCBJIGFudGljaXBhdGUgaXQgd2lsbCBiZSBpbnZvbHZlZCB3aXRoIGEgTmV0ZmlsdGVyIGNvbXBvbmVudCB0aGF0IHRyYWNrcyBjb25uZWN0aW9uIHN0YXRlcywgYW5kIHByb2JhYmx5IHRoZSB0aW1lb3V0IHRoYXQgaXMgc2V0IGZvciBpdCwgcmVsYXRpbmcgdG8gTkZUcy4gTXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgY29kZSBtZWFucyBJIHdpbGwgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGFzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaXMgYSB2ZXJ5IHRlbXB0aW5nIHRhcmdldCBmb3IgRE9TLCBhbmQgTkZUcyBsaWtlbHkgaGF2ZSB0aGVpciBvd24sIHNwZWNpYWwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgaGVyZS4gTGV0J3Mgc2VlIGhvdyBpdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU1OjE4LjYxOTA3OTI3MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZnRfY3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NzA6XFx0XFxuIDg3MTpcXHRzdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqIHtcXG4gODcyOlxcdFxcdHN0cnVjdCBuZl9jdF90aW1lb3V0ICAgICp0aW1lb3V0O1xcbiA4NzM6XFx0XFx0dThcXHRcXHRcXHRsNHByb3RvO1xcbiA4NzQ6XFx0fTtcXG4gODc1OlxcdFxcbiA4NzY6XFx0c3RhdGljIHZvaWQgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcXG4gODc3OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuIDg3ODpcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuIDg3OTpcXHR7XFxuIDg4MDpcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XFxuIDg4MTpcXHRcXHRzdHJ1Y3QgbmZfY29ubiAqY3QgPSAoc3RydWN0IG5mX2Nvbm4gKilza2JfbmZjdChwa3QtXFx1MDAzZXNrYik7XFxuIDg4MjpcXHRcXHRzdHJ1Y3QgbmZfY29ubl90aW1lb3V0ICp0aW1lb3V0O1xcbiA4ODM6XFx0XFx0Y29uc3QgdW5zaWduZWQgaW50ICp2YWx1ZXM7XFxuIDg4NDpcXHRcXG4gODg1OlxcdFxcdGlmIChwcml2LVxcdTAwM2VsNHByb3RvICE9IHBrdC1cXHUwMDNldHByb3QpXFxuIDg4NjpcXHRcXHRcXHRyZXR1cm47XFxuIDg4NzpcXHRcXG4gODg4OlxcdFxcdGlmICghY3QgfHwgbmZfY3RfaXNfdGVtcGxhdGUoY3QpIHx8IG5mX2N0X2lzX2NvbmZpcm1lZChjdCkgfHxcXG4gODg5OlxcdFxcdCAgICBwcml2LVxcdTAwM2VsNHByb3RvICE9IG5mX2N0X3Byb3RvbnVtKGN0KSlcXG4gODkwOlxcdFxcdFxcdHJldHVybjtcXG4gODkxOlxcdFxcbiA4OTI6XFx0XFx0dGltZW91dCA9IG5mX2N0X3RpbWVvdXRfZmluZChjdCk7XFxuIDg5MzpcXHRcXHRpZiAoIXRpbWVvdXQpIHtcXG4gODk0OlxcdFxcdFxcdHRpbWVvdXQgPSBuZl9jdF90aW1lb3V0X2V4dF9hZGQoY3QsIHByaXYtXFx1MDAzZXRpbWVvdXQsIEdGUF9BVE9NSUMpO1xcbiA4OTU6XFx0XFx0XFx0aWYgKCF0aW1lb3V0KSB7XFxuIDg5NjpcXHRcXHRcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xcbiA4OTc6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA4OTg6XFx0XFx0XFx0fVxcbiA4OTk6XFx0XFx0fVxcbiA5MDA6XFx0XFxuIDkwMTpcXHRcXHQvKiBhZGp1c3QgdGhlIHRpbWVvdXQgYXMgcGVyICduZXcnIHN0YXRlLiBjdCBpcyB1bmNvbmZpcm1lZCxcXG4gOTAyOlxcdFxcdCAqIHNvIHRoZSBjdXJyZW50IHRpbWVzdGFtcCBtdXN0IG5vdCBiZSBhZGRlZC5cXG4gOTAzOlxcdFxcdCAqL1xcbiA5MDQ6XFx0XFx0dmFsdWVzID0gbmZfY3RfdGltZW91dF9kYXRhKHRpbWVvdXQpO1xcbiA5MDU6XFx0XFx0aWYgKHZhbHVlcylcXG4gOTA2OlxcdFxcdFxcdG5mX2N0X3JlZnJlc2goY3QsIHZhbHVlc1swXSk7XFxuIDkwNzpcXHR9XFxuIDkwODpcXHRcXG4gOTA5OlxcdHN0YXRpYyBpbnQgbmZ0X2N0X3RpbWVvdXRfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gOTEwOlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbiA5MTE6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9vYmplY3QgKm9iailcXG4gOTEyOlxcdHtcXG4gOTEzOlxcdFxcdHN0cnVjdCBuZnRfY3RfdGltZW91dF9vYmogKnByaXYgPSBuZnRfb2JqX2RhdGEob2JqKTtcXG4gOTE0OlxcdFxcdGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbDRwcm90bztcXG4gOTE1OlxcdFxcdHN0cnVjdCBuZl9jdF90aW1lb3V0ICp0aW1lb3V0O1xcbiA5MTY6XFx0XFx0aW50IGwzbnVtID0gY3R4LVxcdTAwM2VmYW1pbHk7XFxuIDkxNzpcXHRcXHRfX3U4IGw0bnVtO1xcbiA5MTg6XFx0XFx0aW50IHJldDtcXG4gOTE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NToxOC42MTkyNTcyNDFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MTg4MTYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBQcm90b2NvbCBNaXNtYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYnVnIGZpeCwgYW5kIGl0IHNlZW1zIHRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYSBjaGVjaywgc3BlY2lmaWNhbGx5IGBwcml2LVx1MDAzZWw0cHJvdG8gIT0gbmZfY3RfcHJvdG9udW0oY3QpYCwgd2FzIG1pc3NpbmcuIFJpZ2h0LCBzbyBpZiB0aG9zZSBhcmVuJ3QgZXF1YWwg4oCTIG1lYW5pbmcgdGhlIGV4cGVjdGVkIExheWVyIDQgcHJvdG9jb2wgKGBwcml2LVx1MDAzZWw0cHJvdG9gKSBkb2Vzbid0IG1hdGNoIHRoZSBvbmUgdGhlIGNvbm5lY3Rpb24gdHJhY2tlciAoYGN0YCkgYWN0dWFsbHkgc2VlcyDigJMgdGhlbiB3ZSdyZSBzdXBwb3NlZCB0byBjYWxsIGBuZl9jdF90aW1lb3V0X2V4dF9hZGRgIHdpdGggYHByaXYtXHUwMDNldGltZW91dGAuIEFuZCBgcHJpdi1cdTAwM2V0aW1lb3V0YCwgdGhhdCdzIGEgdGltZW91dCBvYmplY3Qgc3BlY2lmaWMgdG8gYHByaXYtXHUwMDNlbDRwcm90b2AuXG5cbldhaXQgYSBzZWNvbmTigKYgbGV0IG1lIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSB0aGlzIHN0cmFpZ2h0LiBUaGUgZnVuY3Rpb24gYG5mX2N0X3RpbWVvdXRfZXh0X2FkZGAgdGFrZXMgdGhlIGNvbm5lY3Rpb24gdHJhY2tlciAoYGN0YCkgKmFuZCogdGhlIHRpbWVvdXQgb2JqZWN0IChgcHJpdi1cdTAwM2V0aW1lb3V0YCkuIE9rYXksIHRoYXQgc2VlbXMgcmlnaHQgc28gZmFyLiBOb3csIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgdGhhdCBmdW5jdGlvbiBgbmZfY3RfdGltZW91dF9leHRfYWRkYCBkb2VzLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGl0IHRvIG1ha2Ugc3VyZSB0aGUgbG9naWMgdGhlcmUgaXMgc291bmQgaW4gdGhpcyBzY2VuYXJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE3NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU1OjIyLjQxMTE0MzI0NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxMDM3Njc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jdF90aW1lb3V0X2V4dF9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oPTY4PXN0YXRpYyBpbmxpbmVcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaDo2OTpzdHJ1Y3QgbmZfY29ubl90aW1lb3V0ICpuZl9jdF90aW1lb3V0X2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTcwLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZl9jdF90aW1lb3V0ICp0aW1lb3V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jPTE3NTQ9aW5pdF9jb25udHJhY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xNzg3LVxcdGlmICh0aW1lb3V0X2V4dClcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MTc4ODpcXHRcXHRuZl9jdF90aW1lb3V0X2V4dF9hZGQoY3QsIHJjdV9kZXJlZmVyZW5jZSh0aW1lb3V0X2V4dC1cXHUwMDNldGltZW91dCksXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTE3ODktXFx0XFx0XFx0XFx0ICAgICAgR0ZQX0FUT01JQyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmM9Nzk9aW50IG5mX2N0X3NldF90aW1lb3V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5jLTEyMi1cXHR9XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5jOjEyMzpcXHR0aW1lb3V0X2V4dCA9IG5mX2N0X3RpbWVvdXRfZXh0X2FkZChjdCwgdGltZW91dCwgR0ZQX0FUT01JQyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5jLTEyNC1cXHRpZiAoIXRpbWVvdXRfZXh0KSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTg3Nj1zdGF0aWMgdm9pZCBuZnRfY3RfdGltZW91dF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy04OTMtXFx0aWYgKCF0aW1lb3V0KSB7XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzo4OTQ6XFx0XFx0dGltZW91dCA9IG5mX2N0X3RpbWVvdXRfZXh0X2FkZChjdCwgcHJpdi1cXHUwMDNldGltZW91dCwgR0ZQX0FUT01JQyk7XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy04OTUtXFx0XFx0aWYgKCF0aW1lb3V0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU1OjI2LjgyMTUyNTU2NFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjgzNzE1MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcywgYXMgdGhvdWdoIHRoZXNlIGFyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYG5mX2N0X3RpbWVvdXRfZXh0X2FkZGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcm5hbCB3b3JraW5ncyBvZiBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBzcGVjaWZpY2FsbHkgdGhlIHRpbWVvdXQgZXh0ZW5zaW9uIG1lY2hhbmlzbSBpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gU28sIG15IGZpcnN0IHN0ZXAgaXMgdG8gbG9jYXRlIGFuZCByZWFkIHRoZSBgbmZfY3RfdGltZW91dF9leHRfYWRkYCBmdW5jdGlvbiBkZWNsYXJhdGlvbi4gVGhlIHBhdGggc3VnZ2VzdHMgaXQncyBsaWtlbHkgZGVmaW5lZCB3aXRoaW4gdGhlIGNvcmUgTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgY29tcG9uZW50cywgc3BlY2lmaWNhbGx5IGluIGBpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaGAuIExldCdzIHNlZSB3aGF0IHRoYXQgaGVhZGVyIGZpbGUgcmV2ZWFscyBhYm91dCB0aGUgc3RydWN0dXJlIGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uIEknbSBob3BpbmcgaXQgY2xlYXJseSBvdXRsaW5lcyB0aGUgcGFyYW1ldGVycywgcmV0dXJuIHZhbHVlLCBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIGFkZGluZyBhIHRpbWVvdXQgZXh0ZW5zaW9uIHRvIGEgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeS4gVW5kZXJzdGFuZGluZyB0aGUgc2lnbmF0dXJlIGFuZCBzdXJyb3VuZGluZyBjb21tZW50cyB3aWxsIGJlIGNydWNpYWwgdG8gZ3Jhc3BpbmcgaXRzIGludGVuZGVkIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBicm9hZGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGlmZWN5Y2xlLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBjdXN0b20gdGltZW91dCBydWxlcyBhcmUgaW5qZWN0ZWQgaW50byBhIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwODUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NTozMC4xMDUyNDM5MTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDY1OlxcdCNlbmRpZlxcbiAgNjY6XFx0fVxcbiAgNjc6XFx0XFxuICA2ODpcXHRzdGF0aWMgaW5saW5lXFxuICA2OTpcXHRzdHJ1Y3QgbmZfY29ubl90aW1lb3V0ICpuZl9jdF90aW1lb3V0X2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbiAgNzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5mX2N0X3RpbWVvdXQgKnRpbWVvdXQsXFxuICA3MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBnZnBfdCBnZnApXFxuICA3MjpcXHR7XFxuICA3MzpcXHQjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19USU1FT1VUXFxuICA3NDpcXHRcXHRzdHJ1Y3QgbmZfY29ubl90aW1lb3V0ICp0aW1lb3V0X2V4dDtcXG4gIDc1OlxcdFxcbiAgNzY6XFx0XFx0aWYgKCF0aW1lb3V0KVxcbiAgNzc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdHRpbWVvdXRfZXh0ID0gbmZfY3RfZXh0X2FkZChjdCwgTkZfQ1RfRVhUX1RJTUVPVVQsIGdmcCk7XFxuICA4MDpcXHRcXHRpZiAoIXRpbWVvdXRfZXh0IHx8IHRpbWVvdXRfZXh0LVxcdTAwM2V0aW1lb3V0KVxcbiAgODE6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA4MjpcXHRcXG4gIDgzOlxcdFxcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFxcdTAwMjZ0aW1lb3V0LVxcdTAwM2VyZWZjbnQpKVxcbiAgODQ6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU1OjMwLjEwNTM0OTMwMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDYyMTgxODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvbm5lY3Rpb24gVHJhY2tpbmcgVGltZW91dCBCdWcqKlxuXG5Pa2F5LCBzbyBgbmZfY3RfdGltZW91dF9leHRfYWRkYCBpcyBqdXN0IHRhY2tpbmcgYSB0aW1lb3V0IGV4dGVuc2lvbiBvbnRvIGEgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeS4gVGhlIHF1ZXN0aW9uIGlzLCBpZiB0aGUgcHJvdG9jb2wgb2YgdGhlIHRpbWVvdXQgb2JqZWN0IChgcHJpdi1cdTAwM2VsNHByb3RvYCkgZG9lc24ndCBtYXRjaCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSdzIHByb3RvY29sIChgbmZfY3RfcHJvdG9udW0oY3QpYCksIHdoZXJlJ3MgdGhlIHZ1bG5lcmFiaWxpdHk/IEFoLCB0aGUgcHJvYmxlbSBpcyB0aGUgKm1pc21hdGNoKiBiZXR3ZWVuIHRoZSB0aW1lb3V0IG9iamVjdCdzIHByb3RvY29sIGFuZCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSdzIHByb3RvY29sLiBUaGUgc3lzdGVtIGNvdWxkIGluY29ycmVjdGx5IGFzc3VtZSB0aGUgdGltZW91dCBvYmplY3QgaXMgcmVsZXZhbnQgZm9yIHRoZSBlbnRyeSdzIHByb3RvY29sLiBUaGlzIHNlZW1zIGRhbmdlcm91cyBnaXZlbiBUQ1AgYW5kIFVEUCB0aW1lb3V0cyBoYXZlIGRpc3RpbmN0IGRhdGEgc3RydWN0dXJlcy5cblxuTGV0J3MgdHJhY2UgaG93IGBuZl9jdF90aW1lb3V0X2RhdGEodGltZW91dClgIGlzIHVzZWQuIExvb2tpbmcgYXQgYG5mdF9jdF90aW1lb3V0X29ial9ldmFsYCwgSSBzZWU6XG5cbmBgYGNcblx0dmFsdWVzID0gbmZfY3RfdGltZW91dF9kYXRhKHRpbWVvdXQpO1xuXHRpZiAodmFsdWVzKVxuXHRcdG5mX2N0X3JlZnJlc2goY3QsIHZhbHVlc1swXSk7XG5gYGBcblxuUmlnaHQsIGB2YWx1ZXNbMF1gIHNpbXBseSBwb2ludHMgdG8gdGhlIGZpcnN0IHRpbWVvdXQgdmFsdWUuIEJ1dCB3aGF0IGlmIHRoYXQgdGltZW91dCBvYmplY3QgaXMgdXNlZCBvdXRzaWRlIHRoaXMgcGFydGljdWxhciBldmFsdWF0aW9uPyBXZSBuZWVkIHRvIHZlcmlmeSBhbGwgaW5zdGFuY2VzIG9mIGBuZl9jdF90aW1lb3V0X2RhdGFgIHVzYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjU2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTU6MzQuNTY3NTM0NDk4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTgwMTA2OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2N0X3RpbWVvdXRfZGF0YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg9NDI9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgKlxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oOjQzOm5mX2N0X3RpbWVvdXRfZGF0YShjb25zdCBzdHJ1Y3QgbmZfY29ubl90aW1lb3V0ICp0KVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTQ0LXtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oPTk0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50ICpuZl9jdF90aW1lb3V0X2xvb2t1cChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC0xMDEtXFx0aWYgKHRpbWVvdXRfZXh0IFxcdTAwMjZcXHUwMDI2IHJjdV9hY2Nlc3NfcG9pbnRlcih0aW1lb3V0X2V4dC1cXHUwMDNldGltZW91dCkpXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg6MTAyOlxcdFxcdHRpbWVvdXRzID0gbmZfY3RfdGltZW91dF9kYXRhKHRpbWVvdXRfZXh0KTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC0xMDMtI2VuZGlmXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTg3Nj1zdGF0aWMgdm9pZCBuZnRfY3RfdGltZW91dF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy05MDMtXFx0ICovXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzo5MDQ6XFx0dmFsdWVzID0gbmZfY3RfdGltZW91dF9kYXRhKHRpbWVvdXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtOTA1LVxcdGlmICh2YWx1ZXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU1OjM4Ljc0NzY0Njg4NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDcwNTkwOTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBuZl9jdF90aW1lb3V0X2RhdGFgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGNvbm5lY3Rpb24gdGltZW91dHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBuZXRmaWx0ZXIgY29ubnRyYWNrIHN5c3RlbS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRoZSBgbmZfY3RfdGltZW91dF9kYXRhYCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgY2hlY2sgdGhlIHNwZWNpZmljIGRlZmluaXRpb25zIGluIGBpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaGAuIEknbSBleHBlY3RpbmcgdGhpcyBoZWFkZXIgdG8gY29udGFpbiB0aGUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbnkgYXNzb2NpYXRlZCBtYWNyb3Mgb3IgZnVuY3Rpb25zIHRoYXQgZ292ZXJuIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUgbWFuYWdlcyB0aGUgZXhwaXJhdGlvbiBvZiBjb25uZWN0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB0aGUgdGltZW91dCB2YWx1ZXMgdGhlbXNlbHZlcywgcG90ZW50aWFsbHkgcGVyLXByb3RvY29sIG9yIGNvbm5lY3Rpb24gc3RhdGUsIGFuZCBtYXliZSBldmVuIGZsYWdzIG9yIG1lY2hhbmlzbXMgcmVsYXRlZCB0byBob3cgdGltZW91dHMgYXJlIGNhbGN1bGF0ZWQgb3IgbW9kaWZpZWQuIEl0J3MgdGltZSB0byByZWZyZXNoIGFuZCBhbmFseXplIHRoaXMgY29yZSBwaWVjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUxNSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU1OjQxLjgxODI0MTA3N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzU6XFx0XFxuICAzNjpcXHRcXHR0aW1lb3V0ID0gcmN1X2RlcmVmZXJlbmNlKHRpbWVvdXRfZXh0LVxcdTAwM2V0aW1lb3V0KTtcXG4gIDM3OlxcdFxcdGlmICh0aW1lb3V0IFxcdTAwMjZcXHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2dGltZW91dC1cXHUwMDNlcmVmY250KSlcXG4gIDM4OlxcdFxcdFxcdGtmcmVlX3JjdSh0aW1lb3V0LCByY3UpO1xcbiAgMzk6XFx0I2VuZGlmXFxuICA0MDpcXHR9XFxuICA0MTpcXHRcXG4gIDQyOlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50ICpcXG4gIDQzOlxcdG5mX2N0X3RpbWVvdXRfZGF0YShjb25zdCBzdHJ1Y3QgbmZfY29ubl90aW1lb3V0ICp0KVxcbiAgNDQ6XFx0e1xcbiAgNDU6XFx0I2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfVElNRU9VVFxcbiAgNDY6XFx0XFx0c3RydWN0IG5mX2N0X3RpbWVvdXQgKnRpbWVvdXQ7XFxuICA0NzpcXHRcXG4gIDQ4OlxcdFxcdHRpbWVvdXQgPSByY3VfZGVyZWZlcmVuY2UodC1cXHUwMDNldGltZW91dCk7XFxuICA0OTpcXHRcXHRpZiAodGltZW91dCA9PSBOVUxMKVxcbiAgNTA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA1MTpcXHRcXG4gIDUyOlxcdFxcdHJldHVybiAodW5zaWduZWQgaW50ICopdGltZW91dC1cXHUwMDNlZGF0YTtcXG4gIDUzOlxcdCNlbHNlXFxuICA1NDpcXHRcXHRyZXR1cm4gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTU6NDEuODE4MzYxMDg2WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NTQ4MzA3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgQ29ubmVjdGlvbiBUcmFja2luZyBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBob3cgd2UncmUgaGFuZGxpbmcgdGltZW91dHMgaW4gY29ubmVjdGlvbiB0cmFja2luZy4gU3BlY2lmaWNhbGx5LCB0aGUgYHRpbWVvdXQtXHUwMDNlZGF0YWAgYXJyYXkgaXMgYW4gYHVuc2lnbmVkIGludGAgYXJyYXkgKG9yIGB1MzJgIGZvciB1cyksIGFuZCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSBtaWdodCBiZSB1c2luZyB0aGUgKndyb25nKiB0aW1lb3V0IHZhbHVlcyBpZiB0aGUgcHJvdG9jb2xzIGRvbid0IG1hdGNoLiBUaGlzIGlzIHdoZXJlIHRoZSByZWQgZmxhZ3MgZ28gdXAuXG5cbkkga25vdyBUQ1AgaGFzIGEgYm9hdGxvYWQgb2YgdGltZW91dCB2YWx1ZXMg4oCTIHdlJ3JlIHRhbGtpbmcgdGhpbmdzIGxpa2UgYFRDUF9DT05OVFJBQ0tfU1lOX1NFTlRgLCBgVENQX0NPTk5UUkFDS19FU1RBQkxJU0hFRGAsIGFuZCBhIGJ1bmNoIG1vcmUuIFVEUCwgb24gdGhlIG90aGVyIGhhbmQsIGlzIG11Y2ggc2ltcGxlciwgd2l0aCBmYXIgZmV3ZXIgc3RhdGVzIGFuZCB0aGVyZWZvcmUgZmV3ZXIgdGltZW91dHMsIGxpa2UgYFVEUF9DVF9VTlJFUExJRURgIGFuZCBgVURQX0NUX1JFUExJRURgLlxuXG5UaGUgcHJvYmxlbSBpcywgaWYgd2UgZW5kIHVwIGluIGEgc2l0dWF0aW9uIHdoZXJlIGEgVURQIGNvbm5lY3Rpb24gdXNlcyBhIFRDUCB0aW1lb3V0IG9iamVjdCwgaXQgKmNvdWxkKiBiZSBva2F5LiBVRFAgaXMgZ29pbmcgdG8gYWNjZXNzIGB0aW1lb3V0LVx1MDAzZWRhdGFgIHVzaW5nIGl0cyBvd24gVURQIHN0YXRlIGluZGljZXMuIFNpbmNlIFRDUCBoYXMgbW9yZSBzdGF0ZXMsIHRob3NlIGluZGljZXMgc2hvdWxkIGJlIGluIGJvdW5kcy4gSG93ZXZlciwgZmxpcCB0aGUgc2NyaXB0LiBJZiBhIFRDUCBjb25uZWN0aW9uIHVzZXMgYSBVRFAgdGltZW91dCBvYmplY3QsIHdlJ3JlIGluIHJlYWwgdHJvdWJsZS4gVENQIHdpbGwgYWNjZXNzIGB0aW1lb3V0LVx1MDAzZWRhdGFgIHVzaW5nIGl0cyBUQ1Agc3RhdGUgaW5kaWNlcy4gVENQIGhhcyB1cCB0byBmb3VydGVlbiBkaWZmZXJlbnQgc3RhdGVzIChvciBzb21ldGhpbmcgYXJvdW5kIHRoYXQgbnVtYmVyKS4gVURQIG9ubHkgaGFzIHR3by4gU28sIGlmIHdlIHRyeSBzb21ldGhpbmcgbGlrZSBgdGltZW91dC1cdTAwM2VkYXRhW1RDUF9DT05OVFJBQ0tfRVNUQUJMSVNIRURdYCBvbiBhIFVEUCBvYmplY3QsIHdlJ3JlICpndWFyYW50ZWVkKiB0byBoYXZlIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhpcyBpcyBhIGNsYXNzaWMgdnVsbmVyYWJpbGl0eSFcblxuTm93LCBsZXQncyB2ZXJpZnkgdGhpcy4gQmVmb3JlIEkgZ28gdG9vIGRlZXAsIEkgbmVlZCB0byBzZWUgaG93IHRoaXMgYHRpbWVvdXQtXHUwMDNlZGF0YWAgYXJyYXkgaXMgYWN0dWFsbHkgYWxsb2NhdGVkLiBJIGhhdmUgdG8gbG9vayBkZWVwZXIgdG8gc2VlIGhvdyB0aGUgb2JqZWN0IGlzIGNvbnN0cnVjdGVkIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9ucyBhbmQgdmVyaWZ5IGhvdyB3ZSBjYW4gZ2V0IGludG8gdGhpcyBzaXR1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMzIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NTo0Ny4yNzMxOTQ5OTZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MzkzMDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBuZl9jdF90aW1lb3V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTEzLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oOjE0OnN0cnVjdCBuZl9jdF90aW1lb3V0IHtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC0xNS1cXHRyZWZjb3VudF90XFx0XFx0cmVmY250O1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg9MjI9c3RydWN0IG5mX2Nvbm5fdGltZW91dCB7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg6MjM6XFx0c3RydWN0IG5mX2N0X3RpbWVvdXQgX19yY3UgKnRpbWVvdXQ7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmgtMjQtfTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oPTI2PXN0YXRpYyBpbmxpbmUgdm9pZCBuZl9jdF90aW1lb3V0X3B1dChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC0yOS1cXHRzdHJ1Y3QgbmZfY29ubl90aW1lb3V0ICp0aW1lb3V0X2V4dDtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaDozMDpcXHRzdHJ1Y3QgbmZfY3RfdGltZW91dCAqdGltZW91dDtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC0zMS1cXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oPTQzPW5mX2N0X3RpbWVvdXRfZGF0YShjb25zdCBzdHJ1Y3QgbmZfY29ubl90aW1lb3V0ICp0KVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmgtNDUtI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfVElNRU9VVFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oOjQ2OlxcdHN0cnVjdCBuZl9jdF90aW1lb3V0ICp0aW1lb3V0O1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTQ3LVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg9Njk9c3RydWN0IG5mX2Nvbm5fdGltZW91dCAqbmZfY3RfdGltZW91dF9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdCxcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaDo3MDpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmZfY3RfdGltZW91dCAqdGltZW91dCxcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC03MS1cXHRcXHRcXHRcXHRcXHQgICAgICBnZnBfdCBnZnApXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaD05ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCAqbmZfY3RfdGltZW91dF9sb29rdXAoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmgtMTA3LSNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaDoxMDg6dm9pZCBuZl9jdF91bnRpbWVvdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY3RfdGltZW91dCAqdGltZW91dCk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmgtMTA5LWludCBuZl9jdF9zZXRfdGltZW91dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZl9jb25uICpjdCwgdTggbDNudW0sIHU4IGw0bnVtLFxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg9MTIwPXN0YXRpYyBpbmxpbmUgdm9pZCBuZl9jdF9kZXN0cm95X3RpbWVvdXQoc3RydWN0IG5mX2Nvbm4gKmN0KVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmgtMTI2LSNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaDoxMjc6c3RydWN0IG5mX2N0X3RpbWVvdXRfaG9va3Mge1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oOjEyODpcXHRzdHJ1Y3QgbmZfY3RfdGltZW91dCAqKCp0aW1lb3V0X2ZpbmRfZ2V0KShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oOjEyOTpcXHR2b2lkICgqdGltZW91dF9wdXQpKHN0cnVjdCBuZl9jdF90aW1lb3V0ICp0aW1lb3V0KTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC0xMzAtfTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC0xMzEtXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0Lmg6MTMyOmV4dGVybiBjb25zdCBzdHJ1Y3QgbmZfY3RfdGltZW91dF9ob29rcyBfX3JjdSAqbmZfY3RfdGltZW91dF9ob29rO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTEzMy0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTU6NDcuMzYwNTk0MzRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4MjEyMTY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBuZl9jdF90aW1lb3V0KipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29ubnRyYWNrIHRpbWVvdXQgc3RydWN0dXJlLCBzbyB0aGUgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byBgaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lb3V0LmhgLiBJJ20gaG9waW5nIGl0J3Mgd2VsbC1kb2N1bWVudGVkIOKAkyBJJ20gbm90IGxvb2tpbmcgZm9yIGFueSBzdXJwcmlzZXMsIGp1c3QgYSBzb2xpZCBkZWZpbml0aW9uLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgZGlmZmVyZW50IHRpbWVvdXQgdmFsdWVzIGFyZSBzdHJ1Y3R1cmVkLCBpZiB0aGVyZSBhcmUgYW55IGZsYWdzLCBhbmQgaG93IHRoaXMgc3RydWN0IHJlbGF0ZXMgdG8gdGhlIGNvcmUgY29ubnRyYWNrIHN0YXRlIG1hbmFnZW1lbnQuIEkgd2FudCB0byBzZWUgY2xlYXJseSBob3cgdGltZW91dHMgYXJlIGhhbmRsZWQgYXQgdGhlIGRhdGEgc3RydWN0dXJlIGxldmVsLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdGhlIGZpZWxkcyB0aGF0IGRlZmluZSB0aGUgZ3JhbnVsYXJpdHkgYW5kIHRoZSBkaWZmZXJlbnQgdGltZW91dCBpbnRlcnZhbHMgKGxpa2UgZXN0YWJsaXNoZWQsIGNsb3NpbmcsIGV0Yy4pLiBMZXQncyBzZWUgaWYgdGhpcyBoZWFkZXIgZmlsZSBwcm92aWRlcyB0aGUgbG93LWxldmVsIGRldGFpbHMgSSBuZWVkIGZvciB0aGlzIGN1cnJlbnQgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NTMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NTo1MC41NDI3MTk5MTRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4gICAyOlxcdCNpZm5kZWYgX05GX0NPTk5UUkFDS19USU1FT1VUX0hcXG4gICAzOlxcdCNkZWZpbmUgX05GX0NPTk5UUkFDS19USU1FT1VUX0hcXG4gICA0OlxcdFxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRfbmFtZXNwYWNlLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlX2NvbW1vbi5oXFx1MDAzZVxcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFxcdTAwM2VcXG4gIDEwOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuaFxcdTAwM2VcXG4gIDExOlxcdFxcbiAgMTI6XFx0I2RlZmluZSBDVE5MX1RJTUVPVVRfTkFNRV9NQVhcXHQzMlxcbiAgMTM6XFx0XFxuICAxNDpcXHRzdHJ1Y3QgbmZfY3RfdGltZW91dCB7XFxuICAxNTpcXHRcXHRyZWZjb3VudF90XFx0XFx0cmVmY250O1xcbiAgMTY6XFx0XFx0X191MTZcXHRcXHRcXHRsM251bTtcXG4gIDE3OlxcdFxcdGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbDRwcm90bztcXG4gIDE4OlxcdFxcdHN0cnVjdCByY3VfaGVhZFxcdFxcdHJjdTtcXG4gIDE5OlxcdFxcdGNoYXJcXHRcXHRcXHRkYXRhW107XFxuICAyMDpcXHR9O1xcbiAgMjE6XFx0XFxuICAyMjpcXHRzdHJ1Y3QgbmZfY29ubl90aW1lb3V0IHtcXG4gIDIzOlxcdFxcdHN0cnVjdCBuZl9jdF90aW1lb3V0IF9fcmN1ICp0aW1lb3V0O1xcbiAgMjQ6XFx0fTtcXG4gIDI1OlxcdFxcbiAgMjY6XFx0c3RhdGljIGlubGluZSB2b2lkIG5mX2N0X3RpbWVvdXRfcHV0KGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdClcXG4gIDI3OlxcdHtcXG4gIDI4OlxcdCNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG4gIDI5OlxcdFxcdHN0cnVjdCBuZl9jb25uX3RpbWVvdXQgKnRpbWVvdXRfZXh0O1xcbiAgMzA6XFx0XFx0c3RydWN0IG5mX2N0X3RpbWVvdXQgKnRpbWVvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU1OjUwLjU0Mjg3NDgzNFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDE0ODY5MTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgYG5mX2N0X3RpbWVvdXRgIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBuZl9jdF90aW1lb3V0YCBzdHJ1Y3QgYW5kIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgYGRhdGFbXWAg4oCTIHRoYXQncyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlci4gVGhhdCBtZWFucyB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUgYHN0cnVjdGAgaXNuJ3QgZml4ZWQgYXQgY29tcGlsZSB0aW1lLiBJdHMgc2l6ZSBkeW5hbWljYWxseSBhZGFwdHMgYXQgcnVudGltZS4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgdGhlIHNpemUgb2YgYW4gaW5zdGFuY2Ugb2YgYHN0cnVjdCBuZl9jdF90aW1lb3V0YCBpcyBnb2luZyB0byBiZSBhbGxvY2F0ZWQgd2l0aCBhIHNpemUgZGVwZW5kaW5nIG9uIHRoZSBwcm90b2NvbC4gXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKmhvdyogdGhhdCBhbGxvY2F0aW9uIGFjdHVhbGx5IGhhcHBlbnMuIFdoZXJlIGluIHRoZSBjb2RlIGlzIHRoZSBtZW1vcnkgYmVpbmcgY2FydmVkIG91dCBmb3IgdGhpcyB0aGluZywgYW5kIGhvdyBkb2VzIHRoZSBjb2RlIGRldGVybWluZSB0aGUgY29ycmVjdCBzaXplPyBMZXQncyB0cmFjZSB0aGlzIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ3NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTU6NTMuNTU3NzQ3MloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxNTQ5OTM0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJremFsbG9jLipzaXplb2YuKm5mX2N0X3RpbWVvdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9OTA5PXN0YXRpYyBpbnQgbmZ0X2N0X3RpbWVvdXRfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtOTM2LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6OTM3OlxcdHRpbWVvdXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmZfY3RfdGltZW91dCkgK1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtOTM4LVxcdFxcdFxcdCAgbDRwcm90by1cXHUwMDNlY3RubF90aW1lb3V0Lm9ial9zaXplLCBHRlBfS0VSTkVMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTU6NTcuNzczMjUxODMzWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NDUxMjkzNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE91dC1vZi1Cb3VuZHMgUmVhZCBpbiBDb25uZWN0aW9uIFRyYWNraW5nKipcblxuT2theSwgbGV0J3Mgc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiB0aGUgYWxsb2NhdGlvbiBvZiBgbDRwcm90by1cdTAwM2VjdG5sX3RpbWVvdXQub2JqX3NpemVgIGltcGxpZXMgdGhhdCBpZiBhIFVEUCB0aW1lb3V0IG9iamVjdCBpcyBjcmVhdGVkLCBpdCBhbGxvY2F0ZXMgYHNpemVvZihzdHJ1Y3QgbmZfY3RfdGltZW91dClgIHBsdXMgdGhlIGBVRFBfVElNRU9VVF9PQkpfU0laRWAuIFJpZ2h0LiBBbmQgaWYgYSBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSB1c2VzICp0aGF0KiBVRFAgdGltZW91dCBvYmplY3QsIGl0IHdpbGwgdHJ5IHRvIGFjY2VzcyBzb21ldGhpbmcgbGlrZSBgdGltZW91dC1cdTAwM2VkYXRhW1RDUF9TVEFURV1gLiBDbGVhcmx5LCBiZWNhdXNlIGBUQ1BfVElNRU9VVF9PQkpfU0laRWAgaXMgc2lnbmlmaWNhbnRseSBsYXJnZXIgdGhhbiBgVURQX1RJTUVPVVRfT0JKX1NJWkVgLCB0aGlzIHNjcmVhbXMgb3V0LW9mLWJvdW5kcyByZWFkLCByaWdodD9cblxuQnV0LCBob2xkIG9uLiBMb29raW5nIGNsb3NlciBhdCBgbmZfY3RfcmVmcmVzaGAsIGl0IHRha2VzIHRoZSB2YWx1ZSBmcm9tIGB2YWx1ZXNbMF1gLiBBbmQsIGluIHRoZSBgbmZ0X2N0X3RpbWVvdXRfb2JqX2V2YWxgIGZ1bmN0aW9uLCBpdCBkb2VzIGEgc2ltaWxhciB0aGluZy5cblxuYGBgY1xudmFsdWVzID0gbmZfY3RfdGltZW91dF9kYXRhKHRpbWVvdXQpO1xuaWYgKHZhbHVlcylcbiAgICBuZl9jdF9yZWZyZXNoKGN0LCB2YWx1ZXNbMF0pO1xuYGBgXG5cbkFoLCByaWdodCwgYHZhbHVlc1swXWAgaXMganVzdCB0aGUgZmlyc3QgZWxlbWVudC4gU28sIGlzIHRoZXJlICphY3R1YWxseSogYW4gb3V0LW9mLWJvdW5kcyByZWFkIGhlcmU/IEFjdHVhbGx5LCBgdmFsdWVzWzBdYCB3aWxsIGFsd2F5cyBiZSB3aXRoaW4gYm91bmRzLCBhcyBsb25nIGFzIGBvYmpfc2l6ZSBcdTAwM2U9IHNpemVvZih1bnNpZ25lZCBpbnQpYC4gSG1tLCB0aGF0IHNlZW1zIG9rYXkuXG5cbkhvd2V2ZXIsIEkgY2FuJ3QgYmUgdG9vIGhhc3R5LiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgKm90aGVyKiBwbGFjZXMgdGhhdCB1c2UgdGhlIHRpbWVvdXQgb2JqZWN0LiBUaGUgdGltZW91dCBvYmplY3QgaXMgdWx0aW1hdGVseSBhdHRhY2hlZCB0byB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSB1c2luZyBgbmZfY3RfdGltZW91dF9leHRfYWRkYCwgYW5kIG9uY2UgYXR0YWNoZWQsIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IGlzIGdvaW5nIHRvIGJlIHVzaW5nIHRoYXQgdGltZW91dCBvYmplY3QgZm9yIGV2ZXJ5IHNpbmdsZSBzdGF0ZSB0cmFuc2l0aW9uLiBXaGljaCBtZWFucyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoZXJlIGBuZl9jdF90aW1lb3V0X2xvb2t1cGAgYW5kIGBuZl9jdF90aW1lb3V0X2RhdGFgIGFyZSBhY3R1YWxseSB1c2VkIHRocm91Z2hvdXQgdGhlIGNvZGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZywgYW5kIHRoYXQgdGhvc2UgZnVuY3Rpb25zIGFyZW4ndCBiZWluZyB1c2VkIGluIGEgd2F5IHRoYXQgKndvdWxkKiByZXN1bHQgaW4gYW4gb3V0LW9mLWJvdW5kcyByZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODUzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjU2OjAzLjQxODM4NTFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjI5NDc2MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY3RfdGltZW91dF9sb29rdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oPTY5PXN0cnVjdCBuZl9jb25uX3RpbWVvdXQgKm5mX2N0X3RpbWVvdXRfZXh0X2FkZChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaC05My1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RpbWVvdXQuaDo5NDpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCAqbmZfY3RfdGltZW91dF9sb29rdXAoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGltZW91dC5oLTk1LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYz0xOTU2PXN0YXRpYyBpbnQgZ2VuZXJpY19wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTE5NTgte1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYzoxOTU5OlxcdGNvbnN0IHVuc2lnbmVkIGludCAqdGltZW91dCA9IG5mX2N0X3RpbWVvdXRfbG9va3VwKGN0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTk2MC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5jPTI2Nj1pbnQgbmZfY29ubnRyYWNrX2dyZV9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmMtMjc0LVxcdGlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5jOjI3NTpcXHRcXHR1bnNpZ25lZCBpbnQgKnRpbWVvdXRzID0gbmZfY3RfdGltZW91dF9sb29rdXAoY3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5jLTI3Ni1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYz03MD1pbnQgbmZfY29ubnRyYWNrX2ljbXBfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYy03Ny1cXHQgICBhbmQgYWxzbyB0byBoYW5kbGUgY29ycmVjdGx5IElDTVAgZWNobyByZXBseSBkdXBsaWNhdGVzLiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYzo3ODpcXHR1bnNpZ25lZCBpbnQgKnRpbWVvdXQgPSBuZl9jdF90aW1lb3V0X2xvb2t1cChjdCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jLTc5LVxcdHN0YXRpYyBjb25zdCB1X2ludDhfdCB2YWxpZF9uZXdbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jPTg5PWludCBuZl9jb25udHJhY2tfaWNtcHY2X3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYy05My17XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmM6OTQ6XFx0dW5zaWduZWQgaW50ICp0aW1lb3V0ID0gbmZfY3RfdGltZW91dF9sb29rdXAoY3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jLTk1LVxcdHN0YXRpYyBjb25zdCB1OCB2YWxpZF9uZXdbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYz0zMjc9aW50IG5mX2Nvbm50cmFja19zY3RwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtNTIxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYzo1MjI6XFx0dGltZW91dHMgPSBuZl9jdF90aW1lb3V0X2xvb2t1cChjdCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTUyMy1cXHRpZiAoIXRpbWVvdXRzKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9NzIyPXN0YXRpYyB2b2lkIF9fY29sZCBuZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNzYwLVxcdFxcdHRuID0gbmZfdGNwX3Blcm5ldChuZl9jdF9uZXQoY3QpKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo3NjE6XFx0XFx0dGltZW91dHMgPSBuZl9jdF90aW1lb3V0X2xvb2t1cChjdCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNzYyLVxcdFxcdGlmICghdGltZW91dHMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz05MTc9dm9pZCBuZl9jb25udHJhY2tfdGNwX3NldF9jbG9zaW5nKHN0cnVjdCBuZl9jb25uICpjdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTkzNS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo5MzY6XFx0dGltZW91dHMgPSBuZl9jdF90aW1lb3V0X2xvb2t1cChjdCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtOTM3LVxcdGlmICghdGltZW91dHMpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTk2Mz1pbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTI3Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMjc3OlxcdHRpbWVvdXRzID0gbmZfY3RfdGltZW91dF9sb29rdXAoY3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyNzgtXFx0aWYgKCF0aW1lb3V0cylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jPTg0PWludCBuZl9jb25udHJhY2tfdWRwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYy05NS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYzo5NjpcXHR0aW1lb3V0cyA9IG5mX2N0X3RpbWVvdXRfbG9va3VwKGN0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYy05Ny1cXHRpZiAoIXRpbWVvdXRzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NjowNy45ODEzMzg0NjFaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxMzc1NjIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGA6XG5cbioqRGlzc2VjdGluZyBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGAuIFRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uIGluIHRoZSBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUsIHJpZ2h0PyBJdCdzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGZvciBUQ1AgY29ubmVjdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29udHJvbCBmbG93LiBJdCdzIGhhbmRsaW5nIFRDUCBwYWNrZXRzIGFuZCBmaWd1cmluZyBvdXQgdGhlaXIgcm9sZSBpbiB0aGUgb25nb2luZyBjb25uZWN0aW9uLiBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgc3RhdGUgdHJhbnNpdGlvbnMg4oCTIHdoYXQgaGFwcGVucyB3aGVuIGl0IHNlZXMgYSBTWU4sIFNZTi1BQ0ssIEFDSywgRklOLCBSU1QsIGFuZCBzbyBvbi4gSXQncyBnb3QgdG8gcGFyc2UgdGhlIFRDUCBmbGFncyB0byBkZXRlcm1pbmUgdGhlIGNvbm5lY3Rpb24ncyBzdGF0ZSwgb3IgbW9kaWZ5IGV4aXN0aW5nIHN0YXRlLCBiYXNlZCBvbiB0aGUgZmxvdyBpdCBpcyBzZWVpbmcuXG5cbkknbSBwaWN0dXJpbmcgaXQgaGFuZGxpbmcgdmFyaW91cyBzY2VuYXJpb3M6IGluaXRpYWwgY29ubmVjdGlvbiBzZXR1cCwgZGF0YSB0cmFuc2ZlciwgY29ubmVjdGlvbiB0ZWFyZG93biAoZ3JhY2VmdWwgb3IgYWJydXB0KS4gSXTigJlzIGVzc2VudGlhbCBmb3IgZW5zdXJpbmcgY29ubmVjdGlvbnMgYXJlIHByb3Blcmx5IHRyYWNrZWQsIHNvIE5BVCwgZmlyZXdhbGwgcnVsZXMsIGFuZCBvdGhlciBzdGF0ZWZ1bCBvcGVyYXRpb25zIGNhbiBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoZXJlIGlzIGEgbG90IG9mIHN0YXRlIHRvIGp1Z2dsZTogc2VxdWVuY2UgbnVtYmVycywgYWNrbm93bGVkZ2VtZW50IG51bWJlcnMsIHdpbmRvdyBzaXplcywgYW5kIHBvdGVudGlhbGx5IHJldHJhbnNtaXNzaW9ucyBvciBvdXQtb2Ytb3JkZXIgcGFja2V0cy4gVGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgcmVsaWVzIG9uIGFsbCB0aGF0IGluZm9ybWF0aW9uLCBhbmQgc28gaXQgaXMgYW4gaW1wb3J0YW50IGZ1bmN0aW9uLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCB0b28sIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIFRoZSBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBpbiB0aGUgZmFzdCBwYXRoLCBzbyBlZmZpY2llbmN5IGlzIHBhcmFtb3VudC4gQW55IGJvdHRsZW5lY2tzIGhlcmUgY2FuIGh1cnQgdGhyb3VnaHB1dC4gSXQgaXMgcmVhbGx5IHRoZSBoZWFydCBvZiB0aGUgY29ubmVjdGlvbiB0cmFja2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMDgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NjoxMS41OTUwOTgyODVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM5MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNzA6XFx0XFx0Y3QtXFx1MDAzZXByb3RvLnRjcC5sYXN0X2RpciA9IGRpcjtcXG4xMjcxOlxcdFxcbjEyNzI6XFx0XFx0Y3QtXFx1MDAzZXByb3RvLnRjcC5zdGF0ZSA9IG5ld19zdGF0ZTtcXG4xMjczOlxcdFxcdGlmIChvbGRfc3RhdGUgIT0gbmV3X3N0YXRlXFxuMTI3NDpcXHRcXHQgICAgXFx1MDAyNlxcdTAwMjYgbmV3X3N0YXRlID09IFRDUF9DT05OVFJBQ0tfRklOX1dBSVQpXFxuMTI3NTpcXHRcXHRcXHRjdC1cXHUwMDNlcHJvdG8udGNwLnNlZW5bZGlyXS5mbGFncyB8PSBJUF9DVF9UQ1BfRkxBR19DTE9TRV9JTklUO1xcbjEyNzY6XFx0XFxuMTI3NzpcXHRcXHR0aW1lb3V0cyA9IG5mX2N0X3RpbWVvdXRfbG9va3VwKGN0KTtcXG4xMjc4OlxcdFxcdGlmICghdGltZW91dHMpXFxuMTI3OTpcXHRcXHRcXHR0aW1lb3V0cyA9IHRuLVxcdTAwM2V0aW1lb3V0cztcXG4xMjgwOlxcdFxcbjEyODE6XFx0XFx0aWYgKGN0LVxcdTAwM2Vwcm90by50Y3AucmV0cmFucyBcXHUwMDNlPSB0bi1cXHUwMDNldGNwX21heF9yZXRyYW5zIFxcdTAwMjZcXHUwMDI2XFxuMTI4MjpcXHRcXHQgICAgdGltZW91dHNbbmV3X3N0YXRlXSBcXHUwMDNlIHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfUkVUUkFOU10pXFxuMTI4MzpcXHRcXHRcXHR0aW1lb3V0ID0gdGltZW91dHNbVENQX0NPTk5UUkFDS19SRVRSQU5TXTtcXG4xMjg0OlxcdFxcdGVsc2UgaWYgKHVubGlrZWx5KGluZGV4ID09IFRDUF9SU1RfU0VUKSlcXG4xMjg1OlxcdFxcdFxcdHRpbWVvdXQgPSB0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX0NMT1NFXTtcXG4xMjg2OlxcdFxcdGVsc2UgaWYgKChjdC1cXHUwMDNlcHJvdG8udGNwLnNlZW5bMF0uZmxhZ3MgfCBjdC1cXHUwMDNlcHJvdG8udGNwLnNlZW5bMV0uZmxhZ3MpIFxcdTAwMjZcXG4xMjg3OlxcdFxcdFxcdCBJUF9DVF9UQ1BfRkxBR19EQVRBX1VOQUNLTk9XTEVER0VEIFxcdTAwMjZcXHUwMDI2XFxuMTI4ODpcXHRcXHRcXHQgdGltZW91dHNbbmV3X3N0YXRlXSBcXHUwMDNlIHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfVU5BQ0tdKVxcbjEyODk6XFx0XFx0XFx0dGltZW91dCA9IHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfVU5BQ0tdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NjoxMS41OTU0Mzk1NjVaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgwODY0NjYwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgT3V0LW9mLUJvdW5kcyBSZWFkKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBhY2Nlc3NpbmcgYHRpbWVvdXRzW25ld19zdGF0ZV1gLiBNeSBtaW5kIGlzIHJhY2luZyDigJMgaWYgYHRpbWVvdXRzYCBpcyBhY3R1YWxseSBhIFVEUCB0aW1lb3V0IG9iamVjdCwgaXRzIHNpemUgaXMgb25seSBhIGNvdXBsZSBvZiB1bnNpZ25lZCBpbnRzLCBidXQgYG5ld19zdGF0ZWAgY291bGQgYmUgbXVjaCBsYXJnZXIuIFRoYXQncyBhIHRleHRib29rIG91dC1vZi1ib3VuZHMgcmVhZCEgV2UgYWxsIGtub3cgS0FTQU4gaXMgdGhlcmUgdG8gZGV0ZWN0IHRob3NlLCByaWdodD9cblxuQnV0LCB3YWl0Li4uIGlzIHRoZXJlIGFueSAqdW5pbml0aWFsaXplZCogbWVtb3J5IGludm9sdmVkPyBUaGUgdGltZW91dCBvYmplY3QgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCBzbyBpdCdzIGZ1bGx5IHplcm9lZC4gU28sIHdoaWxlIGl0ICppcyogYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBpdCB3aWxsIGxpa2VseSBqdXN0IHJlYWQgaW50byBhZGphY2VudCBtZW1vcnkuIEFuZCBLQVNBTiB3aWxsIGNhdGNoICp0aGF0KiBvdXQtb2YtYm91bmRzIHJlYWQsIHJlZ2FyZGxlc3MuIEknbSBwcmV0dHkgc3VyZSBLQVNBTiB3aWxsIGNhdGNoIHRoaXMuXG5cbk5vdywgaG9sZCBvbi4uLiB3aGF0IGlmIHRoZSBvdXQtb2YtYm91bmRzIHJlYWQgZW5kcyB1cCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9mIGFuIGFkamFjZW50IGFsbG9jYXRpb24/IEtBU0FOIHN0aWxsIGNhdGNoZXMgdGhhdCEgS01TQU4gaXMgbW9yZSBnZWFyZWQgdG93YXJkcyBkZXRlY3RpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgc3BlY2lmaWNhbGx5LCBidXQgdGhlIGNvcmUgaXNzdWUgaGVyZSBpcyBhbiBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3MsIHNvIEtBU0FOIGlzIGRlZmluaXRlbHkgdGhlIHRvb2wgZm9yIHRoZSBqb2IuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUncyBhbnl0aGluZyBlbHNlIGluIHRoZSBwYXRjaCB0byBiZSBhd2FyZSBvZi4gQWgsIHJpZ2h0LCB0aGUgYHByaXYtXHUwMDNlbDRwcm90byAhPSBuZl9jdF9wcm90b251bShjdClgIGNoZWNrLiBUaGF0IHByZXZlbnRzIGF0dGFjaGluZyB0aGUgdGltZW91dCBvYmplY3Qgb2Ygb25lIHByb3RvY29sIHRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IG9mIGFub3RoZXIuIEdvb2QuIFRoaXMgYmxvY2tzIHR5cGUgY29uZnVzaW9uIGFuZCBmdXJ0aGVyIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuXG5cbk9rYXksIGlzIHRoZXJlIGFueSBwb3NzaWJpbGl0eSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2U/IEkgcmVtZW1iZXIgdGhlIHRpbWVvdXQgb2JqZWN0IHZhbHVlcyBiZWluZyByZWFkIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluaywgYW5kIEkga25vdyB0aGV5IGFyZSBmdWxseSBpbml0aWFsaXplZC4gV2FpdCwgaG93IGlzIHRoZSB0aW1lb3V0IG9iamVjdCBpbml0aWFsaXplZD8gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgcG9pbnQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6NTY6MTguNDA0MDg5NTYzWiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NjUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9jdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwOSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkwOTpcXHRzdGF0aWMgaW50IG5mdF9jdF90aW1lb3V0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuIDkxMDpcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSxcXG4gOTExOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopXFxuIDkxMjpcXHR7XFxuIDkxMzpcXHRcXHRzdHJ1Y3QgbmZ0X2N0X3RpbWVvdXRfb2JqICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XFxuIDkxNDpcXHRcXHRjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG87XFxuIDkxNTpcXHRcXHRzdHJ1Y3QgbmZfY3RfdGltZW91dCAqdGltZW91dDtcXG4gOTE2OlxcdFxcdGludCBsM251bSA9IGN0eC1cXHUwMDNlZmFtaWx5O1xcbiA5MTc6XFx0XFx0X191OCBsNG51bTtcXG4gOTE4OlxcdFxcdGludCByZXQ7XFxuIDkxOTpcXHRcXG4gOTIwOlxcdFxcdGlmICghdGJbTkZUQV9DVF9USU1FT1VUX0w0UFJPVE9dIHx8XFxuIDkyMTpcXHRcXHQgICAgIXRiW05GVEFfQ1RfVElNRU9VVF9EQVRBXSlcXG4gOTIyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA5MjM6XFx0XFxuIDkyNDpcXHRcXHRpZiAodGJbTkZUQV9DVF9USU1FT1VUX0wzUFJPVE9dKVxcbiA5MjU6XFx0XFx0XFx0bDNudW0gPSBudG9ocyhubGFfZ2V0X2JlMTYodGJbTkZUQV9DVF9USU1FT1VUX0wzUFJPVE9dKSk7XFxuIDkyNjpcXHRcXG4gOTI3OlxcdFxcdGw0bnVtID0gbmxhX2dldF91OCh0YltORlRBX0NUX1RJTUVPVVRfTDRQUk9UT10pO1xcbiA5Mjg6XFx0XFx0cHJpdi1cXHUwMDNlbDRwcm90byA9IGw0bnVtO1xcbiA5Mjk6XFx0XFxuIDkzMDpcXHRcXHRsNHByb3RvID0gbmZfY3RfbDRwcm90b19maW5kKGw0bnVtKTtcXG4gOTMxOlxcdFxcbiA5MzI6XFx0XFx0aWYgKGw0cHJvdG8tXFx1MDAzZWw0cHJvdG8gIT0gbDRudW0pIHtcXG4gOTMzOlxcdFxcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbiA5MzQ6XFx0XFx0XFx0Z290byBlcnJfcHJvdG9fcHV0O1xcbiA5MzU6XFx0XFx0fVxcbiA5MzY6XFx0XFxuIDkzNzpcXHRcXHR0aW1lb3V0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5mX2N0X3RpbWVvdXQpICtcXG4gOTM4OlxcdFxcdFxcdFxcdCAgbDRwcm90by1cXHUwMDNlY3RubF90aW1lb3V0Lm9ial9zaXplLCBHRlBfS0VSTkVMKTtcXG4gOTM5OlxcdFxcdGlmICh0aW1lb3V0ID09IE5VTEwpIHtcXG4gOTQwOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDk0MTpcXHRcXHRcXHRnb3RvIGVycl9wcm90b19wdXQ7XFxuIDk0MjpcXHRcXHR9XFxuIDk0MzpcXHRcXG4gOTQ0OlxcdFxcdHJldCA9IG5mdF9jdF90aW1lb3V0X3BhcnNlX3BvbGljeShcXHUwMDI2dGltZW91dC1cXHUwMDNlZGF0YSwgbDRwcm90bywgY3R4LVxcdTAwM2VuZXQsXFxuIDk0NTpcXHRcXHRcXHRcXHRcXHRcXHQgIHRiW05GVEFfQ1RfVElNRU9VVF9EQVRBXSk7XFxuIDk0NjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gOTQ3OlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfdGltZW91dDtcXG4gOTQ4OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NjoxOC40MDQ0Njg4NjNaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI3MjkwMjM0MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25uZWN0aW9uIFRyYWNraW5nIFRpbWVvdXQgQnVnKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBicmVha2Rvd24gb2YgdGhpcyBjb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQgaXNzdWUuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgcHJvYmxlbSBsaWVzIGluIGEgcHJvdG9jb2wgbWlzbWF0Y2ggd2l0aGluIHRoZSB0aW1lb3V0IG9iamVjdC5cblxuSW5pdGlhbGx5LCBgbmZ0X2N0X3RpbWVvdXRfcGFyc2VfcG9saWN5YCBwYXJzZXMgbmV0bGluayBhdHRyaWJ1dGVzIGFuZCBwb3B1bGF0ZXMgdGhlIGB0aW1lb3V0LVx1MDAzZWRhdGFgIHN0cnVjdHVyZS4gSW1wb3J0YW50bHksIGBremFsbG9jYCBpcyB1c2VkLCBzbyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgemVyb2VkLCBtYWtpbmcgdGhpcyBzdHJpY3RseSBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIGFuZCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuXG5cblRoZSBidWcgc3VyZmFjZXMgYmVjYXVzZSBhIHRpbWVvdXQgb2JqZWN0IGRlc2lnbmVkIGZvciBvbmUgcHJvdG9jb2wgaXMgZ2V0dGluZyBhdHRhY2hlZCB0byBhIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgZm9yIGEgKmRpZmZlcmVudCogcHJvdG9jb2wuIFRoaXMgbGVhZHMgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgdHJpZXMgdG8gYWNjZXNzIHRoZSBgdGltZW91dHNgIGFycmF5IHVzaW5nIGFuIGluZGV4IChgbmV3X3N0YXRlYCkgdGhhdCBleGNlZWRzIHRoZSBib3VuZHMgZGVmaW5lZCBieSB0aGUgdGltZW91dCBvYmplY3QncyBwcm90b2NvbC4gSXQncyBhIGNsYXNzaWMgZXhhbXBsZSBvZiByZWFkaW5nIHBhc3QgdGhlIGFsbG9jYXRlZCBtZW1vcnkuIEtBU0FOIHNob3VsZCBiZSBhYmxlIHRvIGNhdGNoIHRoaXMuXG5cbkkgc3RhcnRlZCBkaWdnaW5nIGRlZXBlciBieSBsb29raW5nIGF0IGBuZnRfY3RfdGltZW91dF9vYmpfZXZhbGAuIFRoZSBjb2RlIGluY2x1ZGVzIHNldmVyYWwgY2hlY2tzIHVzaW5nIGBwcml2LVx1MDAzZWw0cHJvdG9gLCB3aGljaCBpcyB0aGUgcHJvdG9jb2wgb2YgdGhlIHRpbWVvdXQgb2JqZWN0LiBUaGUgbW9zdCBpbXBvcnRhbnQgY2hlY2sgaXMgYHByaXYtXHUwMDNlbDRwcm90byAhPSBwa3QtXHUwMDNldHByb3RgLiBXaGlsZSB0aGlzIGNoZWNrcyB0aGF0IHRoZSBwYWNrZXQncyBwcm90b2NvbCBtYXRjaGVzIHRoZSB0aW1lb3V0IG9iamVjdCdzIHByb3RvY29sLCBJIHRob3VnaHQgYWJvdXQgYSBzcGVjaWZpYyBlZGdlIGNhc2Ugd2hlcmUgdGhlIHBhY2tldCdzIHByb3RvY29sIGlzIGRpZmZlcmVudCBmcm9tIHRoZSB0cmFja2VkIGNvbm5lY3Rpb24ncyBwcm90b2NvbCwgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIElDTVAgZXJyb3JzLiBBIFRDUCBjb25uZWN0aW9uIG1pZ2h0IGdlbmVyYXRlIGFuIElDTVAgZXJyb3IgcGFja2V0LiBJbiB0aGlzIGNhc2UsIGBwa3QtXHUwMDNldHByb3RgIGlzIElDTVAgKHRoZSBJQ01QIGVycm9yIHBhY2tldCksIHdoaWxlIGBuZl9jdF9wcm90b251bShjdClgIGlzIFRDUCAodGhlIG9yaWdpbmFsIGNvbm5lY3Rpb24gdGhhdCBjYXVzZWQgdGhlIElDTVAgZXJyb3IpLlxuXG5UaGUga2V5IGlzIHRoYXQgaWYgYHBrdC1cdTAwM2V0cHJvdGAgaXMgSUNNUCBhbmQgYHByaXYtXHUwMDNlbDRwcm90b2AgaXMgYWxzbyBJQ01QLCB0aGUgZmlyc3QgY2hlY2sgd2lsbCBwYXNzLCBidXQgdGhlIElDTVAgdGltZW91dCBvYmplY3QgaXMgc3RpbGwgYXR0YWNoZWQgdG8gdGhlIFRDUCBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5LlxuXG5TbywgaWYgYG5mX2N0X3RpbWVvdXRfZXh0X2FkZGAgaXMgY2FsbGVkIHdpdGggYW4gSUNNUCB0aW1lb3V0IG9iamVjdCAoYHByaXYtXHUwMDNldGltZW91dGApIGFuZCBhIFRDUCBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IChgY3RgKSwgd2UncmUgc2V0dGluZyB0aGUgc3RhZ2UgZm9yIHRoZSBidWcuIExhdGVyLCB3aGVuIHRoYXQgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgcHJvY2Vzc2VzIGEgKlRDUCogcGFja2V0LCBpdCB3aWxsIGluY29ycmVjdGx5IGFjY2VzcyB0aGUgSUNNUCB0aW1lb3V0IG9iamVjdC4gVGhlIElDTVAgdGltZW91dCBvYmplY3Qgb25seSBoYXMgYSBzbWFsbCBzdGF0ZSBhcnJheSAocGVyaGFwcyBvbmUgb3IgdHdvIGVudHJpZXMsIGRlZmluZWQgYnkgYElDTVBfQ1RfTUFYYCkuIFRoZSBUQ1AgY29ubmVjdGlvbiwgb24gdGhlIG90aGVyIGhhbmQsIHdpbGwgdHJ5IHRvIGFjY2VzcyB0aGUgYXJyYXkgdXNpbmcgYFRDUF9DT05OVFJBQ0tfRVNUQUJMSVNIRURgICh3aGljaCBpcyBsaWtlbHkgbGFyZ2VyKS5cblxuVGhpcyBpcyB0aGUgb3V0LW9mLWJvdW5kcyByZWFkISBUaGUgSUNNUCB0aW1lb3V0IG9iamVjdCBnZXRzIGF0dGFjaGVkIHRvIHRoZSBUQ1AgY29ubmVjdGlvbiBlbnRyeSBhbmQgdGhlIFRDUCBlbnRyeSByZWFkcyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIHRpbWVvdXQgb2JqZWN0J3MgZGF0YSBhcnJheS5cblxuU2luY2UgdGhpcyBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIEtBU0FOIHdpbGwgZGVmaW5pdGVseSBjYXRjaCBpdC4gS01TQU4gaXMgbm90IG5lY2Vzc2FyeSwgYXMgd2UgYXJlbid0IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlOyBga3phbGxvY2AgdG9vayBjYXJlIG9mIHRoYXQuXG5cblRvIHN1bSBpdCB1cDpcblxuMS4gIFRoZSBjcnVjaWFsIGBwcml2LVx1MDAzZWw0cHJvdG8gIT0gbmZfY3RfcHJvdG9udW0oY3QpYCBjaGVjayBpcyBtaXNzaW5nLlxuMi4gIFdpdGhvdXQgdGhlIGNoZWNrLCB0aW1lb3V0IG9iamVjdHMgb2YgZGlmZmVyZW50IHByb3RvY29scyBjYW4gYmUgaW5jb3JyZWN0bHkgYXR0YWNoZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZyBlbnRyaWVzLiBJQ01QIGVycm9yIHBhY2tldHMgYXNzb2NpYXRlZCB3aXRoIFRDUCBjb25uZWN0aW9ucyBhcmUgYSBjbGFzc2ljIGV4YW1wbGUuXG4zLiAgVGhlIHNpemUgb2YgdGhlIHRpbWVvdXQgb2JqZWN0J3MgZGF0YSBhcnJheSBkZXBlbmRzIG9uIGl0cyBwcm90b2NvbCAoZS5nLiwgYFVEUF9USU1FT1VUX09CSl9TSVpFYCwgYFRDUF9USU1FT1VUX09CSl9TSVpFYCkuXG40LiAgV2hlbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSBhY2Nlc3NlcyB0aGUgYXJyYXkgdXNpbmcgaXRzIG93biBwcm90b2NvbCdzIHN0YXRlIGluZGljZXMsIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBjYW4gb2NjdXIgaWYgdGhlIGF0dGFjaGVkIHRpbWVvdXQgb2JqZWN0IGlzIGRlc2lnbmVkIGZvciBhIHByb3RvY29sIHdpdGggZmV3ZXIgc3RhdGVzLlxuNS4gIFRoaXMgaXMgYSBjbGVhbiBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS5cbjYuICBUaGUgdXNlIG9mIGBremFsbG9jYCBuZWdhdGVzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucy5cbjcuICBLQVNBTiBpcyB0aGUgY29ycmVjdCB0b29sIHRvIGRldGVjdCB0aGlzIG91dC1vZi1ib3VuZHMgcmVhZC5cblxuVGhlcmVmb3JlLCBJJ2xsIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgd2l0aCB0aGUgcmVhc29uaW5nIEkndmUgbGFpZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzAwLCJPdXRwdXRUb2tlbnMiOjIxMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDo1NjozMS4xMzM1MTgzMjlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGEgdGltZW91dCBvYmplY3Qgb2Ygb25lIHByb3RvY29sIGNvdWxkIGJlIGF0dGFjaGVkIHRvIGEgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSBvZiBhIGRpZmZlcmVudCBwcm90b2NvbC4gVGhpcyBjYW4gb2NjdXIsIGZvciBleGFtcGxlLCB3aGVuIGFuIElDTVAgZXJyb3IgcGFja2V0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIFRDUCBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5LiBUaGUgdGltZW91dCBvYmplY3QncyBkYXRhIGFycmF5IGlzIHNpemVkIGFjY29yZGluZyB0byBpdHMgcHJvdG9jb2wgKGUuZy4sIElDTVAgaGFzIGZld2VyIHN0YXRlcyB0aGFuIFRDUCkuIElmIGEgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgdXNlcyBhbiBJQ01QIHRpbWVvdXQgb2JqZWN0LCBpdCB3aWxsIGFjY2VzcyB0aGUgdGltZW91dCBkYXRhIGFycmF5IHVzaW5nIFRDUCBzdGF0ZSBpbmRpY2VzLCByZXN1bHRpbmcgaW4gYW4gb3V0LW9mLWJvdW5kcyByZWFkLlxcblxcblRoaXMgdnVsbmVyYWJpbGl0eSBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkLiBUaGUgdGltZW91dCBvYmplY3RzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NgLCBlbnN1cmluZyB0aGV5IGFyZSBmdWxseSBpbml0aWFsaXplZCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLQVNBTiBpcyB0aGUgYXBwcm9wcmlhdGUgdG9vbCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYW5kIGl0IHdpbGwgZWZmZWN0aXZlbHkgY2F0Y2ggdGhpcyBidWcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBhIHRpbWVvdXQgb2JqZWN0IG9mIG9uZSBwcm90b2NvbCBjb3VsZCBiZSBhdHRhY2hlZCB0byBhIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgb2YgYSBkaWZmZXJlbnQgcHJvdG9jb2wuIFRoaXMgY2FuIG9jY3VyLCBmb3IgZXhhbXBsZSwgd2hlbiBhbiBJQ01QIGVycm9yIHBhY2tldCBpcyBhc3NvY2lhdGVkIHdpdGggYSBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeS4gVGhlIHRpbWVvdXQgb2JqZWN0J3MgZGF0YSBhcnJheSBpcyBzaXplZCBhY2NvcmRpbmcgdG8gaXRzIHByb3RvY29sIChlLmcuLCBJQ01QIGhhcyBmZXdlciBzdGF0ZXMgdGhhbiBUQ1ApLiBJZiBhIFRDUCBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IHVzZXMgYW4gSUNNUCB0aW1lb3V0IG9iamVjdCwgaXQgd2lsbCBhY2Nlc3MgdGhlIHRpbWVvdXQgZGF0YSBhcnJheSB1c2luZyBUQ1Agc3RhdGUgaW5kaWNlcywgcmVzdWx0aW5nIGluIGFuIG91dC1vZi1ib3VuZHMgcmVhZC5cXG5cXG5UaGlzIHZ1bG5lcmFiaWxpdHkgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhlIHRpbWVvdXQgb2JqZWN0cyBhcmUgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jYCwgZW5zdXJpbmcgdGhleSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBpdCB3aWxsIGVmZmVjdGl2ZWx5IGNhdGNoIHRoaXMgYnVnLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgcjzj[1] Phase: Succeeded StartedAt: 2026-08-11 00:56:42 +0000 UTC FinishedAt: 2026-08-11 00:56:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgcjzj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 00:56:42 +0000 UTC FinishedAt: 2026-08-11 00:56:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgcjzj[2] Phase: Succeeded StartedAt: 2026-08-11 00:56:42 +0000 UTC FinishedAt: 2026-08-11 04:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-11 00:56:42 +0000 UTC FinishedAt: 2026-08-11 04:47:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-11 00:56:42 +0000 UTC FinishedAt: 2026-08-11 00:56:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-11 00:56:42 +0000 UTC FinishedAt: 2026-08-11 00:56:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.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-workflowgcjzj/series-workflowgcjzj-convert-artifact-2539954707/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-11 00:56:52 +0000 UTC FinishedAt: 2026-08-11 01:15:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-11 00:56:52 +0000 UTC FinishedAt: 2026-08-11 01:15:23 +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:*13b2634a-d4ac-40f4-a5d3-0e089c2bda47,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-workflowgcjzj/series-workflowgcjzj-convert-artifact-2539954707/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": "e458a26e-2829-4da5-83f8-08ca3abac146", "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-workflowgcjzj/series-workflowgcjzj-build-action-1689829185/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-11 00:56:52 +0000 UTC FinishedAt: 2026-08-11 01:15:13 +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:*13b2634a-d4ac-40f4-a5d3-0e089c2bda47,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-workflowgcjzj/series-workflowgcjzj-convert-artifact-2539954707/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": "e458a26e-2829-4da5-83f8-08ca3abac146", "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-workflowgcjzj/series-workflowgcjzj-build-action-1689829185/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-11 01:15:23 +0000 UTC FinishedAt: 2026-08-11 01:15:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-11 01:15:23 +0000 UTC FinishedAt: 2026-08-11 01:15:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-11 01:15:23 +0000 UTC FinishedAt: 2026-08-11 01:15:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-11 01:15:23 +0000 UTC FinishedAt: 2026-08-11 01:15:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.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-workflowgcjzj/series-workflowgcjzj-convert-artifact-3599325450/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-11 01:15:33 +0000 UTC FinishedAt: 2026-08-11 01:17:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-11 01:15:33 +0000 UTC FinishedAt: 2026-08-11 01:17:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e458a26e-2829-4da5-83f8-08ca3abac146,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-workflowgcjzj/series-workflowgcjzj-build-action-1689829185/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-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-11 01:17:17 +0000 UTC FinishedAt: 2026-08-11 01:17:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-11 01:17:17 +0000 UTC FinishedAt: 2026-08-11 01:17:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-11 01:17:17 +0000 UTC FinishedAt: 2026-08-11 01:38:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-11 01:17:17 +0000 UTC FinishedAt: 2026-08-11 01:38:06 +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:*13b2634a-d4ac-40f4-a5d3-0e089c2bda47,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-workflowgcjzj/series-workflowgcjzj-convert-artifact-3599325450/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": "1e53e80e-b933-4bde-80ea-146d73ed3e44", "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-workflowgcjzj/series-workflowgcjzj-build-action-3788019502/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-11 01:17:17 +0000 UTC FinishedAt: 2026-08-11 01:37:37 +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:*13b2634a-d4ac-40f4-a5d3-0e089c2bda47,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-workflowgcjzj/series-workflowgcjzj-convert-artifact-3599325450/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": "1e53e80e-b933-4bde-80ea-146d73ed3e44", "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-workflowgcjzj/series-workflowgcjzj-build-action-3788019502/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-11 01:38:06 +0000 UTC FinishedAt: 2026-08-11 01:38:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-11 01:38:06 +0000 UTC FinishedAt: 2026-08-11 01:38:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-11 01:38:06 +0000 UTC FinishedAt: 2026-08-11 01:40:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-11 01:38:06 +0000 UTC FinishedAt: 2026-08-11 01:40:17 +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:*1e53e80e-b933-4bde-80ea-146d73ed3e44,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-workflowgcjzj/series-workflowgcjzj-build-action-3788019502/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-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-11 01:40:26 +0000 UTC FinishedAt: 2026-08-11 04:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-11 01:40:26 +0000 UTC FinishedAt: 2026-08-11 04:47:05 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"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:*e458a26e-2829-4da5-83f8-08ca3abac146,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1e53e80e-b933-4bde-80ea-146d73ed3e44,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-workflowgcjzj/series-workflowgcjzj-build-action-1689829185/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-workflowgcjzj/series-workflowgcjzj-build-action-3788019502/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-11 01:40:26 +0000 UTC FinishedAt: 2026-08-11 01:40:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-11 01:40:26 +0000 UTC FinishedAt: 2026-08-11 01:40:31 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"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-workflowgcjzj/series-workflowgcjzj-convert-artifact-734263455/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-11 01:40:26 +0000 UTC FinishedAt: 2026-08-11 01:40:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-11 01:40:26 +0000 UTC FinishedAt: 2026-08-11 01:40:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-11 01:40:27 +0000 UTC FinishedAt: 2026-08-11 01:40:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-11 01:40:37 +0000 UTC FinishedAt: 2026-08-11 04:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgcjzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_timeout_obj_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFT_CT","NF_CONNTRACK_TIMEOUT","NETFILTER_ADVANCED","NF_TABLES","NF_CONNTRACK"],"series_id":"db27af48-cd39-4fa3-a1b0-aea71a40d527","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-11 01:40:37 +0000 UTC FinishedAt: 2026-08-11 04:46:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e458a26e-2829-4da5-83f8-08ca3abac146,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1e53e80e-b933-4bde-80ea-146d73ed3e44,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-workflowgcjzj/series-workflowgcjzj-build-action-1689829185/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-workflowgcjzj/series-workflowgcjzj-build-action-3788019502/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-workflowgcjzj/series-workflowgcjzj-convert-artifact-734263455/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,}