Name: series-workflowrfjcm Phase: Succeeded StartedAt: 2026-09-14 08:10:58 +0000 UTC FinishedAt: 2026-09-14 12:53:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjcm[0] Phase: Succeeded StartedAt: 2026-09-14 08:10:58 +0000 UTC FinishedAt: 2026-09-14 09:06:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjcm[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 08:10:58 +0000 UTC FinishedAt: 2026-09-14 09:06:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "INET", "IPV6" ], "series_id": "35bb18db-fd7a-49f4-ade7-2bcb060866e8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "pneigh_enqueue", "__neigh_ifdown", "neigh_ifdown", "neigh_carrier_down", "neigh_proxy_process" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "78445023439506ebd83b86d40b1e428a3b309d4a", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwbmVpZ2hfZW5xdWV1ZSYjMzQ7LAogICAgJiMzNDtfX25laWdoX2lmZG93biYjMzQ7LAogICAgJiMzNDtuZWlnaF9pZmRvd24mIzM0OywKICAgICYjMzQ7bmVpZ2hfY2Fycmllcl9kb3duJiMzNDssCiAgICAmIzM0O25laWdoX3Byb3h5X3Byb2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgZGVkaWNhdGVkIHNwaW5sb2NrIChgcHJveHlfdGltZXJfbG9ja2ApIHRvIGBzdHJ1Y3QgbmVpZ2hfdGFibGVgIGFuZCB1c2VzIGl0IHRvIHNlcmlhbGl6ZSByZWFybWluZyBvZiBgdGJsLVx1MDAzZXByb3h5X3RpbWVyYCB2aWEgYG1vZF90aW1lcigpYCBpbiBgcG5laWdoX2VucXVldWUoKWAgd2l0aCBxdWV1ZSBwdXJnaW5nIGFuZCBzeW5jaHJvbm91cyB0aW1lciBkZWxldGlvbiBpbiBgX19uZWlnaF9pZmRvd24oKWAuIFRoZSBuZXcgbG9jayBpcyBpbml0aWFsaXplZCB3aXRoIGBzcGluX2xvY2tfaW5pdCgpYCBpbiBgbmVpZ2hfdGFibGVfaW5pdCgpYC5cblxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBwZXJ0YWluIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgYW5kIHRpbWVyIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNo4oCUc3VjaCBhcyBsb2NraW5nIG9yZGVyIGludmVyc2lvbnMsIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9uc+KAlGFyZSBoYW5kbGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBObyBuZXcgdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgcmVhZCBvciBicmFuY2hlZCB1cG9uLCBhbmQgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gaW4gdGhlIGNvcmUgbmV0d29ya2luZyBuZWlnaGJvdXIgc3Vic3lzdGVtIChuZXQvY29yZS9uZWlnaGJvdXIuYyBhbmQgaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgpLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHNwaW5sb2NrLCBwcm94eV90aW1lcl9sb2NrLCB0byBzZXJpYWxpemUgcHJveHkgdGltZXIgcmVhcm1pbmcgaW4gcG5laWdoX2VucXVldWUgd2l0aCBxdWV1ZSBwdXJnaW5nIGFuZCB0aW1lcl9kZWxldGVfc3luYyBpbiBfX25laWdoX2lmZG93bi4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3RhbmRhcmQgbmV0bGluay9zeXNmcyBkZXZpY2Ugc3RhdGUgbWFuaXB1bGF0aW9uIChlLmcuLCBicmluZ2luZyBpbnRlcmZhY2VzIGRvd24pIGFuZCBwcm94eSBBUlAvTkQgcGFja2V0IGhhbmRsaW5nLiBGdXp6aW5nIHdpdGggc3l6a2FsbGVyIChhbmQgbG9ja2RlcCkgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb25zLCBkZWFkbG9ja3MsIGFuZCB0aW1lciBzeW5jaHJvbml6YXRpb24gcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiODZjNTRkMWU3MWY1MjJlZTNjNDk5NDA2Y2ViNWI1MzkyODNkNTc3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDk6MDE6MjQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmggYi9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaFxuaW5kZXggODg2MGNjMjE3NWZjMS4uMTUxMDdjMDBiNGRmNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25laWdoYm91ci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaFxuQEAgLTIzOSw2ICYjNDM7MjM5LDggQEAgc3RydWN0IG5laWdoX3RhYmxlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGdjX2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRtYW5hZ2VkX2xpc3Q7XG4gXHRzcGlubG9ja190XHRcdGxvY2s7XG4mIzQzO1x0LyogU2VyaWFsaXplcyBwcm94eSB0aW1lciByZWFybWluZyB3aXRoIHRlYXJkb3duLiAqL1xuJiM0MztcdHNwaW5sb2NrX3RcdFx0cHJveHlfdGltZXJfbG9jaztcbiBcdHVuc2lnbmVkIGxvbmdcdFx0bGFzdF9yYW5kO1xuIFx0c3RydWN0IG5laWdoX3N0YXRpc3RpY3NcdF9fcGVyY3B1ICpzdGF0cztcbiBcdHN0cnVjdCBuZWlnaF9oYXNoX3RhYmxlIF9fcmN1ICpuaHQ7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuY1xuaW5kZXggMTM0OWMwZWVkYjY0Mi4uMWVhNzk0YTU0MWVmYiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZWlnaGJvdXIuY1xuQEAgLTQ3MSwxMCAmIzQzOzQ3MSwxMyBAQCBzdGF0aWMgaW50IF9fbmVpZ2hfaWZkb3duKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZWxvY2spO1xuIFxuIFx0cG5laWdoX2lmZG93bih0YmwsIGRldiwgc2tpcF9wZXJtKTtcbiYjNDM7XHQvKiBUaGUgY2FsbGJhY2sgZG9lcyBub3QgdGFrZSB0aGlzIGxvY2ssIHNvIHN5bmMgZGVsZXRpb24gY2FuIHdhaXQgZm9yIGl0LiAqL1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XG4gXHRwbmVpZ2hfcXVldWVfcHVyZ2UoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3F1ZXVlLCBkZXYgPyBkZXZfbmV0KGRldikgOiBOVUxMLFxuIFx0XHRcdCAgIHRibC1cdTAwM2VmYW1pbHkpO1xuIFx0aWYgKHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUpKVxuIFx0XHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXIpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xNzI5LDYgJiM0MzsxNzMyLDcgQEAgdm9pZCBwbmVpZ2hfZW5xdWV1ZShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5laWdoX3Bhcm1zICpwLFxuIFx0TkVJR0hfQ0Ioc2tiKS1cdTAwM2VzY2hlZF9uZXh0ID0gc2NoZWRfbmV4dDtcbiBcdE5FSUdIX0NCKHNrYiktXHUwMDNlZmxhZ3MgfD0gTE9DQUxMWV9FTlFVRVVFRDtcbiBcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xuIFx0c3Bpbl9sb2NrKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZS5sb2NrKTtcbiBcdGlmICh0aW1lcl9kZWxldGUoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyKSkge1xuIFx0XHRpZiAodGltZV9iZWZvcmUodGJsLVx1MDAzZXByb3h5X3RpbWVyLmV4cGlyZXMsIHNjaGVkX25leHQpKVxuQEAgLTE3NDAsNiAmIzQzOzE3NDQsNyBAQCB2b2lkIHBuZWlnaF9lbnF1ZXVlKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmVpZ2hfcGFybXMgKnAsXG4gXHRwLVx1MDAzZXFsZW4mIzQzOyYjNDM7O1xuIFx0bW9kX3RpbWVyKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lciwgc2NoZWRfbmV4dCk7XG4gXHRzcGluX3VubG9jayhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUubG9jayk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHBuZWlnaF9lbnF1ZXVlKTtcbiBcbkBAIC0xODU4LDYgJiM0MzsxODYzLDcgQEAgdm9pZCBuZWlnaF90YWJsZV9pbml0KGludCBpbmRleCwgc3RydWN0IG5laWdoX3RhYmxlICp0YmwpXG4gXHRcdFdBUk5fT04odGJsLVx1MDAzZWVudHJ5X3NpemUgJSBORUlHSF9QUklWX0FMSUdOKTtcbiBcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnRibC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XG4gXHRtdXRleF9pbml0KFx1MDAyNnRibC1cdTAwM2VwaGFzaF9sb2NrKTtcbiBcbiBcdElOSVRfREVGRVJSQUJMRV9XT1JLKFx1MDAyNnRibC1cdTAwM2VnY193b3JrLCBuZWlnaF9wZXJpb2RpY193b3JrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cG5laWdoX2VucXVldWUmIzM0OywKICAgICYjMzQ7X19uZWlnaF9pZmRvd24mIzM0OywKICAgICYjMzQ7bmVpZ2hfaWZkb3duJiMzNDssCiAgICAmIzM0O25laWdoX2NhcnJpZXJfZG93biYjMzQ7LAogICAgJiMzNDtuZWlnaF9wcm94eV9wcm9jZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBpbiB0aGUgY29yZSBuZXR3b3JraW5nIG5laWdoYm91ciBzdWJzeXN0ZW0gKG5ldC9jb3JlL25laWdoYm91ci5jIGFuZCBpbmNsdWRlL25ldC9uZWlnaGJvdXIuaCkuIEl0IGludHJvZHVjZXMgYSBuZXcgc3BpbmxvY2ssIHByb3h5X3RpbWVyX2xvY2ssIHRvIHNlcmlhbGl6ZSBwcm94eSB0aW1lciByZWFybWluZyBpbiBwbmVpZ2hfZW5xdWV1ZSB3aXRoIHF1ZXVlIHB1cmdpbmcgYW5kIHRpbWVyX2RlbGV0ZV9zeW5jIGluIF9fbmVpZ2hfaWZkb3duLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzdGFuZGFyZCBuZXRsaW5rL3N5c2ZzIGRldmljZSBzdGF0ZSBtYW5pcHVsYXRpb24gKGUuZy4sIGJyaW5naW5nIGludGVyZmFjZXMgZG93bikgYW5kIHByb3h5IEFSUC9ORCBwYWNrZXQgaGFuZGxpbmcuIEZ1enppbmcgd2l0aCBzeXprYWxsZXIgKGFuZCBsb2NrZGVwKSBpcyB3YXJyYW50ZWQgdG8gZGV0ZWN0IHBvdGVudGlhbCBsb2NrIGludmVyc2lvbnMsIGRlYWRsb2NrcywgYW5kIHRpbWVyIHN5bmNocm9uaXphdGlvbiByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI4NmM1NGQxZTcxZjUyMmVlM2M0OTk0MDZjZWI1YjUzOTI4M2Q1NzcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAwOTowMToyNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25laWdoYm91ci5oIGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKaW5kZXggODg2MGNjMjE3NWZjMS4uMTUxMDdjMDBiNGRmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKQEAgLTIzOSw2ICYjNDM7MjM5LDggQEAgc3RydWN0IG5laWdoX3RhYmxlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWdjX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZAltYW5hZ2VkX2xpc3Q7CiAJc3BpbmxvY2tfdAkJbG9jazsKJiM0MzsJLyogU2VyaWFsaXplcyBwcm94eSB0aW1lciByZWFybWluZyB3aXRoIHRlYXJkb3duLiAqLwomIzQzOwlzcGlubG9ja190CQlwcm94eV90aW1lcl9sb2NrOwogCXVuc2lnbmVkIGxvbmcJCWxhc3RfcmFuZDsKIAlzdHJ1Y3QgbmVpZ2hfc3RhdGlzdGljcwlfX3BlcmNwdSAqc3RhdHM7CiAJc3RydWN0IG5laWdoX2hhc2hfdGFibGUgX19yY3UgKm5odDsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25laWdoYm91ci5jIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKaW5kZXggMTM0OWMwZWVkYjY0Mi4uMWVhNzk0YTU0MWVmYiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKQEAgLTQ3MSwxMCAmIzQzOzQ3MSwxMyBAQCBzdGF0aWMgaW50IF9fbmVpZ2hfaWZkb3duKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dGJsLSZndDtsb2NrKTsKIAogCXBuZWlnaF9pZmRvd24odGJsLCBkZXYsIHNraXBfcGVybSk7CiYjNDM7CS8qIFRoZSBjYWxsYmFjayBkb2VzIG5vdCB0YWtlIHRoaXMgbG9jaywgc28gc3luYyBkZWxldGlvbiBjYW4gd2FpdCBmb3IgaXQuICovCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3RibC0mZ3Q7cHJveHlfdGltZXJfbG9jayk7CiAJcG5laWdoX3F1ZXVlX3B1cmdlKCZhbXA7dGJsLSZndDtwcm94eV9xdWV1ZSwgZGV2ID8gZGV2X25ldChkZXYpIDogTlVMTCwKIAkJCSAgIHRibC0mZ3Q7ZmFtaWx5KTsKIAlpZiAoc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKCZhbXA7dGJsLSZndDtwcm94eV9xdWV1ZSkpCiAJCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7dGJsLSZndDtwcm94eV90aW1lcik7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7dGJsLSZndDtwcm94eV90aW1lcl9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTcyOSw2ICYjNDM7MTczMiw3IEBAIHZvaWQgcG5laWdoX2VucXVldWUoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZWlnaF9wYXJtcyAqcCwKIAlORUlHSF9DQihza2IpLSZndDtzY2hlZF9uZXh0ID0gc2NoZWRfbmV4dDsKIAlORUlHSF9DQihza2IpLSZndDtmbGFncyB8PSBMT0NBTExZX0VOUVVFVUVEOwogCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3RibC0mZ3Q7cHJveHlfdGltZXJfbG9jayk7CiAJc3Bpbl9sb2NrKCZhbXA7dGJsLSZndDtwcm94eV9xdWV1ZS5sb2NrKTsKIAlpZiAodGltZXJfZGVsZXRlKCZhbXA7dGJsLSZndDtwcm94eV90aW1lcikpIHsKIAkJaWYgKHRpbWVfYmVmb3JlKHRibC0mZ3Q7cHJveHlfdGltZXIuZXhwaXJlcywgc2NoZWRfbmV4dCkpCkBAIC0xNzQwLDYgJiM0MzsxNzQ0LDcgQEAgdm9pZCBwbmVpZ2hfZW5xdWV1ZShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5laWdoX3Bhcm1zICpwLAogCXAtJmd0O3FsZW4mIzQzOyYjNDM7OwogCW1vZF90aW1lcigmYW1wO3RibC0mZ3Q7cHJveHlfdGltZXIsIHNjaGVkX25leHQpOwogCXNwaW5fdW5sb2NrKCZhbXA7dGJsLSZndDtwcm94eV9xdWV1ZS5sb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyX2xvY2spOwogfQogRVhQT1JUX1NZTUJPTChwbmVpZ2hfZW5xdWV1ZSk7CiAKQEAgLTE4NTgsNiAmIzQzOzE4NjMsNyBAQCB2b2lkIG5laWdoX3RhYmxlX2luaXQoaW50IGluZGV4LCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCkKIAkJV0FSTl9PTih0YmwtJmd0O2VudHJ5X3NpemUgJSBORUlHSF9QUklWX0FMSUdOKTsKIAogCXNwaW5fbG9ja19pbml0KCZhbXA7dGJsLSZndDtsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyX2xvY2spOwogCW11dGV4X2luaXQoJmFtcDt0YmwtJmd0O3BoYXNoX2xvY2spOwogCiAJSU5JVF9ERUZFUlJBQkxFX1dPUksoJmFtcDt0YmwtJmd0O2djX3dvcmssIG5laWdoX3BlcmlvZGljX3dvcmspOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTMxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmVpZ2hib3VyIFN1YnN5c3RlbSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBuZWlnaGJvdXIgc3Vic3lzdGVtLiBJdCYjMzk7cyBtb2RpZnlpbmcgYGluY2x1ZGUvbmV0L25laWdoYm91ci5oYCBhbmQgYG5ldC9jb3JlL25laWdoYm91ci5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uLiBMZXQmIzM5O3MgZGlnIGluLgoKTG9va2luZyBhdCB0aGUgYGRpZmZgLCBhIG5ldyBzcGlubG9jaywgYHByb3h5X3RpbWVyX2xvY2tgLCBpcyBpbnRyb2R1Y2VkIHdpdGhpbiB0aGUgYG5laWdoX3RhYmxlYCBzdHJ1Y3R1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHByb3RlY3RpbmcgYWNjZXNzIHRvIHRoZSBwcm94eSB0aW1lciwgcGFydGljdWxhcmx5IGR1cmluZyBvcGVyYXRpb25zIHRoYXQgbWlnaHQgcmFjZSB3aXRoIHRpbWVyIGV4cGlyeSBvciBkZWxldGlvbi4gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgaXQmIzM5O3MgZm9yICYjMzQ7U2VyaWFsaXplcyBwcm94eSB0aW1lciByZWFybWluZyB3aXRoIHRlYXJkb3duLCYjMzQ7IHdoaWNoIGlzIGEgZ29vZCBjbHVlLgoKVGhlIGBfX25laWdoX2lmZG93bmAgZnVuY3Rpb24gaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYCwgYXJvdW5kIGxpbmUgNDcxLCBub3cgaW5jbHVkZXMgYSBsb2NrIGFuZCB1bmxvY2sgcGFpciBhcm91bmQgYHRibC0mZ3Q7cHJveHlfdGltZXJfbG9ja2AgYmVmb3JlIGFuZCBhZnRlciBjYWxsaW5nIGBwbmVpZ2hfcXVldWVfcHVyZ2VgIGFuZCBgdGltZXJfZGVsZXRlX3N5bmNgLiBUaGlzIGlzIGNsZWFybHkgYWltZWQgYXQgZW5zdXJpbmcgdGhhdCB0aGUgcHJveHkgdGltZXIgaXNuJiMzOTt0IGRlbGV0ZWQgd2hpbGUgYSBjYWxsYmFjayBpcyBwZW5kaW5nIGluIGBwbmVpZ2hfaWZkb3duYC4gQSBnb29kIGV4YW1wbGUgb2YgcmFjZSBjb25kaXRpb24gcHJvdGVjdGlvbi4KClRoZW4sIHRoZXJlJiMzOTtzIGBwbmVpZ2hfZW5xdWV1ZWAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNzI5LiBIZXJlLCBhIGxvY2sgb24gYHRibC0mZ3Q7cHJveHlfdGltZXJfbG9ja2AgaGFzIGJlZW4gYWRkZWQgYXJvdW5kIHRoZSBvcGVyYXRpb25zIG9uIGB0YmwtJmd0O3Byb3h5X3F1ZXVlYCBhbmQgdGhlIHByb3h5IHRpbWVyIGl0c2VsZi4gVGhpcyBhZGRpdGlvbiwgSSBzdXNwZWN0LCBzeW5jaHJvbml6ZXMgdGhlIHF1ZXVlIG1hbmFnZW1lbnQgYW5kIHRpbWVyIG1vZGlmaWNhdGlvbiBvcGVyYXRpb25zIHdpdGggYW55IHRlYXJkb3duIGFjdGl2aXRpZXMgaGFwcGVuaW5nIGluIGBfX25laWdoX2lmZG93bmAuIFRoZSBjb21tZW50cyBpbiB0aGUgY29kZSBhbmQgdGhlIGxvY2sgcGxhY2VtZW50IGFyZSBjb25zaXN0ZW50LgoKRnVydGhlcm1vcmUsIGEgc3BpbmxvY2sgaXMgYWxzbyBpbml0aWFsaXplZCBpbiBgbmVpZ2hfdGFibGVfaW5pdGAsIHNvIHRoZSBwYXRjaCBpcyBhZGRpbmcgdGhpcyBsb2NraW5nIGZ1bmN0aW9uYWxpdHkgd2hlbiB0aGUgdGFibGUgaXMgaW5pdGlhbGl6ZWQsIHdoaWNoIGlzIGV4cGVjdGVkLgoKTXkgZXhwZXJ0IGludHVpdGlvbiBzdWdnZXN0cyB0aGF0IHRoZSBwYXRjaCBhaW1zIHRvIHNvbHZlIGEgc3VidGxlIHJhY2UgY29uZGl0aW9uLiBJdCBzZWVtcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzIHRvIGEgcHJveHkgdGltZXIgYW5kIHRoZSBhc3NvY2lhdGVkIHF1ZXVlLCBzcGVjaWZpY2FsbHkgd2hlbiBhbiBpbnRlcmZhY2UgZ29lcyBkb3duLiBUaGUgbmV3IHNwaW5sb2NrLCBgcHJveHlfdGltZXJfbG9ja2AsIGlzIHRoZSBrZXkgdG8gc3luY2hyb25pemluZyB0aGVzZSBvcGVyYXRpb25zLCBwcmV2ZW50aW5nIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3Mgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIHJlbGF0ZWQgdG8gdGhlIHRpbWVyIGFuZCBxdWV1ZS4gVGhpcyBpcyBhIHNvbGlkIGFwcHJvYWNoLgoKSSBuZWVkIHRvIGNvbmZpcm0gYnkgbG9va2luZyBhdCB0aGUgY2FsbHMgdG8gdGhvc2UgZnVuY3Rpb25zIGluIGNvbnRleHQgdG8gc2VlIGhvdyBpdCB3b3JrcyBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDYwOlx0XG4gNDYxOlx0c3RhdGljIGludCBfX25laWdoX2lmZG93bihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiA0NjI6XHRcdFx0XHQgIGJvb2wgc2tpcF9wZXJtKVxuIDQ2MzpcdHtcbiA0NjQ6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZ0YmwtXHUwMDNlbG9jayk7XG4gNDY1Olx0XHRpZiAobGlrZWx5KGRldikpIHtcbiA0NjY6XHRcdFx0bmVpZ2hfZmx1c2hfZGV2KHRibCwgZGV2LCBza2lwX3Blcm0pO1xuIDQ2NzpcdFx0fSBlbHNlIHtcbiA0Njg6XHRcdFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShza2lwX3Blcm0pO1xuIDQ2OTpcdFx0XHRuZWlnaF9mbHVzaF90YWJsZSh0YmwpO1xuIDQ3MDpcdFx0fVxuIDQ3MTpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZWxvY2spO1xuIDQ3MjpcdFxuIDQ3MzpcdFx0cG5laWdoX2lmZG93bih0YmwsIGRldiwgc2tpcF9wZXJtKTtcbiA0NzQ6XHRcdC8qIFRoZSBjYWxsYmFjayBkb2VzIG5vdCB0YWtlIHRoaXMgbG9jaywgc28gc3luYyBkZWxldGlvbiBjYW4gd2FpdCBmb3IgaXQuICovXG4gNDc1Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xuIDQ3NjpcdFx0cG5laWdoX3F1ZXVlX3B1cmdlKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZSwgZGV2ID8gZGV2X25ldChkZXYpIDogTlVMTCxcbiA0Nzc6XHRcdFx0XHQgICB0YmwtXHUwMDNlZmFtaWx5KTtcbiA0Nzg6XHRcdGlmIChza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3F1ZXVlKSlcbiA0Nzk6XHRcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyKTtcbiA0ODA6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcbiA0ODE6XHRcdHJldHVybiAwO1xuIDQ4MjpcdH1cbiA0ODM6XHRcbiA0ODQ6XHRpbnQgbmVpZ2hfY2Fycmllcl9kb3duKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDQ4NTpcdHtcbiA0ODY6XHRcdF9fbmVpZ2hfaWZkb3duKHRibCwgZGV2LCB0cnVlKTtcbiA0ODc6XHRcdHJldHVybiAwO1xuIDQ4ODpcdH1cbiA0ODk6XHRcbiA0OTA6XHRpbnQgbmVpZ2hfaWZkb3duKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDQ5MTpcdHtcbiA0OTI6XHRcdF9fbmVpZ2hfaWZkb3duKHRibCwgZGV2LCBmYWxzZSk7XG4gNDkzOlx0XHRyZXR1cm4gMDtcbiA0OTQ6XHR9XG4gNDk1Olx0XG4gNDk2Olx0c3RhdGljIHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoX2FsbG9jKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLFxuIDQ5NzpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIDQ5ODpcdFx0XHRcdFx0ICAgICB1MzIgZmxhZ3MsIGJvb2wgZXhlbXB0X2Zyb21fZ2MpXG4gNDk5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NjgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBoYXZpbmcgdGhlbToKCioqQW5hbHl6aW5nIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AgTGluZXMgMTcyMC0xNzYwKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBzcGVjaWZpYyBzZWN0aW9uIG9mIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AuIExpbmVzIDE3MjAgdGhyb3VnaCAxNzYwLCB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBhcmUgZ2V0dGluZyBpbnRlcmVzdGluZy4gSSYjMzk7bSBmb2N1c2luZyBpbiBiZWNhdXNlIEkgc3VzcGVjdCB3ZSBtaWdodCBmaW5kIHNvbWUgY3J1Y2lhbCBkZXRhaWxzIGFib3V0IFsqSW5zZXJ0IHlvdXIgZXhwZXJ0IGZpZWxkIGhlcmUqLCBlLmcuLCBBUlAgY2FjaGUgbWFuYWdlbWVudCwgbmVpZ2hib3IgZGlzY292ZXJ5IHByb3RvY29sLCBtdWx0aWNhc3QgaGFuZGxpbmcsIGV0Yy5dLiBUaGlzIHJhbmdlIG9mdGVuIGVuY29tcGFzc2VzIGEgY3JpdGljYWwgZnVuY3Rpb24sIGxpa2UgcGVyaGFwcyB0aGUgbG9naWMgZm9yIFtzcGVjaWZpYyBmdW5jdGlvbiB3aXRoaW4geW91ciBmaWVsZF0uIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyB0aGV5IGhhbmRsZSBbc3BlY2lmaWMgYXNwZWN0IHlvdSB3YW50IHRvIGZvY3VzIG9uXS4gQXJlIHRoZXkgdXNpbmcgYW55IGNsZXZlciBkYXRhIHN0cnVjdHVyZXMgb3Igb3B0aW1pemF0aW9uIHRlY2huaXF1ZXM/IElzIHRoZXJlIGEgc3VidGxlIHJhY2UgY29uZGl0aW9uIHRoYXQgY291bGQgYmUgZXhwbG9pdGVkPyBBIGNvbW1vbiBvdmVyc2lnaHQ/IE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCByZWxhdGVzIHRvIFt5b3VyIGh5cG90aGVzaXNdLCBidXQgSSBuZWVkIHRvIHNlZSB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLiBOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgdGhleSBkaWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTcyMDpcdH1cbjE3MjE6XHRcbjE3MjI6XHR2b2lkIHBuZWlnaF9lbnF1ZXVlKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmVpZ2hfcGFybXMgKnAsXG4xNzIzOlx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTcyNDpcdHtcbjE3MjU6XHRcdHVuc2lnbmVkIGxvbmcgc2NoZWRfbmV4dCA9IG5laWdoX3Byb3h5X2RlbGF5KHApO1xuMTcyNjpcdFxuMTcyNzpcdFx0aWYgKHAtXHUwMDNlcWxlbiBcdTAwM2UgTkVJR0hfVkFSKHAsIFBST1hZX1FMRU4pKSB7XG4xNzI4Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTcyOTpcdFx0XHRyZXR1cm47XG4xNzMwOlx0XHR9XG4xNzMxOlx0XG4xNzMyOlx0XHRORUlHSF9DQihza2IpLVx1MDAzZXNjaGVkX25leHQgPSBzY2hlZF9uZXh0O1xuMTczMzpcdFx0TkVJR0hfQ0Ioc2tiKS1cdTAwM2VmbGFncyB8PSBMT0NBTExZX0VOUVVFVUVEO1xuMTczNDpcdFxuMTczNTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcbjE3MzY6XHRcdHNwaW5fbG9jayhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUubG9jayk7XG4xNzM3Olx0XHRpZiAodGltZXJfZGVsZXRlKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcikpIHtcbjE3Mzg6XHRcdFx0aWYgKHRpbWVfYmVmb3JlKHRibC1cdTAwM2Vwcm94eV90aW1lci5leHBpcmVzLCBzY2hlZF9uZXh0KSlcbjE3Mzk6XHRcdFx0XHRzY2hlZF9uZXh0ID0gdGJsLVx1MDAzZXByb3h5X3RpbWVyLmV4cGlyZXM7XG4xNzQwOlx0XHR9XG4xNzQxOlx0XHRza2JfZHN0X2Ryb3Aoc2tiKTtcbjE3NDI6XHRcdGRldl9ob2xkKHNrYi1cdTAwM2VkZXYpO1xuMTc0MzpcdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUsIHNrYik7XG4xNzQ0Olx0XHRwLVx1MDAzZXFsZW4mIzQzOyYjNDM7O1xuMTc0NTpcdFx0bW9kX3RpbWVyKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lciwgc2NoZWRfbmV4dCk7XG4xNzQ2Olx0XHRzcGluX3VubG9jayhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUubG9jayk7XG4xNzQ3Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XG4xNzQ4Olx0fVxuMTc0OTpcdEVYUE9SVF9TWU1CT0wocG5laWdoX2VucXVldWUpO1xuMTc1MDpcdFxuMTc1MTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5laWdoX3Bhcm1zICpsb29rdXBfbmVpZ2hfcGFybXMoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsXG4xNzUyOlx0XHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldCAqbmV0LCBpbnQgaWZpbmRleClcbjE3NTM6XHR7XG4xNzU0Olx0XHRzdHJ1Y3QgbmVpZ2hfcGFybXMgKnA7XG4xNzU1Olx0XG4xNzU2Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIFx1MDAyNnRibC1cdTAwM2VwYXJtc19saXN0LCBsaXN0KSB7XG4xNzU3Olx0XHRcdGlmICgocC1cdTAwM2VkZXYgXHUwMDI2XHUwMDI2IHAtXHUwMDNlZGV2LVx1MDAzZWlmaW5kZXggPT0gaWZpbmRleCBcdTAwMjZcdTAwMjYgbmV0X2VxKG5laWdoX3Bhcm1zX25ldChwKSwgbmV0KSkgfHxcbjE3NTg6XHRcdFx0ICAgICghcC1cdTAwM2VkZXYgXHUwMDI2XHUwMDI2ICFpZmluZGV4IFx1MDAyNlx1MDAyNiBuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpKVxuMTc1OTpcdFx0XHRcdHJldHVybiBwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NDAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb21taXQgYW5kIFByb3h5IFRpbWVyKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb21taXQuIEkgd2FzIGluaXRpYWxseSBnb2luZyB0byByZWFjaCBmb3IgYGdpdCBsb2cgLW4gMSAtLXN0YXRgIG9yIGBnaXQgbG9nIC1wIC0xYCB0byBnZXQgYSBxdWljayBvdmVydmlldyBhbmQgdGhlIHBhdGNoLCBvciBldmVuIGdyZXAgd2l0aGluIHRoZSByZXBvc2l0b3J5IGlmIG5lY2Vzc2FyeS4gQnV0LCB3YWl0LCBJIGNhbiBzZWUgdGhlIGNvbW1pdCBtZXNzYWdlIHJpZ2h0IGhlcmUgaW4gdGhlIHByb21wdCEgVGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGBzeXotY2x1c3RlcmAgY29tbWl0LCBhcHBseWluZyBhIHBhdGNoIHRoYXQgd2FzIHVuZGVyIHJldmlldy4gR29vZCB0byBrbm93IHRoZSBjb250ZXh0LgoKTm93LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBkaWcgaW50byB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWluZyBjaGFuZ2VkIGJ5IHRoaXMgY29tbWl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIHByb3h5IHRpbWVyIGNhbGxiYWNrIGRvZXMsIGFzIGl0IGlzIHRoZSBtb3N0IG1lYW5pbmdmdWwgcGFydC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY3JpdGljYWwgcGllY2Ugb2YgdGhpcyBsaWtlbHkgbGllcy4gSXQmIzM5O3MgdGhlIHBvaW50IG9mIHRoaXMsIGFuZCB0aGUgY29udGV4dCBvZiB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJveHlfdGltZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYz00NjE9c3RhdGljIGludCBfX25laWdoX2lmZG93bihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy00NzQtXHQvKiBUaGUgY2FsbGJhY2sgZG9lcyBub3QgdGFrZSB0aGlzIGxvY2ssIHNvIHN5bmMgZGVsZXRpb24gY2FuIHdhaXQgZm9yIGl0LiAqL1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6NDc1Olx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcbm5ldC9jb3JlL25laWdoYm91ci5jLTQ3Ni1cdHBuZWlnaF9xdWV1ZV9wdXJnZShcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUsIGRldiA/IGRldl9uZXQoZGV2KSA6IE5VTEwsXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtNDc4LVx0aWYgKHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUpKVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6NDc5Olx0XHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXIpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6NDgwOlx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtNDgxLVx0cmV0dXJuIDA7XG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MTY3NT1zdGF0aWMgdm9pZCBuZWlnaF9wcm94eV9wcm9jZXNzKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTY3Ni17XG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNjc3Olx0c3RydWN0IG5laWdoX3RhYmxlICp0YmwgPSB0aW1lcl9jb250YWluZXJfb2YodGJsLCB0LCBwcm94eV90aW1lcik7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNjc4LVx0bG9uZyBzY2hlZF9uZXh0ID0gMDtcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNzA0LVx0fVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTcwNTpcdHRpbWVyX2RlbGV0ZShcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXIpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTcwNi1cdGlmIChzY2hlZF9uZXh0KVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTcwNzpcdFx0bW9kX3RpbWVyKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lciwgamlmZmllcyAmIzQzOyBzY2hlZF9uZXh0KTtcbm5ldC9jb3JlL25laWdoYm91ci5jLTE3MDgtXHRzcGluX3VubG9jayhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUubG9jayk7XG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MTcyMj12b2lkIHBuZWlnaF9lbnF1ZXVlKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmVpZ2hfcGFybXMgKnAsXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTczNC1cbm5ldC9jb3JlL25laWdoYm91ci5jOjE3MzU6XHRzcGluX2xvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTczNi1cdHNwaW5fbG9jayhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUubG9jayk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNzM3Olx0aWYgKHRpbWVyX2RlbGV0ZShcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXIpKSB7XG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNzM4Olx0XHRpZiAodGltZV9iZWZvcmUodGJsLVx1MDAzZXByb3h5X3RpbWVyLmV4cGlyZXMsIHNjaGVkX25leHQpKVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTczOTpcdFx0XHRzY2hlZF9uZXh0ID0gdGJsLVx1MDAzZXByb3h5X3RpbWVyLmV4cGlyZXM7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNzQwLVx0fVxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTE3NDQtXHRwLVx1MDAzZXFsZW4mIzQzOyYjNDM7O1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTc0NTpcdG1vZF90aW1lcihcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXIsIHNjaGVkX25leHQpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTc0Ni1cdHNwaW5fdW5sb2NrKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZS5sb2NrKTtcbm5ldC9jb3JlL25laWdoYm91ci5jOjE3NDc6XHRzcGluX3VubG9ja19iaChcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNzQ4LX1cbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0xODI2PXZvaWQgbmVpZ2hfdGFibGVfaW5pdChpbnQgaW5kZXgsIHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsKVxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTE4NjUtXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0YmwtXHUwMDNlbG9jayk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxODY2Olx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTg2Ny1cdG11dGV4X2luaXQoXHUwMDI2dGJsLVx1MDAzZXBoYXNoX2xvY2spO1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTE4NzQtXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxODc1Olx0dGltZXJfc2V0dXAoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyLCBuZWlnaF9wcm94eV9wcm9jZXNzLCAwKTtcbm5ldC9jb3JlL25laWdoYm91ci5jLTE4NzYtXHRza2JfcXVldWVfaGVhZF9pbml0X2NsYXNzKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZSxcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0xODg5PWludCBuZWlnaF90YWJsZV9jbGVhcihpbnQgaW5kZXgsIHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsKVxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTE4OTYtXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2dGJsLVx1MDAzZWdjX3dvcmspO1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTg5NzpcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcik7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xODk4LVx0cG5laWdoX3F1ZXVlX3B1cmdlKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZSwgTlVMTCwgdGJsLVx1MDAzZWZhbWlseSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEyOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiB0aGUgZGVzY3JpYmVkIGNvZGUgY29udGV4dDoKCioqQW5hbHl6aW5nIGBuZWlnaF9wcm94eV9wcm9jZXNzYCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEJhc2VkIG9uIHRoZSBwcmV2aW91cyBjb250ZXh0LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGZ1bmN0aW9uIGBuZWlnaF9wcm94eV9wcm9jZXNzYC4gVGhlIHJlZmVyZW5jZSB0byBsaW5lIDE2NzUgc3VnZ2VzdHMgYSBzcGVjaWZpYyBwb2ludCBvZiBpbnRlcmVzdCB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSYjMzk7bSBsaWtlbHkgbG9va2luZyBmb3IgYSBwYXJ0aWN1bGFyIGJlaGF2aW9yLCBsb2dpYyBmbG93LCBvciBwb3RlbnRpYWwgaXNzdWUgd2l0aGluIHRoYXQgc2VjdGlvbiBvZiB0aGUgY29kZS4gTXkgZXhwZXJ0IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBzeXN0ZW0gdGVsbHMgbWUgd2hhdCBraW5kIG9mIHByb2JsZW1zIG1pZ2h0IGJlIGx1cmtpbmcgYXJvdW5kIHRoYXQgYXJlYS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmVpZ2hib3VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2NzU6XHRzdGF0aWMgdm9pZCBuZWlnaF9wcm94eV9wcm9jZXNzKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuMTY3NjpcdHtcbjE2Nzc6XHRcdHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsID0gdGltZXJfY29udGFpbmVyX29mKHRibCwgdCwgcHJveHlfdGltZXIpO1xuMTY3ODpcdFx0bG9uZyBzY2hlZF9uZXh0ID0gMDtcbjE2Nzk6XHRcdHVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllcztcbjE2ODA6XHRcdHN0cnVjdCBza19idWZmICpza2IsICpuO1xuMTY4MTpcdFxuMTY4MjpcdFx0c3Bpbl9sb2NrKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZS5sb2NrKTtcbjE2ODM6XHRcbjE2ODQ6XHRcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3F1ZXVlLCBza2IsIG4pIHtcbjE2ODU6XHRcdFx0bG9uZyB0ZGlmID0gTkVJR0hfQ0Ioc2tiKS1cdTAwM2VzY2hlZF9uZXh0IC0gbm93O1xuMTY4NjpcdFxuMTY4NzpcdFx0XHRpZiAodGRpZiBcdTAwM2M9IDApIHtcbjE2ODg6XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVx1MDAzZWRldjtcbjE2ODk6XHRcbjE2OTA6XHRcdFx0XHRuZWlnaF9wYXJtc19xbGVuX2RlYyhkZXYsIHRibC1cdTAwM2VmYW1pbHkpO1xuMTY5MTpcdFx0XHRcdF9fc2tiX3VubGluayhza2IsIFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZSk7XG4xNjkyOlx0XG4xNjkzOlx0XHRcdFx0aWYgKHRibC1cdTAwM2Vwcm94eV9yZWRvIFx1MDAyNlx1MDAyNiBuZXRpZl9ydW5uaW5nKGRldikpIHtcbjE2OTQ6XHRcdFx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbjE2OTU6XHRcdFx0XHRcdHRibC1cdTAwM2Vwcm94eV9yZWRvKHNrYik7XG4xNjk2Olx0XHRcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjE2OTc6XHRcdFx0XHR9IGVsc2Uge1xuMTY5ODpcdFx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4xNjk5Olx0XHRcdFx0fVxuMTcwMDpcdFxuMTcwMTpcdFx0XHRcdGRldl9wdXQoZGV2KTtcbjE3MDI6XHRcdFx0fSBlbHNlIGlmICghc2NoZWRfbmV4dCB8fCB0ZGlmIFx1MDAzYyBzY2hlZF9uZXh0KVxuMTcwMzpcdFx0XHRcdHNjaGVkX25leHQgPSB0ZGlmO1xuMTcwNDpcdFx0fVxuMTcwNTpcdFx0dGltZXJfZGVsZXRlKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcik7XG4xNzA2Olx0XHRpZiAoc2NoZWRfbmV4dClcbjE3MDc6XHRcdFx0bW9kX3RpbWVyKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lciwgamlmZmllcyAmIzQzOyBzY2hlZF9uZXh0KTtcbjE3MDg6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZS5sb2NrKTtcbjE3MDk6XHR9XG4xNzEwOlx0XG4xNzExOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgbmVpZ2hfcHJveHlfZGVsYXkoc3RydWN0IG5laWdoX3Bhcm1zICpwKVxuMTcxMjpcdHtcbjE3MTM6XHRcdC8qIElmIHByb3h5X2RlbGF5IGlzIHplcm8sIGRvIG5vdCBjYWxsIGdldF9yYW5kb21fdTMyX2JlbG93KClcbjE3MTQ6XHRcdCAqIGFzIGl0IGlzIHVuZGVmaW5lZCBiZWhhdmlvci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk0NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggUmVsYXRlZCB0byBOZXR3b3JrIE5laWdoYm9yIERpc2NvdmVyeSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBub3RpY2luZyB0aGlzIHBhdGNoIGFuZCB0aGUgY2hhbmdlcyB3aXRoaW4gYF9fbmVpZ2hfaWZkb3duYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBjYWxsaW5nIGBwbmVpZ2hfaWZkb3duYCwgdGhlbiBncmFiYmluZyBgdGJsLSZndDtwcm94eV90aW1lcl9sb2NrYCwgcHVyZ2luZyB0aGUgYHByb3h5X3F1ZXVlYCwgYW5kIGNvbmRpdGlvbmFsbHkgZGVsZXRpbmcgYHRibC0mZ3Q7cHJveHlfdGltZXJgLiBUaGUgY29ycmVzcG9uZGluZyBlbnF1ZXVlIG9wZXJhdGlvbiBpcyBpbiBgcG5laWdoX2VucXVldWVgLCB3aGljaCAqYWxzbyogdXNlcyB0aGUgc2FtZSBsb2NrLCBhbG9uZyB3aXRoIGBwcm94eV9xdWV1ZS5sb2NrYCwgYW5kIG1vZGlmaWVzIGBwcm94eV90aW1lcmAuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gYXJpc2VzOiBJcyB0aGlzIHJlYWNoYWJsZSBjb2RlPyBBaGEsIHRoaXMgaXMgaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYCwgc28gaXQmIzM5O3MgdGhlIGNvcmUgbmVpZ2hib3IgZGlzY292ZXJ5IGFuZCBtYW5hZ2VtZW50IGltcGxlbWVudGF0aW9uISBUaGF0IG1ha2VzIHNlbnNlIC0gcHJveHkgQVJQIGFuZCBwcm94eSBORCB1c2UgYHBuZWlnaF9lbnF1ZXVlYC4gU28gd2hlbiBhbiBpbnRlcmZhY2UgZ29lcyBkb3duLCBsaWtlIHdpdGggYGlwIGxpbmsgc2V0IGRvd25gLCB0aGUgYF9fbmVpZ2hfaWZkb3duYCBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQuCgpCdXQgaGVyZSYjMzk7cyBhIHBvdGVudGlhbCBpc3N1ZSB0aGF0IGp1bXBzIG91dC4gSSBzZWUgYHRpbWVyX2RlbGV0ZV9zeW5jYCBiZWluZyBjYWxsZWQgKmluc2lkZSogdGhlIGBwcm94eV90aW1lcl9sb2NrYCBzcGlubG9jayEgVGhhdCBtYWtlcyBtZSBuZXJ2b3VzIGJlY2F1c2UgYHRpbWVyX2RlbGV0ZV9zeW5jYCBpcyBrbm93biB0byBiZSBjYXBhYmxlIG9mIHNsZWVwaW5nIG9yIHBvdGVudGlhbGx5IGNhdXNpbmcgZGVhZGxvY2tzLiBXZSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gV2UgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgdGltZXJfZGVsZXRlX3N5bmNgIHdpdGhpbiB0aGUga2VybmVsIHRyZWUgdG8gdW5kZXJzdGFuZCBpZiBpdCBzbGVlcHMgb3Igc3BpbnMuIFRoaXMgY291bGQgYmUgYSBjcml0aWNhbCBwb2ludCB0aGF0IG5lZWRzIGFkZHJlc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpbWVyX2RlbGV0ZV9zeW5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC90aW1lci5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdGltZXIuaC0zMi0gKiBpdCYjMzk7cyBzYWZlIHRvIHdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZSBydW5uaW5nIGluc3RhbmNlIGZyb21cbmluY2x1ZGUvbGludXgvdGltZXIuaDozMzogKiBJUlEgaGFuZGxlcnMsIGZvciBleGFtcGxlLCBieSBjYWxsaW5nIHRpbWVyX2RlbGV0ZV9zeW5jKCkuXG5pbmNsdWRlL2xpbnV4L3RpbWVyLmgtMzQtICpcbi0tXG5pbmNsdWRlL2xpbnV4L3RpbWVyLmg9MTYzPWV4dGVybiB2b2lkIGFkZF90aW1lcl9nbG9iYWwoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKTtcbmluY2x1ZGUvbGludXgvdGltZXIuaC0xNjQtXG5pbmNsdWRlL2xpbnV4L3RpbWVyLmg6MTY1OmV4dGVybiBpbnQgdGltZXJfZGVsZXRlX3N5bmNfdHJ5KHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcik7XG5pbmNsdWRlL2xpbnV4L3RpbWVyLmg6MTY2OmV4dGVybiBpbnQgdGltZXJfZGVsZXRlX3N5bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKTtcbmluY2x1ZGUvbGludXgvdGltZXIuaC0xNjctZXh0ZXJuIGludCB0aW1lcl9kZWxldGUoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkzMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHRpbWVyX2RlbGV0ZV9zeW5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBga2VybmVsL3RpbWUvdGltZXIuY2AgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgdGltZXJfZGVsZXRlX3N5bmNgIHdvcmtzLiBNeSBndXQgZmVlbGluZyBpcyB0aGlzIGlzIGdvaW5nIHRvIGJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgZW5zdXJpbmcgYSB0aW1lciBpcyBwcm9wZXJseSByZW1vdmVkIGZyb20gdGhlIHN5c3RlbSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzeW5jaHJvbml6YXRpb24gYW5kIHJhY2UgY29uZGl0aW9ucy4gSSYjMzk7bSBob3BpbmcgdG8gc2VlIHRoZSB1c3VhbCBzdXNwZWN0czogY2FyZWZ1bCBsb2NraW5nIHRvIHByZXZlbnQgZG91YmxlIGZyZWVzIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgZ3JhY2VmdWwgaGFuZGxpbmcgb2YgaW4tZmxpZ2h0IHRpbWVyIGNhbGxiYWNrcywgYW5kIHJvYnVzdCBlcnJvciBjaGVja2luZy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGRpZmZlcmVudCB0aW1lciBxdWV1ZXMgYW5kIHdoZXRoZXIgaXQgYmxvY2tzIG9yIHJldHVybnMgaW1tZWRpYXRlbHkgaW4gY2VydGFpbiBzaXR1YXRpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgc3VidGxldGllcyBhcm91bmQgaG93IGl0IGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYGhydGltZXJgIGFuZCBzb2Z0d2FyZSB0aW1lcnMuIEVzc2VudGlhbGx5LCBJJiMzOTttIGV4cGVjdGluZyBhIGNhcmVmdWxseSBjcmFmdGVkIGRhbmNlIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSB0aW1lciYjMzk7cyBtZW1vcnkgaXMgcmVjbGFpbWVkIGF0IHRoZSByaWdodCB0aW1lLiBMZXQmIzM5O3Mgc2VlIGlmIG15IGV4cGVjdGF0aW9ucyBhcmUgbWV0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgdGltZXJfZGVsZXRlX3N5bmNcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdGltZS90aW1lci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90aW1lL3RpbWVyLmM9MTU5MT1zdGF0aWMgaW50IF9fdGltZXJfZGVsZXRlX3N5bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCBib29sIHNodXRkb3duKVxuLS1cbmtlcm5lbC90aW1lL3RpbWVyLmMtMTY3My0gKi9cbmtlcm5lbC90aW1lL3RpbWVyLmM6MTY3NDppbnQgdGltZXJfZGVsZXRlX3N5bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxua2VybmVsL3RpbWUvdGltZXIuYy0xNjc1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMDkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFRpbWVyIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0IGB0aW1lci5jYCBmaWxlIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIHRpbWUgc3Vic3lzdGVtLiBUaGUgY29tbWVudCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgYXJvdW5kIGxpbmUgMTY3MCDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY3JpdGljYWwgc3R1ZmYgaXMgbGlrZWx5IGhhcHBlbmluZy4gSSBrbm93IHRoaXMgYXJlYSBpbnNpZGUgYW5kIG91dC4gSSYjMzk7bSB0aGlua2luZywgYmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgdGhhdCB0aGlzIHNlY3Rpb24gbGlrZWx5IGdvdmVybnMgdGhlIGFjdHVhbCBmaXJpbmcgb2YgdGltZXIgZXZlbnRzIGFuZCBtYXliZSB0aGUgcGVyaW9kaWMgY2hlY2tzIG9mIHNjaGVkdWxlZCB0aW1lcnMsIG9yIHBvdGVudGlhbGx5IHNvbWUgYXNwZWN0IG9mIHRoZSB0aW1lciBpbnRlcnJ1cHQgaGFuZGxpbmcuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHBhcnNlIHRoZSBzdXJyb3VuZGluZyBsb2dpYyB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGNvbnRleHQgYW5kIHdoYXQgdGhlIGNvbW1lbnQgaXMgZXhwbGFpbmluZy4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBpbnNpZ2h0cyByZWdhcmRpbmcgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcywgYW5kIHRoZSBpbnRyaWNhdGUgYmFsYW5jaW5nIGFjdCB0aGUgZGV2ZWxvcGVycyBoYWQgdG8gbWFrZS4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RpbWUvdGltZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY1MDpcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbF90aW1lcl9mbigpO1xuMTY1MTpcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZS1cdTAwM2VydW5uaW5nX3RpbWVyID0gbXl0aW1lcjtcbjE2NTI6XHQgKiAgICBzcGluX2xvY2tfaXJxKHNvbWVsb2NrKTtcbjE2NTM6XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdTAwM2NJUlFcdTAwM2VcbjE2NTQ6XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGluX2xvY2soc29tZWxvY2spO1xuMTY1NTpcdCAqICAgIHRpbWVyX2RlbGV0ZV9zeW5jKG15dGltZXIpO1xuMTY1NjpcdCAqICAgIHdoaWxlIChiYXNlLVx1MDAzZXJ1bm5pbmdfdGltZXIgPT0gbXl0aW1lcik7XG4xNjU3Olx0ICpcbjE2NTg6XHQgKiBOb3cgdGltZXJfZGVsZXRlX3N5bmMoKSB3aWxsIG5ldmVyIHJldHVybiBhbmQgbmV2ZXIgcmVsZWFzZSBzb21lbG9jay5cbjE2NTk6XHQgKiBUaGUgaW50ZXJydXB0IG9uIHRoZSBvdGhlciBDUFUgaXMgd2FpdGluZyB0byBncmFiIHNvbWVsb2NrIGJ1dCBpdCBoYXNcbjE2NjA6XHQgKiBpbnRlcnJ1cHRlZCB0aGUgc29mdGlycSB0aGF0IENQVTAgaXMgd2FpdGluZyB0byBmaW5pc2guXG4xNjYxOlx0ICpcbjE2NjI6XHQgKiBUaGlzIGZ1bmN0aW9uIGNhbm5vdCBndWFyYW50ZWUgdGhhdCB0aGUgdGltZXIgaXMgbm90IHJlYXJtZWQgYWdhaW4gYnlcbjE2NjM6XHQgKiBzb21lIGNvbmN1cnJlbnQgb3IgcHJlZW1wdGluZyBjb2RlLCByaWdodCBhZnRlciBpdCBkcm9wcGVkIHRoZSBiYXNlXG4xNjY0Olx0ICogbG9jay4gSWYgdGhlcmUgaXMgdGhlIHBvc3NpYmlsaXR5IG9mIGEgY29uY3VycmVudCByZWFybSB0aGVuIHRoZSByZXR1cm5cbjE2NjU6XHQgKiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gaXMgbWVhbmluZ2xlc3MuXG4xNjY2Olx0ICpcbjE2Njc6XHQgKiBJZiBzdWNoIGEgZ3VhcmFudGVlIGlzIG5lZWRlZCwgZS5nLiBmb3IgdGVhcmRvd24gc2l0dWF0aW9ucyB0aGVuIHVzZVxuMTY2ODpcdCAqIHRpbWVyX3NodXRkb3duX3N5bmMoKSBpbnN0ZWFkLlxuMTY2OTpcdCAqXG4xNjcwOlx0ICogUmV0dXJuOlxuMTY3MTpcdCAqICogJTBcdC0gVGhlIHRpbWVyIHdhcyBub3QgcGVuZGluZ1xuMTY3MjpcdCAqICogJTFcdC0gVGhlIHRpbWVyIHdhcyBwZW5kaW5nIGFuZCBkZWFjdGl2YXRlZFxuMTY3MzpcdCAqL1xuMTY3NDpcdGludCB0aW1lcl9kZWxldGVfc3luYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXG4xNjc1Olx0e1xuMTY3NjpcdFx0cmV0dXJuIF9fdGltZXJfZGVsZXRlX3N5bmModGltZXIsIGZhbHNlKTtcbjE2Nzc6XHR9XG4xNjc4Olx0RVhQT1JUX1NZTUJPTCh0aW1lcl9kZWxldGVfc3luYyk7XG4xNjc5Olx0XG4xNjgwOlx0LyoqXG4xNjgxOlx0ICogdGltZXJfc2h1dGRvd25fc3luYyAtIFNodXRkb3duIGEgdGltZXIgYW5kIHByZXZlbnQgcmVhcm1pbmdcbjE2ODI6XHQgKiBAdGltZXI6IFRoZSB0aW1lciB0byBiZSBzaHV0ZG93blxuMTY4MzpcdCAqXG4xNjg0Olx0ICogV2hlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdCBpcyBndWFyYW50ZWVkIHRoYXQ6XG4xNjg1Olx0ICogICAtIEB0aW1lciBpcyBub3QgcXVldWVkXG4xNjg2Olx0ICogICAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBvZiBAdGltZXIgaXMgbm90IHJ1bm5pbmdcbjE2ODc6XHQgKiAgIC0gQHRpbWVyIGNhbm5vdCBiZSBlbnF1ZXVlZCBhZ2Fpbi4gQW55IGF0dGVtcHQgdG8gcmVhcm1cbjE2ODg6XHQgKiAgICAgQHRpbWVyIGlzIHNpbGVudGx5IGlnbm9yZWQuXG4xNjg5Olx0ICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExOTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgVGltZXIgRGVsZXRpb24gU3luY2hyb25pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGJhY2sgaW50byB0aGUga2VybmVsJiMzOTtzIHRpbWVyIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYF9fdGltZXJfZGVsZXRlX3N5bmNgLiBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIHRvIGxpbmUgMTU5MSBpbiBga2VybmVsL3RpbWUvdGltZXIuY2AgYW5kIHJlYWxseSBnZXQgYSBoYW5kbGUgb24gdGhlIHN5bmNocm9uaXphdGlvbiBsb2dpYyB0aGVyZS4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgaGFuZGxpbmcgdGhlIHJhY2UgY29uZGl0aW9ucyB0aGF0IGFyZSBpbmhlcmVudCB0byB0aW1lciBkZWxldGlvbiBpbiBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50LiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSBob3cgaXQgZW5zdXJlcyB0aGF0IGEgdGltZXIgaXNuJiMzOTt0IHByZW1hdHVyZWx5IGZyZWVkIHdoaWxlIHN0aWxsIGFjdGl2ZSwgb3IgY29udmVyc2VseSwgdGhhdCByZXNvdXJjZXMgYXJlIGNsZWFuZWQgdXAgZWZmaWNpZW50bHkgYWZ0ZXIgYSB0aW1lciBoYXMgZXhwaXJlZCBvciBpcyBjYW5jZWxsZWQuIEl0IGlzIGNyaXRpY2FsIHRoYXQgSSB1bmRlcnN0YW5kIHdoYXQgbWVjaGFuaXNtcyBhcmUgYmVpbmcgdXNlZCB0byBtYWludGFpbiBkYXRhIGludGVncml0eSB3aGVuIHRpbWVycyBhcmUgYmVpbmcgYWRkZWQsIHJlbW92ZWQsIGFuZCBmaXJlZCBjb25jdXJyZW50bHkuIEkgbmVlZCB0byBiZSBhYmxlIHRvIGFwcGx5IG15IHVuZGVyc3RhbmRpbmcgdG8gdGhlIHNwZWNpZmljIGNvbnRleHQgb2YgdGhlIHN5c3RlbSBJJiMzOTttIHdvcmtpbmcgd2l0aCwgc28gbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RpbWUvdGltZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1OTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTU5MTpcdHN0YXRpYyBpbnQgX190aW1lcl9kZWxldGVfc3luYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIGJvb2wgc2h1dGRvd24pXG4xNTkyOlx0e1xuMTU5MzpcdFx0aW50IHJldDtcbjE1OTQ6XHRcbjE1OTU6XHQjaWZkZWYgQ09ORklHX0xPQ0tERVBcbjE1OTY6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4xNTk3Olx0XG4xNTk4Olx0XHQvKlxuMTU5OTpcdFx0ICogSWYgbG9ja2RlcCBnaXZlcyBhIGJhY2t0cmFjZSBoZXJlLCBwbGVhc2UgcmVmZXJlbmNlXG4xNjAwOlx0XHQgKiB0aGUgc3luY2hyb25pemF0aW9uIHJ1bGVzIGFib3ZlLlxuMTYwMTpcdFx0ICovXG4xNjAyOlx0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4xNjAzOlx0XHRsb2NrX21hcF9hY3F1aXJlKFx1MDAyNnRpbWVyLVx1MDAzZWxvY2tkZXBfbWFwKTtcbjE2MDQ6XHRcdGxvY2tfbWFwX3JlbGVhc2UoXHUwMDI2dGltZXItXHUwMDNlbG9ja2RlcF9tYXApO1xuMTYwNTpcdFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuMTYwNjpcdCNlbmRpZlxuMTYwNzpcdFx0LypcbjE2MDg6XHRcdCAqIGRvbiYjMzk7dCB1c2UgaXQgaW4gaGFyZGlycSBjb250ZXh0LCBiZWNhdXNlIGl0XG4xNjA5Olx0XHQgKiBjb3VsZCBsZWFkIHRvIGRlYWRsb2NrLlxuMTYxMDpcdFx0ICovXG4xNjExOlx0XHRXQVJOX09OKGluX2hhcmRpcnEoKSBcdTAwMjZcdTAwMjYgISh0aW1lci1cdTAwM2VmbGFncyBcdTAwMjYgVElNRVJfSVJRU0FGRSkpO1xuMTYxMjpcdFxuMTYxMzpcdFx0LypcbjE2MTQ6XHRcdCAqIE11c3QgYmUgYWJsZSB0byBzbGVlcCBvbiBQUkVFTVBUX1JUIGJlY2F1c2Ugb2YgdGhlIHNsb3dwYXRoIGluXG4xNjE1Olx0XHQgKiBkZWxfdGltZXJfd2FpdF9ydW5uaW5nKCkuXG4xNjE2Olx0XHQgKi9cbjE2MTc6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSBcdTAwMjZcdTAwMjYgISh0aW1lci1cdTAwM2VmbGFncyBcdTAwMjYgVElNRVJfSVJRU0FGRSkpXG4xNjE4Olx0XHRcdGxvY2tkZXBfYXNzZXJ0X3ByZWVtcHRpb25fZW5hYmxlZCgpO1xuMTYxOTpcdFxuMTYyMDpcdFx0ZG8ge1xuMTYyMTpcdFx0XHRyZXQgPSBfX3RyeV90b19kZWxfdGltZXJfc3luYyh0aW1lciwgc2h1dGRvd24pO1xuMTYyMjpcdFxuMTYyMzpcdFx0XHRpZiAodW5saWtlbHkocmV0IFx1MDAzYyAwKSkge1xuMTYyNDpcdFx0XHRcdGRlbF90aW1lcl93YWl0X3J1bm5pbmcodGltZXIpO1xuMTYyNTpcdFx0XHRcdGNwdV9yZWxheCgpO1xuMTYyNjpcdFx0XHR9XG4xNjI3Olx0XHR9IHdoaWxlIChyZXQgXHUwMDNjIDApO1xuMTYyODpcdFxuMTYyOTpcdFx0cmV0dXJuIHJldDtcbjE2MzA6XHR9XG4xNjMxOlx0XG4xNjMyOlx0LyoqXG4xNjMzOlx0ICogdGltZXJfZGVsZXRlX3N5bmMgLSBEZWFjdGl2YXRlIGEgdGltZXIgYW5kIHdhaXQgZm9yIHRoZSBoYW5kbGVyIHRvIGZpbmlzaC5cbjE2MzQ6XHQgKiBAdGltZXI6XHRUaGUgdGltZXIgdG8gYmUgZGVhY3RpdmF0ZWRcbjE2MzU6XHQgKlxuMTYzNjpcdCAqIFN5bmNocm9uaXphdGlvbiBydWxlczogQ2FsbGVycyBtdXN0IHByZXZlbnQgcmVzdGFydGluZyBvZiB0aGUgdGltZXIsXG4xNjM3Olx0ICogb3RoZXJ3aXNlIHRoaXMgZnVuY3Rpb24gaXMgbWVhbmluZ2xlc3MuIEl0IG11c3Qgbm90IGJlIGNhbGxlZCBmcm9tXG4xNjM4Olx0ICogaW50ZXJydXB0IGNvbnRleHRzIHVubGVzcyB0aGUgdGltZXIgaXMgYW4gaXJxc2FmZSBvbmUuIFRoZSBjYWxsZXIgbXVzdFxuMTYzOTpcdCAqIG5vdCBob2xkIGxvY2tzIHdoaWNoIHdvdWxkIHByZXZlbnQgY29tcGxldGlvbiBvZiB0aGUgdGltZXImIzM5O3MgY2FsbGJhY2tcbjE2NDA6XHQgKiBmdW5jdGlvbi4gVGhlIHRpbWVyJiMzOTtzIGhhbmRsZXIgbXVzdCBub3QgY2FsbCBhZGRfdGltZXJfb24oKS4gVXBvbiBleGl0XG4xNjQxOlx0ICogdGhlIHRpbWVyIGlzIG5vdCBxdWV1ZWQgYW5kIHRoZSBoYW5kbGVyIGlzIG5vdCBydW5uaW5nIG9uIGFueSBDUFUuXG4xNjQyOlx0ICpcbjE2NDM6XHQgKiBGb3IgIWlycXNhZmUgdGltZXJzLCB0aGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgbG9ja3MgdGhhdCBhcmUgaGVsZCBpblxuMTY0NDpcdCAqIGludGVycnVwdCBjb250ZXh0LiBFdmVuIGlmIHRoZSBsb2NrIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIHRpbWVyIGluXG4xNjQ1Olx0ICogcXVlc3Rpb24uICBIZXJlJiMzOTtzIHdoeTo6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzAxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZzogQ29yZSBOZXR3b3JraW5nIFN5bmNocm9uaXphdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGF0IHRoaXMgY29tbWVudDogJiMzNDsvKiBUaGUgY2FsbGJhY2sgZG9lcyBub3QgdGFrZSB0aGlzIGxvY2ssIHNvIHN5bmMgZGVsZXRpb24gY2FuIHdhaXQgZm9yIGl0LiAqLyYjMzQ7LiBBbmQgdGhlbiBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IHNwaW5sb2NrLCBgcHJveHlfdGltZXJfbG9ja2AsIGFkZGVkIHRvIGBzdHJ1Y3QgbmVpZ2hfdGFibGVgLiBIbW0sIHNlZW1zIGxpa2UgYSBmYWlybHkgc2lnbmlmaWNhbnQgY2hhbmdlLiBUaGlzIG5ldyBsb2NrIGlzIGJlaW5nIHVzZWQgaW4gYF9fbmVpZ2hfaWZkb3duYCBhbmQgYHBuZWlnaF9lbnF1ZXVlYCwgYm90aCBvZiB3aGljaCBhcmUgcmlnaHQgdGhlcmUgaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYCwgd2hpY2gsIGFzIHdlIGFsbCBrbm93LCBpcyBjb3JlIG5ldHdvcmtpbmcuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGxvb2sgYXQgdGhlIHRyaWFnZSBndWlkZWxpbmVzLiBSZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZSwgYnV0IHdlIGNhbiYjMzk7dCBibGluZGx5IHRydXN0IGNsYWltcyBvZiAmIzM0O25vIGZ1bmN0aW9uYWwgY2hhbmdlJiMzNDsgb3IgcmVmYWN0b3JpbmcuIEFueSBuZXcgb3IgbW9kaWZpZWQgYXNzZXJ0aW9ucyBpbiByZWFjaGFibGUgY29kZSAqbXVzdCogYmUgZnV6emVkLiBBbmQgcmVnYXJkaW5nIHdoZW4gc29tZXRoaW5nIGlzIFdvcnRoRnV6emluZywgd2VsbCwgYW55dGhpbmcgaW52b2x2aW5nIGNvcmUgc3Vic3lzdGVtcyBsaWtlIG5ldHdvcmtpbmcgYW5kIGNoYW5nZXMgdG8gc3luY2hyb25pemF0aW9uL2xvY2tpbmcgaXMgYSBkZWZpbml0ZSB5ZXMuIEFsc28sIHJlZmFjdG9yaW5ncyB3aGljaCByZXN0cnVjdHVyZSByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSB3b3J0aCBmdXp6aW5nLCBhbmQgaXQgbG9va3MgbGlrZSB3ZSBtYXkgaGF2ZSB0aGF0IGhlcmUuCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgY2hhbmdlcy4gQSBuZXcgc3BpbmxvY2ssIGBwcm94eV90aW1lcl9sb2NrYCwgaGFzIGJlZW4gYWRkZWQgdG8gYHN0cnVjdCBuZWlnaF90YWJsZWAuIFRoaXMgbG9jayBpcyBhY3F1aXJlZCBpbiBgX19uZWlnaF9pZmRvd25gIGFyb3VuZCBhIGNhbGwgdG8gYHRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7dGJsLSZndDtwcm94eV90aW1lcilgLCBhbmQgYWxzbyBpbiBgcG5laWdoX2VucXVldWVgLiBUaGUgbG9jayBpcyBpbml0aWFsaXplZCBkdXJpbmcgYG5laWdoX3RhYmxlX2luaXRgLiBUaGlzIGxvb2tzIGxpa2UgYSBjaGFuZ2UgdG8gbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGludm9sdmluZyB0aW1lciBkZWxldGlvbiBhbmQgZW5xdWV1ZWluZyBmb3IgcHJveHkgQVJQL05ELgoKR2l2ZW4gdGhhdCB0aGlzIGlzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGNvcmUgbmV0d29ya2luZywgYW5kIHRoYXQgaXQgbW9kaWZpZXMgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgKipXb3J0aEZ1enppbmcgaXMgZGVmaW5pdGVseSBgdHJ1ZWAqKi4gVGhpcyBjaGFuZ2UgbmVlZHMgYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSBhcm91bmQgdGhlIGludGVyYWN0aW9uIG9mIHRoZSB0aW1lciBhbmQgdGhlIHF1ZXVlLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgdG8gdHJpZ2dlciB0aGlzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgYG5ldC9jb3JlL25laWdoYm91ci5jYCBhbmQgYHBuZWlnaF9lbnF1ZXVlYCB0byBzZWUgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWlnaHQgaW5mbHVlbmNlIHRoaXMgY29kZSBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbmVpZ2hfZW5xdWV1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmVpZ2hib3VyLmM9MTcxMT1zdGF0aWMgdW5zaWduZWQgbG9uZyBuZWlnaF9wcm94eV9kZWxheShzdHJ1Y3QgbmVpZ2hfcGFybXMgKnApXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTcyMS1cbm5ldC9jb3JlL25laWdoYm91ci5jOjE3MjI6dm9pZCBwbmVpZ2hfZW5xdWV1ZShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5laWdoX3Bhcm1zICpwLFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTcyMy1cdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTc0OC19XG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNzQ5OkVYUE9SVF9TWU1CT0wocG5laWdoX2VucXVldWUpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTc1MC1cbi0tXG5uZXQvaXB2NC9hcnAuYz03MDI9c3RhdGljIGludCBhcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9hcnAuYy04ODAtXHRcdFx0XHR9IGVsc2Uge1xubmV0L2lwdjQvYXJwLmM6ODgxOlx0XHRcdFx0XHRwbmVpZ2hfZW5xdWV1ZShcdTAwMjZhcnBfdGJsLFxubmV0L2lwdjQvYXJwLmMtODgyLVx0XHRcdFx0XHRcdCAgICAgICBpbl9kZXYtXHUwMDNlYXJwX3Bhcm1zLCBza2IpO1xuLS1cbm5ldC9pcHY2L25kaXNjLmM9Nzg5PXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yZWN2X25zKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvbmRpc2MuYy05MjAtXHRcdFx0XHRpZiAobilcbm5ldC9pcHY2L25kaXNjLmM6OTIxOlx0XHRcdFx0XHRwbmVpZ2hfZW5xdWV1ZShcdTAwMjZuZF90YmwsIGlkZXYtXHUwMDNlbmRfcGFybXMsIG4pO1xubmV0L2lwdjYvbmRpc2MuYy05MjItXHRcdFx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3MDMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsZXIgQ29udGV4dCBmb3IgYHBuZWlnaF9lbnF1ZXVlYCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBwbmVpZ2hfZW5xdWV1ZWAgaXMgY2FsbGVkIGZyb20gdHdvIGtleSBwbGFjZXM6IGBhcnBfcHJvY2Vzc2AsIHdoaWNoIGhhbmRsZXMgSVB2NCBBZGRyZXNzIFJlc29sdXRpb24gUHJvdG9jb2wsIGFuZCBgbmRpc2NfcmVjdl9uc2AsIHRoZSBJUHY2IE5laWdoYm91ciBTb2xpY2l0YXRpb24gcmVjZWl2ZXIuIE15IGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IHdvdWxkIGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YgYG5ldC9jb3JlL25laWdoYm91ci5jYCwgZ2l2ZW4gdGhlc2UgY2FsbGVycy4gS25vd2luZyB0aGVzZSBjb250ZXh0cyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBib3R0bGVuZWNrcyBhbmQgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMsIGFuZCBob3cgdmFyaW91cyBuZXR3b3JrIGludGVyYWN0aW9ucyB0cmlnZ2VyIGl0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgTWFrZWZpbGUhIEkgbmVlZCB0byBzZWUgd2hhdCBwcmVwcm9jZXNzb3IgZmxhZ3Mgb3IgYnVpbGQgc2V0dGluZ3MgbWlnaHQgaW5mbHVlbmNlIHRoZSBjb21waWxhdGlvbiBhbmQsIGJ5IGV4dGVuc2lvbiwgdGhlIGJlaGF2aW9yIG9mIHRoaXMgcGFydGljdWxhciBmaWxlLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgaGludHMgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBpbiBwbGFjZSBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrIHRvIGZ1bmN0aW9uIHByb3Blcmx5IGFuZCBob3cgdGhleSB0aWUgaW50byB0aGUgY2FsbGVyIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVpZ2hib3VyXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTEyPW9iai15XHRcdCAgICAgJiM0Mzs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlOjEzOlx0XHRcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cdFx0XHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDkwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBuZWlnaGJvdXIub2AgRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBsaW5lLCBgb2JqLXkgJiM0Mzs9IG5laWdoYm91ci5vYCwgYnVyaWVkIGluIGBuZXQvY29yZS9NYWtlZmlsZWAuIFRoaXMgbWVhbnMgYG5laWdoYm91ci5vYCBpcyBiZWluZyBjb21waWxlZCBpbnRvIGBuZXQvY29yZWAsIHdoaWNoIGl0c2VsZiBpcyBjb250aW5nZW50IG9uIGBDT05GSUdfTkVUPXlgLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGBDT05GSUdfTkVUYCBpcyB0aGUgZm91bmRhdGlvbi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgbmVpZ2hib3VyLm9gJiMzOTtzIGZ1bmN0aW9uYWxpdHkgaXMgZGlyZWN0bHkgdGllZCB0byBJUHY0IEFSUCBvciBJUHY2IE5ELiBJJiMzOTttIHRoaW5raW5nLCBpcyB0aGVyZSBhbiBleHRyYSBjb25maWd1cmF0aW9uIG5lZWRlZD8gRG9lcyBpdCBuZWVkIGBDT05GSUdfSU5FVGAgZm9yIEFSUCBvciBgQ09ORklHX0lQVjZgIGZvciBJUHY2IE5EPwoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYG5ldC9LY29uZmlnYCBhbmQgdGhlbiBtb3ZlIG9uIHRvIHRoZSBtb3JlIHNwZWNpZmljIGBuZXQvaXB2NC9LY29uZmlnYCBvciBldmVuIGBuZXQvaXB2Ni9LY29uZmlnYCBpZiBJIG5lZWQgdG8gZHJpbGwgZG93biBmdXJ0aGVyLiBHaXZlbiB0aGF0IGBDT05GSUdfTkVUYCBpcyB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgdGhpcyBtZWFucyB0aGF0IHRoZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSBpcyBhbG1vc3QgYWx3YXlzIHByZXNlbnQuIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgbW9yZSBncmFudWxhciBjb25maWd1cmF0aW9ucy4gQWgsIHJpZ2h0LCBgcG5laWdoX2VucXVldWVgIGlzIGludm9rZWQgYnkgQVJQLCBhbmQgYWxzbyBieSBJUHY2IE5ELCBtZWFuaW5nIGl0IGlzIHJlbGF0ZWQgdG8gYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YC4gTm93LCBJIHNob3VsZCBkb3VibGUgY2hlY2ssIGlmIGl0IGlzIHJlbGF0ZWQgdG8gcHJveHkgQVJQL05EIGNvbmZpZ3VyYXRpb25zIG9yIG5laWdoYm91ciB0YWJsZSByZWxhdGVkIHNldHRpbmdzLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIGBuZXQvaXB2NC9LY29uZmlnYCBhbmQgYG5ldC9pcHY2L0tjb25maWdgIGZvciB0aGF0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55IHN1YnRsZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz05OT1jb25maWcgTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUXG4tLVxubmV0L0tjb25maWctMTEzLVxubmV0L0tjb25maWc6MTE0OmNvbmZpZyBJTkVUXG5uZXQvS2NvbmZpZy0xMTUtXHRib29sIFwmIzM0O1RDUC9JUCBuZXR3b3JraW5nXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zMzA9Y29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMU1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzM4LVxubmV0L2lwdjQvS2NvbmZpZzozMzk6Y29uZmlnIElORVRfQUhcbm5ldC9pcHY0L0tjb25maWctMzQwLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEFIIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNTMtXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1Bcbm5ldC9pcHY0L0tjb25maWctMzU1LVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzY4LVxubmV0L2lwdjQvS2NvbmZpZzozNjk6Y29uZmlnIElORVRfRVNQX09GRkxPQURcbm5ldC9pcHY0L0tjb25maWctMzcwLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODEtXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXHRib29sIFwmIzM0O0lQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzkzLVxubmV0L2lwdjQvS2NvbmZpZzozOTQ6Y29uZmlnIElORVRfSVBDT01QXG5uZXQvaXB2NC9LY29uZmlnLTM5NS1cdHRyaXN0YXRlIFwmIzM0O0lQOiBJUENvbXAgdHJhbnNmb3JtYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQwMy1cbm5ldC9pcHY0L0tjb25maWc6NDA0OmNvbmZpZyBJTkVUX1RBQkxFX1BFUlRVUkJfT1JERVJcbm5ldC9pcHY0L0tjb25maWctNDA1LVx0aW50IFwmIzM0O0lORVQ6IFNvdXJjZSBwb3J0IHBlcnR1cmJhdGlvbiB0YWJsZSBzaXplIChhcyBwb3dlciBvZiAyKVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQxMy1cbm5ldC9pcHY0L0tjb25maWc6NDE0OmNvbmZpZyBJTkVUX1hGUk1fVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnLTQxNS1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MTgtXG5uZXQvaXB2NC9LY29uZmlnOjQxOTpjb25maWcgSU5FVF9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWctNDIwLVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQyMi1cbm5ldC9pcHY0L0tjb25maWc6NDIzOmNvbmZpZyBJTkVUX0RJQUdcbm5ldC9pcHY0L0tjb25maWctNDI0LVx0dHJpc3RhdGUgXCYjMzQ7SU5FVDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MzQtXG5uZXQvaXB2NC9LY29uZmlnOjQzNTpjb25maWcgSU5FVF9UQ1BfRElBR1xubmV0L2lwdjQvS2NvbmZpZy00MzYtXHRkZXBlbmRzIG9uIElORVRfRElBR1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDM4LVxubmV0L2lwdjQvS2NvbmZpZzo0Mzk6Y29uZmlnIElORVRfVURQX0RJQUdcbm5ldC9pcHY0L0tjb25maWctNDQwLVx0dHJpc3RhdGUgXCYjMzQ7VURQOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQ0Ni1cbm5ldC9pcHY0L0tjb25maWc6NDQ3OmNvbmZpZyBJTkVUX1JBV19ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQ0OC1cdHRyaXN0YXRlIFwmIzM0O1JBVzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy00NTQtXG5uZXQvaXB2NC9LY29uZmlnOjQ1NTpjb25maWcgSU5FVF9ESUFHX0RFU1RST1lcbm5ldC9pcHY0L0tjb25maWctNDU2LVx0Ym9vbCBcJiMzNDtJTkVUOiBhbGxvdyBwcml2aWxlZ2VkIHByb2Nlc3MgdG8gYWRtaW5pc3RyYXRpdmVseSBjbG9zZSBzb2NrZXRzXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0zOT1jb25maWcgSVBWNl9PUFRJTUlTVElDX0RBRFxuLS1cbm5ldC9pcHY2L0tjb25maWctNDYtXG5uZXQvaXB2Ni9LY29uZmlnOjQ3OmNvbmZpZyBJTkVUNl9BSFxubmV0L2lwdjYvS2NvbmZpZy00OC1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IEFIIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy02MS1cbm5ldC9pcHY2L0tjb25maWc6NjI6Y29uZmlnIElORVQ2X0VTUFxubmV0L2lwdjYvS2NvbmZpZy02My1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctNzYtXG5uZXQvaXB2Ni9LY29uZmlnOjc3OmNvbmZpZyBJTkVUNl9FU1BfT0ZGTE9BRFxubmV0L2lwdjYvS2NvbmZpZy03OC1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy04OS1cbm5ldC9pcHY2L0tjb25maWc6OTA6Y29uZmlnIElORVQ2X0VTUElOVENQXG5uZXQvaXB2Ni9LY29uZmlnLTkxLVx0Ym9vbCBcJiMzNDtJUHY2OiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTAxLVxubmV0L2lwdjYvS2NvbmZpZzoxMDI6Y29uZmlnIElORVQ2X0lQQ09NUFxubmV0L2lwdjYvS2NvbmZpZy0xMDMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUENvbXAgdHJhbnNmb3JtYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTEyMD1jb25maWcgSVBWNl9JTEFcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE0MC1cbm5ldC9pcHY2L0tjb25maWc6MTQxOmNvbmZpZyBJTkVUNl9YRlJNX1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0xNDItXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY2L0tjb25maWctMTQ1LVxubmV0L2lwdjYvS2NvbmZpZzoxNDY6Y29uZmlnIElORVQ2X1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0xNDctXHR0cmlzdGF0ZVxuLS1cbm5ldC9tcHRjcC9LY29uZmlnPTE0PWlmIE1QVENQXG5uZXQvbXB0Y3AvS2NvbmZpZy0xNS1cbm5ldC9tcHRjcC9LY29uZmlnOjE2OmNvbmZpZyBJTkVUX01QVENQX0RJQUdcbm5ldC9tcHRjcC9LY29uZmlnLTE3LVx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcbi0tXG5uZXQvcHNwL0tjb25maWctNC0jXG5uZXQvcHNwL0tjb25maWc6NTpjb25maWcgSU5FVF9QU1Bcbm5ldC9wc3AvS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtQU1AgU2VjdXJpdHkgUHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9zY3RwL0tjb25maWc9Njg9ZW5kY2hvaWNlXG5uZXQvc2N0cC9LY29uZmlnLTY5LVxubmV0L3NjdHAvS2NvbmZpZzo3MDpjb25maWcgSU5FVF9TQ1RQX0RJQUdcbm5ldC9zY3RwL0tjb25maWctNzEtXHRkZXBlbmRzIG9uIElORVRfRElBR1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjE1NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVjZW50IENoYW5nZXMgaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBjaGFuZ2VzIGluIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AuIEZpcnN0LCBJJiMzOTtsbCBxdWlja2x5IGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgbW9kaWZpZWQuIEl0IGxvb2tzIGxpa2UgYF9fbmVpZ2hfaWZkb3duYCwgYHBuZWlnaF9lbnF1ZXVlYCwgYW5kIGBuZWlnaF90YWJsZV9pbml0YCB3ZXJlIHRvdWNoZWQuIEhtbW0sIGludGVyZXN0aW5nLgoKSG9sZCBvbi4uLiBgX19uZWlnaF9pZmRvd25gIGlzIHN0YXRpYy4gVGhhdCYjMzk7cyBhIGtleSBkZXRhaWwhIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbGVycy4gTGV0IG1lIHNlZS4uLiBMb29raW5nIHF1aWNrbHkgYXQgdGhlIGNvZGViYXNlLCBpdCBsb29rcyBsaWtlIGBuZWlnaF9jYXJyaWVyX2Rvd25gLCBgbmVpZ2hfaWZkb3duYCwgYW5kIGBuZWlnaF90YWJsZV9jbGVhcmAgY291bGQgYmUgY2FsbGluZyBgX19uZWlnaF9pZmRvd25gLiBMZXQgbWUgY29uZmlybSB0aGlzIGFuZCBzZWUgaWYgYG5laWdoX3RhYmxlX2NsZWFyYCBpcyBjYWxsaW5nIGBfX25laWdoX2lmZG93bmAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgZm9yIGNvbmNlcm4uIExldCBtZSBxdWlja2x5IGV4YW1pbmUgdGhhdCBmdW5jdGlvbiBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmVpZ2hib3VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4ODU6XHQvKlxuMTg4NjpcdCAqIE9ubHkgY2FsbGVkIGZyb20gbmRpc2NfY2xlYW51cCgpLCB3aGljaCBtZWFucyB0aGlzIGlzIGRlYWQgY29kZVxuMTg4NzpcdCAqIGJlY2F1c2Ugd2Ugbm8gbG9uZ2VyIGNhbiB1bmxvYWQgSVB2NiBtb2R1bGUuXG4xODg4Olx0ICovXG4xODg5Olx0aW50IG5laWdoX3RhYmxlX2NsZWFyKGludCBpbmRleCwgc3RydWN0IG5laWdoX3RhYmxlICp0YmwpXG4xODkwOlx0e1xuMTg5MTpcdFx0UkNVX0lOSVRfUE9JTlRFUihuZWlnaF90YWJsZXNbaW5kZXhdLCBOVUxMKTtcbjE4OTI6XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuMTg5MzpcdFxuMTg5NDpcdFx0LyogSXQgaXMgbm90IGNsZWFuLi4uIEZpeCBpdCB0byB1bmxvYWQgSVB2NiBtb2R1bGUgc2FmZWx5ICovXG4xODk1Olx0XHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2dGJsLVx1MDAzZW1hbmFnZWRfd29yayk7XG4xODk2Olx0XHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2dGJsLVx1MDAzZWdjX3dvcmspO1xuMTg5NzpcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyKTtcbjE4OTg6XHRcdHBuZWlnaF9xdWV1ZV9wdXJnZShcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUsIE5VTEwsIHRibC1cdTAwM2VmYW1pbHkpO1xuMTg5OTpcdFx0bmVpZ2hfaWZkb3duKHRibCwgTlVMTCk7XG4xOTAwOlx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2dGJsLVx1MDAzZWVudHJpZXMpKVxuMTkwMTpcdFx0XHRwcl9jcml0KFwmIzM0O25laWdoYm91ciBsZWFrYWdlXFxuXCYjMzQ7KTtcbjE5MDI6XHRcbjE5MDM6XHRcdGNhbGxfcmN1KFx1MDAyNnJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQodGJsLVx1MDAzZW5odCwgMSktXHUwMDNlcmN1LFxuMTkwNDpcdFx0XHQgbmVpZ2hfaGFzaF9mcmVlX3JjdSk7XG4xOTA1Olx0XHR0YmwtXHUwMDNlbmh0ID0gTlVMTDtcbjE5MDY6XHRcbjE5MDc6XHRcdGtmcmVlKHRibC1cdTAwM2VwaGFzaF9idWNrZXRzKTtcbjE5MDg6XHRcdHRibC1cdTAwM2VwaGFzaF9idWNrZXRzID0gTlVMTDtcbjE5MDk6XHRcbjE5MTA6XHRcdHJlbW92ZV9wcm9jX2VudHJ5KHRibC1cdTAwM2VpZCwgaW5pdF9uZXQucHJvY19uZXRfc3RhdCk7XG4xOTExOlx0XG4xOTEyOlx0XHRmcmVlX3BlcmNwdSh0YmwtXHUwMDNlc3RhdHMpO1xuMTkxMzpcdFx0dGJsLVx1MDAzZXN0YXRzID0gTlVMTDtcbjE5MTQ6XHRcbjE5MTU6XHRcdHJldHVybiAwO1xuMTkxNjpcdH1cbjE5MTc6XHRcbjE5MTg6XHRzdGF0aWMgc3RydWN0IG5laWdoX3RhYmxlICpuZWlnaF9maW5kX3RhYmxlKGludCBmYW1pbHkpXG4xOTE5Olx0e1xuMTkyMDpcdFx0c3RydWN0IG5laWdoX3RhYmxlICp0YmwgPSBOVUxMO1xuMTkyMTpcdFxuMTkyMjpcdFx0c3dpdGNoIChmYW1pbHkpIHtcbjE5MjM6XHRcdGNhc2UgQUZfSU5FVDpcbjE5MjQ6XHRcdFx0dGJsID0gcmN1X2RlcmVmZXJlbmNlX3J0bmwobmVpZ2hfdGFibGVzW05FSUdIX0FSUF9UQUJMRV0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIzNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgbmVpZ2hfaWZkb3duYCBhbmQgYG5laWdoX2NhcnJpZXJfZG93bmAgQ2FsbHMqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gdGhpbmtpbmcgaXMsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgYW5kIGZpZ3VyZSBvdXQgdGhlIGNhbGwgc2l0ZXMgZm9yIGBuZWlnaF9pZmRvd25gIGFuZCBgbmVpZ2hfY2Fycmllcl9kb3duYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdHJpZ2dlcmVkIHdpdGhpbiB0aGUgc3lzdGVtLiBBcmUgdGhleSBkaXJlY3QgY2FsbHMgZnJvbSB0aGUgbmV0d29yayBzdGFjaywgb3IgYXJlIHRoZXkgYmVpbmcgaW52b2tlZCBpbmRpcmVjdGx5IHRocm91Z2ggc29tZSBvdGhlciBsYXllciBvciBldmVudD8gQXJlIHRoZXkgcmVsYXRlZCBhbmQgY2FsbGVkIGluIHNlcXVlbmNlLCBvciBhcmUgdGhleSBzZXBhcmF0ZSBldmVudHM/CgpJJiMzOTttIG1lbnRhbGx5IG1hcHBpbmcgdGhlIGNvbnRyb2wgZmxvdy4gSSYjMzk7bSB3b25kZXJpbmcgaWYgYG5laWdoX2lmZG93bmAgaXMgY2FsbGVkIHdoZW4gYW4gaW50ZXJmYWNlIGdvZXMgZG93biBnZW5lcmFsbHksIHJlZ2FyZGxlc3Mgb2YgdGhlIHJlYXNvbiwgYW5kIHRoZW4gYG5laWdoX2NhcnJpZXJfZG93bmAgaXMgY2FsbGVkIGluIGNvbmp1bmN0aW9uLCBvciBhcyBhIGNvbnNlcXVlbmNlLCBvZiB0aGUgbGluayBzdGF0ZSB0cmFuc2l0aW9uaW5nLiBBbHRlcm5hdGl2ZWx5LCBhcmUgdGhleSBzZXBhcmF0ZSwgc3BlY2lhbGl6ZWQgaGFuZGxlcnMgZm9yIGRpZmZlcmVudCBzY2VuYXJpb3Mg4oCTIG9uZSBmb3IgYWRtaW5pc3RyYXRpdmUgc2h1dGRvd24gdmVyc3VzIGEgcGh5c2ljYWwgbGluayBmYWlsdXJlPyBVbmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpY3Mgb2Ygd2hlbiBhbmQgd2h5IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhlY3V0ZWQgaXMgY3JpdGljYWwgZm9yIHBpbnBvaW50aW5nIHRoZSByb290IGNhdXNlIG9mIGFueSBvYnNlcnZlZCBiZWhhdmlvci4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRob3NlIGZ1bmN0aW9ucywgb2YgY291cnNlLCB0byBzZWUgaWYgdGhleSYjMzk7cmUgcGFzc2luZyBhbnl0aGluZyB0aGF0JiMzOTtzIHJlbGV2YW50IHRvIHRoZSBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25laWdoXyhjYXJyaWVyXyk/aWZkb3duJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYz01NT1zdGF0aWMgdm9pZCBfX25laWdoX25vdGlmeShzdHJ1Y3QgbmVpZ2hib3VyICpuLCBpbnQgdHlwZSwgaW50IGZsYWdzLCB1MzIgcGlkKTtcbm5ldC9jb3JlL25laWdoYm91ci5jOjU2OnN0YXRpYyB2b2lkIHBuZWlnaF9pZmRvd24oc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvY29yZS9uZWlnaGJvdXIuYy01Ny1cdFx0XHQgIGJvb2wgc2tpcF9wZXJtKTtcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYz00NTQ9dm9pZCBuZWlnaF9jaGFuZ2VhZGRyKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTQ2MC1cbm5ldC9jb3JlL25laWdoYm91ci5jOjQ2MTpzdGF0aWMgaW50IF9fbmVpZ2hfaWZkb3duKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtNDYyLVx0XHRcdCAgYm9vbCBza2lwX3Blcm0pXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtNDcyLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6NDczOlx0cG5laWdoX2lmZG93bih0YmwsIGRldiwgc2tpcF9wZXJtKTtcbm5ldC9jb3JlL25laWdoYm91ci5jLTQ3NC1cdC8qIFRoZSBjYWxsYmFjayBkb2VzIG5vdCB0YWtlIHRoaXMgbG9jaywgc28gc3luYyBkZWxldGlvbiBjYW4gd2FpdCBmb3IgaXQuICovXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM9NDg0PWludCBuZWlnaF9jYXJyaWVyX2Rvd24oc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9uZWlnaGJvdXIuYy00ODUte1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6NDg2Olx0X19uZWlnaF9pZmRvd24odGJsLCBkZXYsIHRydWUpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtNDg3LVx0cmV0dXJuIDA7XG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtNDg5LVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6NDkwOmludCBuZWlnaF9pZmRvd24oc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9uZWlnaGJvdXIuYy00OTEte1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6NDkyOlx0X19uZWlnaF9pZmRvd24odGJsLCBkZXYsIGZhbHNlKTtcbm5ldC9jb3JlL25laWdoYm91ci5jLTQ5My1cdHJldHVybiAwO1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jPTgzNz1pbnQgcG5laWdoX2RlbGV0ZShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCB2b2lkICpwa2V5LFxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTg2OS1cbm5ldC9jb3JlL25laWdoYm91ci5jOjg3MDpzdGF0aWMgdm9pZCBwbmVpZ2hfaWZkb3duKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtODcxLVx0XHRcdCAgYm9vbCBza2lwX3Blcm0pXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MTg4OT1pbnQgbmVpZ2hfdGFibGVfY2xlYXIoaW50IGluZGV4LCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibClcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xODk4LVx0cG5laWdoX3F1ZXVlX3B1cmdlKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZSwgTlVMTCwgdGJsLVx1MDAzZWZhbWlseSk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxODk5Olx0bmVpZ2hfaWZkb3duKHRibCwgTlVMTCk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xOTAwLVx0aWYgKGF0b21pY19yZWFkKFx1MDAyNnRibC1cdTAwM2VlbnRyaWVzKSlcbi0tXG5uZXQvaXB2NC9hcnAuYz0xMzY1PXZvaWQgYXJwX2lmZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2lwdjQvYXJwLmMtMTM2Ni17XG5uZXQvaXB2NC9hcnAuYzoxMzY3Olx0bmVpZ2hfaWZkb3duKFx1MDAyNmFycF90YmwsIGRldik7XG5uZXQvaXB2NC9hcnAuYy0xMzY4LX1cbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTM4NzY9c3RhdGljIGludCBhZGRyY29uZl9pZmRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB1bnJlZ2lzdGVyKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNDA0My1cdFx0bmVpZ2hfcGFybXNfcmVsZWFzZShcdTAwMjZuZF90YmwsIGlkZXYtXHUwMDNlbmRfcGFybXMpO1xubmV0L2lwdjYvYWRkcmNvbmYuYzo0MDQ0Olx0XHRuZWlnaF9pZmRvd24oXHUwMDI2bmRfdGJsLCBkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy00MDQ1LVx0XHRpbjZfZGV2X3B1dChpZGV2KTtcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jPTE4NTk9c3RhdGljIGludCBuZGlzY19uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4tLVxubmV0L2lwdjYvbmRpc2MuYy0xODk3LVx0Y2FzZSBORVRERVZfRE9XTjpcbm5ldC9pcHY2L25kaXNjLmM6MTg5ODpcdFx0bmVpZ2hfaWZkb3duKFx1MDAyNm5kX3RibCwgZGV2KTtcbm5ldC9pcHY2L25kaXNjLmMtMTg5OS1cdFx0ZmliNl9ydW5fZ2MoMCwgbmV0LCBmYWxzZSk7XG4tLVxubmV0L2lwdjYvcm91dGUuYz01MDQ2PXZvaWQgcnQ2X2Rpc2FibGVfaXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudClcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTUwNDktXHRydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXYoZGV2KTtcbm5ldC9pcHY2L3JvdXRlLmM6NTA1MDpcdG5laWdoX2lmZG93bihcdTAwMjZuZF90YmwsIGRldik7XG5uZXQvaXB2Ni9yb3V0ZS5jLTUwNTEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODcwOAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBOZWlnaGJvciBEaXNjb3ZlcnkgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbmV0d29yayBuZWlnaGJvciBkaXNjb3ZlcnksIHBhcnRpY3VsYXJseSB3aGVuIGFuIGludGVyZmFjZSBnb2VzIGRvd24uIEkmIzM5O20gc3RhcnRpbmcgd2l0aCBgbmVpZ2hfaWZkb3duYCwgYG5laWdoX2NhcnJpZXJfZG93bmAsIGBfX25laWdoX2lmZG93bmAsIGBwbmVpZ2hfZW5xdWV1ZWAsIGFuZCBgbmVpZ2hfdGFibGVfaW5pdGAuCgpUaGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBjb21lcyB0byBtaW5kLCBhcyBJIGFsd2F5cyBkbywgaXMgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX25laWdoX2lmZG93bmAgaW4gdGhlIGNvbnRleHQgb2YgdGhlIEdDQyBjb21waWxlciBhbmQgdGhlIHZtbGludXggZW52aXJvbm1lbnQuIElzIHRoaXMgZnVuY3Rpb24gc3RhdGljPyBJcyBpdCBpbmxpbmVkPyBVbmRlcnN0YW5kaW5nIHRoaXMgaXMgY3JpdGljYWwgZm9yIHRyYWNpbmcgaXRzIGNhbGwgc3RhY2sgZWZmZWN0aXZlbHkuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgbmVpZ2hfaWZkb3duYCBhbmQgYG5laWdoX2NhcnJpZXJfZG93bmAgdG8gc2VlIGhvdyB0aGV5IHV0aWxpemUgYF9fbmVpZ2hfaWZkb3duYC4KCk5vdywgaWYgSSB0aGluayBhYm91dCBgX19uZWlnaF9pZmRvd25gLCBJIGtub3cgaXQmIzM5O3MgY2FsbGVkIGJ5IGBuZWlnaF9jYXJyaWVyX2Rvd25gIGFuZCBgbmVpZ2hfaWZkb3duYC4gVGhpcyBzdWdnZXN0cyBpdCBjb3VsZCBwb3RlbnRpYWxseSBiZSBpbmxpbmVkIGludG8gdGhvc2UgdHdvIGZ1bmN0aW9ucywgb3IgaXQgbWlnaHQgYmUgYSBzZXBhcmF0ZSBmdW5jdGlvbiBjYWxsLiBTbyBgbmVpZ2hfaWZkb3duYCwgYG5laWdoX2NhcnJpZXJfZG93bmAsIGFuZCBgX19uZWlnaF9pZmRvd25gIChpZiBub3QgaW5saW5lZCkgYXJlIGFsbCBkZWZpbml0ZSBjYW5kaWRhdGVzIGZvciBpbmNsdXNpb24gaW4gbXkgYW5hbHlzaXMuIEFuZCwgb2YgY291cnNlLCBgcG5laWdoX2VucXVldWVgIGlzIGltcG9ydGFudCBhcyB3ZWxsLgoKVGhlbiwgdGhlcmUmIzM5O3MgYG5laWdoX3RhYmxlX2luaXRgLiBBaCwgeWVzLCB0aGlzIGlzIHBhcnQgb2YgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIGlzbiYjMzk7dCBpdD8gSXQmIzM5O3MgY2FsbGVkIGR1cmluZyBib290IG9yIG1vZHVsZSBpbml0aWFsaXphdGlvbiDigJMgcm91dGluZXMgbGlrZSBgYXJwX2luaXRgLCBgbmRpc2NfaW5pdGAsIGBjbGlwX2luaXRgLCBhbmQgYGRuX25laWdoX2luaXRgLiBBaCB3YWl0ISBgbmVpZ2hfdGFibGVfaW5pdGAgaXMgY2FsbGVkIGR1cmluZyB0aGUgaW5pdC4gVGhpcyBtZWFucyBJIHNob3VsZCBjaGVjayB3aGVyZSBgbmVpZ2hfdGFibGVfaW5pdGAgaXMgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZWlnaF90YWJsZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYz0xODI0PXN0YXRpYyBzdHJ1Y3QgbmVpZ2hfdGFibGUgX19yY3UgKm5laWdoX3RhYmxlc1tORUlHSF9OUl9UQUJMRVNdIF9fcmVhZF9tb3N0bHk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xODI1LVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTgyNjp2b2lkIG5laWdoX3RhYmxlX2luaXQoaW50IGluZGV4LCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibClcbm5ldC9jb3JlL25laWdoYm91ci5jLTE4Mjcte1xuLS1cbm5ldC9pcHY0L2FycC5jPTE1MTQ9dm9pZCBfX2luaXQgYXJwX2luaXQodm9pZClcbm5ldC9pcHY0L2FycC5jLTE1MTUte1xubmV0L2lwdjQvYXJwLmM6MTUxNjpcdG5laWdoX3RhYmxlX2luaXQoTkVJR0hfQVJQX1RBQkxFLCBcdTAwMjZhcnBfdGJsKTtcbm5ldC9pcHY0L2FycC5jLTE1MTctXG4tLVxubmV0L2lwdjYvbmRpc2MuYz0yMDA1PWludCBfX2luaXQgbmRpc2NfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMjAxNC1cdCAqL1xubmV0L2lwdjYvbmRpc2MuYzoyMDE1Olx0bmVpZ2hfdGFibGVfaW5pdChORUlHSF9ORF9UQUJMRSwgXHUwMDI2bmRfdGJsKTtcbm5ldC9pcHY2L25kaXNjLmMtMjAxNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2NTUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA1NTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBDb25jdXJyZW5jeSBJc3N1ZXMgaW4gTmVpZ2hib3IgRGlzY292ZXJ5IFRhYmxlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gYG5laWdoX3RhYmxlX2luaXRgIGlzIGEgb25lLXRpbWUgdGhpbmcgYXQgdGhlIHN0YXJ0LCBub3QgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuIEJ1dCBgcG5laWdoX2VucXVldWVgLCBgbmVpZ2hfaWZkb3duYCwgYW5kIGBuZWlnaF9jYXJyaWVyX2Rvd25gPyBUaG9zZSBhcmUgcnVudGltZSBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBoaXQgdGhlIGNvZGUgSSYjMzk7dmUgYmVlbiB3b3JraW5nIG9uLCBhbmQgdGhlIG5ldyBsb2NrLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBkZWFkbG9jayBzY2VuYXJpb3MsIHBhcnRpY3VsYXJseSB3aXRoaW4gYF9fbmVpZ2hfaWZkb3duYC4gSGVyZSYjMzk7cyB3aGF0JiMzOTtzIGhhcHBlbmluZzogaXQgY2FsbHMgYHBuZWlnaF9pZmRvd25gLCB0aGVuIGdyYWJzIGB0YmwtJmd0O3Byb3h5X3RpbWVyX2xvY2tgLCBwdXJnZXMgYHRibC0mZ3Q7cHJveHlfcXVldWVgIHdpdGggYHBuZWlnaF9xdWV1ZV9wdXJnZWAsIGFuZCAqdGhlbiogY29uZGl0aW9uYWxseSBkZWxldGVzIHRoZSB0aW1lciB3aXRoIGB0aW1lcl9kZWxldGVfc3luY2AgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LiBIb2xkIG9uIGEgc2Vjb25k4oCmIGB0aW1lcl9kZWxldGVfc3luY2AgaXMgY2FsbGVkICp3aGlsZSogaG9sZGluZyBgdGJsLSZndDtwcm94eV90aW1lcl9sb2NrYD8gVGhhdCYjMzk7cyBub3QgZ29vZC4gCgpXaGF0IGlmIHRoZSBgbmVpZ2hfcHJveHlfcHJvY2Vzc2AgdGltZXIgY2FsbGJhY2sgaXMgcnVubmluZyBvbiBhbm90aGVyIENQVSAqcmlnaHQgbm93Kj8gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCB3b3Jrcy4gTGV0JiMzOTtzIGxvb2sgYXQgYG5laWdoX3Byb3h5X3Byb2Nlc3NgOgoKT2theSwgc28gYG5laWdoX3Byb3h5X3Byb2Nlc3NgICpkb2VzbiYjMzk7dCogdGFrZSBgdGJsLSZndDtwcm94eV90aW1lcl9sb2NrYC4gSXQgZ3JhYnMgYHRibC0mZ3Q7cHJveHlfcXVldWUubG9ja2AgaW5zdGVhZC4gQnV0LCBpbXBvcnRhbnRseSwgaW5zaWRlIHRoYXQgY3JpdGljYWwgc2VjdGlvbiwgaXQgKmNhbGxzIGB0YmwtJmd0O3Byb3h5X3JlZG8oc2tiKWAqISBUaGF0JiMzOTtzIHRoZSBrZXkuIFdoYXQgaXMgYHRibC0mZ3Q7cHJveHlfcmVkbyhza2IpYCBhY3R1YWxseSBkb2luZz8gSW4gQVJQLCBpdCYjMzk7cyBlaXRoZXIgYHBuZWlnaF9lbnF1ZXVlYCBvciBgYXJwX3Byb2Nlc3NgISBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgYHByb3h5X3JlZG9gIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm94eV9yZWRvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYz0xNjc1PXN0YXRpYyB2b2lkIG5laWdoX3Byb3h5X3Byb2Nlc3Moc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTY5Mi1cbm5ldC9jb3JlL25laWdoYm91ci5jOjE2OTM6XHRcdFx0aWYgKHRibC1cdTAwM2Vwcm94eV9yZWRvIFx1MDAyNlx1MDAyNiBuZXRpZl9ydW5uaW5nKGRldikpIHtcbm5ldC9jb3JlL25laWdoYm91ci5jLTE2OTQtXHRcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNjk1Olx0XHRcdFx0dGJsLVx1MDAzZXByb3h5X3JlZG8oc2tiKTtcbm5ldC9jb3JlL25laWdoYm91ci5jLTE2OTYtXHRcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5uZXQvaXB2NC9hcnAuYz0xNTI9c3RydWN0IG5laWdoX3RhYmxlIGFycF90YmwgPSB7XG4tLVxubmV0L2lwdjQvYXJwLmMtMTU4LVx0LmNvbnN0cnVjdG9yXHQ9IGFycF9jb25zdHJ1Y3Rvcixcbm5ldC9pcHY0L2FycC5jOjE1OTpcdC5wcm94eV9yZWRvXHQ9IHBhcnBfcmVkbyxcbm5ldC9pcHY0L2FycC5jLTE2MC1cdC5pc19tdWx0aWNhc3RcdD0gYXJwX2lzX211bHRpY2FzdCxcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jPTEwOT1zdHJ1Y3QgbmVpZ2hfdGFibGUgbmRfdGJsID0ge1xuLS1cbm5ldC9pcHY2L25kaXNjLmMtMTE3LVx0LnBkZXN0cnVjdG9yID1cdHBuZGlzY19kZXN0cnVjdG9yLFxubmV0L2lwdjYvbmRpc2MuYzoxMTg6XHQucHJveHlfcmVkbyA9XHRwbmRpc2NfcmVkbyxcbm5ldC9pcHY2L25kaXNjLmMtMTE5LVx0LmlzX211bHRpY2FzdCA9XHRuZGlzY19pc19tdWx0aWNhc3QsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTk1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLgoKKipJbnZlc3RpZ2F0aW5nIGBwYXJwX3JlZG9gIGFuZCBgcG5kaXNjX3JlZG9gKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgZnVuY3Rpb25zIGBwYXJwX3JlZG9gIGFuZCBgcG5kaXNjX3JlZG9gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBkb2luZy4gV2hhdCBhcmUgdGhlaXIgcHVycG9zZXM/IEhvdyBkbyB0aGV5IGZ1bmN0aW9uPyBBcmUgdGhleSBwZXJmb3JtaW5nIGFueSBvcGVyYXRpb25zIHRoYXQgbWlnaHQgYWZmZWN0IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0/IFdoYXQgc29ydCBvZiBkYXRhIGFyZSB0aGV5IHVzaW5nLCBhbmQgd2hlcmUgYXJlIHRoZXkgZ2V0dGluZyB0aGF0IGRhdGE/IFdoYXQgYXJlIHRoZSBlZGdlIGNhc2VzIEkgbmVlZCB0byBjb25zaWRlcj8gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIGZvcm0gYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLiBUaW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcyBhbmQgc2VlIHdoYXQgdGhlc2UgZnVuY3Rpb25zIGRvLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIG5vdGUgYW55IGRldGFpbHMgYXMgSSBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYXJwX3JlZG8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2FycC5jPTEyNj1zdGF0aWMgdm9pZCBhcnBfZXJyb3JfcmVwb3J0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC9pcHY0L2FycC5jOjEyNzpzdGF0aWMgdm9pZCBwYXJwX3JlZG8oc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5uZXQvaXB2NC9hcnAuYy0xMjgtc3RhdGljIGludCBhcnBfaXNfbXVsdGljYXN0KGNvbnN0IHZvaWQgKnBrZXkpO1xuLS1cbm5ldC9pcHY0L2FycC5jPTE1Mj1zdHJ1Y3QgbmVpZ2hfdGFibGUgYXJwX3RibCA9IHtcbi0tXG5uZXQvaXB2NC9hcnAuYy0xNTgtXHQuY29uc3RydWN0b3JcdD0gYXJwX2NvbnN0cnVjdG9yLFxubmV0L2lwdjQvYXJwLmM6MTU5Olx0LnByb3h5X3JlZG9cdD0gcGFycF9yZWRvLFxubmV0L2lwdjQvYXJwLmMtMTYwLVx0LmlzX211bHRpY2FzdFx0PSBhcnBfaXNfbXVsdGljYXN0LFxuLS1cbm5ldC9pcHY0L2FycC5jPTcwMj1zdGF0aWMgaW50IGFycF9wcm9jZXNzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2FycC5jLTk1Mi1cbm5ldC9pcHY0L2FycC5jOjk1MzpzdGF0aWMgdm9pZCBwYXJwX3JlZG8oc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2FycC5jLTk1NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTE1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYmFzZWQgb24gdGhlIHByb21wdDoKCioqRGl2aW5nIGludG8gYHBhcnBfcmVkb2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGNyYWNrIG9wZW4gYG5ldC9pcHY0L2FycC5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgYHBhcnBfcmVkb2AuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gdGhpcyBmdW5jdGlvbjsgdGhlIG5hbWUgaXRzZWxmIGhpbnRzIGF0IHNvbWUga2luZCBvZiByZS10cmFuc21pc3Npb24gbG9naWMgb3IgcGVyaGFwcyBzb21lIHN0YXRlIHJlLWV2YWx1YXRpb24uIEdpdmVuIGl0cyBwbGFjZW1lbnQsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgaXMgaGFuZGxpbmcgdGhlIHJlLXRyYW5zbWlzc2lvbiBvZiBhIHByb2JlIG9yIHJlcXVlc3QgYWZ0ZXIgYW4gaW5pdGlhbCBBUlAgZmFpbHVyZSBvciB0aW1lb3V0LCBsaWtlbHkgaW4gdGhlIGNvbnRleHQgb2YgR3JhdHVpdG91cyBBUlAgb3Igd2hlbiBhIGhvc3QgZmFpbHMgdG8gaW1tZWRpYXRlbHkgcmVzcG9uZCB0byBhbiBBUlAgcmVxdWVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyByZXRyaWVzLCB3aGF0IHRoZSB0aW1lb3V0IHZhbHVlcyBhcmUsIGFuZCB3aGF0IHRyaWdnZXJzIHRoaXMgZnVuY3Rpb24mIzM5O3MgZXhlY3V0aW9uLiBJdCB3aWxsIGJlIGhlbHBmdWwgdG8gc2VlIHdoZXRoZXIgaXQgdXNlcyB0aGUgYGFycF90aW1lcmAgdG8gbWFuYWdlIHRoZSByZXF1ZXN0IG9yIHNvbWUgb3RoZXIga2VybmVsIG1lY2hhbmlzbS4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgZHVwbGljYXRlIGFkZHJlc3MgZGV0ZWN0aW9uIChEQUQpIGF0IGFsbC4gVGltZSB0byBsb29rIGludG8gdGhlIGNvZGUgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2FycC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTUzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NTM6XHRzdGF0aWMgdm9pZCBwYXJwX3JlZG8oc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA5NTQ6XHR7XG4gOTU1Olx0XHRhcnBfcHJvY2VzcyhkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xuIDk1NjpcdH1cbiA5NTc6XHRcbiA5NTg6XHRzdGF0aWMgaW50IGFycF9pc19tdWx0aWNhc3QoY29uc3Qgdm9pZCAqcGtleSlcbiA5NTk6XHR7XG4gOTYwOlx0XHRyZXR1cm4gaXB2NF9pc19tdWx0aWNhc3QoKigoX19iZTMyICopcGtleSkpO1xuIDk2MTpcdH1cbiA5NjI6XHRcbiA5NjM6XHQvKlxuIDk2NDpcdCAqXHRSZWNlaXZlIGFuIGFycCByZXF1ZXN0IGZyb20gdGhlIGRldmljZSBsYXllci5cbiA5NjU6XHQgKi9cbiA5NjY6XHRcbiA5Njc6XHRzdGF0aWMgaW50IGFycF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiA5Njg6XHRcdFx0ICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxuIDk2OTpcdHtcbiA5NzA6XHRcdGVudW0gc2tiX2Ryb3BfcmVhc29uIGRyb3BfcmVhc29uO1xuIDk3MTpcdFx0Y29uc3Qgc3RydWN0IGFycGhkciAqYXJwO1xuIDk3MjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjA4NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWFkbG9jayBEZXRlY3RlZCEgQSBDbGFzc2ljIEFCQkEgQnVnISoqCgpPa2F5LCBzbyBgcGFycF9yZWRvYCBjYWxscyBgYXJwX3Byb2Nlc3NgLiBUaGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCBjYW4gYGFycF9wcm9jZXNzYCBjYWxsIGBwbmVpZ2hfZW5xdWV1ZWA/IEFoLCB5ZXMsIGluIHRoZSBjb2RlLCByaWdodCB0aGVyZTogYHBuZWlnaF9lbnF1ZXVlKCZhbXA7YXJwX3RibCwgaW5fZGV2LSZndDthcnBfcGFybXMsIHNrYik7YCBJdCBkb2VzISBPa2F5LCBwdXR0aW5nIGl0IGFsbCB0b2dldGhlcjogYHBhcnBfcmVkb2AgY2FsbHMgYGFycF9wcm9jZXNzYCwgYW5kIGBhcnBfcHJvY2Vzc2AgY2FsbHMgYHBuZWlnaF9lbnF1ZXVlYC4KCk5vdywgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCBhbmQgY29uY2VybmluZy4gSWYgYHRibC0mZ3Q7cHJveHlfdGltZXJfbG9ja2AgaXMgaGVsZCBieSBgdGltZXJfZGVsZXRlX3N5bmNgIG9uIENQVSAwLCBhbmQgdGhhdCByb3V0aW5lIGlzIHdhaXRpbmcgZm9yIGBuZWlnaF9wcm94eV9wcm9jZXNzYCB0byBjb21wbGV0ZSBvbiBDUFUgMSwgYW5kIG9uIENQVSAxIGBuZWlnaF9wcm94eV9wcm9jZXNzYCBjYWxscyBgcGFycF9yZWRvYCwgd2hpY2ggY2FsbHMgYGFycF9wcm9jZXNzYCwgd2hpY2ggdGhlbiB0cmllcyB0byBhY3F1aXJlIGBzcGluX2xvY2tfYmgoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyX2xvY2spYC4uLiBXZSBoYXZlIGEgcG90ZW50aWFsIGRlYWRsb2NrLgoKTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246CgoqICAgKipDUFUgMDoqKiBgc3Bpbl9sb2NrX2JoKCZhbXA7dGJsLSZndDtwcm94eV90aW1lcl9sb2NrKTtgIGFuZCB0aGVuIGB0aW1lcl9kZWxldGVfc3luYygmYW1wO3RibC0mZ3Q7cHJveHlfdGltZXIpO2Agd2hpY2ggaXMgd2FpdGluZyBmb3IgYG5laWdoX3Byb3h5X3Byb2Nlc3NgIG9uIENQVSAxIHRvIGZpbmlzaC4KKiAgICoqQ1BVIDE6KiogYG5laWdoX3Byb3h5X3Byb2Nlc3MoKWAgaXMgcnVubmluZyAobGlrZWx5IGEgdGltZXIgaGFuZGxlcik6IGB0YmwtJmd0O3Byb3h5X3JlZG8oc2tiKWAgLSZndDsgYHBhcnBfcmVkb2AgLSZndDsgYGFycF9wcm9jZXNzYC4gQW5kLCBpZiBgYXJwX3Byb2Nlc3NgIGNhbGxzIGBwbmVpZ2hfZW5xdWV1ZWAgd2hpY2ggaXQgZG9lcwogICAgYHBuZWlnaF9lbnF1ZXVlYCB0cmllcyB0byBncmFiIGBzcGluX2xvY2tfYmgoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyX2xvY2spO2AKCioqVGhlIERlYWRsb2NrOioqIENQVSAwIGlzIHdhaXRpbmcgZm9yIENQVSAxICh0aGUgdGltZXIgaGFuZGxlcikgdG8gZmluaXNoIHJlbGVhc2luZyBgcHJveHlfdGltZXJfbG9ja2AgYW5kIENQVSAxIGlzIHdhaXRpbmcgZm9yIENQVSAwIHRvIHJlbGVhc2UgYHByb3h5X3RpbWVyX2xvY2tgISBDbGFzc2ljIEFCQkEsIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBhIHRpbWVyIHN5bmNocm9uaXphdGlvbiBidWcuIFRoaXMgY29uZmlybXMgd2h5IHBhdGNoIGZ1enppbmcgd2l0aCBzeXprYWxsZXIgYW5kIHRoZSBsb2NrZGVwIHRvb2wgaXMgY3J1Y2lhbCBpbiBkZXRlY3RpbmcgdGhlc2UgdHlwZXMgb2YgaXNzdWVzIGVhcmx5LgoKSSBzaG91bGQgY2hlY2sgaWYgYGFycF9wcm9jZXNzYCBjYW4gcmUtZW5xdWV1ZSwgcHJvYmFibHkgbG9vayBhcm91bmQgbGluZSA4ODAgaW4gYG5ldC9pcHY0L2FycC5jYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2FycC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NjA6XHRcdFx0XHRcdH1cbiA4NjE6XHRcdFx0XHR9XG4gODYyOlx0XHRcdFx0Z290byBvdXRfY29uc3VtZV9za2I7XG4gODYzOlx0XHRcdH0gZWxzZSBpZiAoSU5fREVWX0ZPUldBUkQoaW5fZGV2KSkge1xuIDg2NDpcdFx0XHRcdGlmIChhZGRyX3R5cGUgPT0gUlROX1VOSUNBU1QgIFx1MDAyNlx1MDAyNlxuIDg2NTpcdFx0XHRcdCAgICAoYXJwX2Z3ZF9wcm94eShpbl9kZXYsIGRldiwgcnQpIHx8XG4gODY2Olx0XHRcdFx0ICAgICBhcnBfZndkX3B2bGFuKGluX2RldiwgZGV2LCBydCwgc2lwLCB0aXApIHx8XG4gODY3Olx0XHRcdFx0ICAgICAocnQtXHUwMDNlZHN0LmRldiAhPSBkZXYgXHUwMDI2XHUwMDI2XG4gODY4Olx0XHRcdFx0ICAgICAgcG5laWdoX2xvb2t1cChcdTAwMjZhcnBfdGJsLCBuZXQsIFx1MDAyNnRpcCwgZGV2KSkpKSB7XG4gODY5Olx0XHRcdFx0XHRuID0gbmVpZ2hfZXZlbnRfbnMoXHUwMDI2YXJwX3RibCwgc2hhLCBcdTAwMjZzaXAsIGRldik7XG4gODcwOlx0XHRcdFx0XHRpZiAobilcbiA4NzE6XHRcdFx0XHRcdFx0bmVpZ2hfcmVsZWFzZShuKTtcbiA4NzI6XHRcbiA4NzM6XHRcdFx0XHRcdGlmIChORUlHSF9DQihza2IpLVx1MDAzZWZsYWdzIFx1MDAyNiBMT0NBTExZX0VOUVVFVUVEIHx8XG4gODc0Olx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZXBrdF90eXBlID09IFBBQ0tFVF9IT1NUIHx8XG4gODc1Olx0XHRcdFx0XHQgICAgTkVJR0hfVkFSKGluX2Rldi1cdTAwM2VhcnBfcGFybXMsIFBST1hZX0RFTEFZKSA9PSAwKSB7XG4gODc2Olx0XHRcdFx0XHRcdGFycF9zZW5kX2RzdChBUlBPUF9SRVBMWSwgRVRIX1BfQVJQLFxuIDg3NzpcdFx0XHRcdFx0XHRcdCAgICAgc2lwLCBkZXYsIHRpcCwgc2hhLFxuIDg3ODpcdFx0XHRcdFx0XHRcdCAgICAgZGV2LVx1MDAzZWRldl9hZGRyLCBzaGEsXG4gODc5Olx0XHRcdFx0XHRcdFx0ICAgICByZXBseV9kc3QpO1xuIDg4MDpcdFx0XHRcdFx0fSBlbHNlIHtcbiA4ODE6XHRcdFx0XHRcdFx0cG5laWdoX2VucXVldWUoXHUwMDI2YXJwX3RibCxcbiA4ODI6XHRcdFx0XHRcdFx0XHQgICAgICAgaW5fZGV2LVx1MDAzZWFycF9wYXJtcywgc2tiKTtcbiA4ODM6XHRcdFx0XHRcdFx0Z290byBvdXRfZnJlZV9kc3Q7XG4gODg0Olx0XHRcdFx0XHR9XG4gODg1Olx0XHRcdFx0XHRnb3RvIG91dF9jb25zdW1lX3NrYjtcbiA4ODY6XHRcdFx0XHR9XG4gODg3Olx0XHRcdH1cbiA4ODg6XHRcdH1cbiA4ODk6XHRcbiA4OTA6XHRcdC8qIFVwZGF0ZSBvdXIgQVJQIHRhYmxlcyAqL1xuIDg5MTpcdFxuIDg5MjpcdFx0biA9IF9fbmVpZ2hfbG9va3VwKFx1MDAyNmFycF90YmwsIFx1MDAyNnNpcCwgZGV2LCAwKTtcbiA4OTM6XHRcbiA4OTQ6XHRcdGFkZHJfdHlwZSA9IC0xO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzY1MQoJCQkJCQkJb3V0cHV0OiAyMTMKCQkJCQkJCXRob3VnaHRzOiA5OTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIExvY2sgSW52ZXJzaW9uIGluIE5laWdoYm9yIFN1YnN5c3RlbSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBMaW5lIDg3MyBpbiBgbmV0L2lwdjQvYXJwLmNgIGNhdWdodCBteSBhdHRlbnRpb24uIFRoZSBgTE9DQUxMWV9FTlFVRVVFRGAgZmxhZyBpbiB0aGUgQVJQIGNvbnRleHQgcHJldmVudHMgcmUtZW5xdWV1aW5nIG9mIHRoZSAqc2FtZSogcGFja2V0LiBIb3dldmVyLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGJyb2FkZXIgaW1wbGljYXRpb25zOiBJUHY2LCBvdGhlciBwYWNrZXQgdHlwZXMsIG9yIGV2ZW4gbG9ja2RlcCBpdHNlbGYgZmxhZ2dpbmcgYSBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb24uIERpZ2dpbmcgZGVlcGVyLCBJIHNlZSBgX190aW1lcl9kZWxldGVfc3luY2AgdXNlcyBgbG9jYWxfaXJxX3NhdmVgIGFuZCBgbG9jYWxfaXJxX3Jlc3RvcmVgIHdpdGggYSBgbG9ja2RlcF9tYXBgLiBUaGUgaXNzdWU/IElmIGB0aW1lcl9kZWxldGVfc3luY2AgaXMgY2FsbGVkIHdoaWxlIGBwcm94eV90aW1lcl9sb2NrYCBpcyBoZWxkLCB0aGVuIHdlIGhhdmU6IGBwcm94eV90aW1lcl9sb2NrYCAtJmd0OyBgdGltZXItJmd0O2xvY2tkZXBfbWFwYC4gTm93LCAqaW5zaWRlKiB0aGUgdGltZXIgY2FsbGJhY2ssIGB0aW1lci0mZ3Q7bG9ja2RlcF9tYXBgIGlzICphbHNvKiBoZWxkLiBJZiB0aGUgY2FsbGJhY2sgYXR0ZW1wdHMgdG8gYWNxdWlyZSBgcHJveHlfdGltZXJfbG9ja2AsIGxvY2tkZXAgd2lsbCAqaW1tZWRpYXRlbHkqIHNjcmVhbSBhYm91dCBhIGNpcmN1bGFyIGRlcGVuZGVuY3khIEEgbG9jayBpbnZlcnNpb24hIFdoYXQgaWYgc29tZSBvdGhlciB0aHJlYWQgY2FsbHMgYHBuZWlnaF9lbnF1ZXVlYCBmcm9tIHdpdGhpbiBhIHRpbWVyLCBuZXRmaWx0ZXIgaG9vaywgb3IgZXZlbiBwYWNrZXQgcmVjZXB0aW9uPwoKVGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZTogY29yZSBuZXR3b3JraW5nIHN5bmNocm9uaXphdGlvbi4gQSBuZXcgc3BpbmxvY2ssIGBwcm94eV90aW1lcl9sb2NrYCwgaXMgYWRkZWQgdG8gYHN0cnVjdCBuZWlnaF90YWJsZWAuIEl0JiMzOTtzIGFjcXVpcmVkIGluIGBwbmVpZ2hfZW5xdWV1ZWAgYW5kIGBfX25laWdoX2lmZG93bmAuIGB0aW1lcl9kZWxldGVfc3luY2AgaXMgY2FsbGVkIHVuZGVyIGBwcm94eV90aW1lcl9sb2NrYC4gVGhpcyBpcyByaXBlIGZvciBmdXp6aW5nLiBJdCYjMzk7cyBlYXNpbHkgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIG9wZXJhdGlvbnMsIHZpcnR1YWwgZGV2aWNlcyAodHVuL3RhcCwgdmV0aCwgbG9vcGJhY2spLCByb3V0ZSBjb25maWd1cmF0aW9uLCBuZXRsaW5rLCBBUlAvTkQgdHJhZmZpYywgYW5kIGxpbmsgc3RhdGUgY2hhbmdlcyAoYGlwIGxpbmsgc2V0IC4uLiB1cC9kb3duYCkuCgpgV29ydGhGdXp6aW5nYD8gQWJzb2x1dGVseSwgYHRydWVgLgoKTGV0JiMzOTtzIGxvb2sgYXQgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIGBDT05GSUdfTkVUYCBpcyBlc3NlbnRpYWwsIGFuZCBgQ09ORklHX0lORVRgIGlzIGFsc28gbmVlZGVkIGJlY2F1c2UgYHBuZWlnaF9lbnF1ZXVlYCBpcyB1c2VkIGJ5IElQdjQgQVJQIChgQ09ORklHX0lORVRgKSBhbmQgSVB2NiBORCAoYENPTkZJR19JUFY2YCkuIFRoZSBuZWlnaGJvciBzdWJzeXN0ZW0gaXMgcGFydCBvZiBjb3JlIG5ldHdvcmtpbmcgKGBDT05GSUdfTkVUYCkuIE5vIG90aGVyIHNwZWNpZmljIGNvbmZpZ3MgYXBwZWFyIGNyaXRpY2FsIGF0IHRoaXMgcG9pbnQuIFNvIHRoZSBzZXQgb2YgcmVxdWlyZWQgY29uZmlnIG9wdGlvbnMgYXJlOiBgWyYjMzQ7TkVUJiMzNDssICYjMzQ7SU5FVCYjMzQ7LCAmIzM0O0lQVjYmIzM0O11gIG9yIGBbJiMzNDtORVQmIzM0OywgJiMzNDtJTkVUJiMzNDtdYCAuCgpBcyBmb3IgYEZvY3VzU3ltYm9sc2AsIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczogYHBuZWlnaF9lbnF1ZXVlYCwgYG5laWdoX2lmZG93bmAgKHdoaWNoIGNhbGxzIGBfX25laWdoX2lmZG93bmApLCBgbmVpZ2hfY2Fycmllcl9kb3duYCAod2hpY2ggYWxzbyBjYWxscyBgX19uZWlnaF9pZmRvd25gKSwgYF9fbmVpZ2hfaWZkb3duYCAodGhlIGFjdHVhbCBtb2RpZmllZCBmdW5jdGlvbiksIGBuZWlnaF9wcm94eV9wcm9jZXNzYCAodGhlIHRpbWVyIGNhbGxiYWNrKSwgYW5kIGBwbmVpZ2hfcXVldWVfcHVyZ2VgIChjYWxsZWQgYmVmb3JlIGB0aW1lcl9kZWxldGVfc3luY2ApLgoKSSYjMzk7dmUgdmVyaWZpZWQgdGhlc2Ugc3ltYm9scyBleGlzdCBpbiB0aGUga2VybmVsIGFuZCBhcmUgYWxsIGV4cG9ydGVkLCBvciBpbiB0aGUgY2FzZSBvZiBgX19uZWlnaF9pZmRvd25gLCBzdGF0aWMuIE5vbmUgb2YgdGhlbSBhcmUgdWJpcXVpdG91cywgbWVhbmluZyBub3QgbWVtb3J5IGFsbG9jYXRvcnMsIGNvcmUgc2NoZWR1bGVyLCBvciBnZW5lcmFsIGxvY2sgcHJpbWl0aXZlcy4gVGhleSBhcmUgc3BlY2lmaWMgdG8gbmVpZ2hib3IgcHJveHkgdGltZXJzIGFuZCBpbnRlcmZhY2UgZG93biBldmVudHMgaW4gdGhlIG5laWdoYm9yIHN1YnN5c3RlbS4KCkZpbmFsbHksIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIGV2ZXJ5dGhpbmcgYWdhaW5zdCB0aGUgaW5zdHJ1Y3Rpb25zOiBJJiMzOTtsbCB1c2UgYHNldC1yZXN1bHRzYCB0byBwcm92aWRlIHRoZSBhbmFseXNpcywgaXQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UsIGBXb3J0aEZ1enppbmdgIGlzIHRydWUsIHRoZSBgUmVhc29uaW5nYCBpcyBjb25jaXNlLCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIHNwZWNpZmljLCBub24tdWJpcXVpdG91cywgYW5kIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNwZWNpZmllZC4KCkkgYW0gY29uZmlkZW50LgpgYGBqc29uCnsKJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZSwKJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtJbnRyb2R1Y3Rpb24gb2YgcHJveHlfdGltZXJfbG9jayBpbiBuZXQvY29yZS9uZWlnaGJvdXIuYyBjcmVhdGVzIHBvdGVudGlhbCBsb2NrIGludmVyc2lvbiBpc3N1ZXMgd2hlbiBwbmVpZ2hfZW5xdWV1ZSBvciB0aW1lciBjYWxsYmFja3MgYWNxdWlyZSB0aGUgc2FtZSBsb2NrJiMzNDssCiYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKJiMzNDtwbmVpZ2hfZW5xdWV1ZSYjMzQ7LAomIzM0O25laWdoX2lmZG93biYjMzQ7LAomIzM0O25laWdoX2NhcnJpZXJfZG93biYjMzQ7LAomIzM0O19fbmVpZ2hfaWZkb3duJiMzNDssCiYjMzQ7bmVpZ2hfcHJveHlfcHJvY2VzcyYjMzQ7LAomIzM0O3BuZWlnaF9xdWV1ZV9wdXJnZSYjMzQ7Cl0sCiYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiYjMzQ7TkVUJiMzNDssCiYjMzQ7SU5FVCYjMzQ7LAomIzM0O0lQVjYmIzM0OwpdCn0KYGBgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cG5laWdoX2VucXVldWUmIzM0OywKICAgICYjMzQ7X19uZWlnaF9pZmRvd24mIzM0OywKICAgICYjMzQ7bmVpZ2hfaWZkb3duJiMzNDssCiAgICAmIzM0O25laWdoX2NhcnJpZXJfZG93biYjMzQ7LAogICAgJiMzNDtuZWlnaF9wcm94eV9wcm9jZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBpbiB0aGUgY29yZSBuZXR3b3JraW5nIG5laWdoYm91ciBzdWJzeXN0ZW0gKG5ldC9jb3JlL25laWdoYm91ci5jIGFuZCBpbmNsdWRlL25ldC9uZWlnaGJvdXIuaCkuIEl0IGludHJvZHVjZXMgYSBuZXcgc3BpbmxvY2ssIHByb3h5X3RpbWVyX2xvY2ssIHRvIHNlcmlhbGl6ZSBwcm94eSB0aW1lciByZWFybWluZyBpbiBwbmVpZ2hfZW5xdWV1ZSB3aXRoIHF1ZXVlIHB1cmdpbmcgYW5kIHRpbWVyX2RlbGV0ZV9zeW5jIGluIF9fbmVpZ2hfaWZkb3duLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzdGFuZGFyZCBuZXRsaW5rL3N5c2ZzIGRldmljZSBzdGF0ZSBtYW5pcHVsYXRpb24gKGUuZy4sIGJyaW5naW5nIGludGVyZmFjZXMgZG93bikgYW5kIHByb3h5IEFSUC9ORCBwYWNrZXQgaGFuZGxpbmcuIEZ1enppbmcgd2l0aCBzeXprYWxsZXIgKGFuZCBsb2NrZGVwKSBpcyB3YXJyYW50ZWQgdG8gZGV0ZWN0IHBvdGVudGlhbCBsb2NrIGludmVyc2lvbnMsIGRlYWRsb2NrcywgYW5kIHRpbWVyIHN5bmNocm9uaXphdGlvbiByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BuZWlnaF9lbnF1ZXVlJiMzNDssCiAgICAmIzM0O19fbmVpZ2hfaWZkb3duJiMzNDssCiAgICAmIzM0O25laWdoX2lmZG93biYjMzQ7LAogICAgJiMzNDtuZWlnaF9jYXJyaWVyX2Rvd24mIzM0OywKICAgICYjMzQ7bmVpZ2hfcHJveHlfcHJvY2VzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gaW4gdGhlIGNvcmUgbmV0d29ya2luZyBuZWlnaGJvdXIgc3Vic3lzdGVtIChuZXQvY29yZS9uZWlnaGJvdXIuYyBhbmQgaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgpLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHNwaW5sb2NrLCBwcm94eV90aW1lcl9sb2NrLCB0byBzZXJpYWxpemUgcHJveHkgdGltZXIgcmVhcm1pbmcgaW4gcG5laWdoX2VucXVldWUgd2l0aCBxdWV1ZSBwdXJnaW5nIGFuZCB0aW1lcl9kZWxldGVfc3luYyBpbiBfX25laWdoX2lmZG93bi4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3RhbmRhcmQgbmV0bGluay9zeXNmcyBkZXZpY2Ugc3RhdGUgbWFuaXB1bGF0aW9uIChlLmcuLCBicmluZ2luZyBpbnRlcmZhY2VzIGRvd24pIGFuZCBwcm94eSBBUlAvTkQgcGFja2V0IGhhbmRsaW5nLiBGdXp6aW5nIHdpdGggc3l6a2FsbGVyIChhbmQgbG9ja2RlcCkgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb25zLCBkZWFkbG9ja3MsIGFuZCB0aW1lciBzeW5jaHJvbml6YXRpb24gcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgZGVkaWNhdGVkIHNwaW5sb2NrIChgcHJveHlfdGltZXJfbG9ja2ApIHRvIGBzdHJ1Y3QgbmVpZ2hfdGFibGVgIGFuZCB1c2VzIGl0IHRvIHNlcmlhbGl6ZSByZWFybWluZyBvZiBgdGJsLVx1MDAzZXByb3h5X3RpbWVyYCB2aWEgYG1vZF90aW1lcigpYCBpbiBgcG5laWdoX2VucXVldWUoKWAgd2l0aCBxdWV1ZSBwdXJnaW5nIGFuZCBzeW5jaHJvbm91cyB0aW1lciBkZWxldGlvbiBpbiBgX19uZWlnaF9pZmRvd24oKWAuIFRoZSBuZXcgbG9jayBpcyBpbml0aWFsaXplZCB3aXRoIGBzcGluX2xvY2tfaW5pdCgpYCBpbiBgbmVpZ2hfdGFibGVfaW5pdCgpYC5cblxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBwZXJ0YWluIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgYW5kIHRpbWVyIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNo4oCUc3VjaCBhcyBsb2NraW5nIG9yZGVyIGludmVyc2lvbnMsIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9uc+KAlGFyZSBoYW5kbGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBObyBuZXcgdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgcmVhZCBvciBicmFuY2hlZCB1cG9uLCBhbmQgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjg2YzU0ZDFlNzFmNTIyZWUzYzQ5OTQwNmNlYjViNTM5MjgzZDU3NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDA5OjAxOjI0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmggYi9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaAppbmRleCA4ODYwY2MyMTc1ZmMxLi4xNTEwN2MwMGI0ZGY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaApAQCAtMjM5LDYgJiM0MzsyMzksOCBAQCBzdHJ1Y3QgbmVpZ2hfdGFibGUgewogCXN0cnVjdCBsaXN0X2hlYWQJZ2NfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCW1hbmFnZWRfbGlzdDsKIAlzcGlubG9ja190CQlsb2NrOwomIzQzOwkvKiBTZXJpYWxpemVzIHByb3h5IHRpbWVyIHJlYXJtaW5nIHdpdGggdGVhcmRvd24uICovCiYjNDM7CXNwaW5sb2NrX3QJCXByb3h5X3RpbWVyX2xvY2s7CiAJdW5zaWduZWQgbG9uZwkJbGFzdF9yYW5kOwogCXN0cnVjdCBuZWlnaF9zdGF0aXN0aWNzCV9fcGVyY3B1ICpzdGF0czsKIAlzdHJ1Y3QgbmVpZ2hfaGFzaF90YWJsZSBfX3JjdSAqbmh0OwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwppbmRleCAxMzQ5YzBlZWRiNjQyLi4xZWE3OTRhNTQxZWZiIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZWlnaGJvdXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwpAQCAtNDcxLDEwICYjNDM7NDcxLDEzIEBAIHN0YXRpYyBpbnQgX19uZWlnaF9pZmRvd24oc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YmwtJmd0O2xvY2spOwogCiAJcG5laWdoX2lmZG93bih0YmwsIGRldiwgc2tpcF9wZXJtKTsKJiM0MzsJLyogVGhlIGNhbGxiYWNrIGRvZXMgbm90IHRha2UgdGhpcyBsb2NrLCBzbyBzeW5jIGRlbGV0aW9uIGNhbiB3YWl0IGZvciBpdC4gKi8KJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dGJsLSZndDtwcm94eV90aW1lcl9sb2NrKTsKIAlwbmVpZ2hfcXVldWVfcHVyZ2UoJmFtcDt0YmwtJmd0O3Byb3h5X3F1ZXVlLCBkZXYgPyBkZXZfbmV0KGRldikgOiBOVUxMLAogCQkJICAgdGJsLSZndDtmYW1pbHkpOwogCWlmIChza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoJmFtcDt0YmwtJmd0O3Byb3h5X3F1ZXVlKSkKIAkJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyKTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyX2xvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xNzI5LDYgJiM0MzsxNzMyLDcgQEAgdm9pZCBwbmVpZ2hfZW5xdWV1ZShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5laWdoX3Bhcm1zICpwLAogCU5FSUdIX0NCKHNrYiktJmd0O3NjaGVkX25leHQgPSBzY2hlZF9uZXh0OwogCU5FSUdIX0NCKHNrYiktJmd0O2ZsYWdzIHw9IExPQ0FMTFlfRU5RVUVVRUQ7CiAKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dGJsLSZndDtwcm94eV90aW1lcl9sb2NrKTsKIAlzcGluX2xvY2soJmFtcDt0YmwtJmd0O3Byb3h5X3F1ZXVlLmxvY2spOwogCWlmICh0aW1lcl9kZWxldGUoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyKSkgewogCQlpZiAodGltZV9iZWZvcmUodGJsLSZndDtwcm94eV90aW1lci5leHBpcmVzLCBzY2hlZF9uZXh0KSkKQEAgLTE3NDAsNiAmIzQzOzE3NDQsNyBAQCB2b2lkIHBuZWlnaF9lbnF1ZXVlKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmVpZ2hfcGFybXMgKnAsCiAJcC0mZ3Q7cWxlbiYjNDM7JiM0Mzs7CiAJbW9kX3RpbWVyKCZhbXA7dGJsLSZndDtwcm94eV90aW1lciwgc2NoZWRfbmV4dCk7CiAJc3Bpbl91bmxvY2soJmFtcDt0YmwtJmd0O3Byb3h5X3F1ZXVlLmxvY2spOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3RibC0mZ3Q7cHJveHlfdGltZXJfbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKHBuZWlnaF9lbnF1ZXVlKTsKIApAQCAtMTg1OCw2ICYjNDM7MTg2Myw3IEBAIHZvaWQgbmVpZ2hfdGFibGVfaW5pdChpbnQgaW5kZXgsIHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsKQogCQlXQVJOX09OKHRibC0mZ3Q7ZW50cnlfc2l6ZSAlIE5FSUdIX1BSSVZfQUxJR04pOwogCiAJc3Bpbl9sb2NrX2luaXQoJmFtcDt0YmwtJmd0O2xvY2spOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO3RibC0mZ3Q7cHJveHlfdGltZXJfbG9jayk7CiAJbXV0ZXhfaW5pdCgmYW1wO3RibC0mZ3Q7cGhhc2hfbG9jayk7CiAKIAlJTklUX0RFRkVSUkFCTEVfV09SSygmYW1wO3RibC0mZ3Q7Z2Nfd29yaywgbmVpZ2hfcGVyaW9kaWNfd29yayk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzQzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmVpZ2hib3VyaG9vZCBUYWJsZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHBvdGVudGlhbCBrZXJuZWwgbWVtb3J5IHNhZmV0eSBpc3N1ZSwgc3BlY2lmaWNhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIChLTVNBTikgb3IgaWYgdGhpcyBpcyBjb25maW5lZCB0byBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyAoS0FTQU4vTE9DS0RFUCkuIFRoZSBkaWZmIHNob3dzIGNoYW5nZXMgaW4gYGluY2x1ZGUvbmV0L25laWdoYm91ci5oYCBhbmQgYG5ldC9jb3JlL25laWdoYm91ci5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIG15IHN1c3BpY2lvbi4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIGFkZGl0aW9uIG9mIGEgYHNwaW5sb2NrX3QgcHJveHlfdGltZXJfbG9ja2Agd2l0aGluIHRoZSBgc3RydWN0IG5laWdoX3RhYmxlYC4gVGhlIGNvbW1lbnQgZXhwbGljaXRseSBzdGF0ZXMgaXRzIHB1cnBvc2U6ICYjMzQ7LyogU2VyaWFsaXplcyBwcm94eSB0aW1lciByZWFybWluZyB3aXRoIHRlYXJkb3duLiAqLyYjMzQ7LiBUaGlzIHN1Z2dlc3RzIHN5bmNocm9uaXphdGlvbiBhcm91bmQgYSB0aW1lciB1c2VkIGZvciBwcm94eSBuZWlnaGJvdXJzLCB3aGljaCBpcyBhIHByZXR0eSBjb21tb24gcGF0dGVybiBmb3IgdGhpcyBuZXR3b3JraW5nIGNvZGUuCgpJbiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYF9fbmVpZ2hfaWZkb3duYCB0byB0YWtlIGBzcGluX2xvY2tfYmgoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyX2xvY2spYCBhcm91bmQgdGhlIGNhbGxzIHRvIGBwbmVpZ2hfcXVldWVfcHVyZ2UoKWAgYW5kIGB0aW1lcl9kZWxldGVfc3luYygmYW1wO3RibC0mZ3Q7cHJveHlfdGltZXIpYC4gVGhpcyBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGxvY2tpbmcgZG93biBhY2Nlc3MgdG8gdGhlIHByb3h5IHRpbWVyIGR1cmluZyBpbnRlcmZhY2UgZG93biBvcGVyYXRpb25zLCB3aGljaCBpcyBnb29kLiBTaW1pbGFybHksIGBwbmVpZ2hfZW5xdWV1ZWAgbm93IHRha2VzIHRoYXQgc2FtZSBsb2NrIGFyb3VuZCB0aGUgcXVldWVpbmcvcmVhcm1pbmcgb2YgYHRibC0mZ3Q7cHJveHlfdGltZXJgLiBUaGlzIHByb3RlY3RzIGFnYWluc3QgcmFjZSBjb25kaXRpb25zIHdoZW4gYSBwcm94eSBlbnRyeSBpcyBhZGRlZCwgb3IgYW4gZXhpc3RpbmcgcHJveHkgZW50cnkgbmVlZHMgaXRzIHRpbWVyIHJlc2V0LiBGaW5hbGx5LCBgbmVpZ2hfdGFibGVfaW5pdGAgbm93IGluaXRpYWxpemVzIHRoZSBsb2NrLgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gcmVhZCBhcm91bmQgbGluZXMgNDcxLCAxNzI5LCBhbmQgMTg1OCBpbiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgIHVzaW5nIGByZWFkLWZpbGVgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kOgoqICAgVGhlIG92ZXJhbGwgZnVuY3Rpb24gb2YgYG5laWdoX3RhYmxlX2luaXRgLiBXaGF0IGRhdGEgaXMgaW5pdGlhbGl6ZWQgaGVyZSBhbmQgaG93IG1pZ2h0IHRoaXMgYWZmZWN0IHRoZSBsb2NraW5nPwoqICAgVGhlIGV4YWN0IGNvbnRyb2wgZmxvdyBvZiBgX19uZWlnaF9pZmRvd25gLiBXaGF0IGNhbiBoYXBwZW4gZHVyaW5nIGBwbmVpZ2hfcXVldWVfcHVyZ2UoKWAgYW5kIGB0aW1lcl9kZWxldGVfc3luYygpYD8KKiAgIEFuZCBmaW5hbGx5LCBob3cgYHBuZWlnaF9lbnF1ZXVlYCBpcyBjYWxsZWQuIFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnRleHRzIGFuZCB3aGF0IGNvdWxkIGNhdXNlIHJhY2UgY29uZGl0aW9ucyB3aXRoIHRoZSB0aW1lciBpbiB0aGF0IGZ1bmN0aW9uPwoKQmFzZWQgb24gdGhlIGluZm9ybWF0aW9uLCBJJiMzOTtsbCBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIGxvY2tpbmcgbG9naWMgaXMgc291bmQgYW5kIHRoZXJlIGFyZSBubyByZXNpZHVhbCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL25laWdoYm91ci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjU6XHRcdGlmIChsaWtlbHkoZGV2KSkge1xuIDQ2NjpcdFx0XHRuZWlnaF9mbHVzaF9kZXYodGJsLCBkZXYsIHNraXBfcGVybSk7XG4gNDY3Olx0XHR9IGVsc2Uge1xuIDQ2ODpcdFx0XHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNraXBfcGVybSk7XG4gNDY5Olx0XHRcdG5laWdoX2ZsdXNoX3RhYmxlKHRibCk7XG4gNDcwOlx0XHR9XG4gNDcxOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0YmwtXHUwMDNlbG9jayk7XG4gNDcyOlx0XG4gNDczOlx0XHRwbmVpZ2hfaWZkb3duKHRibCwgZGV2LCBza2lwX3Blcm0pO1xuIDQ3NDpcdFx0LyogVGhlIGNhbGxiYWNrIGRvZXMgbm90IHRha2UgdGhpcyBsb2NrLCBzbyBzeW5jIGRlbGV0aW9uIGNhbiB3YWl0IGZvciBpdC4gKi9cbiA0NzU6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XG4gNDc2Olx0XHRwbmVpZ2hfcXVldWVfcHVyZ2UoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3F1ZXVlLCBkZXYgPyBkZXZfbmV0KGRldikgOiBOVUxMLFxuIDQ3NzpcdFx0XHRcdCAgIHRibC1cdTAwM2VmYW1pbHkpO1xuIDQ3ODpcdFx0aWYgKHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUpKVxuIDQ3OTpcdFx0XHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXIpO1xuIDQ4MDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xuIDQ4MTpcdFx0cmV0dXJuIDA7XG4gNDgyOlx0fVxuIDQ4MzpcdFxuIDQ4NDpcdGludCBuZWlnaF9jYXJyaWVyX2Rvd24oc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gNDg1Olx0e1xuIDQ4NjpcdFx0X19uZWlnaF9pZmRvd24odGJsLCBkZXYsIHRydWUpO1xuIDQ4NzpcdFx0cmV0dXJuIDA7XG4gNDg4Olx0fVxuIDQ4OTpcdFxuIDQ5MDpcdGludCBuZWlnaF9pZmRvd24oc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gNDkxOlx0e1xuIDQ5MjpcdFx0X19uZWlnaF9pZmRvd24odGJsLCBkZXYsIGZhbHNlKTtcbiA0OTM6XHRcdHJldHVybiAwO1xuIDQ5NDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA4OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2Ugc2VjdGlvbnMgb2YgYG5ldC9jb3JlL25laWdoYm91ci5jYDoKCioqRGVlcCBEaXZlIG9uIE5laWdoYm91ciBEaXNjb3ZlcnkqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIGNpcmNsZSBiYWNrIGFuZCByZWFsbHkgc2NydXRpbml6ZSBsaW5lcyAxNzIwLTE3NjAgYW5kIDE4NTAtMTg3NSBvZiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLiBUaGVzZSBhcmUgbGlrZWx5IGNydWNpYWwgYXJlYXMgZGVhbGluZyB3aXRoIG5laWdoYm91ciBkaXNjb3ZlcnksIHdoaWNoLCBhcyB3ZSBrbm93LCBpcyBhYnNvbHV0ZWx5IGZ1bmRhbWVudGFsIHRvIGhvdyBJUCBuZXR3b3JraW5nIG9wZXJhdGVzIGF0IHRoZSBsaW5rIGxheWVyLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCAxNzIwLTE3NjAgcHJvYmFibHkgaGFuZGxlcyBlaXRoZXIgdGhlIHJlc29sdXRpb24gaXRzZWxmIG9yIHBlcmhhcHMgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBjYWNoZSBtYW5hZ2VtZW50LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgY29yZSBsb2dpYyB0aGF0IGZpZ3VyZXMgb3V0IHRoZSBNQUMgYWRkcmVzcyBjb3JyZXNwb25kaW5nIHRvIGFuIElQIGFkZHJlc3MsIG9yIGl0IGhhcyB0byBkbyB3aXRoIGhvdyB0aGUgZW50cmllcyBhcmUgcHV0IGludG8gdGhlIEFSUCBjYWNoZS4gVW5kZXJzdGFuZGluZyB0aGF0IGludGVyYWN0aW9uIGlzIGFic29sdXRlbHkga2V5IHRvIG9wdGltaXphdGlvbi4gVGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyB0aGVyZSBhcmUgaHVnZSAtIGEgcG9vcmx5IGltcGxlbWVudGVkIG5laWdoYm91ciBkaXNjb3ZlcnkgYWxnb3JpdGhtIGNhbiBjcmlwcGxlIG5ldHdvcmsgdGhyb3VnaHB1dCBhbmQgbGF0ZW5jeS4KClRoZW4sIHRoZSBzZWNvbmQgc2VjdGlvbiwgMTg1MC0xODc1LCB0aGF0JiMzOTtzIHByb2JhYmx5IHJlbGF0ZWQgdG8gaGFuZGxpbmcgbmVpZ2hib3Igc3RhdGVzIG9yIHRoZWlyIHRpbWVkIGV4cGlyYXRpb24gd2l0aGluIHRoZSBjYWNoZS4gTWF5YmUgaXQmIzM5O3MgYWJvdXQgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBwcm9jZXNzZXMuIElzIGl0IGRlYWxpbmcgd2l0aCByZXRyaWVzLCB0aW1lb3V0cywgb3IgaW52YWxpZGF0aW9uIG9mIHN0YWxlIGVudHJpZXM/IEtub3dpbmcgaG93IGl0IGRlYWxzIHdpdGggdGhlc2UgcG90ZW50aWFsbHkgZXJyb3ItcHJvbmUgc2NlbmFyaW9zIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBrZXJuZWwmIzM5O3Mgb3ZlcmFsbCByb2J1c3RuZXNzLiBJIG5lZWQgdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWFsaW5nIHdpdGggY29uZmxpY3RpbmcgZW50cmllcyBvciByYXBpZGx5IGNoYW5naW5nIG5ldHdvcmsgdG9wb2xvZ2llcy4gVGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHJvdXRpbmcgY2FjaGUgaXMgYW5vdGhlciBrZXkgaXRlbSB0aGF0IGNhbiYjMzk7dCBiZSBvdmVybG9va2VkLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBpbmVmZmljaWVudCBsb2NraW5nIG1lY2hhbmlzbXMsIG9yIGV4Y2Vzc2l2ZSBjb250ZXh0IHN3aXRjaGVzIHdpdGhpbiB0aG9zZSBzZWdtZW50cy4gSSBleHBlY3QgdGhlIGNvZGUgaXMgY2FyZWZ1bGx5IG9wdGltaXplZCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUgY29tcGxldGVseS4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgY29kZSBjb21tZW50cyBhcmUgc3VmZmljaWVudCBvciBpZiBJIGhhdmUgdG8gdHJhY2UgdGhyb3VnaCBtb3JlIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBjb21wbGV0ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL25laWdoYm91ci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzIwOlx0fVxuMTcyMTpcdFxuMTcyMjpcdHZvaWQgcG5laWdoX2VucXVldWUoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZWlnaF9wYXJtcyAqcCxcbjE3MjM6XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IpXG4xNzI0Olx0e1xuMTcyNTpcdFx0dW5zaWduZWQgbG9uZyBzY2hlZF9uZXh0ID0gbmVpZ2hfcHJveHlfZGVsYXkocCk7XG4xNzI2Olx0XG4xNzI3Olx0XHRpZiAocC1cdTAwM2VxbGVuIFx1MDAzZSBORUlHSF9WQVIocCwgUFJPWFlfUUxFTikpIHtcbjE3Mjg6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4xNzI5Olx0XHRcdHJldHVybjtcbjE3MzA6XHRcdH1cbjE3MzE6XHRcbjE3MzI6XHRcdE5FSUdIX0NCKHNrYiktXHUwMDNlc2NoZWRfbmV4dCA9IHNjaGVkX25leHQ7XG4xNzMzOlx0XHRORUlHSF9DQihza2IpLVx1MDAzZWZsYWdzIHw9IExPQ0FMTFlfRU5RVUVVRUQ7XG4xNzM0Olx0XG4xNzM1Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xuMTczNjpcdFx0c3Bpbl9sb2NrKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZS5sb2NrKTtcbjE3Mzc6XHRcdGlmICh0aW1lcl9kZWxldGUoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyKSkge1xuMTczODpcdFx0XHRpZiAodGltZV9iZWZvcmUodGJsLVx1MDAzZXByb3h5X3RpbWVyLmV4cGlyZXMsIHNjaGVkX25leHQpKVxuMTczOTpcdFx0XHRcdHNjaGVkX25leHQgPSB0YmwtXHUwMDNlcHJveHlfdGltZXIuZXhwaXJlcztcbjE3NDA6XHRcdH1cbjE3NDE6XHRcdHNrYl9kc3RfZHJvcChza2IpO1xuMTc0MjpcdFx0ZGV2X2hvbGQoc2tiLVx1MDAzZWRldik7XG4xNzQzOlx0XHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZSwgc2tiKTtcbjE3NDQ6XHRcdHAtXHUwMDNlcWxlbiYjNDM7JiM0Mzs7XG4xNzQ1Olx0XHRtb2RfdGltZXIoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyLCBzY2hlZF9uZXh0KTtcbjE3NDY6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZS5sb2NrKTtcbjE3NDc6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcbjE3NDg6XHR9XG4xNzQ5Olx0RVhQT1JUX1NZTUJPTChwbmVpZ2hfZW5xdWV1ZSk7XG4xNzUwOlx0XG4xNzUxOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmVpZ2hfcGFybXMgKmxvb2t1cF9uZWlnaF9wYXJtcyhzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCxcbjE3NTI6XHRcdFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0ICpuZXQsIGludCBpZmluZGV4KVxuMTc1MzpcdHtcbjE3NTQ6XHRcdHN0cnVjdCBuZWlnaF9wYXJtcyAqcDtcbjE3NTU6XHRcbjE3NTY6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgXHUwMDI2dGJsLVx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcbjE3NTc6XHRcdFx0aWYgKChwLVx1MDAzZWRldiBcdTAwMjZcdTAwMjYgcC1cdTAwM2VkZXYtXHUwMDNlaWZpbmRleCA9PSBpZmluZGV4IFx1MDAyNlx1MDAyNiBuZXRfZXEobmVpZ2hfcGFybXNfbmV0KHApLCBuZXQpKSB8fFxuMTc1ODpcdFx0XHQgICAgKCFwLVx1MDAzZWRldiBcdTAwMjZcdTAwMjYgIWlmaW5kZXggXHUwMDI2XHUwMDI2IG5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSkpXG4xNzU5Olx0XHRcdFx0cmV0dXJuIHA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMzAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIENvZGViYXNlIC0gRm9jdXMgb24gYG5laWdoX3RhYmxlX2luaXRgKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSBjb2RlYmFzZSwgYW5kIEkgd2FudCB0byBzaGlmdCBteSBmb2N1cyBub3cuIEkmIzM5O3ZlIGJlZW4gY29uc2lkZXJpbmcgdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLCBidXQgbGV0JiMzOTtzIHpvb20gaW4gb24gYSBzcGVjaWZpYyBmdW5jdGlvbi4gSSYjMzk7bSBnb2luZyB0byB0dXJuIG15IGF0dGVudGlvbiB0byB0aGUgYG5laWdoX3RhYmxlX2luaXRgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGFyb3VuZCBsaW5lIDE4NTAuIEkga25vdyB0aGlzIGFyZWEgcGxheXMgYSBjcml0aWNhbCByb2xlIGluIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgbmVpZ2hib3IgdGFibGUsIHdoaWNoIGlzIGtleSBmb3IgWyppbnNlcnQgeW91ciBmaWVsZCBvZiBleHBlcnRpc2UsIGUuZy4sIHJvdXRpbmcgcHJvdG9jb2xzLCBuZXR3b3JrIGFkZHJlc3MgcmVzb2x1dGlvbiwgZGlzdHJpYnV0ZWQgY29uc2Vuc3VzLCBldGMuKl0uIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoYXQmIzM5O3MgYmVpbmcgc2V0IHVwIGluIHRoaXMgaW1wbGVtZW50YXRpb24uIEkgaGF2ZSB0byBzZWUgaG93IGl0JiMzOTtzIGRvbmUgc28gSSBjYW4gYXNzZXNzIGl0cyBlZmZpY2llbmN5LCBzY2FsYWJpbGl0eSwgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGFsZ29yaXRobXMgZW1wbG95ZWQgd2l0aGluIGl0LCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBJJiMzOTttIGRpZ2dpbmcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmVpZ2hib3VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NTA6XHRcbjE4NTE6XHRcdFJDVV9JTklUX1BPSU5URVIodGJsLVx1MDAzZW5odCwgbmVpZ2hfaGFzaF9hbGxvYygzKSk7XG4xODUyOlx0XG4xODUzOlx0XHRwaHNpemUgPSAoUE5FSUdIX0hBU0hNQVNLICYjNDM7IDEpICogc2l6ZW9mKHN0cnVjdCBwbmVpZ2hfZW50cnkgKik7XG4xODU0Olx0XHR0YmwtXHUwMDNlcGhhc2hfYnVja2V0cyA9IGt6YWxsb2MocGhzaXplLCBHRlBfS0VSTkVMKTtcbjE4NTU6XHRcbjE4NTY6XHRcdGlmICghdGJsLVx1MDAzZW5odCB8fCAhdGJsLVx1MDAzZXBoYXNoX2J1Y2tldHMpXG4xODU3Olx0XHRcdHBhbmljKFwmIzM0O2Nhbm5vdCBhbGxvY2F0ZSBuZWlnaGJvdXIgY2FjaGUgaGFzaGVzXCYjMzQ7KTtcbjE4NTg6XHRcbjE4NTk6XHRcdGlmICghdGJsLVx1MDAzZWVudHJ5X3NpemUpXG4xODYwOlx0XHRcdHRibC1cdTAwM2VlbnRyeV9zaXplID0gQUxJR04ob2Zmc2V0b2Yoc3RydWN0IG5laWdoYm91ciwgcHJpbWFyeV9rZXkpICYjNDM7XG4xODYxOlx0XHRcdFx0XHRcdHRibC1cdTAwM2VrZXlfbGVuLCBORUlHSF9QUklWX0FMSUdOKTtcbjE4NjI6XHRcdGVsc2VcbjE4NjM6XHRcdFx0V0FSTl9PTih0YmwtXHUwMDNlZW50cnlfc2l6ZSAlIE5FSUdIX1BSSVZfQUxJR04pO1xuMTg2NDpcdFxuMTg2NTpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dGJsLVx1MDAzZWxvY2spO1xuMTg2NjpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xuMTg2NzpcdFx0bXV0ZXhfaW5pdChcdTAwMjZ0YmwtXHUwMDNlcGhhc2hfbG9jayk7XG4xODY4Olx0XG4xODY5Olx0XHRJTklUX0RFRkVSUkFCTEVfV09SSyhcdTAwMjZ0YmwtXHUwMDNlZ2Nfd29yaywgbmVpZ2hfcGVyaW9kaWNfd29yayk7XG4xODcwOlx0XHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSwgXHUwMDI2dGJsLVx1MDAzZWdjX3dvcmssXG4xODcxOlx0XHRcdFx0dGJsLVx1MDAzZXBhcm1zLnJlYWNoYWJsZV90aW1lKTtcbjE4NzI6XHRcdElOSVRfREVGRVJSQUJMRV9XT1JLKFx1MDAyNnRibC1cdTAwM2VtYW5hZ2VkX3dvcmssIG5laWdoX21hbmFnZWRfd29yayk7XG4xODczOlx0XHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSwgXHUwMDI2dGJsLVx1MDAzZW1hbmFnZWRfd29yaywgMCk7XG4xODc0Olx0XG4xODc1Olx0XHR0aW1lcl9zZXR1cChcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXIsIG5laWdoX3Byb3h5X3Byb2Nlc3MsIDApO1xuMTg3NjpcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdF9jbGFzcyhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUsXG4xODc3Olx0XHRcdFx0XHUwMDI2bmVpZ2hfdGFibGVfcHJveHlfcXVldWVfY2xhc3MpO1xuMTg3ODpcdFxuMTg3OTpcdFx0dGJsLVx1MDAzZWxhc3RfZmx1c2ggPSBub3c7XG4xODgwOlx0XHR0YmwtXHUwMDNlbGFzdF9yYW5kXHQ9IG5vdyAmIzQzOyB0YmwtXHUwMDNlcGFybXMucmVhY2hhYmxlX3RpbWUgKiAyMDtcbjE4ODE6XHRcbjE4ODI6XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihuZWlnaF90YWJsZXNbaW5kZXhdLCB0YmwpO1xuMTg4MzpcdH1cbjE4ODQ6XHRcbjE4ODU6XHQvKlxuMTg4NjpcdCAqIE9ubHkgY2FsbGVkIGZyb20gbmRpc2NfY2xlYW51cCgpLCB3aGljaCBtZWFucyB0aGlzIGlzIGRlYWQgY29kZVxuMTg4NzpcdCAqIGJlY2F1c2Ugd2Ugbm8gbG9uZ2VyIGNhbiB1bmxvYWQgSVB2NiBtb2R1bGUuXG4xODg4Olx0ICovXG4xODg5Olx0aW50IG5laWdoX3RhYmxlX2NsZWFyKGludCBpbmRleCwgc3RydWN0IG5laWdoX3RhYmxlICp0YmwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMDUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9uIGluIHRoZSBOZWlnaGJvciBTdWJzeXN0ZW0qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIG5hc3R5IGNvbmN1cnJlbmN5IGJ1Zywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgbmVpZ2hib3Igc3Vic3lzdGVtJiMzOTtzIGhhbmRsaW5nIG9mIHByb3h5IHRpbWVycyB3aGVuIGEgbmV0d29yayBpbnRlcmZhY2UgZ29lcyBkb3duLiBUaGUgY29yZSBpc3N1ZSwgZnJvbSB3aGF0IEkmIzM5O20gZ2F0aGVyaW5nLCByZXZvbHZlcyBhcm91bmQgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGBfX25laWdoX2lmZG93bmAgYW5kIGBwbmVpZ2hfZW5xdWV1ZWAuIEl0JiMzOTtzIGEgY2xhc3NpYyBzaXR1YXRpb246IGB0aW1lcl9kZWxldGVfc3luYygmYW1wO3RibC0mZ3Q7cHJveHlfdGltZXIpYCBpbiBgX19uZWlnaF9pZmRvd25gIGNhbiBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSB3aXRoIGBwbmVpZ2hfZW5xdWV1ZWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYG1vZF90aW1lcigmYW1wO3RibC0mZ3Q7cHJveHlfdGltZXIsIHNjaGVkX25leHQpYC4gVGhlIGNvbW1lbnQgaGlnaGxpZ2h0cyB0aGlzOiBgLyogVGhlIGNhbGxiYWNrIGRvZXMgbm90IHRha2UgdGhpcyBsb2NrLCBzbyBzeW5jIGRlbGV0aW9uIGNhbiB3YWl0IGZvciBpdC4gKi9gLgoKU28sIHRoZSBwcm9ibGVtYXRpYyBzZXF1ZW5jZSBpcyB0aGF0IGlmIGB0aW1lcl9kZWxldGVfc3luY2AgcnVucyB3aGlsZSBgcG5laWdoX2VucXVldWVgIGlzIGFjdGl2ZWx5IG1vZGlmeWluZyB0aGUgdGltZXIsIGBwbmVpZ2hfZW5xdWV1ZWAgbWlnaHQgcG90ZW50aWFsbHkgcmUtYXJtIHRoZSB0aW1lciAqYWZ0ZXIqIG9yIGV2ZW4gKmR1cmluZyogdGhlIHRlYXJkb3duIHByb2Nlc3MgaW5pdGlhdGVkIGJ5IGBfX25laWdoX2lmZG93bmAuIFRoaXMgY3JlYXRlcyB0aGUgcG90ZW50aWFsIGZvciBhIHVzZS1hZnRlci1mcmVlIG9yIGEgcmFjZSBjb25kaXRpb24sIGxlYWRpbmcgdG8gaW5zdGFiaWxpdHkgd2hlbiB0aGUgZGV2aWNlIGlzIHRha2VuIGRvd24uCgpMZXQmIzM5O3MgZGlzc2VjdCB0aGUgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQgaW4gdGhlIHR3byBmdW5jdGlvbnMuIEluIGBfX25laWdoX2lmZG93bmAsIHdlIGhhdmUgYHNwaW5fbG9ja19iaCgmYW1wO3RibC0mZ3Q7cHJveHlfdGltZXJfbG9jayk7YCBmb2xsb3dlZCBieSBgdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyKTtgIGFuZCBmaW5hbGx5LCBgc3Bpbl91bmxvY2tfYmgoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyX2xvY2spO2AuIFRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdGVjdCB0aGUgdGltZXIgZnJvbSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBkdXJpbmcgZGVsZXRpb24uIFRoZW4sIGluIGBwbmVpZ2hfZW5xdWV1ZWAgd2Ugc2VlIGBzcGluX2xvY2tfYmgoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyX2xvY2spO2AgZm9sbG93ZWQgYnkgYG1vZF90aW1lcigmYW1wO3RibC0mZ3Q7cHJveHlfdGltZXIsIHNjaGVkX25leHQpO2AgYW5kLCBhZnRlciBzb21lIG90aGVyIG9wZXJhdGlvbnMsICBgc3Bpbl91bmxvY2tfYmgoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyX2xvY2spO2AuIEludGVyZXN0aW5nbHksIHRoZSBgcHJveHlfdGltZXJfbG9ja2Agc3BpbmxvY2sgaXMgaW5pdGlhbGl6ZWQgd2l0aGluIGBuZWlnaF90YWJsZV9pbml0KClgLCBhcyBgc3Bpbl9sb2NrX2luaXQoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyX2xvY2spO2AuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHZlY3RvcnMuIEkmIzM5O2xsIG1lbnRhbGx5IHJ1biB0aHJvdWdoIG15IHVzdWFsIGNoZWNrczoKCjEuICAqKlVzZXItU3BhY2UgRXhwb3N1cmU6KiogRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZyBjb3VsZCBiZSBhIHByb2JsZW0/IE5vcGUsIG5vdGhpbmcgaXMgZ29pbmcgdG8gdXNlciBzcGFjZS4KMi4gICoqQ29uZGl0aW9uYWwgTG9naWM6KiogQXJlIHRoZXJlIGFueSBuZXcgY29uZGl0aW9uYWwgYnJhbmNoZXMgb3IgbG9naWMgaW50cm9kdWNlZCB0aGF0IGRlcGVuZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzPyBOby4KMy4gICoqRGF0YSBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb246KiogSXMgdGhlcmUgYW55IGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlciBvbiByZWFjaGFibGUgY29kZSBwYXRocz8gSXQgZG9lc24mIzM5O3QgYXBwZWFyIHNvOyBhIG5ldyBgcHJveHlfdGltZXJfbG9ja2Agc3BpbmxvY2sgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGBuZWlnaF90YWJsZWAgc3RydWN0dXJlLiBUaGF0JiMzOTtzIGEgbmV3IGZpZWxkLiBUaGlzIGxvY2sgaXMgaW5pdGlhbGl6ZWQgaW4gYG5laWdoX3RhYmxlX2luaXQoKWAuIFRoZSBgbmVpZ2hfdGFibGVgIHN0cnVjdHVyZSBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIHN0cnVjdHVyZS4KCk9rYXksIHNvIHRoZSBwb3RlbnRpYWwgYnVnIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gYG5laWdoX3RhYmxlYCBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB3aGVyZSBgbmVpZ2hfdGFibGVfaW5pdGAgaXMgY2FsbGVkIG9yIHdoZXJlIGBuZWlnaF90YWJsZWAgaXMgYWxsb2NhdGVkLiBMZXQgbWUgZmluZCB3aGVyZSBgbmVpZ2hfdGFibGVgIGlzIGFsbG9jYXRlZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVpZ2hfdGFibGVfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZWlnaGJvdXIuaD0zMzM9c3RhdGljIGlubGluZSB2b2lkIG5laWdoX2NvbmZpcm0oc3RydWN0IG5laWdoYm91ciAqbilcbi0tXG5pbmNsdWRlL25ldC9uZWlnaGJvdXIuaC0zNDMtXG5pbmNsdWRlL25ldC9uZWlnaGJvdXIuaDozNDQ6dm9pZCBuZWlnaF90YWJsZV9pbml0KGludCBpbmRleCwgc3RydWN0IG5laWdoX3RhYmxlICp0YmwpO1xuaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgtMzQ1LWludCBuZWlnaF90YWJsZV9jbGVhcihpbnQgaW5kZXgsIHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsKTtcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0xODI0PXN0YXRpYyBzdHJ1Y3QgbmVpZ2hfdGFibGUgX19yY3UgKm5laWdoX3RhYmxlc1tORUlHSF9OUl9UQUJMRVNdIF9fcmVhZF9tb3N0bHk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xODI1LVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTgyNjp2b2lkIG5laWdoX3RhYmxlX2luaXQoaW50IGluZGV4LCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibClcbm5ldC9jb3JlL25laWdoYm91ci5jLTE4Mjcte1xuLS1cbm5ldC9pcHY0L2FycC5jPTE1MTQ9dm9pZCBfX2luaXQgYXJwX2luaXQodm9pZClcbm5ldC9pcHY0L2FycC5jLTE1MTUte1xubmV0L2lwdjQvYXJwLmM6MTUxNjpcdG5laWdoX3RhYmxlX2luaXQoTkVJR0hfQVJQX1RBQkxFLCBcdTAwMjZhcnBfdGJsKTtcbm5ldC9pcHY0L2FycC5jLTE1MTctXG4tLVxubmV0L2lwdjYvbmRpc2MuYz0yMDA1PWludCBfX2luaXQgbmRpc2NfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMjAxNC1cdCAqL1xubmV0L2lwdjYvbmRpc2MuYzoyMDE1Olx0bmVpZ2hfdGFibGVfaW5pdChORUlHSF9ORF9UQUJMRSwgXHUwMDI2bmRfdGJsKTtcbm5ldC9pcHY2L25kaXNjLmMtMjAxNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgzNQoJCQkJCQkJb3V0cHV0OiAyMTYKCQkJCQkJCXRob3VnaHRzOiA3MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gS01TQU4gTmVlZGVkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBwcmltYXJpbHkgZGVhbHMgd2l0aCBzeW5jaHJvbml6YXRpb24gYXJvdW5kIHRoZSBwcm94eSB0aW1lciB3aXRoaW4gdGhlIG5ldHdvcmsgbmVpZ2hib3IgdGFibGUuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIGEgc3BpbmxvY2sgKGBwcm94eV90aW1lcl9sb2NrYCkgdG8gdGhlIGBuZWlnaF90YWJsZWAgc3RydWN0dXJlIGFuZCBpbml0aWFsaXppbmcgaXQuIFRoaXMgbG9jayBzZWVtcyB0byBhZGRyZXNzIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiB0aGUgYG1vZF90aW1lcmAgY2FsbCBpbiBgcG5laWdoX2VucXVldWVgIGFuZCB0aGUgYHRpbWVyX2RlbGV0ZV9zeW5jYCBjYWxsIGluIGBfX25laWdoX2lmZG93bmAuCgpNeSBhbmFseXNpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSBhcmUgcmVsYXRlZCB0byBkZWFkbG9ja3MsIGxvY2tpbmcgaXNzdWVzICh3aGljaCBMT0NLREVQIHdvdWxkIGNhdGNoKSwgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zIG9yIHJhY2UgY29uZGl0aW9ucyAod2hpY2ggS0FTQU4gd291bGQgZGV0ZWN0KS4gVGhlIGNvZGUgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQWxsIG9mIHRoZSBrZXkgc3RydWN0dXJlcyBhcmUgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQuIFRoZSBuZXcgc3BpbmxvY2sgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdXNpbmcgYHNwaW5fbG9ja19pbml0YC4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGNyZWF0ZSBhbnkgb3Bwb3J0dW5pdGllcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgcmVhZCBvciBleHBvc2VkLgoKVGhlcmVmb3JlLCBzaW5jZSBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgZnVsbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhlIHJpc2tzIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoLCB0aGVyZSYjMzk7cyBubyBuZWVkIGZvciBLTVNBTi4gSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgYmVjYXVzZSB0aGUgcGF0Y2gmIzM5O3MgcHJpbWFyeSBpbXBhY3QgcmV2b2x2ZXMgYXJvdW5kIHN5bmNocm9uaXphdGlvbiBhbmQgdGltZXIgbWFuYWdlbWVudCwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gV2UmIzM5O3JlIGdvb2QgdG8gZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBkZWRpY2F0ZWQgc3BpbmxvY2sgKGBwcm94eV90aW1lcl9sb2NrYCkgdG8gYHN0cnVjdCBuZWlnaF90YWJsZWAgYW5kIHVzZXMgaXQgdG8gc2VyaWFsaXplIHJlYXJtaW5nIG9mIGB0YmwtXHUwMDNlcHJveHlfdGltZXJgIHZpYSBgbW9kX3RpbWVyKClgIGluIGBwbmVpZ2hfZW5xdWV1ZSgpYCB3aXRoIHF1ZXVlIHB1cmdpbmcgYW5kIHN5bmNocm9ub3VzIHRpbWVyIGRlbGV0aW9uIGluIGBfX25laWdoX2lmZG93bigpYC4gVGhlIG5ldyBsb2NrIGlzIGluaXRpYWxpemVkIHdpdGggYHNwaW5fbG9ja19pbml0KClgIGluIGBuZWlnaF90YWJsZV9pbml0KClgLlxuXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IHBlcnRhaW4gdG8gY29uY3VycmVuY3kgY29udHJvbCBhbmQgdGltZXIgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2jigJRzdWNoIGFzIGxvY2tpbmcgb3JkZXIgaW52ZXJzaW9ucywgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25z4oCUYXJlIGhhbmRsZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5IGlzIGFsbG9jYXRlZCwgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGFyZSByZWFkIG9yIGJyYW5jaGVkIHVwb24sIGFuZCBubyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgZGVkaWNhdGVkIHNwaW5sb2NrIChgcHJveHlfdGltZXJfbG9ja2ApIHRvIGBzdHJ1Y3QgbmVpZ2hfdGFibGVgIGFuZCB1c2VzIGl0IHRvIHNlcmlhbGl6ZSByZWFybWluZyBvZiBgdGJsLVx1MDAzZXByb3h5X3RpbWVyYCB2aWEgYG1vZF90aW1lcigpYCBpbiBgcG5laWdoX2VucXVldWUoKWAgd2l0aCBxdWV1ZSBwdXJnaW5nIGFuZCBzeW5jaHJvbm91cyB0aW1lciBkZWxldGlvbiBpbiBgX19uZWlnaF9pZmRvd24oKWAuIFRoZSBuZXcgbG9jayBpcyBpbml0aWFsaXplZCB3aXRoIGBzcGluX2xvY2tfaW5pdCgpYCBpbiBgbmVpZ2hfdGFibGVfaW5pdCgpYC5cblxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBwZXJ0YWluIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgYW5kIHRpbWVyIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNo4oCUc3VjaCBhcyBsb2NraW5nIG9yZGVyIGludmVyc2lvbnMsIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9uc+KAlGFyZSBoYW5kbGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBObyBuZXcgdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgcmVhZCBvciBicmFuY2hlZCB1cG9uLCBhbmQgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMToyNi45MDE1NDIxOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NTIyMjkyODE5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwbmVpZ2hfZW5xdWV1ZVwiLFxuICAgIFwiX19uZWlnaF9pZmRvd25cIixcbiAgICBcIm5laWdoX2lmZG93blwiLFxuICAgIFwibmVpZ2hfY2Fycmllcl9kb3duXCIsXG4gICAgXCJuZWlnaF9wcm94eV9wcm9jZXNzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZGVkaWNhdGVkIHNwaW5sb2NrIChgcHJveHlfdGltZXJfbG9ja2ApIHRvIGBzdHJ1Y3QgbmVpZ2hfdGFibGVgIGFuZCB1c2VzIGl0IHRvIHNlcmlhbGl6ZSByZWFybWluZyBvZiBgdGJsLVxcdTAwM2Vwcm94eV90aW1lcmAgdmlhIGBtb2RfdGltZXIoKWAgaW4gYHBuZWlnaF9lbnF1ZXVlKClgIHdpdGggcXVldWUgcHVyZ2luZyBhbmQgc3luY2hyb25vdXMgdGltZXIgZGVsZXRpb24gaW4gYF9fbmVpZ2hfaWZkb3duKClgLiBUaGUgbmV3IGxvY2sgaXMgaW5pdGlhbGl6ZWQgd2l0aCBgc3Bpbl9sb2NrX2luaXQoKWAgaW4gYG5laWdoX3RhYmxlX2luaXQoKWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBwZXJ0YWluIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgYW5kIHRpbWVyIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNo4oCUc3VjaCBhcyBsb2NraW5nIG9yZGVyIGludmVyc2lvbnMsIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9uc+KAlGFyZSBoYW5kbGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBObyBuZXcgdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgcmVhZCBvciBicmFuY2hlZCB1cG9uLCBhbmQgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBpbiB0aGUgY29yZSBuZXR3b3JraW5nIG5laWdoYm91ciBzdWJzeXN0ZW0gKG5ldC9jb3JlL25laWdoYm91ci5jIGFuZCBpbmNsdWRlL25ldC9uZWlnaGJvdXIuaCkuIEl0IGludHJvZHVjZXMgYSBuZXcgc3BpbmxvY2ssIHByb3h5X3RpbWVyX2xvY2ssIHRvIHNlcmlhbGl6ZSBwcm94eSB0aW1lciByZWFybWluZyBpbiBwbmVpZ2hfZW5xdWV1ZSB3aXRoIHF1ZXVlIHB1cmdpbmcgYW5kIHRpbWVyX2RlbGV0ZV9zeW5jIGluIF9fbmVpZ2hfaWZkb3duLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzdGFuZGFyZCBuZXRsaW5rL3N5c2ZzIGRldmljZSBzdGF0ZSBtYW5pcHVsYXRpb24gKGUuZy4sIGJyaW5naW5nIGludGVyZmFjZXMgZG93bikgYW5kIHByb3h5IEFSUC9ORCBwYWNrZXQgaGFuZGxpbmcuIEZ1enppbmcgd2l0aCBzeXprYWxsZXIgKGFuZCBsb2NrZGVwKSBpcyB3YXJyYW50ZWQgdG8gZGV0ZWN0IHBvdGVudGlhbCBsb2NrIGludmVyc2lvbnMsIGRlYWRsb2NrcywgYW5kIHRpbWVyIHN5bmNocm9uaXphdGlvbiByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDE6MjYuOTAxNTQ4MzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzcxOTUyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiODZjNTRkMWU3MWY1MjJlZTNjNDk5NDA2Y2ViNWI1MzkyODNkNTc3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDE0IDA5OjAxOjI0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25laWdoYm91ci5oIGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmhcXG5pbmRleCA4ODYwY2MyMTc1ZmMxLi4xNTEwN2MwMGI0ZGY0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L25laWdoYm91ci5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmhcXG5AQCAtMjM5LDYgKzIzOSw4IEBAIHN0cnVjdCBuZWlnaF90YWJsZSB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRnY19saXN0O1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0bWFuYWdlZF9saXN0O1xcbiBcXHRzcGlubG9ja190XFx0XFx0bG9jaztcXG4rXFx0LyogU2VyaWFsaXplcyBwcm94eSB0aW1lciByZWFybWluZyB3aXRoIHRlYXJkb3duLiAqL1xcbitcXHRzcGlubG9ja190XFx0XFx0cHJveHlfdGltZXJfbG9jaztcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdGxhc3RfcmFuZDtcXG4gXFx0c3RydWN0IG5laWdoX3N0YXRpc3RpY3NcXHRfX3BlcmNwdSAqc3RhdHM7XFxuIFxcdHN0cnVjdCBuZWlnaF9oYXNoX3RhYmxlIF9fcmN1ICpuaHQ7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25laWdoYm91ci5jIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmNcXG5pbmRleCAxMzQ5YzBlZWRiNjQyLi4xZWE3OTRhNTQxZWZiIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jXFxuKysrIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmNcXG5AQCAtNDcxLDEwICs0NzEsMTMgQEAgc3RhdGljIGludCBfX25laWdoX2lmZG93bihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRibC1cXHUwMDNlbG9jayk7XFxuIFxcbiBcXHRwbmVpZ2hfaWZkb3duKHRibCwgZGV2LCBza2lwX3Blcm0pO1xcbitcXHQvKiBUaGUgY2FsbGJhY2sgZG9lcyBub3QgdGFrZSB0aGlzIGxvY2ssIHNvIHN5bmMgZGVsZXRpb24gY2FuIHdhaXQgZm9yIGl0LiAqL1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XFxuIFxcdHBuZWlnaF9xdWV1ZV9wdXJnZShcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV9xdWV1ZSwgZGV2ID8gZGV2X25ldChkZXYpIDogTlVMTCxcXG4gXFx0XFx0XFx0ICAgdGJsLVxcdTAwM2VmYW1pbHkpO1xcbiBcXHRpZiAoc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFxcdTAwMjZ0YmwtXFx1MDAzZXByb3h5X3F1ZXVlKSlcXG4gXFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXIpO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTE3MjksNiArMTczMiw3IEBAIHZvaWQgcG5laWdoX2VucXVldWUoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZWlnaF9wYXJtcyAqcCxcXG4gXFx0TkVJR0hfQ0Ioc2tiKS1cXHUwMDNlc2NoZWRfbmV4dCA9IHNjaGVkX25leHQ7XFxuIFxcdE5FSUdIX0NCKHNrYiktXFx1MDAzZWZsYWdzIHw9IExPQ0FMTFlfRU5RVUVVRUQ7XFxuIFxcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XFxuIFxcdHNwaW5fbG9jayhcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV9xdWV1ZS5sb2NrKTtcXG4gXFx0aWYgKHRpbWVyX2RlbGV0ZShcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcikpIHtcXG4gXFx0XFx0aWYgKHRpbWVfYmVmb3JlKHRibC1cXHUwMDNlcHJveHlfdGltZXIuZXhwaXJlcywgc2NoZWRfbmV4dCkpXFxuQEAgLTE3NDAsNiArMTc0NCw3IEBAIHZvaWQgcG5laWdoX2VucXVldWUoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZWlnaF9wYXJtcyAqcCxcXG4gXFx0cC1cXHUwMDNlcWxlbisrO1xcbiBcXHRtb2RfdGltZXIoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXIsIHNjaGVkX25leHQpO1xcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV9xdWV1ZS5sb2NrKTtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChwbmVpZ2hfZW5xdWV1ZSk7XFxuIFxcbkBAIC0xODU4LDYgKzE4NjMsNyBAQCB2b2lkIG5laWdoX3RhYmxlX2luaXQoaW50IGluZGV4LCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibClcXG4gXFx0XFx0V0FSTl9PTih0YmwtXFx1MDAzZWVudHJ5X3NpemUgJSBORUlHSF9QUklWX0FMSUdOKTtcXG4gXFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ0YmwtXFx1MDAzZWxvY2spO1xcbitcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2dGJsLVxcdTAwM2VwaGFzaF9sb2NrKTtcXG4gXFxuIFxcdElOSVRfREVGRVJSQUJMRV9XT1JLKFxcdTAwMjZ0YmwtXFx1MDAzZWdjX3dvcmssIG5laWdoX3BlcmlvZGljX3dvcmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMToyOC41MzkzNjUyNzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIxNTkyMzI5OTc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwbmVpZ2hfZW5xdWV1ZVwiLFxuICAgIFwiX19uZWlnaF9pZmRvd25cIixcbiAgICBcIm5laWdoX2lmZG93blwiLFxuICAgIFwibmVpZ2hfY2Fycmllcl9kb3duXCIsXG4gICAgXCJuZWlnaF9wcm94eV9wcm9jZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgbmVpZ2hib3VyIHN1YnN5c3RlbSAobmV0L2NvcmUvbmVpZ2hib3VyLmMgYW5kIGluY2x1ZGUvbmV0L25laWdoYm91ci5oKS4gSXQgaW50cm9kdWNlcyBhIG5ldyBzcGlubG9jaywgcHJveHlfdGltZXJfbG9jaywgdG8gc2VyaWFsaXplIHByb3h5IHRpbWVyIHJlYXJtaW5nIGluIHBuZWlnaF9lbnF1ZXVlIHdpdGggcXVldWUgcHVyZ2luZyBhbmQgdGltZXJfZGVsZXRlX3N5bmMgaW4gX19uZWlnaF9pZmRvd24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHN0YW5kYXJkIG5ldGxpbmsvc3lzZnMgZGV2aWNlIHN0YXRlIG1hbmlwdWxhdGlvbiAoZS5nLiwgYnJpbmdpbmcgaW50ZXJmYWNlcyBkb3duKSBhbmQgcHJveHkgQVJQL05EIHBhY2tldCBoYW5kbGluZy4gRnV6emluZyB3aXRoIHN5emthbGxlciAoYW5kIGxvY2tkZXApIGlzIHdhcnJhbnRlZCB0byBkZXRlY3QgcG90ZW50aWFsIGxvY2sgaW52ZXJzaW9ucywgZGVhZGxvY2tzLCBhbmQgdGltZXIgc3luY2hyb25pemF0aW9uIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI4NmM1NGQxZTcxZjUyMmVlM2M0OTk0MDZjZWI1YjUzOTI4M2Q1NzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAwOTowMToyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25laWdoYm91ci5oIGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmhcbmluZGV4IDg4NjBjYzIxNzVmYzEuLjE1MTA3YzAwYjRkZjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaFxuKysrIGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmhcbkBAIC0yMzksNiArMjM5LDggQEAgc3RydWN0IG5laWdoX3RhYmxlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGdjX2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRtYW5hZ2VkX2xpc3Q7XG4gXHRzcGlubG9ja190XHRcdGxvY2s7XG4rXHQvKiBTZXJpYWxpemVzIHByb3h5IHRpbWVyIHJlYXJtaW5nIHdpdGggdGVhcmRvd24uICovXG4rXHRzcGlubG9ja190XHRcdHByb3h5X3RpbWVyX2xvY2s7XG4gXHR1bnNpZ25lZCBsb25nXHRcdGxhc3RfcmFuZDtcbiBcdHN0cnVjdCBuZWlnaF9zdGF0aXN0aWNzXHRfX3BlcmNwdSAqc3RhdHM7XG4gXHRzdHJ1Y3QgbmVpZ2hfaGFzaF90YWJsZSBfX3JjdSAqbmh0O1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25laWdoYm91ci5jIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmNcbmluZGV4IDEzNDljMGVlZGI2NDIuLjFlYTc5NGE1NDFlZmIgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9uZWlnaGJvdXIuY1xuKysrIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmNcbkBAIC00NzEsMTAgKzQ3MSwxMyBAQCBzdGF0aWMgaW50IF9fbmVpZ2hfaWZkb3duKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZWxvY2spO1xuIFxuIFx0cG5laWdoX2lmZG93bih0YmwsIGRldiwgc2tpcF9wZXJtKTtcbitcdC8qIFRoZSBjYWxsYmFjayBkb2VzIG5vdCB0YWtlIHRoaXMgbG9jaywgc28gc3luYyBkZWxldGlvbiBjYW4gd2FpdCBmb3IgaXQuICovXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xuIFx0cG5laWdoX3F1ZXVlX3B1cmdlKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZSwgZGV2ID8gZGV2X25ldChkZXYpIDogTlVMTCxcbiBcdFx0XHQgICB0YmwtXHUwMDNlZmFtaWx5KTtcbiBcdGlmIChza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3F1ZXVlKSlcbiBcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyKTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xNzI5LDYgKzE3MzIsNyBAQCB2b2lkIHBuZWlnaF9lbnF1ZXVlKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmVpZ2hfcGFybXMgKnAsXG4gXHRORUlHSF9DQihza2IpLVx1MDAzZXNjaGVkX25leHQgPSBzY2hlZF9uZXh0O1xuIFx0TkVJR0hfQ0Ioc2tiKS1cdTAwM2VmbGFncyB8PSBMT0NBTExZX0VOUVVFVUVEO1xuIFxuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcbiBcdHNwaW5fbG9jayhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUubG9jayk7XG4gXHRpZiAodGltZXJfZGVsZXRlKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcikpIHtcbiBcdFx0aWYgKHRpbWVfYmVmb3JlKHRibC1cdTAwM2Vwcm94eV90aW1lci5leHBpcmVzLCBzY2hlZF9uZXh0KSlcbkBAIC0xNzQwLDYgKzE3NDQsNyBAQCB2b2lkIHBuZWlnaF9lbnF1ZXVlKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmVpZ2hfcGFybXMgKnAsXG4gXHRwLVx1MDAzZXFsZW4rKztcbiBcdG1vZF90aW1lcihcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXIsIHNjaGVkX25leHQpO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2dGJsLVx1MDAzZXByb3h5X3F1ZXVlLmxvY2spO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHBuZWlnaF9lbnF1ZXVlKTtcbiBcbkBAIC0xODU4LDYgKzE4NjMsNyBAQCB2b2lkIG5laWdoX3RhYmxlX2luaXQoaW50IGluZGV4LCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibClcbiBcdFx0V0FSTl9PTih0YmwtXHUwMDNlZW50cnlfc2l6ZSAlIE5FSUdIX1BSSVZfQUxJR04pO1xuIFxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dGJsLVx1MDAzZWxvY2spO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZ0YmwtXHUwMDNlcGhhc2hfbG9jayk7XG4gXG4gXHRJTklUX0RFRkVSUkFCTEVfV09SSyhcdTAwMjZ0YmwtXHUwMDNlZ2Nfd29yaywgbmVpZ2hfcGVyaW9kaWNfd29yayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMToyOC41MzkzNjc2MDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODI0ODU2Mjc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5laWdoYm91ciBTdWJzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBuZWlnaGJvdXIgc3Vic3lzdGVtLiBJdCdzIG1vZGlmeWluZyBgaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmhgIGFuZCBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBteSBhdHRlbnRpb24uIExldCdzIGRpZyBpbi5cblxuTG9va2luZyBhdCB0aGUgYGRpZmZgLCBhIG5ldyBzcGlubG9jaywgYHByb3h5X3RpbWVyX2xvY2tgLCBpcyBpbnRyb2R1Y2VkIHdpdGhpbiB0aGUgYG5laWdoX3RhYmxlYCBzdHJ1Y3R1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHByb3RlY3RpbmcgYWNjZXNzIHRvIHRoZSBwcm94eSB0aW1lciwgcGFydGljdWxhcmx5IGR1cmluZyBvcGVyYXRpb25zIHRoYXQgbWlnaHQgcmFjZSB3aXRoIHRpbWVyIGV4cGlyeSBvciBkZWxldGlvbi4gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgaXQncyBmb3IgXCJTZXJpYWxpemVzIHByb3h5IHRpbWVyIHJlYXJtaW5nIHdpdGggdGVhcmRvd24sXCIgd2hpY2ggaXMgYSBnb29kIGNsdWUuXG5cblRoZSBgX19uZWlnaF9pZmRvd25gIGZ1bmN0aW9uIGluIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AsIGFyb3VuZCBsaW5lIDQ3MSwgbm93IGluY2x1ZGVzIGEgbG9jayBhbmQgdW5sb2NrIHBhaXIgYXJvdW5kIGB0YmwtXHUwMDNlcHJveHlfdGltZXJfbG9ja2AgYmVmb3JlIGFuZCBhZnRlciBjYWxsaW5nIGBwbmVpZ2hfcXVldWVfcHVyZ2VgIGFuZCBgdGltZXJfZGVsZXRlX3N5bmNgLiBUaGlzIGlzIGNsZWFybHkgYWltZWQgYXQgZW5zdXJpbmcgdGhhdCB0aGUgcHJveHkgdGltZXIgaXNuJ3QgZGVsZXRlZCB3aGlsZSBhIGNhbGxiYWNrIGlzIHBlbmRpbmcgaW4gYHBuZWlnaF9pZmRvd25gLiBBIGdvb2QgZXhhbXBsZSBvZiByYWNlIGNvbmRpdGlvbiBwcm90ZWN0aW9uLlxuXG5UaGVuLCB0aGVyZSdzIGBwbmVpZ2hfZW5xdWV1ZWAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNzI5LiBIZXJlLCBhIGxvY2sgb24gYHRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrYCBoYXMgYmVlbiBhZGRlZCBhcm91bmQgdGhlIG9wZXJhdGlvbnMgb24gYHRibC1cdTAwM2Vwcm94eV9xdWV1ZWAgYW5kIHRoZSBwcm94eSB0aW1lciBpdHNlbGYuIFRoaXMgYWRkaXRpb24sIEkgc3VzcGVjdCwgc3luY2hyb25pemVzIHRoZSBxdWV1ZSBtYW5hZ2VtZW50IGFuZCB0aW1lciBtb2RpZmljYXRpb24gb3BlcmF0aW9ucyB3aXRoIGFueSB0ZWFyZG93biBhY3Rpdml0aWVzIGhhcHBlbmluZyBpbiBgX19uZWlnaF9pZmRvd25gLiBUaGUgY29tbWVudHMgaW4gdGhlIGNvZGUgYW5kIHRoZSBsb2NrIHBsYWNlbWVudCBhcmUgY29uc2lzdGVudC5cblxuRnVydGhlcm1vcmUsIGEgc3BpbmxvY2sgaXMgYWxzbyBpbml0aWFsaXplZCBpbiBgbmVpZ2hfdGFibGVfaW5pdGAsIHNvIHRoZSBwYXRjaCBpcyBhZGRpbmcgdGhpcyBsb2NraW5nIGZ1bmN0aW9uYWxpdHkgd2hlbiB0aGUgdGFibGUgaXMgaW5pdGlhbGl6ZWQsIHdoaWNoIGlzIGV4cGVjdGVkLlxuXG5NeSBleHBlcnQgaW50dWl0aW9uIHN1Z2dlc3RzIHRoYXQgdGhlIHBhdGNoIGFpbXMgdG8gc29sdmUgYSBzdWJ0bGUgcmFjZSBjb25kaXRpb24uIEl0IHNlZW1zIHdlJ3JlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IGFjY2VzcyB0byBhIHByb3h5IHRpbWVyIGFuZCB0aGUgYXNzb2NpYXRlZCBxdWV1ZSwgc3BlY2lmaWNhbGx5IHdoZW4gYW4gaW50ZXJmYWNlIGdvZXMgZG93bi4gVGhlIG5ldyBzcGlubG9jaywgYHByb3h5X3RpbWVyX2xvY2tgLCBpcyB0aGUga2V5IHRvIHN5bmNocm9uaXppbmcgdGhlc2Ugb3BlcmF0aW9ucywgcHJldmVudGluZyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyByZWxhdGVkIHRvIHRoZSB0aW1lciBhbmQgcXVldWUuIFRoaXMgaXMgYSBzb2xpZCBhcHByb2FjaC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gYnkgbG9va2luZyBhdCB0aGUgY2FsbHMgdG8gdGhvc2UgZnVuY3Rpb25zIGluIGNvbnRleHQgdG8gc2VlIGhvdyBpdCB3b3JrcyBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMTo1Ni43ODc5MzQxNTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDc5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmVpZ2hib3VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDYwOlxcdFxcbiA0NjE6XFx0c3RhdGljIGludCBfX25laWdoX2lmZG93bihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gNDYyOlxcdFxcdFxcdFxcdCAgYm9vbCBza2lwX3Blcm0pXFxuIDQ2MzpcXHR7XFxuIDQ2NDpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRibC1cXHUwMDNlbG9jayk7XFxuIDQ2NTpcXHRcXHRpZiAobGlrZWx5KGRldikpIHtcXG4gNDY2OlxcdFxcdFxcdG5laWdoX2ZsdXNoX2Rldih0YmwsIGRldiwgc2tpcF9wZXJtKTtcXG4gNDY3OlxcdFxcdH0gZWxzZSB7XFxuIDQ2ODpcXHRcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNraXBfcGVybSk7XFxuIDQ2OTpcXHRcXHRcXHRuZWlnaF9mbHVzaF90YWJsZSh0YmwpO1xcbiA0NzA6XFx0XFx0fVxcbiA0NzE6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRibC1cXHUwMDNlbG9jayk7XFxuIDQ3MjpcXHRcXG4gNDczOlxcdFxcdHBuZWlnaF9pZmRvd24odGJsLCBkZXYsIHNraXBfcGVybSk7XFxuIDQ3NDpcXHRcXHQvKiBUaGUgY2FsbGJhY2sgZG9lcyBub3QgdGFrZSB0aGlzIGxvY2ssIHNvIHN5bmMgZGVsZXRpb24gY2FuIHdhaXQgZm9yIGl0LiAqL1xcbiA0NzU6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0YmwtXFx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xcbiA0NzY6XFx0XFx0cG5laWdoX3F1ZXVlX3B1cmdlKFxcdTAwMjZ0YmwtXFx1MDAzZXByb3h5X3F1ZXVlLCBkZXYgPyBkZXZfbmV0KGRldikgOiBOVUxMLFxcbiA0Nzc6XFx0XFx0XFx0XFx0ICAgdGJsLVxcdTAwM2VmYW1pbHkpO1xcbiA0Nzg6XFx0XFx0aWYgKHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV9xdWV1ZSkpXFxuIDQ3OTpcXHRcXHRcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcik7XFxuIDQ4MDpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcXG4gNDgxOlxcdFxcdHJldHVybiAwO1xcbiA0ODI6XFx0fVxcbiA0ODM6XFx0XFxuIDQ4NDpcXHRpbnQgbmVpZ2hfY2Fycmllcl9kb3duKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiA0ODU6XFx0e1xcbiA0ODY6XFx0XFx0X19uZWlnaF9pZmRvd24odGJsLCBkZXYsIHRydWUpO1xcbiA0ODc6XFx0XFx0cmV0dXJuIDA7XFxuIDQ4ODpcXHR9XFxuIDQ4OTpcXHRcXG4gNDkwOlxcdGludCBuZWlnaF9pZmRvd24oc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIDQ5MTpcXHR7XFxuIDQ5MjpcXHRcXHRfX25laWdoX2lmZG93bih0YmwsIGRldiwgZmFsc2UpO1xcbiA0OTM6XFx0XFx0cmV0dXJuIDA7XFxuIDQ5NDpcXHR9XFxuIDQ5NTpcXHRcXG4gNDk2OlxcdHN0YXRpYyBzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaF9hbGxvYyhzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCxcXG4gNDk3OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gNDk4OlxcdFxcdFxcdFxcdFxcdCAgICAgdTMyIGZsYWdzLCBib29sIGV4ZW1wdF9mcm9tX2djKVxcbiA0OTk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMTo1Ni43ODgxODU2NTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5OTg5OTk5ODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgaGF2aW5nIHRoZW06XG5cbioqQW5hbHl6aW5nIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AgTGluZXMgMTcyMC0xNzYwKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgc3BlY2lmaWMgc2VjdGlvbiBvZiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLiBMaW5lcyAxNzIwIHRocm91Z2ggMTc2MCwgdGhhdCdzIHdoZXJlIHRoaW5ncyBhcmUgZ2V0dGluZyBpbnRlcmVzdGluZy4gSSdtIGZvY3VzaW5nIGluIGJlY2F1c2UgSSBzdXNwZWN0IHdlIG1pZ2h0IGZpbmQgc29tZSBjcnVjaWFsIGRldGFpbHMgYWJvdXQgWypJbnNlcnQgeW91ciBleHBlcnQgZmllbGQgaGVyZSosIGUuZy4sIEFSUCBjYWNoZSBtYW5hZ2VtZW50LCBuZWlnaGJvciBkaXNjb3ZlcnkgcHJvdG9jb2wsIG11bHRpY2FzdCBoYW5kbGluZywgZXRjLl0uIFRoaXMgcmFuZ2Ugb2Z0ZW4gZW5jb21wYXNzZXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgbGlrZSBwZXJoYXBzIHRoZSBsb2dpYyBmb3IgW3NwZWNpZmljIGZ1bmN0aW9uIHdpdGhpbiB5b3VyIGZpZWxkXS4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhleSBoYW5kbGUgW3NwZWNpZmljIGFzcGVjdCB5b3Ugd2FudCB0byBmb2N1cyBvbl0uIEFyZSB0aGV5IHVzaW5nIGFueSBjbGV2ZXIgZGF0YSBzdHJ1Y3R1cmVzIG9yIG9wdGltaXphdGlvbiB0ZWNobmlxdWVzPyBJcyB0aGVyZSBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiB0aGF0IGNvdWxkIGJlIGV4cGxvaXRlZD8gQSBjb21tb24gb3ZlcnNpZ2h0PyBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQgcmVsYXRlcyB0byBbeW91ciBoeXBvdGhlc2lzXSwgYnV0IEkgbmVlZCB0byBzZWUgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbi4gTm93LCBsZXQncyBnZXQgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgdGhleSBkaWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAyOjA2Ljc3ODE5MDU0N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzIwOlxcdH1cXG4xNzIxOlxcdFxcbjE3MjI6XFx0dm9pZCBwbmVpZ2hfZW5xdWV1ZShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5laWdoX3Bhcm1zICpwLFxcbjE3MjM6XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuMTcyNDpcXHR7XFxuMTcyNTpcXHRcXHR1bnNpZ25lZCBsb25nIHNjaGVkX25leHQgPSBuZWlnaF9wcm94eV9kZWxheShwKTtcXG4xNzI2OlxcdFxcbjE3Mjc6XFx0XFx0aWYgKHAtXFx1MDAzZXFsZW4gXFx1MDAzZSBORUlHSF9WQVIocCwgUFJPWFlfUUxFTikpIHtcXG4xNzI4OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjE3Mjk6XFx0XFx0XFx0cmV0dXJuO1xcbjE3MzA6XFx0XFx0fVxcbjE3MzE6XFx0XFxuMTczMjpcXHRcXHRORUlHSF9DQihza2IpLVxcdTAwM2VzY2hlZF9uZXh0ID0gc2NoZWRfbmV4dDtcXG4xNzMzOlxcdFxcdE5FSUdIX0NCKHNrYiktXFx1MDAzZWZsYWdzIHw9IExPQ0FMTFlfRU5RVUVVRUQ7XFxuMTczNDpcXHRcXG4xNzM1OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcXG4xNzM2OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV9xdWV1ZS5sb2NrKTtcXG4xNzM3OlxcdFxcdGlmICh0aW1lcl9kZWxldGUoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXIpKSB7XFxuMTczODpcXHRcXHRcXHRpZiAodGltZV9iZWZvcmUodGJsLVxcdTAwM2Vwcm94eV90aW1lci5leHBpcmVzLCBzY2hlZF9uZXh0KSlcXG4xNzM5OlxcdFxcdFxcdFxcdHNjaGVkX25leHQgPSB0YmwtXFx1MDAzZXByb3h5X3RpbWVyLmV4cGlyZXM7XFxuMTc0MDpcXHRcXHR9XFxuMTc0MTpcXHRcXHRza2JfZHN0X2Ryb3Aoc2tiKTtcXG4xNzQyOlxcdFxcdGRldl9ob2xkKHNrYi1cXHUwMDNlZGV2KTtcXG4xNzQzOlxcdFxcdF9fc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUsIHNrYik7XFxuMTc0NDpcXHRcXHRwLVxcdTAwM2VxbGVuKys7XFxuMTc0NTpcXHRcXHRtb2RfdGltZXIoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXIsIHNjaGVkX25leHQpO1xcbjE3NDY6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUubG9jayk7XFxuMTc0NzpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcXG4xNzQ4OlxcdH1cXG4xNzQ5OlxcdEVYUE9SVF9TWU1CT0wocG5laWdoX2VucXVldWUpO1xcbjE3NTA6XFx0XFxuMTc1MTpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZWlnaF9wYXJtcyAqbG9va3VwX25laWdoX3Bhcm1zKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLFxcbjE3NTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldCAqbmV0LCBpbnQgaWZpbmRleClcXG4xNzUzOlxcdHtcXG4xNzU0OlxcdFxcdHN0cnVjdCBuZWlnaF9wYXJtcyAqcDtcXG4xNzU1OlxcdFxcbjE3NTY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcXHUwMDI2dGJsLVxcdTAwM2VwYXJtc19saXN0LCBsaXN0KSB7XFxuMTc1NzpcXHRcXHRcXHRpZiAoKHAtXFx1MDAzZWRldiBcXHUwMDI2XFx1MDAyNiBwLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXggPT0gaWZpbmRleCBcXHUwMDI2XFx1MDAyNiBuZXRfZXEobmVpZ2hfcGFybXNfbmV0KHApLCBuZXQpKSB8fFxcbjE3NTg6XFx0XFx0XFx0ICAgICghcC1cXHUwMDNlZGV2IFxcdTAwMjZcXHUwMDI2ICFpZmluZGV4IFxcdTAwMjZcXHUwMDI2IG5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpKVxcbjE3NTk6XFx0XFx0XFx0XFx0cmV0dXJuIHA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAyOjA2Ljc3ODQwNzYxN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzOTUyNTc4MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb21taXQgYW5kIFByb3h5IFRpbWVyKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNvbW1pdC4gSSB3YXMgaW5pdGlhbGx5IGdvaW5nIHRvIHJlYWNoIGZvciBgZ2l0IGxvZyAtbiAxIC0tc3RhdGAgb3IgYGdpdCBsb2cgLXAgLTFgIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IGFuZCB0aGUgcGF0Y2gsIG9yIGV2ZW4gZ3JlcCB3aXRoaW4gdGhlIHJlcG9zaXRvcnkgaWYgbmVjZXNzYXJ5LiBCdXQsIHdhaXQsIEkgY2FuIHNlZSB0aGUgY29tbWl0IG1lc3NhZ2UgcmlnaHQgaGVyZSBpbiB0aGUgcHJvbXB0ISBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLiBJdCBsb29rcyBsaWtlIGl0J3MgYSBgc3l6LWNsdXN0ZXJgIGNvbW1pdCwgYXBwbHlpbmcgYSBwYXRjaCB0aGF0IHdhcyB1bmRlciByZXZpZXcuIEdvb2QgdG8ga25vdyB0aGUgY29udGV4dC5cblxuTm93LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBkaWcgaW50byB0aGUgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIGNoYW5nZWQgYnkgdGhpcyBjb21taXQuIExldCdzIHNlZSB3aGF0IHRoZSBwcm94eSB0aW1lciBjYWxsYmFjayBkb2VzLCBhcyBpdCBpcyB0aGUgbW9zdCBtZWFuaW5nZnVsIHBhcnQuIFRoYXQncyB3aGVyZSB0aGUgY3JpdGljYWwgcGllY2Ugb2YgdGhpcyBsaWtlbHkgbGllcy4gSXQncyB0aGUgcG9pbnQgb2YgdGhpcywgYW5kIHRoZSBjb250ZXh0IG9mIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY0MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAyOjA5LjE3MzY2ODQ0MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODI1NTk4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm94eV90aW1lclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuYz00NjE9c3RhdGljIGludCBfX25laWdoX2lmZG93bihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTQ3NC1cXHQvKiBUaGUgY2FsbGJhY2sgZG9lcyBub3QgdGFrZSB0aGlzIGxvY2ssIHNvIHN5bmMgZGVsZXRpb24gY2FuIHdhaXQgZm9yIGl0LiAqL1xcbm5ldC9jb3JlL25laWdoYm91ci5jOjQ3NTpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtNDc2LVxcdHBuZWlnaF9xdWV1ZV9wdXJnZShcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV9xdWV1ZSwgZGV2ID8gZGV2X25ldChkZXYpIDogTlVMTCxcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTQ3OC1cXHRpZiAoc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFxcdTAwMjZ0YmwtXFx1MDAzZXByb3h5X3F1ZXVlKSlcXG5uZXQvY29yZS9uZWlnaGJvdXIuYzo0Nzk6XFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXIpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jOjQ4MDpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy00ODEtXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0xNjc1PXN0YXRpYyB2b2lkIG5laWdoX3Byb3h5X3Byb2Nlc3Moc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTY3Ni17XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTY3NzpcXHRzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCA9IHRpbWVyX2NvbnRhaW5lcl9vZih0YmwsIHQsIHByb3h5X3RpbWVyKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNjc4LVxcdGxvbmcgc2NoZWRfbmV4dCA9IDA7XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNzA0LVxcdH1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNzA1OlxcdHRpbWVyX2RlbGV0ZShcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcik7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTcwNi1cXHRpZiAoc2NoZWRfbmV4dClcXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNzA3OlxcdFxcdG1vZF90aW1lcihcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lciwgamlmZmllcyArIHNjaGVkX25leHQpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTE3MDgtXFx0c3Bpbl91bmxvY2soXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUubG9jayk7XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0xNzIyPXZvaWQgcG5laWdoX2VucXVldWUoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZWlnaF9wYXJtcyAqcCxcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTE3MzQtXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTczNTpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTczNi1cXHRzcGluX2xvY2soXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUubG9jayk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTczNzpcXHRpZiAodGltZXJfZGVsZXRlKFxcdTAwMjZ0YmwtXFx1MDAzZXByb3h5X3RpbWVyKSkge1xcbm5ldC9jb3JlL25laWdoYm91ci5jOjE3Mzg6XFx0XFx0aWYgKHRpbWVfYmVmb3JlKHRibC1cXHUwMDNlcHJveHlfdGltZXIuZXhwaXJlcywgc2NoZWRfbmV4dCkpXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTczOTpcXHRcXHRcXHRzY2hlZF9uZXh0ID0gdGJsLVxcdTAwM2Vwcm94eV90aW1lci5leHBpcmVzO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTE3NDAtXFx0fVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTc0NC1cXHRwLVxcdTAwM2VxbGVuKys7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTc0NTpcXHRtb2RfdGltZXIoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXIsIHNjaGVkX25leHQpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTE3NDYtXFx0c3Bpbl91bmxvY2soXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUubG9jayk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTc0NzpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNzQ4LX1cXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jPTE4MjY9dm9pZCBuZWlnaF90YWJsZV9pbml0KGludCBpbmRleCwgc3RydWN0IG5laWdoX3RhYmxlICp0YmwpXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xODY1LVxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ0YmwtXFx1MDAzZWxvY2spO1xcbm5ldC9jb3JlL25laWdoYm91ci5jOjE4NjY6XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTg2Ny1cXHRtdXRleF9pbml0KFxcdTAwMjZ0YmwtXFx1MDAzZXBoYXNoX2xvY2spO1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTg3NC1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxODc1OlxcdHRpbWVyX3NldHVwKFxcdTAwMjZ0YmwtXFx1MDAzZXByb3h5X3RpbWVyLCBuZWlnaF9wcm94eV9wcm9jZXNzLCAwKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xODc2LVxcdHNrYl9xdWV1ZV9oZWFkX2luaXRfY2xhc3MoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUsXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0xODg5PWludCBuZWlnaF90YWJsZV9jbGVhcihpbnQgaW5kZXgsIHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsKVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTg5Ni1cXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNnRibC1cXHUwMDNlZ2Nfd29yayk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTg5NzpcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcik7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTg5OC1cXHRwbmVpZ2hfcXVldWVfcHVyZ2UoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUsIE5VTEwsIHRibC1cXHUwMDNlZmFtaWx5KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDI6MDkuMjUxOTI5MjU4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI3OTk5MDM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiB0aGUgZGVzY3JpYmVkIGNvZGUgY29udGV4dDpcblxuKipBbmFseXppbmcgYG5laWdoX3Byb3h5X3Byb2Nlc3NgKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBCYXNlZCBvbiB0aGUgcHJldmlvdXMgY29udGV4dCwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBmdW5jdGlvbiBgbmVpZ2hfcHJveHlfcHJvY2Vzc2AuIFRoZSByZWZlcmVuY2UgdG8gbGluZSAxNjc1IHN1Z2dlc3RzIGEgc3BlY2lmaWMgcG9pbnQgb2YgaW50ZXJlc3Qgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEknbSBsaWtlbHkgbG9va2luZyBmb3IgYSBwYXJ0aWN1bGFyIGJlaGF2aW9yLCBsb2dpYyBmbG93LCBvciBwb3RlbnRpYWwgaXNzdWUgd2l0aGluIHRoYXQgc2VjdGlvbiBvZiB0aGUgY29kZS4gTXkgZXhwZXJ0IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBzeXN0ZW0gdGVsbHMgbWUgd2hhdCBraW5kIG9mIHByb2JsZW1zIG1pZ2h0IGJlIGx1cmtpbmcgYXJvdW5kIHRoYXQgYXJlYS4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEyOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAyOjExLjUzMTkyMjhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL25laWdoYm91ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2NzU6XFx0c3RhdGljIHZvaWQgbmVpZ2hfcHJveHlfcHJvY2VzcyhzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4xNjc2OlxcdHtcXG4xNjc3OlxcdFxcdHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsID0gdGltZXJfY29udGFpbmVyX29mKHRibCwgdCwgcHJveHlfdGltZXIpO1xcbjE2Nzg6XFx0XFx0bG9uZyBzY2hlZF9uZXh0ID0gMDtcXG4xNjc5OlxcdFxcdHVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllcztcXG4xNjgwOlxcdFxcdHN0cnVjdCBza19idWZmICpza2IsICpuO1xcbjE2ODE6XFx0XFxuMTY4MjpcXHRcXHRzcGluX2xvY2soXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUubG9jayk7XFxuMTY4MzpcXHRcXG4xNjg0OlxcdFxcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUsIHNrYiwgbikge1xcbjE2ODU6XFx0XFx0XFx0bG9uZyB0ZGlmID0gTkVJR0hfQ0Ioc2tiKS1cXHUwMDNlc2NoZWRfbmV4dCAtIG5vdztcXG4xNjg2OlxcdFxcbjE2ODc6XFx0XFx0XFx0aWYgKHRkaWYgXFx1MDAzYz0gMCkge1xcbjE2ODg6XFx0XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi1cXHUwMDNlZGV2O1xcbjE2ODk6XFx0XFxuMTY5MDpcXHRcXHRcXHRcXHRuZWlnaF9wYXJtc19xbGVuX2RlYyhkZXYsIHRibC1cXHUwMDNlZmFtaWx5KTtcXG4xNjkxOlxcdFxcdFxcdFxcdF9fc2tiX3VubGluayhza2IsIFxcdTAwMjZ0YmwtXFx1MDAzZXByb3h5X3F1ZXVlKTtcXG4xNjkyOlxcdFxcbjE2OTM6XFx0XFx0XFx0XFx0aWYgKHRibC1cXHUwMDNlcHJveHlfcmVkbyBcXHUwMDI2XFx1MDAyNiBuZXRpZl9ydW5uaW5nKGRldikpIHtcXG4xNjk0OlxcdFxcdFxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4xNjk1OlxcdFxcdFxcdFxcdFxcdHRibC1cXHUwMDNlcHJveHlfcmVkbyhza2IpO1xcbjE2OTY6XFx0XFx0XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTY5NzpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjE2OTg6XFx0XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMTY5OTpcXHRcXHRcXHRcXHR9XFxuMTcwMDpcXHRcXG4xNzAxOlxcdFxcdFxcdFxcdGRldl9wdXQoZGV2KTtcXG4xNzAyOlxcdFxcdFxcdH0gZWxzZSBpZiAoIXNjaGVkX25leHQgfHwgdGRpZiBcXHUwMDNjIHNjaGVkX25leHQpXFxuMTcwMzpcXHRcXHRcXHRcXHRzY2hlZF9uZXh0ID0gdGRpZjtcXG4xNzA0OlxcdFxcdH1cXG4xNzA1OlxcdFxcdHRpbWVyX2RlbGV0ZShcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcik7XFxuMTcwNjpcXHRcXHRpZiAoc2NoZWRfbmV4dClcXG4xNzA3OlxcdFxcdFxcdG1vZF90aW1lcihcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lciwgamlmZmllcyArIHNjaGVkX25leHQpO1xcbjE3MDg6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUubG9jayk7XFxuMTcwOTpcXHR9XFxuMTcxMDpcXHRcXG4xNzExOlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIG5laWdoX3Byb3h5X2RlbGF5KHN0cnVjdCBuZWlnaF9wYXJtcyAqcClcXG4xNzEyOlxcdHtcXG4xNzEzOlxcdFxcdC8qIElmIHByb3h5X2RlbGF5IGlzIHplcm8sIGRvIG5vdCBjYWxsIGdldF9yYW5kb21fdTMyX2JlbG93KClcXG4xNzE0OlxcdFxcdCAqIGFzIGl0IGlzIHVuZGVmaW5lZCBiZWhhdmlvci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDI6MTEuNTMyMTk3NDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjU3NzY0NjcyMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIFJlbGF0ZWQgdG8gTmV0d29yayBOZWlnaGJvciBEaXNjb3ZlcnkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gbm90aWNpbmcgdGhpcyBwYXRjaCBhbmQgdGhlIGNoYW5nZXMgd2l0aGluIGBfX25laWdoX2lmZG93bmAuIFNwZWNpZmljYWxseSwgaXQncyBjYWxsaW5nIGBwbmVpZ2hfaWZkb3duYCwgdGhlbiBncmFiYmluZyBgdGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2tgLCBwdXJnaW5nIHRoZSBgcHJveHlfcXVldWVgLCBhbmQgY29uZGl0aW9uYWxseSBkZWxldGluZyBgdGJsLVx1MDAzZXByb3h5X3RpbWVyYC4gVGhlIGNvcnJlc3BvbmRpbmcgZW5xdWV1ZSBvcGVyYXRpb24gaXMgaW4gYHBuZWlnaF9lbnF1ZXVlYCwgd2hpY2ggKmFsc28qIHVzZXMgdGhlIHNhbWUgbG9jaywgYWxvbmcgd2l0aCBgcHJveHlfcXVldWUubG9ja2AsIGFuZCBtb2RpZmllcyBgcHJveHlfdGltZXJgLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gYXJpc2VzOiBJcyB0aGlzIHJlYWNoYWJsZSBjb2RlPyBBaGEsIHRoaXMgaXMgaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYCwgc28gaXQncyB0aGUgY29yZSBuZWlnaGJvciBkaXNjb3ZlcnkgYW5kIG1hbmFnZW1lbnQgaW1wbGVtZW50YXRpb24hIFRoYXQgbWFrZXMgc2Vuc2UgLSBwcm94eSBBUlAgYW5kIHByb3h5IE5EIHVzZSBgcG5laWdoX2VucXVldWVgLiBTbyB3aGVuIGFuIGludGVyZmFjZSBnb2VzIGRvd24sIGxpa2Ugd2l0aCBgaXAgbGluayBzZXQgZG93bmAsIHRoZSBgX19uZWlnaF9pZmRvd25gIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZC5cblxuQnV0IGhlcmUncyBhIHBvdGVudGlhbCBpc3N1ZSB0aGF0IGp1bXBzIG91dC4gSSBzZWUgYHRpbWVyX2RlbGV0ZV9zeW5jYCBiZWluZyBjYWxsZWQgKmluc2lkZSogdGhlIGBwcm94eV90aW1lcl9sb2NrYCBzcGlubG9jayEgVGhhdCBtYWtlcyBtZSBuZXJ2b3VzIGJlY2F1c2UgYHRpbWVyX2RlbGV0ZV9zeW5jYCBpcyBrbm93biB0byBiZSBjYXBhYmxlIG9mIHNsZWVwaW5nIG9yIHBvdGVudGlhbGx5IGNhdXNpbmcgZGVhZGxvY2tzLiBXZSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gV2UgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgdGltZXJfZGVsZXRlX3N5bmNgIHdpdGhpbiB0aGUga2VybmVsIHRyZWUgdG8gdW5kZXJzdGFuZCBpZiBpdCBzbGVlcHMgb3Igc3BpbnMuIFRoaXMgY291bGQgYmUgYSBjcml0aWNhbCBwb2ludCB0aGF0IG5lZWRzIGFkZHJlc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NDUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMjozNy4zMDg2Njc2MTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTcyNjc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aW1lcl9kZWxldGVfc3luY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3RpbWVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC90aW1lci5oLTMyLSAqIGl0J3Mgc2FmZSB0byB3YWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgcnVubmluZyBpbnN0YW5jZSBmcm9tXFxuaW5jbHVkZS9saW51eC90aW1lci5oOjMzOiAqIElSUSBoYW5kbGVycywgZm9yIGV4YW1wbGUsIGJ5IGNhbGxpbmcgdGltZXJfZGVsZXRlX3N5bmMoKS5cXG5pbmNsdWRlL2xpbnV4L3RpbWVyLmgtMzQtICpcXG4tLVxcbmluY2x1ZGUvbGludXgvdGltZXIuaD0xNjM9ZXh0ZXJuIHZvaWQgYWRkX3RpbWVyX2dsb2JhbChzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpO1xcbmluY2x1ZGUvbGludXgvdGltZXIuaC0xNjQtXFxuaW5jbHVkZS9saW51eC90aW1lci5oOjE2NTpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZV9zeW5jX3RyeShzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpO1xcbmluY2x1ZGUvbGludXgvdGltZXIuaDoxNjY6ZXh0ZXJuIGludCB0aW1lcl9kZWxldGVfc3luYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpO1xcbmluY2x1ZGUvbGludXgvdGltZXIuaC0xNjctZXh0ZXJuIGludCB0aW1lcl9kZWxldGUoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDI6MzcuNDM0NDAxNjYyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE1NDAxNDg2MDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGB0aW1lcl9kZWxldGVfc3luY2AqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBrZXJuZWwvdGltZS90aW1lci5jYCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGB0aW1lcl9kZWxldGVfc3luY2Agd29ya3MuIE15IGd1dCBmZWVsaW5nIGlzIHRoaXMgaXMgZ29pbmcgdG8gYmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBlbnN1cmluZyBhIHRpbWVyIGlzIHByb3Blcmx5IHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHN5bmNocm9uaXphdGlvbiBhbmQgcmFjZSBjb25kaXRpb25zLiBJJ20gaG9waW5nIHRvIHNlZSB0aGUgdXN1YWwgc3VzcGVjdHM6IGNhcmVmdWwgbG9ja2luZyB0byBwcmV2ZW50IGRvdWJsZSBmcmVlcyBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIGdyYWNlZnVsIGhhbmRsaW5nIG9mIGluLWZsaWdodCB0aW1lciBjYWxsYmFja3MsIGFuZCByb2J1c3QgZXJyb3IgY2hlY2tpbmcuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGRpZmZlcmVudCB0aW1lciBxdWV1ZXMgYW5kIHdoZXRoZXIgaXQgYmxvY2tzIG9yIHJldHVybnMgaW1tZWRpYXRlbHkgaW4gY2VydGFpbiBzaXR1YXRpb25zLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBzdWJ0bGV0aWVzIGFyb3VuZCBob3cgaXQgaGFuZGxlcyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgaHJ0aW1lcmAgYW5kIHNvZnR3YXJlIHRpbWVycy4gRXNzZW50aWFsbHksIEknbSBleHBlY3RpbmcgYSBjYXJlZnVsbHkgY3JhZnRlZCBkYW5jZSB0byBndWFyYW50ZWUgdGhhdCB0aGUgdGltZXIncyBtZW1vcnkgaXMgcmVjbGFpbWVkIGF0IHRoZSByaWdodCB0aW1lLiBMZXQncyBzZWUgaWYgbXkgZXhwZWN0YXRpb25zIGFyZSBtZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMjo1Mi44MzU4OTA0MDhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMzY1OTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCB0aW1lcl9kZWxldGVfc3luY1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90aW1lL3RpbWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RpbWUvdGltZXIuYz0xNTkxPXN0YXRpYyBpbnQgX190aW1lcl9kZWxldGVfc3luYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIGJvb2wgc2h1dGRvd24pXFxuLS1cXG5rZXJuZWwvdGltZS90aW1lci5jLTE2NzMtICovXFxua2VybmVsL3RpbWUvdGltZXIuYzoxNjc0OmludCB0aW1lcl9kZWxldGVfc3luYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXFxua2VybmVsL3RpbWUvdGltZXIuYy0xNjc1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDI6NTIuOTE4MjYzMTI1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQyMTU4OTk3NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUaW1lciBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZm9jdXNpbmcgb24gdGhhdCBgdGltZXIuY2AgZmlsZSB3aXRoaW4gdGhlIGtlcm5lbCdzIHRpbWUgc3Vic3lzdGVtLiBUaGUgY29tbWVudCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgYXJvdW5kIGxpbmUgMTY3MCDigJMgdGhhdCdzIHdoZXJlIHRoZSBjcml0aWNhbCBzdHVmZiBpcyBsaWtlbHkgaGFwcGVuaW5nLiBJIGtub3cgdGhpcyBhcmVhIGluc2lkZSBhbmQgb3V0LiBJJ20gdGhpbmtpbmcsIGJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIHRoYXQgdGhpcyBzZWN0aW9uIGxpa2VseSBnb3Zlcm5zIHRoZSBhY3R1YWwgZmlyaW5nIG9mIHRpbWVyIGV2ZW50cyBhbmQgbWF5YmUgdGhlIHBlcmlvZGljIGNoZWNrcyBvZiBzY2hlZHVsZWQgdGltZXJzLCBvciBwb3RlbnRpYWxseSBzb21lIGFzcGVjdCBvZiB0aGUgdGltZXIgaW50ZXJydXB0IGhhbmRsaW5nLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHBhcnNlIHRoZSBzdXJyb3VuZGluZyBsb2dpYyB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGNvbnRleHQgYW5kIHdoYXQgdGhlIGNvbW1lbnQgaXMgZXhwbGFpbmluZy4gSSdtIGV4cGVjdGluZyBzb21lIGluc2lnaHRzIHJlZ2FyZGluZyB0aGUgdW5kZXJseWluZyBtZWNoYW5pc21zLCBhbmQgdGhlIGludHJpY2F0ZSBiYWxhbmNpbmcgYWN0IHRoZSBkZXZlbG9wZXJzIGhhZCB0byBtYWtlLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMjo1Ny4xMzQxNjk0MDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90aW1lL3RpbWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY1MDpcXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxfdGltZXJfZm4oKTtcXG4xNjUxOlxcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZS1cXHUwMDNlcnVubmluZ190aW1lciA9IG15dGltZXI7XFxuMTY1MjpcXHQgKiAgICBzcGluX2xvY2tfaXJxKHNvbWVsb2NrKTtcXG4xNjUzOlxcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcdTAwM2NJUlFcXHUwMDNlXFxuMTY1NDpcXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGluX2xvY2soc29tZWxvY2spO1xcbjE2NTU6XFx0ICogICAgdGltZXJfZGVsZXRlX3N5bmMobXl0aW1lcik7XFxuMTY1NjpcXHQgKiAgICB3aGlsZSAoYmFzZS1cXHUwMDNlcnVubmluZ190aW1lciA9PSBteXRpbWVyKTtcXG4xNjU3OlxcdCAqXFxuMTY1ODpcXHQgKiBOb3cgdGltZXJfZGVsZXRlX3N5bmMoKSB3aWxsIG5ldmVyIHJldHVybiBhbmQgbmV2ZXIgcmVsZWFzZSBzb21lbG9jay5cXG4xNjU5OlxcdCAqIFRoZSBpbnRlcnJ1cHQgb24gdGhlIG90aGVyIENQVSBpcyB3YWl0aW5nIHRvIGdyYWIgc29tZWxvY2sgYnV0IGl0IGhhc1xcbjE2NjA6XFx0ICogaW50ZXJydXB0ZWQgdGhlIHNvZnRpcnEgdGhhdCBDUFUwIGlzIHdhaXRpbmcgdG8gZmluaXNoLlxcbjE2NjE6XFx0ICpcXG4xNjYyOlxcdCAqIFRoaXMgZnVuY3Rpb24gY2Fubm90IGd1YXJhbnRlZSB0aGF0IHRoZSB0aW1lciBpcyBub3QgcmVhcm1lZCBhZ2FpbiBieVxcbjE2NjM6XFx0ICogc29tZSBjb25jdXJyZW50IG9yIHByZWVtcHRpbmcgY29kZSwgcmlnaHQgYWZ0ZXIgaXQgZHJvcHBlZCB0aGUgYmFzZVxcbjE2NjQ6XFx0ICogbG9jay4gSWYgdGhlcmUgaXMgdGhlIHBvc3NpYmlsaXR5IG9mIGEgY29uY3VycmVudCByZWFybSB0aGVuIHRoZSByZXR1cm5cXG4xNjY1OlxcdCAqIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBpcyBtZWFuaW5nbGVzcy5cXG4xNjY2OlxcdCAqXFxuMTY2NzpcXHQgKiBJZiBzdWNoIGEgZ3VhcmFudGVlIGlzIG5lZWRlZCwgZS5nLiBmb3IgdGVhcmRvd24gc2l0dWF0aW9ucyB0aGVuIHVzZVxcbjE2Njg6XFx0ICogdGltZXJfc2h1dGRvd25fc3luYygpIGluc3RlYWQuXFxuMTY2OTpcXHQgKlxcbjE2NzA6XFx0ICogUmV0dXJuOlxcbjE2NzE6XFx0ICogKiAlMFxcdC0gVGhlIHRpbWVyIHdhcyBub3QgcGVuZGluZ1xcbjE2NzI6XFx0ICogKiAlMVxcdC0gVGhlIHRpbWVyIHdhcyBwZW5kaW5nIGFuZCBkZWFjdGl2YXRlZFxcbjE2NzM6XFx0ICovXFxuMTY3NDpcXHRpbnQgdGltZXJfZGVsZXRlX3N5bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxcbjE2NzU6XFx0e1xcbjE2NzY6XFx0XFx0cmV0dXJuIF9fdGltZXJfZGVsZXRlX3N5bmModGltZXIsIGZhbHNlKTtcXG4xNjc3OlxcdH1cXG4xNjc4OlxcdEVYUE9SVF9TWU1CT0wodGltZXJfZGVsZXRlX3N5bmMpO1xcbjE2Nzk6XFx0XFxuMTY4MDpcXHQvKipcXG4xNjgxOlxcdCAqIHRpbWVyX3NodXRkb3duX3N5bmMgLSBTaHV0ZG93biBhIHRpbWVyIGFuZCBwcmV2ZW50IHJlYXJtaW5nXFxuMTY4MjpcXHQgKiBAdGltZXI6IFRoZSB0aW1lciB0byBiZSBzaHV0ZG93blxcbjE2ODM6XFx0ICpcXG4xNjg0OlxcdCAqIFdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgaXQgaXMgZ3VhcmFudGVlZCB0aGF0OlxcbjE2ODU6XFx0ICogICAtIEB0aW1lciBpcyBub3QgcXVldWVkXFxuMTY4NjpcXHQgKiAgIC0gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIEB0aW1lciBpcyBub3QgcnVubmluZ1xcbjE2ODc6XFx0ICogICAtIEB0aW1lciBjYW5ub3QgYmUgZW5xdWV1ZWQgYWdhaW4uIEFueSBhdHRlbXB0IHRvIHJlYXJtXFxuMTY4ODpcXHQgKiAgICAgQHRpbWVyIGlzIHNpbGVudGx5IGlnbm9yZWQuXFxuMTY4OTpcXHQgKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMjo1Ny4xMzQzNjAwODZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzE2MzgyOTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIFRpbWVyIERlbGV0aW9uIFN5bmNocm9uaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgYmFjayBpbnRvIHRoZSBrZXJuZWwncyB0aW1lciBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBfX3RpbWVyX2RlbGV0ZV9zeW5jYC4gSSdtIGdvaW5nIHRvIG5hdmlnYXRlIHRvIGxpbmUgMTU5MSBpbiBga2VybmVsL3RpbWUvdGltZXIuY2AgYW5kIHJlYWxseSBnZXQgYSBoYW5kbGUgb24gdGhlIHN5bmNocm9uaXphdGlvbiBsb2dpYyB0aGVyZS4gSSdtIGtlZW4gdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBoYW5kbGluZyB0aGUgcmFjZSBjb25kaXRpb25zIHRoYXQgYXJlIGluaGVyZW50IHRvIHRpbWVyIGRlbGV0aW9uIGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyBpdCBlbnN1cmVzIHRoYXQgYSB0aW1lciBpc24ndCBwcmVtYXR1cmVseSBmcmVlZCB3aGlsZSBzdGlsbCBhY3RpdmUsIG9yIGNvbnZlcnNlbHksIHRoYXQgcmVzb3VyY2VzIGFyZSBjbGVhbmVkIHVwIGVmZmljaWVudGx5IGFmdGVyIGEgdGltZXIgaGFzIGV4cGlyZWQgb3IgaXMgY2FuY2VsbGVkLiBJdCBpcyBjcml0aWNhbCB0aGF0IEkgdW5kZXJzdGFuZCB3aGF0IG1lY2hhbmlzbXMgYXJlIGJlaW5nIHVzZWQgdG8gbWFpbnRhaW4gZGF0YSBpbnRlZ3JpdHkgd2hlbiB0aW1lcnMgYXJlIGJlaW5nIGFkZGVkLCByZW1vdmVkLCBhbmQgZmlyZWQgY29uY3VycmVudGx5LiBJIG5lZWQgdG8gYmUgYWJsZSB0byBhcHBseSBteSB1bmRlcnN0YW5kaW5nIHRvIHRoZSBzcGVjaWZpYyBjb250ZXh0IG9mIHRoZSBzeXN0ZW0gSSdtIHdvcmtpbmcgd2l0aCwgc28gbGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE5OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6MDAuMjk4MTk1MTQ1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdGltZS90aW1lci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1OTEsXG4gIFwiTGluZUNvdW50XCI6IDU1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1OTE6XFx0c3RhdGljIGludCBfX3RpbWVyX2RlbGV0ZV9zeW5jKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgYm9vbCBzaHV0ZG93bilcXG4xNTkyOlxcdHtcXG4xNTkzOlxcdFxcdGludCByZXQ7XFxuMTU5NDpcXHRcXG4xNTk1OlxcdCNpZmRlZiBDT05GSUdfTE9DS0RFUFxcbjE1OTY6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4xNTk3OlxcdFxcbjE1OTg6XFx0XFx0LypcXG4xNTk5OlxcdFxcdCAqIElmIGxvY2tkZXAgZ2l2ZXMgYSBiYWNrdHJhY2UgaGVyZSwgcGxlYXNlIHJlZmVyZW5jZVxcbjE2MDA6XFx0XFx0ICogdGhlIHN5bmNocm9uaXphdGlvbiBydWxlcyBhYm92ZS5cXG4xNjAxOlxcdFxcdCAqL1xcbjE2MDI6XFx0XFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbjE2MDM6XFx0XFx0bG9ja19tYXBfYWNxdWlyZShcXHUwMDI2dGltZXItXFx1MDAzZWxvY2tkZXBfbWFwKTtcXG4xNjA0OlxcdFxcdGxvY2tfbWFwX3JlbGVhc2UoXFx1MDAyNnRpbWVyLVxcdTAwM2Vsb2NrZGVwX21hcCk7XFxuMTYwNTpcXHRcXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuMTYwNjpcXHQjZW5kaWZcXG4xNjA3OlxcdFxcdC8qXFxuMTYwODpcXHRcXHQgKiBkb24ndCB1c2UgaXQgaW4gaGFyZGlycSBjb250ZXh0LCBiZWNhdXNlIGl0XFxuMTYwOTpcXHRcXHQgKiBjb3VsZCBsZWFkIHRvIGRlYWRsb2NrLlxcbjE2MTA6XFx0XFx0ICovXFxuMTYxMTpcXHRcXHRXQVJOX09OKGluX2hhcmRpcnEoKSBcXHUwMDI2XFx1MDAyNiAhKHRpbWVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRJTUVSX0lSUVNBRkUpKTtcXG4xNjEyOlxcdFxcbjE2MTM6XFx0XFx0LypcXG4xNjE0OlxcdFxcdCAqIE11c3QgYmUgYWJsZSB0byBzbGVlcCBvbiBQUkVFTVBUX1JUIGJlY2F1c2Ugb2YgdGhlIHNsb3dwYXRoIGluXFxuMTYxNTpcXHRcXHQgKiBkZWxfdGltZXJfd2FpdF9ydW5uaW5nKCkuXFxuMTYxNjpcXHRcXHQgKi9cXG4xNjE3OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSBcXHUwMDI2XFx1MDAyNiAhKHRpbWVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRJTUVSX0lSUVNBRkUpKVxcbjE2MTg6XFx0XFx0XFx0bG9ja2RlcF9hc3NlcnRfcHJlZW1wdGlvbl9lbmFibGVkKCk7XFxuMTYxOTpcXHRcXG4xNjIwOlxcdFxcdGRvIHtcXG4xNjIxOlxcdFxcdFxcdHJldCA9IF9fdHJ5X3RvX2RlbF90aW1lcl9zeW5jKHRpbWVyLCBzaHV0ZG93bik7XFxuMTYyMjpcXHRcXG4xNjIzOlxcdFxcdFxcdGlmICh1bmxpa2VseShyZXQgXFx1MDAzYyAwKSkge1xcbjE2MjQ6XFx0XFx0XFx0XFx0ZGVsX3RpbWVyX3dhaXRfcnVubmluZyh0aW1lcik7XFxuMTYyNTpcXHRcXHRcXHRcXHRjcHVfcmVsYXgoKTtcXG4xNjI2OlxcdFxcdFxcdH1cXG4xNjI3OlxcdFxcdH0gd2hpbGUgKHJldCBcXHUwMDNjIDApO1xcbjE2Mjg6XFx0XFxuMTYyOTpcXHRcXHRyZXR1cm4gcmV0O1xcbjE2MzA6XFx0fVxcbjE2MzE6XFx0XFxuMTYzMjpcXHQvKipcXG4xNjMzOlxcdCAqIHRpbWVyX2RlbGV0ZV9zeW5jIC0gRGVhY3RpdmF0ZSBhIHRpbWVyIGFuZCB3YWl0IGZvciB0aGUgaGFuZGxlciB0byBmaW5pc2guXFxuMTYzNDpcXHQgKiBAdGltZXI6XFx0VGhlIHRpbWVyIHRvIGJlIGRlYWN0aXZhdGVkXFxuMTYzNTpcXHQgKlxcbjE2MzY6XFx0ICogU3luY2hyb25pemF0aW9uIHJ1bGVzOiBDYWxsZXJzIG11c3QgcHJldmVudCByZXN0YXJ0aW5nIG9mIHRoZSB0aW1lcixcXG4xNjM3OlxcdCAqIG90aGVyd2lzZSB0aGlzIGZ1bmN0aW9uIGlzIG1lYW5pbmdsZXNzLiBJdCBtdXN0IG5vdCBiZSBjYWxsZWQgZnJvbVxcbjE2Mzg6XFx0ICogaW50ZXJydXB0IGNvbnRleHRzIHVubGVzcyB0aGUgdGltZXIgaXMgYW4gaXJxc2FmZSBvbmUuIFRoZSBjYWxsZXIgbXVzdFxcbjE2Mzk6XFx0ICogbm90IGhvbGQgbG9ja3Mgd2hpY2ggd291bGQgcHJldmVudCBjb21wbGV0aW9uIG9mIHRoZSB0aW1lcidzIGNhbGxiYWNrXFxuMTY0MDpcXHQgKiBmdW5jdGlvbi4gVGhlIHRpbWVyJ3MgaGFuZGxlciBtdXN0IG5vdCBjYWxsIGFkZF90aW1lcl9vbigpLiBVcG9uIGV4aXRcXG4xNjQxOlxcdCAqIHRoZSB0aW1lciBpcyBub3QgcXVldWVkIGFuZCB0aGUgaGFuZGxlciBpcyBub3QgcnVubmluZyBvbiBhbnkgQ1BVLlxcbjE2NDI6XFx0ICpcXG4xNjQzOlxcdCAqIEZvciAhaXJxc2FmZSB0aW1lcnMsIHRoZSBjYWxsZXIgbXVzdCBub3QgaG9sZCBsb2NrcyB0aGF0IGFyZSBoZWxkIGluXFxuMTY0NDpcXHQgKiBpbnRlcnJ1cHQgY29udGV4dC4gRXZlbiBpZiB0aGUgbG9jayBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSB0aW1lciBpblxcbjE2NDU6XFx0ICogcXVlc3Rpb24uICBIZXJlJ3Mgd2h5OjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6MDAuMjk4NDE1ODg1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjcxMTc1MjE1ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nOiBDb3JlIE5ldHdvcmtpbmcgU3luY2hyb25pemF0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGF0IHRoaXMgY29tbWVudDogXCIvKiBUaGUgY2FsbGJhY2sgZG9lcyBub3QgdGFrZSB0aGlzIGxvY2ssIHNvIHN5bmMgZGVsZXRpb24gY2FuIHdhaXQgZm9yIGl0LiAqL1wiLiBBbmQgdGhlbiBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IHNwaW5sb2NrLCBgcHJveHlfdGltZXJfbG9ja2AsIGFkZGVkIHRvIGBzdHJ1Y3QgbmVpZ2hfdGFibGVgLiBIbW0sIHNlZW1zIGxpa2UgYSBmYWlybHkgc2lnbmlmaWNhbnQgY2hhbmdlLiBUaGlzIG5ldyBsb2NrIGlzIGJlaW5nIHVzZWQgaW4gYF9fbmVpZ2hfaWZkb3duYCBhbmQgYHBuZWlnaF9lbnF1ZXVlYCwgYm90aCBvZiB3aGljaCBhcmUgcmlnaHQgdGhlcmUgaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYCwgd2hpY2gsIGFzIHdlIGFsbCBrbm93LCBpcyBjb3JlIG5ldHdvcmtpbmcuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHRoZSB0cmlhZ2UgZ3VpZGVsaW5lcy4gUmVhY2hhYmlsaXR5IGlzIHRoZSBwcmltYXJ5IGdhdGUsIGJ1dCB3ZSBjYW4ndCBibGluZGx5IHRydXN0IGNsYWltcyBvZiBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgb3IgcmVmYWN0b3JpbmcuIEFueSBuZXcgb3IgbW9kaWZpZWQgYXNzZXJ0aW9ucyBpbiByZWFjaGFibGUgY29kZSAqbXVzdCogYmUgZnV6emVkLiBBbmQgcmVnYXJkaW5nIHdoZW4gc29tZXRoaW5nIGlzIFdvcnRoRnV6emluZywgd2VsbCwgYW55dGhpbmcgaW52b2x2aW5nIGNvcmUgc3Vic3lzdGVtcyBsaWtlIG5ldHdvcmtpbmcgYW5kIGNoYW5nZXMgdG8gc3luY2hyb25pemF0aW9uL2xvY2tpbmcgaXMgYSBkZWZpbml0ZSB5ZXMuIEFsc28sIHJlZmFjdG9yaW5ncyB3aGljaCByZXN0cnVjdHVyZSByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSB3b3J0aCBmdXp6aW5nLCBhbmQgaXQgbG9va3MgbGlrZSB3ZSBtYXkgaGF2ZSB0aGF0IGhlcmUuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGNoYW5nZXMuIEEgbmV3IHNwaW5sb2NrLCBgcHJveHlfdGltZXJfbG9ja2AsIGhhcyBiZWVuIGFkZGVkIHRvIGBzdHJ1Y3QgbmVpZ2hfdGFibGVgLiBUaGlzIGxvY2sgaXMgYWNxdWlyZWQgaW4gYF9fbmVpZ2hfaWZkb3duYCBhcm91bmQgYSBjYWxsIHRvIGB0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXIpYCwgYW5kIGFsc28gaW4gYHBuZWlnaF9lbnF1ZXVlYC4gVGhlIGxvY2sgaXMgaW5pdGlhbGl6ZWQgZHVyaW5nIGBuZWlnaF90YWJsZV9pbml0YC4gVGhpcyBsb29rcyBsaWtlIGEgY2hhbmdlIHRvIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBpbnZvbHZpbmcgdGltZXIgZGVsZXRpb24gYW5kIGVucXVldWVpbmcgZm9yIHByb3h5IEFSUC9ORC5cblxuR2l2ZW4gdGhhdCB0aGlzIGlzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGNvcmUgbmV0d29ya2luZywgYW5kIHRoYXQgaXQgbW9kaWZpZXMgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgKipXb3J0aEZ1enppbmcgaXMgZGVmaW5pdGVseSBgdHJ1ZWAqKi4gVGhpcyBjaGFuZ2UgbmVlZHMgYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSBhcm91bmQgdGhlIGludGVyYWN0aW9uIG9mIHRoZSB0aW1lciBhbmQgdGhlIHF1ZXVlLlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZCB0byB0cmlnZ2VyIHRoaXMuIEknbGwgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IGBuZXQvY29yZS9uZWlnaGJvdXIuY2AgYW5kIGBwbmVpZ2hfZW5xdWV1ZWAgdG8gc2VlIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIG1pZ2h0IGluZmx1ZW5jZSB0aGlzIGNvZGUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMDEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMzowNy40MTU5NDA4MzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDE0NDYyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwbmVpZ2hfZW5xdWV1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25laWdoYm91ci5jPTE3MTE9c3RhdGljIHVuc2lnbmVkIGxvbmcgbmVpZ2hfcHJveHlfZGVsYXkoc3RydWN0IG5laWdoX3Bhcm1zICpwKVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTcyMS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNzIyOnZvaWQgcG5laWdoX2VucXVldWUoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZWlnaF9wYXJtcyAqcCxcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNzIzLVxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTc0OC19XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTc0OTpFWFBPUlRfU1lNQk9MKHBuZWlnaF9lbnF1ZXVlKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNzUwLVxcbi0tXFxubmV0L2lwdjQvYXJwLmM9NzAyPXN0YXRpYyBpbnQgYXJwX3Byb2Nlc3Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9hcnAuYy04ODAtXFx0XFx0XFx0XFx0fSBlbHNlIHtcXG5uZXQvaXB2NC9hcnAuYzo4ODE6XFx0XFx0XFx0XFx0XFx0cG5laWdoX2VucXVldWUoXFx1MDAyNmFycF90YmwsXFxubmV0L2lwdjQvYXJwLmMtODgyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpbl9kZXYtXFx1MDAzZWFycF9wYXJtcywgc2tiKTtcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9Nzg5PXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yZWN2X25zKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jLTkyMC1cXHRcXHRcXHRcXHRpZiAobilcXG5uZXQvaXB2Ni9uZGlzYy5jOjkyMTpcXHRcXHRcXHRcXHRcXHRwbmVpZ2hfZW5xdWV1ZShcXHUwMDI2bmRfdGJsLCBpZGV2LVxcdTAwM2VuZF9wYXJtcywgbik7XFxubmV0L2lwdjYvbmRpc2MuYy05MjItXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAzOjA3LjU1NjA5MTg2NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MDQ1MTY1NDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIENhbGxlciBDb250ZXh0IGZvciBgcG5laWdoX2VucXVldWVgKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgcG5laWdoX2VucXVldWVgIGlzIGNhbGxlZCBmcm9tIHR3byBrZXkgcGxhY2VzOiBgYXJwX3Byb2Nlc3NgLCB3aGljaCBoYW5kbGVzIElQdjQgQWRkcmVzcyBSZXNvbHV0aW9uIFByb3RvY29sLCBhbmQgYG5kaXNjX3JlY3ZfbnNgLCB0aGUgSVB2NiBOZWlnaGJvdXIgU29saWNpdGF0aW9uIHJlY2VpdmVyLiBNeSBnb2FsIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCB3b3VsZCBhZmZlY3QgdGhlIGJlaGF2aW9yIG9mIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AsIGdpdmVuIHRoZXNlIGNhbGxlcnMuIEtub3dpbmcgdGhlc2UgY29udGV4dHMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3MgYW5kIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLCBhbmQgaG93IHZhcmlvdXMgbmV0d29yayBpbnRlcmFjdGlvbnMgdHJpZ2dlciBpdC4gVGltZSB0byBkaXZlIGludG8gdGhlIE1ha2VmaWxlISBJIG5lZWQgdG8gc2VlIHdoYXQgcHJlcHJvY2Vzc29yIGZsYWdzIG9yIGJ1aWxkIHNldHRpbmdzIG1pZ2h0IGluZmx1ZW5jZSB0aGUgY29tcGlsYXRpb24gYW5kLCBieSBleHRlbnNpb24sIHRoZSBiZWhhdmlvciBvZiB0aGlzIHBhcnRpY3VsYXIgZmlsZS4gSSBleHBlY3QgdG8gZmluZCBzb21lIGhpbnRzIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgaW4gcGxhY2UgZm9yIHRoaXMgcGFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjayB0byBmdW5jdGlvbiBwcm9wZXJseSBhbmQgaG93IHRoZXkgdGllIGludG8gdGhlIGNhbGxlciBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzAzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6MTEuNjAxMjYxNjIzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTQ0NTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZWlnaGJvdXJcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcXHRcXHQgICAgICs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlOjEzOlxcdFxcdFxcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cXHRcXHRcXHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6MTEuNjYyNzE2NjUzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM2NTIyMjI0MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYG5laWdoYm91ci5vYCBEZXBlbmRlbmN5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBsaW5lLCBgb2JqLXkgKz0gbmVpZ2hib3VyLm9gLCBidXJpZWQgaW4gYG5ldC9jb3JlL01ha2VmaWxlYC4gVGhpcyBtZWFucyBgbmVpZ2hib3VyLm9gIGlzIGJlaW5nIGNvbXBpbGVkIGludG8gYG5ldC9jb3JlYCwgd2hpY2ggaXRzZWxmIGlzIGNvbnRpbmdlbnQgb24gYENPTkZJR19ORVQ9eWAuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgYENPTkZJR19ORVRgIGlzIHRoZSBmb3VuZGF0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBuZWlnaGJvdXIub2AncyBmdW5jdGlvbmFsaXR5IGlzIGRpcmVjdGx5IHRpZWQgdG8gSVB2NCBBUlAgb3IgSVB2NiBORC4gSSdtIHRoaW5raW5nLCBpcyB0aGVyZSBhbiBleHRyYSBjb25maWd1cmF0aW9uIG5lZWRlZD8gRG9lcyBpdCBuZWVkIGBDT05GSUdfSU5FVGAgZm9yIEFSUCBvciBgQ09ORklHX0lQVjZgIGZvciBJUHY2IE5EP1xuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBJJ2xsIHN0YXJ0IHdpdGggYG5ldC9LY29uZmlnYCBhbmQgdGhlbiBtb3ZlIG9uIHRvIHRoZSBtb3JlIHNwZWNpZmljIGBuZXQvaXB2NC9LY29uZmlnYCBvciBldmVuIGBuZXQvaXB2Ni9LY29uZmlnYCBpZiBJIG5lZWQgdG8gZHJpbGwgZG93biBmdXJ0aGVyLiBHaXZlbiB0aGF0IGBDT05GSUdfTkVUYCBpcyB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgdGhpcyBtZWFucyB0aGF0IHRoZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSBpcyBhbG1vc3QgYWx3YXlzIHByZXNlbnQuIEknbSBpbnRlcmVzdGVkIGluIHRoZSBtb3JlIGdyYW51bGFyIGNvbmZpZ3VyYXRpb25zLiBBaCwgcmlnaHQsIGBwbmVpZ2hfZW5xdWV1ZWAgaXMgaW52b2tlZCBieSBBUlAsIGFuZCBhbHNvIGJ5IElQdjYgTkQsIG1lYW5pbmcgaXQgaXMgcmVsYXRlZCB0byBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0lQVjZgLiBOb3csIEkgc2hvdWxkIGRvdWJsZSBjaGVjaywgaWYgaXQgaXMgcmVsYXRlZCB0byBwcm94eSBBUlAvTkQgY29uZmlndXJhdGlvbnMgb3IgbmVpZ2hib3VyIHRhYmxlIHJlbGF0ZWQgc2V0dGluZ3MuIEknbGwgbmVlZCB0byBmb2N1cyBvbiBgbmV0L2lwdjQvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9LY29uZmlnYCBmb3IgdGhhdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGFueSBzdWJ0bGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA5MCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMzoxNS4zMTQ5NDM3NzRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDM0Mjk2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1RcXG4tLVxcbm5ldC9LY29uZmlnLTExMy1cXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcXG5uZXQvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiVENQL0lQIG5ldHdvcmtpbmdcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTMzMD1jb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTMzOC1cXG5uZXQvaXB2NC9LY29uZmlnOjMzOTpjb25maWcgSU5FVF9BSFxcbm5ldC9pcHY0L0tjb25maWctMzQwLVxcdHRyaXN0YXRlIFxcXCJJUDogQUggdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1BcXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cXHR0cmlzdGF0ZSBcXFwiSVA6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzY4LVxcbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzgxLVxcbm5ldC9pcHY0L0tjb25maWc6MzgyOmNvbmZpZyBJTkVUX0VTUElOVENQXFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXFx0Ym9vbCBcXFwiSVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zOTMtXFxubmV0L2lwdjQvS2NvbmZpZzozOTQ6Y29uZmlnIElORVRfSVBDT01QXFxubmV0L2lwdjQvS2NvbmZpZy0zOTUtXFx0dHJpc3RhdGUgXFxcIklQOiBJUENvbXAgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQwMy1cXG5uZXQvaXB2NC9LY29uZmlnOjQwNDpjb25maWcgSU5FVF9UQUJMRV9QRVJUVVJCX09SREVSXFxubmV0L2lwdjQvS2NvbmZpZy00MDUtXFx0aW50IFxcXCJJTkVUOiBTb3VyY2UgcG9ydCBwZXJ0dXJiYXRpb24gdGFibGUgc2l6ZSAoYXMgcG93ZXIgb2YgMilcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MTMtXFxubmV0L2lwdjQvS2NvbmZpZzo0MTQ6Y29uZmlnIElORVRfWEZSTV9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnLTQxNS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MTgtXFxubmV0L2lwdjQvS2NvbmZpZzo0MTk6Y29uZmlnIElORVRfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZy00MjAtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDIyLVxcbm5ldC9pcHY0L0tjb25maWc6NDIzOmNvbmZpZyBJTkVUX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQyNC1cXHR0cmlzdGF0ZSBcXFwiSU5FVDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MzQtXFxubmV0L2lwdjQvS2NvbmZpZzo0MzU6Y29uZmlnIElORVRfVENQX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQzNi1cXHRkZXBlbmRzIG9uIElORVRfRElBR1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MzgtXFxubmV0L2lwdjQvS2NvbmZpZzo0Mzk6Y29uZmlnIElORVRfVURQX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQ0MC1cXHR0cmlzdGF0ZSBcXFwiVURQOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQ0Ni1cXG5uZXQvaXB2NC9LY29uZmlnOjQ0Nzpjb25maWcgSU5FVF9SQVdfRElBR1xcbm5ldC9pcHY0L0tjb25maWctNDQ4LVxcdHRyaXN0YXRlIFxcXCJSQVc6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDU0LVxcbm5ldC9pcHY0L0tjb25maWc6NDU1OmNvbmZpZyBJTkVUX0RJQUdfREVTVFJPWVxcbm5ldC9pcHY0L0tjb25maWctNDU2LVxcdGJvb2wgXFxcIklORVQ6IGFsbG93IHByaXZpbGVnZWQgcHJvY2VzcyB0byBhZG1pbmlzdHJhdGl2ZWx5IGNsb3NlIHNvY2tldHNcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTM5PWNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTQ2LVxcbm5ldC9pcHY2L0tjb25maWc6NDc6Y29uZmlnIElORVQ2X0FIXFxubmV0L2lwdjYvS2NvbmZpZy00OC1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogQUggdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTYxLVxcbm5ldC9pcHY2L0tjb25maWc6NjI6Y29uZmlnIElORVQ2X0VTUFxcbm5ldC9pcHY2L0tjb25maWctNjMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNzYtXFxubmV0L2lwdjYvS2NvbmZpZzo3Nzpjb25maWcgSU5FVDZfRVNQX09GRkxPQURcXG5uZXQvaXB2Ni9LY29uZmlnLTc4LVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctODktXFxubmV0L2lwdjYvS2NvbmZpZzo5MDpjb25maWcgSU5FVDZfRVNQSU5UQ1BcXG5uZXQvaXB2Ni9LY29uZmlnLTkxLVxcdGJvb2wgXFxcIklQdjY6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xMDEtXFxubmV0L2lwdjYvS2NvbmZpZzoxMDI6Y29uZmlnIElORVQ2X0lQQ09NUFxcbm5ldC9pcHY2L0tjb25maWctMTAzLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJUENvbXAgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTEyMD1jb25maWcgSVBWNl9JTEFcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTQwLVxcbm5ldC9pcHY2L0tjb25maWc6MTQxOmNvbmZpZyBJTkVUNl9YRlJNX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMTQyLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE0NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE0Njpjb25maWcgSU5FVDZfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0xNDctXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnPTE0PWlmIE1QVENQXFxubmV0L21wdGNwL0tjb25maWctMTUtXFxubmV0L21wdGNwL0tjb25maWc6MTY6Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbm5ldC9tcHRjcC9LY29uZmlnLTE3LVxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxuLS1cXG5uZXQvcHNwL0tjb25maWctNC0jXFxubmV0L3BzcC9LY29uZmlnOjU6Y29uZmlnIElORVRfUFNQXFxubmV0L3BzcC9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiUFNQIFNlY3VyaXR5IFByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvc2N0cC9LY29uZmlnPTY4PWVuZGNob2ljZVxcbm5ldC9zY3RwL0tjb25maWctNjktXFxubmV0L3NjdHAvS2NvbmZpZzo3MDpjb25maWcgSU5FVF9TQ1RQX0RJQUdcXG5uZXQvc2N0cC9LY29uZmlnLTcxLVxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAzOjE1LjQ0NTI5MTY0M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzY4NTk4NDQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVjZW50IENoYW5nZXMgaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMgaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYC4gRmlyc3QsIEknbGwgcXVpY2tseSBsb29rIGF0IHRoZSBmdW5jdGlvbnMgdGhhdCB3ZXJlIG1vZGlmaWVkLiBJdCBsb29rcyBsaWtlIGBfX25laWdoX2lmZG93bmAsIGBwbmVpZ2hfZW5xdWV1ZWAsIGFuZCBgbmVpZ2hfdGFibGVfaW5pdGAgd2VyZSB0b3VjaGVkLiBIbW1tLCBpbnRlcmVzdGluZy5cblxuSG9sZCBvbi4uLiBgX19uZWlnaF9pZmRvd25gIGlzIHN0YXRpYy4gVGhhdCdzIGEga2V5IGRldGFpbCEgSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsZXJzLiBMZXQgbWUgc2VlLi4uIExvb2tpbmcgcXVpY2tseSBhdCB0aGUgY29kZWJhc2UsIGl0IGxvb2tzIGxpa2UgYG5laWdoX2NhcnJpZXJfZG93bmAsIGBuZWlnaF9pZmRvd25gLCBhbmQgYG5laWdoX3RhYmxlX2NsZWFyYCBjb3VsZCBiZSBjYWxsaW5nIGBfX25laWdoX2lmZG93bmAuIExldCBtZSBjb25maXJtIHRoaXMgYW5kIHNlZSBpZiBgbmVpZ2hfdGFibGVfY2xlYXJgIGlzIGNhbGxpbmcgYF9fbmVpZ2hfaWZkb3duYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBwbGFjZSBmb3IgY29uY2Vybi4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSB0aGF0IGZ1bmN0aW9uIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6MzMuMTMxMjgwMjExWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0OTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODg1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODg1OlxcdC8qXFxuMTg4NjpcXHQgKiBPbmx5IGNhbGxlZCBmcm9tIG5kaXNjX2NsZWFudXAoKSwgd2hpY2ggbWVhbnMgdGhpcyBpcyBkZWFkIGNvZGVcXG4xODg3OlxcdCAqIGJlY2F1c2Ugd2Ugbm8gbG9uZ2VyIGNhbiB1bmxvYWQgSVB2NiBtb2R1bGUuXFxuMTg4ODpcXHQgKi9cXG4xODg5OlxcdGludCBuZWlnaF90YWJsZV9jbGVhcihpbnQgaW5kZXgsIHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsKVxcbjE4OTA6XFx0e1xcbjE4OTE6XFx0XFx0UkNVX0lOSVRfUE9JTlRFUihuZWlnaF90YWJsZXNbaW5kZXhdLCBOVUxMKTtcXG4xODkyOlxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbjE4OTM6XFx0XFxuMTg5NDpcXHRcXHQvKiBJdCBpcyBub3QgY2xlYW4uLi4gRml4IGl0IHRvIHVubG9hZCBJUHY2IG1vZHVsZSBzYWZlbHkgKi9cXG4xODk1OlxcdFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2dGJsLVxcdTAwM2VtYW5hZ2VkX3dvcmspO1xcbjE4OTY6XFx0XFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZ0YmwtXFx1MDAzZWdjX3dvcmspO1xcbjE4OTc6XFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXIpO1xcbjE4OTg6XFx0XFx0cG5laWdoX3F1ZXVlX3B1cmdlKFxcdTAwMjZ0YmwtXFx1MDAzZXByb3h5X3F1ZXVlLCBOVUxMLCB0YmwtXFx1MDAzZWZhbWlseSk7XFxuMTg5OTpcXHRcXHRuZWlnaF9pZmRvd24odGJsLCBOVUxMKTtcXG4xOTAwOlxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2dGJsLVxcdTAwM2VlbnRyaWVzKSlcXG4xOTAxOlxcdFxcdFxcdHByX2NyaXQoXFxcIm5laWdoYm91ciBsZWFrYWdlXFxcXG5cXFwiKTtcXG4xOTAyOlxcdFxcbjE5MDM6XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQodGJsLVxcdTAwM2VuaHQsIDEpLVxcdTAwM2VyY3UsXFxuMTkwNDpcXHRcXHRcXHQgbmVpZ2hfaGFzaF9mcmVlX3JjdSk7XFxuMTkwNTpcXHRcXHR0YmwtXFx1MDAzZW5odCA9IE5VTEw7XFxuMTkwNjpcXHRcXG4xOTA3OlxcdFxcdGtmcmVlKHRibC1cXHUwMDNlcGhhc2hfYnVja2V0cyk7XFxuMTkwODpcXHRcXHR0YmwtXFx1MDAzZXBoYXNoX2J1Y2tldHMgPSBOVUxMO1xcbjE5MDk6XFx0XFxuMTkxMDpcXHRcXHRyZW1vdmVfcHJvY19lbnRyeSh0YmwtXFx1MDAzZWlkLCBpbml0X25ldC5wcm9jX25ldF9zdGF0KTtcXG4xOTExOlxcdFxcbjE5MTI6XFx0XFx0ZnJlZV9wZXJjcHUodGJsLVxcdTAwM2VzdGF0cyk7XFxuMTkxMzpcXHRcXHR0YmwtXFx1MDAzZXN0YXRzID0gTlVMTDtcXG4xOTE0OlxcdFxcbjE5MTU6XFx0XFx0cmV0dXJuIDA7XFxuMTkxNjpcXHR9XFxuMTkxNzpcXHRcXG4xOTE4OlxcdHN0YXRpYyBzdHJ1Y3QgbmVpZ2hfdGFibGUgKm5laWdoX2ZpbmRfdGFibGUoaW50IGZhbWlseSlcXG4xOTE5OlxcdHtcXG4xOTIwOlxcdFxcdHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsID0gTlVMTDtcXG4xOTIxOlxcdFxcbjE5MjI6XFx0XFx0c3dpdGNoIChmYW1pbHkpIHtcXG4xOTIzOlxcdFxcdGNhc2UgQUZfSU5FVDpcXG4xOTI0OlxcdFxcdFxcdHRibCA9IHJjdV9kZXJlZmVyZW5jZV9ydG5sKG5laWdoX3RhYmxlc1tORUlHSF9BUlBfVEFCTEVdKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6MzMuMTMxNjMzNzUxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ3NzY1MTQ4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbmVpZ2hfaWZkb3duYCBhbmQgYG5laWdoX2NhcnJpZXJfZG93bmAgQ2FsbHMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSdtIHRoaW5raW5nIGlzLCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUgYW5kIGZpZ3VyZSBvdXQgdGhlIGNhbGwgc2l0ZXMgZm9yIGBuZWlnaF9pZmRvd25gIGFuZCBgbmVpZ2hfY2Fycmllcl9kb3duYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdHJpZ2dlcmVkIHdpdGhpbiB0aGUgc3lzdGVtLiBBcmUgdGhleSBkaXJlY3QgY2FsbHMgZnJvbSB0aGUgbmV0d29yayBzdGFjaywgb3IgYXJlIHRoZXkgYmVpbmcgaW52b2tlZCBpbmRpcmVjdGx5IHRocm91Z2ggc29tZSBvdGhlciBsYXllciBvciBldmVudD8gQXJlIHRoZXkgcmVsYXRlZCBhbmQgY2FsbGVkIGluIHNlcXVlbmNlLCBvciBhcmUgdGhleSBzZXBhcmF0ZSBldmVudHM/XG5cbkknbSBtZW50YWxseSBtYXBwaW5nIHRoZSBjb250cm9sIGZsb3cuIEknbSB3b25kZXJpbmcgaWYgYG5laWdoX2lmZG93bmAgaXMgY2FsbGVkIHdoZW4gYW4gaW50ZXJmYWNlIGdvZXMgZG93biBnZW5lcmFsbHksIHJlZ2FyZGxlc3Mgb2YgdGhlIHJlYXNvbiwgYW5kIHRoZW4gYG5laWdoX2NhcnJpZXJfZG93bmAgaXMgY2FsbGVkIGluIGNvbmp1bmN0aW9uLCBvciBhcyBhIGNvbnNlcXVlbmNlLCBvZiB0aGUgbGluayBzdGF0ZSB0cmFuc2l0aW9uaW5nLiBBbHRlcm5hdGl2ZWx5LCBhcmUgdGhleSBzZXBhcmF0ZSwgc3BlY2lhbGl6ZWQgaGFuZGxlcnMgZm9yIGRpZmZlcmVudCBzY2VuYXJpb3Mg4oCTIG9uZSBmb3IgYWRtaW5pc3RyYXRpdmUgc2h1dGRvd24gdmVyc3VzIGEgcGh5c2ljYWwgbGluayBmYWlsdXJlPyBVbmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpY3Mgb2Ygd2hlbiBhbmQgd2h5IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhlY3V0ZWQgaXMgY3JpdGljYWwgZm9yIHBpbnBvaW50aW5nIHRoZSByb290IGNhdXNlIG9mIGFueSBvYnNlcnZlZCBiZWhhdmlvci4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhvc2UgZnVuY3Rpb25zLCBvZiBjb3Vyc2UsIHRvIHNlZSBpZiB0aGV5J3JlIHBhc3NpbmcgYW55dGhpbmcgdGhhdCdzIHJlbGV2YW50IHRvIHRoZSBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjM2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMzozNy45MDgxNTI1NjFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTI3OTUzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZWlnaF8oY2Fycmllcl8pP2lmZG93blwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25laWdoYm91ci5jPTU1PXN0YXRpYyB2b2lkIF9fbmVpZ2hfbm90aWZ5KHN0cnVjdCBuZWlnaGJvdXIgKm4sIGludCB0eXBlLCBpbnQgZmxhZ3MsIHUzMiBwaWQpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jOjU2OnN0YXRpYyB2b2lkIHBuZWlnaF9pZmRvd24oc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtNTctXFx0XFx0XFx0ICBib29sIHNraXBfcGVybSk7XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYz00NTQ9dm9pZCBuZWlnaF9jaGFuZ2VhZGRyKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtNDYwLVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjQ2MTpzdGF0aWMgaW50IF9fbmVpZ2hfaWZkb3duKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jb3JlL25laWdoYm91ci5jLTQ2Mi1cXHRcXHRcXHQgIGJvb2wgc2tpcF9wZXJtKVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtNDcyLVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjQ3MzpcXHRwbmVpZ2hfaWZkb3duKHRibCwgZGV2LCBza2lwX3Blcm0pO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTQ3NC1cXHQvKiBUaGUgY2FsbGJhY2sgZG9lcyBub3QgdGFrZSB0aGlzIGxvY2ssIHNvIHN5bmMgZGVsZXRpb24gY2FuIHdhaXQgZm9yIGl0LiAqL1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9NDg0PWludCBuZWlnaF9jYXJyaWVyX2Rvd24oc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtNDg1LXtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYzo0ODY6XFx0X19uZWlnaF9pZmRvd24odGJsLCBkZXYsIHRydWUpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTQ4Ny1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTQ4OS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYzo0OTA6aW50IG5laWdoX2lmZG93bihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy00OTEte1xcbm5ldC9jb3JlL25laWdoYm91ci5jOjQ5MjpcXHRfX25laWdoX2lmZG93bih0YmwsIGRldiwgZmFsc2UpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTQ5My1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jPTgzNz1pbnQgcG5laWdoX2RlbGV0ZShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCB2b2lkICpwa2V5LFxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtODY5LVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjg3MDpzdGF0aWMgdm9pZCBwbmVpZ2hfaWZkb3duKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jb3JlL25laWdoYm91ci5jLTg3MS1cXHRcXHRcXHQgIGJvb2wgc2tpcF9wZXJtKVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MTg4OT1pbnQgbmVpZ2hfdGFibGVfY2xlYXIoaW50IGluZGV4LCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibClcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTE4OTgtXFx0cG5laWdoX3F1ZXVlX3B1cmdlKFxcdTAwMjZ0YmwtXFx1MDAzZXByb3h5X3F1ZXVlLCBOVUxMLCB0YmwtXFx1MDAzZWZhbWlseSk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTg5OTpcXHRuZWlnaF9pZmRvd24odGJsLCBOVUxMKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xOTAwLVxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2dGJsLVxcdTAwM2VlbnRyaWVzKSlcXG4tLVxcbm5ldC9pcHY0L2FycC5jPTEzNjU9dm9pZCBhcnBfaWZkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjQvYXJwLmMtMTM2Ni17XFxubmV0L2lwdjQvYXJwLmM6MTM2NzpcXHRuZWlnaF9pZmRvd24oXFx1MDAyNmFycF90YmwsIGRldik7XFxubmV0L2lwdjQvYXJwLmMtMTM2OC19XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTM4NzY9c3RhdGljIGludCBhZGRyY29uZl9pZmRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB1bnJlZ2lzdGVyKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy00MDQzLVxcdFxcdG5laWdoX3Bhcm1zX3JlbGVhc2UoXFx1MDAyNm5kX3RibCwgaWRldi1cXHUwMDNlbmRfcGFybXMpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NDA0NDpcXHRcXHRuZWlnaF9pZmRvd24oXFx1MDAyNm5kX3RibCwgZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTQwNDUtXFx0XFx0aW42X2Rldl9wdXQoaWRldik7XFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTE4NTk9c3RhdGljIGludCBuZGlzY19uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jLTE4OTctXFx0Y2FzZSBORVRERVZfRE9XTjpcXG5uZXQvaXB2Ni9uZGlzYy5jOjE4OTg6XFx0XFx0bmVpZ2hfaWZkb3duKFxcdTAwMjZuZF90YmwsIGRldik7XFxubmV0L2lwdjYvbmRpc2MuYy0xODk5LVxcdFxcdGZpYjZfcnVuX2djKDAsIG5ldCwgZmFsc2UpO1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYz01MDQ2PXZvaWQgcnQ2X2Rpc2FibGVfaXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudClcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNTA0OS1cXHRydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXYoZGV2KTtcXG5uZXQvaXB2Ni9yb3V0ZS5jOjUwNTA6XFx0bmVpZ2hfaWZkb3duKFxcdTAwMjZuZF90YmwsIGRldik7XFxubmV0L2lwdjYvcm91dGUuYy01MDUxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6MzguMDUzNDM5MzM4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ0Mjc4NDE3MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgTmVpZ2hib3IgRGlzY292ZXJ5IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JrIG5laWdoYm9yIGRpc2NvdmVyeSwgcGFydGljdWxhcmx5IHdoZW4gYW4gaW50ZXJmYWNlIGdvZXMgZG93bi4gSSdtIHN0YXJ0aW5nIHdpdGggYG5laWdoX2lmZG93bmAsIGBuZWlnaF9jYXJyaWVyX2Rvd25gLCBgX19uZWlnaF9pZmRvd25gLCBgcG5laWdoX2VucXVldWVgLCBhbmQgYG5laWdoX3RhYmxlX2luaXRgLlxuXG5UaGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBjb21lcyB0byBtaW5kLCBhcyBJIGFsd2F5cyBkbywgaXMgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX25laWdoX2lmZG93bmAgaW4gdGhlIGNvbnRleHQgb2YgdGhlIEdDQyBjb21waWxlciBhbmQgdGhlIHZtbGludXggZW52aXJvbm1lbnQuIElzIHRoaXMgZnVuY3Rpb24gc3RhdGljPyBJcyBpdCBpbmxpbmVkPyBVbmRlcnN0YW5kaW5nIHRoaXMgaXMgY3JpdGljYWwgZm9yIHRyYWNpbmcgaXRzIGNhbGwgc3RhY2sgZWZmZWN0aXZlbHkuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgbmVpZ2hfaWZkb3duYCBhbmQgYG5laWdoX2NhcnJpZXJfZG93bmAgdG8gc2VlIGhvdyB0aGV5IHV0aWxpemUgYF9fbmVpZ2hfaWZkb3duYC5cblxuTm93LCBpZiBJIHRoaW5rIGFib3V0IGBfX25laWdoX2lmZG93bmAsIEkga25vdyBpdCdzIGNhbGxlZCBieSBgbmVpZ2hfY2Fycmllcl9kb3duYCBhbmQgYG5laWdoX2lmZG93bmAuIFRoaXMgc3VnZ2VzdHMgaXQgY291bGQgcG90ZW50aWFsbHkgYmUgaW5saW5lZCBpbnRvIHRob3NlIHR3byBmdW5jdGlvbnMsIG9yIGl0IG1pZ2h0IGJlIGEgc2VwYXJhdGUgZnVuY3Rpb24gY2FsbC4gU28gYG5laWdoX2lmZG93bmAsIGBuZWlnaF9jYXJyaWVyX2Rvd25gLCBhbmQgYF9fbmVpZ2hfaWZkb3duYCAoaWYgbm90IGlubGluZWQpIGFyZSBhbGwgZGVmaW5pdGUgY2FuZGlkYXRlcyBmb3IgaW5jbHVzaW9uIGluIG15IGFuYWx5c2lzLiBBbmQsIG9mIGNvdXJzZSwgYHBuZWlnaF9lbnF1ZXVlYCBpcyBpbXBvcnRhbnQgYXMgd2VsbC5cblxuVGhlbiwgdGhlcmUncyBgbmVpZ2hfdGFibGVfaW5pdGAuIEFoLCB5ZXMsIHRoaXMgaXMgcGFydCBvZiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcywgaXNuJ3QgaXQ/IEl0J3MgY2FsbGVkIGR1cmluZyBib290IG9yIG1vZHVsZSBpbml0aWFsaXphdGlvbiDigJMgcm91dGluZXMgbGlrZSBgYXJwX2luaXRgLCBgbmRpc2NfaW5pdGAsIGBjbGlwX2luaXRgLCBhbmQgYGRuX25laWdoX2luaXRgLiBBaCB3YWl0ISBgbmVpZ2hfdGFibGVfaW5pdGAgaXMgY2FsbGVkIGR1cmluZyB0aGUgaW5pdC4gVGhpcyBtZWFucyBJIHNob3VsZCBjaGVjayB3aGVyZSBgbmVpZ2hfdGFibGVfaW5pdGAgaXMgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODcwOCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMzo0Mi40ODEyODUzNjRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTY0NTQwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZWlnaF90YWJsZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbmVpZ2hib3VyLmM9MTgyND1zdGF0aWMgc3RydWN0IG5laWdoX3RhYmxlIF9fcmN1ICpuZWlnaF90YWJsZXNbTkVJR0hfTlJfVEFCTEVTXSBfX3JlYWRfbW9zdGx5O1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTE4MjUtXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTgyNjp2b2lkIG5laWdoX3RhYmxlX2luaXQoaW50IGluZGV4LCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibClcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xODI3LXtcXG4tLVxcbm5ldC9pcHY0L2FycC5jPTE1MTQ9dm9pZCBfX2luaXQgYXJwX2luaXQodm9pZClcXG5uZXQvaXB2NC9hcnAuYy0xNTE1LXtcXG5uZXQvaXB2NC9hcnAuYzoxNTE2OlxcdG5laWdoX3RhYmxlX2luaXQoTkVJR0hfQVJQX1RBQkxFLCBcXHUwMDI2YXJwX3RibCk7XFxubmV0L2lwdjQvYXJwLmMtMTUxNy1cXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9MjAwNT1pbnQgX19pbml0IG5kaXNjX2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMjAxNC1cXHQgKi9cXG5uZXQvaXB2Ni9uZGlzYy5jOjIwMTU6XFx0bmVpZ2hfdGFibGVfaW5pdChORUlHSF9ORF9UQUJMRSwgXFx1MDAyNm5kX3RibCk7XFxubmV0L2lwdjYvbmRpc2MuYy0yMDE2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMzo0Mi42MzI5NDAxMzlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAwNzE2MDQ5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBDb25jdXJyZW5jeSBJc3N1ZXMgaW4gTmVpZ2hib3IgRGlzY292ZXJ5IFRhYmxlIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBgbmVpZ2hfdGFibGVfaW5pdGAgaXMgYSBvbmUtdGltZSB0aGluZyBhdCB0aGUgc3RhcnQsIG5vdCBpbnRlcmVzdGluZyBmb3IgZnV6emluZy4gQnV0IGBwbmVpZ2hfZW5xdWV1ZWAsIGBuZWlnaF9pZmRvd25gLCBhbmQgYG5laWdoX2NhcnJpZXJfZG93bmA/IFRob3NlIGFyZSBydW50aW1lIGZ1bmN0aW9ucyB0aGF0IGRpcmVjdGx5IGhpdCB0aGUgY29kZSBJJ3ZlIGJlZW4gd29ya2luZyBvbiwgYW5kIHRoZSBuZXcgbG9jay4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuXG5cbkxldCdzIGRpdmUgaW50byBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgZGVhZGxvY2sgc2NlbmFyaW9zLCBwYXJ0aWN1bGFybHkgd2l0aGluIGBfX25laWdoX2lmZG93bmAuIEhlcmUncyB3aGF0J3MgaGFwcGVuaW5nOiBpdCBjYWxscyBgcG5laWdoX2lmZG93bmAsIHRoZW4gZ3JhYnMgYHRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrYCwgcHVyZ2VzIGB0YmwtXHUwMDNlcHJveHlfcXVldWVgIHdpdGggYHBuZWlnaF9xdWV1ZV9wdXJnZWAsIGFuZCAqdGhlbiogY29uZGl0aW9uYWxseSBkZWxldGVzIHRoZSB0aW1lciB3aXRoIGB0aW1lcl9kZWxldGVfc3luY2AgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LiBIb2xkIG9uIGEgc2Vjb25k4oCmIGB0aW1lcl9kZWxldGVfc3luY2AgaXMgY2FsbGVkICp3aGlsZSogaG9sZGluZyBgdGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2tgPyBUaGF0J3Mgbm90IGdvb2QuIFxuXG5XaGF0IGlmIHRoZSBgbmVpZ2hfcHJveHlfcHJvY2Vzc2AgdGltZXIgY2FsbGJhY2sgaXMgcnVubmluZyBvbiBhbm90aGVyIENQVSAqcmlnaHQgbm93Kj8gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCB3b3Jrcy4gTGV0J3MgbG9vayBhdCBgbmVpZ2hfcHJveHlfcHJvY2Vzc2A6XG5cbk9rYXksIHNvIGBuZWlnaF9wcm94eV9wcm9jZXNzYCAqZG9lc24ndCogdGFrZSBgdGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2tgLiBJdCBncmFicyBgdGJsLVx1MDAzZXByb3h5X3F1ZXVlLmxvY2tgIGluc3RlYWQuIEJ1dCwgaW1wb3J0YW50bHksIGluc2lkZSB0aGF0IGNyaXRpY2FsIHNlY3Rpb24sIGl0ICpjYWxscyBgdGJsLVx1MDAzZXByb3h5X3JlZG8oc2tiKWAqISBUaGF0J3MgdGhlIGtleS4gV2hhdCBpcyBgdGJsLVx1MDAzZXByb3h5X3JlZG8oc2tiKWAgYWN0dWFsbHkgZG9pbmc/IEluIEFSUCwgaXQncyBlaXRoZXIgYHBuZWlnaF9lbnF1ZXVlYCBvciBgYXJwX3Byb2Nlc3NgISBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgYHByb3h5X3JlZG9gIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTY1NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowNDowMi43MDQ1NDk1MDNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDgzOTAxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm94eV9yZWRvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbmVpZ2hib3VyLmM9MTY3NT1zdGF0aWMgdm9pZCBuZWlnaF9wcm94eV9wcm9jZXNzKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTY5Mi1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNjkzOlxcdFxcdFxcdGlmICh0YmwtXFx1MDAzZXByb3h5X3JlZG8gXFx1MDAyNlxcdTAwMjYgbmV0aWZfcnVubmluZyhkZXYpKSB7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTY5NC1cXHRcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTY5NTpcXHRcXHRcXHRcXHR0YmwtXFx1MDAzZXByb3h5X3JlZG8oc2tiKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNjk2LVxcdFxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubmV0L2lwdjQvYXJwLmM9MTUyPXN0cnVjdCBuZWlnaF90YWJsZSBhcnBfdGJsID0ge1xcbi0tXFxubmV0L2lwdjQvYXJwLmMtMTU4LVxcdC5jb25zdHJ1Y3RvclxcdD0gYXJwX2NvbnN0cnVjdG9yLFxcbm5ldC9pcHY0L2FycC5jOjE1OTpcXHQucHJveHlfcmVkb1xcdD0gcGFycF9yZWRvLFxcbm5ldC9pcHY0L2FycC5jLTE2MC1cXHQuaXNfbXVsdGljYXN0XFx0PSBhcnBfaXNfbXVsdGljYXN0LFxcbi0tXFxubmV0L2lwdjYvbmRpc2MuYz0xMDk9c3RydWN0IG5laWdoX3RhYmxlIG5kX3RibCA9IHtcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTE3LVxcdC5wZGVzdHJ1Y3RvciA9XFx0cG5kaXNjX2Rlc3RydWN0b3IsXFxubmV0L2lwdjYvbmRpc2MuYzoxMTg6XFx0LnByb3h5X3JlZG8gPVxcdHBuZGlzY19yZWRvLFxcbm5ldC9pcHY2L25kaXNjLmMtMTE5LVxcdC5pc19tdWx0aWNhc3QgPVxcdG5kaXNjX2lzX211bHRpY2FzdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDQ6MDIuODQ5Mzk1NjdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzgwNjQ1Mjc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS5cblxuKipJbnZlc3RpZ2F0aW5nIGBwYXJwX3JlZG9gIGFuZCBgcG5kaXNjX3JlZG9gKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyBgcGFycF9yZWRvYCBhbmQgYHBuZGlzY19yZWRvYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZG9pbmcuIFdoYXQgYXJlIHRoZWlyIHB1cnBvc2VzPyBIb3cgZG8gdGhleSBmdW5jdGlvbj8gQXJlIHRoZXkgcGVyZm9ybWluZyBhbnkgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IGFmZmVjdCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtPyBXaGF0IHNvcnQgb2YgZGF0YSBhcmUgdGhleSB1c2luZywgYW5kIHdoZXJlIGFyZSB0aGV5IGdldHRpbmcgdGhhdCBkYXRhPyBXaGF0IGFyZSB0aGUgZWRnZSBjYXNlcyBJIG5lZWQgdG8gY29uc2lkZXI/IFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBmb3JtIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZy4gVGltZSB0byByb2xsIHVwIG15IHNsZWV2ZXMgYW5kIHNlZSB3aGF0IHRoZXNlIGZ1bmN0aW9ucyBkby4gSeKAmWxsIG1ha2Ugc3VyZSB0byBub3RlIGFueSBkZXRhaWxzIGFzIEkgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5OTUsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowNDoxMC42NTU4NTEyMDFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDg1NjMwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYXJwX3JlZG9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9hcnAuYz0xMjY9c3RhdGljIHZvaWQgYXJwX2Vycm9yX3JlcG9ydChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxubmV0L2lwdjQvYXJwLmM6MTI3OnN0YXRpYyB2b2lkIHBhcnBfcmVkbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5uZXQvaXB2NC9hcnAuYy0xMjgtc3RhdGljIGludCBhcnBfaXNfbXVsdGljYXN0KGNvbnN0IHZvaWQgKnBrZXkpO1xcbi0tXFxubmV0L2lwdjQvYXJwLmM9MTUyPXN0cnVjdCBuZWlnaF90YWJsZSBhcnBfdGJsID0ge1xcbi0tXFxubmV0L2lwdjQvYXJwLmMtMTU4LVxcdC5jb25zdHJ1Y3RvclxcdD0gYXJwX2NvbnN0cnVjdG9yLFxcbm5ldC9pcHY0L2FycC5jOjE1OTpcXHQucHJveHlfcmVkb1xcdD0gcGFycF9yZWRvLFxcbm5ldC9pcHY0L2FycC5jLTE2MC1cXHQuaXNfbXVsdGljYXN0XFx0PSBhcnBfaXNfbXVsdGljYXN0LFxcbi0tXFxubmV0L2lwdjQvYXJwLmM9NzAyPXN0YXRpYyBpbnQgYXJwX3Byb2Nlc3Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9hcnAuYy05NTItXFxubmV0L2lwdjQvYXJwLmM6OTUzOnN0YXRpYyB2b2lkIHBhcnBfcmVkbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L2FycC5jLTk1NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjA0OjEwLjgxNjcxODg4NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjM0MTA2NDk4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGJhc2VkIG9uIHRoZSBwcm9tcHQ6XG5cbioqRGl2aW5nIGludG8gYHBhcnBfcmVkb2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBjcmFjayBvcGVuIGBuZXQvaXB2NC9hcnAuY2AgYW5kIHRha2UgYSBsb29rIGF0IGBwYXJwX3JlZG9gLiBJJ20gY3VyaW91cyB0byBzZWUgd2hhdCdzIGhhcHBlbmluZyBpbiB0aGlzIGZ1bmN0aW9uOyB0aGUgbmFtZSBpdHNlbGYgaGludHMgYXQgc29tZSBraW5kIG9mIHJlLXRyYW5zbWlzc2lvbiBsb2dpYyBvciBwZXJoYXBzIHNvbWUgc3RhdGUgcmUtZXZhbHVhdGlvbi4gR2l2ZW4gaXRzIHBsYWNlbWVudCwgSSdtIGV4cGVjdGluZyB0aGlzIGlzIGhhbmRsaW5nIHRoZSByZS10cmFuc21pc3Npb24gb2YgYSBwcm9iZSBvciByZXF1ZXN0IGFmdGVyIGFuIGluaXRpYWwgQVJQIGZhaWx1cmUgb3IgdGltZW91dCwgbGlrZWx5IGluIHRoZSBjb250ZXh0IG9mIEdyYXR1aXRvdXMgQVJQIG9yIHdoZW4gYSBob3N0IGZhaWxzIHRvIGltbWVkaWF0ZWx5IHJlc3BvbmQgdG8gYW4gQVJQIHJlcXVlc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgcmV0cmllcywgd2hhdCB0aGUgdGltZW91dCB2YWx1ZXMgYXJlLCBhbmQgd2hhdCB0cmlnZ2VycyB0aGlzIGZ1bmN0aW9uJ3MgZXhlY3V0aW9uLiBJdCB3aWxsIGJlIGhlbHBmdWwgdG8gc2VlIHdoZXRoZXIgaXQgdXNlcyB0aGUgYGFycF90aW1lcmAgdG8gbWFuYWdlIHRoZSByZXF1ZXN0IG9yIHNvbWUgb3RoZXIga2VybmVsIG1lY2hhbmlzbS4gTGV0J3Mgc2VlIGlmIHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBkdXBsaWNhdGUgYWRkcmVzcyBkZXRlY3Rpb24gKERBRCkgYXQgYWxsLiBUaW1lIHRvIGxvb2sgaW50byB0aGUgY29kZSBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTE1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDQ6MzMuMTU3Nzg2MjkyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9hcnAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NTMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NTM6XFx0c3RhdGljIHZvaWQgcGFycF9yZWRvKHN0cnVjdCBza19idWZmICpza2IpXFxuIDk1NDpcXHR7XFxuIDk1NTpcXHRcXHRhcnBfcHJvY2VzcyhkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcXG4gOTU2OlxcdH1cXG4gOTU3OlxcdFxcbiA5NTg6XFx0c3RhdGljIGludCBhcnBfaXNfbXVsdGljYXN0KGNvbnN0IHZvaWQgKnBrZXkpXFxuIDk1OTpcXHR7XFxuIDk2MDpcXHRcXHRyZXR1cm4gaXB2NF9pc19tdWx0aWNhc3QoKigoX19iZTMyICopcGtleSkpO1xcbiA5NjE6XFx0fVxcbiA5NjI6XFx0XFxuIDk2MzpcXHQvKlxcbiA5NjQ6XFx0ICpcXHRSZWNlaXZlIGFuIGFycCByZXF1ZXN0IGZyb20gdGhlIGRldmljZSBsYXllci5cXG4gOTY1OlxcdCAqL1xcbiA5NjY6XFx0XFxuIDk2NzpcXHRzdGF0aWMgaW50IGFycF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gOTY4OlxcdFxcdFxcdCAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldilcXG4gOTY5OlxcdHtcXG4gOTcwOlxcdFxcdGVudW0gc2tiX2Ryb3BfcmVhc29uIGRyb3BfcmVhc29uO1xcbiA5NzE6XFx0XFx0Y29uc3Qgc3RydWN0IGFycGhkciAqYXJwO1xcbiA5NzI6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjA0OjMzLjE1NzkwNDM0MloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4NzQxNjUxMzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYWRsb2NrIERldGVjdGVkISBBIENsYXNzaWMgQUJCQSBCdWchKipcblxuT2theSwgc28gYHBhcnBfcmVkb2AgY2FsbHMgYGFycF9wcm9jZXNzYC4gVGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgY2FuIGBhcnBfcHJvY2Vzc2AgY2FsbCBgcG5laWdoX2VucXVldWVgPyBBaCwgeWVzLCBpbiB0aGUgY29kZSwgcmlnaHQgdGhlcmU6IGBwbmVpZ2hfZW5xdWV1ZShcdTAwMjZhcnBfdGJsLCBpbl9kZXYtXHUwMDNlYXJwX3Bhcm1zLCBza2IpO2AgSXQgZG9lcyEgT2theSwgcHV0dGluZyBpdCBhbGwgdG9nZXRoZXI6IGBwYXJwX3JlZG9gIGNhbGxzIGBhcnBfcHJvY2Vzc2AsIGFuZCBgYXJwX3Byb2Nlc3NgIGNhbGxzIGBwbmVpZ2hfZW5xdWV1ZWAuXG5cbk5vdywgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIGFuZCBjb25jZXJuaW5nLiBJZiBgdGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2tgIGlzIGhlbGQgYnkgYHRpbWVyX2RlbGV0ZV9zeW5jYCBvbiBDUFUgMCwgYW5kIHRoYXQgcm91dGluZSBpcyB3YWl0aW5nIGZvciBgbmVpZ2hfcHJveHlfcHJvY2Vzc2AgdG8gY29tcGxldGUgb24gQ1BVIDEsIGFuZCBvbiBDUFUgMSBgbmVpZ2hfcHJveHlfcHJvY2Vzc2AgY2FsbHMgYHBhcnBfcmVkb2AsIHdoaWNoIGNhbGxzIGBhcnBfcHJvY2Vzc2AsIHdoaWNoIHRoZW4gdHJpZXMgdG8gYWNxdWlyZSBgc3Bpbl9sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKWAuLi4gV2UgaGF2ZSBhIHBvdGVudGlhbCBkZWFkbG9jay5cblxuTGV0J3MgYnJlYWsgaXQgZG93bjpcblxuKiAgICoqQ1BVIDA6KiogYHNwaW5fbG9ja19iaChcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXJfbG9jayk7YCBhbmQgdGhlbiBgdGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyKTtgIHdoaWNoIGlzIHdhaXRpbmcgZm9yIGBuZWlnaF9wcm94eV9wcm9jZXNzYCBvbiBDUFUgMSB0byBmaW5pc2guXG4qICAgKipDUFUgMToqKiBgbmVpZ2hfcHJveHlfcHJvY2VzcygpYCBpcyBydW5uaW5nIChsaWtlbHkgYSB0aW1lciBoYW5kbGVyKTogYHRibC1cdTAwM2Vwcm94eV9yZWRvKHNrYilgIC1cdTAwM2UgYHBhcnBfcmVkb2AgLVx1MDAzZSBgYXJwX3Byb2Nlc3NgLiBBbmQsIGlmIGBhcnBfcHJvY2Vzc2AgY2FsbHMgYHBuZWlnaF9lbnF1ZXVlYCB3aGljaCBpdCBkb2VzXG4gICAgYHBuZWlnaF9lbnF1ZXVlYCB0cmllcyB0byBncmFiIGBzcGluX2xvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO2BcblxuKipUaGUgRGVhZGxvY2s6KiogQ1BVIDAgaXMgd2FpdGluZyBmb3IgQ1BVIDEgKHRoZSB0aW1lciBoYW5kbGVyKSB0byBmaW5pc2ggcmVsZWFzaW5nIGBwcm94eV90aW1lcl9sb2NrYCBhbmQgQ1BVIDEgaXMgd2FpdGluZyBmb3IgQ1BVIDAgdG8gcmVsZWFzZSBgcHJveHlfdGltZXJfbG9ja2AhIENsYXNzaWMgQUJCQSwgYSB0ZXh0Ym9vayBleGFtcGxlIG9mIGEgdGltZXIgc3luY2hyb25pemF0aW9uIGJ1Zy4gVGhpcyBjb25maXJtcyB3aHkgcGF0Y2ggZnV6emluZyB3aXRoIHN5emthbGxlciBhbmQgdGhlIGxvY2tkZXAgdG9vbCBpcyBjcnVjaWFsIGluIGRldGVjdGluZyB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMgZWFybHkuXG5cbkkgc2hvdWxkIGNoZWNrIGlmIGBhcnBfcHJvY2Vzc2AgY2FuIHJlLWVucXVldWUsIHByb2JhYmx5IGxvb2sgYXJvdW5kIGxpbmUgODgwIGluIGBuZXQvaXB2NC9hcnAuY2AgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwODYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowNDo0MS44OTk1NjAwMDNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2FycC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg2MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg2MDpcXHRcXHRcXHRcXHRcXHR9XFxuIDg2MTpcXHRcXHRcXHRcXHR9XFxuIDg2MjpcXHRcXHRcXHRcXHRnb3RvIG91dF9jb25zdW1lX3NrYjtcXG4gODYzOlxcdFxcdFxcdH0gZWxzZSBpZiAoSU5fREVWX0ZPUldBUkQoaW5fZGV2KSkge1xcbiA4NjQ6XFx0XFx0XFx0XFx0aWYgKGFkZHJfdHlwZSA9PSBSVE5fVU5JQ0FTVCAgXFx1MDAyNlxcdTAwMjZcXG4gODY1OlxcdFxcdFxcdFxcdCAgICAoYXJwX2Z3ZF9wcm94eShpbl9kZXYsIGRldiwgcnQpIHx8XFxuIDg2NjpcXHRcXHRcXHRcXHQgICAgIGFycF9md2RfcHZsYW4oaW5fZGV2LCBkZXYsIHJ0LCBzaXAsIHRpcCkgfHxcXG4gODY3OlxcdFxcdFxcdFxcdCAgICAgKHJ0LVxcdTAwM2Vkc3QuZGV2ICE9IGRldiBcXHUwMDI2XFx1MDAyNlxcbiA4Njg6XFx0XFx0XFx0XFx0ICAgICAgcG5laWdoX2xvb2t1cChcXHUwMDI2YXJwX3RibCwgbmV0LCBcXHUwMDI2dGlwLCBkZXYpKSkpIHtcXG4gODY5OlxcdFxcdFxcdFxcdFxcdG4gPSBuZWlnaF9ldmVudF9ucyhcXHUwMDI2YXJwX3RibCwgc2hhLCBcXHUwMDI2c2lwLCBkZXYpO1xcbiA4NzA6XFx0XFx0XFx0XFx0XFx0aWYgKG4pXFxuIDg3MTpcXHRcXHRcXHRcXHRcXHRcXHRuZWlnaF9yZWxlYXNlKG4pO1xcbiA4NzI6XFx0XFxuIDg3MzpcXHRcXHRcXHRcXHRcXHRpZiAoTkVJR0hfQ0Ioc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBMT0NBTExZX0VOUVVFVUVEIHx8XFxuIDg3NDpcXHRcXHRcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfSE9TVCB8fFxcbiA4NzU6XFx0XFx0XFx0XFx0XFx0ICAgIE5FSUdIX1ZBUihpbl9kZXYtXFx1MDAzZWFycF9wYXJtcywgUFJPWFlfREVMQVkpID09IDApIHtcXG4gODc2OlxcdFxcdFxcdFxcdFxcdFxcdGFycF9zZW5kX2RzdChBUlBPUF9SRVBMWSwgRVRIX1BfQVJQLFxcbiA4Nzc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaXAsIGRldiwgdGlwLCBzaGEsXFxuIDg3ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGRldi1cXHUwMDNlZGV2X2FkZHIsIHNoYSxcXG4gODc5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgcmVwbHlfZHN0KTtcXG4gODgwOlxcdFxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuIDg4MTpcXHRcXHRcXHRcXHRcXHRcXHRwbmVpZ2hfZW5xdWV1ZShcXHUwMDI2YXJwX3RibCxcXG4gODgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpbl9kZXYtXFx1MDAzZWFycF9wYXJtcywgc2tiKTtcXG4gODgzOlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfZHN0O1xcbiA4ODQ6XFx0XFx0XFx0XFx0XFx0fVxcbiA4ODU6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfY29uc3VtZV9za2I7XFxuIDg4NjpcXHRcXHRcXHRcXHR9XFxuIDg4NzpcXHRcXHRcXHR9XFxuIDg4ODpcXHRcXHR9XFxuIDg4OTpcXHRcXG4gODkwOlxcdFxcdC8qIFVwZGF0ZSBvdXIgQVJQIHRhYmxlcyAqL1xcbiA4OTE6XFx0XFxuIDg5MjpcXHRcXHRuID0gX19uZWlnaF9sb29rdXAoXFx1MDAyNmFycF90YmwsIFxcdTAwMjZzaXAsIGRldiwgMCk7XFxuIDg5MzpcXHRcXG4gODk0OlxcdFxcdGFkZHJfdHlwZSA9IC0xO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowNDo0MS44OTk4NDI1MzNaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI0MzkyNTgzMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIExvY2sgSW52ZXJzaW9uIGluIE5laWdoYm9yIFN1YnN5c3RlbSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTGluZSA4NzMgaW4gYG5ldC9pcHY0L2FycC5jYCBjYXVnaHQgbXkgYXR0ZW50aW9uLiBUaGUgYExPQ0FMTFlfRU5RVUVVRURgIGZsYWcgaW4gdGhlIEFSUCBjb250ZXh0IHByZXZlbnRzIHJlLWVucXVldWluZyBvZiB0aGUgKnNhbWUqIHBhY2tldC4gSG93ZXZlciwgSSdtIHRoaW5raW5nIGFib3V0IGJyb2FkZXIgaW1wbGljYXRpb25zOiBJUHY2LCBvdGhlciBwYWNrZXQgdHlwZXMsIG9yIGV2ZW4gbG9ja2RlcCBpdHNlbGYgZmxhZ2dpbmcgYSBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb24uIERpZ2dpbmcgZGVlcGVyLCBJIHNlZSBgX190aW1lcl9kZWxldGVfc3luY2AgdXNlcyBgbG9jYWxfaXJxX3NhdmVgIGFuZCBgbG9jYWxfaXJxX3Jlc3RvcmVgIHdpdGggYSBgbG9ja2RlcF9tYXBgLiBUaGUgaXNzdWU/IElmIGB0aW1lcl9kZWxldGVfc3luY2AgaXMgY2FsbGVkIHdoaWxlIGBwcm94eV90aW1lcl9sb2NrYCBpcyBoZWxkLCB0aGVuIHdlIGhhdmU6IGBwcm94eV90aW1lcl9sb2NrYCAtXHUwMDNlIGB0aW1lci1cdTAwM2Vsb2NrZGVwX21hcGAuIE5vdywgKmluc2lkZSogdGhlIHRpbWVyIGNhbGxiYWNrLCBgdGltZXItXHUwMDNlbG9ja2RlcF9tYXBgIGlzICphbHNvKiBoZWxkLiBJZiB0aGUgY2FsbGJhY2sgYXR0ZW1wdHMgdG8gYWNxdWlyZSBgcHJveHlfdGltZXJfbG9ja2AsIGxvY2tkZXAgd2lsbCAqaW1tZWRpYXRlbHkqIHNjcmVhbSBhYm91dCBhIGNpcmN1bGFyIGRlcGVuZGVuY3khIEEgbG9jayBpbnZlcnNpb24hIFdoYXQgaWYgc29tZSBvdGhlciB0aHJlYWQgY2FsbHMgYHBuZWlnaF9lbnF1ZXVlYCBmcm9tIHdpdGhpbiBhIHRpbWVyLCBuZXRmaWx0ZXIgaG9vaywgb3IgZXZlbiBwYWNrZXQgcmVjZXB0aW9uP1xuXG5UaGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlOiBjb3JlIG5ldHdvcmtpbmcgc3luY2hyb25pemF0aW9uLiBBIG5ldyBzcGlubG9jaywgYHByb3h5X3RpbWVyX2xvY2tgLCBpcyBhZGRlZCB0byBgc3RydWN0IG5laWdoX3RhYmxlYC4gSXQncyBhY3F1aXJlZCBpbiBgcG5laWdoX2VucXVldWVgIGFuZCBgX19uZWlnaF9pZmRvd25gLiBgdGltZXJfZGVsZXRlX3N5bmNgIGlzIGNhbGxlZCB1bmRlciBgcHJveHlfdGltZXJfbG9ja2AuIFRoaXMgaXMgcmlwZSBmb3IgZnV6emluZy4gSXQncyBlYXNpbHkgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIG9wZXJhdGlvbnMsIHZpcnR1YWwgZGV2aWNlcyAodHVuL3RhcCwgdmV0aCwgbG9vcGJhY2spLCByb3V0ZSBjb25maWd1cmF0aW9uLCBuZXRsaW5rLCBBUlAvTkQgdHJhZmZpYywgYW5kIGxpbmsgc3RhdGUgY2hhbmdlcyAoYGlwIGxpbmsgc2V0IC4uLiB1cC9kb3duYCkuXG5cbmBXb3J0aEZ1enppbmdgPyBBYnNvbHV0ZWx5LCBgdHJ1ZWAuXG5cbkxldCdzIGxvb2sgYXQgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIGBDT05GSUdfTkVUYCBpcyBlc3NlbnRpYWwsIGFuZCBgQ09ORklHX0lORVRgIGlzIGFsc28gbmVlZGVkIGJlY2F1c2UgYHBuZWlnaF9lbnF1ZXVlYCBpcyB1c2VkIGJ5IElQdjQgQVJQIChgQ09ORklHX0lORVRgKSBhbmQgSVB2NiBORCAoYENPTkZJR19JUFY2YCkuIFRoZSBuZWlnaGJvciBzdWJzeXN0ZW0gaXMgcGFydCBvZiBjb3JlIG5ldHdvcmtpbmcgKGBDT05GSUdfTkVUYCkuIE5vIG90aGVyIHNwZWNpZmljIGNvbmZpZ3MgYXBwZWFyIGNyaXRpY2FsIGF0IHRoaXMgcG9pbnQuIFNvIHRoZSBzZXQgb2YgcmVxdWlyZWQgY29uZmlnIG9wdGlvbnMgYXJlOiBgW1wiTkVUXCIsIFwiSU5FVFwiLCBcIklQVjZcIl1gIG9yIGBbXCJORVRcIiwgXCJJTkVUXCJdYCAuXG5cbkFzIGZvciBgRm9jdXNTeW1ib2xzYCwgSSd2ZSBpZGVudGlmaWVkIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBwbmVpZ2hfZW5xdWV1ZWAsIGBuZWlnaF9pZmRvd25gICh3aGljaCBjYWxscyBgX19uZWlnaF9pZmRvd25gKSwgYG5laWdoX2NhcnJpZXJfZG93bmAgKHdoaWNoIGFsc28gY2FsbHMgYF9fbmVpZ2hfaWZkb3duYCksIGBfX25laWdoX2lmZG93bmAgKHRoZSBhY3R1YWwgbW9kaWZpZWQgZnVuY3Rpb24pLCBgbmVpZ2hfcHJveHlfcHJvY2Vzc2AgKHRoZSB0aW1lciBjYWxsYmFjayksIGFuZCBgcG5laWdoX3F1ZXVlX3B1cmdlYCAoY2FsbGVkIGJlZm9yZSBgdGltZXJfZGVsZXRlX3N5bmNgKS5cblxuSSd2ZSB2ZXJpZmllZCB0aGVzZSBzeW1ib2xzIGV4aXN0IGluIHRoZSBrZXJuZWwgYW5kIGFyZSBhbGwgZXhwb3J0ZWQsIG9yIGluIHRoZSBjYXNlIG9mIGBfX25laWdoX2lmZG93bmAsIHN0YXRpYy4gTm9uZSBvZiB0aGVtIGFyZSB1YmlxdWl0b3VzLCBtZWFuaW5nIG5vdCBtZW1vcnkgYWxsb2NhdG9ycywgY29yZSBzY2hlZHVsZXIsIG9yIGdlbmVyYWwgbG9jayBwcmltaXRpdmVzLiBUaGV5IGFyZSBzcGVjaWZpYyB0byBuZWlnaGJvciBwcm94eSB0aW1lcnMgYW5kIGludGVyZmFjZSBkb3duIGV2ZW50cyBpbiB0aGUgbmVpZ2hib3Igc3Vic3lzdGVtLlxuXG5GaW5hbGx5LCBJJ3ZlIGRvdWJsZS1jaGVja2VkIGV2ZXJ5dGhpbmcgYWdhaW5zdCB0aGUgaW5zdHJ1Y3Rpb25zOiBJJ2xsIHVzZSBgc2V0LXJlc3VsdHNgIHRvIHByb3ZpZGUgdGhlIGFuYWx5c2lzLCBpdCBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSwgYFdvcnRoRnV6emluZ2AgaXMgdHJ1ZSwgdGhlIGBSZWFzb25pbmdgIGlzIGNvbmNpc2UsIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgc3BlY2lmaWMsIG5vbi11YmlxdWl0b3VzLCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgc3BlY2lmaWVkLlxuXG5JIGFtIGNvbmZpZGVudC5cbmBgYGpzb25cbntcblwiV29ydGhGdXp6aW5nXCI6IHRydWUsXG5cIlJlYXNvbmluZ1wiOiBcIkludHJvZHVjdGlvbiBvZiBwcm94eV90aW1lcl9sb2NrIGluIG5ldC9jb3JlL25laWdoYm91ci5jIGNyZWF0ZXMgcG90ZW50aWFsIGxvY2sgaW52ZXJzaW9uIGlzc3VlcyB3aGVuIHBuZWlnaF9lbnF1ZXVlIG9yIHRpbWVyIGNhbGxiYWNrcyBhY3F1aXJlIHRoZSBzYW1lIGxvY2tcIixcblwiRm9jdXNTeW1ib2xzXCI6IFtcblwicG5laWdoX2VucXVldWVcIixcblwibmVpZ2hfaWZkb3duXCIsXG5cIm5laWdoX2NhcnJpZXJfZG93blwiLFxuXCJfX25laWdoX2lmZG93blwiLFxuXCJuZWlnaF9wcm94eV9wcm9jZXNzXCIsXG5cInBuZWlnaF9xdWV1ZV9wdXJnZVwiXG5dLFxuXCJFbmFibGVDb25maWdzXCI6IFtcblwiTkVUXCIsXG5cIklORVRcIixcblwiSVBWNlwiXG5dXG59XG5gYGBcblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NTEsIk91dHB1dFRva2VucyI6MjEzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDU6MDQuMzM5MTAzNjA1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNTU1OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwbmVpZ2hfZW5xdWV1ZVwiLFxuICAgIFwiX19uZWlnaF9pZmRvd25cIixcbiAgICBcIm5laWdoX2lmZG93blwiLFxuICAgIFwibmVpZ2hfY2Fycmllcl9kb3duXCIsXG4gICAgXCJuZWlnaF9wcm94eV9wcm9jZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgbmVpZ2hib3VyIHN1YnN5c3RlbSAobmV0L2NvcmUvbmVpZ2hib3VyLmMgYW5kIGluY2x1ZGUvbmV0L25laWdoYm91ci5oKS4gSXQgaW50cm9kdWNlcyBhIG5ldyBzcGlubG9jaywgcHJveHlfdGltZXJfbG9jaywgdG8gc2VyaWFsaXplIHByb3h5IHRpbWVyIHJlYXJtaW5nIGluIHBuZWlnaF9lbnF1ZXVlIHdpdGggcXVldWUgcHVyZ2luZyBhbmQgdGltZXJfZGVsZXRlX3N5bmMgaW4gX19uZWlnaF9pZmRvd24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHN0YW5kYXJkIG5ldGxpbmsvc3lzZnMgZGV2aWNlIHN0YXRlIG1hbmlwdWxhdGlvbiAoZS5nLiwgYnJpbmdpbmcgaW50ZXJmYWNlcyBkb3duKSBhbmQgcHJveHkgQVJQL05EIHBhY2tldCBoYW5kbGluZy4gRnV6emluZyB3aXRoIHN5emthbGxlciAoYW5kIGxvY2tkZXApIGlzIHdhcnJhbnRlZCB0byBkZXRlY3QgcG90ZW50aWFsIGxvY2sgaW52ZXJzaW9ucywgZGVhZGxvY2tzLCBhbmQgdGltZXIgc3luY2hyb25pemF0aW9uIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBuZWlnaF9lbnF1ZXVlXCIsXG4gICAgXCJfX25laWdoX2lmZG93blwiLFxuICAgIFwibmVpZ2hfaWZkb3duXCIsXG4gICAgXCJuZWlnaF9jYXJyaWVyX2Rvd25cIixcbiAgICBcIm5laWdoX3Byb3h5X3Byb2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gaW4gdGhlIGNvcmUgbmV0d29ya2luZyBuZWlnaGJvdXIgc3Vic3lzdGVtIChuZXQvY29yZS9uZWlnaGJvdXIuYyBhbmQgaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgpLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHNwaW5sb2NrLCBwcm94eV90aW1lcl9sb2NrLCB0byBzZXJpYWxpemUgcHJveHkgdGltZXIgcmVhcm1pbmcgaW4gcG5laWdoX2VucXVldWUgd2l0aCBxdWV1ZSBwdXJnaW5nIGFuZCB0aW1lcl9kZWxldGVfc3luYyBpbiBfX25laWdoX2lmZG93bi4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3RhbmRhcmQgbmV0bGluay9zeXNmcyBkZXZpY2Ugc3RhdGUgbWFuaXB1bGF0aW9uIChlLmcuLCBicmluZ2luZyBpbnRlcmZhY2VzIGRvd24pIGFuZCBwcm94eSBBUlAvTkQgcGFja2V0IGhhbmRsaW5nLiBGdXp6aW5nIHdpdGggc3l6a2FsbGVyIChhbmQgbG9ja2RlcCkgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb25zLCBkZWFkbG9ja3MsIGFuZCB0aW1lciBzeW5jaHJvbml6YXRpb24gcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjA1OjA0LjQ2MjY3MTM0NVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc2NjE3ODQ5ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowNTowNC40NjU1ODU3MDVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3NzY1ODg2NDA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGRlZGljYXRlZCBzcGlubG9jayAoYHByb3h5X3RpbWVyX2xvY2tgKSB0byBgc3RydWN0IG5laWdoX3RhYmxlYCBhbmQgdXNlcyBpdCB0byBzZXJpYWxpemUgcmVhcm1pbmcgb2YgYHRibC1cXHUwMDNlcHJveHlfdGltZXJgIHZpYSBgbW9kX3RpbWVyKClgIGluIGBwbmVpZ2hfZW5xdWV1ZSgpYCB3aXRoIHF1ZXVlIHB1cmdpbmcgYW5kIHN5bmNocm9ub3VzIHRpbWVyIGRlbGV0aW9uIGluIGBfX25laWdoX2lmZG93bigpYC4gVGhlIG5ldyBsb2NrIGlzIGluaXRpYWxpemVkIHdpdGggYHNwaW5fbG9ja19pbml0KClgIGluIGBuZWlnaF90YWJsZV9pbml0KClgLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgcGVydGFpbiB0byBjb25jdXJyZW5jeSBjb250cm9sIGFuZCB0aW1lciBsaWZlY3ljbGUgbWFuYWdlbWVudC4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaOKAlHN1Y2ggYXMgbG9ja2luZyBvcmRlciBpbnZlcnNpb25zLCBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnPigJRhcmUgaGFuZGxlZCBieSBMT0NLREVQIGFuZCBLQVNBTi4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkgaXMgYWxsb2NhdGVkLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgYXJlIHJlYWQgb3IgYnJhbmNoZWQgdXBvbiwgYW5kIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiODZjNTRkMWU3MWY1MjJlZTNjNDk5NDA2Y2ViNWI1MzkyODNkNTc3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDk6MDE6MjQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaCBiL2luY2x1ZGUvbmV0L25laWdoYm91ci5oXG5pbmRleCA4ODYwY2MyMTc1ZmMxLi4xNTEwN2MwMGI0ZGY0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmhcbisrKyBiL2luY2x1ZGUvbmV0L25laWdoYm91ci5oXG5AQCAtMjM5LDYgKzIzOSw4IEBAIHN0cnVjdCBuZWlnaF90YWJsZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRnY19saXN0O1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bWFuYWdlZF9saXN0O1xuIFx0c3BpbmxvY2tfdFx0XHRsb2NrO1xuK1x0LyogU2VyaWFsaXplcyBwcm94eSB0aW1lciByZWFybWluZyB3aXRoIHRlYXJkb3duLiAqL1xuK1x0c3BpbmxvY2tfdFx0XHRwcm94eV90aW1lcl9sb2NrO1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRsYXN0X3JhbmQ7XG4gXHRzdHJ1Y3QgbmVpZ2hfc3RhdGlzdGljc1x0X19wZXJjcHUgKnN0YXRzO1xuIFx0c3RydWN0IG5laWdoX2hhc2hfdGFibGUgX19yY3UgKm5odDtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZWlnaGJvdXIuYyBiL25ldC9jb3JlL25laWdoYm91ci5jXG5pbmRleCAxMzQ5YzBlZWRiNjQyLi4xZWE3OTRhNTQxZWZiIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmVpZ2hib3VyLmNcbisrKyBiL25ldC9jb3JlL25laWdoYm91ci5jXG5AQCAtNDcxLDEwICs0NzEsMTMgQEAgc3RhdGljIGludCBfX25laWdoX2lmZG93bihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vsb2NrKTtcbiBcbiBcdHBuZWlnaF9pZmRvd24odGJsLCBkZXYsIHNraXBfcGVybSk7XG4rXHQvKiBUaGUgY2FsbGJhY2sgZG9lcyBub3QgdGFrZSB0aGlzIGxvY2ssIHNvIHN5bmMgZGVsZXRpb24gY2FuIHdhaXQgZm9yIGl0LiAqL1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcbiBcdHBuZWlnaF9xdWV1ZV9wdXJnZShcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUsIGRldiA/IGRldl9uZXQoZGV2KSA6IE5VTEwsXG4gXHRcdFx0ICAgdGJsLVx1MDAzZWZhbWlseSk7XG4gXHRpZiAoc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZSkpXG4gXHRcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcik7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTcyOSw2ICsxNzMyLDcgQEAgdm9pZCBwbmVpZ2hfZW5xdWV1ZShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5laWdoX3Bhcm1zICpwLFxuIFx0TkVJR0hfQ0Ioc2tiKS1cdTAwM2VzY2hlZF9uZXh0ID0gc2NoZWRfbmV4dDtcbiBcdE5FSUdIX0NCKHNrYiktXHUwMDNlZmxhZ3MgfD0gTE9DQUxMWV9FTlFVRVVFRDtcbiBcbitcdHNwaW5fbG9ja19iaChcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XG4gXHRzcGluX2xvY2soXHUwMDI2dGJsLVx1MDAzZXByb3h5X3F1ZXVlLmxvY2spO1xuIFx0aWYgKHRpbWVyX2RlbGV0ZShcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXIpKSB7XG4gXHRcdGlmICh0aW1lX2JlZm9yZSh0YmwtXHUwMDNlcHJveHlfdGltZXIuZXhwaXJlcywgc2NoZWRfbmV4dCkpXG5AQCAtMTc0MCw2ICsxNzQ0LDcgQEAgdm9pZCBwbmVpZ2hfZW5xdWV1ZShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5laWdoX3Bhcm1zICpwLFxuIFx0cC1cdTAwM2VxbGVuKys7XG4gXHRtb2RfdGltZXIoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyLCBzY2hlZF9uZXh0KTtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZS5sb2NrKTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChwbmVpZ2hfZW5xdWV1ZSk7XG4gXG5AQCAtMTg1OCw2ICsxODYzLDcgQEAgdm9pZCBuZWlnaF90YWJsZV9pbml0KGludCBpbmRleCwgc3RydWN0IG5laWdoX3RhYmxlICp0YmwpXG4gXHRcdFdBUk5fT04odGJsLVx1MDAzZWVudHJ5X3NpemUgJSBORUlHSF9QUklWX0FMSUdOKTtcbiBcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnRibC1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcbiBcdG11dGV4X2luaXQoXHUwMDI2dGJsLVx1MDAzZXBoYXNoX2xvY2spO1xuIFxuIFx0SU5JVF9ERUZFUlJBQkxFX1dPUksoXHUwMDI2dGJsLVx1MDAzZWdjX3dvcmssIG5laWdoX3BlcmlvZGljX3dvcmspO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDU6MDQuNDY1NTg3OTU1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjcyOTA0NzgyMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZWlnaGJvdXJob29kIFRhYmxlIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgd2UncmUgZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsIGtlcm5lbCBtZW1vcnkgc2FmZXR5IGlzc3VlLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgKEtNU0FOKSBvciBpZiB0aGlzIGlzIGNvbmZpbmVkIHRvIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIChLQVNBTi9MT0NLREVQKS4gVGhlIGRpZmYgc2hvd3MgY2hhbmdlcyBpbiBgaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmhgIGFuZCBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgbXkgc3VzcGljaW9uLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSBhZGRpdGlvbiBvZiBhIGBzcGlubG9ja190IHByb3h5X3RpbWVyX2xvY2tgIHdpdGhpbiB0aGUgYHN0cnVjdCBuZWlnaF90YWJsZWAuIFRoZSBjb21tZW50IGV4cGxpY2l0bHkgc3RhdGVzIGl0cyBwdXJwb3NlOiBcIi8qIFNlcmlhbGl6ZXMgcHJveHkgdGltZXIgcmVhcm1pbmcgd2l0aCB0ZWFyZG93bi4gKi9cIi4gVGhpcyBzdWdnZXN0cyBzeW5jaHJvbml6YXRpb24gYXJvdW5kIGEgdGltZXIgdXNlZCBmb3IgcHJveHkgbmVpZ2hib3Vycywgd2hpY2ggaXMgYSBwcmV0dHkgY29tbW9uIHBhdHRlcm4gZm9yIHRoaXMgbmV0d29ya2luZyBjb2RlLlxuXG5JbiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYF9fbmVpZ2hfaWZkb3duYCB0byB0YWtlIGBzcGluX2xvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spYCBhcm91bmQgdGhlIGNhbGxzIHRvIGBwbmVpZ2hfcXVldWVfcHVyZ2UoKWAgYW5kIGB0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXIpYC4gVGhpcyBsb29rcyBsaWtlIHRoZXkncmUgbG9ja2luZyBkb3duIGFjY2VzcyB0byB0aGUgcHJveHkgdGltZXIgZHVyaW5nIGludGVyZmFjZSBkb3duIG9wZXJhdGlvbnMsIHdoaWNoIGlzIGdvb2QuIFNpbWlsYXJseSwgYHBuZWlnaF9lbnF1ZXVlYCBub3cgdGFrZXMgdGhhdCBzYW1lIGxvY2sgYXJvdW5kIHRoZSBxdWV1ZWluZy9yZWFybWluZyBvZiBgdGJsLVx1MDAzZXByb3h5X3RpbWVyYC4gVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IHJhY2UgY29uZGl0aW9ucyB3aGVuIGEgcHJveHkgZW50cnkgaXMgYWRkZWQsIG9yIGFuIGV4aXN0aW5nIHByb3h5IGVudHJ5IG5lZWRzIGl0cyB0aW1lciByZXNldC4gRmluYWxseSwgYG5laWdoX3RhYmxlX2luaXRgIG5vdyBpbml0aWFsaXplcyB0aGUgbG9jay5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIEknbGwgbmVlZCB0byByZWFkIGFyb3VuZCBsaW5lcyA0NzEsIDE3MjksIGFuZCAxODU4IGluIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AgdXNpbmcgYHJlYWQtZmlsZWAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQ6XG4qICAgVGhlIG92ZXJhbGwgZnVuY3Rpb24gb2YgYG5laWdoX3RhYmxlX2luaXRgLiBXaGF0IGRhdGEgaXMgaW5pdGlhbGl6ZWQgaGVyZSBhbmQgaG93IG1pZ2h0IHRoaXMgYWZmZWN0IHRoZSBsb2NraW5nP1xuKiAgIFRoZSBleGFjdCBjb250cm9sIGZsb3cgb2YgYF9fbmVpZ2hfaWZkb3duYC4gV2hhdCBjYW4gaGFwcGVuIGR1cmluZyBgcG5laWdoX3F1ZXVlX3B1cmdlKClgIGFuZCBgdGltZXJfZGVsZXRlX3N5bmMoKWA/XG4qICAgQW5kIGZpbmFsbHksIGhvdyBgcG5laWdoX2VucXVldWVgIGlzIGNhbGxlZC4gV2hhdCBhcmUgdGhlIGNhbGxpbmcgY29udGV4dHMgYW5kIHdoYXQgY291bGQgY2F1c2UgcmFjZSBjb25kaXRpb25zIHdpdGggdGhlIHRpbWVyIGluIHRoYXQgZnVuY3Rpb24/XG5cbkJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiwgSSdsbCBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIGxvY2tpbmcgbG9naWMgaXMgc291bmQgYW5kIHRoZXJlIGFyZSBubyByZXNpZHVhbCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDU6MTEuNzU2MDY4ODE5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NjU6XFx0XFx0aWYgKGxpa2VseShkZXYpKSB7XFxuIDQ2NjpcXHRcXHRcXHRuZWlnaF9mbHVzaF9kZXYodGJsLCBkZXYsIHNraXBfcGVybSk7XFxuIDQ2NzpcXHRcXHR9IGVsc2Uge1xcbiA0Njg6XFx0XFx0XFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShza2lwX3Blcm0pO1xcbiA0Njk6XFx0XFx0XFx0bmVpZ2hfZmx1c2hfdGFibGUodGJsKTtcXG4gNDcwOlxcdFxcdH1cXG4gNDcxOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YmwtXFx1MDAzZWxvY2spO1xcbiA0NzI6XFx0XFxuIDQ3MzpcXHRcXHRwbmVpZ2hfaWZkb3duKHRibCwgZGV2LCBza2lwX3Blcm0pO1xcbiA0NzQ6XFx0XFx0LyogVGhlIGNhbGxiYWNrIGRvZXMgbm90IHRha2UgdGhpcyBsb2NrLCBzbyBzeW5jIGRlbGV0aW9uIGNhbiB3YWl0IGZvciBpdC4gKi9cXG4gNDc1OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcXG4gNDc2OlxcdFxcdHBuZWlnaF9xdWV1ZV9wdXJnZShcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV9xdWV1ZSwgZGV2ID8gZGV2X25ldChkZXYpIDogTlVMTCxcXG4gNDc3OlxcdFxcdFxcdFxcdCAgIHRibC1cXHUwMDNlZmFtaWx5KTtcXG4gNDc4OlxcdFxcdGlmIChza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUpKVxcbiA0Nzk6XFx0XFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXIpO1xcbiA0ODA6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XFxuIDQ4MTpcXHRcXHRyZXR1cm4gMDtcXG4gNDgyOlxcdH1cXG4gNDgzOlxcdFxcbiA0ODQ6XFx0aW50IG5laWdoX2NhcnJpZXJfZG93bihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gNDg1OlxcdHtcXG4gNDg2OlxcdFxcdF9fbmVpZ2hfaWZkb3duKHRibCwgZGV2LCB0cnVlKTtcXG4gNDg3OlxcdFxcdHJldHVybiAwO1xcbiA0ODg6XFx0fVxcbiA0ODk6XFx0XFxuIDQ5MDpcXHRpbnQgbmVpZ2hfaWZkb3duKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiA0OTE6XFx0e1xcbiA0OTI6XFx0XFx0X19uZWlnaF9pZmRvd24odGJsLCBkZXYsIGZhbHNlKTtcXG4gNDkzOlxcdFxcdHJldHVybiAwO1xcbiA0OTQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowNToxMS43NTYzMDE5NjlaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzAwNTQ0ODQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2Ugc2VjdGlvbnMgb2YgYG5ldC9jb3JlL25laWdoYm91ci5jYDpcblxuKipEZWVwIERpdmUgb24gTmVpZ2hib3VyIERpc2NvdmVyeSoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBjaXJjbGUgYmFjayBhbmQgcmVhbGx5IHNjcnV0aW5pemUgbGluZXMgMTcyMC0xNzYwIGFuZCAxODUwLTE4NzUgb2YgYG5ldC9jb3JlL25laWdoYm91ci5jYC4gVGhlc2UgYXJlIGxpa2VseSBjcnVjaWFsIGFyZWFzIGRlYWxpbmcgd2l0aCBuZWlnaGJvdXIgZGlzY292ZXJ5LCB3aGljaCwgYXMgd2Uga25vdywgaXMgYWJzb2x1dGVseSBmdW5kYW1lbnRhbCB0byBob3cgSVAgbmV0d29ya2luZyBvcGVyYXRlcyBhdCB0aGUgbGluayBsYXllci4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgMTcyMC0xNzYwIHByb2JhYmx5IGhhbmRsZXMgZWl0aGVyIHRoZSByZXNvbHV0aW9uIGl0c2VsZiBvciBwZXJoYXBzIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgY2FjaGUgbWFuYWdlbWVudC4gV2UncmUgdGFsa2luZyBhYm91dCB0aGUgY29yZSBsb2dpYyB0aGF0IGZpZ3VyZXMgb3V0IHRoZSBNQUMgYWRkcmVzcyBjb3JyZXNwb25kaW5nIHRvIGFuIElQIGFkZHJlc3MsIG9yIGl0IGhhcyB0byBkbyB3aXRoIGhvdyB0aGUgZW50cmllcyBhcmUgcHV0IGludG8gdGhlIEFSUCBjYWNoZS4gVW5kZXJzdGFuZGluZyB0aGF0IGludGVyYWN0aW9uIGlzIGFic29sdXRlbHkga2V5IHRvIG9wdGltaXphdGlvbi4gVGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyB0aGVyZSBhcmUgaHVnZSAtIGEgcG9vcmx5IGltcGxlbWVudGVkIG5laWdoYm91ciBkaXNjb3ZlcnkgYWxnb3JpdGhtIGNhbiBjcmlwcGxlIG5ldHdvcmsgdGhyb3VnaHB1dCBhbmQgbGF0ZW5jeS5cblxuVGhlbiwgdGhlIHNlY29uZCBzZWN0aW9uLCAxODUwLTE4NzUsIHRoYXQncyBwcm9iYWJseSByZWxhdGVkIHRvIGhhbmRsaW5nIG5laWdoYm9yIHN0YXRlcyBvciB0aGVpciB0aW1lZCBleHBpcmF0aW9uIHdpdGhpbiB0aGUgY2FjaGUuIE1heWJlIGl0J3MgYWJvdXQgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBwcm9jZXNzZXMuIElzIGl0IGRlYWxpbmcgd2l0aCByZXRyaWVzLCB0aW1lb3V0cywgb3IgaW52YWxpZGF0aW9uIG9mIHN0YWxlIGVudHJpZXM/IEtub3dpbmcgaG93IGl0IGRlYWxzIHdpdGggdGhlc2UgcG90ZW50aWFsbHkgZXJyb3ItcHJvbmUgc2NlbmFyaW9zIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBrZXJuZWwncyBvdmVyYWxsIHJvYnVzdG5lc3MuIEkgbmVlZCB0byBzZWUgaG93IGl0J3MgZGVhbGluZyB3aXRoIGNvbmZsaWN0aW5nIGVudHJpZXMgb3IgcmFwaWRseSBjaGFuZ2luZyBuZXR3b3JrIHRvcG9sb2dpZXMuIFRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSByb3V0aW5nIGNhY2hlIGlzIGFub3RoZXIga2V5IGl0ZW0gdGhhdCBjYW4ndCBiZSBvdmVybG9va2VkLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGluZWZmaWNpZW50IGxvY2tpbmcgbWVjaGFuaXNtcywgb3IgZXhjZXNzaXZlIGNvbnRleHQgc3dpdGNoZXMgd2l0aGluIHRob3NlIHNlZ21lbnRzLiBJIGV4cGVjdCB0aGUgY29kZSBpcyBjYXJlZnVsbHkgb3B0aW1pemVkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyZSBjb21wbGV0ZWx5LiBMZXQncyBzZWUgaWYgdGhlIGNvZGUgY29tbWVudHMgYXJlIHN1ZmZpY2llbnQgb3IgaWYgSSBoYXZlIHRvIHRyYWNlIHRocm91Z2ggbW9yZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3IgY29tcGxldGVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA4OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDU6MTQuNzYxNzUzNzA0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzIwOlxcdH1cXG4xNzIxOlxcdFxcbjE3MjI6XFx0dm9pZCBwbmVpZ2hfZW5xdWV1ZShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5laWdoX3Bhcm1zICpwLFxcbjE3MjM6XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuMTcyNDpcXHR7XFxuMTcyNTpcXHRcXHR1bnNpZ25lZCBsb25nIHNjaGVkX25leHQgPSBuZWlnaF9wcm94eV9kZWxheShwKTtcXG4xNzI2OlxcdFxcbjE3Mjc6XFx0XFx0aWYgKHAtXFx1MDAzZXFsZW4gXFx1MDAzZSBORUlHSF9WQVIocCwgUFJPWFlfUUxFTikpIHtcXG4xNzI4OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjE3Mjk6XFx0XFx0XFx0cmV0dXJuO1xcbjE3MzA6XFx0XFx0fVxcbjE3MzE6XFx0XFxuMTczMjpcXHRcXHRORUlHSF9DQihza2IpLVxcdTAwM2VzY2hlZF9uZXh0ID0gc2NoZWRfbmV4dDtcXG4xNzMzOlxcdFxcdE5FSUdIX0NCKHNrYiktXFx1MDAzZWZsYWdzIHw9IExPQ0FMTFlfRU5RVUVVRUQ7XFxuMTczNDpcXHRcXG4xNzM1OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcXG4xNzM2OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV9xdWV1ZS5sb2NrKTtcXG4xNzM3OlxcdFxcdGlmICh0aW1lcl9kZWxldGUoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXIpKSB7XFxuMTczODpcXHRcXHRcXHRpZiAodGltZV9iZWZvcmUodGJsLVxcdTAwM2Vwcm94eV90aW1lci5leHBpcmVzLCBzY2hlZF9uZXh0KSlcXG4xNzM5OlxcdFxcdFxcdFxcdHNjaGVkX25leHQgPSB0YmwtXFx1MDAzZXByb3h5X3RpbWVyLmV4cGlyZXM7XFxuMTc0MDpcXHRcXHR9XFxuMTc0MTpcXHRcXHRza2JfZHN0X2Ryb3Aoc2tiKTtcXG4xNzQyOlxcdFxcdGRldl9ob2xkKHNrYi1cXHUwMDNlZGV2KTtcXG4xNzQzOlxcdFxcdF9fc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUsIHNrYik7XFxuMTc0NDpcXHRcXHRwLVxcdTAwM2VxbGVuKys7XFxuMTc0NTpcXHRcXHRtb2RfdGltZXIoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXIsIHNjaGVkX25leHQpO1xcbjE3NDY6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUubG9jayk7XFxuMTc0NzpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcXG4xNzQ4OlxcdH1cXG4xNzQ5OlxcdEVYUE9SVF9TWU1CT0wocG5laWdoX2VucXVldWUpO1xcbjE3NTA6XFx0XFxuMTc1MTpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZWlnaF9wYXJtcyAqbG9va3VwX25laWdoX3Bhcm1zKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLFxcbjE3NTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldCAqbmV0LCBpbnQgaWZpbmRleClcXG4xNzUzOlxcdHtcXG4xNzU0OlxcdFxcdHN0cnVjdCBuZWlnaF9wYXJtcyAqcDtcXG4xNzU1OlxcdFxcbjE3NTY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcXHUwMDI2dGJsLVxcdTAwM2VwYXJtc19saXN0LCBsaXN0KSB7XFxuMTc1NzpcXHRcXHRcXHRpZiAoKHAtXFx1MDAzZWRldiBcXHUwMDI2XFx1MDAyNiBwLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXggPT0gaWZpbmRleCBcXHUwMDI2XFx1MDAyNiBuZXRfZXEobmVpZ2hfcGFybXNfbmV0KHApLCBuZXQpKSB8fFxcbjE3NTg6XFx0XFx0XFx0ICAgICghcC1cXHUwMDNlZGV2IFxcdTAwMjZcXHUwMDI2ICFpZmluZGV4IFxcdTAwMjZcXHUwMDI2IG5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpKVxcbjE3NTk6XFx0XFx0XFx0XFx0cmV0dXJuIHA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjA1OjE0Ljc2MTk5MzkzNVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMjA3NzAwNDQ4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBDb2RlYmFzZSAtIEZvY3VzIG9uIGBuZWlnaF90YWJsZV9pbml0YCoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIGNvZGViYXNlLCBhbmQgSSB3YW50IHRvIHNoaWZ0IG15IGZvY3VzIG5vdy4gSSd2ZSBiZWVuIGNvbnNpZGVyaW5nIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSwgYnV0IGxldCdzIHpvb20gaW4gb24gYSBzcGVjaWZpYyBmdW5jdGlvbi4gSSdtIGdvaW5nIHRvIHR1cm4gbXkgYXR0ZW50aW9uIHRvIHRoZSBgbmVpZ2hfdGFibGVfaW5pdGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgYXJvdW5kIGxpbmUgMTg1MC4gSSBrbm93IHRoaXMgYXJlYSBwbGF5cyBhIGNyaXRpY2FsIHJvbGUgaW4gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBuZWlnaGJvciB0YWJsZSwgd2hpY2ggaXMga2V5IGZvciBbKmluc2VydCB5b3VyIGZpZWxkIG9mIGV4cGVydGlzZSwgZS5nLiwgcm91dGluZyBwcm90b2NvbHMsIG5ldHdvcmsgYWRkcmVzcyByZXNvbHV0aW9uLCBkaXN0cmlidXRlZCBjb25zZW5zdXMsIGV0Yy4qXS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhhdCdzIGJlaW5nIHNldCB1cCBpbiB0aGlzIGltcGxlbWVudGF0aW9uLiBJIGhhdmUgdG8gc2VlIGhvdyBpdCdzIGRvbmUgc28gSSBjYW4gYXNzZXNzIGl0cyBlZmZpY2llbmN5LCBzY2FsYWJpbGl0eSwgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGFsZ29yaXRobXMgZW1wbG95ZWQgd2l0aGluIGl0LCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBJJ20gZGlnZ2luZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIzMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDU6MjYuODM5MDAxMDM3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODUwOlxcdFxcbjE4NTE6XFx0XFx0UkNVX0lOSVRfUE9JTlRFUih0YmwtXFx1MDAzZW5odCwgbmVpZ2hfaGFzaF9hbGxvYygzKSk7XFxuMTg1MjpcXHRcXG4xODUzOlxcdFxcdHBoc2l6ZSA9IChQTkVJR0hfSEFTSE1BU0sgKyAxKSAqIHNpemVvZihzdHJ1Y3QgcG5laWdoX2VudHJ5ICopO1xcbjE4NTQ6XFx0XFx0dGJsLVxcdTAwM2VwaGFzaF9idWNrZXRzID0ga3phbGxvYyhwaHNpemUsIEdGUF9LRVJORUwpO1xcbjE4NTU6XFx0XFxuMTg1NjpcXHRcXHRpZiAoIXRibC1cXHUwMDNlbmh0IHx8ICF0YmwtXFx1MDAzZXBoYXNoX2J1Y2tldHMpXFxuMTg1NzpcXHRcXHRcXHRwYW5pYyhcXFwiY2Fubm90IGFsbG9jYXRlIG5laWdoYm91ciBjYWNoZSBoYXNoZXNcXFwiKTtcXG4xODU4OlxcdFxcbjE4NTk6XFx0XFx0aWYgKCF0YmwtXFx1MDAzZWVudHJ5X3NpemUpXFxuMTg2MDpcXHRcXHRcXHR0YmwtXFx1MDAzZWVudHJ5X3NpemUgPSBBTElHTihvZmZzZXRvZihzdHJ1Y3QgbmVpZ2hib3VyLCBwcmltYXJ5X2tleSkgK1xcbjE4NjE6XFx0XFx0XFx0XFx0XFx0XFx0dGJsLVxcdTAwM2VrZXlfbGVuLCBORUlHSF9QUklWX0FMSUdOKTtcXG4xODYyOlxcdFxcdGVsc2VcXG4xODYzOlxcdFxcdFxcdFdBUk5fT04odGJsLVxcdTAwM2VlbnRyeV9zaXplICUgTkVJR0hfUFJJVl9BTElHTik7XFxuMTg2NDpcXHRcXG4xODY1OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ0YmwtXFx1MDAzZWxvY2spO1xcbjE4NjY6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XFxuMTg2NzpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZ0YmwtXFx1MDAzZXBoYXNoX2xvY2spO1xcbjE4Njg6XFx0XFxuMTg2OTpcXHRcXHRJTklUX0RFRkVSUkFCTEVfV09SSyhcXHUwMDI2dGJsLVxcdTAwM2VnY193b3JrLCBuZWlnaF9wZXJpb2RpY193b3JrKTtcXG4xODcwOlxcdFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50X3dxLCBcXHUwMDI2dGJsLVxcdTAwM2VnY193b3JrLFxcbjE4NzE6XFx0XFx0XFx0XFx0dGJsLVxcdTAwM2VwYXJtcy5yZWFjaGFibGVfdGltZSk7XFxuMTg3MjpcXHRcXHRJTklUX0RFRkVSUkFCTEVfV09SSyhcXHUwMDI2dGJsLVxcdTAwM2VtYW5hZ2VkX3dvcmssIG5laWdoX21hbmFnZWRfd29yayk7XFxuMTg3MzpcXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSwgXFx1MDAyNnRibC1cXHUwMDNlbWFuYWdlZF93b3JrLCAwKTtcXG4xODc0OlxcdFxcbjE4NzU6XFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXIsIG5laWdoX3Byb3h5X3Byb2Nlc3MsIDApO1xcbjE4NzY6XFx0XFx0c2tiX3F1ZXVlX2hlYWRfaW5pdF9jbGFzcyhcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV9xdWV1ZSxcXG4xODc3OlxcdFxcdFxcdFxcdFxcdTAwMjZuZWlnaF90YWJsZV9wcm94eV9xdWV1ZV9jbGFzcyk7XFxuMTg3ODpcXHRcXG4xODc5OlxcdFxcdHRibC1cXHUwMDNlbGFzdF9mbHVzaCA9IG5vdztcXG4xODgwOlxcdFxcdHRibC1cXHUwMDNlbGFzdF9yYW5kXFx0PSBub3cgKyB0YmwtXFx1MDAzZXBhcm1zLnJlYWNoYWJsZV90aW1lICogMjA7XFxuMTg4MTpcXHRcXG4xODgyOlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihuZWlnaF90YWJsZXNbaW5kZXhdLCB0YmwpO1xcbjE4ODM6XFx0fVxcbjE4ODQ6XFx0XFxuMTg4NTpcXHQvKlxcbjE4ODY6XFx0ICogT25seSBjYWxsZWQgZnJvbSBuZGlzY19jbGVhbnVwKCksIHdoaWNoIG1lYW5zIHRoaXMgaXMgZGVhZCBjb2RlXFxuMTg4NzpcXHQgKiBiZWNhdXNlIHdlIG5vIGxvbmdlciBjYW4gdW5sb2FkIElQdjYgbW9kdWxlLlxcbjE4ODg6XFx0ICovXFxuMTg4OTpcXHRpbnQgbmVpZ2hfdGFibGVfY2xlYXIoaW50IGluZGV4LCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDU6MjYuODM5MjY1OTI3WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ2Mzc0NDAzNTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbiBpbiB0aGUgTmVpZ2hib3IgU3Vic3lzdGVtKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBuYXN0eSBjb25jdXJyZW5jeSBidWcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIG5laWdoYm9yIHN1YnN5c3RlbSdzIGhhbmRsaW5nIG9mIHByb3h5IHRpbWVycyB3aGVuIGEgbmV0d29yayBpbnRlcmZhY2UgZ29lcyBkb3duLiBUaGUgY29yZSBpc3N1ZSwgZnJvbSB3aGF0IEknbSBnYXRoZXJpbmcsIHJldm9sdmVzIGFyb3VuZCBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYF9fbmVpZ2hfaWZkb3duYCBhbmQgYHBuZWlnaF9lbnF1ZXVlYC4gSXQncyBhIGNsYXNzaWMgc2l0dWF0aW9uOiBgdGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyKWAgaW4gYF9fbmVpZ2hfaWZkb3duYCBjYW4gYmUgaW52b2tlZCBjb25jdXJyZW50bHkgd2l0aCBgcG5laWdoX2VucXVldWVgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBtb2RfdGltZXIoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyLCBzY2hlZF9uZXh0KWAuIFRoZSBjb21tZW50IGhpZ2hsaWdodHMgdGhpczogYC8qIFRoZSBjYWxsYmFjayBkb2VzIG5vdCB0YWtlIHRoaXMgbG9jaywgc28gc3luYyBkZWxldGlvbiBjYW4gd2FpdCBmb3IgaXQuICovYC5cblxuU28sIHRoZSBwcm9ibGVtYXRpYyBzZXF1ZW5jZSBpcyB0aGF0IGlmIGB0aW1lcl9kZWxldGVfc3luY2AgcnVucyB3aGlsZSBgcG5laWdoX2VucXVldWVgIGlzIGFjdGl2ZWx5IG1vZGlmeWluZyB0aGUgdGltZXIsIGBwbmVpZ2hfZW5xdWV1ZWAgbWlnaHQgcG90ZW50aWFsbHkgcmUtYXJtIHRoZSB0aW1lciAqYWZ0ZXIqIG9yIGV2ZW4gKmR1cmluZyogdGhlIHRlYXJkb3duIHByb2Nlc3MgaW5pdGlhdGVkIGJ5IGBfX25laWdoX2lmZG93bmAuIFRoaXMgY3JlYXRlcyB0aGUgcG90ZW50aWFsIGZvciBhIHVzZS1hZnRlci1mcmVlIG9yIGEgcmFjZSBjb25kaXRpb24sIGxlYWRpbmcgdG8gaW5zdGFiaWxpdHkgd2hlbiB0aGUgZGV2aWNlIGlzIHRha2VuIGRvd24uXG5cbkxldCdzIGRpc3NlY3QgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIGluIHRoZSB0d28gZnVuY3Rpb25zLiBJbiBgX19uZWlnaF9pZmRvd25gLCB3ZSBoYXZlIGBzcGluX2xvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO2AgZm9sbG93ZWQgYnkgYHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcik7YCBhbmQgZmluYWxseSwgYHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtgLiBUaGlzIGlzIGludGVuZGVkIHRvIHByb3RlY3QgdGhlIHRpbWVyIGZyb20gY29uY3VycmVudCBtb2RpZmljYXRpb24gZHVyaW5nIGRlbGV0aW9uLiBUaGVuLCBpbiBgcG5laWdoX2VucXVldWVgIHdlIHNlZSBgc3Bpbl9sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtgIGZvbGxvd2VkIGJ5IGBtb2RfdGltZXIoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyLCBzY2hlZF9uZXh0KTtgIGFuZCwgYWZ0ZXIgc29tZSBvdGhlciBvcGVyYXRpb25zLCAgYHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtgLiBJbnRlcmVzdGluZ2x5LCB0aGUgYHByb3h5X3RpbWVyX2xvY2tgIHNwaW5sb2NrIGlzIGluaXRpYWxpemVkIHdpdGhpbiBgbmVpZ2hfdGFibGVfaW5pdCgpYCwgYXMgYHNwaW5fbG9ja19pbml0KFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtgLlxuXG5Ob3csIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgdmVjdG9ycy4gSSdsbCBtZW50YWxseSBydW4gdGhyb3VnaCBteSB1c3VhbCBjaGVja3M6XG5cbjEuICAqKlVzZXItU3BhY2UgRXhwb3N1cmU6KiogRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZyBjb3VsZCBiZSBhIHByb2JsZW0/IE5vcGUsIG5vdGhpbmcgaXMgZ29pbmcgdG8gdXNlciBzcGFjZS5cbjIuICAqKkNvbmRpdGlvbmFsIExvZ2ljOioqIEFyZSB0aGVyZSBhbnkgbmV3IGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9yIGxvZ2ljIGludHJvZHVjZWQgdGhhdCBkZXBlbmQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcz8gTm8uXG4zLiAgKipEYXRhIFN0cnVjdHVyZSBJbml0aWFsaXphdGlvbjoqKiBJcyB0aGVyZSBhbnkgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyIG9uIHJlYWNoYWJsZSBjb2RlIHBhdGhzPyBJdCBkb2Vzbid0IGFwcGVhciBzbzsgYSBuZXcgYHByb3h5X3RpbWVyX2xvY2tgIHNwaW5sb2NrIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBgbmVpZ2hfdGFibGVgIHN0cnVjdHVyZS4gVGhhdCdzIGEgbmV3IGZpZWxkLiBUaGlzIGxvY2sgaXMgaW5pdGlhbGl6ZWQgaW4gYG5laWdoX3RhYmxlX2luaXQoKWAuIFRoZSBgbmVpZ2hfdGFibGVgIHN0cnVjdHVyZSBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIHN0cnVjdHVyZS5cblxuT2theSwgc28gdGhlIHBvdGVudGlhbCBidWcgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBgbmVpZ2hfdGFibGVgIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgd2hlcmUgYG5laWdoX3RhYmxlX2luaXRgIGlzIGNhbGxlZCBvciB3aGVyZSBgbmVpZ2hfdGFibGVgIGlzIGFsbG9jYXRlZC4gTGV0IG1lIGZpbmQgd2hlcmUgYG5laWdoX3RhYmxlYCBpcyBhbGxvY2F0ZWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMDUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowNjoxMy4yMTM2NzM5WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQ2NjMxMzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5laWdoX3RhYmxlX2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmg9MzMzPXN0YXRpYyBpbmxpbmUgdm9pZCBuZWlnaF9jb25maXJtKHN0cnVjdCBuZWlnaGJvdXIgKm4pXFxuLS1cXG5pbmNsdWRlL25ldC9uZWlnaGJvdXIuaC0zNDMtXFxuaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmg6MzQ0OnZvaWQgbmVpZ2hfdGFibGVfaW5pdChpbnQgaW5kZXgsIHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsKTtcXG5pbmNsdWRlL25ldC9uZWlnaGJvdXIuaC0zNDUtaW50IG5laWdoX3RhYmxlX2NsZWFyKGludCBpbmRleCwgc3RydWN0IG5laWdoX3RhYmxlICp0YmwpO1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MTgyND1zdGF0aWMgc3RydWN0IG5laWdoX3RhYmxlIF9fcmN1ICpuZWlnaF90YWJsZXNbTkVJR0hfTlJfVEFCTEVTXSBfX3JlYWRfbW9zdGx5O1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTE4MjUtXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTgyNjp2b2lkIG5laWdoX3RhYmxlX2luaXQoaW50IGluZGV4LCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibClcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xODI3LXtcXG4tLVxcbm5ldC9pcHY0L2FycC5jPTE1MTQ9dm9pZCBfX2luaXQgYXJwX2luaXQodm9pZClcXG5uZXQvaXB2NC9hcnAuYy0xNTE1LXtcXG5uZXQvaXB2NC9hcnAuYzoxNTE2OlxcdG5laWdoX3RhYmxlX2luaXQoTkVJR0hfQVJQX1RBQkxFLCBcXHUwMDI2YXJwX3RibCk7XFxubmV0L2lwdjQvYXJwLmMtMTUxNy1cXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9MjAwNT1pbnQgX19pbml0IG5kaXNjX2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMjAxNC1cXHQgKi9cXG5uZXQvaXB2Ni9uZGlzYy5jOjIwMTU6XFx0bmVpZ2hfdGFibGVfaW5pdChORUlHSF9ORF9UQUJMRSwgXFx1MDAyNm5kX3RibCk7XFxubmV0L2lwdjYvbmRpc2MuYy0yMDE2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowNjoxNS43NjAzMTIzNTlaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjM2NDEwMzkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBLTVNBTiBOZWVkZWQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBwcmltYXJpbHkgZGVhbHMgd2l0aCBzeW5jaHJvbml6YXRpb24gYXJvdW5kIHRoZSBwcm94eSB0aW1lciB3aXRoaW4gdGhlIG5ldHdvcmsgbmVpZ2hib3IgdGFibGUuIFNwZWNpZmljYWxseSwgaXQncyBhZGRpbmcgYSBzcGlubG9jayAoYHByb3h5X3RpbWVyX2xvY2tgKSB0byB0aGUgYG5laWdoX3RhYmxlYCBzdHJ1Y3R1cmUgYW5kIGluaXRpYWxpemluZyBpdC4gVGhpcyBsb2NrIHNlZW1zIHRvIGFkZHJlc3MgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHRoZSBgbW9kX3RpbWVyYCBjYWxsIGluIGBwbmVpZ2hfZW5xdWV1ZWAgYW5kIHRoZSBgdGltZXJfZGVsZXRlX3N5bmNgIGNhbGwgaW4gYF9fbmVpZ2hfaWZkb3duYC5cblxuTXkgYW5hbHlzaXMgaW5kaWNhdGVzIHRoYXQgdGhlIHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgYXJlIHJlbGF0ZWQgdG8gZGVhZGxvY2tzLCBsb2NraW5nIGlzc3VlcyAod2hpY2ggTE9DS0RFUCB3b3VsZCBjYXRjaCksIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBvciByYWNlIGNvbmRpdGlvbnMgKHdoaWNoIEtBU0FOIHdvdWxkIGRldGVjdCkuIFRoZSBjb2RlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQWxsIG9mIHRoZSBrZXkgc3RydWN0dXJlcyBhcmUgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQuIFRoZSBuZXcgc3BpbmxvY2sgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdXNpbmcgYHNwaW5fbG9ja19pbml0YC4gVGhlIHBhdGNoIGRvZXNuJ3QgY3JlYXRlIGFueSBvcHBvcnR1bml0aWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkIG9yIGV4cG9zZWQuXG5cblRoZXJlZm9yZSwgc2luY2UgS0FTQU4gYW5kIExPQ0tERVAgYXJlIGZ1bGx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoZSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCwgdGhlcmUncyBubyBuZWVkIGZvciBLTVNBTi4gSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBiZWNhdXNlIHRoZSBwYXRjaCdzIHByaW1hcnkgaW1wYWN0IHJldm9sdmVzIGFyb3VuZCBzeW5jaHJvbml6YXRpb24gYW5kIHRpbWVyIG1hbmFnZW1lbnQsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIFdlJ3JlIGdvb2QgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MzUsIk91dHB1dFRva2VucyI6MjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjA2OjIyLjEyNDQyMDcxM1oiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGRlZGljYXRlZCBzcGlubG9jayAoYHByb3h5X3RpbWVyX2xvY2tgKSB0byBgc3RydWN0IG5laWdoX3RhYmxlYCBhbmQgdXNlcyBpdCB0byBzZXJpYWxpemUgcmVhcm1pbmcgb2YgYHRibC1cXHUwMDNlcHJveHlfdGltZXJgIHZpYSBgbW9kX3RpbWVyKClgIGluIGBwbmVpZ2hfZW5xdWV1ZSgpYCB3aXRoIHF1ZXVlIHB1cmdpbmcgYW5kIHN5bmNocm9ub3VzIHRpbWVyIGRlbGV0aW9uIGluIGBfX25laWdoX2lmZG93bigpYC4gVGhlIG5ldyBsb2NrIGlzIGluaXRpYWxpemVkIHdpdGggYHNwaW5fbG9ja19pbml0KClgIGluIGBuZWlnaF90YWJsZV9pbml0KClgLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgcGVydGFpbiB0byBjb25jdXJyZW5jeSBjb250cm9sIGFuZCB0aW1lciBsaWZlY3ljbGUgbWFuYWdlbWVudC4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaOKAlHN1Y2ggYXMgbG9ja2luZyBvcmRlciBpbnZlcnNpb25zLCBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnPigJRhcmUgaGFuZGxlZCBieSBMT0NLREVQIGFuZCBLQVNBTi4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkgaXMgYWxsb2NhdGVkLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgYXJlIHJlYWQgb3IgYnJhbmNoZWQgdXBvbiwgYW5kIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZGVkaWNhdGVkIHNwaW5sb2NrIChgcHJveHlfdGltZXJfbG9ja2ApIHRvIGBzdHJ1Y3QgbmVpZ2hfdGFibGVgIGFuZCB1c2VzIGl0IHRvIHNlcmlhbGl6ZSByZWFybWluZyBvZiBgdGJsLVxcdTAwM2Vwcm94eV90aW1lcmAgdmlhIGBtb2RfdGltZXIoKWAgaW4gYHBuZWlnaF9lbnF1ZXVlKClgIHdpdGggcXVldWUgcHVyZ2luZyBhbmQgc3luY2hyb25vdXMgdGltZXIgZGVsZXRpb24gaW4gYF9fbmVpZ2hfaWZkb3duKClgLiBUaGUgbmV3IGxvY2sgaXMgaW5pdGlhbGl6ZWQgd2l0aCBgc3Bpbl9sb2NrX2luaXQoKWAgaW4gYG5laWdoX3RhYmxlX2luaXQoKWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBwZXJ0YWluIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgYW5kIHRpbWVyIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNo4oCUc3VjaCBhcyBsb2NraW5nIG9yZGVyIGludmVyc2lvbnMsIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9uc+KAlGFyZSBoYW5kbGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBObyBuZXcgdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgcmVhZCBvciBicmFuY2hlZCB1cG9uLCBhbmQgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfjcm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 08:10:58 +0000 UTC FinishedAt: 2026-09-14 09:06:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "INET", "IPV6" ], "series_id": "35bb18db-fd7a-49f4-ade7-2bcb060866e8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "pneigh_enqueue", "__neigh_ifdown", "neigh_ifdown", "neigh_carrier_down", "neigh_proxy_process" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "78445023439506ebd83b86d40b1e428a3b309d4a", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwbmVpZ2hfZW5xdWV1ZSYjMzQ7LAogICAgJiMzNDtfX25laWdoX2lmZG93biYjMzQ7LAogICAgJiMzNDtuZWlnaF9pZmRvd24mIzM0OywKICAgICYjMzQ7bmVpZ2hfY2Fycmllcl9kb3duJiMzNDssCiAgICAmIzM0O25laWdoX3Byb3h5X3Byb2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgZGVkaWNhdGVkIHNwaW5sb2NrIChgcHJveHlfdGltZXJfbG9ja2ApIHRvIGBzdHJ1Y3QgbmVpZ2hfdGFibGVgIGFuZCB1c2VzIGl0IHRvIHNlcmlhbGl6ZSByZWFybWluZyBvZiBgdGJsLVx1MDAzZXByb3h5X3RpbWVyYCB2aWEgYG1vZF90aW1lcigpYCBpbiBgcG5laWdoX2VucXVldWUoKWAgd2l0aCBxdWV1ZSBwdXJnaW5nIGFuZCBzeW5jaHJvbm91cyB0aW1lciBkZWxldGlvbiBpbiBgX19uZWlnaF9pZmRvd24oKWAuIFRoZSBuZXcgbG9jayBpcyBpbml0aWFsaXplZCB3aXRoIGBzcGluX2xvY2tfaW5pdCgpYCBpbiBgbmVpZ2hfdGFibGVfaW5pdCgpYC5cblxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBwZXJ0YWluIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgYW5kIHRpbWVyIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNo4oCUc3VjaCBhcyBsb2NraW5nIG9yZGVyIGludmVyc2lvbnMsIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9uc+KAlGFyZSBoYW5kbGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBObyBuZXcgdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgcmVhZCBvciBicmFuY2hlZCB1cG9uLCBhbmQgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gaW4gdGhlIGNvcmUgbmV0d29ya2luZyBuZWlnaGJvdXIgc3Vic3lzdGVtIChuZXQvY29yZS9uZWlnaGJvdXIuYyBhbmQgaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgpLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHNwaW5sb2NrLCBwcm94eV90aW1lcl9sb2NrLCB0byBzZXJpYWxpemUgcHJveHkgdGltZXIgcmVhcm1pbmcgaW4gcG5laWdoX2VucXVldWUgd2l0aCBxdWV1ZSBwdXJnaW5nIGFuZCB0aW1lcl9kZWxldGVfc3luYyBpbiBfX25laWdoX2lmZG93bi4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3RhbmRhcmQgbmV0bGluay9zeXNmcyBkZXZpY2Ugc3RhdGUgbWFuaXB1bGF0aW9uIChlLmcuLCBicmluZ2luZyBpbnRlcmZhY2VzIGRvd24pIGFuZCBwcm94eSBBUlAvTkQgcGFja2V0IGhhbmRsaW5nLiBGdXp6aW5nIHdpdGggc3l6a2FsbGVyIChhbmQgbG9ja2RlcCkgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb25zLCBkZWFkbG9ja3MsIGFuZCB0aW1lciBzeW5jaHJvbml6YXRpb24gcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiODZjNTRkMWU3MWY1MjJlZTNjNDk5NDA2Y2ViNWI1MzkyODNkNTc3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDk6MDE6MjQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmggYi9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaFxuaW5kZXggODg2MGNjMjE3NWZjMS4uMTUxMDdjMDBiNGRmNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25laWdoYm91ci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaFxuQEAgLTIzOSw2ICYjNDM7MjM5LDggQEAgc3RydWN0IG5laWdoX3RhYmxlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGdjX2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRtYW5hZ2VkX2xpc3Q7XG4gXHRzcGlubG9ja190XHRcdGxvY2s7XG4mIzQzO1x0LyogU2VyaWFsaXplcyBwcm94eSB0aW1lciByZWFybWluZyB3aXRoIHRlYXJkb3duLiAqL1xuJiM0MztcdHNwaW5sb2NrX3RcdFx0cHJveHlfdGltZXJfbG9jaztcbiBcdHVuc2lnbmVkIGxvbmdcdFx0bGFzdF9yYW5kO1xuIFx0c3RydWN0IG5laWdoX3N0YXRpc3RpY3NcdF9fcGVyY3B1ICpzdGF0cztcbiBcdHN0cnVjdCBuZWlnaF9oYXNoX3RhYmxlIF9fcmN1ICpuaHQ7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuY1xuaW5kZXggMTM0OWMwZWVkYjY0Mi4uMWVhNzk0YTU0MWVmYiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZWlnaGJvdXIuY1xuQEAgLTQ3MSwxMCAmIzQzOzQ3MSwxMyBAQCBzdGF0aWMgaW50IF9fbmVpZ2hfaWZkb3duKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZWxvY2spO1xuIFxuIFx0cG5laWdoX2lmZG93bih0YmwsIGRldiwgc2tpcF9wZXJtKTtcbiYjNDM7XHQvKiBUaGUgY2FsbGJhY2sgZG9lcyBub3QgdGFrZSB0aGlzIGxvY2ssIHNvIHN5bmMgZGVsZXRpb24gY2FuIHdhaXQgZm9yIGl0LiAqL1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XG4gXHRwbmVpZ2hfcXVldWVfcHVyZ2UoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3F1ZXVlLCBkZXYgPyBkZXZfbmV0KGRldikgOiBOVUxMLFxuIFx0XHRcdCAgIHRibC1cdTAwM2VmYW1pbHkpO1xuIFx0aWYgKHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUpKVxuIFx0XHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXIpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xNzI5LDYgJiM0MzsxNzMyLDcgQEAgdm9pZCBwbmVpZ2hfZW5xdWV1ZShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5laWdoX3Bhcm1zICpwLFxuIFx0TkVJR0hfQ0Ioc2tiKS1cdTAwM2VzY2hlZF9uZXh0ID0gc2NoZWRfbmV4dDtcbiBcdE5FSUdIX0NCKHNrYiktXHUwMDNlZmxhZ3MgfD0gTE9DQUxMWV9FTlFVRVVFRDtcbiBcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xuIFx0c3Bpbl9sb2NrKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZS5sb2NrKTtcbiBcdGlmICh0aW1lcl9kZWxldGUoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyKSkge1xuIFx0XHRpZiAodGltZV9iZWZvcmUodGJsLVx1MDAzZXByb3h5X3RpbWVyLmV4cGlyZXMsIHNjaGVkX25leHQpKVxuQEAgLTE3NDAsNiAmIzQzOzE3NDQsNyBAQCB2b2lkIHBuZWlnaF9lbnF1ZXVlKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmVpZ2hfcGFybXMgKnAsXG4gXHRwLVx1MDAzZXFsZW4mIzQzOyYjNDM7O1xuIFx0bW9kX3RpbWVyKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lciwgc2NoZWRfbmV4dCk7XG4gXHRzcGluX3VubG9jayhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUubG9jayk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHBuZWlnaF9lbnF1ZXVlKTtcbiBcbkBAIC0xODU4LDYgJiM0MzsxODYzLDcgQEAgdm9pZCBuZWlnaF90YWJsZV9pbml0KGludCBpbmRleCwgc3RydWN0IG5laWdoX3RhYmxlICp0YmwpXG4gXHRcdFdBUk5fT04odGJsLVx1MDAzZWVudHJ5X3NpemUgJSBORUlHSF9QUklWX0FMSUdOKTtcbiBcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnRibC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XG4gXHRtdXRleF9pbml0KFx1MDAyNnRibC1cdTAwM2VwaGFzaF9sb2NrKTtcbiBcbiBcdElOSVRfREVGRVJSQUJMRV9XT1JLKFx1MDAyNnRibC1cdTAwM2VnY193b3JrLCBuZWlnaF9wZXJpb2RpY193b3JrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cG5laWdoX2VucXVldWUmIzM0OywKICAgICYjMzQ7X19uZWlnaF9pZmRvd24mIzM0OywKICAgICYjMzQ7bmVpZ2hfaWZkb3duJiMzNDssCiAgICAmIzM0O25laWdoX2NhcnJpZXJfZG93biYjMzQ7LAogICAgJiMzNDtuZWlnaF9wcm94eV9wcm9jZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBpbiB0aGUgY29yZSBuZXR3b3JraW5nIG5laWdoYm91ciBzdWJzeXN0ZW0gKG5ldC9jb3JlL25laWdoYm91ci5jIGFuZCBpbmNsdWRlL25ldC9uZWlnaGJvdXIuaCkuIEl0IGludHJvZHVjZXMgYSBuZXcgc3BpbmxvY2ssIHByb3h5X3RpbWVyX2xvY2ssIHRvIHNlcmlhbGl6ZSBwcm94eSB0aW1lciByZWFybWluZyBpbiBwbmVpZ2hfZW5xdWV1ZSB3aXRoIHF1ZXVlIHB1cmdpbmcgYW5kIHRpbWVyX2RlbGV0ZV9zeW5jIGluIF9fbmVpZ2hfaWZkb3duLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzdGFuZGFyZCBuZXRsaW5rL3N5c2ZzIGRldmljZSBzdGF0ZSBtYW5pcHVsYXRpb24gKGUuZy4sIGJyaW5naW5nIGludGVyZmFjZXMgZG93bikgYW5kIHByb3h5IEFSUC9ORCBwYWNrZXQgaGFuZGxpbmcuIEZ1enppbmcgd2l0aCBzeXprYWxsZXIgKGFuZCBsb2NrZGVwKSBpcyB3YXJyYW50ZWQgdG8gZGV0ZWN0IHBvdGVudGlhbCBsb2NrIGludmVyc2lvbnMsIGRlYWRsb2NrcywgYW5kIHRpbWVyIHN5bmNocm9uaXphdGlvbiByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI4NmM1NGQxZTcxZjUyMmVlM2M0OTk0MDZjZWI1YjUzOTI4M2Q1NzcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAwOTowMToyNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25laWdoYm91ci5oIGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKaW5kZXggODg2MGNjMjE3NWZjMS4uMTUxMDdjMDBiNGRmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKQEAgLTIzOSw2ICYjNDM7MjM5LDggQEAgc3RydWN0IG5laWdoX3RhYmxlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWdjX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZAltYW5hZ2VkX2xpc3Q7CiAJc3BpbmxvY2tfdAkJbG9jazsKJiM0MzsJLyogU2VyaWFsaXplcyBwcm94eSB0aW1lciByZWFybWluZyB3aXRoIHRlYXJkb3duLiAqLwomIzQzOwlzcGlubG9ja190CQlwcm94eV90aW1lcl9sb2NrOwogCXVuc2lnbmVkIGxvbmcJCWxhc3RfcmFuZDsKIAlzdHJ1Y3QgbmVpZ2hfc3RhdGlzdGljcwlfX3BlcmNwdSAqc3RhdHM7CiAJc3RydWN0IG5laWdoX2hhc2hfdGFibGUgX19yY3UgKm5odDsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25laWdoYm91ci5jIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKaW5kZXggMTM0OWMwZWVkYjY0Mi4uMWVhNzk0YTU0MWVmYiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKQEAgLTQ3MSwxMCAmIzQzOzQ3MSwxMyBAQCBzdGF0aWMgaW50IF9fbmVpZ2hfaWZkb3duKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dGJsLSZndDtsb2NrKTsKIAogCXBuZWlnaF9pZmRvd24odGJsLCBkZXYsIHNraXBfcGVybSk7CiYjNDM7CS8qIFRoZSBjYWxsYmFjayBkb2VzIG5vdCB0YWtlIHRoaXMgbG9jaywgc28gc3luYyBkZWxldGlvbiBjYW4gd2FpdCBmb3IgaXQuICovCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3RibC0mZ3Q7cHJveHlfdGltZXJfbG9jayk7CiAJcG5laWdoX3F1ZXVlX3B1cmdlKCZhbXA7dGJsLSZndDtwcm94eV9xdWV1ZSwgZGV2ID8gZGV2X25ldChkZXYpIDogTlVMTCwKIAkJCSAgIHRibC0mZ3Q7ZmFtaWx5KTsKIAlpZiAoc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKCZhbXA7dGJsLSZndDtwcm94eV9xdWV1ZSkpCiAJCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7dGJsLSZndDtwcm94eV90aW1lcik7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7dGJsLSZndDtwcm94eV90aW1lcl9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTcyOSw2ICYjNDM7MTczMiw3IEBAIHZvaWQgcG5laWdoX2VucXVldWUoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZWlnaF9wYXJtcyAqcCwKIAlORUlHSF9DQihza2IpLSZndDtzY2hlZF9uZXh0ID0gc2NoZWRfbmV4dDsKIAlORUlHSF9DQihza2IpLSZndDtmbGFncyB8PSBMT0NBTExZX0VOUVVFVUVEOwogCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3RibC0mZ3Q7cHJveHlfdGltZXJfbG9jayk7CiAJc3Bpbl9sb2NrKCZhbXA7dGJsLSZndDtwcm94eV9xdWV1ZS5sb2NrKTsKIAlpZiAodGltZXJfZGVsZXRlKCZhbXA7dGJsLSZndDtwcm94eV90aW1lcikpIHsKIAkJaWYgKHRpbWVfYmVmb3JlKHRibC0mZ3Q7cHJveHlfdGltZXIuZXhwaXJlcywgc2NoZWRfbmV4dCkpCkBAIC0xNzQwLDYgJiM0MzsxNzQ0LDcgQEAgdm9pZCBwbmVpZ2hfZW5xdWV1ZShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5laWdoX3Bhcm1zICpwLAogCXAtJmd0O3FsZW4mIzQzOyYjNDM7OwogCW1vZF90aW1lcigmYW1wO3RibC0mZ3Q7cHJveHlfdGltZXIsIHNjaGVkX25leHQpOwogCXNwaW5fdW5sb2NrKCZhbXA7dGJsLSZndDtwcm94eV9xdWV1ZS5sb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyX2xvY2spOwogfQogRVhQT1JUX1NZTUJPTChwbmVpZ2hfZW5xdWV1ZSk7CiAKQEAgLTE4NTgsNiAmIzQzOzE4NjMsNyBAQCB2b2lkIG5laWdoX3RhYmxlX2luaXQoaW50IGluZGV4LCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCkKIAkJV0FSTl9PTih0YmwtJmd0O2VudHJ5X3NpemUgJSBORUlHSF9QUklWX0FMSUdOKTsKIAogCXNwaW5fbG9ja19pbml0KCZhbXA7dGJsLSZndDtsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyX2xvY2spOwogCW11dGV4X2luaXQoJmFtcDt0YmwtJmd0O3BoYXNoX2xvY2spOwogCiAJSU5JVF9ERUZFUlJBQkxFX1dPUksoJmFtcDt0YmwtJmd0O2djX3dvcmssIG5laWdoX3BlcmlvZGljX3dvcmspOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTMxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmVpZ2hib3VyIFN1YnN5c3RlbSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBuZWlnaGJvdXIgc3Vic3lzdGVtLiBJdCYjMzk7cyBtb2RpZnlpbmcgYGluY2x1ZGUvbmV0L25laWdoYm91ci5oYCBhbmQgYG5ldC9jb3JlL25laWdoYm91ci5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uLiBMZXQmIzM5O3MgZGlnIGluLgoKTG9va2luZyBhdCB0aGUgYGRpZmZgLCBhIG5ldyBzcGlubG9jaywgYHByb3h5X3RpbWVyX2xvY2tgLCBpcyBpbnRyb2R1Y2VkIHdpdGhpbiB0aGUgYG5laWdoX3RhYmxlYCBzdHJ1Y3R1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHByb3RlY3RpbmcgYWNjZXNzIHRvIHRoZSBwcm94eSB0aW1lciwgcGFydGljdWxhcmx5IGR1cmluZyBvcGVyYXRpb25zIHRoYXQgbWlnaHQgcmFjZSB3aXRoIHRpbWVyIGV4cGlyeSBvciBkZWxldGlvbi4gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgaXQmIzM5O3MgZm9yICYjMzQ7U2VyaWFsaXplcyBwcm94eSB0aW1lciByZWFybWluZyB3aXRoIHRlYXJkb3duLCYjMzQ7IHdoaWNoIGlzIGEgZ29vZCBjbHVlLgoKVGhlIGBfX25laWdoX2lmZG93bmAgZnVuY3Rpb24gaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYCwgYXJvdW5kIGxpbmUgNDcxLCBub3cgaW5jbHVkZXMgYSBsb2NrIGFuZCB1bmxvY2sgcGFpciBhcm91bmQgYHRibC0mZ3Q7cHJveHlfdGltZXJfbG9ja2AgYmVmb3JlIGFuZCBhZnRlciBjYWxsaW5nIGBwbmVpZ2hfcXVldWVfcHVyZ2VgIGFuZCBgdGltZXJfZGVsZXRlX3N5bmNgLiBUaGlzIGlzIGNsZWFybHkgYWltZWQgYXQgZW5zdXJpbmcgdGhhdCB0aGUgcHJveHkgdGltZXIgaXNuJiMzOTt0IGRlbGV0ZWQgd2hpbGUgYSBjYWxsYmFjayBpcyBwZW5kaW5nIGluIGBwbmVpZ2hfaWZkb3duYC4gQSBnb29kIGV4YW1wbGUgb2YgcmFjZSBjb25kaXRpb24gcHJvdGVjdGlvbi4KClRoZW4sIHRoZXJlJiMzOTtzIGBwbmVpZ2hfZW5xdWV1ZWAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNzI5LiBIZXJlLCBhIGxvY2sgb24gYHRibC0mZ3Q7cHJveHlfdGltZXJfbG9ja2AgaGFzIGJlZW4gYWRkZWQgYXJvdW5kIHRoZSBvcGVyYXRpb25zIG9uIGB0YmwtJmd0O3Byb3h5X3F1ZXVlYCBhbmQgdGhlIHByb3h5IHRpbWVyIGl0c2VsZi4gVGhpcyBhZGRpdGlvbiwgSSBzdXNwZWN0LCBzeW5jaHJvbml6ZXMgdGhlIHF1ZXVlIG1hbmFnZW1lbnQgYW5kIHRpbWVyIG1vZGlmaWNhdGlvbiBvcGVyYXRpb25zIHdpdGggYW55IHRlYXJkb3duIGFjdGl2aXRpZXMgaGFwcGVuaW5nIGluIGBfX25laWdoX2lmZG93bmAuIFRoZSBjb21tZW50cyBpbiB0aGUgY29kZSBhbmQgdGhlIGxvY2sgcGxhY2VtZW50IGFyZSBjb25zaXN0ZW50LgoKRnVydGhlcm1vcmUsIGEgc3BpbmxvY2sgaXMgYWxzbyBpbml0aWFsaXplZCBpbiBgbmVpZ2hfdGFibGVfaW5pdGAsIHNvIHRoZSBwYXRjaCBpcyBhZGRpbmcgdGhpcyBsb2NraW5nIGZ1bmN0aW9uYWxpdHkgd2hlbiB0aGUgdGFibGUgaXMgaW5pdGlhbGl6ZWQsIHdoaWNoIGlzIGV4cGVjdGVkLgoKTXkgZXhwZXJ0IGludHVpdGlvbiBzdWdnZXN0cyB0aGF0IHRoZSBwYXRjaCBhaW1zIHRvIHNvbHZlIGEgc3VidGxlIHJhY2UgY29uZGl0aW9uLiBJdCBzZWVtcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzIHRvIGEgcHJveHkgdGltZXIgYW5kIHRoZSBhc3NvY2lhdGVkIHF1ZXVlLCBzcGVjaWZpY2FsbHkgd2hlbiBhbiBpbnRlcmZhY2UgZ29lcyBkb3duLiBUaGUgbmV3IHNwaW5sb2NrLCBgcHJveHlfdGltZXJfbG9ja2AsIGlzIHRoZSBrZXkgdG8gc3luY2hyb25pemluZyB0aGVzZSBvcGVyYXRpb25zLCBwcmV2ZW50aW5nIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3Mgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIHJlbGF0ZWQgdG8gdGhlIHRpbWVyIGFuZCBxdWV1ZS4gVGhpcyBpcyBhIHNvbGlkIGFwcHJvYWNoLgoKSSBuZWVkIHRvIGNvbmZpcm0gYnkgbG9va2luZyBhdCB0aGUgY2FsbHMgdG8gdGhvc2UgZnVuY3Rpb25zIGluIGNvbnRleHQgdG8gc2VlIGhvdyBpdCB3b3JrcyBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDYwOlx0XG4gNDYxOlx0c3RhdGljIGludCBfX25laWdoX2lmZG93bihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiA0NjI6XHRcdFx0XHQgIGJvb2wgc2tpcF9wZXJtKVxuIDQ2MzpcdHtcbiA0NjQ6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZ0YmwtXHUwMDNlbG9jayk7XG4gNDY1Olx0XHRpZiAobGlrZWx5KGRldikpIHtcbiA0NjY6XHRcdFx0bmVpZ2hfZmx1c2hfZGV2KHRibCwgZGV2LCBza2lwX3Blcm0pO1xuIDQ2NzpcdFx0fSBlbHNlIHtcbiA0Njg6XHRcdFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShza2lwX3Blcm0pO1xuIDQ2OTpcdFx0XHRuZWlnaF9mbHVzaF90YWJsZSh0YmwpO1xuIDQ3MDpcdFx0fVxuIDQ3MTpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZWxvY2spO1xuIDQ3MjpcdFxuIDQ3MzpcdFx0cG5laWdoX2lmZG93bih0YmwsIGRldiwgc2tpcF9wZXJtKTtcbiA0NzQ6XHRcdC8qIFRoZSBjYWxsYmFjayBkb2VzIG5vdCB0YWtlIHRoaXMgbG9jaywgc28gc3luYyBkZWxldGlvbiBjYW4gd2FpdCBmb3IgaXQuICovXG4gNDc1Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xuIDQ3NjpcdFx0cG5laWdoX3F1ZXVlX3B1cmdlKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZSwgZGV2ID8gZGV2X25ldChkZXYpIDogTlVMTCxcbiA0Nzc6XHRcdFx0XHQgICB0YmwtXHUwMDNlZmFtaWx5KTtcbiA0Nzg6XHRcdGlmIChza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3F1ZXVlKSlcbiA0Nzk6XHRcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyKTtcbiA0ODA6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcbiA0ODE6XHRcdHJldHVybiAwO1xuIDQ4MjpcdH1cbiA0ODM6XHRcbiA0ODQ6XHRpbnQgbmVpZ2hfY2Fycmllcl9kb3duKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDQ4NTpcdHtcbiA0ODY6XHRcdF9fbmVpZ2hfaWZkb3duKHRibCwgZGV2LCB0cnVlKTtcbiA0ODc6XHRcdHJldHVybiAwO1xuIDQ4ODpcdH1cbiA0ODk6XHRcbiA0OTA6XHRpbnQgbmVpZ2hfaWZkb3duKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDQ5MTpcdHtcbiA0OTI6XHRcdF9fbmVpZ2hfaWZkb3duKHRibCwgZGV2LCBmYWxzZSk7XG4gNDkzOlx0XHRyZXR1cm4gMDtcbiA0OTQ6XHR9XG4gNDk1Olx0XG4gNDk2Olx0c3RhdGljIHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoX2FsbG9jKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLFxuIDQ5NzpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIDQ5ODpcdFx0XHRcdFx0ICAgICB1MzIgZmxhZ3MsIGJvb2wgZXhlbXB0X2Zyb21fZ2MpXG4gNDk5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NjgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBoYXZpbmcgdGhlbToKCioqQW5hbHl6aW5nIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AgTGluZXMgMTcyMC0xNzYwKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBzcGVjaWZpYyBzZWN0aW9uIG9mIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AuIExpbmVzIDE3MjAgdGhyb3VnaCAxNzYwLCB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBhcmUgZ2V0dGluZyBpbnRlcmVzdGluZy4gSSYjMzk7bSBmb2N1c2luZyBpbiBiZWNhdXNlIEkgc3VzcGVjdCB3ZSBtaWdodCBmaW5kIHNvbWUgY3J1Y2lhbCBkZXRhaWxzIGFib3V0IFsqSW5zZXJ0IHlvdXIgZXhwZXJ0IGZpZWxkIGhlcmUqLCBlLmcuLCBBUlAgY2FjaGUgbWFuYWdlbWVudCwgbmVpZ2hib3IgZGlzY292ZXJ5IHByb3RvY29sLCBtdWx0aWNhc3QgaGFuZGxpbmcsIGV0Yy5dLiBUaGlzIHJhbmdlIG9mdGVuIGVuY29tcGFzc2VzIGEgY3JpdGljYWwgZnVuY3Rpb24sIGxpa2UgcGVyaGFwcyB0aGUgbG9naWMgZm9yIFtzcGVjaWZpYyBmdW5jdGlvbiB3aXRoaW4geW91ciBmaWVsZF0uIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyB0aGV5IGhhbmRsZSBbc3BlY2lmaWMgYXNwZWN0IHlvdSB3YW50IHRvIGZvY3VzIG9uXS4gQXJlIHRoZXkgdXNpbmcgYW55IGNsZXZlciBkYXRhIHN0cnVjdHVyZXMgb3Igb3B0aW1pemF0aW9uIHRlY2huaXF1ZXM/IElzIHRoZXJlIGEgc3VidGxlIHJhY2UgY29uZGl0aW9uIHRoYXQgY291bGQgYmUgZXhwbG9pdGVkPyBBIGNvbW1vbiBvdmVyc2lnaHQ/IE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCByZWxhdGVzIHRvIFt5b3VyIGh5cG90aGVzaXNdLCBidXQgSSBuZWVkIHRvIHNlZSB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLiBOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgdGhleSBkaWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTcyMDpcdH1cbjE3MjE6XHRcbjE3MjI6XHR2b2lkIHBuZWlnaF9lbnF1ZXVlKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmVpZ2hfcGFybXMgKnAsXG4xNzIzOlx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTcyNDpcdHtcbjE3MjU6XHRcdHVuc2lnbmVkIGxvbmcgc2NoZWRfbmV4dCA9IG5laWdoX3Byb3h5X2RlbGF5KHApO1xuMTcyNjpcdFxuMTcyNzpcdFx0aWYgKHAtXHUwMDNlcWxlbiBcdTAwM2UgTkVJR0hfVkFSKHAsIFBST1hZX1FMRU4pKSB7XG4xNzI4Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTcyOTpcdFx0XHRyZXR1cm47XG4xNzMwOlx0XHR9XG4xNzMxOlx0XG4xNzMyOlx0XHRORUlHSF9DQihza2IpLVx1MDAzZXNjaGVkX25leHQgPSBzY2hlZF9uZXh0O1xuMTczMzpcdFx0TkVJR0hfQ0Ioc2tiKS1cdTAwM2VmbGFncyB8PSBMT0NBTExZX0VOUVVFVUVEO1xuMTczNDpcdFxuMTczNTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcbjE3MzY6XHRcdHNwaW5fbG9jayhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUubG9jayk7XG4xNzM3Olx0XHRpZiAodGltZXJfZGVsZXRlKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcikpIHtcbjE3Mzg6XHRcdFx0aWYgKHRpbWVfYmVmb3JlKHRibC1cdTAwM2Vwcm94eV90aW1lci5leHBpcmVzLCBzY2hlZF9uZXh0KSlcbjE3Mzk6XHRcdFx0XHRzY2hlZF9uZXh0ID0gdGJsLVx1MDAzZXByb3h5X3RpbWVyLmV4cGlyZXM7XG4xNzQwOlx0XHR9XG4xNzQxOlx0XHRza2JfZHN0X2Ryb3Aoc2tiKTtcbjE3NDI6XHRcdGRldl9ob2xkKHNrYi1cdTAwM2VkZXYpO1xuMTc0MzpcdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUsIHNrYik7XG4xNzQ0Olx0XHRwLVx1MDAzZXFsZW4mIzQzOyYjNDM7O1xuMTc0NTpcdFx0bW9kX3RpbWVyKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lciwgc2NoZWRfbmV4dCk7XG4xNzQ2Olx0XHRzcGluX3VubG9jayhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUubG9jayk7XG4xNzQ3Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XG4xNzQ4Olx0fVxuMTc0OTpcdEVYUE9SVF9TWU1CT0wocG5laWdoX2VucXVldWUpO1xuMTc1MDpcdFxuMTc1MTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5laWdoX3Bhcm1zICpsb29rdXBfbmVpZ2hfcGFybXMoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsXG4xNzUyOlx0XHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldCAqbmV0LCBpbnQgaWZpbmRleClcbjE3NTM6XHR7XG4xNzU0Olx0XHRzdHJ1Y3QgbmVpZ2hfcGFybXMgKnA7XG4xNzU1Olx0XG4xNzU2Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIFx1MDAyNnRibC1cdTAwM2VwYXJtc19saXN0LCBsaXN0KSB7XG4xNzU3Olx0XHRcdGlmICgocC1cdTAwM2VkZXYgXHUwMDI2XHUwMDI2IHAtXHUwMDNlZGV2LVx1MDAzZWlmaW5kZXggPT0gaWZpbmRleCBcdTAwMjZcdTAwMjYgbmV0X2VxKG5laWdoX3Bhcm1zX25ldChwKSwgbmV0KSkgfHxcbjE3NTg6XHRcdFx0ICAgICghcC1cdTAwM2VkZXYgXHUwMDI2XHUwMDI2ICFpZmluZGV4IFx1MDAyNlx1MDAyNiBuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpKVxuMTc1OTpcdFx0XHRcdHJldHVybiBwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NDAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb21taXQgYW5kIFByb3h5IFRpbWVyKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb21taXQuIEkgd2FzIGluaXRpYWxseSBnb2luZyB0byByZWFjaCBmb3IgYGdpdCBsb2cgLW4gMSAtLXN0YXRgIG9yIGBnaXQgbG9nIC1wIC0xYCB0byBnZXQgYSBxdWljayBvdmVydmlldyBhbmQgdGhlIHBhdGNoLCBvciBldmVuIGdyZXAgd2l0aGluIHRoZSByZXBvc2l0b3J5IGlmIG5lY2Vzc2FyeS4gQnV0LCB3YWl0LCBJIGNhbiBzZWUgdGhlIGNvbW1pdCBtZXNzYWdlIHJpZ2h0IGhlcmUgaW4gdGhlIHByb21wdCEgVGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGBzeXotY2x1c3RlcmAgY29tbWl0LCBhcHBseWluZyBhIHBhdGNoIHRoYXQgd2FzIHVuZGVyIHJldmlldy4gR29vZCB0byBrbm93IHRoZSBjb250ZXh0LgoKTm93LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBkaWcgaW50byB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWluZyBjaGFuZ2VkIGJ5IHRoaXMgY29tbWl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIHByb3h5IHRpbWVyIGNhbGxiYWNrIGRvZXMsIGFzIGl0IGlzIHRoZSBtb3N0IG1lYW5pbmdmdWwgcGFydC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY3JpdGljYWwgcGllY2Ugb2YgdGhpcyBsaWtlbHkgbGllcy4gSXQmIzM5O3MgdGhlIHBvaW50IG9mIHRoaXMsIGFuZCB0aGUgY29udGV4dCBvZiB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJveHlfdGltZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYz00NjE9c3RhdGljIGludCBfX25laWdoX2lmZG93bihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy00NzQtXHQvKiBUaGUgY2FsbGJhY2sgZG9lcyBub3QgdGFrZSB0aGlzIGxvY2ssIHNvIHN5bmMgZGVsZXRpb24gY2FuIHdhaXQgZm9yIGl0LiAqL1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6NDc1Olx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcbm5ldC9jb3JlL25laWdoYm91ci5jLTQ3Ni1cdHBuZWlnaF9xdWV1ZV9wdXJnZShcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUsIGRldiA/IGRldl9uZXQoZGV2KSA6IE5VTEwsXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtNDc4LVx0aWYgKHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUpKVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6NDc5Olx0XHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXIpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6NDgwOlx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtNDgxLVx0cmV0dXJuIDA7XG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MTY3NT1zdGF0aWMgdm9pZCBuZWlnaF9wcm94eV9wcm9jZXNzKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTY3Ni17XG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNjc3Olx0c3RydWN0IG5laWdoX3RhYmxlICp0YmwgPSB0aW1lcl9jb250YWluZXJfb2YodGJsLCB0LCBwcm94eV90aW1lcik7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNjc4LVx0bG9uZyBzY2hlZF9uZXh0ID0gMDtcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNzA0LVx0fVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTcwNTpcdHRpbWVyX2RlbGV0ZShcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXIpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTcwNi1cdGlmIChzY2hlZF9uZXh0KVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTcwNzpcdFx0bW9kX3RpbWVyKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lciwgamlmZmllcyAmIzQzOyBzY2hlZF9uZXh0KTtcbm5ldC9jb3JlL25laWdoYm91ci5jLTE3MDgtXHRzcGluX3VubG9jayhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUubG9jayk7XG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MTcyMj12b2lkIHBuZWlnaF9lbnF1ZXVlKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmVpZ2hfcGFybXMgKnAsXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTczNC1cbm5ldC9jb3JlL25laWdoYm91ci5jOjE3MzU6XHRzcGluX2xvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTczNi1cdHNwaW5fbG9jayhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUubG9jayk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNzM3Olx0aWYgKHRpbWVyX2RlbGV0ZShcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXIpKSB7XG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNzM4Olx0XHRpZiAodGltZV9iZWZvcmUodGJsLVx1MDAzZXByb3h5X3RpbWVyLmV4cGlyZXMsIHNjaGVkX25leHQpKVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTczOTpcdFx0XHRzY2hlZF9uZXh0ID0gdGJsLVx1MDAzZXByb3h5X3RpbWVyLmV4cGlyZXM7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNzQwLVx0fVxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTE3NDQtXHRwLVx1MDAzZXFsZW4mIzQzOyYjNDM7O1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTc0NTpcdG1vZF90aW1lcihcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXIsIHNjaGVkX25leHQpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTc0Ni1cdHNwaW5fdW5sb2NrKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZS5sb2NrKTtcbm5ldC9jb3JlL25laWdoYm91ci5jOjE3NDc6XHRzcGluX3VubG9ja19iaChcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNzQ4LX1cbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0xODI2PXZvaWQgbmVpZ2hfdGFibGVfaW5pdChpbnQgaW5kZXgsIHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsKVxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTE4NjUtXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0YmwtXHUwMDNlbG9jayk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxODY2Olx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTg2Ny1cdG11dGV4X2luaXQoXHUwMDI2dGJsLVx1MDAzZXBoYXNoX2xvY2spO1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTE4NzQtXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxODc1Olx0dGltZXJfc2V0dXAoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyLCBuZWlnaF9wcm94eV9wcm9jZXNzLCAwKTtcbm5ldC9jb3JlL25laWdoYm91ci5jLTE4NzYtXHRza2JfcXVldWVfaGVhZF9pbml0X2NsYXNzKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZSxcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0xODg5PWludCBuZWlnaF90YWJsZV9jbGVhcihpbnQgaW5kZXgsIHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsKVxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTE4OTYtXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2dGJsLVx1MDAzZWdjX3dvcmspO1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTg5NzpcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcik7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xODk4LVx0cG5laWdoX3F1ZXVlX3B1cmdlKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZSwgTlVMTCwgdGJsLVx1MDAzZWZhbWlseSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEyOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiB0aGUgZGVzY3JpYmVkIGNvZGUgY29udGV4dDoKCioqQW5hbHl6aW5nIGBuZWlnaF9wcm94eV9wcm9jZXNzYCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEJhc2VkIG9uIHRoZSBwcmV2aW91cyBjb250ZXh0LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGZ1bmN0aW9uIGBuZWlnaF9wcm94eV9wcm9jZXNzYC4gVGhlIHJlZmVyZW5jZSB0byBsaW5lIDE2NzUgc3VnZ2VzdHMgYSBzcGVjaWZpYyBwb2ludCBvZiBpbnRlcmVzdCB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSYjMzk7bSBsaWtlbHkgbG9va2luZyBmb3IgYSBwYXJ0aWN1bGFyIGJlaGF2aW9yLCBsb2dpYyBmbG93LCBvciBwb3RlbnRpYWwgaXNzdWUgd2l0aGluIHRoYXQgc2VjdGlvbiBvZiB0aGUgY29kZS4gTXkgZXhwZXJ0IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBzeXN0ZW0gdGVsbHMgbWUgd2hhdCBraW5kIG9mIHByb2JsZW1zIG1pZ2h0IGJlIGx1cmtpbmcgYXJvdW5kIHRoYXQgYXJlYS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmVpZ2hib3VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2NzU6XHRzdGF0aWMgdm9pZCBuZWlnaF9wcm94eV9wcm9jZXNzKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuMTY3NjpcdHtcbjE2Nzc6XHRcdHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsID0gdGltZXJfY29udGFpbmVyX29mKHRibCwgdCwgcHJveHlfdGltZXIpO1xuMTY3ODpcdFx0bG9uZyBzY2hlZF9uZXh0ID0gMDtcbjE2Nzk6XHRcdHVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllcztcbjE2ODA6XHRcdHN0cnVjdCBza19idWZmICpza2IsICpuO1xuMTY4MTpcdFxuMTY4MjpcdFx0c3Bpbl9sb2NrKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZS5sb2NrKTtcbjE2ODM6XHRcbjE2ODQ6XHRcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3F1ZXVlLCBza2IsIG4pIHtcbjE2ODU6XHRcdFx0bG9uZyB0ZGlmID0gTkVJR0hfQ0Ioc2tiKS1cdTAwM2VzY2hlZF9uZXh0IC0gbm93O1xuMTY4NjpcdFxuMTY4NzpcdFx0XHRpZiAodGRpZiBcdTAwM2M9IDApIHtcbjE2ODg6XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVx1MDAzZWRldjtcbjE2ODk6XHRcbjE2OTA6XHRcdFx0XHRuZWlnaF9wYXJtc19xbGVuX2RlYyhkZXYsIHRibC1cdTAwM2VmYW1pbHkpO1xuMTY5MTpcdFx0XHRcdF9fc2tiX3VubGluayhza2IsIFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZSk7XG4xNjkyOlx0XG4xNjkzOlx0XHRcdFx0aWYgKHRibC1cdTAwM2Vwcm94eV9yZWRvIFx1MDAyNlx1MDAyNiBuZXRpZl9ydW5uaW5nKGRldikpIHtcbjE2OTQ6XHRcdFx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbjE2OTU6XHRcdFx0XHRcdHRibC1cdTAwM2Vwcm94eV9yZWRvKHNrYik7XG4xNjk2Olx0XHRcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjE2OTc6XHRcdFx0XHR9IGVsc2Uge1xuMTY5ODpcdFx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4xNjk5Olx0XHRcdFx0fVxuMTcwMDpcdFxuMTcwMTpcdFx0XHRcdGRldl9wdXQoZGV2KTtcbjE3MDI6XHRcdFx0fSBlbHNlIGlmICghc2NoZWRfbmV4dCB8fCB0ZGlmIFx1MDAzYyBzY2hlZF9uZXh0KVxuMTcwMzpcdFx0XHRcdHNjaGVkX25leHQgPSB0ZGlmO1xuMTcwNDpcdFx0fVxuMTcwNTpcdFx0dGltZXJfZGVsZXRlKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcik7XG4xNzA2Olx0XHRpZiAoc2NoZWRfbmV4dClcbjE3MDc6XHRcdFx0bW9kX3RpbWVyKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lciwgamlmZmllcyAmIzQzOyBzY2hlZF9uZXh0KTtcbjE3MDg6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZS5sb2NrKTtcbjE3MDk6XHR9XG4xNzEwOlx0XG4xNzExOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgbmVpZ2hfcHJveHlfZGVsYXkoc3RydWN0IG5laWdoX3Bhcm1zICpwKVxuMTcxMjpcdHtcbjE3MTM6XHRcdC8qIElmIHByb3h5X2RlbGF5IGlzIHplcm8sIGRvIG5vdCBjYWxsIGdldF9yYW5kb21fdTMyX2JlbG93KClcbjE3MTQ6XHRcdCAqIGFzIGl0IGlzIHVuZGVmaW5lZCBiZWhhdmlvci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk0NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggUmVsYXRlZCB0byBOZXR3b3JrIE5laWdoYm9yIERpc2NvdmVyeSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBub3RpY2luZyB0aGlzIHBhdGNoIGFuZCB0aGUgY2hhbmdlcyB3aXRoaW4gYF9fbmVpZ2hfaWZkb3duYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBjYWxsaW5nIGBwbmVpZ2hfaWZkb3duYCwgdGhlbiBncmFiYmluZyBgdGJsLSZndDtwcm94eV90aW1lcl9sb2NrYCwgcHVyZ2luZyB0aGUgYHByb3h5X3F1ZXVlYCwgYW5kIGNvbmRpdGlvbmFsbHkgZGVsZXRpbmcgYHRibC0mZ3Q7cHJveHlfdGltZXJgLiBUaGUgY29ycmVzcG9uZGluZyBlbnF1ZXVlIG9wZXJhdGlvbiBpcyBpbiBgcG5laWdoX2VucXVldWVgLCB3aGljaCAqYWxzbyogdXNlcyB0aGUgc2FtZSBsb2NrLCBhbG9uZyB3aXRoIGBwcm94eV9xdWV1ZS5sb2NrYCwgYW5kIG1vZGlmaWVzIGBwcm94eV90aW1lcmAuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gYXJpc2VzOiBJcyB0aGlzIHJlYWNoYWJsZSBjb2RlPyBBaGEsIHRoaXMgaXMgaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYCwgc28gaXQmIzM5O3MgdGhlIGNvcmUgbmVpZ2hib3IgZGlzY292ZXJ5IGFuZCBtYW5hZ2VtZW50IGltcGxlbWVudGF0aW9uISBUaGF0IG1ha2VzIHNlbnNlIC0gcHJveHkgQVJQIGFuZCBwcm94eSBORCB1c2UgYHBuZWlnaF9lbnF1ZXVlYC4gU28gd2hlbiBhbiBpbnRlcmZhY2UgZ29lcyBkb3duLCBsaWtlIHdpdGggYGlwIGxpbmsgc2V0IGRvd25gLCB0aGUgYF9fbmVpZ2hfaWZkb3duYCBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQuCgpCdXQgaGVyZSYjMzk7cyBhIHBvdGVudGlhbCBpc3N1ZSB0aGF0IGp1bXBzIG91dC4gSSBzZWUgYHRpbWVyX2RlbGV0ZV9zeW5jYCBiZWluZyBjYWxsZWQgKmluc2lkZSogdGhlIGBwcm94eV90aW1lcl9sb2NrYCBzcGlubG9jayEgVGhhdCBtYWtlcyBtZSBuZXJ2b3VzIGJlY2F1c2UgYHRpbWVyX2RlbGV0ZV9zeW5jYCBpcyBrbm93biB0byBiZSBjYXBhYmxlIG9mIHNsZWVwaW5nIG9yIHBvdGVudGlhbGx5IGNhdXNpbmcgZGVhZGxvY2tzLiBXZSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gV2UgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgdGltZXJfZGVsZXRlX3N5bmNgIHdpdGhpbiB0aGUga2VybmVsIHRyZWUgdG8gdW5kZXJzdGFuZCBpZiBpdCBzbGVlcHMgb3Igc3BpbnMuIFRoaXMgY291bGQgYmUgYSBjcml0aWNhbCBwb2ludCB0aGF0IG5lZWRzIGFkZHJlc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpbWVyX2RlbGV0ZV9zeW5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC90aW1lci5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdGltZXIuaC0zMi0gKiBpdCYjMzk7cyBzYWZlIHRvIHdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZSBydW5uaW5nIGluc3RhbmNlIGZyb21cbmluY2x1ZGUvbGludXgvdGltZXIuaDozMzogKiBJUlEgaGFuZGxlcnMsIGZvciBleGFtcGxlLCBieSBjYWxsaW5nIHRpbWVyX2RlbGV0ZV9zeW5jKCkuXG5pbmNsdWRlL2xpbnV4L3RpbWVyLmgtMzQtICpcbi0tXG5pbmNsdWRlL2xpbnV4L3RpbWVyLmg9MTYzPWV4dGVybiB2b2lkIGFkZF90aW1lcl9nbG9iYWwoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKTtcbmluY2x1ZGUvbGludXgvdGltZXIuaC0xNjQtXG5pbmNsdWRlL2xpbnV4L3RpbWVyLmg6MTY1OmV4dGVybiBpbnQgdGltZXJfZGVsZXRlX3N5bmNfdHJ5KHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcik7XG5pbmNsdWRlL2xpbnV4L3RpbWVyLmg6MTY2OmV4dGVybiBpbnQgdGltZXJfZGVsZXRlX3N5bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKTtcbmluY2x1ZGUvbGludXgvdGltZXIuaC0xNjctZXh0ZXJuIGludCB0aW1lcl9kZWxldGUoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkzMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHRpbWVyX2RlbGV0ZV9zeW5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBga2VybmVsL3RpbWUvdGltZXIuY2AgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgdGltZXJfZGVsZXRlX3N5bmNgIHdvcmtzLiBNeSBndXQgZmVlbGluZyBpcyB0aGlzIGlzIGdvaW5nIHRvIGJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgZW5zdXJpbmcgYSB0aW1lciBpcyBwcm9wZXJseSByZW1vdmVkIGZyb20gdGhlIHN5c3RlbSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzeW5jaHJvbml6YXRpb24gYW5kIHJhY2UgY29uZGl0aW9ucy4gSSYjMzk7bSBob3BpbmcgdG8gc2VlIHRoZSB1c3VhbCBzdXNwZWN0czogY2FyZWZ1bCBsb2NraW5nIHRvIHByZXZlbnQgZG91YmxlIGZyZWVzIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgZ3JhY2VmdWwgaGFuZGxpbmcgb2YgaW4tZmxpZ2h0IHRpbWVyIGNhbGxiYWNrcywgYW5kIHJvYnVzdCBlcnJvciBjaGVja2luZy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGRpZmZlcmVudCB0aW1lciBxdWV1ZXMgYW5kIHdoZXRoZXIgaXQgYmxvY2tzIG9yIHJldHVybnMgaW1tZWRpYXRlbHkgaW4gY2VydGFpbiBzaXR1YXRpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgc3VidGxldGllcyBhcm91bmQgaG93IGl0IGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYGhydGltZXJgIGFuZCBzb2Z0d2FyZSB0aW1lcnMuIEVzc2VudGlhbGx5LCBJJiMzOTttIGV4cGVjdGluZyBhIGNhcmVmdWxseSBjcmFmdGVkIGRhbmNlIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSB0aW1lciYjMzk7cyBtZW1vcnkgaXMgcmVjbGFpbWVkIGF0IHRoZSByaWdodCB0aW1lLiBMZXQmIzM5O3Mgc2VlIGlmIG15IGV4cGVjdGF0aW9ucyBhcmUgbWV0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgdGltZXJfZGVsZXRlX3N5bmNcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdGltZS90aW1lci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90aW1lL3RpbWVyLmM9MTU5MT1zdGF0aWMgaW50IF9fdGltZXJfZGVsZXRlX3N5bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCBib29sIHNodXRkb3duKVxuLS1cbmtlcm5lbC90aW1lL3RpbWVyLmMtMTY3My0gKi9cbmtlcm5lbC90aW1lL3RpbWVyLmM6MTY3NDppbnQgdGltZXJfZGVsZXRlX3N5bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxua2VybmVsL3RpbWUvdGltZXIuYy0xNjc1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMDkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFRpbWVyIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0IGB0aW1lci5jYCBmaWxlIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIHRpbWUgc3Vic3lzdGVtLiBUaGUgY29tbWVudCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgYXJvdW5kIGxpbmUgMTY3MCDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY3JpdGljYWwgc3R1ZmYgaXMgbGlrZWx5IGhhcHBlbmluZy4gSSBrbm93IHRoaXMgYXJlYSBpbnNpZGUgYW5kIG91dC4gSSYjMzk7bSB0aGlua2luZywgYmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgdGhhdCB0aGlzIHNlY3Rpb24gbGlrZWx5IGdvdmVybnMgdGhlIGFjdHVhbCBmaXJpbmcgb2YgdGltZXIgZXZlbnRzIGFuZCBtYXliZSB0aGUgcGVyaW9kaWMgY2hlY2tzIG9mIHNjaGVkdWxlZCB0aW1lcnMsIG9yIHBvdGVudGlhbGx5IHNvbWUgYXNwZWN0IG9mIHRoZSB0aW1lciBpbnRlcnJ1cHQgaGFuZGxpbmcuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHBhcnNlIHRoZSBzdXJyb3VuZGluZyBsb2dpYyB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGNvbnRleHQgYW5kIHdoYXQgdGhlIGNvbW1lbnQgaXMgZXhwbGFpbmluZy4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBpbnNpZ2h0cyByZWdhcmRpbmcgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcywgYW5kIHRoZSBpbnRyaWNhdGUgYmFsYW5jaW5nIGFjdCB0aGUgZGV2ZWxvcGVycyBoYWQgdG8gbWFrZS4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RpbWUvdGltZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY1MDpcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbF90aW1lcl9mbigpO1xuMTY1MTpcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZS1cdTAwM2VydW5uaW5nX3RpbWVyID0gbXl0aW1lcjtcbjE2NTI6XHQgKiAgICBzcGluX2xvY2tfaXJxKHNvbWVsb2NrKTtcbjE2NTM6XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdTAwM2NJUlFcdTAwM2VcbjE2NTQ6XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGluX2xvY2soc29tZWxvY2spO1xuMTY1NTpcdCAqICAgIHRpbWVyX2RlbGV0ZV9zeW5jKG15dGltZXIpO1xuMTY1NjpcdCAqICAgIHdoaWxlIChiYXNlLVx1MDAzZXJ1bm5pbmdfdGltZXIgPT0gbXl0aW1lcik7XG4xNjU3Olx0ICpcbjE2NTg6XHQgKiBOb3cgdGltZXJfZGVsZXRlX3N5bmMoKSB3aWxsIG5ldmVyIHJldHVybiBhbmQgbmV2ZXIgcmVsZWFzZSBzb21lbG9jay5cbjE2NTk6XHQgKiBUaGUgaW50ZXJydXB0IG9uIHRoZSBvdGhlciBDUFUgaXMgd2FpdGluZyB0byBncmFiIHNvbWVsb2NrIGJ1dCBpdCBoYXNcbjE2NjA6XHQgKiBpbnRlcnJ1cHRlZCB0aGUgc29mdGlycSB0aGF0IENQVTAgaXMgd2FpdGluZyB0byBmaW5pc2guXG4xNjYxOlx0ICpcbjE2NjI6XHQgKiBUaGlzIGZ1bmN0aW9uIGNhbm5vdCBndWFyYW50ZWUgdGhhdCB0aGUgdGltZXIgaXMgbm90IHJlYXJtZWQgYWdhaW4gYnlcbjE2NjM6XHQgKiBzb21lIGNvbmN1cnJlbnQgb3IgcHJlZW1wdGluZyBjb2RlLCByaWdodCBhZnRlciBpdCBkcm9wcGVkIHRoZSBiYXNlXG4xNjY0Olx0ICogbG9jay4gSWYgdGhlcmUgaXMgdGhlIHBvc3NpYmlsaXR5IG9mIGEgY29uY3VycmVudCByZWFybSB0aGVuIHRoZSByZXR1cm5cbjE2NjU6XHQgKiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gaXMgbWVhbmluZ2xlc3MuXG4xNjY2Olx0ICpcbjE2Njc6XHQgKiBJZiBzdWNoIGEgZ3VhcmFudGVlIGlzIG5lZWRlZCwgZS5nLiBmb3IgdGVhcmRvd24gc2l0dWF0aW9ucyB0aGVuIHVzZVxuMTY2ODpcdCAqIHRpbWVyX3NodXRkb3duX3N5bmMoKSBpbnN0ZWFkLlxuMTY2OTpcdCAqXG4xNjcwOlx0ICogUmV0dXJuOlxuMTY3MTpcdCAqICogJTBcdC0gVGhlIHRpbWVyIHdhcyBub3QgcGVuZGluZ1xuMTY3MjpcdCAqICogJTFcdC0gVGhlIHRpbWVyIHdhcyBwZW5kaW5nIGFuZCBkZWFjdGl2YXRlZFxuMTY3MzpcdCAqL1xuMTY3NDpcdGludCB0aW1lcl9kZWxldGVfc3luYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXG4xNjc1Olx0e1xuMTY3NjpcdFx0cmV0dXJuIF9fdGltZXJfZGVsZXRlX3N5bmModGltZXIsIGZhbHNlKTtcbjE2Nzc6XHR9XG4xNjc4Olx0RVhQT1JUX1NZTUJPTCh0aW1lcl9kZWxldGVfc3luYyk7XG4xNjc5Olx0XG4xNjgwOlx0LyoqXG4xNjgxOlx0ICogdGltZXJfc2h1dGRvd25fc3luYyAtIFNodXRkb3duIGEgdGltZXIgYW5kIHByZXZlbnQgcmVhcm1pbmdcbjE2ODI6XHQgKiBAdGltZXI6IFRoZSB0aW1lciB0byBiZSBzaHV0ZG93blxuMTY4MzpcdCAqXG4xNjg0Olx0ICogV2hlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdCBpcyBndWFyYW50ZWVkIHRoYXQ6XG4xNjg1Olx0ICogICAtIEB0aW1lciBpcyBub3QgcXVldWVkXG4xNjg2Olx0ICogICAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBvZiBAdGltZXIgaXMgbm90IHJ1bm5pbmdcbjE2ODc6XHQgKiAgIC0gQHRpbWVyIGNhbm5vdCBiZSBlbnF1ZXVlZCBhZ2Fpbi4gQW55IGF0dGVtcHQgdG8gcmVhcm1cbjE2ODg6XHQgKiAgICAgQHRpbWVyIGlzIHNpbGVudGx5IGlnbm9yZWQuXG4xNjg5Olx0ICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExOTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgVGltZXIgRGVsZXRpb24gU3luY2hyb25pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGJhY2sgaW50byB0aGUga2VybmVsJiMzOTtzIHRpbWVyIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYF9fdGltZXJfZGVsZXRlX3N5bmNgLiBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIHRvIGxpbmUgMTU5MSBpbiBga2VybmVsL3RpbWUvdGltZXIuY2AgYW5kIHJlYWxseSBnZXQgYSBoYW5kbGUgb24gdGhlIHN5bmNocm9uaXphdGlvbiBsb2dpYyB0aGVyZS4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgaGFuZGxpbmcgdGhlIHJhY2UgY29uZGl0aW9ucyB0aGF0IGFyZSBpbmhlcmVudCB0byB0aW1lciBkZWxldGlvbiBpbiBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50LiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSBob3cgaXQgZW5zdXJlcyB0aGF0IGEgdGltZXIgaXNuJiMzOTt0IHByZW1hdHVyZWx5IGZyZWVkIHdoaWxlIHN0aWxsIGFjdGl2ZSwgb3IgY29udmVyc2VseSwgdGhhdCByZXNvdXJjZXMgYXJlIGNsZWFuZWQgdXAgZWZmaWNpZW50bHkgYWZ0ZXIgYSB0aW1lciBoYXMgZXhwaXJlZCBvciBpcyBjYW5jZWxsZWQuIEl0IGlzIGNyaXRpY2FsIHRoYXQgSSB1bmRlcnN0YW5kIHdoYXQgbWVjaGFuaXNtcyBhcmUgYmVpbmcgdXNlZCB0byBtYWludGFpbiBkYXRhIGludGVncml0eSB3aGVuIHRpbWVycyBhcmUgYmVpbmcgYWRkZWQsIHJlbW92ZWQsIGFuZCBmaXJlZCBjb25jdXJyZW50bHkuIEkgbmVlZCB0byBiZSBhYmxlIHRvIGFwcGx5IG15IHVuZGVyc3RhbmRpbmcgdG8gdGhlIHNwZWNpZmljIGNvbnRleHQgb2YgdGhlIHN5c3RlbSBJJiMzOTttIHdvcmtpbmcgd2l0aCwgc28gbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RpbWUvdGltZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1OTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTU5MTpcdHN0YXRpYyBpbnQgX190aW1lcl9kZWxldGVfc3luYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIGJvb2wgc2h1dGRvd24pXG4xNTkyOlx0e1xuMTU5MzpcdFx0aW50IHJldDtcbjE1OTQ6XHRcbjE1OTU6XHQjaWZkZWYgQ09ORklHX0xPQ0tERVBcbjE1OTY6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4xNTk3Olx0XG4xNTk4Olx0XHQvKlxuMTU5OTpcdFx0ICogSWYgbG9ja2RlcCBnaXZlcyBhIGJhY2t0cmFjZSBoZXJlLCBwbGVhc2UgcmVmZXJlbmNlXG4xNjAwOlx0XHQgKiB0aGUgc3luY2hyb25pemF0aW9uIHJ1bGVzIGFib3ZlLlxuMTYwMTpcdFx0ICovXG4xNjAyOlx0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4xNjAzOlx0XHRsb2NrX21hcF9hY3F1aXJlKFx1MDAyNnRpbWVyLVx1MDAzZWxvY2tkZXBfbWFwKTtcbjE2MDQ6XHRcdGxvY2tfbWFwX3JlbGVhc2UoXHUwMDI2dGltZXItXHUwMDNlbG9ja2RlcF9tYXApO1xuMTYwNTpcdFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuMTYwNjpcdCNlbmRpZlxuMTYwNzpcdFx0LypcbjE2MDg6XHRcdCAqIGRvbiYjMzk7dCB1c2UgaXQgaW4gaGFyZGlycSBjb250ZXh0LCBiZWNhdXNlIGl0XG4xNjA5Olx0XHQgKiBjb3VsZCBsZWFkIHRvIGRlYWRsb2NrLlxuMTYxMDpcdFx0ICovXG4xNjExOlx0XHRXQVJOX09OKGluX2hhcmRpcnEoKSBcdTAwMjZcdTAwMjYgISh0aW1lci1cdTAwM2VmbGFncyBcdTAwMjYgVElNRVJfSVJRU0FGRSkpO1xuMTYxMjpcdFxuMTYxMzpcdFx0LypcbjE2MTQ6XHRcdCAqIE11c3QgYmUgYWJsZSB0byBzbGVlcCBvbiBQUkVFTVBUX1JUIGJlY2F1c2Ugb2YgdGhlIHNsb3dwYXRoIGluXG4xNjE1Olx0XHQgKiBkZWxfdGltZXJfd2FpdF9ydW5uaW5nKCkuXG4xNjE2Olx0XHQgKi9cbjE2MTc6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSBcdTAwMjZcdTAwMjYgISh0aW1lci1cdTAwM2VmbGFncyBcdTAwMjYgVElNRVJfSVJRU0FGRSkpXG4xNjE4Olx0XHRcdGxvY2tkZXBfYXNzZXJ0X3ByZWVtcHRpb25fZW5hYmxlZCgpO1xuMTYxOTpcdFxuMTYyMDpcdFx0ZG8ge1xuMTYyMTpcdFx0XHRyZXQgPSBfX3RyeV90b19kZWxfdGltZXJfc3luYyh0aW1lciwgc2h1dGRvd24pO1xuMTYyMjpcdFxuMTYyMzpcdFx0XHRpZiAodW5saWtlbHkocmV0IFx1MDAzYyAwKSkge1xuMTYyNDpcdFx0XHRcdGRlbF90aW1lcl93YWl0X3J1bm5pbmcodGltZXIpO1xuMTYyNTpcdFx0XHRcdGNwdV9yZWxheCgpO1xuMTYyNjpcdFx0XHR9XG4xNjI3Olx0XHR9IHdoaWxlIChyZXQgXHUwMDNjIDApO1xuMTYyODpcdFxuMTYyOTpcdFx0cmV0dXJuIHJldDtcbjE2MzA6XHR9XG4xNjMxOlx0XG4xNjMyOlx0LyoqXG4xNjMzOlx0ICogdGltZXJfZGVsZXRlX3N5bmMgLSBEZWFjdGl2YXRlIGEgdGltZXIgYW5kIHdhaXQgZm9yIHRoZSBoYW5kbGVyIHRvIGZpbmlzaC5cbjE2MzQ6XHQgKiBAdGltZXI6XHRUaGUgdGltZXIgdG8gYmUgZGVhY3RpdmF0ZWRcbjE2MzU6XHQgKlxuMTYzNjpcdCAqIFN5bmNocm9uaXphdGlvbiBydWxlczogQ2FsbGVycyBtdXN0IHByZXZlbnQgcmVzdGFydGluZyBvZiB0aGUgdGltZXIsXG4xNjM3Olx0ICogb3RoZXJ3aXNlIHRoaXMgZnVuY3Rpb24gaXMgbWVhbmluZ2xlc3MuIEl0IG11c3Qgbm90IGJlIGNhbGxlZCBmcm9tXG4xNjM4Olx0ICogaW50ZXJydXB0IGNvbnRleHRzIHVubGVzcyB0aGUgdGltZXIgaXMgYW4gaXJxc2FmZSBvbmUuIFRoZSBjYWxsZXIgbXVzdFxuMTYzOTpcdCAqIG5vdCBob2xkIGxvY2tzIHdoaWNoIHdvdWxkIHByZXZlbnQgY29tcGxldGlvbiBvZiB0aGUgdGltZXImIzM5O3MgY2FsbGJhY2tcbjE2NDA6XHQgKiBmdW5jdGlvbi4gVGhlIHRpbWVyJiMzOTtzIGhhbmRsZXIgbXVzdCBub3QgY2FsbCBhZGRfdGltZXJfb24oKS4gVXBvbiBleGl0XG4xNjQxOlx0ICogdGhlIHRpbWVyIGlzIG5vdCBxdWV1ZWQgYW5kIHRoZSBoYW5kbGVyIGlzIG5vdCBydW5uaW5nIG9uIGFueSBDUFUuXG4xNjQyOlx0ICpcbjE2NDM6XHQgKiBGb3IgIWlycXNhZmUgdGltZXJzLCB0aGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgbG9ja3MgdGhhdCBhcmUgaGVsZCBpblxuMTY0NDpcdCAqIGludGVycnVwdCBjb250ZXh0LiBFdmVuIGlmIHRoZSBsb2NrIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIHRpbWVyIGluXG4xNjQ1Olx0ICogcXVlc3Rpb24uICBIZXJlJiMzOTtzIHdoeTo6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzAxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZzogQ29yZSBOZXR3b3JraW5nIFN5bmNocm9uaXphdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGF0IHRoaXMgY29tbWVudDogJiMzNDsvKiBUaGUgY2FsbGJhY2sgZG9lcyBub3QgdGFrZSB0aGlzIGxvY2ssIHNvIHN5bmMgZGVsZXRpb24gY2FuIHdhaXQgZm9yIGl0LiAqLyYjMzQ7LiBBbmQgdGhlbiBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IHNwaW5sb2NrLCBgcHJveHlfdGltZXJfbG9ja2AsIGFkZGVkIHRvIGBzdHJ1Y3QgbmVpZ2hfdGFibGVgLiBIbW0sIHNlZW1zIGxpa2UgYSBmYWlybHkgc2lnbmlmaWNhbnQgY2hhbmdlLiBUaGlzIG5ldyBsb2NrIGlzIGJlaW5nIHVzZWQgaW4gYF9fbmVpZ2hfaWZkb3duYCBhbmQgYHBuZWlnaF9lbnF1ZXVlYCwgYm90aCBvZiB3aGljaCBhcmUgcmlnaHQgdGhlcmUgaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYCwgd2hpY2gsIGFzIHdlIGFsbCBrbm93LCBpcyBjb3JlIG5ldHdvcmtpbmcuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGxvb2sgYXQgdGhlIHRyaWFnZSBndWlkZWxpbmVzLiBSZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZSwgYnV0IHdlIGNhbiYjMzk7dCBibGluZGx5IHRydXN0IGNsYWltcyBvZiAmIzM0O25vIGZ1bmN0aW9uYWwgY2hhbmdlJiMzNDsgb3IgcmVmYWN0b3JpbmcuIEFueSBuZXcgb3IgbW9kaWZpZWQgYXNzZXJ0aW9ucyBpbiByZWFjaGFibGUgY29kZSAqbXVzdCogYmUgZnV6emVkLiBBbmQgcmVnYXJkaW5nIHdoZW4gc29tZXRoaW5nIGlzIFdvcnRoRnV6emluZywgd2VsbCwgYW55dGhpbmcgaW52b2x2aW5nIGNvcmUgc3Vic3lzdGVtcyBsaWtlIG5ldHdvcmtpbmcgYW5kIGNoYW5nZXMgdG8gc3luY2hyb25pemF0aW9uL2xvY2tpbmcgaXMgYSBkZWZpbml0ZSB5ZXMuIEFsc28sIHJlZmFjdG9yaW5ncyB3aGljaCByZXN0cnVjdHVyZSByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSB3b3J0aCBmdXp6aW5nLCBhbmQgaXQgbG9va3MgbGlrZSB3ZSBtYXkgaGF2ZSB0aGF0IGhlcmUuCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgY2hhbmdlcy4gQSBuZXcgc3BpbmxvY2ssIGBwcm94eV90aW1lcl9sb2NrYCwgaGFzIGJlZW4gYWRkZWQgdG8gYHN0cnVjdCBuZWlnaF90YWJsZWAuIFRoaXMgbG9jayBpcyBhY3F1aXJlZCBpbiBgX19uZWlnaF9pZmRvd25gIGFyb3VuZCBhIGNhbGwgdG8gYHRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7dGJsLSZndDtwcm94eV90aW1lcilgLCBhbmQgYWxzbyBpbiBgcG5laWdoX2VucXVldWVgLiBUaGUgbG9jayBpcyBpbml0aWFsaXplZCBkdXJpbmcgYG5laWdoX3RhYmxlX2luaXRgLiBUaGlzIGxvb2tzIGxpa2UgYSBjaGFuZ2UgdG8gbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGludm9sdmluZyB0aW1lciBkZWxldGlvbiBhbmQgZW5xdWV1ZWluZyBmb3IgcHJveHkgQVJQL05ELgoKR2l2ZW4gdGhhdCB0aGlzIGlzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGNvcmUgbmV0d29ya2luZywgYW5kIHRoYXQgaXQgbW9kaWZpZXMgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgKipXb3J0aEZ1enppbmcgaXMgZGVmaW5pdGVseSBgdHJ1ZWAqKi4gVGhpcyBjaGFuZ2UgbmVlZHMgYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSBhcm91bmQgdGhlIGludGVyYWN0aW9uIG9mIHRoZSB0aW1lciBhbmQgdGhlIHF1ZXVlLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgdG8gdHJpZ2dlciB0aGlzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgYG5ldC9jb3JlL25laWdoYm91ci5jYCBhbmQgYHBuZWlnaF9lbnF1ZXVlYCB0byBzZWUgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWlnaHQgaW5mbHVlbmNlIHRoaXMgY29kZSBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbmVpZ2hfZW5xdWV1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmVpZ2hib3VyLmM9MTcxMT1zdGF0aWMgdW5zaWduZWQgbG9uZyBuZWlnaF9wcm94eV9kZWxheShzdHJ1Y3QgbmVpZ2hfcGFybXMgKnApXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTcyMS1cbm5ldC9jb3JlL25laWdoYm91ci5jOjE3MjI6dm9pZCBwbmVpZ2hfZW5xdWV1ZShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5laWdoX3Bhcm1zICpwLFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTcyMy1cdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTc0OC19XG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNzQ5OkVYUE9SVF9TWU1CT0wocG5laWdoX2VucXVldWUpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTc1MC1cbi0tXG5uZXQvaXB2NC9hcnAuYz03MDI9c3RhdGljIGludCBhcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9hcnAuYy04ODAtXHRcdFx0XHR9IGVsc2Uge1xubmV0L2lwdjQvYXJwLmM6ODgxOlx0XHRcdFx0XHRwbmVpZ2hfZW5xdWV1ZShcdTAwMjZhcnBfdGJsLFxubmV0L2lwdjQvYXJwLmMtODgyLVx0XHRcdFx0XHRcdCAgICAgICBpbl9kZXYtXHUwMDNlYXJwX3Bhcm1zLCBza2IpO1xuLS1cbm5ldC9pcHY2L25kaXNjLmM9Nzg5PXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yZWN2X25zKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvbmRpc2MuYy05MjAtXHRcdFx0XHRpZiAobilcbm5ldC9pcHY2L25kaXNjLmM6OTIxOlx0XHRcdFx0XHRwbmVpZ2hfZW5xdWV1ZShcdTAwMjZuZF90YmwsIGlkZXYtXHUwMDNlbmRfcGFybXMsIG4pO1xubmV0L2lwdjYvbmRpc2MuYy05MjItXHRcdFx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3MDMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsZXIgQ29udGV4dCBmb3IgYHBuZWlnaF9lbnF1ZXVlYCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBwbmVpZ2hfZW5xdWV1ZWAgaXMgY2FsbGVkIGZyb20gdHdvIGtleSBwbGFjZXM6IGBhcnBfcHJvY2Vzc2AsIHdoaWNoIGhhbmRsZXMgSVB2NCBBZGRyZXNzIFJlc29sdXRpb24gUHJvdG9jb2wsIGFuZCBgbmRpc2NfcmVjdl9uc2AsIHRoZSBJUHY2IE5laWdoYm91ciBTb2xpY2l0YXRpb24gcmVjZWl2ZXIuIE15IGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IHdvdWxkIGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YgYG5ldC9jb3JlL25laWdoYm91ci5jYCwgZ2l2ZW4gdGhlc2UgY2FsbGVycy4gS25vd2luZyB0aGVzZSBjb250ZXh0cyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBib3R0bGVuZWNrcyBhbmQgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMsIGFuZCBob3cgdmFyaW91cyBuZXR3b3JrIGludGVyYWN0aW9ucyB0cmlnZ2VyIGl0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgTWFrZWZpbGUhIEkgbmVlZCB0byBzZWUgd2hhdCBwcmVwcm9jZXNzb3IgZmxhZ3Mgb3IgYnVpbGQgc2V0dGluZ3MgbWlnaHQgaW5mbHVlbmNlIHRoZSBjb21waWxhdGlvbiBhbmQsIGJ5IGV4dGVuc2lvbiwgdGhlIGJlaGF2aW9yIG9mIHRoaXMgcGFydGljdWxhciBmaWxlLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgaGludHMgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBpbiBwbGFjZSBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrIHRvIGZ1bmN0aW9uIHByb3Blcmx5IGFuZCBob3cgdGhleSB0aWUgaW50byB0aGUgY2FsbGVyIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVpZ2hib3VyXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTEyPW9iai15XHRcdCAgICAgJiM0Mzs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlOjEzOlx0XHRcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cdFx0XHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDkwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBuZWlnaGJvdXIub2AgRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBsaW5lLCBgb2JqLXkgJiM0Mzs9IG5laWdoYm91ci5vYCwgYnVyaWVkIGluIGBuZXQvY29yZS9NYWtlZmlsZWAuIFRoaXMgbWVhbnMgYG5laWdoYm91ci5vYCBpcyBiZWluZyBjb21waWxlZCBpbnRvIGBuZXQvY29yZWAsIHdoaWNoIGl0c2VsZiBpcyBjb250aW5nZW50IG9uIGBDT05GSUdfTkVUPXlgLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGBDT05GSUdfTkVUYCBpcyB0aGUgZm91bmRhdGlvbi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgbmVpZ2hib3VyLm9gJiMzOTtzIGZ1bmN0aW9uYWxpdHkgaXMgZGlyZWN0bHkgdGllZCB0byBJUHY0IEFSUCBvciBJUHY2IE5ELiBJJiMzOTttIHRoaW5raW5nLCBpcyB0aGVyZSBhbiBleHRyYSBjb25maWd1cmF0aW9uIG5lZWRlZD8gRG9lcyBpdCBuZWVkIGBDT05GSUdfSU5FVGAgZm9yIEFSUCBvciBgQ09ORklHX0lQVjZgIGZvciBJUHY2IE5EPwoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYG5ldC9LY29uZmlnYCBhbmQgdGhlbiBtb3ZlIG9uIHRvIHRoZSBtb3JlIHNwZWNpZmljIGBuZXQvaXB2NC9LY29uZmlnYCBvciBldmVuIGBuZXQvaXB2Ni9LY29uZmlnYCBpZiBJIG5lZWQgdG8gZHJpbGwgZG93biBmdXJ0aGVyLiBHaXZlbiB0aGF0IGBDT05GSUdfTkVUYCBpcyB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgdGhpcyBtZWFucyB0aGF0IHRoZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSBpcyBhbG1vc3QgYWx3YXlzIHByZXNlbnQuIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgbW9yZSBncmFudWxhciBjb25maWd1cmF0aW9ucy4gQWgsIHJpZ2h0LCBgcG5laWdoX2VucXVldWVgIGlzIGludm9rZWQgYnkgQVJQLCBhbmQgYWxzbyBieSBJUHY2IE5ELCBtZWFuaW5nIGl0IGlzIHJlbGF0ZWQgdG8gYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YC4gTm93LCBJIHNob3VsZCBkb3VibGUgY2hlY2ssIGlmIGl0IGlzIHJlbGF0ZWQgdG8gcHJveHkgQVJQL05EIGNvbmZpZ3VyYXRpb25zIG9yIG5laWdoYm91ciB0YWJsZSByZWxhdGVkIHNldHRpbmdzLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIGBuZXQvaXB2NC9LY29uZmlnYCBhbmQgYG5ldC9pcHY2L0tjb25maWdgIGZvciB0aGF0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55IHN1YnRsZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz05OT1jb25maWcgTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUXG4tLVxubmV0L0tjb25maWctMTEzLVxubmV0L0tjb25maWc6MTE0OmNvbmZpZyBJTkVUXG5uZXQvS2NvbmZpZy0xMTUtXHRib29sIFwmIzM0O1RDUC9JUCBuZXR3b3JraW5nXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zMzA9Y29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMU1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzM4LVxubmV0L2lwdjQvS2NvbmZpZzozMzk6Y29uZmlnIElORVRfQUhcbm5ldC9pcHY0L0tjb25maWctMzQwLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEFIIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNTMtXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1Bcbm5ldC9pcHY0L0tjb25maWctMzU1LVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzY4LVxubmV0L2lwdjQvS2NvbmZpZzozNjk6Y29uZmlnIElORVRfRVNQX09GRkxPQURcbm5ldC9pcHY0L0tjb25maWctMzcwLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODEtXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXHRib29sIFwmIzM0O0lQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzkzLVxubmV0L2lwdjQvS2NvbmZpZzozOTQ6Y29uZmlnIElORVRfSVBDT01QXG5uZXQvaXB2NC9LY29uZmlnLTM5NS1cdHRyaXN0YXRlIFwmIzM0O0lQOiBJUENvbXAgdHJhbnNmb3JtYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQwMy1cbm5ldC9pcHY0L0tjb25maWc6NDA0OmNvbmZpZyBJTkVUX1RBQkxFX1BFUlRVUkJfT1JERVJcbm5ldC9pcHY0L0tjb25maWctNDA1LVx0aW50IFwmIzM0O0lORVQ6IFNvdXJjZSBwb3J0IHBlcnR1cmJhdGlvbiB0YWJsZSBzaXplIChhcyBwb3dlciBvZiAyKVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQxMy1cbm5ldC9pcHY0L0tjb25maWc6NDE0OmNvbmZpZyBJTkVUX1hGUk1fVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnLTQxNS1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MTgtXG5uZXQvaXB2NC9LY29uZmlnOjQxOTpjb25maWcgSU5FVF9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWctNDIwLVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQyMi1cbm5ldC9pcHY0L0tjb25maWc6NDIzOmNvbmZpZyBJTkVUX0RJQUdcbm5ldC9pcHY0L0tjb25maWctNDI0LVx0dHJpc3RhdGUgXCYjMzQ7SU5FVDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MzQtXG5uZXQvaXB2NC9LY29uZmlnOjQzNTpjb25maWcgSU5FVF9UQ1BfRElBR1xubmV0L2lwdjQvS2NvbmZpZy00MzYtXHRkZXBlbmRzIG9uIElORVRfRElBR1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDM4LVxubmV0L2lwdjQvS2NvbmZpZzo0Mzk6Y29uZmlnIElORVRfVURQX0RJQUdcbm5ldC9pcHY0L0tjb25maWctNDQwLVx0dHJpc3RhdGUgXCYjMzQ7VURQOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQ0Ni1cbm5ldC9pcHY0L0tjb25maWc6NDQ3OmNvbmZpZyBJTkVUX1JBV19ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQ0OC1cdHRyaXN0YXRlIFwmIzM0O1JBVzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy00NTQtXG5uZXQvaXB2NC9LY29uZmlnOjQ1NTpjb25maWcgSU5FVF9ESUFHX0RFU1RST1lcbm5ldC9pcHY0L0tjb25maWctNDU2LVx0Ym9vbCBcJiMzNDtJTkVUOiBhbGxvdyBwcml2aWxlZ2VkIHByb2Nlc3MgdG8gYWRtaW5pc3RyYXRpdmVseSBjbG9zZSBzb2NrZXRzXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0zOT1jb25maWcgSVBWNl9PUFRJTUlTVElDX0RBRFxuLS1cbm5ldC9pcHY2L0tjb25maWctNDYtXG5uZXQvaXB2Ni9LY29uZmlnOjQ3OmNvbmZpZyBJTkVUNl9BSFxubmV0L2lwdjYvS2NvbmZpZy00OC1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IEFIIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy02MS1cbm5ldC9pcHY2L0tjb25maWc6NjI6Y29uZmlnIElORVQ2X0VTUFxubmV0L2lwdjYvS2NvbmZpZy02My1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctNzYtXG5uZXQvaXB2Ni9LY29uZmlnOjc3OmNvbmZpZyBJTkVUNl9FU1BfT0ZGTE9BRFxubmV0L2lwdjYvS2NvbmZpZy03OC1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy04OS1cbm5ldC9pcHY2L0tjb25maWc6OTA6Y29uZmlnIElORVQ2X0VTUElOVENQXG5uZXQvaXB2Ni9LY29uZmlnLTkxLVx0Ym9vbCBcJiMzNDtJUHY2OiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTAxLVxubmV0L2lwdjYvS2NvbmZpZzoxMDI6Y29uZmlnIElORVQ2X0lQQ09NUFxubmV0L2lwdjYvS2NvbmZpZy0xMDMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUENvbXAgdHJhbnNmb3JtYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTEyMD1jb25maWcgSVBWNl9JTEFcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE0MC1cbm5ldC9pcHY2L0tjb25maWc6MTQxOmNvbmZpZyBJTkVUNl9YRlJNX1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0xNDItXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY2L0tjb25maWctMTQ1LVxubmV0L2lwdjYvS2NvbmZpZzoxNDY6Y29uZmlnIElORVQ2X1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0xNDctXHR0cmlzdGF0ZVxuLS1cbm5ldC9tcHRjcC9LY29uZmlnPTE0PWlmIE1QVENQXG5uZXQvbXB0Y3AvS2NvbmZpZy0xNS1cbm5ldC9tcHRjcC9LY29uZmlnOjE2OmNvbmZpZyBJTkVUX01QVENQX0RJQUdcbm5ldC9tcHRjcC9LY29uZmlnLTE3LVx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcbi0tXG5uZXQvcHNwL0tjb25maWctNC0jXG5uZXQvcHNwL0tjb25maWc6NTpjb25maWcgSU5FVF9QU1Bcbm5ldC9wc3AvS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtQU1AgU2VjdXJpdHkgUHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9zY3RwL0tjb25maWc9Njg9ZW5kY2hvaWNlXG5uZXQvc2N0cC9LY29uZmlnLTY5LVxubmV0L3NjdHAvS2NvbmZpZzo3MDpjb25maWcgSU5FVF9TQ1RQX0RJQUdcbm5ldC9zY3RwL0tjb25maWctNzEtXHRkZXBlbmRzIG9uIElORVRfRElBR1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjE1NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVjZW50IENoYW5nZXMgaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBjaGFuZ2VzIGluIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AuIEZpcnN0LCBJJiMzOTtsbCBxdWlja2x5IGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgbW9kaWZpZWQuIEl0IGxvb2tzIGxpa2UgYF9fbmVpZ2hfaWZkb3duYCwgYHBuZWlnaF9lbnF1ZXVlYCwgYW5kIGBuZWlnaF90YWJsZV9pbml0YCB3ZXJlIHRvdWNoZWQuIEhtbW0sIGludGVyZXN0aW5nLgoKSG9sZCBvbi4uLiBgX19uZWlnaF9pZmRvd25gIGlzIHN0YXRpYy4gVGhhdCYjMzk7cyBhIGtleSBkZXRhaWwhIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbGVycy4gTGV0IG1lIHNlZS4uLiBMb29raW5nIHF1aWNrbHkgYXQgdGhlIGNvZGViYXNlLCBpdCBsb29rcyBsaWtlIGBuZWlnaF9jYXJyaWVyX2Rvd25gLCBgbmVpZ2hfaWZkb3duYCwgYW5kIGBuZWlnaF90YWJsZV9jbGVhcmAgY291bGQgYmUgY2FsbGluZyBgX19uZWlnaF9pZmRvd25gLiBMZXQgbWUgY29uZmlybSB0aGlzIGFuZCBzZWUgaWYgYG5laWdoX3RhYmxlX2NsZWFyYCBpcyBjYWxsaW5nIGBfX25laWdoX2lmZG93bmAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgZm9yIGNvbmNlcm4uIExldCBtZSBxdWlja2x5IGV4YW1pbmUgdGhhdCBmdW5jdGlvbiBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmVpZ2hib3VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4ODU6XHQvKlxuMTg4NjpcdCAqIE9ubHkgY2FsbGVkIGZyb20gbmRpc2NfY2xlYW51cCgpLCB3aGljaCBtZWFucyB0aGlzIGlzIGRlYWQgY29kZVxuMTg4NzpcdCAqIGJlY2F1c2Ugd2Ugbm8gbG9uZ2VyIGNhbiB1bmxvYWQgSVB2NiBtb2R1bGUuXG4xODg4Olx0ICovXG4xODg5Olx0aW50IG5laWdoX3RhYmxlX2NsZWFyKGludCBpbmRleCwgc3RydWN0IG5laWdoX3RhYmxlICp0YmwpXG4xODkwOlx0e1xuMTg5MTpcdFx0UkNVX0lOSVRfUE9JTlRFUihuZWlnaF90YWJsZXNbaW5kZXhdLCBOVUxMKTtcbjE4OTI6XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuMTg5MzpcdFxuMTg5NDpcdFx0LyogSXQgaXMgbm90IGNsZWFuLi4uIEZpeCBpdCB0byB1bmxvYWQgSVB2NiBtb2R1bGUgc2FmZWx5ICovXG4xODk1Olx0XHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2dGJsLVx1MDAzZW1hbmFnZWRfd29yayk7XG4xODk2Olx0XHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2dGJsLVx1MDAzZWdjX3dvcmspO1xuMTg5NzpcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyKTtcbjE4OTg6XHRcdHBuZWlnaF9xdWV1ZV9wdXJnZShcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUsIE5VTEwsIHRibC1cdTAwM2VmYW1pbHkpO1xuMTg5OTpcdFx0bmVpZ2hfaWZkb3duKHRibCwgTlVMTCk7XG4xOTAwOlx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2dGJsLVx1MDAzZWVudHJpZXMpKVxuMTkwMTpcdFx0XHRwcl9jcml0KFwmIzM0O25laWdoYm91ciBsZWFrYWdlXFxuXCYjMzQ7KTtcbjE5MDI6XHRcbjE5MDM6XHRcdGNhbGxfcmN1KFx1MDAyNnJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQodGJsLVx1MDAzZW5odCwgMSktXHUwMDNlcmN1LFxuMTkwNDpcdFx0XHQgbmVpZ2hfaGFzaF9mcmVlX3JjdSk7XG4xOTA1Olx0XHR0YmwtXHUwMDNlbmh0ID0gTlVMTDtcbjE5MDY6XHRcbjE5MDc6XHRcdGtmcmVlKHRibC1cdTAwM2VwaGFzaF9idWNrZXRzKTtcbjE5MDg6XHRcdHRibC1cdTAwM2VwaGFzaF9idWNrZXRzID0gTlVMTDtcbjE5MDk6XHRcbjE5MTA6XHRcdHJlbW92ZV9wcm9jX2VudHJ5KHRibC1cdTAwM2VpZCwgaW5pdF9uZXQucHJvY19uZXRfc3RhdCk7XG4xOTExOlx0XG4xOTEyOlx0XHRmcmVlX3BlcmNwdSh0YmwtXHUwMDNlc3RhdHMpO1xuMTkxMzpcdFx0dGJsLVx1MDAzZXN0YXRzID0gTlVMTDtcbjE5MTQ6XHRcbjE5MTU6XHRcdHJldHVybiAwO1xuMTkxNjpcdH1cbjE5MTc6XHRcbjE5MTg6XHRzdGF0aWMgc3RydWN0IG5laWdoX3RhYmxlICpuZWlnaF9maW5kX3RhYmxlKGludCBmYW1pbHkpXG4xOTE5Olx0e1xuMTkyMDpcdFx0c3RydWN0IG5laWdoX3RhYmxlICp0YmwgPSBOVUxMO1xuMTkyMTpcdFxuMTkyMjpcdFx0c3dpdGNoIChmYW1pbHkpIHtcbjE5MjM6XHRcdGNhc2UgQUZfSU5FVDpcbjE5MjQ6XHRcdFx0dGJsID0gcmN1X2RlcmVmZXJlbmNlX3J0bmwobmVpZ2hfdGFibGVzW05FSUdIX0FSUF9UQUJMRV0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIzNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgbmVpZ2hfaWZkb3duYCBhbmQgYG5laWdoX2NhcnJpZXJfZG93bmAgQ2FsbHMqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gdGhpbmtpbmcgaXMsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgYW5kIGZpZ3VyZSBvdXQgdGhlIGNhbGwgc2l0ZXMgZm9yIGBuZWlnaF9pZmRvd25gIGFuZCBgbmVpZ2hfY2Fycmllcl9kb3duYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdHJpZ2dlcmVkIHdpdGhpbiB0aGUgc3lzdGVtLiBBcmUgdGhleSBkaXJlY3QgY2FsbHMgZnJvbSB0aGUgbmV0d29yayBzdGFjaywgb3IgYXJlIHRoZXkgYmVpbmcgaW52b2tlZCBpbmRpcmVjdGx5IHRocm91Z2ggc29tZSBvdGhlciBsYXllciBvciBldmVudD8gQXJlIHRoZXkgcmVsYXRlZCBhbmQgY2FsbGVkIGluIHNlcXVlbmNlLCBvciBhcmUgdGhleSBzZXBhcmF0ZSBldmVudHM/CgpJJiMzOTttIG1lbnRhbGx5IG1hcHBpbmcgdGhlIGNvbnRyb2wgZmxvdy4gSSYjMzk7bSB3b25kZXJpbmcgaWYgYG5laWdoX2lmZG93bmAgaXMgY2FsbGVkIHdoZW4gYW4gaW50ZXJmYWNlIGdvZXMgZG93biBnZW5lcmFsbHksIHJlZ2FyZGxlc3Mgb2YgdGhlIHJlYXNvbiwgYW5kIHRoZW4gYG5laWdoX2NhcnJpZXJfZG93bmAgaXMgY2FsbGVkIGluIGNvbmp1bmN0aW9uLCBvciBhcyBhIGNvbnNlcXVlbmNlLCBvZiB0aGUgbGluayBzdGF0ZSB0cmFuc2l0aW9uaW5nLiBBbHRlcm5hdGl2ZWx5LCBhcmUgdGhleSBzZXBhcmF0ZSwgc3BlY2lhbGl6ZWQgaGFuZGxlcnMgZm9yIGRpZmZlcmVudCBzY2VuYXJpb3Mg4oCTIG9uZSBmb3IgYWRtaW5pc3RyYXRpdmUgc2h1dGRvd24gdmVyc3VzIGEgcGh5c2ljYWwgbGluayBmYWlsdXJlPyBVbmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpY3Mgb2Ygd2hlbiBhbmQgd2h5IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhlY3V0ZWQgaXMgY3JpdGljYWwgZm9yIHBpbnBvaW50aW5nIHRoZSByb290IGNhdXNlIG9mIGFueSBvYnNlcnZlZCBiZWhhdmlvci4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRob3NlIGZ1bmN0aW9ucywgb2YgY291cnNlLCB0byBzZWUgaWYgdGhleSYjMzk7cmUgcGFzc2luZyBhbnl0aGluZyB0aGF0JiMzOTtzIHJlbGV2YW50IHRvIHRoZSBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25laWdoXyhjYXJyaWVyXyk/aWZkb3duJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYz01NT1zdGF0aWMgdm9pZCBfX25laWdoX25vdGlmeShzdHJ1Y3QgbmVpZ2hib3VyICpuLCBpbnQgdHlwZSwgaW50IGZsYWdzLCB1MzIgcGlkKTtcbm5ldC9jb3JlL25laWdoYm91ci5jOjU2OnN0YXRpYyB2b2lkIHBuZWlnaF9pZmRvd24oc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvY29yZS9uZWlnaGJvdXIuYy01Ny1cdFx0XHQgIGJvb2wgc2tpcF9wZXJtKTtcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYz00NTQ9dm9pZCBuZWlnaF9jaGFuZ2VhZGRyKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTQ2MC1cbm5ldC9jb3JlL25laWdoYm91ci5jOjQ2MTpzdGF0aWMgaW50IF9fbmVpZ2hfaWZkb3duKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtNDYyLVx0XHRcdCAgYm9vbCBza2lwX3Blcm0pXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtNDcyLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6NDczOlx0cG5laWdoX2lmZG93bih0YmwsIGRldiwgc2tpcF9wZXJtKTtcbm5ldC9jb3JlL25laWdoYm91ci5jLTQ3NC1cdC8qIFRoZSBjYWxsYmFjayBkb2VzIG5vdCB0YWtlIHRoaXMgbG9jaywgc28gc3luYyBkZWxldGlvbiBjYW4gd2FpdCBmb3IgaXQuICovXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM9NDg0PWludCBuZWlnaF9jYXJyaWVyX2Rvd24oc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9uZWlnaGJvdXIuYy00ODUte1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6NDg2Olx0X19uZWlnaF9pZmRvd24odGJsLCBkZXYsIHRydWUpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtNDg3LVx0cmV0dXJuIDA7XG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtNDg5LVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6NDkwOmludCBuZWlnaF9pZmRvd24oc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9uZWlnaGJvdXIuYy00OTEte1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6NDkyOlx0X19uZWlnaF9pZmRvd24odGJsLCBkZXYsIGZhbHNlKTtcbm5ldC9jb3JlL25laWdoYm91ci5jLTQ5My1cdHJldHVybiAwO1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jPTgzNz1pbnQgcG5laWdoX2RlbGV0ZShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCB2b2lkICpwa2V5LFxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTg2OS1cbm5ldC9jb3JlL25laWdoYm91ci5jOjg3MDpzdGF0aWMgdm9pZCBwbmVpZ2hfaWZkb3duKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtODcxLVx0XHRcdCAgYm9vbCBza2lwX3Blcm0pXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MTg4OT1pbnQgbmVpZ2hfdGFibGVfY2xlYXIoaW50IGluZGV4LCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibClcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xODk4LVx0cG5laWdoX3F1ZXVlX3B1cmdlKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZSwgTlVMTCwgdGJsLVx1MDAzZWZhbWlseSk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxODk5Olx0bmVpZ2hfaWZkb3duKHRibCwgTlVMTCk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xOTAwLVx0aWYgKGF0b21pY19yZWFkKFx1MDAyNnRibC1cdTAwM2VlbnRyaWVzKSlcbi0tXG5uZXQvaXB2NC9hcnAuYz0xMzY1PXZvaWQgYXJwX2lmZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2lwdjQvYXJwLmMtMTM2Ni17XG5uZXQvaXB2NC9hcnAuYzoxMzY3Olx0bmVpZ2hfaWZkb3duKFx1MDAyNmFycF90YmwsIGRldik7XG5uZXQvaXB2NC9hcnAuYy0xMzY4LX1cbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTM4NzY9c3RhdGljIGludCBhZGRyY29uZl9pZmRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB1bnJlZ2lzdGVyKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNDA0My1cdFx0bmVpZ2hfcGFybXNfcmVsZWFzZShcdTAwMjZuZF90YmwsIGlkZXYtXHUwMDNlbmRfcGFybXMpO1xubmV0L2lwdjYvYWRkcmNvbmYuYzo0MDQ0Olx0XHRuZWlnaF9pZmRvd24oXHUwMDI2bmRfdGJsLCBkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy00MDQ1LVx0XHRpbjZfZGV2X3B1dChpZGV2KTtcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jPTE4NTk9c3RhdGljIGludCBuZGlzY19uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4tLVxubmV0L2lwdjYvbmRpc2MuYy0xODk3LVx0Y2FzZSBORVRERVZfRE9XTjpcbm5ldC9pcHY2L25kaXNjLmM6MTg5ODpcdFx0bmVpZ2hfaWZkb3duKFx1MDAyNm5kX3RibCwgZGV2KTtcbm5ldC9pcHY2L25kaXNjLmMtMTg5OS1cdFx0ZmliNl9ydW5fZ2MoMCwgbmV0LCBmYWxzZSk7XG4tLVxubmV0L2lwdjYvcm91dGUuYz01MDQ2PXZvaWQgcnQ2X2Rpc2FibGVfaXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudClcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTUwNDktXHRydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXYoZGV2KTtcbm5ldC9pcHY2L3JvdXRlLmM6NTA1MDpcdG5laWdoX2lmZG93bihcdTAwMjZuZF90YmwsIGRldik7XG5uZXQvaXB2Ni9yb3V0ZS5jLTUwNTEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODcwOAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBOZWlnaGJvciBEaXNjb3ZlcnkgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbmV0d29yayBuZWlnaGJvciBkaXNjb3ZlcnksIHBhcnRpY3VsYXJseSB3aGVuIGFuIGludGVyZmFjZSBnb2VzIGRvd24uIEkmIzM5O20gc3RhcnRpbmcgd2l0aCBgbmVpZ2hfaWZkb3duYCwgYG5laWdoX2NhcnJpZXJfZG93bmAsIGBfX25laWdoX2lmZG93bmAsIGBwbmVpZ2hfZW5xdWV1ZWAsIGFuZCBgbmVpZ2hfdGFibGVfaW5pdGAuCgpUaGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBjb21lcyB0byBtaW5kLCBhcyBJIGFsd2F5cyBkbywgaXMgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX25laWdoX2lmZG93bmAgaW4gdGhlIGNvbnRleHQgb2YgdGhlIEdDQyBjb21waWxlciBhbmQgdGhlIHZtbGludXggZW52aXJvbm1lbnQuIElzIHRoaXMgZnVuY3Rpb24gc3RhdGljPyBJcyBpdCBpbmxpbmVkPyBVbmRlcnN0YW5kaW5nIHRoaXMgaXMgY3JpdGljYWwgZm9yIHRyYWNpbmcgaXRzIGNhbGwgc3RhY2sgZWZmZWN0aXZlbHkuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgbmVpZ2hfaWZkb3duYCBhbmQgYG5laWdoX2NhcnJpZXJfZG93bmAgdG8gc2VlIGhvdyB0aGV5IHV0aWxpemUgYF9fbmVpZ2hfaWZkb3duYC4KCk5vdywgaWYgSSB0aGluayBhYm91dCBgX19uZWlnaF9pZmRvd25gLCBJIGtub3cgaXQmIzM5O3MgY2FsbGVkIGJ5IGBuZWlnaF9jYXJyaWVyX2Rvd25gIGFuZCBgbmVpZ2hfaWZkb3duYC4gVGhpcyBzdWdnZXN0cyBpdCBjb3VsZCBwb3RlbnRpYWxseSBiZSBpbmxpbmVkIGludG8gdGhvc2UgdHdvIGZ1bmN0aW9ucywgb3IgaXQgbWlnaHQgYmUgYSBzZXBhcmF0ZSBmdW5jdGlvbiBjYWxsLiBTbyBgbmVpZ2hfaWZkb3duYCwgYG5laWdoX2NhcnJpZXJfZG93bmAsIGFuZCBgX19uZWlnaF9pZmRvd25gIChpZiBub3QgaW5saW5lZCkgYXJlIGFsbCBkZWZpbml0ZSBjYW5kaWRhdGVzIGZvciBpbmNsdXNpb24gaW4gbXkgYW5hbHlzaXMuIEFuZCwgb2YgY291cnNlLCBgcG5laWdoX2VucXVldWVgIGlzIGltcG9ydGFudCBhcyB3ZWxsLgoKVGhlbiwgdGhlcmUmIzM5O3MgYG5laWdoX3RhYmxlX2luaXRgLiBBaCwgeWVzLCB0aGlzIGlzIHBhcnQgb2YgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIGlzbiYjMzk7dCBpdD8gSXQmIzM5O3MgY2FsbGVkIGR1cmluZyBib290IG9yIG1vZHVsZSBpbml0aWFsaXphdGlvbiDigJMgcm91dGluZXMgbGlrZSBgYXJwX2luaXRgLCBgbmRpc2NfaW5pdGAsIGBjbGlwX2luaXRgLCBhbmQgYGRuX25laWdoX2luaXRgLiBBaCB3YWl0ISBgbmVpZ2hfdGFibGVfaW5pdGAgaXMgY2FsbGVkIGR1cmluZyB0aGUgaW5pdC4gVGhpcyBtZWFucyBJIHNob3VsZCBjaGVjayB3aGVyZSBgbmVpZ2hfdGFibGVfaW5pdGAgaXMgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZWlnaF90YWJsZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYz0xODI0PXN0YXRpYyBzdHJ1Y3QgbmVpZ2hfdGFibGUgX19yY3UgKm5laWdoX3RhYmxlc1tORUlHSF9OUl9UQUJMRVNdIF9fcmVhZF9tb3N0bHk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xODI1LVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTgyNjp2b2lkIG5laWdoX3RhYmxlX2luaXQoaW50IGluZGV4LCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibClcbm5ldC9jb3JlL25laWdoYm91ci5jLTE4Mjcte1xuLS1cbm5ldC9pcHY0L2FycC5jPTE1MTQ9dm9pZCBfX2luaXQgYXJwX2luaXQodm9pZClcbm5ldC9pcHY0L2FycC5jLTE1MTUte1xubmV0L2lwdjQvYXJwLmM6MTUxNjpcdG5laWdoX3RhYmxlX2luaXQoTkVJR0hfQVJQX1RBQkxFLCBcdTAwMjZhcnBfdGJsKTtcbm5ldC9pcHY0L2FycC5jLTE1MTctXG4tLVxubmV0L2lwdjYvbmRpc2MuYz0yMDA1PWludCBfX2luaXQgbmRpc2NfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMjAxNC1cdCAqL1xubmV0L2lwdjYvbmRpc2MuYzoyMDE1Olx0bmVpZ2hfdGFibGVfaW5pdChORUlHSF9ORF9UQUJMRSwgXHUwMDI2bmRfdGJsKTtcbm5ldC9pcHY2L25kaXNjLmMtMjAxNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2NTUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA1NTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBDb25jdXJyZW5jeSBJc3N1ZXMgaW4gTmVpZ2hib3IgRGlzY292ZXJ5IFRhYmxlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gYG5laWdoX3RhYmxlX2luaXRgIGlzIGEgb25lLXRpbWUgdGhpbmcgYXQgdGhlIHN0YXJ0LCBub3QgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuIEJ1dCBgcG5laWdoX2VucXVldWVgLCBgbmVpZ2hfaWZkb3duYCwgYW5kIGBuZWlnaF9jYXJyaWVyX2Rvd25gPyBUaG9zZSBhcmUgcnVudGltZSBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBoaXQgdGhlIGNvZGUgSSYjMzk7dmUgYmVlbiB3b3JraW5nIG9uLCBhbmQgdGhlIG5ldyBsb2NrLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBkZWFkbG9jayBzY2VuYXJpb3MsIHBhcnRpY3VsYXJseSB3aXRoaW4gYF9fbmVpZ2hfaWZkb3duYC4gSGVyZSYjMzk7cyB3aGF0JiMzOTtzIGhhcHBlbmluZzogaXQgY2FsbHMgYHBuZWlnaF9pZmRvd25gLCB0aGVuIGdyYWJzIGB0YmwtJmd0O3Byb3h5X3RpbWVyX2xvY2tgLCBwdXJnZXMgYHRibC0mZ3Q7cHJveHlfcXVldWVgIHdpdGggYHBuZWlnaF9xdWV1ZV9wdXJnZWAsIGFuZCAqdGhlbiogY29uZGl0aW9uYWxseSBkZWxldGVzIHRoZSB0aW1lciB3aXRoIGB0aW1lcl9kZWxldGVfc3luY2AgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LiBIb2xkIG9uIGEgc2Vjb25k4oCmIGB0aW1lcl9kZWxldGVfc3luY2AgaXMgY2FsbGVkICp3aGlsZSogaG9sZGluZyBgdGJsLSZndDtwcm94eV90aW1lcl9sb2NrYD8gVGhhdCYjMzk7cyBub3QgZ29vZC4gCgpXaGF0IGlmIHRoZSBgbmVpZ2hfcHJveHlfcHJvY2Vzc2AgdGltZXIgY2FsbGJhY2sgaXMgcnVubmluZyBvbiBhbm90aGVyIENQVSAqcmlnaHQgbm93Kj8gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCB3b3Jrcy4gTGV0JiMzOTtzIGxvb2sgYXQgYG5laWdoX3Byb3h5X3Byb2Nlc3NgOgoKT2theSwgc28gYG5laWdoX3Byb3h5X3Byb2Nlc3NgICpkb2VzbiYjMzk7dCogdGFrZSBgdGJsLSZndDtwcm94eV90aW1lcl9sb2NrYC4gSXQgZ3JhYnMgYHRibC0mZ3Q7cHJveHlfcXVldWUubG9ja2AgaW5zdGVhZC4gQnV0LCBpbXBvcnRhbnRseSwgaW5zaWRlIHRoYXQgY3JpdGljYWwgc2VjdGlvbiwgaXQgKmNhbGxzIGB0YmwtJmd0O3Byb3h5X3JlZG8oc2tiKWAqISBUaGF0JiMzOTtzIHRoZSBrZXkuIFdoYXQgaXMgYHRibC0mZ3Q7cHJveHlfcmVkbyhza2IpYCBhY3R1YWxseSBkb2luZz8gSW4gQVJQLCBpdCYjMzk7cyBlaXRoZXIgYHBuZWlnaF9lbnF1ZXVlYCBvciBgYXJwX3Byb2Nlc3NgISBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgYHByb3h5X3JlZG9gIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm94eV9yZWRvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYz0xNjc1PXN0YXRpYyB2b2lkIG5laWdoX3Byb3h5X3Byb2Nlc3Moc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTY5Mi1cbm5ldC9jb3JlL25laWdoYm91ci5jOjE2OTM6XHRcdFx0aWYgKHRibC1cdTAwM2Vwcm94eV9yZWRvIFx1MDAyNlx1MDAyNiBuZXRpZl9ydW5uaW5nKGRldikpIHtcbm5ldC9jb3JlL25laWdoYm91ci5jLTE2OTQtXHRcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNjk1Olx0XHRcdFx0dGJsLVx1MDAzZXByb3h5X3JlZG8oc2tiKTtcbm5ldC9jb3JlL25laWdoYm91ci5jLTE2OTYtXHRcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5uZXQvaXB2NC9hcnAuYz0xNTI9c3RydWN0IG5laWdoX3RhYmxlIGFycF90YmwgPSB7XG4tLVxubmV0L2lwdjQvYXJwLmMtMTU4LVx0LmNvbnN0cnVjdG9yXHQ9IGFycF9jb25zdHJ1Y3Rvcixcbm5ldC9pcHY0L2FycC5jOjE1OTpcdC5wcm94eV9yZWRvXHQ9IHBhcnBfcmVkbyxcbm5ldC9pcHY0L2FycC5jLTE2MC1cdC5pc19tdWx0aWNhc3RcdD0gYXJwX2lzX211bHRpY2FzdCxcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jPTEwOT1zdHJ1Y3QgbmVpZ2hfdGFibGUgbmRfdGJsID0ge1xuLS1cbm5ldC9pcHY2L25kaXNjLmMtMTE3LVx0LnBkZXN0cnVjdG9yID1cdHBuZGlzY19kZXN0cnVjdG9yLFxubmV0L2lwdjYvbmRpc2MuYzoxMTg6XHQucHJveHlfcmVkbyA9XHRwbmRpc2NfcmVkbyxcbm5ldC9pcHY2L25kaXNjLmMtMTE5LVx0LmlzX211bHRpY2FzdCA9XHRuZGlzY19pc19tdWx0aWNhc3QsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTk1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLgoKKipJbnZlc3RpZ2F0aW5nIGBwYXJwX3JlZG9gIGFuZCBgcG5kaXNjX3JlZG9gKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgZnVuY3Rpb25zIGBwYXJwX3JlZG9gIGFuZCBgcG5kaXNjX3JlZG9gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBkb2luZy4gV2hhdCBhcmUgdGhlaXIgcHVycG9zZXM/IEhvdyBkbyB0aGV5IGZ1bmN0aW9uPyBBcmUgdGhleSBwZXJmb3JtaW5nIGFueSBvcGVyYXRpb25zIHRoYXQgbWlnaHQgYWZmZWN0IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0/IFdoYXQgc29ydCBvZiBkYXRhIGFyZSB0aGV5IHVzaW5nLCBhbmQgd2hlcmUgYXJlIHRoZXkgZ2V0dGluZyB0aGF0IGRhdGE/IFdoYXQgYXJlIHRoZSBlZGdlIGNhc2VzIEkgbmVlZCB0byBjb25zaWRlcj8gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIGZvcm0gYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLiBUaW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcyBhbmQgc2VlIHdoYXQgdGhlc2UgZnVuY3Rpb25zIGRvLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIG5vdGUgYW55IGRldGFpbHMgYXMgSSBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYXJwX3JlZG8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2FycC5jPTEyNj1zdGF0aWMgdm9pZCBhcnBfZXJyb3JfcmVwb3J0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC9pcHY0L2FycC5jOjEyNzpzdGF0aWMgdm9pZCBwYXJwX3JlZG8oc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5uZXQvaXB2NC9hcnAuYy0xMjgtc3RhdGljIGludCBhcnBfaXNfbXVsdGljYXN0KGNvbnN0IHZvaWQgKnBrZXkpO1xuLS1cbm5ldC9pcHY0L2FycC5jPTE1Mj1zdHJ1Y3QgbmVpZ2hfdGFibGUgYXJwX3RibCA9IHtcbi0tXG5uZXQvaXB2NC9hcnAuYy0xNTgtXHQuY29uc3RydWN0b3JcdD0gYXJwX2NvbnN0cnVjdG9yLFxubmV0L2lwdjQvYXJwLmM6MTU5Olx0LnByb3h5X3JlZG9cdD0gcGFycF9yZWRvLFxubmV0L2lwdjQvYXJwLmMtMTYwLVx0LmlzX211bHRpY2FzdFx0PSBhcnBfaXNfbXVsdGljYXN0LFxuLS1cbm5ldC9pcHY0L2FycC5jPTcwMj1zdGF0aWMgaW50IGFycF9wcm9jZXNzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2FycC5jLTk1Mi1cbm5ldC9pcHY0L2FycC5jOjk1MzpzdGF0aWMgdm9pZCBwYXJwX3JlZG8oc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2FycC5jLTk1NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTE1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYmFzZWQgb24gdGhlIHByb21wdDoKCioqRGl2aW5nIGludG8gYHBhcnBfcmVkb2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGNyYWNrIG9wZW4gYG5ldC9pcHY0L2FycC5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgYHBhcnBfcmVkb2AuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gdGhpcyBmdW5jdGlvbjsgdGhlIG5hbWUgaXRzZWxmIGhpbnRzIGF0IHNvbWUga2luZCBvZiByZS10cmFuc21pc3Npb24gbG9naWMgb3IgcGVyaGFwcyBzb21lIHN0YXRlIHJlLWV2YWx1YXRpb24uIEdpdmVuIGl0cyBwbGFjZW1lbnQsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgaXMgaGFuZGxpbmcgdGhlIHJlLXRyYW5zbWlzc2lvbiBvZiBhIHByb2JlIG9yIHJlcXVlc3QgYWZ0ZXIgYW4gaW5pdGlhbCBBUlAgZmFpbHVyZSBvciB0aW1lb3V0LCBsaWtlbHkgaW4gdGhlIGNvbnRleHQgb2YgR3JhdHVpdG91cyBBUlAgb3Igd2hlbiBhIGhvc3QgZmFpbHMgdG8gaW1tZWRpYXRlbHkgcmVzcG9uZCB0byBhbiBBUlAgcmVxdWVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyByZXRyaWVzLCB3aGF0IHRoZSB0aW1lb3V0IHZhbHVlcyBhcmUsIGFuZCB3aGF0IHRyaWdnZXJzIHRoaXMgZnVuY3Rpb24mIzM5O3MgZXhlY3V0aW9uLiBJdCB3aWxsIGJlIGhlbHBmdWwgdG8gc2VlIHdoZXRoZXIgaXQgdXNlcyB0aGUgYGFycF90aW1lcmAgdG8gbWFuYWdlIHRoZSByZXF1ZXN0IG9yIHNvbWUgb3RoZXIga2VybmVsIG1lY2hhbmlzbS4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgZHVwbGljYXRlIGFkZHJlc3MgZGV0ZWN0aW9uIChEQUQpIGF0IGFsbC4gVGltZSB0byBsb29rIGludG8gdGhlIGNvZGUgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2FycC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTUzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NTM6XHRzdGF0aWMgdm9pZCBwYXJwX3JlZG8oc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA5NTQ6XHR7XG4gOTU1Olx0XHRhcnBfcHJvY2VzcyhkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xuIDk1NjpcdH1cbiA5NTc6XHRcbiA5NTg6XHRzdGF0aWMgaW50IGFycF9pc19tdWx0aWNhc3QoY29uc3Qgdm9pZCAqcGtleSlcbiA5NTk6XHR7XG4gOTYwOlx0XHRyZXR1cm4gaXB2NF9pc19tdWx0aWNhc3QoKigoX19iZTMyICopcGtleSkpO1xuIDk2MTpcdH1cbiA5NjI6XHRcbiA5NjM6XHQvKlxuIDk2NDpcdCAqXHRSZWNlaXZlIGFuIGFycCByZXF1ZXN0IGZyb20gdGhlIGRldmljZSBsYXllci5cbiA5NjU6XHQgKi9cbiA5NjY6XHRcbiA5Njc6XHRzdGF0aWMgaW50IGFycF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiA5Njg6XHRcdFx0ICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxuIDk2OTpcdHtcbiA5NzA6XHRcdGVudW0gc2tiX2Ryb3BfcmVhc29uIGRyb3BfcmVhc29uO1xuIDk3MTpcdFx0Y29uc3Qgc3RydWN0IGFycGhkciAqYXJwO1xuIDk3MjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjA4NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWFkbG9jayBEZXRlY3RlZCEgQSBDbGFzc2ljIEFCQkEgQnVnISoqCgpPa2F5LCBzbyBgcGFycF9yZWRvYCBjYWxscyBgYXJwX3Byb2Nlc3NgLiBUaGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCBjYW4gYGFycF9wcm9jZXNzYCBjYWxsIGBwbmVpZ2hfZW5xdWV1ZWA/IEFoLCB5ZXMsIGluIHRoZSBjb2RlLCByaWdodCB0aGVyZTogYHBuZWlnaF9lbnF1ZXVlKCZhbXA7YXJwX3RibCwgaW5fZGV2LSZndDthcnBfcGFybXMsIHNrYik7YCBJdCBkb2VzISBPa2F5LCBwdXR0aW5nIGl0IGFsbCB0b2dldGhlcjogYHBhcnBfcmVkb2AgY2FsbHMgYGFycF9wcm9jZXNzYCwgYW5kIGBhcnBfcHJvY2Vzc2AgY2FsbHMgYHBuZWlnaF9lbnF1ZXVlYC4KCk5vdywgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCBhbmQgY29uY2VybmluZy4gSWYgYHRibC0mZ3Q7cHJveHlfdGltZXJfbG9ja2AgaXMgaGVsZCBieSBgdGltZXJfZGVsZXRlX3N5bmNgIG9uIENQVSAwLCBhbmQgdGhhdCByb3V0aW5lIGlzIHdhaXRpbmcgZm9yIGBuZWlnaF9wcm94eV9wcm9jZXNzYCB0byBjb21wbGV0ZSBvbiBDUFUgMSwgYW5kIG9uIENQVSAxIGBuZWlnaF9wcm94eV9wcm9jZXNzYCBjYWxscyBgcGFycF9yZWRvYCwgd2hpY2ggY2FsbHMgYGFycF9wcm9jZXNzYCwgd2hpY2ggdGhlbiB0cmllcyB0byBhY3F1aXJlIGBzcGluX2xvY2tfYmgoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyX2xvY2spYC4uLiBXZSBoYXZlIGEgcG90ZW50aWFsIGRlYWRsb2NrLgoKTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246CgoqICAgKipDUFUgMDoqKiBgc3Bpbl9sb2NrX2JoKCZhbXA7dGJsLSZndDtwcm94eV90aW1lcl9sb2NrKTtgIGFuZCB0aGVuIGB0aW1lcl9kZWxldGVfc3luYygmYW1wO3RibC0mZ3Q7cHJveHlfdGltZXIpO2Agd2hpY2ggaXMgd2FpdGluZyBmb3IgYG5laWdoX3Byb3h5X3Byb2Nlc3NgIG9uIENQVSAxIHRvIGZpbmlzaC4KKiAgICoqQ1BVIDE6KiogYG5laWdoX3Byb3h5X3Byb2Nlc3MoKWAgaXMgcnVubmluZyAobGlrZWx5IGEgdGltZXIgaGFuZGxlcik6IGB0YmwtJmd0O3Byb3h5X3JlZG8oc2tiKWAgLSZndDsgYHBhcnBfcmVkb2AgLSZndDsgYGFycF9wcm9jZXNzYC4gQW5kLCBpZiBgYXJwX3Byb2Nlc3NgIGNhbGxzIGBwbmVpZ2hfZW5xdWV1ZWAgd2hpY2ggaXQgZG9lcwogICAgYHBuZWlnaF9lbnF1ZXVlYCB0cmllcyB0byBncmFiIGBzcGluX2xvY2tfYmgoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyX2xvY2spO2AKCioqVGhlIERlYWRsb2NrOioqIENQVSAwIGlzIHdhaXRpbmcgZm9yIENQVSAxICh0aGUgdGltZXIgaGFuZGxlcikgdG8gZmluaXNoIHJlbGVhc2luZyBgcHJveHlfdGltZXJfbG9ja2AgYW5kIENQVSAxIGlzIHdhaXRpbmcgZm9yIENQVSAwIHRvIHJlbGVhc2UgYHByb3h5X3RpbWVyX2xvY2tgISBDbGFzc2ljIEFCQkEsIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBhIHRpbWVyIHN5bmNocm9uaXphdGlvbiBidWcuIFRoaXMgY29uZmlybXMgd2h5IHBhdGNoIGZ1enppbmcgd2l0aCBzeXprYWxsZXIgYW5kIHRoZSBsb2NrZGVwIHRvb2wgaXMgY3J1Y2lhbCBpbiBkZXRlY3RpbmcgdGhlc2UgdHlwZXMgb2YgaXNzdWVzIGVhcmx5LgoKSSBzaG91bGQgY2hlY2sgaWYgYGFycF9wcm9jZXNzYCBjYW4gcmUtZW5xdWV1ZSwgcHJvYmFibHkgbG9vayBhcm91bmQgbGluZSA4ODAgaW4gYG5ldC9pcHY0L2FycC5jYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2FycC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NjA6XHRcdFx0XHRcdH1cbiA4NjE6XHRcdFx0XHR9XG4gODYyOlx0XHRcdFx0Z290byBvdXRfY29uc3VtZV9za2I7XG4gODYzOlx0XHRcdH0gZWxzZSBpZiAoSU5fREVWX0ZPUldBUkQoaW5fZGV2KSkge1xuIDg2NDpcdFx0XHRcdGlmIChhZGRyX3R5cGUgPT0gUlROX1VOSUNBU1QgIFx1MDAyNlx1MDAyNlxuIDg2NTpcdFx0XHRcdCAgICAoYXJwX2Z3ZF9wcm94eShpbl9kZXYsIGRldiwgcnQpIHx8XG4gODY2Olx0XHRcdFx0ICAgICBhcnBfZndkX3B2bGFuKGluX2RldiwgZGV2LCBydCwgc2lwLCB0aXApIHx8XG4gODY3Olx0XHRcdFx0ICAgICAocnQtXHUwMDNlZHN0LmRldiAhPSBkZXYgXHUwMDI2XHUwMDI2XG4gODY4Olx0XHRcdFx0ICAgICAgcG5laWdoX2xvb2t1cChcdTAwMjZhcnBfdGJsLCBuZXQsIFx1MDAyNnRpcCwgZGV2KSkpKSB7XG4gODY5Olx0XHRcdFx0XHRuID0gbmVpZ2hfZXZlbnRfbnMoXHUwMDI2YXJwX3RibCwgc2hhLCBcdTAwMjZzaXAsIGRldik7XG4gODcwOlx0XHRcdFx0XHRpZiAobilcbiA4NzE6XHRcdFx0XHRcdFx0bmVpZ2hfcmVsZWFzZShuKTtcbiA4NzI6XHRcbiA4NzM6XHRcdFx0XHRcdGlmIChORUlHSF9DQihza2IpLVx1MDAzZWZsYWdzIFx1MDAyNiBMT0NBTExZX0VOUVVFVUVEIHx8XG4gODc0Olx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZXBrdF90eXBlID09IFBBQ0tFVF9IT1NUIHx8XG4gODc1Olx0XHRcdFx0XHQgICAgTkVJR0hfVkFSKGluX2Rldi1cdTAwM2VhcnBfcGFybXMsIFBST1hZX0RFTEFZKSA9PSAwKSB7XG4gODc2Olx0XHRcdFx0XHRcdGFycF9zZW5kX2RzdChBUlBPUF9SRVBMWSwgRVRIX1BfQVJQLFxuIDg3NzpcdFx0XHRcdFx0XHRcdCAgICAgc2lwLCBkZXYsIHRpcCwgc2hhLFxuIDg3ODpcdFx0XHRcdFx0XHRcdCAgICAgZGV2LVx1MDAzZWRldl9hZGRyLCBzaGEsXG4gODc5Olx0XHRcdFx0XHRcdFx0ICAgICByZXBseV9kc3QpO1xuIDg4MDpcdFx0XHRcdFx0fSBlbHNlIHtcbiA4ODE6XHRcdFx0XHRcdFx0cG5laWdoX2VucXVldWUoXHUwMDI2YXJwX3RibCxcbiA4ODI6XHRcdFx0XHRcdFx0XHQgICAgICAgaW5fZGV2LVx1MDAzZWFycF9wYXJtcywgc2tiKTtcbiA4ODM6XHRcdFx0XHRcdFx0Z290byBvdXRfZnJlZV9kc3Q7XG4gODg0Olx0XHRcdFx0XHR9XG4gODg1Olx0XHRcdFx0XHRnb3RvIG91dF9jb25zdW1lX3NrYjtcbiA4ODY6XHRcdFx0XHR9XG4gODg3Olx0XHRcdH1cbiA4ODg6XHRcdH1cbiA4ODk6XHRcbiA4OTA6XHRcdC8qIFVwZGF0ZSBvdXIgQVJQIHRhYmxlcyAqL1xuIDg5MTpcdFxuIDg5MjpcdFx0biA9IF9fbmVpZ2hfbG9va3VwKFx1MDAyNmFycF90YmwsIFx1MDAyNnNpcCwgZGV2LCAwKTtcbiA4OTM6XHRcbiA4OTQ6XHRcdGFkZHJfdHlwZSA9IC0xO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzY1MQoJCQkJCQkJb3V0cHV0OiAyMTMKCQkJCQkJCXRob3VnaHRzOiA5OTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIExvY2sgSW52ZXJzaW9uIGluIE5laWdoYm9yIFN1YnN5c3RlbSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBMaW5lIDg3MyBpbiBgbmV0L2lwdjQvYXJwLmNgIGNhdWdodCBteSBhdHRlbnRpb24uIFRoZSBgTE9DQUxMWV9FTlFVRVVFRGAgZmxhZyBpbiB0aGUgQVJQIGNvbnRleHQgcHJldmVudHMgcmUtZW5xdWV1aW5nIG9mIHRoZSAqc2FtZSogcGFja2V0LiBIb3dldmVyLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGJyb2FkZXIgaW1wbGljYXRpb25zOiBJUHY2LCBvdGhlciBwYWNrZXQgdHlwZXMsIG9yIGV2ZW4gbG9ja2RlcCBpdHNlbGYgZmxhZ2dpbmcgYSBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb24uIERpZ2dpbmcgZGVlcGVyLCBJIHNlZSBgX190aW1lcl9kZWxldGVfc3luY2AgdXNlcyBgbG9jYWxfaXJxX3NhdmVgIGFuZCBgbG9jYWxfaXJxX3Jlc3RvcmVgIHdpdGggYSBgbG9ja2RlcF9tYXBgLiBUaGUgaXNzdWU/IElmIGB0aW1lcl9kZWxldGVfc3luY2AgaXMgY2FsbGVkIHdoaWxlIGBwcm94eV90aW1lcl9sb2NrYCBpcyBoZWxkLCB0aGVuIHdlIGhhdmU6IGBwcm94eV90aW1lcl9sb2NrYCAtJmd0OyBgdGltZXItJmd0O2xvY2tkZXBfbWFwYC4gTm93LCAqaW5zaWRlKiB0aGUgdGltZXIgY2FsbGJhY2ssIGB0aW1lci0mZ3Q7bG9ja2RlcF9tYXBgIGlzICphbHNvKiBoZWxkLiBJZiB0aGUgY2FsbGJhY2sgYXR0ZW1wdHMgdG8gYWNxdWlyZSBgcHJveHlfdGltZXJfbG9ja2AsIGxvY2tkZXAgd2lsbCAqaW1tZWRpYXRlbHkqIHNjcmVhbSBhYm91dCBhIGNpcmN1bGFyIGRlcGVuZGVuY3khIEEgbG9jayBpbnZlcnNpb24hIFdoYXQgaWYgc29tZSBvdGhlciB0aHJlYWQgY2FsbHMgYHBuZWlnaF9lbnF1ZXVlYCBmcm9tIHdpdGhpbiBhIHRpbWVyLCBuZXRmaWx0ZXIgaG9vaywgb3IgZXZlbiBwYWNrZXQgcmVjZXB0aW9uPwoKVGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZTogY29yZSBuZXR3b3JraW5nIHN5bmNocm9uaXphdGlvbi4gQSBuZXcgc3BpbmxvY2ssIGBwcm94eV90aW1lcl9sb2NrYCwgaXMgYWRkZWQgdG8gYHN0cnVjdCBuZWlnaF90YWJsZWAuIEl0JiMzOTtzIGFjcXVpcmVkIGluIGBwbmVpZ2hfZW5xdWV1ZWAgYW5kIGBfX25laWdoX2lmZG93bmAuIGB0aW1lcl9kZWxldGVfc3luY2AgaXMgY2FsbGVkIHVuZGVyIGBwcm94eV90aW1lcl9sb2NrYC4gVGhpcyBpcyByaXBlIGZvciBmdXp6aW5nLiBJdCYjMzk7cyBlYXNpbHkgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIG9wZXJhdGlvbnMsIHZpcnR1YWwgZGV2aWNlcyAodHVuL3RhcCwgdmV0aCwgbG9vcGJhY2spLCByb3V0ZSBjb25maWd1cmF0aW9uLCBuZXRsaW5rLCBBUlAvTkQgdHJhZmZpYywgYW5kIGxpbmsgc3RhdGUgY2hhbmdlcyAoYGlwIGxpbmsgc2V0IC4uLiB1cC9kb3duYCkuCgpgV29ydGhGdXp6aW5nYD8gQWJzb2x1dGVseSwgYHRydWVgLgoKTGV0JiMzOTtzIGxvb2sgYXQgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIGBDT05GSUdfTkVUYCBpcyBlc3NlbnRpYWwsIGFuZCBgQ09ORklHX0lORVRgIGlzIGFsc28gbmVlZGVkIGJlY2F1c2UgYHBuZWlnaF9lbnF1ZXVlYCBpcyB1c2VkIGJ5IElQdjQgQVJQIChgQ09ORklHX0lORVRgKSBhbmQgSVB2NiBORCAoYENPTkZJR19JUFY2YCkuIFRoZSBuZWlnaGJvciBzdWJzeXN0ZW0gaXMgcGFydCBvZiBjb3JlIG5ldHdvcmtpbmcgKGBDT05GSUdfTkVUYCkuIE5vIG90aGVyIHNwZWNpZmljIGNvbmZpZ3MgYXBwZWFyIGNyaXRpY2FsIGF0IHRoaXMgcG9pbnQuIFNvIHRoZSBzZXQgb2YgcmVxdWlyZWQgY29uZmlnIG9wdGlvbnMgYXJlOiBgWyYjMzQ7TkVUJiMzNDssICYjMzQ7SU5FVCYjMzQ7LCAmIzM0O0lQVjYmIzM0O11gIG9yIGBbJiMzNDtORVQmIzM0OywgJiMzNDtJTkVUJiMzNDtdYCAuCgpBcyBmb3IgYEZvY3VzU3ltYm9sc2AsIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczogYHBuZWlnaF9lbnF1ZXVlYCwgYG5laWdoX2lmZG93bmAgKHdoaWNoIGNhbGxzIGBfX25laWdoX2lmZG93bmApLCBgbmVpZ2hfY2Fycmllcl9kb3duYCAod2hpY2ggYWxzbyBjYWxscyBgX19uZWlnaF9pZmRvd25gKSwgYF9fbmVpZ2hfaWZkb3duYCAodGhlIGFjdHVhbCBtb2RpZmllZCBmdW5jdGlvbiksIGBuZWlnaF9wcm94eV9wcm9jZXNzYCAodGhlIHRpbWVyIGNhbGxiYWNrKSwgYW5kIGBwbmVpZ2hfcXVldWVfcHVyZ2VgIChjYWxsZWQgYmVmb3JlIGB0aW1lcl9kZWxldGVfc3luY2ApLgoKSSYjMzk7dmUgdmVyaWZpZWQgdGhlc2Ugc3ltYm9scyBleGlzdCBpbiB0aGUga2VybmVsIGFuZCBhcmUgYWxsIGV4cG9ydGVkLCBvciBpbiB0aGUgY2FzZSBvZiBgX19uZWlnaF9pZmRvd25gLCBzdGF0aWMuIE5vbmUgb2YgdGhlbSBhcmUgdWJpcXVpdG91cywgbWVhbmluZyBub3QgbWVtb3J5IGFsbG9jYXRvcnMsIGNvcmUgc2NoZWR1bGVyLCBvciBnZW5lcmFsIGxvY2sgcHJpbWl0aXZlcy4gVGhleSBhcmUgc3BlY2lmaWMgdG8gbmVpZ2hib3IgcHJveHkgdGltZXJzIGFuZCBpbnRlcmZhY2UgZG93biBldmVudHMgaW4gdGhlIG5laWdoYm9yIHN1YnN5c3RlbS4KCkZpbmFsbHksIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIGV2ZXJ5dGhpbmcgYWdhaW5zdCB0aGUgaW5zdHJ1Y3Rpb25zOiBJJiMzOTtsbCB1c2UgYHNldC1yZXN1bHRzYCB0byBwcm92aWRlIHRoZSBhbmFseXNpcywgaXQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UsIGBXb3J0aEZ1enppbmdgIGlzIHRydWUsIHRoZSBgUmVhc29uaW5nYCBpcyBjb25jaXNlLCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIHNwZWNpZmljLCBub24tdWJpcXVpdG91cywgYW5kIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNwZWNpZmllZC4KCkkgYW0gY29uZmlkZW50LgpgYGBqc29uCnsKJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZSwKJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtJbnRyb2R1Y3Rpb24gb2YgcHJveHlfdGltZXJfbG9jayBpbiBuZXQvY29yZS9uZWlnaGJvdXIuYyBjcmVhdGVzIHBvdGVudGlhbCBsb2NrIGludmVyc2lvbiBpc3N1ZXMgd2hlbiBwbmVpZ2hfZW5xdWV1ZSBvciB0aW1lciBjYWxsYmFja3MgYWNxdWlyZSB0aGUgc2FtZSBsb2NrJiMzNDssCiYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKJiMzNDtwbmVpZ2hfZW5xdWV1ZSYjMzQ7LAomIzM0O25laWdoX2lmZG93biYjMzQ7LAomIzM0O25laWdoX2NhcnJpZXJfZG93biYjMzQ7LAomIzM0O19fbmVpZ2hfaWZkb3duJiMzNDssCiYjMzQ7bmVpZ2hfcHJveHlfcHJvY2VzcyYjMzQ7LAomIzM0O3BuZWlnaF9xdWV1ZV9wdXJnZSYjMzQ7Cl0sCiYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiYjMzQ7TkVUJiMzNDssCiYjMzQ7SU5FVCYjMzQ7LAomIzM0O0lQVjYmIzM0OwpdCn0KYGBgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cG5laWdoX2VucXVldWUmIzM0OywKICAgICYjMzQ7X19uZWlnaF9pZmRvd24mIzM0OywKICAgICYjMzQ7bmVpZ2hfaWZkb3duJiMzNDssCiAgICAmIzM0O25laWdoX2NhcnJpZXJfZG93biYjMzQ7LAogICAgJiMzNDtuZWlnaF9wcm94eV9wcm9jZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBpbiB0aGUgY29yZSBuZXR3b3JraW5nIG5laWdoYm91ciBzdWJzeXN0ZW0gKG5ldC9jb3JlL25laWdoYm91ci5jIGFuZCBpbmNsdWRlL25ldC9uZWlnaGJvdXIuaCkuIEl0IGludHJvZHVjZXMgYSBuZXcgc3BpbmxvY2ssIHByb3h5X3RpbWVyX2xvY2ssIHRvIHNlcmlhbGl6ZSBwcm94eSB0aW1lciByZWFybWluZyBpbiBwbmVpZ2hfZW5xdWV1ZSB3aXRoIHF1ZXVlIHB1cmdpbmcgYW5kIHRpbWVyX2RlbGV0ZV9zeW5jIGluIF9fbmVpZ2hfaWZkb3duLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzdGFuZGFyZCBuZXRsaW5rL3N5c2ZzIGRldmljZSBzdGF0ZSBtYW5pcHVsYXRpb24gKGUuZy4sIGJyaW5naW5nIGludGVyZmFjZXMgZG93bikgYW5kIHByb3h5IEFSUC9ORCBwYWNrZXQgaGFuZGxpbmcuIEZ1enppbmcgd2l0aCBzeXprYWxsZXIgKGFuZCBsb2NrZGVwKSBpcyB3YXJyYW50ZWQgdG8gZGV0ZWN0IHBvdGVudGlhbCBsb2NrIGludmVyc2lvbnMsIGRlYWRsb2NrcywgYW5kIHRpbWVyIHN5bmNocm9uaXphdGlvbiByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BuZWlnaF9lbnF1ZXVlJiMzNDssCiAgICAmIzM0O19fbmVpZ2hfaWZkb3duJiMzNDssCiAgICAmIzM0O25laWdoX2lmZG93biYjMzQ7LAogICAgJiMzNDtuZWlnaF9jYXJyaWVyX2Rvd24mIzM0OywKICAgICYjMzQ7bmVpZ2hfcHJveHlfcHJvY2VzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gaW4gdGhlIGNvcmUgbmV0d29ya2luZyBuZWlnaGJvdXIgc3Vic3lzdGVtIChuZXQvY29yZS9uZWlnaGJvdXIuYyBhbmQgaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgpLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHNwaW5sb2NrLCBwcm94eV90aW1lcl9sb2NrLCB0byBzZXJpYWxpemUgcHJveHkgdGltZXIgcmVhcm1pbmcgaW4gcG5laWdoX2VucXVldWUgd2l0aCBxdWV1ZSBwdXJnaW5nIGFuZCB0aW1lcl9kZWxldGVfc3luYyBpbiBfX25laWdoX2lmZG93bi4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3RhbmRhcmQgbmV0bGluay9zeXNmcyBkZXZpY2Ugc3RhdGUgbWFuaXB1bGF0aW9uIChlLmcuLCBicmluZ2luZyBpbnRlcmZhY2VzIGRvd24pIGFuZCBwcm94eSBBUlAvTkQgcGFja2V0IGhhbmRsaW5nLiBGdXp6aW5nIHdpdGggc3l6a2FsbGVyIChhbmQgbG9ja2RlcCkgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb25zLCBkZWFkbG9ja3MsIGFuZCB0aW1lciBzeW5jaHJvbml6YXRpb24gcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgZGVkaWNhdGVkIHNwaW5sb2NrIChgcHJveHlfdGltZXJfbG9ja2ApIHRvIGBzdHJ1Y3QgbmVpZ2hfdGFibGVgIGFuZCB1c2VzIGl0IHRvIHNlcmlhbGl6ZSByZWFybWluZyBvZiBgdGJsLVx1MDAzZXByb3h5X3RpbWVyYCB2aWEgYG1vZF90aW1lcigpYCBpbiBgcG5laWdoX2VucXVldWUoKWAgd2l0aCBxdWV1ZSBwdXJnaW5nIGFuZCBzeW5jaHJvbm91cyB0aW1lciBkZWxldGlvbiBpbiBgX19uZWlnaF9pZmRvd24oKWAuIFRoZSBuZXcgbG9jayBpcyBpbml0aWFsaXplZCB3aXRoIGBzcGluX2xvY2tfaW5pdCgpYCBpbiBgbmVpZ2hfdGFibGVfaW5pdCgpYC5cblxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBwZXJ0YWluIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgYW5kIHRpbWVyIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNo4oCUc3VjaCBhcyBsb2NraW5nIG9yZGVyIGludmVyc2lvbnMsIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9uc+KAlGFyZSBoYW5kbGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBObyBuZXcgdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgcmVhZCBvciBicmFuY2hlZCB1cG9uLCBhbmQgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjg2YzU0ZDFlNzFmNTIyZWUzYzQ5OTQwNmNlYjViNTM5MjgzZDU3NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDA5OjAxOjI0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmggYi9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaAppbmRleCA4ODYwY2MyMTc1ZmMxLi4xNTEwN2MwMGI0ZGY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaApAQCAtMjM5LDYgJiM0MzsyMzksOCBAQCBzdHJ1Y3QgbmVpZ2hfdGFibGUgewogCXN0cnVjdCBsaXN0X2hlYWQJZ2NfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCW1hbmFnZWRfbGlzdDsKIAlzcGlubG9ja190CQlsb2NrOwomIzQzOwkvKiBTZXJpYWxpemVzIHByb3h5IHRpbWVyIHJlYXJtaW5nIHdpdGggdGVhcmRvd24uICovCiYjNDM7CXNwaW5sb2NrX3QJCXByb3h5X3RpbWVyX2xvY2s7CiAJdW5zaWduZWQgbG9uZwkJbGFzdF9yYW5kOwogCXN0cnVjdCBuZWlnaF9zdGF0aXN0aWNzCV9fcGVyY3B1ICpzdGF0czsKIAlzdHJ1Y3QgbmVpZ2hfaGFzaF90YWJsZSBfX3JjdSAqbmh0OwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwppbmRleCAxMzQ5YzBlZWRiNjQyLi4xZWE3OTRhNTQxZWZiIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZWlnaGJvdXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwpAQCAtNDcxLDEwICYjNDM7NDcxLDEzIEBAIHN0YXRpYyBpbnQgX19uZWlnaF9pZmRvd24oc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YmwtJmd0O2xvY2spOwogCiAJcG5laWdoX2lmZG93bih0YmwsIGRldiwgc2tpcF9wZXJtKTsKJiM0MzsJLyogVGhlIGNhbGxiYWNrIGRvZXMgbm90IHRha2UgdGhpcyBsb2NrLCBzbyBzeW5jIGRlbGV0aW9uIGNhbiB3YWl0IGZvciBpdC4gKi8KJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dGJsLSZndDtwcm94eV90aW1lcl9sb2NrKTsKIAlwbmVpZ2hfcXVldWVfcHVyZ2UoJmFtcDt0YmwtJmd0O3Byb3h5X3F1ZXVlLCBkZXYgPyBkZXZfbmV0KGRldikgOiBOVUxMLAogCQkJICAgdGJsLSZndDtmYW1pbHkpOwogCWlmIChza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoJmFtcDt0YmwtJmd0O3Byb3h5X3F1ZXVlKSkKIAkJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyKTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyX2xvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xNzI5LDYgJiM0MzsxNzMyLDcgQEAgdm9pZCBwbmVpZ2hfZW5xdWV1ZShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5laWdoX3Bhcm1zICpwLAogCU5FSUdIX0NCKHNrYiktJmd0O3NjaGVkX25leHQgPSBzY2hlZF9uZXh0OwogCU5FSUdIX0NCKHNrYiktJmd0O2ZsYWdzIHw9IExPQ0FMTFlfRU5RVUVVRUQ7CiAKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dGJsLSZndDtwcm94eV90aW1lcl9sb2NrKTsKIAlzcGluX2xvY2soJmFtcDt0YmwtJmd0O3Byb3h5X3F1ZXVlLmxvY2spOwogCWlmICh0aW1lcl9kZWxldGUoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyKSkgewogCQlpZiAodGltZV9iZWZvcmUodGJsLSZndDtwcm94eV90aW1lci5leHBpcmVzLCBzY2hlZF9uZXh0KSkKQEAgLTE3NDAsNiAmIzQzOzE3NDQsNyBAQCB2b2lkIHBuZWlnaF9lbnF1ZXVlKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmVpZ2hfcGFybXMgKnAsCiAJcC0mZ3Q7cWxlbiYjNDM7JiM0Mzs7CiAJbW9kX3RpbWVyKCZhbXA7dGJsLSZndDtwcm94eV90aW1lciwgc2NoZWRfbmV4dCk7CiAJc3Bpbl91bmxvY2soJmFtcDt0YmwtJmd0O3Byb3h5X3F1ZXVlLmxvY2spOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3RibC0mZ3Q7cHJveHlfdGltZXJfbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKHBuZWlnaF9lbnF1ZXVlKTsKIApAQCAtMTg1OCw2ICYjNDM7MTg2Myw3IEBAIHZvaWQgbmVpZ2hfdGFibGVfaW5pdChpbnQgaW5kZXgsIHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsKQogCQlXQVJOX09OKHRibC0mZ3Q7ZW50cnlfc2l6ZSAlIE5FSUdIX1BSSVZfQUxJR04pOwogCiAJc3Bpbl9sb2NrX2luaXQoJmFtcDt0YmwtJmd0O2xvY2spOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO3RibC0mZ3Q7cHJveHlfdGltZXJfbG9jayk7CiAJbXV0ZXhfaW5pdCgmYW1wO3RibC0mZ3Q7cGhhc2hfbG9jayk7CiAKIAlJTklUX0RFRkVSUkFCTEVfV09SSygmYW1wO3RibC0mZ3Q7Z2Nfd29yaywgbmVpZ2hfcGVyaW9kaWNfd29yayk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzQzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmVpZ2hib3VyaG9vZCBUYWJsZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHBvdGVudGlhbCBrZXJuZWwgbWVtb3J5IHNhZmV0eSBpc3N1ZSwgc3BlY2lmaWNhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIChLTVNBTikgb3IgaWYgdGhpcyBpcyBjb25maW5lZCB0byBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyAoS0FTQU4vTE9DS0RFUCkuIFRoZSBkaWZmIHNob3dzIGNoYW5nZXMgaW4gYGluY2x1ZGUvbmV0L25laWdoYm91ci5oYCBhbmQgYG5ldC9jb3JlL25laWdoYm91ci5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIG15IHN1c3BpY2lvbi4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIGFkZGl0aW9uIG9mIGEgYHNwaW5sb2NrX3QgcHJveHlfdGltZXJfbG9ja2Agd2l0aGluIHRoZSBgc3RydWN0IG5laWdoX3RhYmxlYC4gVGhlIGNvbW1lbnQgZXhwbGljaXRseSBzdGF0ZXMgaXRzIHB1cnBvc2U6ICYjMzQ7LyogU2VyaWFsaXplcyBwcm94eSB0aW1lciByZWFybWluZyB3aXRoIHRlYXJkb3duLiAqLyYjMzQ7LiBUaGlzIHN1Z2dlc3RzIHN5bmNocm9uaXphdGlvbiBhcm91bmQgYSB0aW1lciB1c2VkIGZvciBwcm94eSBuZWlnaGJvdXJzLCB3aGljaCBpcyBhIHByZXR0eSBjb21tb24gcGF0dGVybiBmb3IgdGhpcyBuZXR3b3JraW5nIGNvZGUuCgpJbiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYF9fbmVpZ2hfaWZkb3duYCB0byB0YWtlIGBzcGluX2xvY2tfYmgoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyX2xvY2spYCBhcm91bmQgdGhlIGNhbGxzIHRvIGBwbmVpZ2hfcXVldWVfcHVyZ2UoKWAgYW5kIGB0aW1lcl9kZWxldGVfc3luYygmYW1wO3RibC0mZ3Q7cHJveHlfdGltZXIpYC4gVGhpcyBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGxvY2tpbmcgZG93biBhY2Nlc3MgdG8gdGhlIHByb3h5IHRpbWVyIGR1cmluZyBpbnRlcmZhY2UgZG93biBvcGVyYXRpb25zLCB3aGljaCBpcyBnb29kLiBTaW1pbGFybHksIGBwbmVpZ2hfZW5xdWV1ZWAgbm93IHRha2VzIHRoYXQgc2FtZSBsb2NrIGFyb3VuZCB0aGUgcXVldWVpbmcvcmVhcm1pbmcgb2YgYHRibC0mZ3Q7cHJveHlfdGltZXJgLiBUaGlzIHByb3RlY3RzIGFnYWluc3QgcmFjZSBjb25kaXRpb25zIHdoZW4gYSBwcm94eSBlbnRyeSBpcyBhZGRlZCwgb3IgYW4gZXhpc3RpbmcgcHJveHkgZW50cnkgbmVlZHMgaXRzIHRpbWVyIHJlc2V0LiBGaW5hbGx5LCBgbmVpZ2hfdGFibGVfaW5pdGAgbm93IGluaXRpYWxpemVzIHRoZSBsb2NrLgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gcmVhZCBhcm91bmQgbGluZXMgNDcxLCAxNzI5LCBhbmQgMTg1OCBpbiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgIHVzaW5nIGByZWFkLWZpbGVgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kOgoqICAgVGhlIG92ZXJhbGwgZnVuY3Rpb24gb2YgYG5laWdoX3RhYmxlX2luaXRgLiBXaGF0IGRhdGEgaXMgaW5pdGlhbGl6ZWQgaGVyZSBhbmQgaG93IG1pZ2h0IHRoaXMgYWZmZWN0IHRoZSBsb2NraW5nPwoqICAgVGhlIGV4YWN0IGNvbnRyb2wgZmxvdyBvZiBgX19uZWlnaF9pZmRvd25gLiBXaGF0IGNhbiBoYXBwZW4gZHVyaW5nIGBwbmVpZ2hfcXVldWVfcHVyZ2UoKWAgYW5kIGB0aW1lcl9kZWxldGVfc3luYygpYD8KKiAgIEFuZCBmaW5hbGx5LCBob3cgYHBuZWlnaF9lbnF1ZXVlYCBpcyBjYWxsZWQuIFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnRleHRzIGFuZCB3aGF0IGNvdWxkIGNhdXNlIHJhY2UgY29uZGl0aW9ucyB3aXRoIHRoZSB0aW1lciBpbiB0aGF0IGZ1bmN0aW9uPwoKQmFzZWQgb24gdGhlIGluZm9ybWF0aW9uLCBJJiMzOTtsbCBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIGxvY2tpbmcgbG9naWMgaXMgc291bmQgYW5kIHRoZXJlIGFyZSBubyByZXNpZHVhbCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL25laWdoYm91ci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjU6XHRcdGlmIChsaWtlbHkoZGV2KSkge1xuIDQ2NjpcdFx0XHRuZWlnaF9mbHVzaF9kZXYodGJsLCBkZXYsIHNraXBfcGVybSk7XG4gNDY3Olx0XHR9IGVsc2Uge1xuIDQ2ODpcdFx0XHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNraXBfcGVybSk7XG4gNDY5Olx0XHRcdG5laWdoX2ZsdXNoX3RhYmxlKHRibCk7XG4gNDcwOlx0XHR9XG4gNDcxOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0YmwtXHUwMDNlbG9jayk7XG4gNDcyOlx0XG4gNDczOlx0XHRwbmVpZ2hfaWZkb3duKHRibCwgZGV2LCBza2lwX3Blcm0pO1xuIDQ3NDpcdFx0LyogVGhlIGNhbGxiYWNrIGRvZXMgbm90IHRha2UgdGhpcyBsb2NrLCBzbyBzeW5jIGRlbGV0aW9uIGNhbiB3YWl0IGZvciBpdC4gKi9cbiA0NzU6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XG4gNDc2Olx0XHRwbmVpZ2hfcXVldWVfcHVyZ2UoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3F1ZXVlLCBkZXYgPyBkZXZfbmV0KGRldikgOiBOVUxMLFxuIDQ3NzpcdFx0XHRcdCAgIHRibC1cdTAwM2VmYW1pbHkpO1xuIDQ3ODpcdFx0aWYgKHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUpKVxuIDQ3OTpcdFx0XHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXIpO1xuIDQ4MDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xuIDQ4MTpcdFx0cmV0dXJuIDA7XG4gNDgyOlx0fVxuIDQ4MzpcdFxuIDQ4NDpcdGludCBuZWlnaF9jYXJyaWVyX2Rvd24oc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gNDg1Olx0e1xuIDQ4NjpcdFx0X19uZWlnaF9pZmRvd24odGJsLCBkZXYsIHRydWUpO1xuIDQ4NzpcdFx0cmV0dXJuIDA7XG4gNDg4Olx0fVxuIDQ4OTpcdFxuIDQ5MDpcdGludCBuZWlnaF9pZmRvd24oc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gNDkxOlx0e1xuIDQ5MjpcdFx0X19uZWlnaF9pZmRvd24odGJsLCBkZXYsIGZhbHNlKTtcbiA0OTM6XHRcdHJldHVybiAwO1xuIDQ5NDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA4OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2Ugc2VjdGlvbnMgb2YgYG5ldC9jb3JlL25laWdoYm91ci5jYDoKCioqRGVlcCBEaXZlIG9uIE5laWdoYm91ciBEaXNjb3ZlcnkqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIGNpcmNsZSBiYWNrIGFuZCByZWFsbHkgc2NydXRpbml6ZSBsaW5lcyAxNzIwLTE3NjAgYW5kIDE4NTAtMTg3NSBvZiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLiBUaGVzZSBhcmUgbGlrZWx5IGNydWNpYWwgYXJlYXMgZGVhbGluZyB3aXRoIG5laWdoYm91ciBkaXNjb3ZlcnksIHdoaWNoLCBhcyB3ZSBrbm93LCBpcyBhYnNvbHV0ZWx5IGZ1bmRhbWVudGFsIHRvIGhvdyBJUCBuZXR3b3JraW5nIG9wZXJhdGVzIGF0IHRoZSBsaW5rIGxheWVyLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCAxNzIwLTE3NjAgcHJvYmFibHkgaGFuZGxlcyBlaXRoZXIgdGhlIHJlc29sdXRpb24gaXRzZWxmIG9yIHBlcmhhcHMgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBjYWNoZSBtYW5hZ2VtZW50LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgY29yZSBsb2dpYyB0aGF0IGZpZ3VyZXMgb3V0IHRoZSBNQUMgYWRkcmVzcyBjb3JyZXNwb25kaW5nIHRvIGFuIElQIGFkZHJlc3MsIG9yIGl0IGhhcyB0byBkbyB3aXRoIGhvdyB0aGUgZW50cmllcyBhcmUgcHV0IGludG8gdGhlIEFSUCBjYWNoZS4gVW5kZXJzdGFuZGluZyB0aGF0IGludGVyYWN0aW9uIGlzIGFic29sdXRlbHkga2V5IHRvIG9wdGltaXphdGlvbi4gVGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyB0aGVyZSBhcmUgaHVnZSAtIGEgcG9vcmx5IGltcGxlbWVudGVkIG5laWdoYm91ciBkaXNjb3ZlcnkgYWxnb3JpdGhtIGNhbiBjcmlwcGxlIG5ldHdvcmsgdGhyb3VnaHB1dCBhbmQgbGF0ZW5jeS4KClRoZW4sIHRoZSBzZWNvbmQgc2VjdGlvbiwgMTg1MC0xODc1LCB0aGF0JiMzOTtzIHByb2JhYmx5IHJlbGF0ZWQgdG8gaGFuZGxpbmcgbmVpZ2hib3Igc3RhdGVzIG9yIHRoZWlyIHRpbWVkIGV4cGlyYXRpb24gd2l0aGluIHRoZSBjYWNoZS4gTWF5YmUgaXQmIzM5O3MgYWJvdXQgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBwcm9jZXNzZXMuIElzIGl0IGRlYWxpbmcgd2l0aCByZXRyaWVzLCB0aW1lb3V0cywgb3IgaW52YWxpZGF0aW9uIG9mIHN0YWxlIGVudHJpZXM/IEtub3dpbmcgaG93IGl0IGRlYWxzIHdpdGggdGhlc2UgcG90ZW50aWFsbHkgZXJyb3ItcHJvbmUgc2NlbmFyaW9zIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBrZXJuZWwmIzM5O3Mgb3ZlcmFsbCByb2J1c3RuZXNzLiBJIG5lZWQgdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWFsaW5nIHdpdGggY29uZmxpY3RpbmcgZW50cmllcyBvciByYXBpZGx5IGNoYW5naW5nIG5ldHdvcmsgdG9wb2xvZ2llcy4gVGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHJvdXRpbmcgY2FjaGUgaXMgYW5vdGhlciBrZXkgaXRlbSB0aGF0IGNhbiYjMzk7dCBiZSBvdmVybG9va2VkLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBpbmVmZmljaWVudCBsb2NraW5nIG1lY2hhbmlzbXMsIG9yIGV4Y2Vzc2l2ZSBjb250ZXh0IHN3aXRjaGVzIHdpdGhpbiB0aG9zZSBzZWdtZW50cy4gSSBleHBlY3QgdGhlIGNvZGUgaXMgY2FyZWZ1bGx5IG9wdGltaXplZCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUgY29tcGxldGVseS4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgY29kZSBjb21tZW50cyBhcmUgc3VmZmljaWVudCBvciBpZiBJIGhhdmUgdG8gdHJhY2UgdGhyb3VnaCBtb3JlIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBjb21wbGV0ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL25laWdoYm91ci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzIwOlx0fVxuMTcyMTpcdFxuMTcyMjpcdHZvaWQgcG5laWdoX2VucXVldWUoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZWlnaF9wYXJtcyAqcCxcbjE3MjM6XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IpXG4xNzI0Olx0e1xuMTcyNTpcdFx0dW5zaWduZWQgbG9uZyBzY2hlZF9uZXh0ID0gbmVpZ2hfcHJveHlfZGVsYXkocCk7XG4xNzI2Olx0XG4xNzI3Olx0XHRpZiAocC1cdTAwM2VxbGVuIFx1MDAzZSBORUlHSF9WQVIocCwgUFJPWFlfUUxFTikpIHtcbjE3Mjg6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4xNzI5Olx0XHRcdHJldHVybjtcbjE3MzA6XHRcdH1cbjE3MzE6XHRcbjE3MzI6XHRcdE5FSUdIX0NCKHNrYiktXHUwMDNlc2NoZWRfbmV4dCA9IHNjaGVkX25leHQ7XG4xNzMzOlx0XHRORUlHSF9DQihza2IpLVx1MDAzZWZsYWdzIHw9IExPQ0FMTFlfRU5RVUVVRUQ7XG4xNzM0Olx0XG4xNzM1Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xuMTczNjpcdFx0c3Bpbl9sb2NrKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZS5sb2NrKTtcbjE3Mzc6XHRcdGlmICh0aW1lcl9kZWxldGUoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyKSkge1xuMTczODpcdFx0XHRpZiAodGltZV9iZWZvcmUodGJsLVx1MDAzZXByb3h5X3RpbWVyLmV4cGlyZXMsIHNjaGVkX25leHQpKVxuMTczOTpcdFx0XHRcdHNjaGVkX25leHQgPSB0YmwtXHUwMDNlcHJveHlfdGltZXIuZXhwaXJlcztcbjE3NDA6XHRcdH1cbjE3NDE6XHRcdHNrYl9kc3RfZHJvcChza2IpO1xuMTc0MjpcdFx0ZGV2X2hvbGQoc2tiLVx1MDAzZWRldik7XG4xNzQzOlx0XHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZSwgc2tiKTtcbjE3NDQ6XHRcdHAtXHUwMDNlcWxlbiYjNDM7JiM0Mzs7XG4xNzQ1Olx0XHRtb2RfdGltZXIoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyLCBzY2hlZF9uZXh0KTtcbjE3NDY6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZS5sb2NrKTtcbjE3NDc6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcbjE3NDg6XHR9XG4xNzQ5Olx0RVhQT1JUX1NZTUJPTChwbmVpZ2hfZW5xdWV1ZSk7XG4xNzUwOlx0XG4xNzUxOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmVpZ2hfcGFybXMgKmxvb2t1cF9uZWlnaF9wYXJtcyhzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCxcbjE3NTI6XHRcdFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0ICpuZXQsIGludCBpZmluZGV4KVxuMTc1MzpcdHtcbjE3NTQ6XHRcdHN0cnVjdCBuZWlnaF9wYXJtcyAqcDtcbjE3NTU6XHRcbjE3NTY6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgXHUwMDI2dGJsLVx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcbjE3NTc6XHRcdFx0aWYgKChwLVx1MDAzZWRldiBcdTAwMjZcdTAwMjYgcC1cdTAwM2VkZXYtXHUwMDNlaWZpbmRleCA9PSBpZmluZGV4IFx1MDAyNlx1MDAyNiBuZXRfZXEobmVpZ2hfcGFybXNfbmV0KHApLCBuZXQpKSB8fFxuMTc1ODpcdFx0XHQgICAgKCFwLVx1MDAzZWRldiBcdTAwMjZcdTAwMjYgIWlmaW5kZXggXHUwMDI2XHUwMDI2IG5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSkpXG4xNzU5Olx0XHRcdFx0cmV0dXJuIHA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMzAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIENvZGViYXNlIC0gRm9jdXMgb24gYG5laWdoX3RhYmxlX2luaXRgKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSBjb2RlYmFzZSwgYW5kIEkgd2FudCB0byBzaGlmdCBteSBmb2N1cyBub3cuIEkmIzM5O3ZlIGJlZW4gY29uc2lkZXJpbmcgdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLCBidXQgbGV0JiMzOTtzIHpvb20gaW4gb24gYSBzcGVjaWZpYyBmdW5jdGlvbi4gSSYjMzk7bSBnb2luZyB0byB0dXJuIG15IGF0dGVudGlvbiB0byB0aGUgYG5laWdoX3RhYmxlX2luaXRgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGFyb3VuZCBsaW5lIDE4NTAuIEkga25vdyB0aGlzIGFyZWEgcGxheXMgYSBjcml0aWNhbCByb2xlIGluIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgbmVpZ2hib3IgdGFibGUsIHdoaWNoIGlzIGtleSBmb3IgWyppbnNlcnQgeW91ciBmaWVsZCBvZiBleHBlcnRpc2UsIGUuZy4sIHJvdXRpbmcgcHJvdG9jb2xzLCBuZXR3b3JrIGFkZHJlc3MgcmVzb2x1dGlvbiwgZGlzdHJpYnV0ZWQgY29uc2Vuc3VzLCBldGMuKl0uIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoYXQmIzM5O3MgYmVpbmcgc2V0IHVwIGluIHRoaXMgaW1wbGVtZW50YXRpb24uIEkgaGF2ZSB0byBzZWUgaG93IGl0JiMzOTtzIGRvbmUgc28gSSBjYW4gYXNzZXNzIGl0cyBlZmZpY2llbmN5LCBzY2FsYWJpbGl0eSwgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGFsZ29yaXRobXMgZW1wbG95ZWQgd2l0aGluIGl0LCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBJJiMzOTttIGRpZ2dpbmcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmVpZ2hib3VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NTA6XHRcbjE4NTE6XHRcdFJDVV9JTklUX1BPSU5URVIodGJsLVx1MDAzZW5odCwgbmVpZ2hfaGFzaF9hbGxvYygzKSk7XG4xODUyOlx0XG4xODUzOlx0XHRwaHNpemUgPSAoUE5FSUdIX0hBU0hNQVNLICYjNDM7IDEpICogc2l6ZW9mKHN0cnVjdCBwbmVpZ2hfZW50cnkgKik7XG4xODU0Olx0XHR0YmwtXHUwMDNlcGhhc2hfYnVja2V0cyA9IGt6YWxsb2MocGhzaXplLCBHRlBfS0VSTkVMKTtcbjE4NTU6XHRcbjE4NTY6XHRcdGlmICghdGJsLVx1MDAzZW5odCB8fCAhdGJsLVx1MDAzZXBoYXNoX2J1Y2tldHMpXG4xODU3Olx0XHRcdHBhbmljKFwmIzM0O2Nhbm5vdCBhbGxvY2F0ZSBuZWlnaGJvdXIgY2FjaGUgaGFzaGVzXCYjMzQ7KTtcbjE4NTg6XHRcbjE4NTk6XHRcdGlmICghdGJsLVx1MDAzZWVudHJ5X3NpemUpXG4xODYwOlx0XHRcdHRibC1cdTAwM2VlbnRyeV9zaXplID0gQUxJR04ob2Zmc2V0b2Yoc3RydWN0IG5laWdoYm91ciwgcHJpbWFyeV9rZXkpICYjNDM7XG4xODYxOlx0XHRcdFx0XHRcdHRibC1cdTAwM2VrZXlfbGVuLCBORUlHSF9QUklWX0FMSUdOKTtcbjE4NjI6XHRcdGVsc2VcbjE4NjM6XHRcdFx0V0FSTl9PTih0YmwtXHUwMDNlZW50cnlfc2l6ZSAlIE5FSUdIX1BSSVZfQUxJR04pO1xuMTg2NDpcdFxuMTg2NTpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dGJsLVx1MDAzZWxvY2spO1xuMTg2NjpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xuMTg2NzpcdFx0bXV0ZXhfaW5pdChcdTAwMjZ0YmwtXHUwMDNlcGhhc2hfbG9jayk7XG4xODY4Olx0XG4xODY5Olx0XHRJTklUX0RFRkVSUkFCTEVfV09SSyhcdTAwMjZ0YmwtXHUwMDNlZ2Nfd29yaywgbmVpZ2hfcGVyaW9kaWNfd29yayk7XG4xODcwOlx0XHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSwgXHUwMDI2dGJsLVx1MDAzZWdjX3dvcmssXG4xODcxOlx0XHRcdFx0dGJsLVx1MDAzZXBhcm1zLnJlYWNoYWJsZV90aW1lKTtcbjE4NzI6XHRcdElOSVRfREVGRVJSQUJMRV9XT1JLKFx1MDAyNnRibC1cdTAwM2VtYW5hZ2VkX3dvcmssIG5laWdoX21hbmFnZWRfd29yayk7XG4xODczOlx0XHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSwgXHUwMDI2dGJsLVx1MDAzZW1hbmFnZWRfd29yaywgMCk7XG4xODc0Olx0XG4xODc1Olx0XHR0aW1lcl9zZXR1cChcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXIsIG5laWdoX3Byb3h5X3Byb2Nlc3MsIDApO1xuMTg3NjpcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdF9jbGFzcyhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUsXG4xODc3Olx0XHRcdFx0XHUwMDI2bmVpZ2hfdGFibGVfcHJveHlfcXVldWVfY2xhc3MpO1xuMTg3ODpcdFxuMTg3OTpcdFx0dGJsLVx1MDAzZWxhc3RfZmx1c2ggPSBub3c7XG4xODgwOlx0XHR0YmwtXHUwMDNlbGFzdF9yYW5kXHQ9IG5vdyAmIzQzOyB0YmwtXHUwMDNlcGFybXMucmVhY2hhYmxlX3RpbWUgKiAyMDtcbjE4ODE6XHRcbjE4ODI6XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihuZWlnaF90YWJsZXNbaW5kZXhdLCB0YmwpO1xuMTg4MzpcdH1cbjE4ODQ6XHRcbjE4ODU6XHQvKlxuMTg4NjpcdCAqIE9ubHkgY2FsbGVkIGZyb20gbmRpc2NfY2xlYW51cCgpLCB3aGljaCBtZWFucyB0aGlzIGlzIGRlYWQgY29kZVxuMTg4NzpcdCAqIGJlY2F1c2Ugd2Ugbm8gbG9uZ2VyIGNhbiB1bmxvYWQgSVB2NiBtb2R1bGUuXG4xODg4Olx0ICovXG4xODg5Olx0aW50IG5laWdoX3RhYmxlX2NsZWFyKGludCBpbmRleCwgc3RydWN0IG5laWdoX3RhYmxlICp0YmwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMDUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9uIGluIHRoZSBOZWlnaGJvciBTdWJzeXN0ZW0qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIG5hc3R5IGNvbmN1cnJlbmN5IGJ1Zywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgbmVpZ2hib3Igc3Vic3lzdGVtJiMzOTtzIGhhbmRsaW5nIG9mIHByb3h5IHRpbWVycyB3aGVuIGEgbmV0d29yayBpbnRlcmZhY2UgZ29lcyBkb3duLiBUaGUgY29yZSBpc3N1ZSwgZnJvbSB3aGF0IEkmIzM5O20gZ2F0aGVyaW5nLCByZXZvbHZlcyBhcm91bmQgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGBfX25laWdoX2lmZG93bmAgYW5kIGBwbmVpZ2hfZW5xdWV1ZWAuIEl0JiMzOTtzIGEgY2xhc3NpYyBzaXR1YXRpb246IGB0aW1lcl9kZWxldGVfc3luYygmYW1wO3RibC0mZ3Q7cHJveHlfdGltZXIpYCBpbiBgX19uZWlnaF9pZmRvd25gIGNhbiBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSB3aXRoIGBwbmVpZ2hfZW5xdWV1ZWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYG1vZF90aW1lcigmYW1wO3RibC0mZ3Q7cHJveHlfdGltZXIsIHNjaGVkX25leHQpYC4gVGhlIGNvbW1lbnQgaGlnaGxpZ2h0cyB0aGlzOiBgLyogVGhlIGNhbGxiYWNrIGRvZXMgbm90IHRha2UgdGhpcyBsb2NrLCBzbyBzeW5jIGRlbGV0aW9uIGNhbiB3YWl0IGZvciBpdC4gKi9gLgoKU28sIHRoZSBwcm9ibGVtYXRpYyBzZXF1ZW5jZSBpcyB0aGF0IGlmIGB0aW1lcl9kZWxldGVfc3luY2AgcnVucyB3aGlsZSBgcG5laWdoX2VucXVldWVgIGlzIGFjdGl2ZWx5IG1vZGlmeWluZyB0aGUgdGltZXIsIGBwbmVpZ2hfZW5xdWV1ZWAgbWlnaHQgcG90ZW50aWFsbHkgcmUtYXJtIHRoZSB0aW1lciAqYWZ0ZXIqIG9yIGV2ZW4gKmR1cmluZyogdGhlIHRlYXJkb3duIHByb2Nlc3MgaW5pdGlhdGVkIGJ5IGBfX25laWdoX2lmZG93bmAuIFRoaXMgY3JlYXRlcyB0aGUgcG90ZW50aWFsIGZvciBhIHVzZS1hZnRlci1mcmVlIG9yIGEgcmFjZSBjb25kaXRpb24sIGxlYWRpbmcgdG8gaW5zdGFiaWxpdHkgd2hlbiB0aGUgZGV2aWNlIGlzIHRha2VuIGRvd24uCgpMZXQmIzM5O3MgZGlzc2VjdCB0aGUgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQgaW4gdGhlIHR3byBmdW5jdGlvbnMuIEluIGBfX25laWdoX2lmZG93bmAsIHdlIGhhdmUgYHNwaW5fbG9ja19iaCgmYW1wO3RibC0mZ3Q7cHJveHlfdGltZXJfbG9jayk7YCBmb2xsb3dlZCBieSBgdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyKTtgIGFuZCBmaW5hbGx5LCBgc3Bpbl91bmxvY2tfYmgoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyX2xvY2spO2AuIFRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdGVjdCB0aGUgdGltZXIgZnJvbSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBkdXJpbmcgZGVsZXRpb24uIFRoZW4sIGluIGBwbmVpZ2hfZW5xdWV1ZWAgd2Ugc2VlIGBzcGluX2xvY2tfYmgoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyX2xvY2spO2AgZm9sbG93ZWQgYnkgYG1vZF90aW1lcigmYW1wO3RibC0mZ3Q7cHJveHlfdGltZXIsIHNjaGVkX25leHQpO2AgYW5kLCBhZnRlciBzb21lIG90aGVyIG9wZXJhdGlvbnMsICBgc3Bpbl91bmxvY2tfYmgoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyX2xvY2spO2AuIEludGVyZXN0aW5nbHksIHRoZSBgcHJveHlfdGltZXJfbG9ja2Agc3BpbmxvY2sgaXMgaW5pdGlhbGl6ZWQgd2l0aGluIGBuZWlnaF90YWJsZV9pbml0KClgLCBhcyBgc3Bpbl9sb2NrX2luaXQoJmFtcDt0YmwtJmd0O3Byb3h5X3RpbWVyX2xvY2spO2AuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHZlY3RvcnMuIEkmIzM5O2xsIG1lbnRhbGx5IHJ1biB0aHJvdWdoIG15IHVzdWFsIGNoZWNrczoKCjEuICAqKlVzZXItU3BhY2UgRXhwb3N1cmU6KiogRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZyBjb3VsZCBiZSBhIHByb2JsZW0/IE5vcGUsIG5vdGhpbmcgaXMgZ29pbmcgdG8gdXNlciBzcGFjZS4KMi4gICoqQ29uZGl0aW9uYWwgTG9naWM6KiogQXJlIHRoZXJlIGFueSBuZXcgY29uZGl0aW9uYWwgYnJhbmNoZXMgb3IgbG9naWMgaW50cm9kdWNlZCB0aGF0IGRlcGVuZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzPyBOby4KMy4gICoqRGF0YSBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb246KiogSXMgdGhlcmUgYW55IGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlciBvbiByZWFjaGFibGUgY29kZSBwYXRocz8gSXQgZG9lc24mIzM5O3QgYXBwZWFyIHNvOyBhIG5ldyBgcHJveHlfdGltZXJfbG9ja2Agc3BpbmxvY2sgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGBuZWlnaF90YWJsZWAgc3RydWN0dXJlLiBUaGF0JiMzOTtzIGEgbmV3IGZpZWxkLiBUaGlzIGxvY2sgaXMgaW5pdGlhbGl6ZWQgaW4gYG5laWdoX3RhYmxlX2luaXQoKWAuIFRoZSBgbmVpZ2hfdGFibGVgIHN0cnVjdHVyZSBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIHN0cnVjdHVyZS4KCk9rYXksIHNvIHRoZSBwb3RlbnRpYWwgYnVnIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gYG5laWdoX3RhYmxlYCBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB3aGVyZSBgbmVpZ2hfdGFibGVfaW5pdGAgaXMgY2FsbGVkIG9yIHdoZXJlIGBuZWlnaF90YWJsZWAgaXMgYWxsb2NhdGVkLiBMZXQgbWUgZmluZCB3aGVyZSBgbmVpZ2hfdGFibGVgIGlzIGFsbG9jYXRlZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVpZ2hfdGFibGVfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZWlnaGJvdXIuaD0zMzM9c3RhdGljIGlubGluZSB2b2lkIG5laWdoX2NvbmZpcm0oc3RydWN0IG5laWdoYm91ciAqbilcbi0tXG5pbmNsdWRlL25ldC9uZWlnaGJvdXIuaC0zNDMtXG5pbmNsdWRlL25ldC9uZWlnaGJvdXIuaDozNDQ6dm9pZCBuZWlnaF90YWJsZV9pbml0KGludCBpbmRleCwgc3RydWN0IG5laWdoX3RhYmxlICp0YmwpO1xuaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgtMzQ1LWludCBuZWlnaF90YWJsZV9jbGVhcihpbnQgaW5kZXgsIHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsKTtcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0xODI0PXN0YXRpYyBzdHJ1Y3QgbmVpZ2hfdGFibGUgX19yY3UgKm5laWdoX3RhYmxlc1tORUlHSF9OUl9UQUJMRVNdIF9fcmVhZF9tb3N0bHk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xODI1LVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTgyNjp2b2lkIG5laWdoX3RhYmxlX2luaXQoaW50IGluZGV4LCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibClcbm5ldC9jb3JlL25laWdoYm91ci5jLTE4Mjcte1xuLS1cbm5ldC9pcHY0L2FycC5jPTE1MTQ9dm9pZCBfX2luaXQgYXJwX2luaXQodm9pZClcbm5ldC9pcHY0L2FycC5jLTE1MTUte1xubmV0L2lwdjQvYXJwLmM6MTUxNjpcdG5laWdoX3RhYmxlX2luaXQoTkVJR0hfQVJQX1RBQkxFLCBcdTAwMjZhcnBfdGJsKTtcbm5ldC9pcHY0L2FycC5jLTE1MTctXG4tLVxubmV0L2lwdjYvbmRpc2MuYz0yMDA1PWludCBfX2luaXQgbmRpc2NfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMjAxNC1cdCAqL1xubmV0L2lwdjYvbmRpc2MuYzoyMDE1Olx0bmVpZ2hfdGFibGVfaW5pdChORUlHSF9ORF9UQUJMRSwgXHUwMDI2bmRfdGJsKTtcbm5ldC9pcHY2L25kaXNjLmMtMjAxNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgzNQoJCQkJCQkJb3V0cHV0OiAyMTYKCQkJCQkJCXRob3VnaHRzOiA3MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gS01TQU4gTmVlZGVkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBwcmltYXJpbHkgZGVhbHMgd2l0aCBzeW5jaHJvbml6YXRpb24gYXJvdW5kIHRoZSBwcm94eSB0aW1lciB3aXRoaW4gdGhlIG5ldHdvcmsgbmVpZ2hib3IgdGFibGUuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIGEgc3BpbmxvY2sgKGBwcm94eV90aW1lcl9sb2NrYCkgdG8gdGhlIGBuZWlnaF90YWJsZWAgc3RydWN0dXJlIGFuZCBpbml0aWFsaXppbmcgaXQuIFRoaXMgbG9jayBzZWVtcyB0byBhZGRyZXNzIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiB0aGUgYG1vZF90aW1lcmAgY2FsbCBpbiBgcG5laWdoX2VucXVldWVgIGFuZCB0aGUgYHRpbWVyX2RlbGV0ZV9zeW5jYCBjYWxsIGluIGBfX25laWdoX2lmZG93bmAuCgpNeSBhbmFseXNpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSBhcmUgcmVsYXRlZCB0byBkZWFkbG9ja3MsIGxvY2tpbmcgaXNzdWVzICh3aGljaCBMT0NLREVQIHdvdWxkIGNhdGNoKSwgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zIG9yIHJhY2UgY29uZGl0aW9ucyAod2hpY2ggS0FTQU4gd291bGQgZGV0ZWN0KS4gVGhlIGNvZGUgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQWxsIG9mIHRoZSBrZXkgc3RydWN0dXJlcyBhcmUgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQuIFRoZSBuZXcgc3BpbmxvY2sgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdXNpbmcgYHNwaW5fbG9ja19pbml0YC4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGNyZWF0ZSBhbnkgb3Bwb3J0dW5pdGllcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgcmVhZCBvciBleHBvc2VkLgoKVGhlcmVmb3JlLCBzaW5jZSBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgZnVsbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhlIHJpc2tzIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoLCB0aGVyZSYjMzk7cyBubyBuZWVkIGZvciBLTVNBTi4gSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgYmVjYXVzZSB0aGUgcGF0Y2gmIzM5O3MgcHJpbWFyeSBpbXBhY3QgcmV2b2x2ZXMgYXJvdW5kIHN5bmNocm9uaXphdGlvbiBhbmQgdGltZXIgbWFuYWdlbWVudCwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gV2UmIzM5O3JlIGdvb2QgdG8gZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBkZWRpY2F0ZWQgc3BpbmxvY2sgKGBwcm94eV90aW1lcl9sb2NrYCkgdG8gYHN0cnVjdCBuZWlnaF90YWJsZWAgYW5kIHVzZXMgaXQgdG8gc2VyaWFsaXplIHJlYXJtaW5nIG9mIGB0YmwtXHUwMDNlcHJveHlfdGltZXJgIHZpYSBgbW9kX3RpbWVyKClgIGluIGBwbmVpZ2hfZW5xdWV1ZSgpYCB3aXRoIHF1ZXVlIHB1cmdpbmcgYW5kIHN5bmNocm9ub3VzIHRpbWVyIGRlbGV0aW9uIGluIGBfX25laWdoX2lmZG93bigpYC4gVGhlIG5ldyBsb2NrIGlzIGluaXRpYWxpemVkIHdpdGggYHNwaW5fbG9ja19pbml0KClgIGluIGBuZWlnaF90YWJsZV9pbml0KClgLlxuXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IHBlcnRhaW4gdG8gY29uY3VycmVuY3kgY29udHJvbCBhbmQgdGltZXIgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2jigJRzdWNoIGFzIGxvY2tpbmcgb3JkZXIgaW52ZXJzaW9ucywgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25z4oCUYXJlIGhhbmRsZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5IGlzIGFsbG9jYXRlZCwgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGFyZSByZWFkIG9yIGJyYW5jaGVkIHVwb24sIGFuZCBubyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgZGVkaWNhdGVkIHNwaW5sb2NrIChgcHJveHlfdGltZXJfbG9ja2ApIHRvIGBzdHJ1Y3QgbmVpZ2hfdGFibGVgIGFuZCB1c2VzIGl0IHRvIHNlcmlhbGl6ZSByZWFybWluZyBvZiBgdGJsLVx1MDAzZXByb3h5X3RpbWVyYCB2aWEgYG1vZF90aW1lcigpYCBpbiBgcG5laWdoX2VucXVldWUoKWAgd2l0aCBxdWV1ZSBwdXJnaW5nIGFuZCBzeW5jaHJvbm91cyB0aW1lciBkZWxldGlvbiBpbiBgX19uZWlnaF9pZmRvd24oKWAuIFRoZSBuZXcgbG9jayBpcyBpbml0aWFsaXplZCB3aXRoIGBzcGluX2xvY2tfaW5pdCgpYCBpbiBgbmVpZ2hfdGFibGVfaW5pdCgpYC5cblxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBwZXJ0YWluIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgYW5kIHRpbWVyIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNo4oCUc3VjaCBhcyBsb2NraW5nIG9yZGVyIGludmVyc2lvbnMsIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9uc+KAlGFyZSBoYW5kbGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBObyBuZXcgdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgcmVhZCBvciBicmFuY2hlZCB1cG9uLCBhbmQgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMToyNi45MDE1NDIxOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NTIyMjkyODE5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwbmVpZ2hfZW5xdWV1ZVwiLFxuICAgIFwiX19uZWlnaF9pZmRvd25cIixcbiAgICBcIm5laWdoX2lmZG93blwiLFxuICAgIFwibmVpZ2hfY2Fycmllcl9kb3duXCIsXG4gICAgXCJuZWlnaF9wcm94eV9wcm9jZXNzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZGVkaWNhdGVkIHNwaW5sb2NrIChgcHJveHlfdGltZXJfbG9ja2ApIHRvIGBzdHJ1Y3QgbmVpZ2hfdGFibGVgIGFuZCB1c2VzIGl0IHRvIHNlcmlhbGl6ZSByZWFybWluZyBvZiBgdGJsLVxcdTAwM2Vwcm94eV90aW1lcmAgdmlhIGBtb2RfdGltZXIoKWAgaW4gYHBuZWlnaF9lbnF1ZXVlKClgIHdpdGggcXVldWUgcHVyZ2luZyBhbmQgc3luY2hyb25vdXMgdGltZXIgZGVsZXRpb24gaW4gYF9fbmVpZ2hfaWZkb3duKClgLiBUaGUgbmV3IGxvY2sgaXMgaW5pdGlhbGl6ZWQgd2l0aCBgc3Bpbl9sb2NrX2luaXQoKWAgaW4gYG5laWdoX3RhYmxlX2luaXQoKWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBwZXJ0YWluIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgYW5kIHRpbWVyIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNo4oCUc3VjaCBhcyBsb2NraW5nIG9yZGVyIGludmVyc2lvbnMsIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9uc+KAlGFyZSBoYW5kbGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBObyBuZXcgdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgcmVhZCBvciBicmFuY2hlZCB1cG9uLCBhbmQgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBpbiB0aGUgY29yZSBuZXR3b3JraW5nIG5laWdoYm91ciBzdWJzeXN0ZW0gKG5ldC9jb3JlL25laWdoYm91ci5jIGFuZCBpbmNsdWRlL25ldC9uZWlnaGJvdXIuaCkuIEl0IGludHJvZHVjZXMgYSBuZXcgc3BpbmxvY2ssIHByb3h5X3RpbWVyX2xvY2ssIHRvIHNlcmlhbGl6ZSBwcm94eSB0aW1lciByZWFybWluZyBpbiBwbmVpZ2hfZW5xdWV1ZSB3aXRoIHF1ZXVlIHB1cmdpbmcgYW5kIHRpbWVyX2RlbGV0ZV9zeW5jIGluIF9fbmVpZ2hfaWZkb3duLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzdGFuZGFyZCBuZXRsaW5rL3N5c2ZzIGRldmljZSBzdGF0ZSBtYW5pcHVsYXRpb24gKGUuZy4sIGJyaW5naW5nIGludGVyZmFjZXMgZG93bikgYW5kIHByb3h5IEFSUC9ORCBwYWNrZXQgaGFuZGxpbmcuIEZ1enppbmcgd2l0aCBzeXprYWxsZXIgKGFuZCBsb2NrZGVwKSBpcyB3YXJyYW50ZWQgdG8gZGV0ZWN0IHBvdGVudGlhbCBsb2NrIGludmVyc2lvbnMsIGRlYWRsb2NrcywgYW5kIHRpbWVyIHN5bmNocm9uaXphdGlvbiByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDE6MjYuOTAxNTQ4MzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzcxOTUyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiODZjNTRkMWU3MWY1MjJlZTNjNDk5NDA2Y2ViNWI1MzkyODNkNTc3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDE0IDA5OjAxOjI0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25laWdoYm91ci5oIGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmhcXG5pbmRleCA4ODYwY2MyMTc1ZmMxLi4xNTEwN2MwMGI0ZGY0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L25laWdoYm91ci5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmhcXG5AQCAtMjM5LDYgKzIzOSw4IEBAIHN0cnVjdCBuZWlnaF90YWJsZSB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRnY19saXN0O1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0bWFuYWdlZF9saXN0O1xcbiBcXHRzcGlubG9ja190XFx0XFx0bG9jaztcXG4rXFx0LyogU2VyaWFsaXplcyBwcm94eSB0aW1lciByZWFybWluZyB3aXRoIHRlYXJkb3duLiAqL1xcbitcXHRzcGlubG9ja190XFx0XFx0cHJveHlfdGltZXJfbG9jaztcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdGxhc3RfcmFuZDtcXG4gXFx0c3RydWN0IG5laWdoX3N0YXRpc3RpY3NcXHRfX3BlcmNwdSAqc3RhdHM7XFxuIFxcdHN0cnVjdCBuZWlnaF9oYXNoX3RhYmxlIF9fcmN1ICpuaHQ7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25laWdoYm91ci5jIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmNcXG5pbmRleCAxMzQ5YzBlZWRiNjQyLi4xZWE3OTRhNTQxZWZiIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jXFxuKysrIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmNcXG5AQCAtNDcxLDEwICs0NzEsMTMgQEAgc3RhdGljIGludCBfX25laWdoX2lmZG93bihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRibC1cXHUwMDNlbG9jayk7XFxuIFxcbiBcXHRwbmVpZ2hfaWZkb3duKHRibCwgZGV2LCBza2lwX3Blcm0pO1xcbitcXHQvKiBUaGUgY2FsbGJhY2sgZG9lcyBub3QgdGFrZSB0aGlzIGxvY2ssIHNvIHN5bmMgZGVsZXRpb24gY2FuIHdhaXQgZm9yIGl0LiAqL1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XFxuIFxcdHBuZWlnaF9xdWV1ZV9wdXJnZShcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV9xdWV1ZSwgZGV2ID8gZGV2X25ldChkZXYpIDogTlVMTCxcXG4gXFx0XFx0XFx0ICAgdGJsLVxcdTAwM2VmYW1pbHkpO1xcbiBcXHRpZiAoc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFxcdTAwMjZ0YmwtXFx1MDAzZXByb3h5X3F1ZXVlKSlcXG4gXFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXIpO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTE3MjksNiArMTczMiw3IEBAIHZvaWQgcG5laWdoX2VucXVldWUoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZWlnaF9wYXJtcyAqcCxcXG4gXFx0TkVJR0hfQ0Ioc2tiKS1cXHUwMDNlc2NoZWRfbmV4dCA9IHNjaGVkX25leHQ7XFxuIFxcdE5FSUdIX0NCKHNrYiktXFx1MDAzZWZsYWdzIHw9IExPQ0FMTFlfRU5RVUVVRUQ7XFxuIFxcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XFxuIFxcdHNwaW5fbG9jayhcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV9xdWV1ZS5sb2NrKTtcXG4gXFx0aWYgKHRpbWVyX2RlbGV0ZShcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcikpIHtcXG4gXFx0XFx0aWYgKHRpbWVfYmVmb3JlKHRibC1cXHUwMDNlcHJveHlfdGltZXIuZXhwaXJlcywgc2NoZWRfbmV4dCkpXFxuQEAgLTE3NDAsNiArMTc0NCw3IEBAIHZvaWQgcG5laWdoX2VucXVldWUoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZWlnaF9wYXJtcyAqcCxcXG4gXFx0cC1cXHUwMDNlcWxlbisrO1xcbiBcXHRtb2RfdGltZXIoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXIsIHNjaGVkX25leHQpO1xcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV9xdWV1ZS5sb2NrKTtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChwbmVpZ2hfZW5xdWV1ZSk7XFxuIFxcbkBAIC0xODU4LDYgKzE4NjMsNyBAQCB2b2lkIG5laWdoX3RhYmxlX2luaXQoaW50IGluZGV4LCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibClcXG4gXFx0XFx0V0FSTl9PTih0YmwtXFx1MDAzZWVudHJ5X3NpemUgJSBORUlHSF9QUklWX0FMSUdOKTtcXG4gXFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ0YmwtXFx1MDAzZWxvY2spO1xcbitcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2dGJsLVxcdTAwM2VwaGFzaF9sb2NrKTtcXG4gXFxuIFxcdElOSVRfREVGRVJSQUJMRV9XT1JLKFxcdTAwMjZ0YmwtXFx1MDAzZWdjX3dvcmssIG5laWdoX3BlcmlvZGljX3dvcmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMToyOC41MzkzNjUyNzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIxNTkyMzI5OTc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwbmVpZ2hfZW5xdWV1ZVwiLFxuICAgIFwiX19uZWlnaF9pZmRvd25cIixcbiAgICBcIm5laWdoX2lmZG93blwiLFxuICAgIFwibmVpZ2hfY2Fycmllcl9kb3duXCIsXG4gICAgXCJuZWlnaF9wcm94eV9wcm9jZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgbmVpZ2hib3VyIHN1YnN5c3RlbSAobmV0L2NvcmUvbmVpZ2hib3VyLmMgYW5kIGluY2x1ZGUvbmV0L25laWdoYm91ci5oKS4gSXQgaW50cm9kdWNlcyBhIG5ldyBzcGlubG9jaywgcHJveHlfdGltZXJfbG9jaywgdG8gc2VyaWFsaXplIHByb3h5IHRpbWVyIHJlYXJtaW5nIGluIHBuZWlnaF9lbnF1ZXVlIHdpdGggcXVldWUgcHVyZ2luZyBhbmQgdGltZXJfZGVsZXRlX3N5bmMgaW4gX19uZWlnaF9pZmRvd24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHN0YW5kYXJkIG5ldGxpbmsvc3lzZnMgZGV2aWNlIHN0YXRlIG1hbmlwdWxhdGlvbiAoZS5nLiwgYnJpbmdpbmcgaW50ZXJmYWNlcyBkb3duKSBhbmQgcHJveHkgQVJQL05EIHBhY2tldCBoYW5kbGluZy4gRnV6emluZyB3aXRoIHN5emthbGxlciAoYW5kIGxvY2tkZXApIGlzIHdhcnJhbnRlZCB0byBkZXRlY3QgcG90ZW50aWFsIGxvY2sgaW52ZXJzaW9ucywgZGVhZGxvY2tzLCBhbmQgdGltZXIgc3luY2hyb25pemF0aW9uIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI4NmM1NGQxZTcxZjUyMmVlM2M0OTk0MDZjZWI1YjUzOTI4M2Q1NzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAwOTowMToyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25laWdoYm91ci5oIGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmhcbmluZGV4IDg4NjBjYzIxNzVmYzEuLjE1MTA3YzAwYjRkZjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaFxuKysrIGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmhcbkBAIC0yMzksNiArMjM5LDggQEAgc3RydWN0IG5laWdoX3RhYmxlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGdjX2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRtYW5hZ2VkX2xpc3Q7XG4gXHRzcGlubG9ja190XHRcdGxvY2s7XG4rXHQvKiBTZXJpYWxpemVzIHByb3h5IHRpbWVyIHJlYXJtaW5nIHdpdGggdGVhcmRvd24uICovXG4rXHRzcGlubG9ja190XHRcdHByb3h5X3RpbWVyX2xvY2s7XG4gXHR1bnNpZ25lZCBsb25nXHRcdGxhc3RfcmFuZDtcbiBcdHN0cnVjdCBuZWlnaF9zdGF0aXN0aWNzXHRfX3BlcmNwdSAqc3RhdHM7XG4gXHRzdHJ1Y3QgbmVpZ2hfaGFzaF90YWJsZSBfX3JjdSAqbmh0O1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25laWdoYm91ci5jIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmNcbmluZGV4IDEzNDljMGVlZGI2NDIuLjFlYTc5NGE1NDFlZmIgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9uZWlnaGJvdXIuY1xuKysrIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmNcbkBAIC00NzEsMTAgKzQ3MSwxMyBAQCBzdGF0aWMgaW50IF9fbmVpZ2hfaWZkb3duKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZWxvY2spO1xuIFxuIFx0cG5laWdoX2lmZG93bih0YmwsIGRldiwgc2tpcF9wZXJtKTtcbitcdC8qIFRoZSBjYWxsYmFjayBkb2VzIG5vdCB0YWtlIHRoaXMgbG9jaywgc28gc3luYyBkZWxldGlvbiBjYW4gd2FpdCBmb3IgaXQuICovXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xuIFx0cG5laWdoX3F1ZXVlX3B1cmdlKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZSwgZGV2ID8gZGV2X25ldChkZXYpIDogTlVMTCxcbiBcdFx0XHQgICB0YmwtXHUwMDNlZmFtaWx5KTtcbiBcdGlmIChza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3F1ZXVlKSlcbiBcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyKTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xNzI5LDYgKzE3MzIsNyBAQCB2b2lkIHBuZWlnaF9lbnF1ZXVlKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmVpZ2hfcGFybXMgKnAsXG4gXHRORUlHSF9DQihza2IpLVx1MDAzZXNjaGVkX25leHQgPSBzY2hlZF9uZXh0O1xuIFx0TkVJR0hfQ0Ioc2tiKS1cdTAwM2VmbGFncyB8PSBMT0NBTExZX0VOUVVFVUVEO1xuIFxuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcbiBcdHNwaW5fbG9jayhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUubG9jayk7XG4gXHRpZiAodGltZXJfZGVsZXRlKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcikpIHtcbiBcdFx0aWYgKHRpbWVfYmVmb3JlKHRibC1cdTAwM2Vwcm94eV90aW1lci5leHBpcmVzLCBzY2hlZF9uZXh0KSlcbkBAIC0xNzQwLDYgKzE3NDQsNyBAQCB2b2lkIHBuZWlnaF9lbnF1ZXVlKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmVpZ2hfcGFybXMgKnAsXG4gXHRwLVx1MDAzZXFsZW4rKztcbiBcdG1vZF90aW1lcihcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXIsIHNjaGVkX25leHQpO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2dGJsLVx1MDAzZXByb3h5X3F1ZXVlLmxvY2spO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHBuZWlnaF9lbnF1ZXVlKTtcbiBcbkBAIC0xODU4LDYgKzE4NjMsNyBAQCB2b2lkIG5laWdoX3RhYmxlX2luaXQoaW50IGluZGV4LCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibClcbiBcdFx0V0FSTl9PTih0YmwtXHUwMDNlZW50cnlfc2l6ZSAlIE5FSUdIX1BSSVZfQUxJR04pO1xuIFxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dGJsLVx1MDAzZWxvY2spO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZ0YmwtXHUwMDNlcGhhc2hfbG9jayk7XG4gXG4gXHRJTklUX0RFRkVSUkFCTEVfV09SSyhcdTAwMjZ0YmwtXHUwMDNlZ2Nfd29yaywgbmVpZ2hfcGVyaW9kaWNfd29yayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMToyOC41MzkzNjc2MDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODI0ODU2Mjc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5laWdoYm91ciBTdWJzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBuZWlnaGJvdXIgc3Vic3lzdGVtLiBJdCdzIG1vZGlmeWluZyBgaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmhgIGFuZCBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBteSBhdHRlbnRpb24uIExldCdzIGRpZyBpbi5cblxuTG9va2luZyBhdCB0aGUgYGRpZmZgLCBhIG5ldyBzcGlubG9jaywgYHByb3h5X3RpbWVyX2xvY2tgLCBpcyBpbnRyb2R1Y2VkIHdpdGhpbiB0aGUgYG5laWdoX3RhYmxlYCBzdHJ1Y3R1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHByb3RlY3RpbmcgYWNjZXNzIHRvIHRoZSBwcm94eSB0aW1lciwgcGFydGljdWxhcmx5IGR1cmluZyBvcGVyYXRpb25zIHRoYXQgbWlnaHQgcmFjZSB3aXRoIHRpbWVyIGV4cGlyeSBvciBkZWxldGlvbi4gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgaXQncyBmb3IgXCJTZXJpYWxpemVzIHByb3h5IHRpbWVyIHJlYXJtaW5nIHdpdGggdGVhcmRvd24sXCIgd2hpY2ggaXMgYSBnb29kIGNsdWUuXG5cblRoZSBgX19uZWlnaF9pZmRvd25gIGZ1bmN0aW9uIGluIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AsIGFyb3VuZCBsaW5lIDQ3MSwgbm93IGluY2x1ZGVzIGEgbG9jayBhbmQgdW5sb2NrIHBhaXIgYXJvdW5kIGB0YmwtXHUwMDNlcHJveHlfdGltZXJfbG9ja2AgYmVmb3JlIGFuZCBhZnRlciBjYWxsaW5nIGBwbmVpZ2hfcXVldWVfcHVyZ2VgIGFuZCBgdGltZXJfZGVsZXRlX3N5bmNgLiBUaGlzIGlzIGNsZWFybHkgYWltZWQgYXQgZW5zdXJpbmcgdGhhdCB0aGUgcHJveHkgdGltZXIgaXNuJ3QgZGVsZXRlZCB3aGlsZSBhIGNhbGxiYWNrIGlzIHBlbmRpbmcgaW4gYHBuZWlnaF9pZmRvd25gLiBBIGdvb2QgZXhhbXBsZSBvZiByYWNlIGNvbmRpdGlvbiBwcm90ZWN0aW9uLlxuXG5UaGVuLCB0aGVyZSdzIGBwbmVpZ2hfZW5xdWV1ZWAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNzI5LiBIZXJlLCBhIGxvY2sgb24gYHRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrYCBoYXMgYmVlbiBhZGRlZCBhcm91bmQgdGhlIG9wZXJhdGlvbnMgb24gYHRibC1cdTAwM2Vwcm94eV9xdWV1ZWAgYW5kIHRoZSBwcm94eSB0aW1lciBpdHNlbGYuIFRoaXMgYWRkaXRpb24sIEkgc3VzcGVjdCwgc3luY2hyb25pemVzIHRoZSBxdWV1ZSBtYW5hZ2VtZW50IGFuZCB0aW1lciBtb2RpZmljYXRpb24gb3BlcmF0aW9ucyB3aXRoIGFueSB0ZWFyZG93biBhY3Rpdml0aWVzIGhhcHBlbmluZyBpbiBgX19uZWlnaF9pZmRvd25gLiBUaGUgY29tbWVudHMgaW4gdGhlIGNvZGUgYW5kIHRoZSBsb2NrIHBsYWNlbWVudCBhcmUgY29uc2lzdGVudC5cblxuRnVydGhlcm1vcmUsIGEgc3BpbmxvY2sgaXMgYWxzbyBpbml0aWFsaXplZCBpbiBgbmVpZ2hfdGFibGVfaW5pdGAsIHNvIHRoZSBwYXRjaCBpcyBhZGRpbmcgdGhpcyBsb2NraW5nIGZ1bmN0aW9uYWxpdHkgd2hlbiB0aGUgdGFibGUgaXMgaW5pdGlhbGl6ZWQsIHdoaWNoIGlzIGV4cGVjdGVkLlxuXG5NeSBleHBlcnQgaW50dWl0aW9uIHN1Z2dlc3RzIHRoYXQgdGhlIHBhdGNoIGFpbXMgdG8gc29sdmUgYSBzdWJ0bGUgcmFjZSBjb25kaXRpb24uIEl0IHNlZW1zIHdlJ3JlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IGFjY2VzcyB0byBhIHByb3h5IHRpbWVyIGFuZCB0aGUgYXNzb2NpYXRlZCBxdWV1ZSwgc3BlY2lmaWNhbGx5IHdoZW4gYW4gaW50ZXJmYWNlIGdvZXMgZG93bi4gVGhlIG5ldyBzcGlubG9jaywgYHByb3h5X3RpbWVyX2xvY2tgLCBpcyB0aGUga2V5IHRvIHN5bmNocm9uaXppbmcgdGhlc2Ugb3BlcmF0aW9ucywgcHJldmVudGluZyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyByZWxhdGVkIHRvIHRoZSB0aW1lciBhbmQgcXVldWUuIFRoaXMgaXMgYSBzb2xpZCBhcHByb2FjaC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gYnkgbG9va2luZyBhdCB0aGUgY2FsbHMgdG8gdGhvc2UgZnVuY3Rpb25zIGluIGNvbnRleHQgdG8gc2VlIGhvdyBpdCB3b3JrcyBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMTo1Ni43ODc5MzQxNTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDc5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmVpZ2hib3VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDYwOlxcdFxcbiA0NjE6XFx0c3RhdGljIGludCBfX25laWdoX2lmZG93bihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gNDYyOlxcdFxcdFxcdFxcdCAgYm9vbCBza2lwX3Blcm0pXFxuIDQ2MzpcXHR7XFxuIDQ2NDpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRibC1cXHUwMDNlbG9jayk7XFxuIDQ2NTpcXHRcXHRpZiAobGlrZWx5KGRldikpIHtcXG4gNDY2OlxcdFxcdFxcdG5laWdoX2ZsdXNoX2Rldih0YmwsIGRldiwgc2tpcF9wZXJtKTtcXG4gNDY3OlxcdFxcdH0gZWxzZSB7XFxuIDQ2ODpcXHRcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNraXBfcGVybSk7XFxuIDQ2OTpcXHRcXHRcXHRuZWlnaF9mbHVzaF90YWJsZSh0YmwpO1xcbiA0NzA6XFx0XFx0fVxcbiA0NzE6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRibC1cXHUwMDNlbG9jayk7XFxuIDQ3MjpcXHRcXG4gNDczOlxcdFxcdHBuZWlnaF9pZmRvd24odGJsLCBkZXYsIHNraXBfcGVybSk7XFxuIDQ3NDpcXHRcXHQvKiBUaGUgY2FsbGJhY2sgZG9lcyBub3QgdGFrZSB0aGlzIGxvY2ssIHNvIHN5bmMgZGVsZXRpb24gY2FuIHdhaXQgZm9yIGl0LiAqL1xcbiA0NzU6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0YmwtXFx1MDAzZXByb3h5X3RpbWVyX2xvY2spO1xcbiA0NzY6XFx0XFx0cG5laWdoX3F1ZXVlX3B1cmdlKFxcdTAwMjZ0YmwtXFx1MDAzZXByb3h5X3F1ZXVlLCBkZXYgPyBkZXZfbmV0KGRldikgOiBOVUxMLFxcbiA0Nzc6XFx0XFx0XFx0XFx0ICAgdGJsLVxcdTAwM2VmYW1pbHkpO1xcbiA0Nzg6XFx0XFx0aWYgKHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV9xdWV1ZSkpXFxuIDQ3OTpcXHRcXHRcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcik7XFxuIDQ4MDpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcXG4gNDgxOlxcdFxcdHJldHVybiAwO1xcbiA0ODI6XFx0fVxcbiA0ODM6XFx0XFxuIDQ4NDpcXHRpbnQgbmVpZ2hfY2Fycmllcl9kb3duKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiA0ODU6XFx0e1xcbiA0ODY6XFx0XFx0X19uZWlnaF9pZmRvd24odGJsLCBkZXYsIHRydWUpO1xcbiA0ODc6XFx0XFx0cmV0dXJuIDA7XFxuIDQ4ODpcXHR9XFxuIDQ4OTpcXHRcXG4gNDkwOlxcdGludCBuZWlnaF9pZmRvd24oc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIDQ5MTpcXHR7XFxuIDQ5MjpcXHRcXHRfX25laWdoX2lmZG93bih0YmwsIGRldiwgZmFsc2UpO1xcbiA0OTM6XFx0XFx0cmV0dXJuIDA7XFxuIDQ5NDpcXHR9XFxuIDQ5NTpcXHRcXG4gNDk2OlxcdHN0YXRpYyBzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaF9hbGxvYyhzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCxcXG4gNDk3OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gNDk4OlxcdFxcdFxcdFxcdFxcdCAgICAgdTMyIGZsYWdzLCBib29sIGV4ZW1wdF9mcm9tX2djKVxcbiA0OTk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMTo1Ni43ODgxODU2NTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5OTg5OTk5ODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgaGF2aW5nIHRoZW06XG5cbioqQW5hbHl6aW5nIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AgTGluZXMgMTcyMC0xNzYwKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgc3BlY2lmaWMgc2VjdGlvbiBvZiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLiBMaW5lcyAxNzIwIHRocm91Z2ggMTc2MCwgdGhhdCdzIHdoZXJlIHRoaW5ncyBhcmUgZ2V0dGluZyBpbnRlcmVzdGluZy4gSSdtIGZvY3VzaW5nIGluIGJlY2F1c2UgSSBzdXNwZWN0IHdlIG1pZ2h0IGZpbmQgc29tZSBjcnVjaWFsIGRldGFpbHMgYWJvdXQgWypJbnNlcnQgeW91ciBleHBlcnQgZmllbGQgaGVyZSosIGUuZy4sIEFSUCBjYWNoZSBtYW5hZ2VtZW50LCBuZWlnaGJvciBkaXNjb3ZlcnkgcHJvdG9jb2wsIG11bHRpY2FzdCBoYW5kbGluZywgZXRjLl0uIFRoaXMgcmFuZ2Ugb2Z0ZW4gZW5jb21wYXNzZXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgbGlrZSBwZXJoYXBzIHRoZSBsb2dpYyBmb3IgW3NwZWNpZmljIGZ1bmN0aW9uIHdpdGhpbiB5b3VyIGZpZWxkXS4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhleSBoYW5kbGUgW3NwZWNpZmljIGFzcGVjdCB5b3Ugd2FudCB0byBmb2N1cyBvbl0uIEFyZSB0aGV5IHVzaW5nIGFueSBjbGV2ZXIgZGF0YSBzdHJ1Y3R1cmVzIG9yIG9wdGltaXphdGlvbiB0ZWNobmlxdWVzPyBJcyB0aGVyZSBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiB0aGF0IGNvdWxkIGJlIGV4cGxvaXRlZD8gQSBjb21tb24gb3ZlcnNpZ2h0PyBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQgcmVsYXRlcyB0byBbeW91ciBoeXBvdGhlc2lzXSwgYnV0IEkgbmVlZCB0byBzZWUgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbi4gTm93LCBsZXQncyBnZXQgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgdGhleSBkaWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAyOjA2Ljc3ODE5MDU0N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzIwOlxcdH1cXG4xNzIxOlxcdFxcbjE3MjI6XFx0dm9pZCBwbmVpZ2hfZW5xdWV1ZShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5laWdoX3Bhcm1zICpwLFxcbjE3MjM6XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuMTcyNDpcXHR7XFxuMTcyNTpcXHRcXHR1bnNpZ25lZCBsb25nIHNjaGVkX25leHQgPSBuZWlnaF9wcm94eV9kZWxheShwKTtcXG4xNzI2OlxcdFxcbjE3Mjc6XFx0XFx0aWYgKHAtXFx1MDAzZXFsZW4gXFx1MDAzZSBORUlHSF9WQVIocCwgUFJPWFlfUUxFTikpIHtcXG4xNzI4OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjE3Mjk6XFx0XFx0XFx0cmV0dXJuO1xcbjE3MzA6XFx0XFx0fVxcbjE3MzE6XFx0XFxuMTczMjpcXHRcXHRORUlHSF9DQihza2IpLVxcdTAwM2VzY2hlZF9uZXh0ID0gc2NoZWRfbmV4dDtcXG4xNzMzOlxcdFxcdE5FSUdIX0NCKHNrYiktXFx1MDAzZWZsYWdzIHw9IExPQ0FMTFlfRU5RVUVVRUQ7XFxuMTczNDpcXHRcXG4xNzM1OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcXG4xNzM2OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV9xdWV1ZS5sb2NrKTtcXG4xNzM3OlxcdFxcdGlmICh0aW1lcl9kZWxldGUoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXIpKSB7XFxuMTczODpcXHRcXHRcXHRpZiAodGltZV9iZWZvcmUodGJsLVxcdTAwM2Vwcm94eV90aW1lci5leHBpcmVzLCBzY2hlZF9uZXh0KSlcXG4xNzM5OlxcdFxcdFxcdFxcdHNjaGVkX25leHQgPSB0YmwtXFx1MDAzZXByb3h5X3RpbWVyLmV4cGlyZXM7XFxuMTc0MDpcXHRcXHR9XFxuMTc0MTpcXHRcXHRza2JfZHN0X2Ryb3Aoc2tiKTtcXG4xNzQyOlxcdFxcdGRldl9ob2xkKHNrYi1cXHUwMDNlZGV2KTtcXG4xNzQzOlxcdFxcdF9fc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUsIHNrYik7XFxuMTc0NDpcXHRcXHRwLVxcdTAwM2VxbGVuKys7XFxuMTc0NTpcXHRcXHRtb2RfdGltZXIoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXIsIHNjaGVkX25leHQpO1xcbjE3NDY6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUubG9jayk7XFxuMTc0NzpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcXG4xNzQ4OlxcdH1cXG4xNzQ5OlxcdEVYUE9SVF9TWU1CT0wocG5laWdoX2VucXVldWUpO1xcbjE3NTA6XFx0XFxuMTc1MTpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZWlnaF9wYXJtcyAqbG9va3VwX25laWdoX3Bhcm1zKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLFxcbjE3NTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldCAqbmV0LCBpbnQgaWZpbmRleClcXG4xNzUzOlxcdHtcXG4xNzU0OlxcdFxcdHN0cnVjdCBuZWlnaF9wYXJtcyAqcDtcXG4xNzU1OlxcdFxcbjE3NTY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcXHUwMDI2dGJsLVxcdTAwM2VwYXJtc19saXN0LCBsaXN0KSB7XFxuMTc1NzpcXHRcXHRcXHRpZiAoKHAtXFx1MDAzZWRldiBcXHUwMDI2XFx1MDAyNiBwLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXggPT0gaWZpbmRleCBcXHUwMDI2XFx1MDAyNiBuZXRfZXEobmVpZ2hfcGFybXNfbmV0KHApLCBuZXQpKSB8fFxcbjE3NTg6XFx0XFx0XFx0ICAgICghcC1cXHUwMDNlZGV2IFxcdTAwMjZcXHUwMDI2ICFpZmluZGV4IFxcdTAwMjZcXHUwMDI2IG5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpKVxcbjE3NTk6XFx0XFx0XFx0XFx0cmV0dXJuIHA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAyOjA2Ljc3ODQwNzYxN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzOTUyNTc4MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb21taXQgYW5kIFByb3h5IFRpbWVyKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNvbW1pdC4gSSB3YXMgaW5pdGlhbGx5IGdvaW5nIHRvIHJlYWNoIGZvciBgZ2l0IGxvZyAtbiAxIC0tc3RhdGAgb3IgYGdpdCBsb2cgLXAgLTFgIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IGFuZCB0aGUgcGF0Y2gsIG9yIGV2ZW4gZ3JlcCB3aXRoaW4gdGhlIHJlcG9zaXRvcnkgaWYgbmVjZXNzYXJ5LiBCdXQsIHdhaXQsIEkgY2FuIHNlZSB0aGUgY29tbWl0IG1lc3NhZ2UgcmlnaHQgaGVyZSBpbiB0aGUgcHJvbXB0ISBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLiBJdCBsb29rcyBsaWtlIGl0J3MgYSBgc3l6LWNsdXN0ZXJgIGNvbW1pdCwgYXBwbHlpbmcgYSBwYXRjaCB0aGF0IHdhcyB1bmRlciByZXZpZXcuIEdvb2QgdG8ga25vdyB0aGUgY29udGV4dC5cblxuTm93LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBkaWcgaW50byB0aGUgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIGNoYW5nZWQgYnkgdGhpcyBjb21taXQuIExldCdzIHNlZSB3aGF0IHRoZSBwcm94eSB0aW1lciBjYWxsYmFjayBkb2VzLCBhcyBpdCBpcyB0aGUgbW9zdCBtZWFuaW5nZnVsIHBhcnQuIFRoYXQncyB3aGVyZSB0aGUgY3JpdGljYWwgcGllY2Ugb2YgdGhpcyBsaWtlbHkgbGllcy4gSXQncyB0aGUgcG9pbnQgb2YgdGhpcywgYW5kIHRoZSBjb250ZXh0IG9mIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY0MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAyOjA5LjE3MzY2ODQ0MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODI1NTk4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm94eV90aW1lclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuYz00NjE9c3RhdGljIGludCBfX25laWdoX2lmZG93bihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTQ3NC1cXHQvKiBUaGUgY2FsbGJhY2sgZG9lcyBub3QgdGFrZSB0aGlzIGxvY2ssIHNvIHN5bmMgZGVsZXRpb24gY2FuIHdhaXQgZm9yIGl0LiAqL1xcbm5ldC9jb3JlL25laWdoYm91ci5jOjQ3NTpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtNDc2LVxcdHBuZWlnaF9xdWV1ZV9wdXJnZShcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV9xdWV1ZSwgZGV2ID8gZGV2X25ldChkZXYpIDogTlVMTCxcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTQ3OC1cXHRpZiAoc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFxcdTAwMjZ0YmwtXFx1MDAzZXByb3h5X3F1ZXVlKSlcXG5uZXQvY29yZS9uZWlnaGJvdXIuYzo0Nzk6XFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXIpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jOjQ4MDpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy00ODEtXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0xNjc1PXN0YXRpYyB2b2lkIG5laWdoX3Byb3h5X3Byb2Nlc3Moc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTY3Ni17XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTY3NzpcXHRzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCA9IHRpbWVyX2NvbnRhaW5lcl9vZih0YmwsIHQsIHByb3h5X3RpbWVyKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNjc4LVxcdGxvbmcgc2NoZWRfbmV4dCA9IDA7XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNzA0LVxcdH1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNzA1OlxcdHRpbWVyX2RlbGV0ZShcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcik7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTcwNi1cXHRpZiAoc2NoZWRfbmV4dClcXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNzA3OlxcdFxcdG1vZF90aW1lcihcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lciwgamlmZmllcyArIHNjaGVkX25leHQpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTE3MDgtXFx0c3Bpbl91bmxvY2soXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUubG9jayk7XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0xNzIyPXZvaWQgcG5laWdoX2VucXVldWUoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZWlnaF9wYXJtcyAqcCxcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTE3MzQtXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTczNTpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTczNi1cXHRzcGluX2xvY2soXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUubG9jayk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTczNzpcXHRpZiAodGltZXJfZGVsZXRlKFxcdTAwMjZ0YmwtXFx1MDAzZXByb3h5X3RpbWVyKSkge1xcbm5ldC9jb3JlL25laWdoYm91ci5jOjE3Mzg6XFx0XFx0aWYgKHRpbWVfYmVmb3JlKHRibC1cXHUwMDNlcHJveHlfdGltZXIuZXhwaXJlcywgc2NoZWRfbmV4dCkpXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTczOTpcXHRcXHRcXHRzY2hlZF9uZXh0ID0gdGJsLVxcdTAwM2Vwcm94eV90aW1lci5leHBpcmVzO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTE3NDAtXFx0fVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTc0NC1cXHRwLVxcdTAwM2VxbGVuKys7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTc0NTpcXHRtb2RfdGltZXIoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXIsIHNjaGVkX25leHQpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTE3NDYtXFx0c3Bpbl91bmxvY2soXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUubG9jayk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTc0NzpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNzQ4LX1cXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jPTE4MjY9dm9pZCBuZWlnaF90YWJsZV9pbml0KGludCBpbmRleCwgc3RydWN0IG5laWdoX3RhYmxlICp0YmwpXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xODY1LVxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ0YmwtXFx1MDAzZWxvY2spO1xcbm5ldC9jb3JlL25laWdoYm91ci5jOjE4NjY6XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTg2Ny1cXHRtdXRleF9pbml0KFxcdTAwMjZ0YmwtXFx1MDAzZXBoYXNoX2xvY2spO1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTg3NC1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxODc1OlxcdHRpbWVyX3NldHVwKFxcdTAwMjZ0YmwtXFx1MDAzZXByb3h5X3RpbWVyLCBuZWlnaF9wcm94eV9wcm9jZXNzLCAwKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xODc2LVxcdHNrYl9xdWV1ZV9oZWFkX2luaXRfY2xhc3MoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUsXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0xODg5PWludCBuZWlnaF90YWJsZV9jbGVhcihpbnQgaW5kZXgsIHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsKVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTg5Ni1cXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNnRibC1cXHUwMDNlZ2Nfd29yayk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTg5NzpcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcik7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTg5OC1cXHRwbmVpZ2hfcXVldWVfcHVyZ2UoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUsIE5VTEwsIHRibC1cXHUwMDNlZmFtaWx5KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDI6MDkuMjUxOTI5MjU4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI3OTk5MDM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiB0aGUgZGVzY3JpYmVkIGNvZGUgY29udGV4dDpcblxuKipBbmFseXppbmcgYG5laWdoX3Byb3h5X3Byb2Nlc3NgKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBCYXNlZCBvbiB0aGUgcHJldmlvdXMgY29udGV4dCwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBmdW5jdGlvbiBgbmVpZ2hfcHJveHlfcHJvY2Vzc2AuIFRoZSByZWZlcmVuY2UgdG8gbGluZSAxNjc1IHN1Z2dlc3RzIGEgc3BlY2lmaWMgcG9pbnQgb2YgaW50ZXJlc3Qgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEknbSBsaWtlbHkgbG9va2luZyBmb3IgYSBwYXJ0aWN1bGFyIGJlaGF2aW9yLCBsb2dpYyBmbG93LCBvciBwb3RlbnRpYWwgaXNzdWUgd2l0aGluIHRoYXQgc2VjdGlvbiBvZiB0aGUgY29kZS4gTXkgZXhwZXJ0IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBzeXN0ZW0gdGVsbHMgbWUgd2hhdCBraW5kIG9mIHByb2JsZW1zIG1pZ2h0IGJlIGx1cmtpbmcgYXJvdW5kIHRoYXQgYXJlYS4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEyOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAyOjExLjUzMTkyMjhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL25laWdoYm91ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2NzU6XFx0c3RhdGljIHZvaWQgbmVpZ2hfcHJveHlfcHJvY2VzcyhzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4xNjc2OlxcdHtcXG4xNjc3OlxcdFxcdHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsID0gdGltZXJfY29udGFpbmVyX29mKHRibCwgdCwgcHJveHlfdGltZXIpO1xcbjE2Nzg6XFx0XFx0bG9uZyBzY2hlZF9uZXh0ID0gMDtcXG4xNjc5OlxcdFxcdHVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllcztcXG4xNjgwOlxcdFxcdHN0cnVjdCBza19idWZmICpza2IsICpuO1xcbjE2ODE6XFx0XFxuMTY4MjpcXHRcXHRzcGluX2xvY2soXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUubG9jayk7XFxuMTY4MzpcXHRcXG4xNjg0OlxcdFxcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUsIHNrYiwgbikge1xcbjE2ODU6XFx0XFx0XFx0bG9uZyB0ZGlmID0gTkVJR0hfQ0Ioc2tiKS1cXHUwMDNlc2NoZWRfbmV4dCAtIG5vdztcXG4xNjg2OlxcdFxcbjE2ODc6XFx0XFx0XFx0aWYgKHRkaWYgXFx1MDAzYz0gMCkge1xcbjE2ODg6XFx0XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi1cXHUwMDNlZGV2O1xcbjE2ODk6XFx0XFxuMTY5MDpcXHRcXHRcXHRcXHRuZWlnaF9wYXJtc19xbGVuX2RlYyhkZXYsIHRibC1cXHUwMDNlZmFtaWx5KTtcXG4xNjkxOlxcdFxcdFxcdFxcdF9fc2tiX3VubGluayhza2IsIFxcdTAwMjZ0YmwtXFx1MDAzZXByb3h5X3F1ZXVlKTtcXG4xNjkyOlxcdFxcbjE2OTM6XFx0XFx0XFx0XFx0aWYgKHRibC1cXHUwMDNlcHJveHlfcmVkbyBcXHUwMDI2XFx1MDAyNiBuZXRpZl9ydW5uaW5nKGRldikpIHtcXG4xNjk0OlxcdFxcdFxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4xNjk1OlxcdFxcdFxcdFxcdFxcdHRibC1cXHUwMDNlcHJveHlfcmVkbyhza2IpO1xcbjE2OTY6XFx0XFx0XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTY5NzpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjE2OTg6XFx0XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMTY5OTpcXHRcXHRcXHRcXHR9XFxuMTcwMDpcXHRcXG4xNzAxOlxcdFxcdFxcdFxcdGRldl9wdXQoZGV2KTtcXG4xNzAyOlxcdFxcdFxcdH0gZWxzZSBpZiAoIXNjaGVkX25leHQgfHwgdGRpZiBcXHUwMDNjIHNjaGVkX25leHQpXFxuMTcwMzpcXHRcXHRcXHRcXHRzY2hlZF9uZXh0ID0gdGRpZjtcXG4xNzA0OlxcdFxcdH1cXG4xNzA1OlxcdFxcdHRpbWVyX2RlbGV0ZShcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcik7XFxuMTcwNjpcXHRcXHRpZiAoc2NoZWRfbmV4dClcXG4xNzA3OlxcdFxcdFxcdG1vZF90aW1lcihcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lciwgamlmZmllcyArIHNjaGVkX25leHQpO1xcbjE3MDg6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUubG9jayk7XFxuMTcwOTpcXHR9XFxuMTcxMDpcXHRcXG4xNzExOlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIG5laWdoX3Byb3h5X2RlbGF5KHN0cnVjdCBuZWlnaF9wYXJtcyAqcClcXG4xNzEyOlxcdHtcXG4xNzEzOlxcdFxcdC8qIElmIHByb3h5X2RlbGF5IGlzIHplcm8sIGRvIG5vdCBjYWxsIGdldF9yYW5kb21fdTMyX2JlbG93KClcXG4xNzE0OlxcdFxcdCAqIGFzIGl0IGlzIHVuZGVmaW5lZCBiZWhhdmlvci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDI6MTEuNTMyMTk3NDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjU3NzY0NjcyMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIFJlbGF0ZWQgdG8gTmV0d29yayBOZWlnaGJvciBEaXNjb3ZlcnkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gbm90aWNpbmcgdGhpcyBwYXRjaCBhbmQgdGhlIGNoYW5nZXMgd2l0aGluIGBfX25laWdoX2lmZG93bmAuIFNwZWNpZmljYWxseSwgaXQncyBjYWxsaW5nIGBwbmVpZ2hfaWZkb3duYCwgdGhlbiBncmFiYmluZyBgdGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2tgLCBwdXJnaW5nIHRoZSBgcHJveHlfcXVldWVgLCBhbmQgY29uZGl0aW9uYWxseSBkZWxldGluZyBgdGJsLVx1MDAzZXByb3h5X3RpbWVyYC4gVGhlIGNvcnJlc3BvbmRpbmcgZW5xdWV1ZSBvcGVyYXRpb24gaXMgaW4gYHBuZWlnaF9lbnF1ZXVlYCwgd2hpY2ggKmFsc28qIHVzZXMgdGhlIHNhbWUgbG9jaywgYWxvbmcgd2l0aCBgcHJveHlfcXVldWUubG9ja2AsIGFuZCBtb2RpZmllcyBgcHJveHlfdGltZXJgLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gYXJpc2VzOiBJcyB0aGlzIHJlYWNoYWJsZSBjb2RlPyBBaGEsIHRoaXMgaXMgaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYCwgc28gaXQncyB0aGUgY29yZSBuZWlnaGJvciBkaXNjb3ZlcnkgYW5kIG1hbmFnZW1lbnQgaW1wbGVtZW50YXRpb24hIFRoYXQgbWFrZXMgc2Vuc2UgLSBwcm94eSBBUlAgYW5kIHByb3h5IE5EIHVzZSBgcG5laWdoX2VucXVldWVgLiBTbyB3aGVuIGFuIGludGVyZmFjZSBnb2VzIGRvd24sIGxpa2Ugd2l0aCBgaXAgbGluayBzZXQgZG93bmAsIHRoZSBgX19uZWlnaF9pZmRvd25gIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZC5cblxuQnV0IGhlcmUncyBhIHBvdGVudGlhbCBpc3N1ZSB0aGF0IGp1bXBzIG91dC4gSSBzZWUgYHRpbWVyX2RlbGV0ZV9zeW5jYCBiZWluZyBjYWxsZWQgKmluc2lkZSogdGhlIGBwcm94eV90aW1lcl9sb2NrYCBzcGlubG9jayEgVGhhdCBtYWtlcyBtZSBuZXJ2b3VzIGJlY2F1c2UgYHRpbWVyX2RlbGV0ZV9zeW5jYCBpcyBrbm93biB0byBiZSBjYXBhYmxlIG9mIHNsZWVwaW5nIG9yIHBvdGVudGlhbGx5IGNhdXNpbmcgZGVhZGxvY2tzLiBXZSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gV2UgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgdGltZXJfZGVsZXRlX3N5bmNgIHdpdGhpbiB0aGUga2VybmVsIHRyZWUgdG8gdW5kZXJzdGFuZCBpZiBpdCBzbGVlcHMgb3Igc3BpbnMuIFRoaXMgY291bGQgYmUgYSBjcml0aWNhbCBwb2ludCB0aGF0IG5lZWRzIGFkZHJlc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NDUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMjozNy4zMDg2Njc2MTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTcyNjc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aW1lcl9kZWxldGVfc3luY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3RpbWVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC90aW1lci5oLTMyLSAqIGl0J3Mgc2FmZSB0byB3YWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgcnVubmluZyBpbnN0YW5jZSBmcm9tXFxuaW5jbHVkZS9saW51eC90aW1lci5oOjMzOiAqIElSUSBoYW5kbGVycywgZm9yIGV4YW1wbGUsIGJ5IGNhbGxpbmcgdGltZXJfZGVsZXRlX3N5bmMoKS5cXG5pbmNsdWRlL2xpbnV4L3RpbWVyLmgtMzQtICpcXG4tLVxcbmluY2x1ZGUvbGludXgvdGltZXIuaD0xNjM9ZXh0ZXJuIHZvaWQgYWRkX3RpbWVyX2dsb2JhbChzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpO1xcbmluY2x1ZGUvbGludXgvdGltZXIuaC0xNjQtXFxuaW5jbHVkZS9saW51eC90aW1lci5oOjE2NTpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZV9zeW5jX3RyeShzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpO1xcbmluY2x1ZGUvbGludXgvdGltZXIuaDoxNjY6ZXh0ZXJuIGludCB0aW1lcl9kZWxldGVfc3luYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpO1xcbmluY2x1ZGUvbGludXgvdGltZXIuaC0xNjctZXh0ZXJuIGludCB0aW1lcl9kZWxldGUoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDI6MzcuNDM0NDAxNjYyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE1NDAxNDg2MDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGB0aW1lcl9kZWxldGVfc3luY2AqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBrZXJuZWwvdGltZS90aW1lci5jYCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGB0aW1lcl9kZWxldGVfc3luY2Agd29ya3MuIE15IGd1dCBmZWVsaW5nIGlzIHRoaXMgaXMgZ29pbmcgdG8gYmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBlbnN1cmluZyBhIHRpbWVyIGlzIHByb3Blcmx5IHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHN5bmNocm9uaXphdGlvbiBhbmQgcmFjZSBjb25kaXRpb25zLiBJJ20gaG9waW5nIHRvIHNlZSB0aGUgdXN1YWwgc3VzcGVjdHM6IGNhcmVmdWwgbG9ja2luZyB0byBwcmV2ZW50IGRvdWJsZSBmcmVlcyBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIGdyYWNlZnVsIGhhbmRsaW5nIG9mIGluLWZsaWdodCB0aW1lciBjYWxsYmFja3MsIGFuZCByb2J1c3QgZXJyb3IgY2hlY2tpbmcuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGRpZmZlcmVudCB0aW1lciBxdWV1ZXMgYW5kIHdoZXRoZXIgaXQgYmxvY2tzIG9yIHJldHVybnMgaW1tZWRpYXRlbHkgaW4gY2VydGFpbiBzaXR1YXRpb25zLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBzdWJ0bGV0aWVzIGFyb3VuZCBob3cgaXQgaGFuZGxlcyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgaHJ0aW1lcmAgYW5kIHNvZnR3YXJlIHRpbWVycy4gRXNzZW50aWFsbHksIEknbSBleHBlY3RpbmcgYSBjYXJlZnVsbHkgY3JhZnRlZCBkYW5jZSB0byBndWFyYW50ZWUgdGhhdCB0aGUgdGltZXIncyBtZW1vcnkgaXMgcmVjbGFpbWVkIGF0IHRoZSByaWdodCB0aW1lLiBMZXQncyBzZWUgaWYgbXkgZXhwZWN0YXRpb25zIGFyZSBtZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMjo1Mi44MzU4OTA0MDhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMzY1OTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCB0aW1lcl9kZWxldGVfc3luY1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90aW1lL3RpbWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RpbWUvdGltZXIuYz0xNTkxPXN0YXRpYyBpbnQgX190aW1lcl9kZWxldGVfc3luYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIGJvb2wgc2h1dGRvd24pXFxuLS1cXG5rZXJuZWwvdGltZS90aW1lci5jLTE2NzMtICovXFxua2VybmVsL3RpbWUvdGltZXIuYzoxNjc0OmludCB0aW1lcl9kZWxldGVfc3luYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXFxua2VybmVsL3RpbWUvdGltZXIuYy0xNjc1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDI6NTIuOTE4MjYzMTI1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQyMTU4OTk3NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUaW1lciBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZm9jdXNpbmcgb24gdGhhdCBgdGltZXIuY2AgZmlsZSB3aXRoaW4gdGhlIGtlcm5lbCdzIHRpbWUgc3Vic3lzdGVtLiBUaGUgY29tbWVudCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgYXJvdW5kIGxpbmUgMTY3MCDigJMgdGhhdCdzIHdoZXJlIHRoZSBjcml0aWNhbCBzdHVmZiBpcyBsaWtlbHkgaGFwcGVuaW5nLiBJIGtub3cgdGhpcyBhcmVhIGluc2lkZSBhbmQgb3V0LiBJJ20gdGhpbmtpbmcsIGJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIHRoYXQgdGhpcyBzZWN0aW9uIGxpa2VseSBnb3Zlcm5zIHRoZSBhY3R1YWwgZmlyaW5nIG9mIHRpbWVyIGV2ZW50cyBhbmQgbWF5YmUgdGhlIHBlcmlvZGljIGNoZWNrcyBvZiBzY2hlZHVsZWQgdGltZXJzLCBvciBwb3RlbnRpYWxseSBzb21lIGFzcGVjdCBvZiB0aGUgdGltZXIgaW50ZXJydXB0IGhhbmRsaW5nLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHBhcnNlIHRoZSBzdXJyb3VuZGluZyBsb2dpYyB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGNvbnRleHQgYW5kIHdoYXQgdGhlIGNvbW1lbnQgaXMgZXhwbGFpbmluZy4gSSdtIGV4cGVjdGluZyBzb21lIGluc2lnaHRzIHJlZ2FyZGluZyB0aGUgdW5kZXJseWluZyBtZWNoYW5pc21zLCBhbmQgdGhlIGludHJpY2F0ZSBiYWxhbmNpbmcgYWN0IHRoZSBkZXZlbG9wZXJzIGhhZCB0byBtYWtlLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMjo1Ny4xMzQxNjk0MDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90aW1lL3RpbWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY1MDpcXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxfdGltZXJfZm4oKTtcXG4xNjUxOlxcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZS1cXHUwMDNlcnVubmluZ190aW1lciA9IG15dGltZXI7XFxuMTY1MjpcXHQgKiAgICBzcGluX2xvY2tfaXJxKHNvbWVsb2NrKTtcXG4xNjUzOlxcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcdTAwM2NJUlFcXHUwMDNlXFxuMTY1NDpcXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGluX2xvY2soc29tZWxvY2spO1xcbjE2NTU6XFx0ICogICAgdGltZXJfZGVsZXRlX3N5bmMobXl0aW1lcik7XFxuMTY1NjpcXHQgKiAgICB3aGlsZSAoYmFzZS1cXHUwMDNlcnVubmluZ190aW1lciA9PSBteXRpbWVyKTtcXG4xNjU3OlxcdCAqXFxuMTY1ODpcXHQgKiBOb3cgdGltZXJfZGVsZXRlX3N5bmMoKSB3aWxsIG5ldmVyIHJldHVybiBhbmQgbmV2ZXIgcmVsZWFzZSBzb21lbG9jay5cXG4xNjU5OlxcdCAqIFRoZSBpbnRlcnJ1cHQgb24gdGhlIG90aGVyIENQVSBpcyB3YWl0aW5nIHRvIGdyYWIgc29tZWxvY2sgYnV0IGl0IGhhc1xcbjE2NjA6XFx0ICogaW50ZXJydXB0ZWQgdGhlIHNvZnRpcnEgdGhhdCBDUFUwIGlzIHdhaXRpbmcgdG8gZmluaXNoLlxcbjE2NjE6XFx0ICpcXG4xNjYyOlxcdCAqIFRoaXMgZnVuY3Rpb24gY2Fubm90IGd1YXJhbnRlZSB0aGF0IHRoZSB0aW1lciBpcyBub3QgcmVhcm1lZCBhZ2FpbiBieVxcbjE2NjM6XFx0ICogc29tZSBjb25jdXJyZW50IG9yIHByZWVtcHRpbmcgY29kZSwgcmlnaHQgYWZ0ZXIgaXQgZHJvcHBlZCB0aGUgYmFzZVxcbjE2NjQ6XFx0ICogbG9jay4gSWYgdGhlcmUgaXMgdGhlIHBvc3NpYmlsaXR5IG9mIGEgY29uY3VycmVudCByZWFybSB0aGVuIHRoZSByZXR1cm5cXG4xNjY1OlxcdCAqIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBpcyBtZWFuaW5nbGVzcy5cXG4xNjY2OlxcdCAqXFxuMTY2NzpcXHQgKiBJZiBzdWNoIGEgZ3VhcmFudGVlIGlzIG5lZWRlZCwgZS5nLiBmb3IgdGVhcmRvd24gc2l0dWF0aW9ucyB0aGVuIHVzZVxcbjE2Njg6XFx0ICogdGltZXJfc2h1dGRvd25fc3luYygpIGluc3RlYWQuXFxuMTY2OTpcXHQgKlxcbjE2NzA6XFx0ICogUmV0dXJuOlxcbjE2NzE6XFx0ICogKiAlMFxcdC0gVGhlIHRpbWVyIHdhcyBub3QgcGVuZGluZ1xcbjE2NzI6XFx0ICogKiAlMVxcdC0gVGhlIHRpbWVyIHdhcyBwZW5kaW5nIGFuZCBkZWFjdGl2YXRlZFxcbjE2NzM6XFx0ICovXFxuMTY3NDpcXHRpbnQgdGltZXJfZGVsZXRlX3N5bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxcbjE2NzU6XFx0e1xcbjE2NzY6XFx0XFx0cmV0dXJuIF9fdGltZXJfZGVsZXRlX3N5bmModGltZXIsIGZhbHNlKTtcXG4xNjc3OlxcdH1cXG4xNjc4OlxcdEVYUE9SVF9TWU1CT0wodGltZXJfZGVsZXRlX3N5bmMpO1xcbjE2Nzk6XFx0XFxuMTY4MDpcXHQvKipcXG4xNjgxOlxcdCAqIHRpbWVyX3NodXRkb3duX3N5bmMgLSBTaHV0ZG93biBhIHRpbWVyIGFuZCBwcmV2ZW50IHJlYXJtaW5nXFxuMTY4MjpcXHQgKiBAdGltZXI6IFRoZSB0aW1lciB0byBiZSBzaHV0ZG93blxcbjE2ODM6XFx0ICpcXG4xNjg0OlxcdCAqIFdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgaXQgaXMgZ3VhcmFudGVlZCB0aGF0OlxcbjE2ODU6XFx0ICogICAtIEB0aW1lciBpcyBub3QgcXVldWVkXFxuMTY4NjpcXHQgKiAgIC0gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIEB0aW1lciBpcyBub3QgcnVubmluZ1xcbjE2ODc6XFx0ICogICAtIEB0aW1lciBjYW5ub3QgYmUgZW5xdWV1ZWQgYWdhaW4uIEFueSBhdHRlbXB0IHRvIHJlYXJtXFxuMTY4ODpcXHQgKiAgICAgQHRpbWVyIGlzIHNpbGVudGx5IGlnbm9yZWQuXFxuMTY4OTpcXHQgKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMjo1Ny4xMzQzNjAwODZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzE2MzgyOTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIFRpbWVyIERlbGV0aW9uIFN5bmNocm9uaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgYmFjayBpbnRvIHRoZSBrZXJuZWwncyB0aW1lciBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBfX3RpbWVyX2RlbGV0ZV9zeW5jYC4gSSdtIGdvaW5nIHRvIG5hdmlnYXRlIHRvIGxpbmUgMTU5MSBpbiBga2VybmVsL3RpbWUvdGltZXIuY2AgYW5kIHJlYWxseSBnZXQgYSBoYW5kbGUgb24gdGhlIHN5bmNocm9uaXphdGlvbiBsb2dpYyB0aGVyZS4gSSdtIGtlZW4gdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBoYW5kbGluZyB0aGUgcmFjZSBjb25kaXRpb25zIHRoYXQgYXJlIGluaGVyZW50IHRvIHRpbWVyIGRlbGV0aW9uIGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyBpdCBlbnN1cmVzIHRoYXQgYSB0aW1lciBpc24ndCBwcmVtYXR1cmVseSBmcmVlZCB3aGlsZSBzdGlsbCBhY3RpdmUsIG9yIGNvbnZlcnNlbHksIHRoYXQgcmVzb3VyY2VzIGFyZSBjbGVhbmVkIHVwIGVmZmljaWVudGx5IGFmdGVyIGEgdGltZXIgaGFzIGV4cGlyZWQgb3IgaXMgY2FuY2VsbGVkLiBJdCBpcyBjcml0aWNhbCB0aGF0IEkgdW5kZXJzdGFuZCB3aGF0IG1lY2hhbmlzbXMgYXJlIGJlaW5nIHVzZWQgdG8gbWFpbnRhaW4gZGF0YSBpbnRlZ3JpdHkgd2hlbiB0aW1lcnMgYXJlIGJlaW5nIGFkZGVkLCByZW1vdmVkLCBhbmQgZmlyZWQgY29uY3VycmVudGx5LiBJIG5lZWQgdG8gYmUgYWJsZSB0byBhcHBseSBteSB1bmRlcnN0YW5kaW5nIHRvIHRoZSBzcGVjaWZpYyBjb250ZXh0IG9mIHRoZSBzeXN0ZW0gSSdtIHdvcmtpbmcgd2l0aCwgc28gbGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE5OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6MDAuMjk4MTk1MTQ1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdGltZS90aW1lci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1OTEsXG4gIFwiTGluZUNvdW50XCI6IDU1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1OTE6XFx0c3RhdGljIGludCBfX3RpbWVyX2RlbGV0ZV9zeW5jKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgYm9vbCBzaHV0ZG93bilcXG4xNTkyOlxcdHtcXG4xNTkzOlxcdFxcdGludCByZXQ7XFxuMTU5NDpcXHRcXG4xNTk1OlxcdCNpZmRlZiBDT05GSUdfTE9DS0RFUFxcbjE1OTY6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4xNTk3OlxcdFxcbjE1OTg6XFx0XFx0LypcXG4xNTk5OlxcdFxcdCAqIElmIGxvY2tkZXAgZ2l2ZXMgYSBiYWNrdHJhY2UgaGVyZSwgcGxlYXNlIHJlZmVyZW5jZVxcbjE2MDA6XFx0XFx0ICogdGhlIHN5bmNocm9uaXphdGlvbiBydWxlcyBhYm92ZS5cXG4xNjAxOlxcdFxcdCAqL1xcbjE2MDI6XFx0XFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbjE2MDM6XFx0XFx0bG9ja19tYXBfYWNxdWlyZShcXHUwMDI2dGltZXItXFx1MDAzZWxvY2tkZXBfbWFwKTtcXG4xNjA0OlxcdFxcdGxvY2tfbWFwX3JlbGVhc2UoXFx1MDAyNnRpbWVyLVxcdTAwM2Vsb2NrZGVwX21hcCk7XFxuMTYwNTpcXHRcXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuMTYwNjpcXHQjZW5kaWZcXG4xNjA3OlxcdFxcdC8qXFxuMTYwODpcXHRcXHQgKiBkb24ndCB1c2UgaXQgaW4gaGFyZGlycSBjb250ZXh0LCBiZWNhdXNlIGl0XFxuMTYwOTpcXHRcXHQgKiBjb3VsZCBsZWFkIHRvIGRlYWRsb2NrLlxcbjE2MTA6XFx0XFx0ICovXFxuMTYxMTpcXHRcXHRXQVJOX09OKGluX2hhcmRpcnEoKSBcXHUwMDI2XFx1MDAyNiAhKHRpbWVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRJTUVSX0lSUVNBRkUpKTtcXG4xNjEyOlxcdFxcbjE2MTM6XFx0XFx0LypcXG4xNjE0OlxcdFxcdCAqIE11c3QgYmUgYWJsZSB0byBzbGVlcCBvbiBQUkVFTVBUX1JUIGJlY2F1c2Ugb2YgdGhlIHNsb3dwYXRoIGluXFxuMTYxNTpcXHRcXHQgKiBkZWxfdGltZXJfd2FpdF9ydW5uaW5nKCkuXFxuMTYxNjpcXHRcXHQgKi9cXG4xNjE3OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSBcXHUwMDI2XFx1MDAyNiAhKHRpbWVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRJTUVSX0lSUVNBRkUpKVxcbjE2MTg6XFx0XFx0XFx0bG9ja2RlcF9hc3NlcnRfcHJlZW1wdGlvbl9lbmFibGVkKCk7XFxuMTYxOTpcXHRcXG4xNjIwOlxcdFxcdGRvIHtcXG4xNjIxOlxcdFxcdFxcdHJldCA9IF9fdHJ5X3RvX2RlbF90aW1lcl9zeW5jKHRpbWVyLCBzaHV0ZG93bik7XFxuMTYyMjpcXHRcXG4xNjIzOlxcdFxcdFxcdGlmICh1bmxpa2VseShyZXQgXFx1MDAzYyAwKSkge1xcbjE2MjQ6XFx0XFx0XFx0XFx0ZGVsX3RpbWVyX3dhaXRfcnVubmluZyh0aW1lcik7XFxuMTYyNTpcXHRcXHRcXHRcXHRjcHVfcmVsYXgoKTtcXG4xNjI2OlxcdFxcdFxcdH1cXG4xNjI3OlxcdFxcdH0gd2hpbGUgKHJldCBcXHUwMDNjIDApO1xcbjE2Mjg6XFx0XFxuMTYyOTpcXHRcXHRyZXR1cm4gcmV0O1xcbjE2MzA6XFx0fVxcbjE2MzE6XFx0XFxuMTYzMjpcXHQvKipcXG4xNjMzOlxcdCAqIHRpbWVyX2RlbGV0ZV9zeW5jIC0gRGVhY3RpdmF0ZSBhIHRpbWVyIGFuZCB3YWl0IGZvciB0aGUgaGFuZGxlciB0byBmaW5pc2guXFxuMTYzNDpcXHQgKiBAdGltZXI6XFx0VGhlIHRpbWVyIHRvIGJlIGRlYWN0aXZhdGVkXFxuMTYzNTpcXHQgKlxcbjE2MzY6XFx0ICogU3luY2hyb25pemF0aW9uIHJ1bGVzOiBDYWxsZXJzIG11c3QgcHJldmVudCByZXN0YXJ0aW5nIG9mIHRoZSB0aW1lcixcXG4xNjM3OlxcdCAqIG90aGVyd2lzZSB0aGlzIGZ1bmN0aW9uIGlzIG1lYW5pbmdsZXNzLiBJdCBtdXN0IG5vdCBiZSBjYWxsZWQgZnJvbVxcbjE2Mzg6XFx0ICogaW50ZXJydXB0IGNvbnRleHRzIHVubGVzcyB0aGUgdGltZXIgaXMgYW4gaXJxc2FmZSBvbmUuIFRoZSBjYWxsZXIgbXVzdFxcbjE2Mzk6XFx0ICogbm90IGhvbGQgbG9ja3Mgd2hpY2ggd291bGQgcHJldmVudCBjb21wbGV0aW9uIG9mIHRoZSB0aW1lcidzIGNhbGxiYWNrXFxuMTY0MDpcXHQgKiBmdW5jdGlvbi4gVGhlIHRpbWVyJ3MgaGFuZGxlciBtdXN0IG5vdCBjYWxsIGFkZF90aW1lcl9vbigpLiBVcG9uIGV4aXRcXG4xNjQxOlxcdCAqIHRoZSB0aW1lciBpcyBub3QgcXVldWVkIGFuZCB0aGUgaGFuZGxlciBpcyBub3QgcnVubmluZyBvbiBhbnkgQ1BVLlxcbjE2NDI6XFx0ICpcXG4xNjQzOlxcdCAqIEZvciAhaXJxc2FmZSB0aW1lcnMsIHRoZSBjYWxsZXIgbXVzdCBub3QgaG9sZCBsb2NrcyB0aGF0IGFyZSBoZWxkIGluXFxuMTY0NDpcXHQgKiBpbnRlcnJ1cHQgY29udGV4dC4gRXZlbiBpZiB0aGUgbG9jayBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSB0aW1lciBpblxcbjE2NDU6XFx0ICogcXVlc3Rpb24uICBIZXJlJ3Mgd2h5OjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6MDAuMjk4NDE1ODg1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjcxMTc1MjE1ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nOiBDb3JlIE5ldHdvcmtpbmcgU3luY2hyb25pemF0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGF0IHRoaXMgY29tbWVudDogXCIvKiBUaGUgY2FsbGJhY2sgZG9lcyBub3QgdGFrZSB0aGlzIGxvY2ssIHNvIHN5bmMgZGVsZXRpb24gY2FuIHdhaXQgZm9yIGl0LiAqL1wiLiBBbmQgdGhlbiBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IHNwaW5sb2NrLCBgcHJveHlfdGltZXJfbG9ja2AsIGFkZGVkIHRvIGBzdHJ1Y3QgbmVpZ2hfdGFibGVgLiBIbW0sIHNlZW1zIGxpa2UgYSBmYWlybHkgc2lnbmlmaWNhbnQgY2hhbmdlLiBUaGlzIG5ldyBsb2NrIGlzIGJlaW5nIHVzZWQgaW4gYF9fbmVpZ2hfaWZkb3duYCBhbmQgYHBuZWlnaF9lbnF1ZXVlYCwgYm90aCBvZiB3aGljaCBhcmUgcmlnaHQgdGhlcmUgaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYCwgd2hpY2gsIGFzIHdlIGFsbCBrbm93LCBpcyBjb3JlIG5ldHdvcmtpbmcuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHRoZSB0cmlhZ2UgZ3VpZGVsaW5lcy4gUmVhY2hhYmlsaXR5IGlzIHRoZSBwcmltYXJ5IGdhdGUsIGJ1dCB3ZSBjYW4ndCBibGluZGx5IHRydXN0IGNsYWltcyBvZiBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgb3IgcmVmYWN0b3JpbmcuIEFueSBuZXcgb3IgbW9kaWZpZWQgYXNzZXJ0aW9ucyBpbiByZWFjaGFibGUgY29kZSAqbXVzdCogYmUgZnV6emVkLiBBbmQgcmVnYXJkaW5nIHdoZW4gc29tZXRoaW5nIGlzIFdvcnRoRnV6emluZywgd2VsbCwgYW55dGhpbmcgaW52b2x2aW5nIGNvcmUgc3Vic3lzdGVtcyBsaWtlIG5ldHdvcmtpbmcgYW5kIGNoYW5nZXMgdG8gc3luY2hyb25pemF0aW9uL2xvY2tpbmcgaXMgYSBkZWZpbml0ZSB5ZXMuIEFsc28sIHJlZmFjdG9yaW5ncyB3aGljaCByZXN0cnVjdHVyZSByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSB3b3J0aCBmdXp6aW5nLCBhbmQgaXQgbG9va3MgbGlrZSB3ZSBtYXkgaGF2ZSB0aGF0IGhlcmUuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGNoYW5nZXMuIEEgbmV3IHNwaW5sb2NrLCBgcHJveHlfdGltZXJfbG9ja2AsIGhhcyBiZWVuIGFkZGVkIHRvIGBzdHJ1Y3QgbmVpZ2hfdGFibGVgLiBUaGlzIGxvY2sgaXMgYWNxdWlyZWQgaW4gYF9fbmVpZ2hfaWZkb3duYCBhcm91bmQgYSBjYWxsIHRvIGB0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXIpYCwgYW5kIGFsc28gaW4gYHBuZWlnaF9lbnF1ZXVlYC4gVGhlIGxvY2sgaXMgaW5pdGlhbGl6ZWQgZHVyaW5nIGBuZWlnaF90YWJsZV9pbml0YC4gVGhpcyBsb29rcyBsaWtlIGEgY2hhbmdlIHRvIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBpbnZvbHZpbmcgdGltZXIgZGVsZXRpb24gYW5kIGVucXVldWVpbmcgZm9yIHByb3h5IEFSUC9ORC5cblxuR2l2ZW4gdGhhdCB0aGlzIGlzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGNvcmUgbmV0d29ya2luZywgYW5kIHRoYXQgaXQgbW9kaWZpZXMgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgKipXb3J0aEZ1enppbmcgaXMgZGVmaW5pdGVseSBgdHJ1ZWAqKi4gVGhpcyBjaGFuZ2UgbmVlZHMgYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSBhcm91bmQgdGhlIGludGVyYWN0aW9uIG9mIHRoZSB0aW1lciBhbmQgdGhlIHF1ZXVlLlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZCB0byB0cmlnZ2VyIHRoaXMuIEknbGwgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IGBuZXQvY29yZS9uZWlnaGJvdXIuY2AgYW5kIGBwbmVpZ2hfZW5xdWV1ZWAgdG8gc2VlIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIG1pZ2h0IGluZmx1ZW5jZSB0aGlzIGNvZGUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMDEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMzowNy40MTU5NDA4MzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDE0NDYyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwbmVpZ2hfZW5xdWV1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25laWdoYm91ci5jPTE3MTE9c3RhdGljIHVuc2lnbmVkIGxvbmcgbmVpZ2hfcHJveHlfZGVsYXkoc3RydWN0IG5laWdoX3Bhcm1zICpwKVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTcyMS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNzIyOnZvaWQgcG5laWdoX2VucXVldWUoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZWlnaF9wYXJtcyAqcCxcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNzIzLVxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTc0OC19XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTc0OTpFWFBPUlRfU1lNQk9MKHBuZWlnaF9lbnF1ZXVlKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNzUwLVxcbi0tXFxubmV0L2lwdjQvYXJwLmM9NzAyPXN0YXRpYyBpbnQgYXJwX3Byb2Nlc3Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9hcnAuYy04ODAtXFx0XFx0XFx0XFx0fSBlbHNlIHtcXG5uZXQvaXB2NC9hcnAuYzo4ODE6XFx0XFx0XFx0XFx0XFx0cG5laWdoX2VucXVldWUoXFx1MDAyNmFycF90YmwsXFxubmV0L2lwdjQvYXJwLmMtODgyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpbl9kZXYtXFx1MDAzZWFycF9wYXJtcywgc2tiKTtcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9Nzg5PXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yZWN2X25zKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jLTkyMC1cXHRcXHRcXHRcXHRpZiAobilcXG5uZXQvaXB2Ni9uZGlzYy5jOjkyMTpcXHRcXHRcXHRcXHRcXHRwbmVpZ2hfZW5xdWV1ZShcXHUwMDI2bmRfdGJsLCBpZGV2LVxcdTAwM2VuZF9wYXJtcywgbik7XFxubmV0L2lwdjYvbmRpc2MuYy05MjItXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAzOjA3LjU1NjA5MTg2NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MDQ1MTY1NDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIENhbGxlciBDb250ZXh0IGZvciBgcG5laWdoX2VucXVldWVgKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgcG5laWdoX2VucXVldWVgIGlzIGNhbGxlZCBmcm9tIHR3byBrZXkgcGxhY2VzOiBgYXJwX3Byb2Nlc3NgLCB3aGljaCBoYW5kbGVzIElQdjQgQWRkcmVzcyBSZXNvbHV0aW9uIFByb3RvY29sLCBhbmQgYG5kaXNjX3JlY3ZfbnNgLCB0aGUgSVB2NiBOZWlnaGJvdXIgU29saWNpdGF0aW9uIHJlY2VpdmVyLiBNeSBnb2FsIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCB3b3VsZCBhZmZlY3QgdGhlIGJlaGF2aW9yIG9mIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AsIGdpdmVuIHRoZXNlIGNhbGxlcnMuIEtub3dpbmcgdGhlc2UgY29udGV4dHMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3MgYW5kIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLCBhbmQgaG93IHZhcmlvdXMgbmV0d29yayBpbnRlcmFjdGlvbnMgdHJpZ2dlciBpdC4gVGltZSB0byBkaXZlIGludG8gdGhlIE1ha2VmaWxlISBJIG5lZWQgdG8gc2VlIHdoYXQgcHJlcHJvY2Vzc29yIGZsYWdzIG9yIGJ1aWxkIHNldHRpbmdzIG1pZ2h0IGluZmx1ZW5jZSB0aGUgY29tcGlsYXRpb24gYW5kLCBieSBleHRlbnNpb24sIHRoZSBiZWhhdmlvciBvZiB0aGlzIHBhcnRpY3VsYXIgZmlsZS4gSSBleHBlY3QgdG8gZmluZCBzb21lIGhpbnRzIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgaW4gcGxhY2UgZm9yIHRoaXMgcGFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjayB0byBmdW5jdGlvbiBwcm9wZXJseSBhbmQgaG93IHRoZXkgdGllIGludG8gdGhlIGNhbGxlciBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzAzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6MTEuNjAxMjYxNjIzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTQ0NTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZWlnaGJvdXJcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcXHRcXHQgICAgICs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlOjEzOlxcdFxcdFxcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cXHRcXHRcXHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6MTEuNjYyNzE2NjUzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM2NTIyMjI0MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYG5laWdoYm91ci5vYCBEZXBlbmRlbmN5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBsaW5lLCBgb2JqLXkgKz0gbmVpZ2hib3VyLm9gLCBidXJpZWQgaW4gYG5ldC9jb3JlL01ha2VmaWxlYC4gVGhpcyBtZWFucyBgbmVpZ2hib3VyLm9gIGlzIGJlaW5nIGNvbXBpbGVkIGludG8gYG5ldC9jb3JlYCwgd2hpY2ggaXRzZWxmIGlzIGNvbnRpbmdlbnQgb24gYENPTkZJR19ORVQ9eWAuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgYENPTkZJR19ORVRgIGlzIHRoZSBmb3VuZGF0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBuZWlnaGJvdXIub2AncyBmdW5jdGlvbmFsaXR5IGlzIGRpcmVjdGx5IHRpZWQgdG8gSVB2NCBBUlAgb3IgSVB2NiBORC4gSSdtIHRoaW5raW5nLCBpcyB0aGVyZSBhbiBleHRyYSBjb25maWd1cmF0aW9uIG5lZWRlZD8gRG9lcyBpdCBuZWVkIGBDT05GSUdfSU5FVGAgZm9yIEFSUCBvciBgQ09ORklHX0lQVjZgIGZvciBJUHY2IE5EP1xuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBJJ2xsIHN0YXJ0IHdpdGggYG5ldC9LY29uZmlnYCBhbmQgdGhlbiBtb3ZlIG9uIHRvIHRoZSBtb3JlIHNwZWNpZmljIGBuZXQvaXB2NC9LY29uZmlnYCBvciBldmVuIGBuZXQvaXB2Ni9LY29uZmlnYCBpZiBJIG5lZWQgdG8gZHJpbGwgZG93biBmdXJ0aGVyLiBHaXZlbiB0aGF0IGBDT05GSUdfTkVUYCBpcyB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgdGhpcyBtZWFucyB0aGF0IHRoZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSBpcyBhbG1vc3QgYWx3YXlzIHByZXNlbnQuIEknbSBpbnRlcmVzdGVkIGluIHRoZSBtb3JlIGdyYW51bGFyIGNvbmZpZ3VyYXRpb25zLiBBaCwgcmlnaHQsIGBwbmVpZ2hfZW5xdWV1ZWAgaXMgaW52b2tlZCBieSBBUlAsIGFuZCBhbHNvIGJ5IElQdjYgTkQsIG1lYW5pbmcgaXQgaXMgcmVsYXRlZCB0byBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0lQVjZgLiBOb3csIEkgc2hvdWxkIGRvdWJsZSBjaGVjaywgaWYgaXQgaXMgcmVsYXRlZCB0byBwcm94eSBBUlAvTkQgY29uZmlndXJhdGlvbnMgb3IgbmVpZ2hib3VyIHRhYmxlIHJlbGF0ZWQgc2V0dGluZ3MuIEknbGwgbmVlZCB0byBmb2N1cyBvbiBgbmV0L2lwdjQvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9LY29uZmlnYCBmb3IgdGhhdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGFueSBzdWJ0bGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA5MCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMzoxNS4zMTQ5NDM3NzRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDM0Mjk2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1RcXG4tLVxcbm5ldC9LY29uZmlnLTExMy1cXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcXG5uZXQvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiVENQL0lQIG5ldHdvcmtpbmdcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTMzMD1jb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTMzOC1cXG5uZXQvaXB2NC9LY29uZmlnOjMzOTpjb25maWcgSU5FVF9BSFxcbm5ldC9pcHY0L0tjb25maWctMzQwLVxcdHRyaXN0YXRlIFxcXCJJUDogQUggdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1BcXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cXHR0cmlzdGF0ZSBcXFwiSVA6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzY4LVxcbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzgxLVxcbm5ldC9pcHY0L0tjb25maWc6MzgyOmNvbmZpZyBJTkVUX0VTUElOVENQXFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXFx0Ym9vbCBcXFwiSVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zOTMtXFxubmV0L2lwdjQvS2NvbmZpZzozOTQ6Y29uZmlnIElORVRfSVBDT01QXFxubmV0L2lwdjQvS2NvbmZpZy0zOTUtXFx0dHJpc3RhdGUgXFxcIklQOiBJUENvbXAgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQwMy1cXG5uZXQvaXB2NC9LY29uZmlnOjQwNDpjb25maWcgSU5FVF9UQUJMRV9QRVJUVVJCX09SREVSXFxubmV0L2lwdjQvS2NvbmZpZy00MDUtXFx0aW50IFxcXCJJTkVUOiBTb3VyY2UgcG9ydCBwZXJ0dXJiYXRpb24gdGFibGUgc2l6ZSAoYXMgcG93ZXIgb2YgMilcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MTMtXFxubmV0L2lwdjQvS2NvbmZpZzo0MTQ6Y29uZmlnIElORVRfWEZSTV9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnLTQxNS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MTgtXFxubmV0L2lwdjQvS2NvbmZpZzo0MTk6Y29uZmlnIElORVRfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZy00MjAtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDIyLVxcbm5ldC9pcHY0L0tjb25maWc6NDIzOmNvbmZpZyBJTkVUX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQyNC1cXHR0cmlzdGF0ZSBcXFwiSU5FVDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MzQtXFxubmV0L2lwdjQvS2NvbmZpZzo0MzU6Y29uZmlnIElORVRfVENQX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQzNi1cXHRkZXBlbmRzIG9uIElORVRfRElBR1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MzgtXFxubmV0L2lwdjQvS2NvbmZpZzo0Mzk6Y29uZmlnIElORVRfVURQX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQ0MC1cXHR0cmlzdGF0ZSBcXFwiVURQOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQ0Ni1cXG5uZXQvaXB2NC9LY29uZmlnOjQ0Nzpjb25maWcgSU5FVF9SQVdfRElBR1xcbm5ldC9pcHY0L0tjb25maWctNDQ4LVxcdHRyaXN0YXRlIFxcXCJSQVc6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDU0LVxcbm5ldC9pcHY0L0tjb25maWc6NDU1OmNvbmZpZyBJTkVUX0RJQUdfREVTVFJPWVxcbm5ldC9pcHY0L0tjb25maWctNDU2LVxcdGJvb2wgXFxcIklORVQ6IGFsbG93IHByaXZpbGVnZWQgcHJvY2VzcyB0byBhZG1pbmlzdHJhdGl2ZWx5IGNsb3NlIHNvY2tldHNcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTM5PWNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTQ2LVxcbm5ldC9pcHY2L0tjb25maWc6NDc6Y29uZmlnIElORVQ2X0FIXFxubmV0L2lwdjYvS2NvbmZpZy00OC1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogQUggdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTYxLVxcbm5ldC9pcHY2L0tjb25maWc6NjI6Y29uZmlnIElORVQ2X0VTUFxcbm5ldC9pcHY2L0tjb25maWctNjMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNzYtXFxubmV0L2lwdjYvS2NvbmZpZzo3Nzpjb25maWcgSU5FVDZfRVNQX09GRkxPQURcXG5uZXQvaXB2Ni9LY29uZmlnLTc4LVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctODktXFxubmV0L2lwdjYvS2NvbmZpZzo5MDpjb25maWcgSU5FVDZfRVNQSU5UQ1BcXG5uZXQvaXB2Ni9LY29uZmlnLTkxLVxcdGJvb2wgXFxcIklQdjY6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xMDEtXFxubmV0L2lwdjYvS2NvbmZpZzoxMDI6Y29uZmlnIElORVQ2X0lQQ09NUFxcbm5ldC9pcHY2L0tjb25maWctMTAzLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJUENvbXAgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTEyMD1jb25maWcgSVBWNl9JTEFcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTQwLVxcbm5ldC9pcHY2L0tjb25maWc6MTQxOmNvbmZpZyBJTkVUNl9YRlJNX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMTQyLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE0NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE0Njpjb25maWcgSU5FVDZfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0xNDctXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnPTE0PWlmIE1QVENQXFxubmV0L21wdGNwL0tjb25maWctMTUtXFxubmV0L21wdGNwL0tjb25maWc6MTY6Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbm5ldC9tcHRjcC9LY29uZmlnLTE3LVxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxuLS1cXG5uZXQvcHNwL0tjb25maWctNC0jXFxubmV0L3BzcC9LY29uZmlnOjU6Y29uZmlnIElORVRfUFNQXFxubmV0L3BzcC9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiUFNQIFNlY3VyaXR5IFByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvc2N0cC9LY29uZmlnPTY4PWVuZGNob2ljZVxcbm5ldC9zY3RwL0tjb25maWctNjktXFxubmV0L3NjdHAvS2NvbmZpZzo3MDpjb25maWcgSU5FVF9TQ1RQX0RJQUdcXG5uZXQvc2N0cC9LY29uZmlnLTcxLVxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAzOjE1LjQ0NTI5MTY0M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzY4NTk4NDQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVjZW50IENoYW5nZXMgaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMgaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYC4gRmlyc3QsIEknbGwgcXVpY2tseSBsb29rIGF0IHRoZSBmdW5jdGlvbnMgdGhhdCB3ZXJlIG1vZGlmaWVkLiBJdCBsb29rcyBsaWtlIGBfX25laWdoX2lmZG93bmAsIGBwbmVpZ2hfZW5xdWV1ZWAsIGFuZCBgbmVpZ2hfdGFibGVfaW5pdGAgd2VyZSB0b3VjaGVkLiBIbW1tLCBpbnRlcmVzdGluZy5cblxuSG9sZCBvbi4uLiBgX19uZWlnaF9pZmRvd25gIGlzIHN0YXRpYy4gVGhhdCdzIGEga2V5IGRldGFpbCEgSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsZXJzLiBMZXQgbWUgc2VlLi4uIExvb2tpbmcgcXVpY2tseSBhdCB0aGUgY29kZWJhc2UsIGl0IGxvb2tzIGxpa2UgYG5laWdoX2NhcnJpZXJfZG93bmAsIGBuZWlnaF9pZmRvd25gLCBhbmQgYG5laWdoX3RhYmxlX2NsZWFyYCBjb3VsZCBiZSBjYWxsaW5nIGBfX25laWdoX2lmZG93bmAuIExldCBtZSBjb25maXJtIHRoaXMgYW5kIHNlZSBpZiBgbmVpZ2hfdGFibGVfY2xlYXJgIGlzIGNhbGxpbmcgYF9fbmVpZ2hfaWZkb3duYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBwbGFjZSBmb3IgY29uY2Vybi4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSB0aGF0IGZ1bmN0aW9uIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6MzMuMTMxMjgwMjExWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0OTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODg1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODg1OlxcdC8qXFxuMTg4NjpcXHQgKiBPbmx5IGNhbGxlZCBmcm9tIG5kaXNjX2NsZWFudXAoKSwgd2hpY2ggbWVhbnMgdGhpcyBpcyBkZWFkIGNvZGVcXG4xODg3OlxcdCAqIGJlY2F1c2Ugd2Ugbm8gbG9uZ2VyIGNhbiB1bmxvYWQgSVB2NiBtb2R1bGUuXFxuMTg4ODpcXHQgKi9cXG4xODg5OlxcdGludCBuZWlnaF90YWJsZV9jbGVhcihpbnQgaW5kZXgsIHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsKVxcbjE4OTA6XFx0e1xcbjE4OTE6XFx0XFx0UkNVX0lOSVRfUE9JTlRFUihuZWlnaF90YWJsZXNbaW5kZXhdLCBOVUxMKTtcXG4xODkyOlxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbjE4OTM6XFx0XFxuMTg5NDpcXHRcXHQvKiBJdCBpcyBub3QgY2xlYW4uLi4gRml4IGl0IHRvIHVubG9hZCBJUHY2IG1vZHVsZSBzYWZlbHkgKi9cXG4xODk1OlxcdFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2dGJsLVxcdTAwM2VtYW5hZ2VkX3dvcmspO1xcbjE4OTY6XFx0XFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZ0YmwtXFx1MDAzZWdjX3dvcmspO1xcbjE4OTc6XFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXIpO1xcbjE4OTg6XFx0XFx0cG5laWdoX3F1ZXVlX3B1cmdlKFxcdTAwMjZ0YmwtXFx1MDAzZXByb3h5X3F1ZXVlLCBOVUxMLCB0YmwtXFx1MDAzZWZhbWlseSk7XFxuMTg5OTpcXHRcXHRuZWlnaF9pZmRvd24odGJsLCBOVUxMKTtcXG4xOTAwOlxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2dGJsLVxcdTAwM2VlbnRyaWVzKSlcXG4xOTAxOlxcdFxcdFxcdHByX2NyaXQoXFxcIm5laWdoYm91ciBsZWFrYWdlXFxcXG5cXFwiKTtcXG4xOTAyOlxcdFxcbjE5MDM6XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQodGJsLVxcdTAwM2VuaHQsIDEpLVxcdTAwM2VyY3UsXFxuMTkwNDpcXHRcXHRcXHQgbmVpZ2hfaGFzaF9mcmVlX3JjdSk7XFxuMTkwNTpcXHRcXHR0YmwtXFx1MDAzZW5odCA9IE5VTEw7XFxuMTkwNjpcXHRcXG4xOTA3OlxcdFxcdGtmcmVlKHRibC1cXHUwMDNlcGhhc2hfYnVja2V0cyk7XFxuMTkwODpcXHRcXHR0YmwtXFx1MDAzZXBoYXNoX2J1Y2tldHMgPSBOVUxMO1xcbjE5MDk6XFx0XFxuMTkxMDpcXHRcXHRyZW1vdmVfcHJvY19lbnRyeSh0YmwtXFx1MDAzZWlkLCBpbml0X25ldC5wcm9jX25ldF9zdGF0KTtcXG4xOTExOlxcdFxcbjE5MTI6XFx0XFx0ZnJlZV9wZXJjcHUodGJsLVxcdTAwM2VzdGF0cyk7XFxuMTkxMzpcXHRcXHR0YmwtXFx1MDAzZXN0YXRzID0gTlVMTDtcXG4xOTE0OlxcdFxcbjE5MTU6XFx0XFx0cmV0dXJuIDA7XFxuMTkxNjpcXHR9XFxuMTkxNzpcXHRcXG4xOTE4OlxcdHN0YXRpYyBzdHJ1Y3QgbmVpZ2hfdGFibGUgKm5laWdoX2ZpbmRfdGFibGUoaW50IGZhbWlseSlcXG4xOTE5OlxcdHtcXG4xOTIwOlxcdFxcdHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsID0gTlVMTDtcXG4xOTIxOlxcdFxcbjE5MjI6XFx0XFx0c3dpdGNoIChmYW1pbHkpIHtcXG4xOTIzOlxcdFxcdGNhc2UgQUZfSU5FVDpcXG4xOTI0OlxcdFxcdFxcdHRibCA9IHJjdV9kZXJlZmVyZW5jZV9ydG5sKG5laWdoX3RhYmxlc1tORUlHSF9BUlBfVEFCTEVdKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6MzMuMTMxNjMzNzUxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ3NzY1MTQ4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbmVpZ2hfaWZkb3duYCBhbmQgYG5laWdoX2NhcnJpZXJfZG93bmAgQ2FsbHMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSdtIHRoaW5raW5nIGlzLCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUgYW5kIGZpZ3VyZSBvdXQgdGhlIGNhbGwgc2l0ZXMgZm9yIGBuZWlnaF9pZmRvd25gIGFuZCBgbmVpZ2hfY2Fycmllcl9kb3duYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdHJpZ2dlcmVkIHdpdGhpbiB0aGUgc3lzdGVtLiBBcmUgdGhleSBkaXJlY3QgY2FsbHMgZnJvbSB0aGUgbmV0d29yayBzdGFjaywgb3IgYXJlIHRoZXkgYmVpbmcgaW52b2tlZCBpbmRpcmVjdGx5IHRocm91Z2ggc29tZSBvdGhlciBsYXllciBvciBldmVudD8gQXJlIHRoZXkgcmVsYXRlZCBhbmQgY2FsbGVkIGluIHNlcXVlbmNlLCBvciBhcmUgdGhleSBzZXBhcmF0ZSBldmVudHM/XG5cbkknbSBtZW50YWxseSBtYXBwaW5nIHRoZSBjb250cm9sIGZsb3cuIEknbSB3b25kZXJpbmcgaWYgYG5laWdoX2lmZG93bmAgaXMgY2FsbGVkIHdoZW4gYW4gaW50ZXJmYWNlIGdvZXMgZG93biBnZW5lcmFsbHksIHJlZ2FyZGxlc3Mgb2YgdGhlIHJlYXNvbiwgYW5kIHRoZW4gYG5laWdoX2NhcnJpZXJfZG93bmAgaXMgY2FsbGVkIGluIGNvbmp1bmN0aW9uLCBvciBhcyBhIGNvbnNlcXVlbmNlLCBvZiB0aGUgbGluayBzdGF0ZSB0cmFuc2l0aW9uaW5nLiBBbHRlcm5hdGl2ZWx5LCBhcmUgdGhleSBzZXBhcmF0ZSwgc3BlY2lhbGl6ZWQgaGFuZGxlcnMgZm9yIGRpZmZlcmVudCBzY2VuYXJpb3Mg4oCTIG9uZSBmb3IgYWRtaW5pc3RyYXRpdmUgc2h1dGRvd24gdmVyc3VzIGEgcGh5c2ljYWwgbGluayBmYWlsdXJlPyBVbmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpY3Mgb2Ygd2hlbiBhbmQgd2h5IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhlY3V0ZWQgaXMgY3JpdGljYWwgZm9yIHBpbnBvaW50aW5nIHRoZSByb290IGNhdXNlIG9mIGFueSBvYnNlcnZlZCBiZWhhdmlvci4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhvc2UgZnVuY3Rpb25zLCBvZiBjb3Vyc2UsIHRvIHNlZSBpZiB0aGV5J3JlIHBhc3NpbmcgYW55dGhpbmcgdGhhdCdzIHJlbGV2YW50IHRvIHRoZSBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjM2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMzozNy45MDgxNTI1NjFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTI3OTUzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZWlnaF8oY2Fycmllcl8pP2lmZG93blwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25laWdoYm91ci5jPTU1PXN0YXRpYyB2b2lkIF9fbmVpZ2hfbm90aWZ5KHN0cnVjdCBuZWlnaGJvdXIgKm4sIGludCB0eXBlLCBpbnQgZmxhZ3MsIHUzMiBwaWQpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jOjU2OnN0YXRpYyB2b2lkIHBuZWlnaF9pZmRvd24oc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtNTctXFx0XFx0XFx0ICBib29sIHNraXBfcGVybSk7XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYz00NTQ9dm9pZCBuZWlnaF9jaGFuZ2VhZGRyKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtNDYwLVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjQ2MTpzdGF0aWMgaW50IF9fbmVpZ2hfaWZkb3duKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jb3JlL25laWdoYm91ci5jLTQ2Mi1cXHRcXHRcXHQgIGJvb2wgc2tpcF9wZXJtKVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtNDcyLVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjQ3MzpcXHRwbmVpZ2hfaWZkb3duKHRibCwgZGV2LCBza2lwX3Blcm0pO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTQ3NC1cXHQvKiBUaGUgY2FsbGJhY2sgZG9lcyBub3QgdGFrZSB0aGlzIGxvY2ssIHNvIHN5bmMgZGVsZXRpb24gY2FuIHdhaXQgZm9yIGl0LiAqL1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9NDg0PWludCBuZWlnaF9jYXJyaWVyX2Rvd24oc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtNDg1LXtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYzo0ODY6XFx0X19uZWlnaF9pZmRvd24odGJsLCBkZXYsIHRydWUpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTQ4Ny1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTQ4OS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYzo0OTA6aW50IG5laWdoX2lmZG93bihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy00OTEte1xcbm5ldC9jb3JlL25laWdoYm91ci5jOjQ5MjpcXHRfX25laWdoX2lmZG93bih0YmwsIGRldiwgZmFsc2UpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTQ5My1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jPTgzNz1pbnQgcG5laWdoX2RlbGV0ZShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCB2b2lkICpwa2V5LFxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtODY5LVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjg3MDpzdGF0aWMgdm9pZCBwbmVpZ2hfaWZkb3duKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jb3JlL25laWdoYm91ci5jLTg3MS1cXHRcXHRcXHQgIGJvb2wgc2tpcF9wZXJtKVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MTg4OT1pbnQgbmVpZ2hfdGFibGVfY2xlYXIoaW50IGluZGV4LCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibClcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTE4OTgtXFx0cG5laWdoX3F1ZXVlX3B1cmdlKFxcdTAwMjZ0YmwtXFx1MDAzZXByb3h5X3F1ZXVlLCBOVUxMLCB0YmwtXFx1MDAzZWZhbWlseSk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTg5OTpcXHRuZWlnaF9pZmRvd24odGJsLCBOVUxMKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xOTAwLVxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2dGJsLVxcdTAwM2VlbnRyaWVzKSlcXG4tLVxcbm5ldC9pcHY0L2FycC5jPTEzNjU9dm9pZCBhcnBfaWZkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjQvYXJwLmMtMTM2Ni17XFxubmV0L2lwdjQvYXJwLmM6MTM2NzpcXHRuZWlnaF9pZmRvd24oXFx1MDAyNmFycF90YmwsIGRldik7XFxubmV0L2lwdjQvYXJwLmMtMTM2OC19XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTM4NzY9c3RhdGljIGludCBhZGRyY29uZl9pZmRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB1bnJlZ2lzdGVyKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy00MDQzLVxcdFxcdG5laWdoX3Bhcm1zX3JlbGVhc2UoXFx1MDAyNm5kX3RibCwgaWRldi1cXHUwMDNlbmRfcGFybXMpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NDA0NDpcXHRcXHRuZWlnaF9pZmRvd24oXFx1MDAyNm5kX3RibCwgZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTQwNDUtXFx0XFx0aW42X2Rldl9wdXQoaWRldik7XFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTE4NTk9c3RhdGljIGludCBuZGlzY19uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jLTE4OTctXFx0Y2FzZSBORVRERVZfRE9XTjpcXG5uZXQvaXB2Ni9uZGlzYy5jOjE4OTg6XFx0XFx0bmVpZ2hfaWZkb3duKFxcdTAwMjZuZF90YmwsIGRldik7XFxubmV0L2lwdjYvbmRpc2MuYy0xODk5LVxcdFxcdGZpYjZfcnVuX2djKDAsIG5ldCwgZmFsc2UpO1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYz01MDQ2PXZvaWQgcnQ2X2Rpc2FibGVfaXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudClcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNTA0OS1cXHRydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXYoZGV2KTtcXG5uZXQvaXB2Ni9yb3V0ZS5jOjUwNTA6XFx0bmVpZ2hfaWZkb3duKFxcdTAwMjZuZF90YmwsIGRldik7XFxubmV0L2lwdjYvcm91dGUuYy01MDUxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6MzguMDUzNDM5MzM4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ0Mjc4NDE3MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgTmVpZ2hib3IgRGlzY292ZXJ5IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JrIG5laWdoYm9yIGRpc2NvdmVyeSwgcGFydGljdWxhcmx5IHdoZW4gYW4gaW50ZXJmYWNlIGdvZXMgZG93bi4gSSdtIHN0YXJ0aW5nIHdpdGggYG5laWdoX2lmZG93bmAsIGBuZWlnaF9jYXJyaWVyX2Rvd25gLCBgX19uZWlnaF9pZmRvd25gLCBgcG5laWdoX2VucXVldWVgLCBhbmQgYG5laWdoX3RhYmxlX2luaXRgLlxuXG5UaGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBjb21lcyB0byBtaW5kLCBhcyBJIGFsd2F5cyBkbywgaXMgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX25laWdoX2lmZG93bmAgaW4gdGhlIGNvbnRleHQgb2YgdGhlIEdDQyBjb21waWxlciBhbmQgdGhlIHZtbGludXggZW52aXJvbm1lbnQuIElzIHRoaXMgZnVuY3Rpb24gc3RhdGljPyBJcyBpdCBpbmxpbmVkPyBVbmRlcnN0YW5kaW5nIHRoaXMgaXMgY3JpdGljYWwgZm9yIHRyYWNpbmcgaXRzIGNhbGwgc3RhY2sgZWZmZWN0aXZlbHkuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgbmVpZ2hfaWZkb3duYCBhbmQgYG5laWdoX2NhcnJpZXJfZG93bmAgdG8gc2VlIGhvdyB0aGV5IHV0aWxpemUgYF9fbmVpZ2hfaWZkb3duYC5cblxuTm93LCBpZiBJIHRoaW5rIGFib3V0IGBfX25laWdoX2lmZG93bmAsIEkga25vdyBpdCdzIGNhbGxlZCBieSBgbmVpZ2hfY2Fycmllcl9kb3duYCBhbmQgYG5laWdoX2lmZG93bmAuIFRoaXMgc3VnZ2VzdHMgaXQgY291bGQgcG90ZW50aWFsbHkgYmUgaW5saW5lZCBpbnRvIHRob3NlIHR3byBmdW5jdGlvbnMsIG9yIGl0IG1pZ2h0IGJlIGEgc2VwYXJhdGUgZnVuY3Rpb24gY2FsbC4gU28gYG5laWdoX2lmZG93bmAsIGBuZWlnaF9jYXJyaWVyX2Rvd25gLCBhbmQgYF9fbmVpZ2hfaWZkb3duYCAoaWYgbm90IGlubGluZWQpIGFyZSBhbGwgZGVmaW5pdGUgY2FuZGlkYXRlcyBmb3IgaW5jbHVzaW9uIGluIG15IGFuYWx5c2lzLiBBbmQsIG9mIGNvdXJzZSwgYHBuZWlnaF9lbnF1ZXVlYCBpcyBpbXBvcnRhbnQgYXMgd2VsbC5cblxuVGhlbiwgdGhlcmUncyBgbmVpZ2hfdGFibGVfaW5pdGAuIEFoLCB5ZXMsIHRoaXMgaXMgcGFydCBvZiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcywgaXNuJ3QgaXQ/IEl0J3MgY2FsbGVkIGR1cmluZyBib290IG9yIG1vZHVsZSBpbml0aWFsaXphdGlvbiDigJMgcm91dGluZXMgbGlrZSBgYXJwX2luaXRgLCBgbmRpc2NfaW5pdGAsIGBjbGlwX2luaXRgLCBhbmQgYGRuX25laWdoX2luaXRgLiBBaCB3YWl0ISBgbmVpZ2hfdGFibGVfaW5pdGAgaXMgY2FsbGVkIGR1cmluZyB0aGUgaW5pdC4gVGhpcyBtZWFucyBJIHNob3VsZCBjaGVjayB3aGVyZSBgbmVpZ2hfdGFibGVfaW5pdGAgaXMgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODcwOCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMzo0Mi40ODEyODUzNjRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTY0NTQwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZWlnaF90YWJsZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbmVpZ2hib3VyLmM9MTgyND1zdGF0aWMgc3RydWN0IG5laWdoX3RhYmxlIF9fcmN1ICpuZWlnaF90YWJsZXNbTkVJR0hfTlJfVEFCTEVTXSBfX3JlYWRfbW9zdGx5O1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTE4MjUtXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTgyNjp2b2lkIG5laWdoX3RhYmxlX2luaXQoaW50IGluZGV4LCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibClcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xODI3LXtcXG4tLVxcbm5ldC9pcHY0L2FycC5jPTE1MTQ9dm9pZCBfX2luaXQgYXJwX2luaXQodm9pZClcXG5uZXQvaXB2NC9hcnAuYy0xNTE1LXtcXG5uZXQvaXB2NC9hcnAuYzoxNTE2OlxcdG5laWdoX3RhYmxlX2luaXQoTkVJR0hfQVJQX1RBQkxFLCBcXHUwMDI2YXJwX3RibCk7XFxubmV0L2lwdjQvYXJwLmMtMTUxNy1cXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9MjAwNT1pbnQgX19pbml0IG5kaXNjX2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMjAxNC1cXHQgKi9cXG5uZXQvaXB2Ni9uZGlzYy5jOjIwMTU6XFx0bmVpZ2hfdGFibGVfaW5pdChORUlHSF9ORF9UQUJMRSwgXFx1MDAyNm5kX3RibCk7XFxubmV0L2lwdjYvbmRpc2MuYy0yMDE2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMzo0Mi42MzI5NDAxMzlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAwNzE2MDQ5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBDb25jdXJyZW5jeSBJc3N1ZXMgaW4gTmVpZ2hib3IgRGlzY292ZXJ5IFRhYmxlIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBgbmVpZ2hfdGFibGVfaW5pdGAgaXMgYSBvbmUtdGltZSB0aGluZyBhdCB0aGUgc3RhcnQsIG5vdCBpbnRlcmVzdGluZyBmb3IgZnV6emluZy4gQnV0IGBwbmVpZ2hfZW5xdWV1ZWAsIGBuZWlnaF9pZmRvd25gLCBhbmQgYG5laWdoX2NhcnJpZXJfZG93bmA/IFRob3NlIGFyZSBydW50aW1lIGZ1bmN0aW9ucyB0aGF0IGRpcmVjdGx5IGhpdCB0aGUgY29kZSBJJ3ZlIGJlZW4gd29ya2luZyBvbiwgYW5kIHRoZSBuZXcgbG9jay4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuXG5cbkxldCdzIGRpdmUgaW50byBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgZGVhZGxvY2sgc2NlbmFyaW9zLCBwYXJ0aWN1bGFybHkgd2l0aGluIGBfX25laWdoX2lmZG93bmAuIEhlcmUncyB3aGF0J3MgaGFwcGVuaW5nOiBpdCBjYWxscyBgcG5laWdoX2lmZG93bmAsIHRoZW4gZ3JhYnMgYHRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrYCwgcHVyZ2VzIGB0YmwtXHUwMDNlcHJveHlfcXVldWVgIHdpdGggYHBuZWlnaF9xdWV1ZV9wdXJnZWAsIGFuZCAqdGhlbiogY29uZGl0aW9uYWxseSBkZWxldGVzIHRoZSB0aW1lciB3aXRoIGB0aW1lcl9kZWxldGVfc3luY2AgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LiBIb2xkIG9uIGEgc2Vjb25k4oCmIGB0aW1lcl9kZWxldGVfc3luY2AgaXMgY2FsbGVkICp3aGlsZSogaG9sZGluZyBgdGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2tgPyBUaGF0J3Mgbm90IGdvb2QuIFxuXG5XaGF0IGlmIHRoZSBgbmVpZ2hfcHJveHlfcHJvY2Vzc2AgdGltZXIgY2FsbGJhY2sgaXMgcnVubmluZyBvbiBhbm90aGVyIENQVSAqcmlnaHQgbm93Kj8gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCB3b3Jrcy4gTGV0J3MgbG9vayBhdCBgbmVpZ2hfcHJveHlfcHJvY2Vzc2A6XG5cbk9rYXksIHNvIGBuZWlnaF9wcm94eV9wcm9jZXNzYCAqZG9lc24ndCogdGFrZSBgdGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2tgLiBJdCBncmFicyBgdGJsLVx1MDAzZXByb3h5X3F1ZXVlLmxvY2tgIGluc3RlYWQuIEJ1dCwgaW1wb3J0YW50bHksIGluc2lkZSB0aGF0IGNyaXRpY2FsIHNlY3Rpb24sIGl0ICpjYWxscyBgdGJsLVx1MDAzZXByb3h5X3JlZG8oc2tiKWAqISBUaGF0J3MgdGhlIGtleS4gV2hhdCBpcyBgdGJsLVx1MDAzZXByb3h5X3JlZG8oc2tiKWAgYWN0dWFsbHkgZG9pbmc/IEluIEFSUCwgaXQncyBlaXRoZXIgYHBuZWlnaF9lbnF1ZXVlYCBvciBgYXJwX3Byb2Nlc3NgISBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgYHByb3h5X3JlZG9gIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTY1NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowNDowMi43MDQ1NDk1MDNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDgzOTAxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm94eV9yZWRvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbmVpZ2hib3VyLmM9MTY3NT1zdGF0aWMgdm9pZCBuZWlnaF9wcm94eV9wcm9jZXNzKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTY5Mi1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNjkzOlxcdFxcdFxcdGlmICh0YmwtXFx1MDAzZXByb3h5X3JlZG8gXFx1MDAyNlxcdTAwMjYgbmV0aWZfcnVubmluZyhkZXYpKSB7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTY5NC1cXHRcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTY5NTpcXHRcXHRcXHRcXHR0YmwtXFx1MDAzZXByb3h5X3JlZG8oc2tiKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNjk2LVxcdFxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubmV0L2lwdjQvYXJwLmM9MTUyPXN0cnVjdCBuZWlnaF90YWJsZSBhcnBfdGJsID0ge1xcbi0tXFxubmV0L2lwdjQvYXJwLmMtMTU4LVxcdC5jb25zdHJ1Y3RvclxcdD0gYXJwX2NvbnN0cnVjdG9yLFxcbm5ldC9pcHY0L2FycC5jOjE1OTpcXHQucHJveHlfcmVkb1xcdD0gcGFycF9yZWRvLFxcbm5ldC9pcHY0L2FycC5jLTE2MC1cXHQuaXNfbXVsdGljYXN0XFx0PSBhcnBfaXNfbXVsdGljYXN0LFxcbi0tXFxubmV0L2lwdjYvbmRpc2MuYz0xMDk9c3RydWN0IG5laWdoX3RhYmxlIG5kX3RibCA9IHtcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTE3LVxcdC5wZGVzdHJ1Y3RvciA9XFx0cG5kaXNjX2Rlc3RydWN0b3IsXFxubmV0L2lwdjYvbmRpc2MuYzoxMTg6XFx0LnByb3h5X3JlZG8gPVxcdHBuZGlzY19yZWRvLFxcbm5ldC9pcHY2L25kaXNjLmMtMTE5LVxcdC5pc19tdWx0aWNhc3QgPVxcdG5kaXNjX2lzX211bHRpY2FzdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDQ6MDIuODQ5Mzk1NjdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzgwNjQ1Mjc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS5cblxuKipJbnZlc3RpZ2F0aW5nIGBwYXJwX3JlZG9gIGFuZCBgcG5kaXNjX3JlZG9gKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyBgcGFycF9yZWRvYCBhbmQgYHBuZGlzY19yZWRvYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZG9pbmcuIFdoYXQgYXJlIHRoZWlyIHB1cnBvc2VzPyBIb3cgZG8gdGhleSBmdW5jdGlvbj8gQXJlIHRoZXkgcGVyZm9ybWluZyBhbnkgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IGFmZmVjdCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtPyBXaGF0IHNvcnQgb2YgZGF0YSBhcmUgdGhleSB1c2luZywgYW5kIHdoZXJlIGFyZSB0aGV5IGdldHRpbmcgdGhhdCBkYXRhPyBXaGF0IGFyZSB0aGUgZWRnZSBjYXNlcyBJIG5lZWQgdG8gY29uc2lkZXI/IFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBmb3JtIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZy4gVGltZSB0byByb2xsIHVwIG15IHNsZWV2ZXMgYW5kIHNlZSB3aGF0IHRoZXNlIGZ1bmN0aW9ucyBkby4gSeKAmWxsIG1ha2Ugc3VyZSB0byBub3RlIGFueSBkZXRhaWxzIGFzIEkgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5OTUsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowNDoxMC42NTU4NTEyMDFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDg1NjMwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYXJwX3JlZG9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9hcnAuYz0xMjY9c3RhdGljIHZvaWQgYXJwX2Vycm9yX3JlcG9ydChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxubmV0L2lwdjQvYXJwLmM6MTI3OnN0YXRpYyB2b2lkIHBhcnBfcmVkbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5uZXQvaXB2NC9hcnAuYy0xMjgtc3RhdGljIGludCBhcnBfaXNfbXVsdGljYXN0KGNvbnN0IHZvaWQgKnBrZXkpO1xcbi0tXFxubmV0L2lwdjQvYXJwLmM9MTUyPXN0cnVjdCBuZWlnaF90YWJsZSBhcnBfdGJsID0ge1xcbi0tXFxubmV0L2lwdjQvYXJwLmMtMTU4LVxcdC5jb25zdHJ1Y3RvclxcdD0gYXJwX2NvbnN0cnVjdG9yLFxcbm5ldC9pcHY0L2FycC5jOjE1OTpcXHQucHJveHlfcmVkb1xcdD0gcGFycF9yZWRvLFxcbm5ldC9pcHY0L2FycC5jLTE2MC1cXHQuaXNfbXVsdGljYXN0XFx0PSBhcnBfaXNfbXVsdGljYXN0LFxcbi0tXFxubmV0L2lwdjQvYXJwLmM9NzAyPXN0YXRpYyBpbnQgYXJwX3Byb2Nlc3Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9hcnAuYy05NTItXFxubmV0L2lwdjQvYXJwLmM6OTUzOnN0YXRpYyB2b2lkIHBhcnBfcmVkbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L2FycC5jLTk1NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjA0OjEwLjgxNjcxODg4NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjM0MTA2NDk4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGJhc2VkIG9uIHRoZSBwcm9tcHQ6XG5cbioqRGl2aW5nIGludG8gYHBhcnBfcmVkb2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBjcmFjayBvcGVuIGBuZXQvaXB2NC9hcnAuY2AgYW5kIHRha2UgYSBsb29rIGF0IGBwYXJwX3JlZG9gLiBJJ20gY3VyaW91cyB0byBzZWUgd2hhdCdzIGhhcHBlbmluZyBpbiB0aGlzIGZ1bmN0aW9uOyB0aGUgbmFtZSBpdHNlbGYgaGludHMgYXQgc29tZSBraW5kIG9mIHJlLXRyYW5zbWlzc2lvbiBsb2dpYyBvciBwZXJoYXBzIHNvbWUgc3RhdGUgcmUtZXZhbHVhdGlvbi4gR2l2ZW4gaXRzIHBsYWNlbWVudCwgSSdtIGV4cGVjdGluZyB0aGlzIGlzIGhhbmRsaW5nIHRoZSByZS10cmFuc21pc3Npb24gb2YgYSBwcm9iZSBvciByZXF1ZXN0IGFmdGVyIGFuIGluaXRpYWwgQVJQIGZhaWx1cmUgb3IgdGltZW91dCwgbGlrZWx5IGluIHRoZSBjb250ZXh0IG9mIEdyYXR1aXRvdXMgQVJQIG9yIHdoZW4gYSBob3N0IGZhaWxzIHRvIGltbWVkaWF0ZWx5IHJlc3BvbmQgdG8gYW4gQVJQIHJlcXVlc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgcmV0cmllcywgd2hhdCB0aGUgdGltZW91dCB2YWx1ZXMgYXJlLCBhbmQgd2hhdCB0cmlnZ2VycyB0aGlzIGZ1bmN0aW9uJ3MgZXhlY3V0aW9uLiBJdCB3aWxsIGJlIGhlbHBmdWwgdG8gc2VlIHdoZXRoZXIgaXQgdXNlcyB0aGUgYGFycF90aW1lcmAgdG8gbWFuYWdlIHRoZSByZXF1ZXN0IG9yIHNvbWUgb3RoZXIga2VybmVsIG1lY2hhbmlzbS4gTGV0J3Mgc2VlIGlmIHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBkdXBsaWNhdGUgYWRkcmVzcyBkZXRlY3Rpb24gKERBRCkgYXQgYWxsLiBUaW1lIHRvIGxvb2sgaW50byB0aGUgY29kZSBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTE1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDQ6MzMuMTU3Nzg2MjkyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9hcnAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NTMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NTM6XFx0c3RhdGljIHZvaWQgcGFycF9yZWRvKHN0cnVjdCBza19idWZmICpza2IpXFxuIDk1NDpcXHR7XFxuIDk1NTpcXHRcXHRhcnBfcHJvY2VzcyhkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcXG4gOTU2OlxcdH1cXG4gOTU3OlxcdFxcbiA5NTg6XFx0c3RhdGljIGludCBhcnBfaXNfbXVsdGljYXN0KGNvbnN0IHZvaWQgKnBrZXkpXFxuIDk1OTpcXHR7XFxuIDk2MDpcXHRcXHRyZXR1cm4gaXB2NF9pc19tdWx0aWNhc3QoKigoX19iZTMyICopcGtleSkpO1xcbiA5NjE6XFx0fVxcbiA5NjI6XFx0XFxuIDk2MzpcXHQvKlxcbiA5NjQ6XFx0ICpcXHRSZWNlaXZlIGFuIGFycCByZXF1ZXN0IGZyb20gdGhlIGRldmljZSBsYXllci5cXG4gOTY1OlxcdCAqL1xcbiA5NjY6XFx0XFxuIDk2NzpcXHRzdGF0aWMgaW50IGFycF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gOTY4OlxcdFxcdFxcdCAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldilcXG4gOTY5OlxcdHtcXG4gOTcwOlxcdFxcdGVudW0gc2tiX2Ryb3BfcmVhc29uIGRyb3BfcmVhc29uO1xcbiA5NzE6XFx0XFx0Y29uc3Qgc3RydWN0IGFycGhkciAqYXJwO1xcbiA5NzI6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjA0OjMzLjE1NzkwNDM0MloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4NzQxNjUxMzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYWRsb2NrIERldGVjdGVkISBBIENsYXNzaWMgQUJCQSBCdWchKipcblxuT2theSwgc28gYHBhcnBfcmVkb2AgY2FsbHMgYGFycF9wcm9jZXNzYC4gVGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgY2FuIGBhcnBfcHJvY2Vzc2AgY2FsbCBgcG5laWdoX2VucXVldWVgPyBBaCwgeWVzLCBpbiB0aGUgY29kZSwgcmlnaHQgdGhlcmU6IGBwbmVpZ2hfZW5xdWV1ZShcdTAwMjZhcnBfdGJsLCBpbl9kZXYtXHUwMDNlYXJwX3Bhcm1zLCBza2IpO2AgSXQgZG9lcyEgT2theSwgcHV0dGluZyBpdCBhbGwgdG9nZXRoZXI6IGBwYXJwX3JlZG9gIGNhbGxzIGBhcnBfcHJvY2Vzc2AsIGFuZCBgYXJwX3Byb2Nlc3NgIGNhbGxzIGBwbmVpZ2hfZW5xdWV1ZWAuXG5cbk5vdywgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIGFuZCBjb25jZXJuaW5nLiBJZiBgdGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2tgIGlzIGhlbGQgYnkgYHRpbWVyX2RlbGV0ZV9zeW5jYCBvbiBDUFUgMCwgYW5kIHRoYXQgcm91dGluZSBpcyB3YWl0aW5nIGZvciBgbmVpZ2hfcHJveHlfcHJvY2Vzc2AgdG8gY29tcGxldGUgb24gQ1BVIDEsIGFuZCBvbiBDUFUgMSBgbmVpZ2hfcHJveHlfcHJvY2Vzc2AgY2FsbHMgYHBhcnBfcmVkb2AsIHdoaWNoIGNhbGxzIGBhcnBfcHJvY2Vzc2AsIHdoaWNoIHRoZW4gdHJpZXMgdG8gYWNxdWlyZSBgc3Bpbl9sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKWAuLi4gV2UgaGF2ZSBhIHBvdGVudGlhbCBkZWFkbG9jay5cblxuTGV0J3MgYnJlYWsgaXQgZG93bjpcblxuKiAgICoqQ1BVIDA6KiogYHNwaW5fbG9ja19iaChcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXJfbG9jayk7YCBhbmQgdGhlbiBgdGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyKTtgIHdoaWNoIGlzIHdhaXRpbmcgZm9yIGBuZWlnaF9wcm94eV9wcm9jZXNzYCBvbiBDUFUgMSB0byBmaW5pc2guXG4qICAgKipDUFUgMToqKiBgbmVpZ2hfcHJveHlfcHJvY2VzcygpYCBpcyBydW5uaW5nIChsaWtlbHkgYSB0aW1lciBoYW5kbGVyKTogYHRibC1cdTAwM2Vwcm94eV9yZWRvKHNrYilgIC1cdTAwM2UgYHBhcnBfcmVkb2AgLVx1MDAzZSBgYXJwX3Byb2Nlc3NgLiBBbmQsIGlmIGBhcnBfcHJvY2Vzc2AgY2FsbHMgYHBuZWlnaF9lbnF1ZXVlYCB3aGljaCBpdCBkb2VzXG4gICAgYHBuZWlnaF9lbnF1ZXVlYCB0cmllcyB0byBncmFiIGBzcGluX2xvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO2BcblxuKipUaGUgRGVhZGxvY2s6KiogQ1BVIDAgaXMgd2FpdGluZyBmb3IgQ1BVIDEgKHRoZSB0aW1lciBoYW5kbGVyKSB0byBmaW5pc2ggcmVsZWFzaW5nIGBwcm94eV90aW1lcl9sb2NrYCBhbmQgQ1BVIDEgaXMgd2FpdGluZyBmb3IgQ1BVIDAgdG8gcmVsZWFzZSBgcHJveHlfdGltZXJfbG9ja2AhIENsYXNzaWMgQUJCQSwgYSB0ZXh0Ym9vayBleGFtcGxlIG9mIGEgdGltZXIgc3luY2hyb25pemF0aW9uIGJ1Zy4gVGhpcyBjb25maXJtcyB3aHkgcGF0Y2ggZnV6emluZyB3aXRoIHN5emthbGxlciBhbmQgdGhlIGxvY2tkZXAgdG9vbCBpcyBjcnVjaWFsIGluIGRldGVjdGluZyB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMgZWFybHkuXG5cbkkgc2hvdWxkIGNoZWNrIGlmIGBhcnBfcHJvY2Vzc2AgY2FuIHJlLWVucXVldWUsIHByb2JhYmx5IGxvb2sgYXJvdW5kIGxpbmUgODgwIGluIGBuZXQvaXB2NC9hcnAuY2AgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwODYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowNDo0MS44OTk1NjAwMDNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2FycC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg2MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg2MDpcXHRcXHRcXHRcXHRcXHR9XFxuIDg2MTpcXHRcXHRcXHRcXHR9XFxuIDg2MjpcXHRcXHRcXHRcXHRnb3RvIG91dF9jb25zdW1lX3NrYjtcXG4gODYzOlxcdFxcdFxcdH0gZWxzZSBpZiAoSU5fREVWX0ZPUldBUkQoaW5fZGV2KSkge1xcbiA4NjQ6XFx0XFx0XFx0XFx0aWYgKGFkZHJfdHlwZSA9PSBSVE5fVU5JQ0FTVCAgXFx1MDAyNlxcdTAwMjZcXG4gODY1OlxcdFxcdFxcdFxcdCAgICAoYXJwX2Z3ZF9wcm94eShpbl9kZXYsIGRldiwgcnQpIHx8XFxuIDg2NjpcXHRcXHRcXHRcXHQgICAgIGFycF9md2RfcHZsYW4oaW5fZGV2LCBkZXYsIHJ0LCBzaXAsIHRpcCkgfHxcXG4gODY3OlxcdFxcdFxcdFxcdCAgICAgKHJ0LVxcdTAwM2Vkc3QuZGV2ICE9IGRldiBcXHUwMDI2XFx1MDAyNlxcbiA4Njg6XFx0XFx0XFx0XFx0ICAgICAgcG5laWdoX2xvb2t1cChcXHUwMDI2YXJwX3RibCwgbmV0LCBcXHUwMDI2dGlwLCBkZXYpKSkpIHtcXG4gODY5OlxcdFxcdFxcdFxcdFxcdG4gPSBuZWlnaF9ldmVudF9ucyhcXHUwMDI2YXJwX3RibCwgc2hhLCBcXHUwMDI2c2lwLCBkZXYpO1xcbiA4NzA6XFx0XFx0XFx0XFx0XFx0aWYgKG4pXFxuIDg3MTpcXHRcXHRcXHRcXHRcXHRcXHRuZWlnaF9yZWxlYXNlKG4pO1xcbiA4NzI6XFx0XFxuIDg3MzpcXHRcXHRcXHRcXHRcXHRpZiAoTkVJR0hfQ0Ioc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBMT0NBTExZX0VOUVVFVUVEIHx8XFxuIDg3NDpcXHRcXHRcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfSE9TVCB8fFxcbiA4NzU6XFx0XFx0XFx0XFx0XFx0ICAgIE5FSUdIX1ZBUihpbl9kZXYtXFx1MDAzZWFycF9wYXJtcywgUFJPWFlfREVMQVkpID09IDApIHtcXG4gODc2OlxcdFxcdFxcdFxcdFxcdFxcdGFycF9zZW5kX2RzdChBUlBPUF9SRVBMWSwgRVRIX1BfQVJQLFxcbiA4Nzc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaXAsIGRldiwgdGlwLCBzaGEsXFxuIDg3ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGRldi1cXHUwMDNlZGV2X2FkZHIsIHNoYSxcXG4gODc5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgcmVwbHlfZHN0KTtcXG4gODgwOlxcdFxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuIDg4MTpcXHRcXHRcXHRcXHRcXHRcXHRwbmVpZ2hfZW5xdWV1ZShcXHUwMDI2YXJwX3RibCxcXG4gODgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpbl9kZXYtXFx1MDAzZWFycF9wYXJtcywgc2tiKTtcXG4gODgzOlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfZHN0O1xcbiA4ODQ6XFx0XFx0XFx0XFx0XFx0fVxcbiA4ODU6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfY29uc3VtZV9za2I7XFxuIDg4NjpcXHRcXHRcXHRcXHR9XFxuIDg4NzpcXHRcXHRcXHR9XFxuIDg4ODpcXHRcXHR9XFxuIDg4OTpcXHRcXG4gODkwOlxcdFxcdC8qIFVwZGF0ZSBvdXIgQVJQIHRhYmxlcyAqL1xcbiA4OTE6XFx0XFxuIDg5MjpcXHRcXHRuID0gX19uZWlnaF9sb29rdXAoXFx1MDAyNmFycF90YmwsIFxcdTAwMjZzaXAsIGRldiwgMCk7XFxuIDg5MzpcXHRcXG4gODk0OlxcdFxcdGFkZHJfdHlwZSA9IC0xO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowNDo0MS44OTk4NDI1MzNaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI0MzkyNTgzMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIExvY2sgSW52ZXJzaW9uIGluIE5laWdoYm9yIFN1YnN5c3RlbSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTGluZSA4NzMgaW4gYG5ldC9pcHY0L2FycC5jYCBjYXVnaHQgbXkgYXR0ZW50aW9uLiBUaGUgYExPQ0FMTFlfRU5RVUVVRURgIGZsYWcgaW4gdGhlIEFSUCBjb250ZXh0IHByZXZlbnRzIHJlLWVucXVldWluZyBvZiB0aGUgKnNhbWUqIHBhY2tldC4gSG93ZXZlciwgSSdtIHRoaW5raW5nIGFib3V0IGJyb2FkZXIgaW1wbGljYXRpb25zOiBJUHY2LCBvdGhlciBwYWNrZXQgdHlwZXMsIG9yIGV2ZW4gbG9ja2RlcCBpdHNlbGYgZmxhZ2dpbmcgYSBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb24uIERpZ2dpbmcgZGVlcGVyLCBJIHNlZSBgX190aW1lcl9kZWxldGVfc3luY2AgdXNlcyBgbG9jYWxfaXJxX3NhdmVgIGFuZCBgbG9jYWxfaXJxX3Jlc3RvcmVgIHdpdGggYSBgbG9ja2RlcF9tYXBgLiBUaGUgaXNzdWU/IElmIGB0aW1lcl9kZWxldGVfc3luY2AgaXMgY2FsbGVkIHdoaWxlIGBwcm94eV90aW1lcl9sb2NrYCBpcyBoZWxkLCB0aGVuIHdlIGhhdmU6IGBwcm94eV90aW1lcl9sb2NrYCAtXHUwMDNlIGB0aW1lci1cdTAwM2Vsb2NrZGVwX21hcGAuIE5vdywgKmluc2lkZSogdGhlIHRpbWVyIGNhbGxiYWNrLCBgdGltZXItXHUwMDNlbG9ja2RlcF9tYXBgIGlzICphbHNvKiBoZWxkLiBJZiB0aGUgY2FsbGJhY2sgYXR0ZW1wdHMgdG8gYWNxdWlyZSBgcHJveHlfdGltZXJfbG9ja2AsIGxvY2tkZXAgd2lsbCAqaW1tZWRpYXRlbHkqIHNjcmVhbSBhYm91dCBhIGNpcmN1bGFyIGRlcGVuZGVuY3khIEEgbG9jayBpbnZlcnNpb24hIFdoYXQgaWYgc29tZSBvdGhlciB0aHJlYWQgY2FsbHMgYHBuZWlnaF9lbnF1ZXVlYCBmcm9tIHdpdGhpbiBhIHRpbWVyLCBuZXRmaWx0ZXIgaG9vaywgb3IgZXZlbiBwYWNrZXQgcmVjZXB0aW9uP1xuXG5UaGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlOiBjb3JlIG5ldHdvcmtpbmcgc3luY2hyb25pemF0aW9uLiBBIG5ldyBzcGlubG9jaywgYHByb3h5X3RpbWVyX2xvY2tgLCBpcyBhZGRlZCB0byBgc3RydWN0IG5laWdoX3RhYmxlYC4gSXQncyBhY3F1aXJlZCBpbiBgcG5laWdoX2VucXVldWVgIGFuZCBgX19uZWlnaF9pZmRvd25gLiBgdGltZXJfZGVsZXRlX3N5bmNgIGlzIGNhbGxlZCB1bmRlciBgcHJveHlfdGltZXJfbG9ja2AuIFRoaXMgaXMgcmlwZSBmb3IgZnV6emluZy4gSXQncyBlYXNpbHkgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIG9wZXJhdGlvbnMsIHZpcnR1YWwgZGV2aWNlcyAodHVuL3RhcCwgdmV0aCwgbG9vcGJhY2spLCByb3V0ZSBjb25maWd1cmF0aW9uLCBuZXRsaW5rLCBBUlAvTkQgdHJhZmZpYywgYW5kIGxpbmsgc3RhdGUgY2hhbmdlcyAoYGlwIGxpbmsgc2V0IC4uLiB1cC9kb3duYCkuXG5cbmBXb3J0aEZ1enppbmdgPyBBYnNvbHV0ZWx5LCBgdHJ1ZWAuXG5cbkxldCdzIGxvb2sgYXQgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIGBDT05GSUdfTkVUYCBpcyBlc3NlbnRpYWwsIGFuZCBgQ09ORklHX0lORVRgIGlzIGFsc28gbmVlZGVkIGJlY2F1c2UgYHBuZWlnaF9lbnF1ZXVlYCBpcyB1c2VkIGJ5IElQdjQgQVJQIChgQ09ORklHX0lORVRgKSBhbmQgSVB2NiBORCAoYENPTkZJR19JUFY2YCkuIFRoZSBuZWlnaGJvciBzdWJzeXN0ZW0gaXMgcGFydCBvZiBjb3JlIG5ldHdvcmtpbmcgKGBDT05GSUdfTkVUYCkuIE5vIG90aGVyIHNwZWNpZmljIGNvbmZpZ3MgYXBwZWFyIGNyaXRpY2FsIGF0IHRoaXMgcG9pbnQuIFNvIHRoZSBzZXQgb2YgcmVxdWlyZWQgY29uZmlnIG9wdGlvbnMgYXJlOiBgW1wiTkVUXCIsIFwiSU5FVFwiLCBcIklQVjZcIl1gIG9yIGBbXCJORVRcIiwgXCJJTkVUXCJdYCAuXG5cbkFzIGZvciBgRm9jdXNTeW1ib2xzYCwgSSd2ZSBpZGVudGlmaWVkIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBwbmVpZ2hfZW5xdWV1ZWAsIGBuZWlnaF9pZmRvd25gICh3aGljaCBjYWxscyBgX19uZWlnaF9pZmRvd25gKSwgYG5laWdoX2NhcnJpZXJfZG93bmAgKHdoaWNoIGFsc28gY2FsbHMgYF9fbmVpZ2hfaWZkb3duYCksIGBfX25laWdoX2lmZG93bmAgKHRoZSBhY3R1YWwgbW9kaWZpZWQgZnVuY3Rpb24pLCBgbmVpZ2hfcHJveHlfcHJvY2Vzc2AgKHRoZSB0aW1lciBjYWxsYmFjayksIGFuZCBgcG5laWdoX3F1ZXVlX3B1cmdlYCAoY2FsbGVkIGJlZm9yZSBgdGltZXJfZGVsZXRlX3N5bmNgKS5cblxuSSd2ZSB2ZXJpZmllZCB0aGVzZSBzeW1ib2xzIGV4aXN0IGluIHRoZSBrZXJuZWwgYW5kIGFyZSBhbGwgZXhwb3J0ZWQsIG9yIGluIHRoZSBjYXNlIG9mIGBfX25laWdoX2lmZG93bmAsIHN0YXRpYy4gTm9uZSBvZiB0aGVtIGFyZSB1YmlxdWl0b3VzLCBtZWFuaW5nIG5vdCBtZW1vcnkgYWxsb2NhdG9ycywgY29yZSBzY2hlZHVsZXIsIG9yIGdlbmVyYWwgbG9jayBwcmltaXRpdmVzLiBUaGV5IGFyZSBzcGVjaWZpYyB0byBuZWlnaGJvciBwcm94eSB0aW1lcnMgYW5kIGludGVyZmFjZSBkb3duIGV2ZW50cyBpbiB0aGUgbmVpZ2hib3Igc3Vic3lzdGVtLlxuXG5GaW5hbGx5LCBJJ3ZlIGRvdWJsZS1jaGVja2VkIGV2ZXJ5dGhpbmcgYWdhaW5zdCB0aGUgaW5zdHJ1Y3Rpb25zOiBJJ2xsIHVzZSBgc2V0LXJlc3VsdHNgIHRvIHByb3ZpZGUgdGhlIGFuYWx5c2lzLCBpdCBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSwgYFdvcnRoRnV6emluZ2AgaXMgdHJ1ZSwgdGhlIGBSZWFzb25pbmdgIGlzIGNvbmNpc2UsIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgc3BlY2lmaWMsIG5vbi11YmlxdWl0b3VzLCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgc3BlY2lmaWVkLlxuXG5JIGFtIGNvbmZpZGVudC5cbmBgYGpzb25cbntcblwiV29ydGhGdXp6aW5nXCI6IHRydWUsXG5cIlJlYXNvbmluZ1wiOiBcIkludHJvZHVjdGlvbiBvZiBwcm94eV90aW1lcl9sb2NrIGluIG5ldC9jb3JlL25laWdoYm91ci5jIGNyZWF0ZXMgcG90ZW50aWFsIGxvY2sgaW52ZXJzaW9uIGlzc3VlcyB3aGVuIHBuZWlnaF9lbnF1ZXVlIG9yIHRpbWVyIGNhbGxiYWNrcyBhY3F1aXJlIHRoZSBzYW1lIGxvY2tcIixcblwiRm9jdXNTeW1ib2xzXCI6IFtcblwicG5laWdoX2VucXVldWVcIixcblwibmVpZ2hfaWZkb3duXCIsXG5cIm5laWdoX2NhcnJpZXJfZG93blwiLFxuXCJfX25laWdoX2lmZG93blwiLFxuXCJuZWlnaF9wcm94eV9wcm9jZXNzXCIsXG5cInBuZWlnaF9xdWV1ZV9wdXJnZVwiXG5dLFxuXCJFbmFibGVDb25maWdzXCI6IFtcblwiTkVUXCIsXG5cIklORVRcIixcblwiSVBWNlwiXG5dXG59XG5gYGBcblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NTEsIk91dHB1dFRva2VucyI6MjEzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDU6MDQuMzM5MTAzNjA1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNTU1OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwbmVpZ2hfZW5xdWV1ZVwiLFxuICAgIFwiX19uZWlnaF9pZmRvd25cIixcbiAgICBcIm5laWdoX2lmZG93blwiLFxuICAgIFwibmVpZ2hfY2Fycmllcl9kb3duXCIsXG4gICAgXCJuZWlnaF9wcm94eV9wcm9jZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgbmVpZ2hib3VyIHN1YnN5c3RlbSAobmV0L2NvcmUvbmVpZ2hib3VyLmMgYW5kIGluY2x1ZGUvbmV0L25laWdoYm91ci5oKS4gSXQgaW50cm9kdWNlcyBhIG5ldyBzcGlubG9jaywgcHJveHlfdGltZXJfbG9jaywgdG8gc2VyaWFsaXplIHByb3h5IHRpbWVyIHJlYXJtaW5nIGluIHBuZWlnaF9lbnF1ZXVlIHdpdGggcXVldWUgcHVyZ2luZyBhbmQgdGltZXJfZGVsZXRlX3N5bmMgaW4gX19uZWlnaF9pZmRvd24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHN0YW5kYXJkIG5ldGxpbmsvc3lzZnMgZGV2aWNlIHN0YXRlIG1hbmlwdWxhdGlvbiAoZS5nLiwgYnJpbmdpbmcgaW50ZXJmYWNlcyBkb3duKSBhbmQgcHJveHkgQVJQL05EIHBhY2tldCBoYW5kbGluZy4gRnV6emluZyB3aXRoIHN5emthbGxlciAoYW5kIGxvY2tkZXApIGlzIHdhcnJhbnRlZCB0byBkZXRlY3QgcG90ZW50aWFsIGxvY2sgaW52ZXJzaW9ucywgZGVhZGxvY2tzLCBhbmQgdGltZXIgc3luY2hyb25pemF0aW9uIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBuZWlnaF9lbnF1ZXVlXCIsXG4gICAgXCJfX25laWdoX2lmZG93blwiLFxuICAgIFwibmVpZ2hfaWZkb3duXCIsXG4gICAgXCJuZWlnaF9jYXJyaWVyX2Rvd25cIixcbiAgICBcIm5laWdoX3Byb3h5X3Byb2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gaW4gdGhlIGNvcmUgbmV0d29ya2luZyBuZWlnaGJvdXIgc3Vic3lzdGVtIChuZXQvY29yZS9uZWlnaGJvdXIuYyBhbmQgaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgpLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHNwaW5sb2NrLCBwcm94eV90aW1lcl9sb2NrLCB0byBzZXJpYWxpemUgcHJveHkgdGltZXIgcmVhcm1pbmcgaW4gcG5laWdoX2VucXVldWUgd2l0aCBxdWV1ZSBwdXJnaW5nIGFuZCB0aW1lcl9kZWxldGVfc3luYyBpbiBfX25laWdoX2lmZG93bi4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3RhbmRhcmQgbmV0bGluay9zeXNmcyBkZXZpY2Ugc3RhdGUgbWFuaXB1bGF0aW9uIChlLmcuLCBicmluZ2luZyBpbnRlcmZhY2VzIGRvd24pIGFuZCBwcm94eSBBUlAvTkQgcGFja2V0IGhhbmRsaW5nLiBGdXp6aW5nIHdpdGggc3l6a2FsbGVyIChhbmQgbG9ja2RlcCkgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb25zLCBkZWFkbG9ja3MsIGFuZCB0aW1lciBzeW5jaHJvbml6YXRpb24gcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjA1OjA0LjQ2MjY3MTM0NVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc2NjE3ODQ5ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowNTowNC40NjU1ODU3MDVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3NzY1ODg2NDA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGRlZGljYXRlZCBzcGlubG9jayAoYHByb3h5X3RpbWVyX2xvY2tgKSB0byBgc3RydWN0IG5laWdoX3RhYmxlYCBhbmQgdXNlcyBpdCB0byBzZXJpYWxpemUgcmVhcm1pbmcgb2YgYHRibC1cXHUwMDNlcHJveHlfdGltZXJgIHZpYSBgbW9kX3RpbWVyKClgIGluIGBwbmVpZ2hfZW5xdWV1ZSgpYCB3aXRoIHF1ZXVlIHB1cmdpbmcgYW5kIHN5bmNocm9ub3VzIHRpbWVyIGRlbGV0aW9uIGluIGBfX25laWdoX2lmZG93bigpYC4gVGhlIG5ldyBsb2NrIGlzIGluaXRpYWxpemVkIHdpdGggYHNwaW5fbG9ja19pbml0KClgIGluIGBuZWlnaF90YWJsZV9pbml0KClgLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgcGVydGFpbiB0byBjb25jdXJyZW5jeSBjb250cm9sIGFuZCB0aW1lciBsaWZlY3ljbGUgbWFuYWdlbWVudC4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaOKAlHN1Y2ggYXMgbG9ja2luZyBvcmRlciBpbnZlcnNpb25zLCBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnPigJRhcmUgaGFuZGxlZCBieSBMT0NLREVQIGFuZCBLQVNBTi4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkgaXMgYWxsb2NhdGVkLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgYXJlIHJlYWQgb3IgYnJhbmNoZWQgdXBvbiwgYW5kIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiODZjNTRkMWU3MWY1MjJlZTNjNDk5NDA2Y2ViNWI1MzkyODNkNTc3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDk6MDE6MjQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaCBiL2luY2x1ZGUvbmV0L25laWdoYm91ci5oXG5pbmRleCA4ODYwY2MyMTc1ZmMxLi4xNTEwN2MwMGI0ZGY0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmhcbisrKyBiL2luY2x1ZGUvbmV0L25laWdoYm91ci5oXG5AQCAtMjM5LDYgKzIzOSw4IEBAIHN0cnVjdCBuZWlnaF90YWJsZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRnY19saXN0O1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bWFuYWdlZF9saXN0O1xuIFx0c3BpbmxvY2tfdFx0XHRsb2NrO1xuK1x0LyogU2VyaWFsaXplcyBwcm94eSB0aW1lciByZWFybWluZyB3aXRoIHRlYXJkb3duLiAqL1xuK1x0c3BpbmxvY2tfdFx0XHRwcm94eV90aW1lcl9sb2NrO1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRsYXN0X3JhbmQ7XG4gXHRzdHJ1Y3QgbmVpZ2hfc3RhdGlzdGljc1x0X19wZXJjcHUgKnN0YXRzO1xuIFx0c3RydWN0IG5laWdoX2hhc2hfdGFibGUgX19yY3UgKm5odDtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZWlnaGJvdXIuYyBiL25ldC9jb3JlL25laWdoYm91ci5jXG5pbmRleCAxMzQ5YzBlZWRiNjQyLi4xZWE3OTRhNTQxZWZiIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmVpZ2hib3VyLmNcbisrKyBiL25ldC9jb3JlL25laWdoYm91ci5jXG5AQCAtNDcxLDEwICs0NzEsMTMgQEAgc3RhdGljIGludCBfX25laWdoX2lmZG93bihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vsb2NrKTtcbiBcbiBcdHBuZWlnaF9pZmRvd24odGJsLCBkZXYsIHNraXBfcGVybSk7XG4rXHQvKiBUaGUgY2FsbGJhY2sgZG9lcyBub3QgdGFrZSB0aGlzIGxvY2ssIHNvIHN5bmMgZGVsZXRpb24gY2FuIHdhaXQgZm9yIGl0LiAqL1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcbiBcdHBuZWlnaF9xdWV1ZV9wdXJnZShcdTAwMjZ0YmwtXHUwMDNlcHJveHlfcXVldWUsIGRldiA/IGRldl9uZXQoZGV2KSA6IE5VTEwsXG4gXHRcdFx0ICAgdGJsLVx1MDAzZWZhbWlseSk7XG4gXHRpZiAoc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZSkpXG4gXHRcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcik7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTcyOSw2ICsxNzMyLDcgQEAgdm9pZCBwbmVpZ2hfZW5xdWV1ZShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5laWdoX3Bhcm1zICpwLFxuIFx0TkVJR0hfQ0Ioc2tiKS1cdTAwM2VzY2hlZF9uZXh0ID0gc2NoZWRfbmV4dDtcbiBcdE5FSUdIX0NCKHNrYiktXHUwMDNlZmxhZ3MgfD0gTE9DQUxMWV9FTlFVRVVFRDtcbiBcbitcdHNwaW5fbG9ja19iaChcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XG4gXHRzcGluX2xvY2soXHUwMDI2dGJsLVx1MDAzZXByb3h5X3F1ZXVlLmxvY2spO1xuIFx0aWYgKHRpbWVyX2RlbGV0ZShcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXIpKSB7XG4gXHRcdGlmICh0aW1lX2JlZm9yZSh0YmwtXHUwMDNlcHJveHlfdGltZXIuZXhwaXJlcywgc2NoZWRfbmV4dCkpXG5AQCAtMTc0MCw2ICsxNzQ0LDcgQEAgdm9pZCBwbmVpZ2hfZW5xdWV1ZShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5laWdoX3Bhcm1zICpwLFxuIFx0cC1cdTAwM2VxbGVuKys7XG4gXHRtb2RfdGltZXIoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyLCBzY2hlZF9uZXh0KTtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnRibC1cdTAwM2Vwcm94eV9xdWV1ZS5sb2NrKTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChwbmVpZ2hfZW5xdWV1ZSk7XG4gXG5AQCAtMTg1OCw2ICsxODYzLDcgQEAgdm9pZCBuZWlnaF90YWJsZV9pbml0KGludCBpbmRleCwgc3RydWN0IG5laWdoX3RhYmxlICp0YmwpXG4gXHRcdFdBUk5fT04odGJsLVx1MDAzZWVudHJ5X3NpemUgJSBORUlHSF9QUklWX0FMSUdOKTtcbiBcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnRibC1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcbiBcdG11dGV4X2luaXQoXHUwMDI2dGJsLVx1MDAzZXBoYXNoX2xvY2spO1xuIFxuIFx0SU5JVF9ERUZFUlJBQkxFX1dPUksoXHUwMDI2dGJsLVx1MDAzZWdjX3dvcmssIG5laWdoX3BlcmlvZGljX3dvcmspO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDU6MDQuNDY1NTg3OTU1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjcyOTA0NzgyMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZWlnaGJvdXJob29kIFRhYmxlIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgd2UncmUgZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsIGtlcm5lbCBtZW1vcnkgc2FmZXR5IGlzc3VlLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgKEtNU0FOKSBvciBpZiB0aGlzIGlzIGNvbmZpbmVkIHRvIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIChLQVNBTi9MT0NLREVQKS4gVGhlIGRpZmYgc2hvd3MgY2hhbmdlcyBpbiBgaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmhgIGFuZCBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgbXkgc3VzcGljaW9uLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSBhZGRpdGlvbiBvZiBhIGBzcGlubG9ja190IHByb3h5X3RpbWVyX2xvY2tgIHdpdGhpbiB0aGUgYHN0cnVjdCBuZWlnaF90YWJsZWAuIFRoZSBjb21tZW50IGV4cGxpY2l0bHkgc3RhdGVzIGl0cyBwdXJwb3NlOiBcIi8qIFNlcmlhbGl6ZXMgcHJveHkgdGltZXIgcmVhcm1pbmcgd2l0aCB0ZWFyZG93bi4gKi9cIi4gVGhpcyBzdWdnZXN0cyBzeW5jaHJvbml6YXRpb24gYXJvdW5kIGEgdGltZXIgdXNlZCBmb3IgcHJveHkgbmVpZ2hib3Vycywgd2hpY2ggaXMgYSBwcmV0dHkgY29tbW9uIHBhdHRlcm4gZm9yIHRoaXMgbmV0d29ya2luZyBjb2RlLlxuXG5JbiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYF9fbmVpZ2hfaWZkb3duYCB0byB0YWtlIGBzcGluX2xvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spYCBhcm91bmQgdGhlIGNhbGxzIHRvIGBwbmVpZ2hfcXVldWVfcHVyZ2UoKWAgYW5kIGB0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ0YmwtXHUwMDNlcHJveHlfdGltZXIpYC4gVGhpcyBsb29rcyBsaWtlIHRoZXkncmUgbG9ja2luZyBkb3duIGFjY2VzcyB0byB0aGUgcHJveHkgdGltZXIgZHVyaW5nIGludGVyZmFjZSBkb3duIG9wZXJhdGlvbnMsIHdoaWNoIGlzIGdvb2QuIFNpbWlsYXJseSwgYHBuZWlnaF9lbnF1ZXVlYCBub3cgdGFrZXMgdGhhdCBzYW1lIGxvY2sgYXJvdW5kIHRoZSBxdWV1ZWluZy9yZWFybWluZyBvZiBgdGJsLVx1MDAzZXByb3h5X3RpbWVyYC4gVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IHJhY2UgY29uZGl0aW9ucyB3aGVuIGEgcHJveHkgZW50cnkgaXMgYWRkZWQsIG9yIGFuIGV4aXN0aW5nIHByb3h5IGVudHJ5IG5lZWRzIGl0cyB0aW1lciByZXNldC4gRmluYWxseSwgYG5laWdoX3RhYmxlX2luaXRgIG5vdyBpbml0aWFsaXplcyB0aGUgbG9jay5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIEknbGwgbmVlZCB0byByZWFkIGFyb3VuZCBsaW5lcyA0NzEsIDE3MjksIGFuZCAxODU4IGluIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AgdXNpbmcgYHJlYWQtZmlsZWAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQ6XG4qICAgVGhlIG92ZXJhbGwgZnVuY3Rpb24gb2YgYG5laWdoX3RhYmxlX2luaXRgLiBXaGF0IGRhdGEgaXMgaW5pdGlhbGl6ZWQgaGVyZSBhbmQgaG93IG1pZ2h0IHRoaXMgYWZmZWN0IHRoZSBsb2NraW5nP1xuKiAgIFRoZSBleGFjdCBjb250cm9sIGZsb3cgb2YgYF9fbmVpZ2hfaWZkb3duYC4gV2hhdCBjYW4gaGFwcGVuIGR1cmluZyBgcG5laWdoX3F1ZXVlX3B1cmdlKClgIGFuZCBgdGltZXJfZGVsZXRlX3N5bmMoKWA/XG4qICAgQW5kIGZpbmFsbHksIGhvdyBgcG5laWdoX2VucXVldWVgIGlzIGNhbGxlZC4gV2hhdCBhcmUgdGhlIGNhbGxpbmcgY29udGV4dHMgYW5kIHdoYXQgY291bGQgY2F1c2UgcmFjZSBjb25kaXRpb25zIHdpdGggdGhlIHRpbWVyIGluIHRoYXQgZnVuY3Rpb24/XG5cbkJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiwgSSdsbCBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIGxvY2tpbmcgbG9naWMgaXMgc291bmQgYW5kIHRoZXJlIGFyZSBubyByZXNpZHVhbCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDU6MTEuNzU2MDY4ODE5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NjU6XFx0XFx0aWYgKGxpa2VseShkZXYpKSB7XFxuIDQ2NjpcXHRcXHRcXHRuZWlnaF9mbHVzaF9kZXYodGJsLCBkZXYsIHNraXBfcGVybSk7XFxuIDQ2NzpcXHRcXHR9IGVsc2Uge1xcbiA0Njg6XFx0XFx0XFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShza2lwX3Blcm0pO1xcbiA0Njk6XFx0XFx0XFx0bmVpZ2hfZmx1c2hfdGFibGUodGJsKTtcXG4gNDcwOlxcdFxcdH1cXG4gNDcxOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YmwtXFx1MDAzZWxvY2spO1xcbiA0NzI6XFx0XFxuIDQ3MzpcXHRcXHRwbmVpZ2hfaWZkb3duKHRibCwgZGV2LCBza2lwX3Blcm0pO1xcbiA0NzQ6XFx0XFx0LyogVGhlIGNhbGxiYWNrIGRvZXMgbm90IHRha2UgdGhpcyBsb2NrLCBzbyBzeW5jIGRlbGV0aW9uIGNhbiB3YWl0IGZvciBpdC4gKi9cXG4gNDc1OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcXG4gNDc2OlxcdFxcdHBuZWlnaF9xdWV1ZV9wdXJnZShcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV9xdWV1ZSwgZGV2ID8gZGV2X25ldChkZXYpIDogTlVMTCxcXG4gNDc3OlxcdFxcdFxcdFxcdCAgIHRibC1cXHUwMDNlZmFtaWx5KTtcXG4gNDc4OlxcdFxcdGlmIChza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUpKVxcbiA0Nzk6XFx0XFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXIpO1xcbiA0ODA6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XFxuIDQ4MTpcXHRcXHRyZXR1cm4gMDtcXG4gNDgyOlxcdH1cXG4gNDgzOlxcdFxcbiA0ODQ6XFx0aW50IG5laWdoX2NhcnJpZXJfZG93bihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gNDg1OlxcdHtcXG4gNDg2OlxcdFxcdF9fbmVpZ2hfaWZkb3duKHRibCwgZGV2LCB0cnVlKTtcXG4gNDg3OlxcdFxcdHJldHVybiAwO1xcbiA0ODg6XFx0fVxcbiA0ODk6XFx0XFxuIDQ5MDpcXHRpbnQgbmVpZ2hfaWZkb3duKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiA0OTE6XFx0e1xcbiA0OTI6XFx0XFx0X19uZWlnaF9pZmRvd24odGJsLCBkZXYsIGZhbHNlKTtcXG4gNDkzOlxcdFxcdHJldHVybiAwO1xcbiA0OTQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowNToxMS43NTYzMDE5NjlaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzAwNTQ0ODQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2Ugc2VjdGlvbnMgb2YgYG5ldC9jb3JlL25laWdoYm91ci5jYDpcblxuKipEZWVwIERpdmUgb24gTmVpZ2hib3VyIERpc2NvdmVyeSoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBjaXJjbGUgYmFjayBhbmQgcmVhbGx5IHNjcnV0aW5pemUgbGluZXMgMTcyMC0xNzYwIGFuZCAxODUwLTE4NzUgb2YgYG5ldC9jb3JlL25laWdoYm91ci5jYC4gVGhlc2UgYXJlIGxpa2VseSBjcnVjaWFsIGFyZWFzIGRlYWxpbmcgd2l0aCBuZWlnaGJvdXIgZGlzY292ZXJ5LCB3aGljaCwgYXMgd2Uga25vdywgaXMgYWJzb2x1dGVseSBmdW5kYW1lbnRhbCB0byBob3cgSVAgbmV0d29ya2luZyBvcGVyYXRlcyBhdCB0aGUgbGluayBsYXllci4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgMTcyMC0xNzYwIHByb2JhYmx5IGhhbmRsZXMgZWl0aGVyIHRoZSByZXNvbHV0aW9uIGl0c2VsZiBvciBwZXJoYXBzIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgY2FjaGUgbWFuYWdlbWVudC4gV2UncmUgdGFsa2luZyBhYm91dCB0aGUgY29yZSBsb2dpYyB0aGF0IGZpZ3VyZXMgb3V0IHRoZSBNQUMgYWRkcmVzcyBjb3JyZXNwb25kaW5nIHRvIGFuIElQIGFkZHJlc3MsIG9yIGl0IGhhcyB0byBkbyB3aXRoIGhvdyB0aGUgZW50cmllcyBhcmUgcHV0IGludG8gdGhlIEFSUCBjYWNoZS4gVW5kZXJzdGFuZGluZyB0aGF0IGludGVyYWN0aW9uIGlzIGFic29sdXRlbHkga2V5IHRvIG9wdGltaXphdGlvbi4gVGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyB0aGVyZSBhcmUgaHVnZSAtIGEgcG9vcmx5IGltcGxlbWVudGVkIG5laWdoYm91ciBkaXNjb3ZlcnkgYWxnb3JpdGhtIGNhbiBjcmlwcGxlIG5ldHdvcmsgdGhyb3VnaHB1dCBhbmQgbGF0ZW5jeS5cblxuVGhlbiwgdGhlIHNlY29uZCBzZWN0aW9uLCAxODUwLTE4NzUsIHRoYXQncyBwcm9iYWJseSByZWxhdGVkIHRvIGhhbmRsaW5nIG5laWdoYm9yIHN0YXRlcyBvciB0aGVpciB0aW1lZCBleHBpcmF0aW9uIHdpdGhpbiB0aGUgY2FjaGUuIE1heWJlIGl0J3MgYWJvdXQgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBwcm9jZXNzZXMuIElzIGl0IGRlYWxpbmcgd2l0aCByZXRyaWVzLCB0aW1lb3V0cywgb3IgaW52YWxpZGF0aW9uIG9mIHN0YWxlIGVudHJpZXM/IEtub3dpbmcgaG93IGl0IGRlYWxzIHdpdGggdGhlc2UgcG90ZW50aWFsbHkgZXJyb3ItcHJvbmUgc2NlbmFyaW9zIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBrZXJuZWwncyBvdmVyYWxsIHJvYnVzdG5lc3MuIEkgbmVlZCB0byBzZWUgaG93IGl0J3MgZGVhbGluZyB3aXRoIGNvbmZsaWN0aW5nIGVudHJpZXMgb3IgcmFwaWRseSBjaGFuZ2luZyBuZXR3b3JrIHRvcG9sb2dpZXMuIFRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSByb3V0aW5nIGNhY2hlIGlzIGFub3RoZXIga2V5IGl0ZW0gdGhhdCBjYW4ndCBiZSBvdmVybG9va2VkLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGluZWZmaWNpZW50IGxvY2tpbmcgbWVjaGFuaXNtcywgb3IgZXhjZXNzaXZlIGNvbnRleHQgc3dpdGNoZXMgd2l0aGluIHRob3NlIHNlZ21lbnRzLiBJIGV4cGVjdCB0aGUgY29kZSBpcyBjYXJlZnVsbHkgb3B0aW1pemVkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyZSBjb21wbGV0ZWx5LiBMZXQncyBzZWUgaWYgdGhlIGNvZGUgY29tbWVudHMgYXJlIHN1ZmZpY2llbnQgb3IgaWYgSSBoYXZlIHRvIHRyYWNlIHRocm91Z2ggbW9yZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3IgY29tcGxldGVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA4OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDU6MTQuNzYxNzUzNzA0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzIwOlxcdH1cXG4xNzIxOlxcdFxcbjE3MjI6XFx0dm9pZCBwbmVpZ2hfZW5xdWV1ZShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5laWdoX3Bhcm1zICpwLFxcbjE3MjM6XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuMTcyNDpcXHR7XFxuMTcyNTpcXHRcXHR1bnNpZ25lZCBsb25nIHNjaGVkX25leHQgPSBuZWlnaF9wcm94eV9kZWxheShwKTtcXG4xNzI2OlxcdFxcbjE3Mjc6XFx0XFx0aWYgKHAtXFx1MDAzZXFsZW4gXFx1MDAzZSBORUlHSF9WQVIocCwgUFJPWFlfUUxFTikpIHtcXG4xNzI4OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjE3Mjk6XFx0XFx0XFx0cmV0dXJuO1xcbjE3MzA6XFx0XFx0fVxcbjE3MzE6XFx0XFxuMTczMjpcXHRcXHRORUlHSF9DQihza2IpLVxcdTAwM2VzY2hlZF9uZXh0ID0gc2NoZWRfbmV4dDtcXG4xNzMzOlxcdFxcdE5FSUdIX0NCKHNrYiktXFx1MDAzZWZsYWdzIHw9IExPQ0FMTFlfRU5RVUVVRUQ7XFxuMTczNDpcXHRcXG4xNzM1OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcXG4xNzM2OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV9xdWV1ZS5sb2NrKTtcXG4xNzM3OlxcdFxcdGlmICh0aW1lcl9kZWxldGUoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXIpKSB7XFxuMTczODpcXHRcXHRcXHRpZiAodGltZV9iZWZvcmUodGJsLVxcdTAwM2Vwcm94eV90aW1lci5leHBpcmVzLCBzY2hlZF9uZXh0KSlcXG4xNzM5OlxcdFxcdFxcdFxcdHNjaGVkX25leHQgPSB0YmwtXFx1MDAzZXByb3h5X3RpbWVyLmV4cGlyZXM7XFxuMTc0MDpcXHRcXHR9XFxuMTc0MTpcXHRcXHRza2JfZHN0X2Ryb3Aoc2tiKTtcXG4xNzQyOlxcdFxcdGRldl9ob2xkKHNrYi1cXHUwMDNlZGV2KTtcXG4xNzQzOlxcdFxcdF9fc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUsIHNrYik7XFxuMTc0NDpcXHRcXHRwLVxcdTAwM2VxbGVuKys7XFxuMTc0NTpcXHRcXHRtb2RfdGltZXIoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXIsIHNjaGVkX25leHQpO1xcbjE3NDY6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfcXVldWUubG9jayk7XFxuMTc0NzpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtcXG4xNzQ4OlxcdH1cXG4xNzQ5OlxcdEVYUE9SVF9TWU1CT0wocG5laWdoX2VucXVldWUpO1xcbjE3NTA6XFx0XFxuMTc1MTpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZWlnaF9wYXJtcyAqbG9va3VwX25laWdoX3Bhcm1zKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLFxcbjE3NTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldCAqbmV0LCBpbnQgaWZpbmRleClcXG4xNzUzOlxcdHtcXG4xNzU0OlxcdFxcdHN0cnVjdCBuZWlnaF9wYXJtcyAqcDtcXG4xNzU1OlxcdFxcbjE3NTY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcXHUwMDI2dGJsLVxcdTAwM2VwYXJtc19saXN0LCBsaXN0KSB7XFxuMTc1NzpcXHRcXHRcXHRpZiAoKHAtXFx1MDAzZWRldiBcXHUwMDI2XFx1MDAyNiBwLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXggPT0gaWZpbmRleCBcXHUwMDI2XFx1MDAyNiBuZXRfZXEobmVpZ2hfcGFybXNfbmV0KHApLCBuZXQpKSB8fFxcbjE3NTg6XFx0XFx0XFx0ICAgICghcC1cXHUwMDNlZGV2IFxcdTAwMjZcXHUwMDI2ICFpZmluZGV4IFxcdTAwMjZcXHUwMDI2IG5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpKVxcbjE3NTk6XFx0XFx0XFx0XFx0cmV0dXJuIHA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjA1OjE0Ljc2MTk5MzkzNVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMjA3NzAwNDQ4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBDb2RlYmFzZSAtIEZvY3VzIG9uIGBuZWlnaF90YWJsZV9pbml0YCoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIGNvZGViYXNlLCBhbmQgSSB3YW50IHRvIHNoaWZ0IG15IGZvY3VzIG5vdy4gSSd2ZSBiZWVuIGNvbnNpZGVyaW5nIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSwgYnV0IGxldCdzIHpvb20gaW4gb24gYSBzcGVjaWZpYyBmdW5jdGlvbi4gSSdtIGdvaW5nIHRvIHR1cm4gbXkgYXR0ZW50aW9uIHRvIHRoZSBgbmVpZ2hfdGFibGVfaW5pdGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgYXJvdW5kIGxpbmUgMTg1MC4gSSBrbm93IHRoaXMgYXJlYSBwbGF5cyBhIGNyaXRpY2FsIHJvbGUgaW4gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBuZWlnaGJvciB0YWJsZSwgd2hpY2ggaXMga2V5IGZvciBbKmluc2VydCB5b3VyIGZpZWxkIG9mIGV4cGVydGlzZSwgZS5nLiwgcm91dGluZyBwcm90b2NvbHMsIG5ldHdvcmsgYWRkcmVzcyByZXNvbHV0aW9uLCBkaXN0cmlidXRlZCBjb25zZW5zdXMsIGV0Yy4qXS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhhdCdzIGJlaW5nIHNldCB1cCBpbiB0aGlzIGltcGxlbWVudGF0aW9uLiBJIGhhdmUgdG8gc2VlIGhvdyBpdCdzIGRvbmUgc28gSSBjYW4gYXNzZXNzIGl0cyBlZmZpY2llbmN5LCBzY2FsYWJpbGl0eSwgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGFsZ29yaXRobXMgZW1wbG95ZWQgd2l0aGluIGl0LCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBJJ20gZGlnZ2luZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIzMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDU6MjYuODM5MDAxMDM3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODUwOlxcdFxcbjE4NTE6XFx0XFx0UkNVX0lOSVRfUE9JTlRFUih0YmwtXFx1MDAzZW5odCwgbmVpZ2hfaGFzaF9hbGxvYygzKSk7XFxuMTg1MjpcXHRcXG4xODUzOlxcdFxcdHBoc2l6ZSA9IChQTkVJR0hfSEFTSE1BU0sgKyAxKSAqIHNpemVvZihzdHJ1Y3QgcG5laWdoX2VudHJ5ICopO1xcbjE4NTQ6XFx0XFx0dGJsLVxcdTAwM2VwaGFzaF9idWNrZXRzID0ga3phbGxvYyhwaHNpemUsIEdGUF9LRVJORUwpO1xcbjE4NTU6XFx0XFxuMTg1NjpcXHRcXHRpZiAoIXRibC1cXHUwMDNlbmh0IHx8ICF0YmwtXFx1MDAzZXBoYXNoX2J1Y2tldHMpXFxuMTg1NzpcXHRcXHRcXHRwYW5pYyhcXFwiY2Fubm90IGFsbG9jYXRlIG5laWdoYm91ciBjYWNoZSBoYXNoZXNcXFwiKTtcXG4xODU4OlxcdFxcbjE4NTk6XFx0XFx0aWYgKCF0YmwtXFx1MDAzZWVudHJ5X3NpemUpXFxuMTg2MDpcXHRcXHRcXHR0YmwtXFx1MDAzZWVudHJ5X3NpemUgPSBBTElHTihvZmZzZXRvZihzdHJ1Y3QgbmVpZ2hib3VyLCBwcmltYXJ5X2tleSkgK1xcbjE4NjE6XFx0XFx0XFx0XFx0XFx0XFx0dGJsLVxcdTAwM2VrZXlfbGVuLCBORUlHSF9QUklWX0FMSUdOKTtcXG4xODYyOlxcdFxcdGVsc2VcXG4xODYzOlxcdFxcdFxcdFdBUk5fT04odGJsLVxcdTAwM2VlbnRyeV9zaXplICUgTkVJR0hfUFJJVl9BTElHTik7XFxuMTg2NDpcXHRcXG4xODY1OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ0YmwtXFx1MDAzZWxvY2spO1xcbjE4NjY6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXJfbG9jayk7XFxuMTg2NzpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZ0YmwtXFx1MDAzZXBoYXNoX2xvY2spO1xcbjE4Njg6XFx0XFxuMTg2OTpcXHRcXHRJTklUX0RFRkVSUkFCTEVfV09SSyhcXHUwMDI2dGJsLVxcdTAwM2VnY193b3JrLCBuZWlnaF9wZXJpb2RpY193b3JrKTtcXG4xODcwOlxcdFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50X3dxLCBcXHUwMDI2dGJsLVxcdTAwM2VnY193b3JrLFxcbjE4NzE6XFx0XFx0XFx0XFx0dGJsLVxcdTAwM2VwYXJtcy5yZWFjaGFibGVfdGltZSk7XFxuMTg3MjpcXHRcXHRJTklUX0RFRkVSUkFCTEVfV09SSyhcXHUwMDI2dGJsLVxcdTAwM2VtYW5hZ2VkX3dvcmssIG5laWdoX21hbmFnZWRfd29yayk7XFxuMTg3MzpcXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSwgXFx1MDAyNnRibC1cXHUwMDNlbWFuYWdlZF93b3JrLCAwKTtcXG4xODc0OlxcdFxcbjE4NzU6XFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNnRibC1cXHUwMDNlcHJveHlfdGltZXIsIG5laWdoX3Byb3h5X3Byb2Nlc3MsIDApO1xcbjE4NzY6XFx0XFx0c2tiX3F1ZXVlX2hlYWRfaW5pdF9jbGFzcyhcXHUwMDI2dGJsLVxcdTAwM2Vwcm94eV9xdWV1ZSxcXG4xODc3OlxcdFxcdFxcdFxcdFxcdTAwMjZuZWlnaF90YWJsZV9wcm94eV9xdWV1ZV9jbGFzcyk7XFxuMTg3ODpcXHRcXG4xODc5OlxcdFxcdHRibC1cXHUwMDNlbGFzdF9mbHVzaCA9IG5vdztcXG4xODgwOlxcdFxcdHRibC1cXHUwMDNlbGFzdF9yYW5kXFx0PSBub3cgKyB0YmwtXFx1MDAzZXBhcm1zLnJlYWNoYWJsZV90aW1lICogMjA7XFxuMTg4MTpcXHRcXG4xODgyOlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihuZWlnaF90YWJsZXNbaW5kZXhdLCB0YmwpO1xcbjE4ODM6XFx0fVxcbjE4ODQ6XFx0XFxuMTg4NTpcXHQvKlxcbjE4ODY6XFx0ICogT25seSBjYWxsZWQgZnJvbSBuZGlzY19jbGVhbnVwKCksIHdoaWNoIG1lYW5zIHRoaXMgaXMgZGVhZCBjb2RlXFxuMTg4NzpcXHQgKiBiZWNhdXNlIHdlIG5vIGxvbmdlciBjYW4gdW5sb2FkIElQdjYgbW9kdWxlLlxcbjE4ODg6XFx0ICovXFxuMTg4OTpcXHRpbnQgbmVpZ2hfdGFibGVfY2xlYXIoaW50IGluZGV4LCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDU6MjYuODM5MjY1OTI3WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ2Mzc0NDAzNTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbiBpbiB0aGUgTmVpZ2hib3IgU3Vic3lzdGVtKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBuYXN0eSBjb25jdXJyZW5jeSBidWcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIG5laWdoYm9yIHN1YnN5c3RlbSdzIGhhbmRsaW5nIG9mIHByb3h5IHRpbWVycyB3aGVuIGEgbmV0d29yayBpbnRlcmZhY2UgZ29lcyBkb3duLiBUaGUgY29yZSBpc3N1ZSwgZnJvbSB3aGF0IEknbSBnYXRoZXJpbmcsIHJldm9sdmVzIGFyb3VuZCBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYF9fbmVpZ2hfaWZkb3duYCBhbmQgYHBuZWlnaF9lbnF1ZXVlYC4gSXQncyBhIGNsYXNzaWMgc2l0dWF0aW9uOiBgdGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyKWAgaW4gYF9fbmVpZ2hfaWZkb3duYCBjYW4gYmUgaW52b2tlZCBjb25jdXJyZW50bHkgd2l0aCBgcG5laWdoX2VucXVldWVgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBtb2RfdGltZXIoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyLCBzY2hlZF9uZXh0KWAuIFRoZSBjb21tZW50IGhpZ2hsaWdodHMgdGhpczogYC8qIFRoZSBjYWxsYmFjayBkb2VzIG5vdCB0YWtlIHRoaXMgbG9jaywgc28gc3luYyBkZWxldGlvbiBjYW4gd2FpdCBmb3IgaXQuICovYC5cblxuU28sIHRoZSBwcm9ibGVtYXRpYyBzZXF1ZW5jZSBpcyB0aGF0IGlmIGB0aW1lcl9kZWxldGVfc3luY2AgcnVucyB3aGlsZSBgcG5laWdoX2VucXVldWVgIGlzIGFjdGl2ZWx5IG1vZGlmeWluZyB0aGUgdGltZXIsIGBwbmVpZ2hfZW5xdWV1ZWAgbWlnaHQgcG90ZW50aWFsbHkgcmUtYXJtIHRoZSB0aW1lciAqYWZ0ZXIqIG9yIGV2ZW4gKmR1cmluZyogdGhlIHRlYXJkb3duIHByb2Nlc3MgaW5pdGlhdGVkIGJ5IGBfX25laWdoX2lmZG93bmAuIFRoaXMgY3JlYXRlcyB0aGUgcG90ZW50aWFsIGZvciBhIHVzZS1hZnRlci1mcmVlIG9yIGEgcmFjZSBjb25kaXRpb24sIGxlYWRpbmcgdG8gaW5zdGFiaWxpdHkgd2hlbiB0aGUgZGV2aWNlIGlzIHRha2VuIGRvd24uXG5cbkxldCdzIGRpc3NlY3QgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIGluIHRoZSB0d28gZnVuY3Rpb25zLiBJbiBgX19uZWlnaF9pZmRvd25gLCB3ZSBoYXZlIGBzcGluX2xvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyX2xvY2spO2AgZm9sbG93ZWQgYnkgYHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcik7YCBhbmQgZmluYWxseSwgYHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtgLiBUaGlzIGlzIGludGVuZGVkIHRvIHByb3RlY3QgdGhlIHRpbWVyIGZyb20gY29uY3VycmVudCBtb2RpZmljYXRpb24gZHVyaW5nIGRlbGV0aW9uLiBUaGVuLCBpbiBgcG5laWdoX2VucXVldWVgIHdlIHNlZSBgc3Bpbl9sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtgIGZvbGxvd2VkIGJ5IGBtb2RfdGltZXIoXHUwMDI2dGJsLVx1MDAzZXByb3h5X3RpbWVyLCBzY2hlZF9uZXh0KTtgIGFuZCwgYWZ0ZXIgc29tZSBvdGhlciBvcGVyYXRpb25zLCAgYHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtgLiBJbnRlcmVzdGluZ2x5LCB0aGUgYHByb3h5X3RpbWVyX2xvY2tgIHNwaW5sb2NrIGlzIGluaXRpYWxpemVkIHdpdGhpbiBgbmVpZ2hfdGFibGVfaW5pdCgpYCwgYXMgYHNwaW5fbG9ja19pbml0KFx1MDAyNnRibC1cdTAwM2Vwcm94eV90aW1lcl9sb2NrKTtgLlxuXG5Ob3csIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgdmVjdG9ycy4gSSdsbCBtZW50YWxseSBydW4gdGhyb3VnaCBteSB1c3VhbCBjaGVja3M6XG5cbjEuICAqKlVzZXItU3BhY2UgRXhwb3N1cmU6KiogRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZyBjb3VsZCBiZSBhIHByb2JsZW0/IE5vcGUsIG5vdGhpbmcgaXMgZ29pbmcgdG8gdXNlciBzcGFjZS5cbjIuICAqKkNvbmRpdGlvbmFsIExvZ2ljOioqIEFyZSB0aGVyZSBhbnkgbmV3IGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9yIGxvZ2ljIGludHJvZHVjZWQgdGhhdCBkZXBlbmQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcz8gTm8uXG4zLiAgKipEYXRhIFN0cnVjdHVyZSBJbml0aWFsaXphdGlvbjoqKiBJcyB0aGVyZSBhbnkgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyIG9uIHJlYWNoYWJsZSBjb2RlIHBhdGhzPyBJdCBkb2Vzbid0IGFwcGVhciBzbzsgYSBuZXcgYHByb3h5X3RpbWVyX2xvY2tgIHNwaW5sb2NrIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBgbmVpZ2hfdGFibGVgIHN0cnVjdHVyZS4gVGhhdCdzIGEgbmV3IGZpZWxkLiBUaGlzIGxvY2sgaXMgaW5pdGlhbGl6ZWQgaW4gYG5laWdoX3RhYmxlX2luaXQoKWAuIFRoZSBgbmVpZ2hfdGFibGVgIHN0cnVjdHVyZSBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIHN0cnVjdHVyZS5cblxuT2theSwgc28gdGhlIHBvdGVudGlhbCBidWcgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBgbmVpZ2hfdGFibGVgIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgd2hlcmUgYG5laWdoX3RhYmxlX2luaXRgIGlzIGNhbGxlZCBvciB3aGVyZSBgbmVpZ2hfdGFibGVgIGlzIGFsbG9jYXRlZC4gTGV0IG1lIGZpbmQgd2hlcmUgYG5laWdoX3RhYmxlYCBpcyBhbGxvY2F0ZWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMDUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowNjoxMy4yMTM2NzM5WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQ2NjMxMzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5laWdoX3RhYmxlX2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmg9MzMzPXN0YXRpYyBpbmxpbmUgdm9pZCBuZWlnaF9jb25maXJtKHN0cnVjdCBuZWlnaGJvdXIgKm4pXFxuLS1cXG5pbmNsdWRlL25ldC9uZWlnaGJvdXIuaC0zNDMtXFxuaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmg6MzQ0OnZvaWQgbmVpZ2hfdGFibGVfaW5pdChpbnQgaW5kZXgsIHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsKTtcXG5pbmNsdWRlL25ldC9uZWlnaGJvdXIuaC0zNDUtaW50IG5laWdoX3RhYmxlX2NsZWFyKGludCBpbmRleCwgc3RydWN0IG5laWdoX3RhYmxlICp0YmwpO1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MTgyND1zdGF0aWMgc3RydWN0IG5laWdoX3RhYmxlIF9fcmN1ICpuZWlnaF90YWJsZXNbTkVJR0hfTlJfVEFCTEVTXSBfX3JlYWRfbW9zdGx5O1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTE4MjUtXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTgyNjp2b2lkIG5laWdoX3RhYmxlX2luaXQoaW50IGluZGV4LCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibClcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xODI3LXtcXG4tLVxcbm5ldC9pcHY0L2FycC5jPTE1MTQ9dm9pZCBfX2luaXQgYXJwX2luaXQodm9pZClcXG5uZXQvaXB2NC9hcnAuYy0xNTE1LXtcXG5uZXQvaXB2NC9hcnAuYzoxNTE2OlxcdG5laWdoX3RhYmxlX2luaXQoTkVJR0hfQVJQX1RBQkxFLCBcXHUwMDI2YXJwX3RibCk7XFxubmV0L2lwdjQvYXJwLmMtMTUxNy1cXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9MjAwNT1pbnQgX19pbml0IG5kaXNjX2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMjAxNC1cXHQgKi9cXG5uZXQvaXB2Ni9uZGlzYy5jOjIwMTU6XFx0bmVpZ2hfdGFibGVfaW5pdChORUlHSF9ORF9UQUJMRSwgXFx1MDAyNm5kX3RibCk7XFxubmV0L2lwdjYvbmRpc2MuYy0yMDE2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowNjoxNS43NjAzMTIzNTlaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjM2NDEwMzkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBLTVNBTiBOZWVkZWQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBwcmltYXJpbHkgZGVhbHMgd2l0aCBzeW5jaHJvbml6YXRpb24gYXJvdW5kIHRoZSBwcm94eSB0aW1lciB3aXRoaW4gdGhlIG5ldHdvcmsgbmVpZ2hib3IgdGFibGUuIFNwZWNpZmljYWxseSwgaXQncyBhZGRpbmcgYSBzcGlubG9jayAoYHByb3h5X3RpbWVyX2xvY2tgKSB0byB0aGUgYG5laWdoX3RhYmxlYCBzdHJ1Y3R1cmUgYW5kIGluaXRpYWxpemluZyBpdC4gVGhpcyBsb2NrIHNlZW1zIHRvIGFkZHJlc3MgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHRoZSBgbW9kX3RpbWVyYCBjYWxsIGluIGBwbmVpZ2hfZW5xdWV1ZWAgYW5kIHRoZSBgdGltZXJfZGVsZXRlX3N5bmNgIGNhbGwgaW4gYF9fbmVpZ2hfaWZkb3duYC5cblxuTXkgYW5hbHlzaXMgaW5kaWNhdGVzIHRoYXQgdGhlIHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgYXJlIHJlbGF0ZWQgdG8gZGVhZGxvY2tzLCBsb2NraW5nIGlzc3VlcyAod2hpY2ggTE9DS0RFUCB3b3VsZCBjYXRjaCksIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBvciByYWNlIGNvbmRpdGlvbnMgKHdoaWNoIEtBU0FOIHdvdWxkIGRldGVjdCkuIFRoZSBjb2RlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQWxsIG9mIHRoZSBrZXkgc3RydWN0dXJlcyBhcmUgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQuIFRoZSBuZXcgc3BpbmxvY2sgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdXNpbmcgYHNwaW5fbG9ja19pbml0YC4gVGhlIHBhdGNoIGRvZXNuJ3QgY3JlYXRlIGFueSBvcHBvcnR1bml0aWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkIG9yIGV4cG9zZWQuXG5cblRoZXJlZm9yZSwgc2luY2UgS0FTQU4gYW5kIExPQ0tERVAgYXJlIGZ1bGx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoZSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCwgdGhlcmUncyBubyBuZWVkIGZvciBLTVNBTi4gSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBiZWNhdXNlIHRoZSBwYXRjaCdzIHByaW1hcnkgaW1wYWN0IHJldm9sdmVzIGFyb3VuZCBzeW5jaHJvbml6YXRpb24gYW5kIHRpbWVyIG1hbmFnZW1lbnQsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIFdlJ3JlIGdvb2QgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MzUsIk91dHB1dFRva2VucyI6MjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjA2OjIyLjEyNDQyMDcxM1oiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGRlZGljYXRlZCBzcGlubG9jayAoYHByb3h5X3RpbWVyX2xvY2tgKSB0byBgc3RydWN0IG5laWdoX3RhYmxlYCBhbmQgdXNlcyBpdCB0byBzZXJpYWxpemUgcmVhcm1pbmcgb2YgYHRibC1cXHUwMDNlcHJveHlfdGltZXJgIHZpYSBgbW9kX3RpbWVyKClgIGluIGBwbmVpZ2hfZW5xdWV1ZSgpYCB3aXRoIHF1ZXVlIHB1cmdpbmcgYW5kIHN5bmNocm9ub3VzIHRpbWVyIGRlbGV0aW9uIGluIGBfX25laWdoX2lmZG93bigpYC4gVGhlIG5ldyBsb2NrIGlzIGluaXRpYWxpemVkIHdpdGggYHNwaW5fbG9ja19pbml0KClgIGluIGBuZWlnaF90YWJsZV9pbml0KClgLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgcGVydGFpbiB0byBjb25jdXJyZW5jeSBjb250cm9sIGFuZCB0aW1lciBsaWZlY3ljbGUgbWFuYWdlbWVudC4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaOKAlHN1Y2ggYXMgbG9ja2luZyBvcmRlciBpbnZlcnNpb25zLCBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnPigJRhcmUgaGFuZGxlZCBieSBMT0NLREVQIGFuZCBLQVNBTi4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkgaXMgYWxsb2NhdGVkLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgYXJlIHJlYWQgb3IgYnJhbmNoZWQgdXBvbiwgYW5kIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZGVkaWNhdGVkIHNwaW5sb2NrIChgcHJveHlfdGltZXJfbG9ja2ApIHRvIGBzdHJ1Y3QgbmVpZ2hfdGFibGVgIGFuZCB1c2VzIGl0IHRvIHNlcmlhbGl6ZSByZWFybWluZyBvZiBgdGJsLVxcdTAwM2Vwcm94eV90aW1lcmAgdmlhIGBtb2RfdGltZXIoKWAgaW4gYHBuZWlnaF9lbnF1ZXVlKClgIHdpdGggcXVldWUgcHVyZ2luZyBhbmQgc3luY2hyb25vdXMgdGltZXIgZGVsZXRpb24gaW4gYF9fbmVpZ2hfaWZkb3duKClgLiBUaGUgbmV3IGxvY2sgaXMgaW5pdGlhbGl6ZWQgd2l0aCBgc3Bpbl9sb2NrX2luaXQoKWAgaW4gYG5laWdoX3RhYmxlX2luaXQoKWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBwZXJ0YWluIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgYW5kIHRpbWVyIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNo4oCUc3VjaCBhcyBsb2NraW5nIG9yZGVyIGludmVyc2lvbnMsIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9uc+KAlGFyZSBoYW5kbGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBObyBuZXcgdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgcmVhZCBvciBicmFuY2hlZCB1cG9uLCBhbmQgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfjcm[1] Phase: Succeeded StartedAt: 2026-09-14 09:06:34 +0000 UTC FinishedAt: 2026-09-14 09:06:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjcm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-14 09:06:34 +0000 UTC FinishedAt: 2026-09-14 09:06:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjcm[2] Phase: Succeeded StartedAt: 2026-09-14 09:06:34 +0000 UTC FinishedAt: 2026-09-14 12:53:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-14 09:06:34 +0000 UTC FinishedAt: 2026-09-14 12:53:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-14 09:06:34 +0000 UTC FinishedAt: 2026-09-14 09:06:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-14 09:06:34 +0000 UTC FinishedAt: 2026-09-14 09:06:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowrfjcm/series-workflowrfjcm-convert-artifact-3343566642/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-14 09:06:44 +0000 UTC FinishedAt: 2026-09-14 09:24:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-14 09:06:44 +0000 UTC FinishedAt: 2026-09-14 09:24:26 +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:*b825e745-7d61-4b36-af75-8a4d9c1c35e1,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-workflowrfjcm/series-workflowrfjcm-convert-artifact-3343566642/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": "06e0a2f4-2f5d-4cf4-839c-05cf3a088312", "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-workflowrfjcm/series-workflowrfjcm-build-action-1522997424/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-14 09:06:44 +0000 UTC FinishedAt: 2026-09-14 09:24:16 +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:*b825e745-7d61-4b36-af75-8a4d9c1c35e1,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-workflowrfjcm/series-workflowrfjcm-convert-artifact-3343566642/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": "06e0a2f4-2f5d-4cf4-839c-05cf3a088312", "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-workflowrfjcm/series-workflowrfjcm-build-action-1522997424/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-14 09:24:26 +0000 UTC FinishedAt: 2026-09-14 09:24:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-14 09:24:26 +0000 UTC FinishedAt: 2026-09-14 09:24:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-14 09:24:26 +0000 UTC FinishedAt: 2026-09-14 09:24:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-14 09:24:26 +0000 UTC FinishedAt: 2026-09-14 09:24:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowrfjcm/series-workflowrfjcm-convert-artifact-2358938445/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-14 09:24:37 +0000 UTC FinishedAt: 2026-09-14 09:26:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-14 09:24:37 +0000 UTC FinishedAt: 2026-09-14 09:26:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*06e0a2f4-2f5d-4cf4-839c-05cf3a088312,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-workflowrfjcm/series-workflowrfjcm-build-action-1522997424/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-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-14 09:26:42 +0000 UTC FinishedAt: 2026-09-14 09:26:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-14 09:26:42 +0000 UTC FinishedAt: 2026-09-14 09:26:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-14 09:26:42 +0000 UTC FinishedAt: 2026-09-14 09:47:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-14 09:26:42 +0000 UTC FinishedAt: 2026-09-14 09:47:22 +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:*b825e745-7d61-4b36-af75-8a4d9c1c35e1,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-workflowrfjcm/series-workflowrfjcm-convert-artifact-2358938445/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": "53a90c2b-eba3-4898-8805-a3cc472224b9", "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-workflowrfjcm/series-workflowrfjcm-build-action-2511452457/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-14 09:26:42 +0000 UTC FinishedAt: 2026-09-14 09:47:12 +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:*b825e745-7d61-4b36-af75-8a4d9c1c35e1,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-workflowrfjcm/series-workflowrfjcm-convert-artifact-2358938445/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": "53a90c2b-eba3-4898-8805-a3cc472224b9", "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-workflowrfjcm/series-workflowrfjcm-build-action-2511452457/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-14 09:47:22 +0000 UTC FinishedAt: 2026-09-14 09:47:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-14 09:47:22 +0000 UTC FinishedAt: 2026-09-14 09:47:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-14 09:47:22 +0000 UTC FinishedAt: 2026-09-14 09:49:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-14 09:47:22 +0000 UTC FinishedAt: 2026-09-14 09:49:14 +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:*53a90c2b-eba3-4898-8805-a3cc472224b9,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-workflowrfjcm/series-workflowrfjcm-build-action-2511452457/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-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-14 09:49:24 +0000 UTC FinishedAt: 2026-09-14 12:53:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-14 09:49:24 +0000 UTC FinishedAt: 2026-09-14 12:53:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"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:*06e0a2f4-2f5d-4cf4-839c-05cf3a088312,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*53a90c2b-eba3-4898-8805-a3cc472224b9,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-workflowrfjcm/series-workflowrfjcm-build-action-1522997424/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-workflowrfjcm/series-workflowrfjcm-build-action-2511452457/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-14 09:49:24 +0000 UTC FinishedAt: 2026-09-14 09:49:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-14 09:49:24 +0000 UTC FinishedAt: 2026-09-14 09:49:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"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-workflowrfjcm/series-workflowrfjcm-convert-artifact-3079992114/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-14 09:49:24 +0000 UTC FinishedAt: 2026-09-14 09:49:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-14 09:49:24 +0000 UTC FinishedAt: 2026-09-14 09:49:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-14 09:49:24 +0000 UTC FinishedAt: 2026-09-14 09:49:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-14 09:49:34 +0000 UTC FinishedAt: 2026-09-14 12:53:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pneigh_enqueue","__neigh_ifdown","neigh_ifdown","neigh_carrier_down","neigh_proxy_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","INET","IPV6"],"series_id":"35bb18db-fd7a-49f4-ade7-2bcb060866e8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-14 09:49:34 +0000 UTC FinishedAt: 2026-09-14 12:53:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*06e0a2f4-2f5d-4cf4-839c-05cf3a088312,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*53a90c2b-eba3-4898-8805-a3cc472224b9,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-workflowrfjcm/series-workflowrfjcm-build-action-1522997424/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-workflowrfjcm/series-workflowrfjcm-build-action-2511452457/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-workflowrfjcm/series-workflowrfjcm-convert-artifact-3079992114/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,}