Name: series-workflownhljk Phase: Succeeded StartedAt: 2026-07-11 21:12:22 +0000 UTC FinishedAt: 2026-07-12 02:51:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhljk[0] Phase: Succeeded StartedAt: 2026-07-11 21:12:22 +0000 UTC FinishedAt: 2026-07-11 21:50:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhljk[0].run-triage Phase: Succeeded StartedAt: 2026-07-11 21:12:22 +0000 UTC FinishedAt: 2026-07-11 21:50:55 +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": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_RDMA", "RDS_TCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_RDMA", "RDS_TCP" ], "series_id": "b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__rds_put_mr_final", "__rds_rdma_map", "rds_rdma_free_op", "rds_atomic_free_op", "rds_cmsg_rdma_args", "rds_send_xmit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfUkRNQSYjMzQ7LAogICAgJiMzNDtSRFNfVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19yZHNfcHV0X21yX2ZpbmFsJiMzNDssCiAgICAmIzM0O19fcmRzX3JkbWFfbWFwJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX2ZyZWVfb3AmIzM0OywKICAgICYjMzQ7cmRzX2F0b21pY19mcmVlX29wJiMzNDssCiAgICAmIzM0O3Jkc19jbXNnX3JkbWFfYXJncyYjMzQ7LAogICAgJiMzNDtyZHNfc2VuZF94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc29ja2V0IHJlZmNvdW50IGxlYWsgaW4gUkRTIFJETUEgb3BlcmF0aW9ucyBieSBob2xkaW5nIGEgc29ja2V0IHJlZmVyZW5jZSBpbiBgX19yZHNfcmRtYV9tYXBgIGFuZCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCBhbmQgcmVsZWFzaW5nIGl0IGluIGBfX3Jkc19wdXRfbXJfZmluYWxgLiBJdCBhbHNvIG1vZGlmaWVzIGByZHNfcmRtYV9mcmVlX29wYCBhbmQgYHJkc19hdG9taWNfZnJlZV9vcGAgdG8gdXNlIG5vbi1zbGVlcGluZyBwYWdlIHVucGlubmluZyBmdW5jdGlvbnMgc2luY2UgdGhleSBjYW4gYmUgY2FsbGVkIGZyb20gdGFza2xldCBjb250ZXh0LiBGaW5hbGx5LCBpdCBmaXhlcyBhIG1lc3NhZ2UgcmVmY291bnQgbGVhayBpbiBgcmRzX3NlbmRfeG1pdGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgUkRTIGFuZCBSRE1BIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM5ZGY2YzEzMzNmYjFmYTA4ODQ4ODNkMjJhZWY2OWM0MzM1NGNmY2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAyMTo0ODo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcmRzL3JkbWEuYyBiL25ldC9yZHMvcmRtYS5jXG5pbmRleCA2MWZiNmU0NTI4MWJmMS4uZmUyMjE5NjhmM2ZlNzMgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3JkbWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9yZG1hLmNcbkBAIC0xMTcsNiAmIzQzOzExNyw3IEBAIHZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKVxuIFx0c3RydWN0IHJkc19tciAqbXIgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJkc19tciwgcl9rcmVmKTtcbiBcbiBcdHJkc19kZXN0cm95X21yKG1yKTtcbiYjNDM7XHRzb2NrX3B1dChyZHNfcnNfdG9fc2sobXItXHUwMDNlcl9zb2NrKSk7XG4gXHRrZnJlZShtcik7XG4gfVxuIFxuQEAgLTI0Myw3ICYjNDM7MjQ0LDExIEBAIHN0YXRpYyBpbnQgX19yZHNfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19nZXRfbXJfYXJncyAqYXJncyxcbiBcdGtyZWZfaW5pdChcdTAwMjZtci1cdTAwM2VyX2tyZWYpO1xuIFx0UkJfQ0xFQVJfTk9ERShcdTAwMjZtci1cdTAwM2VyX3JiX25vZGUpO1xuIFx0bXItXHUwMDNlcl90cmFucyA9IHJzLVx1MDAzZXJzX3RyYW5zcG9ydDtcbiYjNDM7XHQvKiBUaGUgTVIgY2FuIG91dGxpdmUgaXRzIHNvY2tldDogYSBzb2NrZXQgcmVmZXJlbmNlIGlzIGhlbGRcbiYjNDM7XHQgKiB1bnRpbCB0aGUgZmluYWwga3JlZiBpcyBkcm9wcGVkIGluIF9fcmRzX3B1dF9tcl9maW5hbCgpLlxuJiM0MztcdCAqL1xuIFx0bXItXHUwMDNlcl9zb2NrID0gcnM7XG4mIzQzO1x0c29ja19ob2xkKHJkc19yc190b19zayhycykpO1xuIFxuIFx0aWYgKGFyZ3MtXHUwMDNlZmxhZ3MgXHUwMDI2IFJEU19SRE1BX1VTRV9PTkNFKVxuIFx0XHRtci1cdTAwM2VyX3VzZV9vbmNlID0gMTtcbkBAIC00OTUsOSAmIzQzOzUwMCwxMyBAQCB2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxuIFxuIFx0XHRcdC8qIE1hcmsgcGFnZSBkaXJ0eSBpZiBpdCB3YXMgcG9zc2libHkgbW9kaWZpZWQsIHdoaWNoXG4gXHRcdFx0ICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZVxuLVx0XHRcdCAqIHRvIGxvY2FsIG1lbW9yeVxuJiM0MztcdFx0XHQgKiB0byBsb2NhbCBtZW1vcnkuICBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgSUJcbiYjNDM7XHRcdFx0ICogc2VuZCBjb21wbGV0aW9uIHRhc2tsZXQsIHNvIHRoZSBzbGVlcGluZyBfbG9ja1xuJiM0MztcdFx0XHQgKiB2YXJpYW50IG11c3Qgbm90IGJlIHVzZWQgaGVyZS5cbiBcdFx0XHQgKi9cbi1cdFx0XHR1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soXHUwMDI2cGFnZSwgMSwgIXJvLVx1MDAzZW9wX3dyaXRlKTtcbiYjNDM7XHRcdFx0aWYgKCFyby1cdTAwM2VvcF93cml0ZSlcbiYjNDM7XHRcdFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbiYjNDM7XHRcdFx0dW5waW5fdXNlcl9wYWdlKHBhZ2UpO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtNTEzLDggJiM0Mzs1MjIsMTIgQEAgdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pXG4gXG4gXHQvKiBNYXJrIHBhZ2UgZGlydHkgaWYgaXQgd2FzIHBvc3NpYmx5IG1vZGlmaWVkLCB3aGljaFxuIFx0ICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZVxuLVx0ICogdG8gbG9jYWwgbWVtb3J5ICovXG4tXHR1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soXHUwMDI2cGFnZSwgMSwgdHJ1ZSk7XG4mIzQzO1x0ICogdG8gbG9jYWwgbWVtb3J5LiAgVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIElCIHNlbmRcbiYjNDM7XHQgKiBjb21wbGV0aW9uIHRhc2tsZXQsIHNvIHRoZSBzbGVlcGluZyBfbG9jayB2YXJpYW50IG11c3RcbiYjNDM7XHQgKiBub3QgYmUgdXNlZCBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuJiM0MztcdHVucGluX3VzZXJfcGFnZShwYWdlKTtcbiBcbiBcdGtmcmVlKGFvLVx1MDAzZW9wX25vdGlmaWVyKTtcbiBcdGFvLVx1MDAzZW9wX25vdGlmaWVyID0gTlVMTDtcbkBAIC03NDcsNiAmIzQzOzc2MCwxMCBAQCBpbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG4gXHRcdFx0fVxuIFx0XHRcdHJkc2RlYnVnKFwmIzM0O05lZWQgb2RwOyBsb2NhbF9vZHBfbXIgJXAgdHJhbnNfcHJpdmF0ZSAlcFxcblwmIzM0OyxcbiBcdFx0XHRcdCBsb2NhbF9vZHBfbXIsIGxvY2FsX29kcF9tci1cdTAwM2VyX3RyYW5zX3ByaXZhdGUpO1xuJiM0MztcdFx0XHQvKiBGcm9tIGhlcmUgb24gdGhlIE1SIGlzIHRvcm4gZG93biB0aHJvdWdoXG4mIzQzO1x0XHRcdCAqIF9fcmRzX3B1dF9tcl9maW5hbCgpLCB3aGljaCBkcm9wcyB0aGlzIHJlZmVyZW5jZS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHNvY2tfaG9sZChyZHNfcnNfdG9fc2socnMpKTtcbiBcdFx0XHRvcC1cdTAwM2VvcF9vZHBfbXIgPSBsb2NhbF9vZHBfbXI7XG4gXHRcdFx0b3AtXHUwMDNlb3Bfb2RwX2FkZHIgPSBpb3YtXHUwMDNlYWRkcjtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmNcbmluZGV4IDY4YmUxYmYwZTBhZGY5Li5hYjNhODM2NmM1M2JkOSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvc2VuZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3NlbmQuY1xuQEAgLTMzOSw5ICYjNDM7MzM5LDE3IEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFx0XHQgICAgKHJtLVx1MDAzZXJkbWEub3BfYWN0aXZlIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICB0ZXN0X2JpdChSRFNfTVNHX1JFVFJBTlNNSVRURUQsIFx1MDAyNnJtLVx1MDAzZW1fZmxhZ3MpKSkge1xuIFx0XHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Y3AtXHUwMDNlY3BfbG9jaywgZmxhZ3MpO1xuLVx0XHRcdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sIFx1MDAyNnJtLVx1MDAzZW1fZmxhZ3MpKVxuJiM0MztcdFx0XHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX01TR19PTl9DT05OLCBcdTAwMjZybS1cdTAwM2VtX2ZsYWdzKSkge1xuJiM0MztcdFx0XHRcdFx0Lyogb3VyIHJlZiBpcyBwdXQgYWZ0ZXIgdGhlIGJhdGNoICovXG4gXHRcdFx0XHRcdGxpc3RfbW92ZShcdTAwMjZybS1cdTAwM2VtX2Nvbm5faXRlbSwgXHUwMDI2dG9fYmVfZHJvcHBlZCk7XG4tXHRcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmNwLVx1MDAzZWNwX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3AtXHUwMDNlY3BfbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0XHQvKiBhbHJlYWR5IG9mZiB0aGUgY29ubiBsaXN0OyBkcm9wXG4mIzQzO1x0XHRcdFx0XHQgKiB0aGUgcmVmIHRha2VuIGFib3ZlIG91cnNlbHZlc1xuJiM0MztcdFx0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmNwLVx1MDAzZWNwX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdFx0XHRcdHJkc19tZXNzYWdlX3B1dChybSk7XG4mIzQzO1x0XHRcdFx0fVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfUkRNQSYjMzQ7LAogICAgJiMzNDtSRFNfVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19yZHNfcHV0X21yX2ZpbmFsJiMzNDssCiAgICAmIzM0O19fcmRzX3JkbWFfbWFwJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX2ZyZWVfb3AmIzM0OywKICAgICYjMzQ7cmRzX2F0b21pY19mcmVlX29wJiMzNDssCiAgICAmIzM0O3Jkc19jbXNnX3JkbWFfYXJncyYjMzQ7LAogICAgJiMzNDtyZHNfc2VuZF94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc29ja2V0IHJlZmNvdW50IGxlYWsgaW4gUkRTIFJETUEgb3BlcmF0aW9ucyBieSBob2xkaW5nIGEgc29ja2V0IHJlZmVyZW5jZSBpbiBgX19yZHNfcmRtYV9tYXBgIGFuZCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCBhbmQgcmVsZWFzaW5nIGl0IGluIGBfX3Jkc19wdXRfbXJfZmluYWxgLiBJdCBhbHNvIG1vZGlmaWVzIGByZHNfcmRtYV9mcmVlX29wYCBhbmQgYHJkc19hdG9taWNfZnJlZV9vcGAgdG8gdXNlIG5vbi1zbGVlcGluZyBwYWdlIHVucGlubmluZyBmdW5jdGlvbnMgc2luY2UgdGhleSBjYW4gYmUgY2FsbGVkIGZyb20gdGFza2xldCBjb250ZXh0LiBGaW5hbGx5LCBpdCBmaXhlcyBhIG1lc3NhZ2UgcmVmY291bnQgbGVhayBpbiBgcmRzX3NlbmRfeG1pdGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgUkRTIGFuZCBSRE1BIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzlkZjZjMTMzM2ZiMWZhMDg4NDg4M2QyMmFlZjY5YzQzMzU0Y2ZjYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDExIDIxOjQ4OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hLmMgYi9uZXQvcmRzL3JkbWEuYwppbmRleCA2MWZiNmU0NTI4MWJmMS4uZmUyMjE5NjhmM2ZlNzMgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvcmRtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvcmRtYS5jCkBAIC0xMTcsNiAmIzQzOzExNyw3IEBAIHZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKQogCXN0cnVjdCByZHNfbXIgKm1yID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByZHNfbXIsIHJfa3JlZik7CiAKIAlyZHNfZGVzdHJveV9tcihtcik7CiYjNDM7CXNvY2tfcHV0KHJkc19yc190b19zayhtci0mZ3Q7cl9zb2NrKSk7CiAJa2ZyZWUobXIpOwogfQogCkBAIC0yNDMsNyAmIzQzOzI0NCwxMSBAQCBzdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsCiAJa3JlZl9pbml0KCZhbXA7bXItJmd0O3Jfa3JlZik7CiAJUkJfQ0xFQVJfTk9ERSgmYW1wO21yLSZndDtyX3JiX25vZGUpOwogCW1yLSZndDtyX3RyYW5zID0gcnMtJmd0O3JzX3RyYW5zcG9ydDsKJiM0MzsJLyogVGhlIE1SIGNhbiBvdXRsaXZlIGl0cyBzb2NrZXQ6IGEgc29ja2V0IHJlZmVyZW5jZSBpcyBoZWxkCiYjNDM7CSAqIHVudGlsIHRoZSBmaW5hbCBrcmVmIGlzIGRyb3BwZWQgaW4gX19yZHNfcHV0X21yX2ZpbmFsKCkuCiYjNDM7CSAqLwogCW1yLSZndDtyX3NvY2sgPSByczsKJiM0MzsJc29ja19ob2xkKHJkc19yc190b19zayhycykpOwogCiAJaWYgKGFyZ3MtJmd0O2ZsYWdzICZhbXA7IFJEU19SRE1BX1VTRV9PTkNFKQogCQltci0mZ3Q7cl91c2Vfb25jZSA9IDE7CkBAIC00OTUsOSAmIzQzOzUwMCwxMyBAQCB2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKQogCiAJCQkvKiBNYXJrIHBhZ2UgZGlydHkgaWYgaXQgd2FzIHBvc3NpYmx5IG1vZGlmaWVkLCB3aGljaAogCQkJICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZQotCQkJICogdG8gbG9jYWwgbWVtb3J5CiYjNDM7CQkJICogdG8gbG9jYWwgbWVtb3J5LiAgVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIElCCiYjNDM7CQkJICogc2VuZCBjb21wbGV0aW9uIHRhc2tsZXQsIHNvIHRoZSBzbGVlcGluZyBfbG9jawomIzQzOwkJCSAqIHZhcmlhbnQgbXVzdCBub3QgYmUgdXNlZCBoZXJlLgogCQkJICovCi0JCQl1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soJmFtcDtwYWdlLCAxLCAhcm8tJmd0O29wX3dyaXRlKTsKJiM0MzsJCQlpZiAoIXJvLSZndDtvcF93cml0ZSkKJiM0MzsJCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CiYjNDM7CQkJdW5waW5fdXNlcl9wYWdlKHBhZ2UpOwogCQl9CiAJfQogCkBAIC01MTMsOCAmIzQzOzUyMiwxMiBAQCB2b2lkIHJkc19hdG9taWNfZnJlZV9vcChzdHJ1Y3Qgcm1fYXRvbWljX29wICphbykKIAogCS8qIE1hcmsgcGFnZSBkaXJ0eSBpZiBpdCB3YXMgcG9zc2libHkgbW9kaWZpZWQsIHdoaWNoCiAJICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZQotCSAqIHRvIGxvY2FsIG1lbW9yeSAqLwotCXVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jaygmYW1wO3BhZ2UsIDEsIHRydWUpOwomIzQzOwkgKiB0byBsb2NhbCBtZW1vcnkuICBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgSUIgc2VuZAomIzQzOwkgKiBjb21wbGV0aW9uIHRhc2tsZXQsIHNvIHRoZSBzbGVlcGluZyBfbG9jayB2YXJpYW50IG11c3QKJiM0MzsJICogbm90IGJlIHVzZWQgaGVyZS4KJiM0MzsJICovCiYjNDM7CXNldF9wYWdlX2RpcnR5KHBhZ2UpOwomIzQzOwl1bnBpbl91c2VyX3BhZ2UocGFnZSk7CiAKIAlrZnJlZShhby0mZ3Q7b3Bfbm90aWZpZXIpOwogCWFvLSZndDtvcF9ub3RpZmllciA9IE5VTEw7CkBAIC03NDcsNiAmIzQzOzc2MCwxMCBAQCBpbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCiAJCQl9CiAJCQlyZHNkZWJ1ZygmIzM0O05lZWQgb2RwOyBsb2NhbF9vZHBfbXIgJXAgdHJhbnNfcHJpdmF0ZSAlcFxuJiMzNDssCiAJCQkJIGxvY2FsX29kcF9tciwgbG9jYWxfb2RwX21yLSZndDtyX3RyYW5zX3ByaXZhdGUpOwomIzQzOwkJCS8qIEZyb20gaGVyZSBvbiB0aGUgTVIgaXMgdG9ybiBkb3duIHRocm91Z2gKJiM0MzsJCQkgKiBfX3Jkc19wdXRfbXJfZmluYWwoKSwgd2hpY2ggZHJvcHMgdGhpcyByZWZlcmVuY2UuCiYjNDM7CQkJICovCiYjNDM7CQkJc29ja19ob2xkKHJkc19yc190b19zayhycykpOwogCQkJb3AtJmd0O29wX29kcF9tciA9IGxvY2FsX29kcF9tcjsKIAkJCW9wLSZndDtvcF9vZHBfYWRkciA9IGlvdi0mZ3Q7YWRkcjsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuYwppbmRleCA2OGJlMWJmMGUwYWRmOS4uYWIzYTgzNjZjNTNiZDkgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvc2VuZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvc2VuZC5jCkBAIC0zMzksOSAmIzQzOzMzOSwxNyBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJCQkgICAgKHJtLSZndDtyZG1hLm9wX2FjdGl2ZSAmYW1wOyZhbXA7CiAJCQkgICAgdGVzdF9iaXQoUkRTX01TR19SRVRSQU5TTUlUVEVELCAmYW1wO3JtLSZndDttX2ZsYWdzKSkpIHsKIAkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2NwLSZndDtjcF9sb2NrLCBmbGFncyk7Ci0JCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sICZhbXA7cm0tJmd0O21fZmxhZ3MpKQomIzQzOwkJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19NU0dfT05fQ09OTiwgJmFtcDtybS0mZ3Q7bV9mbGFncykpIHsKJiM0MzsJCQkJCS8qIG91ciByZWYgaXMgcHV0IGFmdGVyIHRoZSBiYXRjaCAqLwogCQkJCQlsaXN0X21vdmUoJmFtcDtybS0mZ3Q7bV9jb25uX2l0ZW0sICZhbXA7dG9fYmVfZHJvcHBlZCk7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2NwLSZndDtjcF9sb2NrLCBmbGFncyk7CiYjNDM7CQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Y3AtJmd0O2NwX2xvY2ssIGZsYWdzKTsKJiM0MzsJCQkJfSBlbHNlIHsKJiM0MzsJCQkJCS8qIGFscmVhZHkgb2ZmIHRoZSBjb25uIGxpc3Q7IGRyb3AKJiM0MzsJCQkJCSAqIHRoZSByZWYgdGFrZW4gYWJvdmUgb3Vyc2VsdmVzCiYjNDM7CQkJCQkgKi8KJiM0MzsJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjcC0mZ3Q7Y3BfbG9jaywgZmxhZ3MpOwomIzQzOwkJCQkJcmRzX21lc3NhZ2VfcHV0KHJtKTsKJiM0MzsJCQkJfQogCQkJCWNvbnRpbnVlOwogCQkJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUkRTIFBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBwb2tpbmcgYXJvdW5kIGluIHRoZSBSRFMgc3Vic3lzdGVtIOKAkyBzcGVjaWZpY2FsbHkgYG5ldC9yZHMvcmRtYS5jYCBhbmQgYG5ldC9yZHMvc2VuZC5jYC4gTXkgaW5pdGlhbCByZWFkIHN1Z2dlc3RzIHNvbWUgaW1wb3J0YW50IHJlZmFjdG9yaW5nIGFyb3VuZCBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgcmVsYXRlZCB0byBSRE1BIG9wZXJhdGlvbnMuIFRoZXkmIzM5O3ZlIGFkZGVkIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcgdXNpbmcgYHNvY2tfaG9sZGAgYW5kIGBzb2NrX3B1dGAgd2l0aGluIGByZHNfbXJgIGFuZCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCwgd2hpY2ggaXMgc21hcnQuIEVuc3VyZXMgdGhlIHNvY2tldCBvdXRsaXZlcyB0aGUgbWVtb3J5IHJlZ2lvbiwgd2hpY2ggaXMgYSBjb21tb24gc291cmNlIG9mIHN1YnRsZSBtZW1vcnkgY29ycnVwdGlvbiBidWdzLiBUaGUgb3RoZXIgY2hhbmdlIHdpdGggcmVwbGFjaW5nIGB1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2tgIHdpdGggYHNldF9wYWdlX2RpcnR5YCBhbmQgYHVucGluX3VzZXJfcGFnZWAgaW4gYHJkc19yZG1hX2ZyZWVfb3BgIGFuZCBgcmRzX2F0b21pY19mcmVlX29wYCBiZWNhdXNlIGl0JiMzOTtzIGluIGEgdGFza2xldCBjb250ZXh0IGlzIGEgZ29vZCBtb3ZlIHRvbyDigJMgYXZvaWRzIHBvdGVudGlhbCBsb2NraW5nIGlzc3Vlcy4gRmluYWxseSwgZml4aW5nIHRoYXQgcmVmY291bnQgbGVhayBpbiBgcmRzX3NlbmRfeG1pdGAgd2hlbiBtZXNzYWdlcyBhcmUgYWxyZWFkeSBvZmYgdGhlIGNvbm5lY3Rpb24gbGlzdD8gRGVmaW5pdGVseSBhIHdpbiEKCkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gUkRTJiMzOTtzIGJlaGF2aW91ci4gSXQgYWx0ZXJzIGhvdyBpdCBoYW5kbGVzIHJlc291cmNlcywgZXNwZWNpYWxseSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc29ja2V0IGxpZmVzcGFuLCBpbiBSRE1BIG9wZXJhdGlvbnMuIEkgd291bGQgY29uc2lkZXIgdGhpcyBhIGhpZ2gtcHJpb3JpdHkgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IGl0IHRvdWNoZXMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG5ldHdvcmsgaW50ZXJhY3Rpb25zOyB0aG9zZSBhcmUgYWx3YXlzIHJpc2t5IGFyZWFzLgoKTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCBob3cgdG8gYnVpbGQgdGhpcyB3aXRoIGZ1enppbmcgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRpbWUgdG8gc2VhcmNoIHRoZSBrZXJuZWwgY29uZmlnIGZvciBgQ09ORklHX1JEU2Agb3IgYW55dGhpbmcgcmVsYXRlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSRFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9LY29uZmlnLTItXG5uZXQvcmRzL0tjb25maWc6Mzpjb25maWcgUkRTXG5uZXQvcmRzL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O1RoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXCYjMzQ7XG4tLVxubmV0L3Jkcy9LY29uZmlnLTktXG5uZXQvcmRzL0tjb25maWc6MTA6Y29uZmlnIFJEU19SRE1BXG5uZXQvcmRzL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtSRFMgb3ZlciBJbmZpbmliYW5kXCYjMzQ7XG4tLVxubmV0L3Jkcy9LY29uZmlnLTE2LVxubmV0L3Jkcy9LY29uZmlnOjE3OmNvbmZpZyBSRFNfVENQXG5uZXQvcmRzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtSRFMgb3ZlciBUQ1BcJiMzNDtcbi0tXG5uZXQvcmRzL0tjb25maWctMjQtXG5uZXQvcmRzL0tjb25maWc6MjU6Y29uZmlnIFJEU19ERUJVR1xubmV0L3Jkcy9LY29uZmlnLTI2LVx0Ym9vbCBcJiMzNDtSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc1MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkV4YW1pbmluZyB0aGUgUkRTL1JETUEgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBgUkRTYCBhcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIGVsZW1lbnQgaGVyZS4gSSBpbW1lZGlhdGVseSBoYXZlIGEgaHVuY2ggdGhhdCBgUkRTX1JETUFgIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCDigJMgcHJvYmFibHkgKmNydWNpYWwqIOKAkyBmb3IgdGhlIHByb3BlciBoYW5kbGluZyBvZiBgbmV0L3Jkcy9yZG1hLmNgLiBJdCYjMzk7cyBhIGNsYXNzaWMgc2NlbmFyaW87IEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGF0IFJETUEgaW1wbGVtZW50YXRpb24gaXMgY29tcGlsZWQgaW50byB0aGUgbW9kdWxlIGNvbmRpdGlvbmFsbHkuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYG5ldC9yZHMvTWFrZWZpbGVgIGFuZCBzZWUgaWYgYHJkbWEuY2AgaGFzIGFueSBidWlsZCBkaXJlY3RpdmVzIGFyb3VuZCBpdC4gVGhhdCYjMzk7bGwgdGVsbCBtZSBpZiBgUkRTX1JETUFgIGFjdHVhbGx5IGNvbnRyb2xzIHdoZXRoZXIgdGhhdCBSRE1BIGZ1bmN0aW9uYWxpdHkgaXMgaW5jbHVkZWQuIEkgbmVlZCB0aGF0IGJ1aWxkIHByb2Nlc3MgaW5mb3JtYXRpb24gYXMgcGFydCBvZiBteSBvdmVydmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZG1hXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9NYWtlZmlsZT0zPXJkcy15IDo9XHRhZl9yZHMubyBiaW5kLm8gY29uZy5vIGNvbm5lY3Rpb24ubyBpbmZvLm8gbWVzc2FnZS5vICAgXFxcbm5ldC9yZHMvTWFrZWZpbGUtNC1cdFx0XHRyZWN2Lm8gc2VuZC5vIHN0YXRzLm8gc3lzY3RsLm8gdGhyZWFkcy5vIHRyYW5zcG9ydC5vIFxcXG5uZXQvcmRzL01ha2VmaWxlOjU6XHRcdFx0bG9vcC5vIHBhZ2UubyByZG1hLm9cbm5ldC9yZHMvTWFrZWZpbGUtNi1cbm5ldC9yZHMvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfUkRTX1JETUEpICYjNDM7PSByZHNfcmRtYS5vXG5uZXQvcmRzL01ha2VmaWxlLTgtcmRzX3JkbWEteSA6PVx0cmRtYV90cmFuc3BvcnQubyBcXFxubmV0L3Jkcy9NYWtlZmlsZS05LVx0XHRcdGliLm8gaWJfY20ubyBpYl9yZWN2Lm8gaWJfcmluZy5vIGliX3NlbmQubyBpYl9zdGF0cy5vIFxcXG5uZXQvcmRzL01ha2VmaWxlOjEwOlx0XHRcdGliX3N5c2N0bC5vIGliX3JkbWEubyBpYl9mcm1yLm9cbm5ldC9yZHMvTWFrZWZpbGUtMTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI0NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUkRTL1JETUEgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMga2VybmVsIG1vZHVsZSBzdHVmZi4gSXQgc2VlbXMgYHJkbWEub2AgaXMgYmFrZWQgaW4gd2l0aCBgcmRzLXlgLCBhbmQgdGhlcmVmb3JlIGlzIGJ1aWx0IHdoZW4gYENPTkZJR19SRFNgIGlzIGVuYWJsZWQuIFNpbWlsYXJseSwgYHJkc19yZG1hLm9gIGdldHMgY29tcGlsZWQgb25seSB3aGVuIGBDT05GSUdfUkRTX1JETUFgIGlzIHNldC4gVGhlIGZpbGUgdGhhdCYjMzk7cyBiZWVuIG1vZGlmaWVkLCBgbmV0L3Jkcy9yZG1hLmNgLCByZWxhdGVzIGRpcmVjdGx5IHRvIGByZG1hLm9gLCBzbyBpbnR1aXRpdmVseSwgYENPTkZJR19SRFNgIHNob3VsZCBiZSBlbm91Z2ggdG8gaW5jb3Jwb3JhdGUgdGhvc2UgY2hhbmdlcy4gQnV0IHdhaXQgYSBzZWMuLi4gYG5ldC9yZHMvcmRtYS5jYCAqaGFuZGxlcyogUkRNQSBvcGVyYXRpb25zIGZvciBSRFMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYFJEU19SRE1BYCBpc24mIzM5O3QgcmVxdWlyZWQgdG8gYWN0dWFsbHkgKnVzZSogdGhlIFJETUEgYml0cyB3aXRoaW4gdGhhdCBmaWxlLCBzbyBsZXQgbWUgZGVsdmUgZGVlcGVyLgoKTGV0JiMzOTtzIHNlZSwgdGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnM6IGBfX3Jkc19wdXRfbXJfZmluYWxgLCBgX19yZHNfcmRtYV9tYXBgLCBgcmRzX3JkbWFfZnJlZV9vcGAsIGByZHNfYXRvbWljX2ZyZWVfb3BgLCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCwgYW5kIGByZHNfc2VuZF94bWl0YC4gSGFuZyBvbi4uLiBgcmRzX3NlbmRfeG1pdGAgaXMgYWN0dWFsbHkgaW4gYG5ldC9yZHMvc2VuZC5jYCwgd2hpY2ggaXMgYWxzbyBpbmNsdWRlZCBpbiB0aGUgYHJkcy15YCBtb2R1bGUuCgpBbHJpZ2h0LCB0aW1lIHRvIGZvY3VzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHRoZSBrZXkgb25lcyB0aGF0IGRlbWFuZCBmdXJ0aGVyIHNjcnV0aW55LgoKU28sIGhlcmUmIzM5O3MgbXkgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMsIGFnYWluOgotIGBfX3Jkc19wdXRfbXJfZmluYWxgCi0gYF9fcmRzX3JkbWFfbWFwYAotIGByZHNfcmRtYV9mcmVlX29wYAotIGByZHNfYXRvbWljX2ZyZWVfb3BgCi0gYHJkc19jbXNnX3JkbWFfYXJnc2AKLSBgcmRzX3NlbmRfeG1pdGAKCmByZHNfc2VuZF94bWl0YCBpcyBhbG1vc3QgY2VydGFpbmx5IGEgaG90IHBhdGgg4oCTIHRoYXQmIzM5O3MgdGhlIG1lc3NhZ2UgdHJhbnNtaXNzaW9uIGZ1bmN0aW9uLCBzbyB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSBjYW5kaWRhdGUuIGBfX3Jkc19yZG1hX21hcGAgYW5kIGByZHNfY21zZ19yZG1hX2FyZ3NgIGxvb2sgcHJvbWlzaW5nIHRvbywgdGhleSBhcmUgcHJvYmFibHkgaW52b2x2ZWQgaW4gc2V0dGluZyB1cCB0aGUgUkRNQSBtYXBwaW5ncy4gUGx1cywgYHJkc19yZG1hX2ZyZWVfb3BgIGFuZCBgcmRzX2F0b21pY19mcmVlX29wYCBhcmUgdmVyeSBsaWtlbHkgaW52b2x2ZWQgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIHRvIHRoZSBSRE1BIHRyYW5zZmVycywgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZS4KCkkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZG91YmxlLWNoZWNraW5nIHRoZSBjb2RlIGluIGByZHNfY21zZ19yZG1hX2FyZ3NgIGFuZCBgX19yZHNfcmRtYV9tYXBgIHRvIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmRzX2Ntc2dfcmRtYV9hcmdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9yZG1hLmM9NTY2PWludCByZHNfcmRtYV9leHRyYV9zaXplKHN0cnVjdCByZHNfcmRtYV9hcmdzICphcmdzLFxuLS1cbm5ldC9yZHMvcmRtYS5jLTYxNy0gKi9cbm5ldC9yZHMvcmRtYS5jOjYxODppbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG5uZXQvcmRzL3JkbWEuYy02MTktXHRcdCAgICAgICBzdHJ1Y3QgY21zZ2hkciAqY21zZyxcbi0tXG5uZXQvcmRzL3Jkcy5oPTk2Nj1pbnQgcmRzX2Ntc2dfcmRtYV9kZXN0KHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG5uZXQvcmRzL3Jkcy5oLTk2Ny1cdFx0XHQgIHN0cnVjdCBjbXNnaGRyICpjbXNnKTtcbm5ldC9yZHMvcmRzLmg6OTY4OmludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbm5ldC9yZHMvcmRzLmgtOTY5LVx0XHRcdCAgc3RydWN0IGNtc2doZHIgKmNtc2csXG4tLVxubmV0L3Jkcy9zZW5kLmM9MTA1Mz1zdGF0aWMgaW50IHJkc19jbXNnX3NlbmQoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbi0tXG5uZXQvcmRzL3NlbmQuYy0xMDczLVx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG5uZXQvcmRzL3NlbmQuYzoxMDc0Olx0XHRcdHJldCA9IHJkc19jbXNnX3JkbWFfYXJncyhycywgcm0sIGNtc2csIFx1MDAyNnZjdC1cdTAwM2V2ZWNbaW5kXSk7XG5uZXQvcmRzL3NlbmQuYy0xMDc1LVx0XHRcdGluZCYjNDM7JiM0Mzs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYwMwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IEEgQ29udHJvbCBNZXNzYWdlIEJvbmFuemEhKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IFJETUEgYW5kIG1lc3NhZ2UgaGFuZGxpbmcuIEV4Y2VsbGVudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHJkc19jbXNnX3JkbWFfYXJnc2AgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEl0JiMzOTtzIHRyaWdnZXJlZCBkdXJpbmcgc2VuZC1zaWRlIGNvbnRyb2wgbWVzc2FnZSBwYXJzaW5nIOKAkyB3aGljaCBzY3JlYW1zIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHBvaW50cyBkdWUgdG8gdGhlIGNvbXBsZXhpdHkgYW5kIHZhcmlhYmlsaXR5IG9mIHVzZXItc3VwcGxpZWQgZGF0YS4gVGhpcyBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgZnVuY3Rpb24gdGhhdCBsb3ZlcyB0byByZXZlYWwgc3VidGxlIGZsYXdzIHdoZW4gZmVkIG1hbGZvcm1lZCBpbnB1dC4gVGhpcyBpcyB3aGVyZSBJIHdvdWxkIHN0YXJ0IG15IGZ1enppbmcgY2FtcGFpZ24uCgpOb3csIGxldCYjMzk7cyBkaWcgYSBiaXQgZGVlcGVyLiBJIHNlZSBgX19yZHNfcmRtYV9tYXBgIGdldHMgY2FsbGVkIGZyb20gYHJkc19nZXRfbXJgLiBUaGlzIGlzIGludGVyZXN0aW5nLiBgcmRzX2dldF9tcmAgc291bmRzIGxpa2UgaXQgaGFuZGxlcyBtZW1vcnkgcmVnaW9ucywgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgUkRNQSBzZXR1cC4gVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93IGlzIHdoZXJlIGByZHNfZ2V0X21yYCBpcyBjYWxsZWQgZnJvbS4gSXMgdGhpcyBhbiBpb2N0bCBjYWxsLCBhIHNldHNvY2tvcHQsIG9yIHBlcmhhcHMgc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEtub3dpbmcgdGhpcyBjYWxsaW5nIGNvbnRleHQgd2lsbCBiZSB2aXRhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXR0YWNrIHN1cmZhY2UgYW5kIGhvdyB0byBleHBsb2l0IHBvdGVudGlhbCBmbGF3cy4gSXQgd2lsbCBndWlkZSBtZSBvbiB3aGVyZSB0byBwbGFjZSB0aGUgZnV6emluZyBoYXJuZXNzLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHRoaW5nIHRvIGludmVzdGlnYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3Jkc19yZG1hX21hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvcmRtYS5jPTE1NT1zdGF0aWMgaW50IHJkc19waW5fcGFnZXModW5zaWduZWQgbG9uZyB1c2VyX2FkZHIsIHVuc2lnbmVkIGludCBucl9wYWdlcyxcbi0tXG5uZXQvcmRzL3JkbWEuYy0xNzItXG5uZXQvcmRzL3JkbWEuYzoxNzM6c3RhdGljIGludCBfX3Jkc19yZG1hX21hcChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzICphcmdzLFxubmV0L3Jkcy9yZG1hLmMtMTc0LVx0XHRcdCAgdTY0ICpjb29raWVfcmV0LCBzdHJ1Y3QgcmRzX21yICoqbXJfcmV0LFxuLS1cbm5ldC9yZHMvcmRtYS5jPTM2MD1pbnQgcmRzX2dldF9tcihzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9yZHMvcmRtYS5jLTM2OS1cbm5ldC9yZHMvcmRtYS5jOjM3MDpcdHJldHVybiBfX3Jkc19yZG1hX21hcChycywgXHUwMDI2YXJncywgTlVMTCwgTlVMTCwgTlVMTCk7XG5uZXQvcmRzL3JkbWEuYy0zNzEtfVxuLS1cbm5ldC9yZHMvcmRtYS5jPTM3Mz1pbnQgcmRzX2dldF9tcl9mb3JfZGVzdChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9yZHMvcmRtYS5jLTM5My1cbm5ldC9yZHMvcmRtYS5jOjM5NDpcdHJldHVybiBfX3Jkc19yZG1hX21hcChycywgXHUwMDI2bmV3X2FyZ3MsIE5VTEwsIE5VTEwsIE5VTEwpO1xubmV0L3Jkcy9yZG1hLmMtMzk1LX1cbi0tXG5uZXQvcmRzL3JkbWEuYz04NjQ9aW50IHJkc19jbXNnX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG4tLVxubmV0L3Jkcy9yZG1hLmMtODcwLVxubmV0L3Jkcy9yZG1hLmM6ODcxOlx0cmV0dXJuIF9fcmRzX3JkbWFfbWFwKHJzLCBDTVNHX0RBVEEoY21zZyksIFx1MDAyNnJtLVx1MDAzZW1fcmRtYV9jb29raWUsXG5uZXQvcmRzL3JkbWEuYy04NzItXHRcdFx0ICAgICAgXHUwMDI2cm0tXHUwMDNlcmRtYS5vcF9yZG1hX21yLCBybS1cdTAwM2VtX2Nvbm5fcGF0aCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NzMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkZvY3VzaW5nIG9uIFJETUEgTWFwcGluZyBhbmQgRnJlZSBPcGVyYXRpb25zKioKCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBfX3Jkc19yZG1hX21hcGAgaXMgdGhlIGtleSBmdW5jdGlvbiB0byBkaXNzZWN0IGhlcmUuIEkgc2VlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGByZHNfZ2V0X21yYCwgYHJkc19nZXRfbXJfZm9yX2Rlc3RgLCBhbmQgYHJkc19jbXNnX3JkbWFfbWFwYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLCB0aGF0IG1lYW5zIHRoZXNlIGFyZSBwb3RlbnRpYWxseSB1c2VyLWFjY2Vzc2libGUgdmlhIGBzZXRzb2Nrb3B0YCBhbmQgYHNlbmRtc2dgLiBTaW5jZSB0aG9zZSBzeXNjYWxscyBhcmUgdGhlIGludGVyZmFjZSB0byB1c2Vyc3BhY2UgZm9yIHRoZXNlIGZ1bmN0aW9ucywgYF9fcmRzX3JkbWFfbWFwYCBhbmQgaXRzIGFzc29jaWF0ZWQgc3RydWN0dXJlIGByZHNfY21zZ19yZG1hX2FyZ3NgIGFyZSBjbGVhcmx5IHRoZSBmb2NhbCBwb2ludHMgb2YgYW55IGludmVzdGlnYXRpb24gaW50byB0aGlzIFJETUEgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlbSBmdWxseS4KCk5leHQsIEkgc2hvdWxkIGxvb2sgY2xvc2VseSBhdCBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgLiBUaGUgbWFwcGluZyBhbmQgdW5tYXBwaW5nL2ZyZWVpbmcgb3BlcmF0aW9ucyBhcmUgYWx3YXlzIHRoZSBjcml0aWNhbCBwb2ludHMgdG8gYW5hbHl6ZSBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBpc3N1ZXMsIGVzcGVjaWFsbHkgaW4gUkRNQSBjb250ZXh0cyB3aGVyZSBtZW1vcnkgaXMgYmVpbmcgcGlubmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHNfcmRtYV9mcmVlX29wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9tZXNzYWdlLmM9MTMyPXN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3B1cmdlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXG4tLVxubmV0L3Jkcy9tZXNzYWdlLmMtMTc0LVx0aWYgKHJtLVx1MDAzZXJkbWEub3BfYWN0aXZlKVxubmV0L3Jkcy9tZXNzYWdlLmM6MTc1Olx0XHRyZHNfcmRtYV9mcmVlX29wKFx1MDAyNnJtLVx1MDAzZXJkbWEpO1xubmV0L3Jkcy9tZXNzYWdlLmMtMTc2LVx0aWYgKHJtLVx1MDAzZXJkbWEub3BfcmRtYV9tcilcbi0tXG5uZXQvcmRzL3JkbWEuYz00NDY9dm9pZCByZHNfcmRtYV91bnVzZShzdHJ1Y3QgcmRzX3NvY2sgKnJzLCB1MzIgcl9rZXksIGludCBmb3JjZSlcbi0tXG5uZXQvcmRzL3JkbWEuYy00OTAtXG5uZXQvcmRzL3JkbWEuYzo0OTE6dm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybylcbm5ldC9yZHMvcmRtYS5jLTQ5Mi17XG4tLVxubmV0L3Jkcy9yZG1hLmM9NjE4PWludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbi0tXG5uZXQvcmRzL3JkbWEuYy04MDktXHRpZiAocmV0KVxubmV0L3Jkcy9yZG1hLmM6ODEwOlx0XHRyZHNfcmRtYV9mcmVlX29wKG9wKTtcbm5ldC9yZHMvcmRtYS5jLTgxMS1cdGVsc2Vcbi0tXG5uZXQvcmRzL3Jkcy5oPTk3MT1pbnQgcmRzX2Ntc2dfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbm5ldC9yZHMvcmRzLmgtOTcyLVx0XHRcdCAgc3RydWN0IGNtc2doZHIgKmNtc2cpO1xubmV0L3Jkcy9yZHMuaDo5NzM6dm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybyk7XG5uZXQvcmRzL3Jkcy5oLTk3NC12b2lkIHJkc19hdG9taWNfZnJlZV9vcChzdHJ1Y3Qgcm1fYXRvbWljX29wICphbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0ODIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHNfYXRvbWljX2ZyZWVfb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcmRzL21lc3NhZ2UuYz0xMzI9c3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfcHVyZ2Uoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbi0tXG5uZXQvcmRzL21lc3NhZ2UuYy0xNzktXHRpZiAocm0tXHUwMDNlYXRvbWljLm9wX2FjdGl2ZSlcbm5ldC9yZHMvbWVzc2FnZS5jOjE4MDpcdFx0cmRzX2F0b21pY19mcmVlX29wKFx1MDAyNnJtLVx1MDAzZWF0b21pYyk7XG5uZXQvcmRzL21lc3NhZ2UuYy0xODEtXHRpZiAocm0tXHUwMDNlYXRvbWljLm9wX3JkbWFfbXIpXG4tLVxubmV0L3Jkcy9yZG1hLmM9NDkxPXZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pXG4tLVxubmV0L3Jkcy9yZG1hLmMtNTE4LVxubmV0L3Jkcy9yZG1hLmM6NTE5OnZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKVxubmV0L3Jkcy9yZG1hLmMtNTIwLXtcbi0tXG5uZXQvcmRzL3Jkcy5oPTk3Mz12b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKTtcbm5ldC9yZHMvcmRzLmg6OTc0OnZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKTtcbm5ldC9yZHMvcmRzLmgtOTc1LXZvaWQgcmRzX3JkbWFfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCBpbnQgd2Nfc3RhdHVzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY3MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29kZSBwYXRocy4KCioqRXhhbWluaW5nIFBvdGVudGlhbCBDbGVhbnVwIENhbmRpZGF0ZXMgaW4gUkRTKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXJlIHdlIG1pZ2h0IGJlIGFibGUgdG8gaW1wcm92ZSBtZXNzYWdlIGhhbmRsaW5nLiBMb29raW5nIGF0IHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcywgSSYjMzk7bSBmb2N1c2luZyBvbiBhcmVhcyB3aGVyZSB3ZSYjMzk7cmUgcmVsZWFzaW5nIHJlc291cmNlcyBvciBoYW5kbGluZyBlcnJvcnMuIGByZHNfcmRtYV9mcmVlX29wYCBhbmQgYHJkc19hdG9taWNfZnJlZV9vcGAgaW1tZWRpYXRlbHkgc3ByaW5nIHRvIG1pbmQuIFNlZW1zIGxpa2UgdGhleSYjMzk7cmUgY2FsbGVkIGR1cmluZyBtZXNzYWdlIHB1cmdpbmcgb3IgaW4gZXJyb3Igc2NlbmFyaW9zLCB3aGljaCBzdWdnZXN0cyB0aGV5IGNvdWxkIGJlIHdvcnRod2hpbGUgdGFyZ2V0cyBmb3IgcmVmaW5lbWVudC4gTmVlZCB0byBleGFtaW5lIHdoYXQgdGhlaXIgcm9sZXMgYXJlLgoKTm93LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGByZHNfc2VuZF94bWl0YCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvcHBvcnR1bml0aWVzIGluIHRoZSBzZW5kIHBhdGgsIHNpbmNlIHRoaXMgaXMgYSBjcml0aWNhbCBzcG90IGZvciBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmRzX3NlbmRfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvY29uZy5jPTIxNz12b2lkIHJkc19jb25nX3F1ZXVlX3VwZGF0ZXMoc3RydWN0IHJkc19jb25nX21hcCAqbWFwKVxuLS1cbm5ldC9yZHMvY29uZy5jLTIzMC1cdFx0XHRyZHNfc3RhdHNfaW5jKHNfY29uZ191cGRhdGVfcXVldWVkKTtcbm5ldC9yZHMvY29uZy5jOjIzMTpcdFx0XHQvKiBXZSBjYW5ub3QgaW5saW5lIHRoZSBjYWxsIHRvIHJkc19zZW5kX3htaXQoKSBoZXJlXG5uZXQvcmRzL2NvbmcuYy0yMzItXHRcdFx0ICogZm9yIHR3byByZWFzb25zIChib3RoIHBlcnRhaW5pbmcgdG8gYSBUQ1AgdHJhbnNwb3J0KTpcbi0tXG5uZXQvcmRzL2liX2NtLmM9MjgyPXN0YXRpYyB2b2lkIHJkc19pYl90YXNrbGV0X2ZuX3NlbmQodW5zaWduZWQgbG9uZyBkYXRhKVxuLS1cbm5ldC9yZHMvaWJfY20uYy0yOTktXHQgICAgdGVzdF9iaXQoMCwgXHUwMDI2Y29ubi1cdTAwM2VjX21hcF9xdWV1ZWQpKSlcbm5ldC9yZHMvaWJfY20uYzozMDA6XHRcdHJkc19zZW5kX3htaXQoXHUwMDI2aWMtXHUwMDNlY29ubi1cdTAwM2VjX3BhdGhbMF0pO1xubmV0L3Jkcy9pYl9jbS5jLTMwMS19XG4tLVxubmV0L3Jkcy9pYl9zZW5kLmM9MjQ1PXZvaWQgcmRzX2liX3NlbmRfY3FlX2hhbmRsZXIoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX3djICp3Yylcbi0tXG5uZXQvcmRzL2liX3NlbmQuYy0zMzUtICpcbm5ldC9yZHMvaWJfc2VuZC5jOjMzNjogKiBUaGUgUkRTIHNlbmQgY29kZSBpcyBlc3NlbnRpYWxseSBzaW5nbGUtdGhyZWFkZWQ7IHJkc19zZW5kX3htaXRcbm5ldC9yZHMvaWJfc2VuZC5jLTMzNy0gKiBzZXRzIFJEU19JTl9YTUlUIHRvIGVuc3VyZSBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBzZW5kIHJpbmcuXG4tLVxubmV0L3Jkcy9sb29wLmM9MjMxPXZvaWQgcmRzX2xvb3BfbmV0X2V4aXQodm9pZClcbi0tXG5uZXQvcmRzL2xvb3AuYy0yMzctICogVGhpcyBpcyBtaXNzaW5nIC54bWl0XyogYmVjYXVzZSBsb29wIGRvZXNuJiMzOTt0IGdvIHRocm91Z2ggZ2VuZXJpY1xubmV0L3Jkcy9sb29wLmM6MjM4OiAqIHJkc19zZW5kX3htaXQoKSBhbmQgZG9lc24mIzM5O3QgY2FsbCByZHNfcmVjdl9pbmNvbWluZygpLiAgLmxpc3Rlbl9zdG9wIGFuZFxubmV0L3Jkcy9sb29wLmMtMjM5LSAqIC5sYWRkcl9jaGVjayBhcmUgbWlzc2luZyBiZWNhdXNlIHRyYW5zcG9ydC5jIGRvZXNuJiMzOTt0IGl0ZXJhdGUgb3ZlclxuLS1cbm5ldC9yZHMvcmRzLmg9NTI5PXN0cnVjdCByZHNfdHJhbnNwb3J0IHtcbi0tXG5uZXQvcmRzL3Jkcy5oLTU2OS1cdC8qXG5uZXQvcmRzL3Jkcy5oOjU3MDpcdCAqIC54bWl0IGlzIGNhbGxlZCBieSByZHNfc2VuZF94bWl0KCkgdG8gdGVsbCB0aGUgdHJhbnNwb3J0IHRvIHNlbmRcbm5ldC9yZHMvcmRzLmgtNTcxLVx0ICogcGFydCBvZiBhIG1lc3NhZ2UuICBUaGUgY2FsbGVyIHNlcmlhbGl6ZXMgb24gdGhlIHNlbmRfc2VtIHNvIHRoaXNcbi0tXG5uZXQvcmRzL3Jkcy5oPTk0Nj12b2lkIHJkc19zZW5kX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNvbm4pO1xubmV0L3Jkcy9yZHMuaDo5NDc6aW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKTtcbm5ldC9yZHMvcmRzLmgtOTQ4LXN0cnVjdCBzb2NrYWRkcl9pbjtcbi0tXG5uZXQvcmRzL3NlbmQuYy00NC1cbm5ldC9yZHMvc2VuZC5jOjQ1Oi8qIFdoZW4gdHJhbnNtaXR0aW5nIG1lc3NhZ2VzIGluIHJkc19zZW5kX3htaXQsIHdlIG5lZWQgdG8gZW1lcmdlIGZyb21cbm5ldC9yZHMvc2VuZC5jLTQ2LSAqIHRpbWUgdG8gdGltZSBhbmQgYnJpZWZseSByZWxlYXNlIHRoZSBDUFUuIE90aGVyd2lzZSB0aGUgc29mdGxvY2sgd2F0Y2hkb2dcbi0tXG5uZXQvcmRzL3NlbmQuYz01OT1zdGF0aWMgdm9pZCByZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKHN0cnVjdCBsaXN0X2hlYWQgKm1lc3NhZ2VzLCBpbnQgc3RhdHVzKTtcbi0tXG5uZXQvcmRzL3NlbmQuYy02Mi0gKiBSZXNldCB0aGUgc2VuZCBzdGF0ZS4gIENhbGxlcnMgbXVzdCBlbnN1cmUgdGhhdCB0aGlzIGRvZXNuJiMzOTt0IHJhY2Ugd2l0aFxubmV0L3Jkcy9zZW5kLmM6NjM6ICogcmRzX3NlbmRfeG1pdCgpLlxubmV0L3Jkcy9zZW5kLmMtNjQtICovXG4tLVxubmV0L3Jkcy9zZW5kLmM9MTI4PXN0YXRpYyBib29sIHJkc19tcHJkc19jcDBfY2F0Y2h1cChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4tLVxubmV0L3Jkcy9zZW5kLmMtMTg2LSAqL1xubmV0L3Jkcy9zZW5kLmM6MTg3OmludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbm5ldC9yZHMvc2VuZC5jLTE4OC17XG4tLVxubmV0L3Jkcy9zZW5kLmMtNTM3LX1cbm5ldC9yZHMvc2VuZC5jOjUzODpFWFBPUlRfU1lNQk9MX0dQTChyZHNfc2VuZF94bWl0KTtcbm5ldC9yZHMvc2VuZC5jLTUzOS1cbi0tXG5uZXQvcmRzL3NlbmQuYz02NzI9c3RhdGljIHZvaWQgcmRzX3NlbmRfcmVtb3ZlX2Zyb21fc29jayhzdHJ1Y3QgbGlzdF9oZWFkICptZXNzYWdlcywgaW50IHN0YXR1cylcbi0tXG5uZXQvcmRzL3NlbmQuYy03NDctICogbWVzc2FnZXMgdXAgdG8sIGFuZCBpbmNsdWRpbmcsIHRoZSBnaXZlbiBzZXF1ZW5jZSBudW1iZXIuICBNZXNzYWdlcyBhcmVcbm5ldC9yZHMvc2VuZC5jOjc0ODogKiBtb3ZlZCB0byB0aGUgcmV0cmFucyBxdWV1ZSB3aGVuIHJkc19zZW5kX3htaXQgcGlja3MgdGhlbSBvZmYgdGhlIHNlbmRcbm5ldC9yZHMvc2VuZC5jLTc0OS0gKiBxdWV1ZS4gVGhpcyBtZWFucyB0aGF0IGluIHRoZSBUQ1AgY2FzZSwgdGhlIG1lc3NhZ2UgbWF5IG5vdCBoYXZlIGJlZW5cbi0tXG5uZXQvcmRzL3NlbmQuYz0xMTM3PWludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbilcbi0tXG5uZXQvcmRzL3NlbmQuYy0xNDM0LVxubmV0L3Jkcy9zZW5kLmM6MTQzNTpcdHJldCA9IHJkc19zZW5kX3htaXQoY3BhdGgpO1xubmV0L3Jkcy9zZW5kLmMtMTQzNi1cdGlmIChyZXQgPT0gLUVOT01FTSB8fCByZXQgPT0gLUVBR0FJTikge1xuLS1cbm5ldC9yZHMvdGNwLmM9MTI2PXZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvcmRzL3RjcC5jLTE0MC1cdCAqIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIFJEU19DT05OX1VQLCBhbmQgdGhlblxubmV0L3Jkcy90Y3AuYzoxNDE6XHQgKiB3YWl0aW5nIGZvciBhbnkgZXhpc3RpbmcgdGhyZWFkcyBpbiByZHNfc2VuZF94bWl0IHRvXG5uZXQvcmRzL3RjcC5jLTE0Mi1cdCAqIGNvbXBsZXRlIHJlbGVhc2VfaW5feG1pdCgpLiAoU3Vic2VxdWVudCB0aHJlYWRzIGVudGVyaW5nXG5uZXQvcmRzL3RjcC5jOjE0MzpcdCAqIHJkc19zZW5kX3htaXQoKSB3aWxsIGJhaWwgb24gIXJkc19jb25uX3VwKCkuXG5uZXQvcmRzL3RjcC5jLTE0NC1cdCAqXG4tLVxubmV0L3Jkcy90aHJlYWRzLmM9MTkxPXZvaWQgcmRzX3NlbmRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvcmRzL3RocmVhZHMuYy0xOTktXHRcdGNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG5uZXQvcmRzL3RocmVhZHMuYzoyMDA6XHRcdHJldCA9IHJkc19zZW5kX3htaXQoY3ApO1xubmV0L3Jkcy90aHJlYWRzLmMtMjAxLVx0XHRjb25kX3Jlc2NoZWQoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU4MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jkc19zZW5kbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9hZl9yZHMuYz02NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcmRzX3Byb3RvX29wcyA9IHtcbi0tXG5uZXQvcmRzL2FmX3Jkcy5jLTY2MC1cdC5nZXRzb2Nrb3B0X2l0ZXIgPVx0cmRzX2dldHNvY2tvcHQsXG5uZXQvcmRzL2FmX3Jkcy5jOjY2MTpcdC5zZW5kbXNnID1cdHJkc19zZW5kbXNnLFxubmV0L3Jkcy9hZl9yZHMuYy02NjItXHQucmVjdm1zZyA9XHRyZHNfcmVjdm1zZyxcbi0tXG5uZXQvcmRzL3Jkcy5oPTYxOD1zdHJ1Y3QgcmRzX3NvY2sge1xuLS1cbm5ldC9yZHMvcmRzLmgtNjQwLVx0Lypcbm5ldC9yZHMvcmRzLmg6NjQxOlx0ICogcmRzX3NlbmRtc2cgY2FjaGVzIHRoZSBjb25uIGl0IHVzZWQgdGhlIGxhc3QgdGltZSBhcm91bmQuXG5uZXQvcmRzL3Jkcy5oLTY0Mi1cdCAqIFRoaXMgaGVscHMgYXZvaWQgY29zdGx5IGxvb2t1cHMuXG4tLVxubmV0L3Jkcy9yZHMuaD05Mzk9dm9pZCByZHM2X2luY19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLFxuLS1cbm5ldC9yZHMvcmRzLmgtOTQ0LS8qIHNlbmQuYyAqL1xubmV0L3Jkcy9yZHMuaDo5NDU6aW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKTtcbm5ldC9yZHMvcmRzLmgtOTQ2LXZvaWQgcmRzX3NlbmRfcGF0aF9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY29ubik7XG4tLVxubmV0L3Jkcy9yZWN2LmM9MTk5PXN0YXRpYyB2b2lkIHJkc19yZWN2X2hzX2V4dGhkcnMoc3RydWN0IHJkc19oZWFkZXIgKmhkcixcbi0tXG5uZXQvcmRzL3JlY3YuYy0yNzAtICpcbm5ldC9yZHMvcmVjdi5jOjI3MTogKiAxLiByZHNfc2VuZG1zZyBvbiBmaXJzdCBjb25uZWN0IGF0dGVtcHQgc2VuZHMgdGhlIHByb2JlIHBpbmcsIHdpdGggdGhlXG5uZXQvcmRzL3JlY3YuYy0yNzItICogICAgc2VuZGVyJiMzOTtzIG5wYXRocyAoc19ucGF0aHMpXG4tLVxubmV0L3Jkcy9zZW5kLmM9MTExND1zdGF0aWMgaW50IHJkc19yZG1hX2J5dGVzKHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90ICpyZG1hX2J5dGVzKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTExMzYtXG5uZXQvcmRzL3NlbmQuYzoxMTM3OmludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbilcbm5ldC9yZHMvc2VuZC5jLTExMzgte1xuLS1cbm5ldC9yZHMvc2VuZC5jLTExNjItXG5uZXQvcmRzL3NlbmQuYzoxMTYzOlx0LyogZXhwZWN0IDEgUkRNQSBDTVNHIHBlciByZHNfc2VuZG1zZy4gY2FuIHN0aWxsIGdyb3cgaWYgbW9yZSBuZWVkZWQuICovXG5uZXQvcmRzL3NlbmQuYy0xMTY0LVx0dmN0LmluY3IgPSAxO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEzNAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUkRTIFNlbmQgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgaW4gYHJkc19zZW5kX3htaXRgLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBmdW5jdGlvbiBoYW5kbGluZyBtZXNzYWdlIHNlbmRpbmcgaW4gUkRTLCBjYWxsZWQgZnJvbSBib3RoIGByZHNfc2VuZG1zZ2AgYW5kIGByZHNfc2VuZF93b3JrZXJgLiBUaGF0IG1ha2VzIGl0IGEgbmF0dXJhbCBmb2NhbCBwb2ludCBmb3IgbXkgYW5hbHlzaXMsIGFsdGhvdWdoLCBiZWNhdXNlIGl0IGlzIHRoZSBwcmltYXJ5IHNlbmQgZnVuY3Rpb24sIGl0IG1pZ2h0IGJlIGEgYml0IHRvbyBicm9hZCB0byBzdGFydC4KCkhvd2V2ZXIsIHRoZSBwYXRjaCAqc3BlY2lmaWNhbGx5KiB0YXJnZXRzIGFuIGVycm9yIGNvbmRpdGlvbiB3aXRoaW4gYHJkc19zZW5kX3htaXRgIHdoZW4gUkRNQSBvcGVyYXRpb25zIGFyZSBhY3RpdmUg4oCTIGBybS0mZ3Q7cmRtYS5vcF9hY3RpdmVgIGlzIHRydWUg4oCTIGFuZCBhIG1lc3NhZ2UgaGFzIGJlZW4gcmV0cmFuc21pdHRlZCwgYXMgZmxhZ2dlZCBieSBgUkRTX01TR19SRVRSQU5TTUlUVEVEYC4gVGhpcyByZWFsbHkgbmFycm93cyBkb3duIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHZlY3Rvci4gVGhhdCBnaXZlcyBtZSBhIHByZWNpc2UgZm9jdXMuIEkgc2hvdWxkIGJlIGZ1enppbmcgYHJkc19zZW5kbXNnYCBhbmQgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBSRE1BLXJlbGF0ZWQgb3BlcmF0aW9ucy4KCkkmIzM5O2xsIGRlZmluaXRlbHkgaW5jbHVkZSBgcmRzX3NlbmRfeG1pdGAgaW4gbXkgZm9jdXMgc3ltYm9scywgYnV0IGFsc28gd2FudCB0byBpbmNsdWRlIHRoZSBzdXBwb3J0aW5nIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGludm9sdmVkIGluIHRoZSBlcnJvciBwYXRoLiBJIHNob3VsZCBhbHNvIGluY2x1ZGUgYF9fcmRzX3JkbWFfbWFwYCwgYHJkc19jbXNnX3JkbWFfYXJnc2AsIGByZHNfcmRtYV9mcmVlX29wYCwgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgLiBUaGVzZSBzaG91bGQgYmUgdGhlIGtleSBpbmdyZWRpZW50cywgZXNwZWNpYWxseSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSByZXRyYW5zbWlzc2lvbiBjb2RlIHBhdGguCgpPbmUgdGhpbmcgSSBuZWVkIHRvIGRvdWJsZSBjaGVjayBpcyB0aGF0IHRoaXMgaXMgaW5kZWVkIHNwZWNpZmljIHRvIHRoZSBSRE1BIHBhdGguIFRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvcmRzL3JkbWEuY2AsIGFuZCB0aGF0JiMzOTtzIG9idmlvdXNseSBzdWdnZXN0aXZlLiBJIGtub3cgYHJkbWEuY2AgaXMgY29tcGlsZWQgdW5kZXIgYENPTkZJR19SRFNgLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBDT05GSUdfUkRTX1JETUFgIGlzIG5lZWRlZCwganVzdCB0byBiZSBzdXJlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmUtY2hlY2sgYG5ldC9yZHMvS2NvbmZpZ2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UkRTX1JETUEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9LY29uZmlnPTM9Y29uZmlnIFJEU1xuLS1cbm5ldC9yZHMvS2NvbmZpZy05LVxubmV0L3Jkcy9LY29uZmlnOjEwOmNvbmZpZyBSRFNfUkRNQVxubmV0L3Jkcy9LY29uZmlnLTExLVx0dHJpc3RhdGUgXCYjMzQ7UkRTIG92ZXIgSW5maW5pYmFuZFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzUwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UkRTX1JETUEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvTWFrZWZpbGU9Mz1yZHMteSA6PVx0YWZfcmRzLm8gYmluZC5vIGNvbmcubyBjb25uZWN0aW9uLm8gaW5mby5vIG1lc3NhZ2UubyAgIFxcXG4tLVxubmV0L3Jkcy9NYWtlZmlsZS02LVxubmV0L3Jkcy9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19SRFNfUkRNQSkgJiM0Mzs9IHJkc19yZG1hLm9cbm5ldC9yZHMvTWFrZWZpbGUtOC1yZHNfcmRtYS15IDo9XHRyZG1hX3RyYW5zcG9ydC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDczCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgUkRTIGFuZCBSRE1BIENvbXBpbGF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG5ldC9yZHMvcmRtYS5jYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBjb2RlIGdldHMgY29tcGlsZWQgd2hlbiBgQ09ORklHX1JEU2AgaXMgZW5hYmxlZC4gQnV0LCBoZXJlJiMzOTtzIHRoZSByZWFsIHF1ZXN0aW9uOiBkb2VzIHNpbXBseSBoYXZpbmcgYENPTkZJR19SRFNgIGdpdmUgbWUgUkRNQSBmdW5jdGlvbmFsaXR5IHdpdGhpbiBSRFM/IE9yLCBpcyBgQ09ORklHX1JEU19SRE1BYCBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIHRoYXQgc3BlY2lmaWMgUkRNQSBpbnRlZ3JhdGlvbj8KCkkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFueSBwYXRod2F5IHRvIGByZHNfY21zZ19yZG1hX2FyZ3NgIHdpdGhvdXQgYENPTkZJR19SRFNfUkRNQWAuIEkgbmVlZCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIHRvIHVuZGVyc3RhbmQgaWYgUkRTIFJETUEgY2FuIGJlIHVzZWQgd2l0aG91dCBleHBsaWNpdGx5IGVuYWJsaW5nIGl0LCB3aGljaCB3b3VsZCBiZSBhbiB1bmV4cGVjdGVkIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHNfY21zZ19yZG1hX2FyZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcmRzL3JkbWEuYz01NjY9aW50IHJkc19yZG1hX2V4dHJhX3NpemUoc3RydWN0IHJkc19yZG1hX2FyZ3MgKmFyZ3MsXG4tLVxubmV0L3Jkcy9yZG1hLmMtNjE3LSAqL1xubmV0L3Jkcy9yZG1hLmM6NjE4OmludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbm5ldC9yZHMvcmRtYS5jLTYxOS1cdFx0ICAgICAgIHN0cnVjdCBjbXNnaGRyICpjbXNnLFxuLS1cbm5ldC9yZHMvcmRzLmg9OTY2PWludCByZHNfY21zZ19yZG1hX2Rlc3Qoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbm5ldC9yZHMvcmRzLmgtOTY3LVx0XHRcdCAgc3RydWN0IGNtc2doZHIgKmNtc2cpO1xubmV0L3Jkcy9yZHMuaDo5Njg6aW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxubmV0L3Jkcy9yZHMuaC05NjktXHRcdFx0ICBzdHJ1Y3QgY21zZ2hkciAqY21zZyxcbi0tXG5uZXQvcmRzL3NlbmQuYz0xMDUzPXN0YXRpYyBpbnQgcmRzX2Ntc2dfc2VuZChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxuLS1cbm5ldC9yZHMvc2VuZC5jLTEwNzMtXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbm5ldC9yZHMvc2VuZC5jOjEwNzQ6XHRcdFx0cmV0ID0gcmRzX2Ntc2dfcmRtYV9hcmdzKHJzLCBybSwgY21zZywgXHUwMDI2dmN0LVx1MDAzZXZlY1tpbmRdKTtcbm5ldC9yZHMvc2VuZC5jLTEwNzUtXHRcdFx0aW5kJiM0MzsmIzQzOztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MjcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSRFMgUkRNQSBBcmd1bWVudCBIYW5kbGluZyoqCgpPa2F5LCBzbyBgcmRzX2Ntc2dfcmRtYV9hcmdzYCBpcyBjYWxsZWQgZnJvbSBgcmRzX2Ntc2dfc2VuZGAgd2l0aGluIGBuZXQvcmRzL3NlbmQuY2AuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkOyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBSZW1vdGUgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFJEUykgaW1wbGVtZW50YXRpb24sIGFuZCBpdCYjMzk7cyBidWlsdCB3aGVuIGBDT05GSUdfUkRTYCBpcyBlbmFibGVkLiBTZWVtcyBsb2dpY2FsLgoKSG93ZXZlciwgdGhlIGtleSBxdWVzdGlvbiBub3cgYmVjb21lczogKmRvZXMqIGByZHNfY21zZ19yZG1hX2FyZ3NgICpyZXF1aXJlKiBhbiB1bmRlcmx5aW5nIFJETUEgdHJhbnNwb3J0IHRvIGJlIGZ1bmN0aW9uYWwsIG9yIHdpbGwgaXQgc2ltcGx5IGV4ZWN1dGUsIHBvdGVudGlhbGx5IGZhaWxpbmcgbGF0ZXIgaWYgbm8gUkRNQSBoYXJkd2FyZSBpcyBwcmVzZW50PyBUaGUgcHJlc2VuY2Ugb2YgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGBDT05GSUdfUkRTYCBkZXBlbmRlbmN5IGFsb25lIGRvZXNuJiMzOTt0IGNsYXJpZnkgaXRzIG9wZXJhdGlvbmFsIHJlbGlhbmNlIG9uIGFuIFJETUEtY2FwYWJsZSBzZXR1cC4gVGhpcyBmZWVscyBsaWtlIGFuIG9wdGltaXphdGlvbiB0aGF0IG5lZWRzIGRlZXBlciBwcm9iaW5nLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGByZHNfY21zZ19yZG1hX2FyZ3NgIGl0c2VsZi4gVGhhdCYjMzk7cyB0aGUgb25seSB3YXkgdG8gdW5kZXJzdGFuZCBpdHMgYWN0dWFsIGJlaGF2aW9yIGFuZCBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGF0IGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yZHMvcmRtYS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTg6XHRpbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG4gNjE5Olx0XHRcdCAgICAgICBzdHJ1Y3QgY21zZ2hkciAqY21zZyxcbiA2MjA6XHRcdFx0ICAgICAgIHN0cnVjdCByZHNfaW92X3ZlY3RvciAqdmVjKVxuIDYyMTpcdHtcbiA2MjI6XHRcdHN0cnVjdCByZHNfcmRtYV9hcmdzICphcmdzO1xuIDYyMzpcdFx0c3RydWN0IHJtX3JkbWFfb3AgKm9wID0gXHUwMDI2cm0tXHUwMDNlcmRtYTtcbiA2MjQ6XHRcdGludCBucl9wYWdlcztcbiA2MjU6XHRcdHVuc2lnbmVkIGludCBucl9ieXRlcztcbiA2MjY6XHRcdHN0cnVjdCBwYWdlICoqcGFnZXMgPSBOVUxMO1xuIDYyNzpcdFx0c3RydWN0IHJkc19pb3ZlYyAqaW92cztcbiA2Mjg6XHRcdHVuc2lnbmVkIGludCBpLCBqO1xuIDYyOTpcdFx0aW50IHJldCA9IDA7XG4gNjMwOlx0XHRib29sIG9kcF9zdXBwb3J0ZWQgPSB0cnVlO1xuIDYzMTpcdFxuIDYzMjpcdFx0aWYgKGNtc2ctXHUwMDNlY21zZ19sZW4gXHUwMDNjIENNU0dfTEVOKHNpemVvZihzdHJ1Y3QgcmRzX3JkbWFfYXJncykpXG4gNjMzOlx0XHQgICAgfHwgcm0tXHUwMDNlcmRtYS5vcF9hY3RpdmUpXG4gNjM0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDYzNTpcdFxuIDYzNjpcdFx0YXJncyA9IENNU0dfREFUQShjbXNnKTtcbiA2Mzc6XHRcbiA2Mzg6XHRcdGlmIChpcHY2X2FkZHJfYW55KFx1MDAyNnJzLVx1MDAzZXJzX2JvdW5kX2FkZHIpKSB7XG4gNjM5Olx0XHRcdHJldCA9IC1FTk9UQ09OTjsgLyogWFhYIG5vdCBhIGdyZWF0IGVycm5vICovXG4gNjQwOlx0XHRcdGdvdG8gb3V0X3JldDtcbiA2NDE6XHRcdH1cbiA2NDI6XHRcbiA2NDM6XHRcdGlmIChhcmdzLVx1MDAzZW5yX2xvY2FsIFx1MDAzZSBVSU9fTUFYSU9WKSB7XG4gNjQ0Olx0XHRcdHJldCA9IC1FTVNHU0laRTtcbiA2NDU6XHRcdFx0Z290byBvdXRfcmV0O1xuIDY0NjpcdFx0fVxuIDY0NzpcdFxuIDY0ODpcdFx0aWYgKHZlYy1cdTAwM2VsZW4gIT0gYXJncy1cdTAwM2Vucl9sb2NhbCkge1xuIDY0OTpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDY1MDpcdFx0XHRnb3RvIG91dF9yZXQ7XG4gNjUxOlx0XHR9XG4gNjUyOlx0XHQvKiBvZHAtbXIgaXMgbm90IHN1cHBvcnRlZCBmb3IgbXVsdGlwbGUgcmVxdWVzdHMgd2l0aGluIG9uZSBtZXNzYWdlICovXG4gNjUzOlx0XHRpZiAoYXJncy1cdTAwM2Vucl9sb2NhbCAhPSAxKVxuIDY1NDpcdFx0XHRvZHBfc3VwcG9ydGVkID0gZmFsc2U7XG4gNjU1Olx0XG4gNjU2Olx0XHRpb3ZzID0gdmVjLVx1MDAzZWlvdjtcbiA2NTc6XHRcbiA2NTg6XHRcdG5yX3BhZ2VzID0gcmRzX3JkbWFfcGFnZXMoaW92cywgYXJncy1cdTAwM2Vucl9sb2NhbCk7XG4gNjU5Olx0XHRpZiAobnJfcGFnZXMgXHUwMDNjIDApIHtcbiA2NjA6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiA2NjE6XHRcdFx0Z290byBvdXRfcmV0O1xuIDY2MjpcdFx0fVxuIDY2MzpcdFxuIDY2NDpcdFx0cGFnZXMgPSBremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgbnJfcGFnZXMpO1xuIDY2NTpcdFx0aWYgKCFwYWdlcykge1xuIDY2NjpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDY2NzpcdFx0XHRnb3RvIG91dF9yZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDgzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcmRzL3JkbWEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzUwOlx0XHRcdFx0XHRycy1cdTAwM2Vyc190cmFuc3BvcnQtXHUwMDNlZ2V0X21yKFxuIDc1MTpcdFx0XHRcdFx0XHROVUxMLCAwLCBycywgXHUwMDI2bG9jYWxfb2RwX21yLVx1MDAzZXJfa2V5LCBOVUxMLFxuIDc1MjpcdFx0XHRcdFx0XHRpb3YtXHUwMDNlYWRkciwgaW92LVx1MDAzZWJ5dGVzLCBPRFBfVklSVFVBTCk7XG4gNzUzOlx0XHRcdFx0aWYgKElTX0VSUihsb2NhbF9vZHBfbXItXHUwMDNlcl90cmFuc19wcml2YXRlKSkge1xuIDc1NDpcdFx0XHRcdFx0cmV0ID0gUFRSX0VSUihsb2NhbF9vZHBfbXItXHUwMDNlcl90cmFuc19wcml2YXRlKTtcbiA3NTU6XHRcdFx0XHRcdHJkc2RlYnVnKFwmIzM0O2dldF9tciByZXQgJWQgJXBcXFwmIzM0O1wmIzM0OywgcmV0LFxuIDc1NjpcdFx0XHRcdFx0XHQgbG9jYWxfb2RwX21yLVx1MDAzZXJfdHJhbnNfcHJpdmF0ZSk7XG4gNzU3Olx0XHRcdFx0XHRrZnJlZShsb2NhbF9vZHBfbXIpO1xuIDc1ODpcdFx0XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4gNzU5Olx0XHRcdFx0XHRnb3RvIG91dF9wYWdlcztcbiA3NjA6XHRcdFx0XHR9XG4gNzYxOlx0XHRcdFx0cmRzZGVidWcoXCYjMzQ7TmVlZCBvZHA7IGxvY2FsX29kcF9tciAlcCB0cmFuc19wcml2YXRlICVwXFxuXCYjMzQ7LFxuIDc2MjpcdFx0XHRcdFx0IGxvY2FsX29kcF9tciwgbG9jYWxfb2RwX21yLVx1MDAzZXJfdHJhbnNfcHJpdmF0ZSk7XG4gNzYzOlx0XHRcdFx0LyogRnJvbSBoZXJlIG9uIHRoZSBNUiBpcyB0b3JuIGRvd24gdGhyb3VnaFxuIDc2NDpcdFx0XHRcdCAqIF9fcmRzX3B1dF9tcl9maW5hbCgpLCB3aGljaCBkcm9wcyB0aGlzIHJlZmVyZW5jZS5cbiA3NjU6XHRcdFx0XHQgKi9cbiA3NjY6XHRcdFx0XHRzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7XG4gNzY3Olx0XHRcdFx0b3AtXHUwMDNlb3Bfb2RwX21yID0gbG9jYWxfb2RwX21yO1xuIDc2ODpcdFx0XHRcdG9wLVx1MDAzZW9wX29kcF9hZGRyID0gaW92LVx1MDAzZWFkZHI7XG4gNzY5Olx0XHRcdH1cbiA3NzA6XHRcbiA3NzE6XHRcdFx0cmRzZGVidWcoXCYjMzQ7UkRTOiBucl9ieXRlcyAldSBuciAldSBpb3YtXHUwMDNlYnl0ZXMgJWxsdSBpb3YtXHUwMDNlYWRkciAlbGx4XFxuXCYjMzQ7LFxuIDc3MjpcdFx0XHRcdCBucl9ieXRlcywgbnIsIGlvdi1cdTAwM2VieXRlcywgaW92LVx1MDAzZWFkZHIpO1xuIDc3MzpcdFxuIDc3NDpcdFx0XHRucl9ieXRlcyAmIzQzOz0gaW92LVx1MDAzZWJ5dGVzO1xuIDc3NTpcdFxuIDc3NjpcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBucjsgaiYjNDM7JiM0MzspIHtcbiA3Nzc6XHRcdFx0XHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gaW92LVx1MDAzZWFkZHIgXHUwMDI2IH5QQUdFX01BU0s7XG4gNzc4Olx0XHRcdFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbiA3Nzk6XHRcbiA3ODA6XHRcdFx0XHRzZyA9IFx1MDAyNm9wLVx1MDAzZW9wX3NnW29wLVx1MDAzZW9wX25lbnRzICYjNDM7IGpdO1xuIDc4MTpcdFx0XHRcdHNnX3NldF9wYWdlKHNnLCBwYWdlc1tqXSxcbiA3ODI6XHRcdFx0XHRcdFx0bWluX3QodW5zaWduZWQgaW50LCBpb3YtXHUwMDNlYnl0ZXMsIFBBR0VfU0laRSAtIG9mZnNldCksXG4gNzgzOlx0XHRcdFx0XHRcdG9mZnNldCk7XG4gNzg0Olx0XG4gNzg1Olx0XHRcdFx0c2dfZG1hX2xlbihzZykgPSBzZy1cdTAwM2VsZW5ndGg7XG4gNzg2Olx0XHRcdFx0cmRzZGVidWcoXCYjMzQ7UkRTOiBzZy1cdTAwM2VvZmZzZXQgJXggc2ctXHUwMDNlbGVuICV4IGlvdi1cdTAwM2VhZGRyICVsbHggaW92LVx1MDAzZWJ5dGVzICVsbHVcXG5cJiMzNDssXG4gNzg3Olx0XHRcdFx0ICAgICAgIHNnLVx1MDAzZW9mZnNldCwgc2ctXHUwMDNlbGVuZ3RoLCBpb3YtXHUwMDNlYWRkciwgaW92LVx1MDAzZWJ5dGVzKTtcbiA3ODg6XHRcbiA3ODk6XHRcdFx0XHRpb3YtXHUwMDNlYWRkciAmIzQzOz0gc2ctXHUwMDNlbGVuZ3RoO1xuIDc5MDpcdFx0XHRcdGlvdi1cdTAwM2VieXRlcyAtPSBzZy1cdTAwM2VsZW5ndGg7XG4gNzkxOlx0XHRcdH1cbiA3OTI6XHRcbiA3OTM6XHRcdFx0b3AtXHUwMDNlb3BfbmVudHMgJiM0Mzs9IG5yO1xuIDc5NDpcdFx0fVxuIDc5NTpcdFxuIDc5NjpcdFx0aWYgKG5yX2J5dGVzIFx1MDAzZSBhcmdzLVx1MDAzZXJlbW90ZV92ZWMuYnl0ZXMpIHtcbiA3OTc6XHRcdFx0cmRzZGVidWcoXCYjMzQ7UkRTIG5yX2J5dGVzICV1IHJlbW90ZV9ieXRlcyAldSBkbyBub3QgbWF0Y2hcXG5cJiMzNDssXG4gNzk4Olx0XHRcdFx0XHRucl9ieXRlcyxcbiA3OTk6XHRcdFx0XHRcdCh1bnNpZ25lZCBpbnQpIGFyZ3MtXHUwMDNlcmVtb3RlX3ZlYy5ieXRlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzc3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUkRTIFJETUEgQ29kZSBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYHJkc19jbXNnX3JkbWFfYXJnc2Agd29ya3MgYW5kIGl0IGFwcGVhcnMgdG8gcmVseSBvbiBgcnMtJmd0O3JzX3RyYW5zcG9ydC0mZ3Q7Z2V0X21yYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaWYgdGhlcmUmIzM5O3Mgbm8gdHJhbnNwb3J0IGJvdW5kLCB0aGlzIGNvdWxkIGZhaWwgcHJldHR5IGVhcmx5IG9uLiBIb3dldmVyLCB0aGUgY29kZSAqaXMqIHJlYWNoYWJsZSwgc28gdGhhdCBhc3N1bXB0aW9uIGlzIGEgYml0IHNoYWt5LiBJJiMzOTttIHdvbmRlcmluZyBpZiBgQ09ORklHX1JEU19SRE1BYCBpcyBhY3R1YWxseSAqcmVxdWlyZWQqIHRvIHRyaWdnZXIgdGhpcyBzcGVjaWZpYyBzZWN0aW9uLiBQcm9iYWJseSBub3QsIHN0cmljdGx5IHNwZWFraW5nLCB0byBqdXN0ICpyZWFjaCogdGhlIGNvZGUuIEhvd2V2ZXIsIHdpdGhvdXQgYSB0cnVlIFJETUEgdHJhbnNwb3J0IGluaXRpYWxpemVkLCBgcnMtJmd0O3JzX3RyYW5zcG9ydGAgaXMgbGlrZWx5IHRvIGJlIE5VTEwsIG9yIGF0IGxlYXN0IG5vdCBoYXZlIGltcGxlbWVudGVkIGBnZXRfbXJgLCBtYWtpbmcgdGhlIHdob2xlIHRoaW5nIGEgbm8tb3AuCgpCdXQgd2FpdCBhIG1pbnV0ZSwgdGhlIGBycy0mZ3Q7cnNfdHJhbnNwb3J0YCBpcyBzZXQgZHVyaW5nIHRoZSBiaW5kaW5nIG9yIGNvbm5lY3RpbmcgcGhhc2UuIFRoYXQgbWFrZXMgbW9yZSBzZW5zZS4gTm93IHRoZSBxdWVzdGlvbiBpcywgaWYgd2UmIzM5O3JlIHVzaW5nIHNvbWV0aGluZyBsaWtlIGBSRFNfVENQYCwgZG9lcyB0aGF0IHRyYW5zcG9ydCAqZXZlbiogaW1wbGVtZW50IGBnZXRfbXJgPyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdCBwYXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9tciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvdGNwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxODkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipMb29raW5nIGZvciBgZ2V0X21yYCBpbiBSRE1BIGFuZCBUQ1AgVHJhbnNwb3J0cyoqCgpSaWdodCwgSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCB3aGVyZSBtZW1vcnkgcmVnaXN0cmF0aW9uIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBSRE1BLCBzaW5jZSBUQ1AgZG9lc24mIzM5O3QgaW1wbGVtZW50IGBnZXRfbXJgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgUkRNQSBoYW5kbGVzIGl0cyBtZW1vcnkgcmVnaXN0cmF0aW9uLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbmV0L3Jkcy9pYl9yZG1hLmNgIG9yIGEgZmlsZSBzaW1pbGFybHkgbmFtZWQsIHJlbGF0ZWQgdG8gdGhlIFJETUEgaW1wbGVtZW50YXRpb24uIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSByZWxldmFudCBgZ2V0X21yYCBmdW5jdGlvbmFsaXR5LCBvciBpdHMgZXF1aXZhbGVudCwgd2lsbCBiZSBzaXR1YXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfbXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzL2liJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzOTUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYGdldF9tcmAgaW4gYHJkc190cmFuc3BvcnRgKioKCk9rYXksIHNvIGBnZXRfbXJgIGlzIGEgZmllbGQgd2l0aGluIHRoZSBgcmRzX3RyYW5zcG9ydGAgc3RydWN0dXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgZXhhY3RseSBpcyB0aGlzIHZhbHVlIGJlaW5nIHNldD8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXNzaWdubWVudCBjb250ZXh0IHRvIHRydWx5IGdyYXNwIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvci4gVGhpcyBpcyBmdW5kYW1lbnRhbCBpbiBkZWJ1Z2dpbmcgb3IgdW5kZXJzdGFuZGluZyB0aGUgZmxvdy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhyb3VnaCB0aGUgY29kZSBhbmQgZmluZCB0aGUgc3BlY2lmaWMgcG9pbnRzIHdoZXJlIGBnZXRfbXJgIGlzIHBvcHVsYXRlZC4gVGhhdCYjMzk7cyB0aGUgb25seSB3YXkgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlIGZpZWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC5nZXRfbXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcmRzL2liLmM9NTU1PXN0cnVjdCByZHNfdHJhbnNwb3J0IHJkc19pYl90cmFuc3BvcnQgPSB7XG4tLVxubmV0L3Jkcy9pYi5jLTU3Mi1cdC5leGl0XHRcdFx0PSByZHNfaWJfZXhpdCxcbm5ldC9yZHMvaWIuYzo1NzM6XHQuZ2V0X21yXHRcdFx0PSByZHNfaWJfZ2V0X21yLFxubmV0L3Jkcy9pYi5jLTU3NC1cdC5zeW5jX21yXHRcdD0gcmRzX2liX3N5bmNfbXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzAyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJETUEgQ29uZmlndXJhdGlvbiBDaGVjayoqCgpPa2F5LCBzbyBgcmRzX2liX3RyYW5zcG9ydGAgaXMgdGhlIGtleSDigJMgaXQgaW1wbGVtZW50cyBgZ2V0X21yYCwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHRoZSBSZW1vdGUgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKFJETUEpIGZ1bmN0aW9uYWxpdHkuIEFuZCB0aGF0IHRyYW5zcG9ydCBpcyBkZWZpbmVkIGluIGBuZXQvcmRzL2liLmNgLiAgSSBrbm93IHRoYXQgZmlsZSYjMzk7cyBjb21waWxlZCB3aGVuIGBDT05GSUdfUkRTX1JETUFgIGlzIGVuYWJsZWQuIFRoZXJlZm9yZSwgdG8gZW5zdXJlIEkmIzM5O20gdGhvcm91Z2hseSB0ZXN0aW5nIHRoZSBSRE1BIGNhcGFiaWxpdGllcywgSSBhYnNvbHV0ZWx5IG5lZWQgYENPTkZJR19SRFNfUkRNQWAgdG8gYmUgc2V0LiAgSXQmIzM5O3Mgbm9uLW5lZ290aWFibGUuCgpXaGlsZSBJJiMzOTttIGF0IGl0LCBJIHNob3VsZCB2ZXJpZnkgd2hldGhlciBgQ09ORklHX1JEU19UQ1BgIGlzIGFsc28gYmVuZWZpY2lhbCB0byBoYXZlIGVuYWJsZWQuICBJIHN1c3BlY3QgaXQgd2lsbCBiZSwgc28gSSBzaG91bGQgY29uc2lkZXIgc2V0dGluZyBpdCB0b28uCgpSaWdodCwgbGV0IG1lIGFkZCBgUkRTYCwgYFJEU19SRE1BYCwgYW5kIGBSRFNfVENQYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGF0IGNvdmVycyB0aGUgYmFzaWMgc2V0dXAuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBzeW1ib2xzIGFmZmVjdGVkLiBNeSBmb2N1cyBuZWVkcyB0byBpbmNsdWRlOgoqICAgYF9fcmRzX3JkbWFfbWFwYAoqICAgYHJkc19jbXNnX3JkbWFfYXJnc2AKKiAgIGByZHNfcmRtYV9mcmVlX29wYAoqICAgYHJkc19hdG9taWNfZnJlZV9vcGAKKiAgIGByZHNfc2VuZF94bWl0YAoKQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQ/IEFoLCB5ZXMsIGBfX3Jkc19wdXRfbXJfZmluYWxgIGFwcGVhcnMgdG8gaGF2ZSBiZWVuIHRvdWNoZWQgYXMgd2VsbC4gVGhhdCBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIGFkZGl0aW9uYWwgdGFyZ2V0IHRvIHJldmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19yZHNfcHV0X21yX2ZpbmFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9tZXNzYWdlLmM9MTMyPXN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3B1cmdlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXG4tLVxubmV0L3Jkcy9tZXNzYWdlLmMtMTc2LVx0aWYgKHJtLVx1MDAzZXJkbWEub3BfcmRtYV9tcilcbm5ldC9yZHMvbWVzc2FnZS5jOjE3NzpcdFx0a3JlZl9wdXQoXHUwMDI2cm0tXHUwMDNlcmRtYS5vcF9yZG1hX21yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvbWVzc2FnZS5jLTE3OC1cbi0tXG5uZXQvcmRzL21lc3NhZ2UuYy0xODEtXHRpZiAocm0tXHUwMDNlYXRvbWljLm9wX3JkbWFfbXIpXG5uZXQvcmRzL21lc3NhZ2UuYzoxODI6XHRcdGtyZWZfcHV0KFx1MDAyNnJtLVx1MDAzZWF0b21pYy5vcF9yZG1hX21yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvbWVzc2FnZS5jLTE4My19XG4tLVxubmV0L3Jkcy9yZG1hLmM9OTU9c3RhdGljIHZvaWQgcmRzX2Rlc3Ryb3lfbXIoc3RydWN0IHJkc19tciAqbXIpXG4tLVxubmV0L3Jkcy9yZG1hLmMtMTE0LVxubmV0L3Jkcy9yZG1hLmM6MTE1OnZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKVxubmV0L3Jkcy9yZG1hLmMtMTE2LXtcbi0tXG5uZXQvcmRzL3JkbWEuYz0xMjg9dm9pZCByZHNfcmRtYV9kcm9wX2tleXMoc3RydWN0IHJkc19zb2NrICpycylcbi0tXG5uZXQvcmRzL3JkbWEuYy0xNDItXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cnMtXHUwMDNlcnNfcmRtYV9sb2NrLCBmbGFncyk7XG5uZXQvcmRzL3JkbWEuYzoxNDM6XHRcdGtyZWZfcHV0KFx1MDAyNm1yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvcmRtYS5jLTE0NC1cdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cnMtXHUwMDNlcnNfcmRtYV9sb2NrLCBmbGFncyk7XG4tLVxubmV0L3Jkcy9yZG1hLmM9MTczPXN0YXRpYyBpbnQgX19yZHNfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19nZXRfbXJfYXJncyAqYXJncyxcbi0tXG5uZXQvcmRzL3JkbWEuYy0yNDctXHQvKiBUaGUgTVIgY2FuIG91dGxpdmUgaXRzIHNvY2tldDogYSBzb2NrZXQgcmVmZXJlbmNlIGlzIGhlbGRcbm5ldC9yZHMvcmRtYS5jOjI0ODpcdCAqIHVudGlsIHRoZSBmaW5hbCBrcmVmIGlzIGRyb3BwZWQgaW4gX19yZHNfcHV0X21yX2ZpbmFsKCkuXG5uZXQvcmRzL3JkbWEuYy0yNDktXHQgKi9cbi0tXG5uZXQvcmRzL3JkbWEuYy0zNTUtXHRpZiAobXIpXG5uZXQvcmRzL3JkbWEuYzozNTY6XHRcdGtyZWZfcHV0KFx1MDAyNm1yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvcmRtYS5jLTM1Ny1cdHJldHVybiByZXQ7XG4tLVxubmV0L3Jkcy9yZG1hLmM9NDAwPWludCByZHNfZnJlZV9tcihzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9yZHMvcmRtYS5jLTQzNi1cbm5ldC9yZHMvcmRtYS5jOjQzNzpcdGtyZWZfcHV0KFx1MDAyNm1yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvcmRtYS5jLTQzOC1cdHJldHVybiAwO1xuLS1cbm5ldC9yZHMvcmRtYS5jPTQ0Nj12b2lkIHJkc19yZG1hX3VudXNlKHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiByX2tleSwgaW50IGZvcmNlKVxuLS1cbm5ldC9yZHMvcmRtYS5jLTQ4Mi1cdC8qIFJlbGVhc2UgdGhlIHJlZmVyZW5jZSBoZWxkIGFib3ZlLiAqL1xubmV0L3Jkcy9yZG1hLmM6NDgzOlx0a3JlZl9wdXQoXHUwMDI2bXItXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xubmV0L3Jkcy9yZG1hLmMtNDg0LVxuLS1cbm5ldC9yZHMvcmRtYS5jLTQ4Ny1cdGlmICh6b3RfbWUpXG5uZXQvcmRzL3JkbWEuYzo0ODg6XHRcdGtyZWZfcHV0KFx1MDAyNm1yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvcmRtYS5jLTQ4OS19XG4tLVxubmV0L3Jkcy9yZG1hLmM9NDkxPXZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pXG4tLVxubmV0L3Jkcy9yZG1hLmMtNDk1LVx0aWYgKHJvLVx1MDAzZW9wX29kcF9tcikge1xubmV0L3Jkcy9yZG1hLmM6NDk2Olx0XHRrcmVmX3B1dChcdTAwMjZyby1cdTAwM2VvcF9vZHBfbXItXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xubmV0L3Jkcy9yZG1hLmMtNDk3LVx0fSBlbHNlIHtcbi0tXG5uZXQvcmRzL3JkbWEuYz02MTg9aW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxuLS1cbm5ldC9yZHMvcmRtYS5jLTc2My1cdFx0XHQvKiBGcm9tIGhlcmUgb24gdGhlIE1SIGlzIHRvcm4gZG93biB0aHJvdWdoXG5uZXQvcmRzL3JkbWEuYzo3NjQ6XHRcdFx0ICogX19yZHNfcHV0X21yX2ZpbmFsKCksIHdoaWNoIGRyb3BzIHRoaXMgcmVmZXJlbmNlLlxubmV0L3Jkcy9yZG1hLmMtNzY1LVx0XHRcdCAqL1xuLS1cbm5ldC9yZHMvcmRzLmg9OTc3PWludCByZHNfY21zZ19hdG9taWMoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbi0tXG5uZXQvcmRzL3Jkcy5oLTk3OS1cbm5ldC9yZHMvcmRzLmg6OTgwOnZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKTtcbm5ldC9yZHMvcmRzLmgtOTgxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc5MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Jkcy9yZG1hLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExMDpcdFxuIDExMTpcdFx0aWYgKHRyYW5zX3ByaXZhdGUpXG4gMTEyOlx0XHRcdG1yLVx1MDAzZXJfdHJhbnMtXHUwMDNlZnJlZV9tcih0cmFuc19wcml2YXRlLCBtci1cdTAwM2VyX2ludmFsaWRhdGUpO1xuIDExMzpcdH1cbiAxMTQ6XHRcbiAxMTU6XHR2b2lkIF9fcmRzX3B1dF9tcl9maW5hbChzdHJ1Y3Qga3JlZiAqa3JlZilcbiAxMTY6XHR7XG4gMTE3Olx0XHRzdHJ1Y3QgcmRzX21yICptciA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmRzX21yLCByX2tyZWYpO1xuIDExODpcdFxuIDExOTpcdFx0cmRzX2Rlc3Ryb3lfbXIobXIpO1xuIDEyMDpcdFx0c29ja19wdXQocmRzX3JzX3RvX3NrKG1yLVx1MDAzZXJfc29jaykpO1xuIDEyMTpcdFx0a2ZyZWUobXIpO1xuIDEyMjpcdH1cbiAxMjM6XHRcbiAxMjQ6XHQvKlxuIDEyNTpcdCAqIEJ5IHRoZSB0aW1lIHRoaXMgaXMgY2FsbGVkIHdlIGNhbiYjMzk7dCBoYXZlIGFueSBtb3JlIGlvY3RscyBjYWxsZWQgb25cbiAxMjY6XHQgKiB0aGUgc29ja2V0IHNvIHdlIGRvbiYjMzk7dCBuZWVkIHRvIHdvcnJ5IGFib3V0IHJhY2luZyB3aXRoIG90aGVycy5cbiAxMjc6XHQgKi9cbiAxMjg6XHR2b2lkIHJkc19yZG1hX2Ryb3Bfa2V5cyhzdHJ1Y3QgcmRzX3NvY2sgKnJzKVxuIDEyOTpcdHtcbiAxMzA6XHRcdHN0cnVjdCByZHNfbXIgKm1yO1xuIDEzMTpcdFx0c3RydWN0IHJiX25vZGUgKm5vZGU7XG4gMTMyOlx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDEzMzpcdFxuIDEzNDpcdFx0LyogUmVsZWFzZSBhbnkgTVJzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNvY2tldCAqL1xuIDEzNTpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cnMtXHUwMDNlcnNfcmRtYV9sb2NrLCBmbGFncyk7XG4gMTM2Olx0XHR3aGlsZSAoKG5vZGUgPSByYl9maXJzdChcdTAwMjZycy1cdTAwM2Vyc19yZG1hX2tleXMpKSkge1xuIDEzNzpcdFx0XHRtciA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCByZHNfbXIsIHJfcmJfbm9kZSk7XG4gMTM4Olx0XHRcdGlmIChtci1cdTAwM2VyX3RyYW5zID09IHJzLVx1MDAzZXJzX3RyYW5zcG9ydClcbiAxMzk6XHRcdFx0XHRtci1cdTAwM2VyX2ludmFsaWRhdGUgPSAwO1xuIDE0MDpcdFx0XHRyYl9lcmFzZShcdTAwMjZtci1cdTAwM2VyX3JiX25vZGUsIFx1MDAyNnJzLVx1MDAzZXJzX3JkbWFfa2V5cyk7XG4gMTQxOlx0XHRcdFJCX0NMRUFSX05PREUoXHUwMDI2bXItXHUwMDNlcl9yYl9ub2RlKTtcbiAxNDI6XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZycy1cdTAwM2Vyc19yZG1hX2xvY2ssIGZsYWdzKTtcbiAxNDM6XHRcdFx0a3JlZl9wdXQoXHUwMDI2bXItXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xuIDE0NDpcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZycy1cdTAwM2Vyc19yZG1hX2xvY2ssIGZsYWdzKTtcbiAxNDU6XHRcdH1cbiAxNDY6XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cnMtXHUwMDNlcnNfcmRtYV9sb2NrLCBmbGFncyk7XG4gMTQ3Olx0XG4gMTQ4Olx0XHRpZiAocnMtXHUwMDNlcnNfdHJhbnNwb3J0IFx1MDAyNlx1MDAyNiBycy1cdTAwM2Vyc190cmFuc3BvcnQtXHUwMDNlZmx1c2hfbXJzKVxuIDE0OTpcdFx0XHRycy1cdTAwM2Vyc190cmFuc3BvcnQtXHUwMDNlZmx1c2hfbXJzKCk7XG4gMTUwOlx0fVxuIDE1MTpcdFxuIDE1MjpcdC8qXG4gMTUzOlx0ICogSGVscGVyIGZ1bmN0aW9uIHRvIHBpbiB1c2VyIHBhZ2VzLlxuIDE1NDpcdCAqL1xuIDE1NTpcdHN0YXRpYyBpbnQgcmRzX3Bpbl9wYWdlcyh1bnNpZ25lZCBsb25nIHVzZXJfYWRkciwgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxuIDE1NjpcdFx0XHRcdHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCB3cml0ZSlcbiAxNTc6XHR7XG4gMTU4Olx0XHR1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzID0gRk9MTF9MT05HVEVSTTtcbiAxNTk6XHRcdGludCByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDMzCgkJCQkJCQlvdXRwdXQ6IDI0MwoJCQkJCQkJdGhvdWdodHM6IDUzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBSRFMvUkRNQSoqCgpPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoaXMgZnV6emluZyB0YXJnZXQuIGBfX3Jkc19wdXRfbXJfZmluYWxgIGxvb2tzIGxpa2UgYSBrZXkgcG9pbnQsIHNpbmNlIGl0JiMzOTtzIHdoZXJlIHRoZSBzb2NrZXQgcmVmZXJlbmNlIGlzIGRyb3BwZWQuIFRoaXMgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0LgoKVGhlcmVmb3JlLCB0aGUgbWFpbiBzeW1ib2xzIEkgd2FudCB0byBmb2N1cyB0aGUgZnV6emVyIG9uIGFyZTogYF9fcmRzX3B1dF9tcl9maW5hbGAsIG5hdHVyYWxseSwgYnV0IGFsc28gYF9fcmRzX3JkbWFfbWFwYCwgYHJkc19yZG1hX2ZyZWVfb3BgLCBgcmRzX2F0b21pY19mcmVlX29wYCwgYW5kIGByZHNfY21zZ19yZG1hX2FyZ3NgLiBUaG9zZSBhbGwgc2VlbSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBSRE1BIHBhdGggYW5kIHRoZSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUuCgpIbW0sIGByZHNfc2VuZF94bWl0YC4uLiB0aGF0JiMzOTtzIGEgaG90IGZ1bmN0aW9uLCBhbmQgSSB3YXMgb3JpZ2luYWxseSBoZXNpdGFudCB0byBhZGQgaXQgdG8gdGhlIGZvY3VzIGxpc3QgYmVjYXVzZSBJIGRvbiYjMzk7dCB3YW50IHRvIHNrZXcgdGhlIHRlc3QgZGlzdHJpYnV0aW9ucy4gSG93ZXZlciwgdGhlIHBhdGNoICpzcGVjaWZpY2FsbHkqIG1vZGlmaWVzIGByZHNfc2VuZF94bWl0YCB0byBmaXggYSByZWZjb3VudCBsZWFrIHdoZW4gYHJtLSZndDttX2ZsYWdzYCBoYXMgYFJEU19NU0dfT05fQ09OTmAgY2xlYXJlZC4gSWYgSSBkb24mIzM5O3QgaW5jbHVkZSBpdCwgdGhlIGZ1enplciBtaWdodCBtaXNzIHRoYXQgcGFydCBvZiB0aGUgc2VuZCBwYXRoIGVudGlyZWx5LiBUaGUgZW50cnkgcG9pbnQgaXMgYHJkc19zZW5kbXNnYCwgd2hpY2ggbWVhbnMgdGhlIGZ1enplciBzaG91bGQgc3BlbmQgc29tZSB0aW1lIGluIHRoZSBzZW5kIHBhdGguIFRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGByZHNfc2VuZF94bWl0YCBiZWNhdXNlIHRoZSBmaXggaXMgZXhwbGljaXQgaW4gdGhlIHBhdGNoLgoKTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgbXkgY29uZmlndXJhdGlvbiBhc3N1bXB0aW9ucy4gSSYjMzk7bSBwcmV0dHkgc3VyZSBgUkRTYCBhbmQgYFJEU19SRE1BYCBhcmUgdGhlIG1haW4gb25lcywgYnV0IGxldCBtZSBhZGQgYFJEU19UQ1BgIGp1c3QgdG8gbWFrZSBzdXJlIEkgY292ZXIgZXZlcnl0aGluZy4KCkFscmlnaHQsIGhlcmUmIzM5O3MgbXkgc3VtbWFyeToKCldvcnRoRnV6emluZzogVHJ1ZQpGb2N1c1N5bWJvbHM6Ci0gYF9fcmRzX3B1dF9tcl9maW5hbGAKLSBgX19yZHNfcmRtYV9tYXBgCi0gYHJkc19yZG1hX2ZyZWVfb3BgCi0gYHJkc19hdG9taWNfZnJlZV9vcGAKLSBgcmRzX2Ntc2dfcmRtYV9hcmdzYAotIGByZHNfc2VuZF94bWl0YApFbmFibGVDb25maWdzOgotIGBSRFNgCi0gYFJEU19SRE1BYAotIGBSRFNfVENQYAoKTXkgcmVhc29uaW5nIGlzIHRoaXM6IHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGZpeGVzIGEgc29ja2V0IHJlZmNvdW50IGxlYWsgd2l0aGluIFJEUyBSRE1BIG9wZXJhdGlvbnMuIEl0IGRvZXMgdGhpcyBieSBjYXJlZnVsbHkgbWFuYWdpbmcgc29ja2V0IHJlZmVyZW5jZXMgaW4gYF9fcmRzX3JkbWFfbWFwYCBhbmQgYHJkc19jbXNnX3JkbWFfYXJnc2AsIGFuZCByZWxlYXNpbmcgdGhlbSBpbiBgX19yZHNfcHV0X21yX2ZpbmFsYC4gQWRkaXRpb25hbGx5LCBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgIGFyZSBjaGFuZ2VkIHRvIHVzZSBub24tc2xlZXBpbmcgcGFnZSB1bnBpbm5pbmcgZnVuY3Rpb25zIHNpbmNlIHRoZXkgY291bGQgYmUgY2FsbGVkIGZyb20gYSB0YXNrbGV0IGNvbnRleHQuIFRoaXMgaXMgdmVyeSBpbXBvcnRhbnQuIEZpbmFsbHksIGl0IGNvcnJlY3RzIGEgbWVzc2FnZSByZWZjb3VudCBsZWFrIGluIGByZHNfc2VuZF94bWl0YC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgUkRTIGFuZCBSRE1BIGxvZ2ljIGl0c2VsZiwgbWFraW5nIHRoZW0gaWRlYWwgZnV6emluZyB0YXJnZXRzLgoKT2theSwgSSYjMzk7bSBjb25maWRlbnQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UkRTJiMzNDssCiAgICAmIzM0O1JEU19SRE1BJiMzNDssCiAgICAmIzM0O1JEU19UQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3Jkc19wdXRfbXJfZmluYWwmIzM0OywKICAgICYjMzQ7X19yZHNfcmRtYV9tYXAmIzM0OywKICAgICYjMzQ7cmRzX3JkbWFfZnJlZV9vcCYjMzQ7LAogICAgJiMzNDtyZHNfYXRvbWljX2ZyZWVfb3AmIzM0OywKICAgICYjMzQ7cmRzX2Ntc2dfcmRtYV9hcmdzJiMzNDssCiAgICAmIzM0O3Jkc19zZW5kX3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBzb2NrZXQgcmVmY291bnQgbGVhayBpbiBSRFMgUkRNQSBvcGVyYXRpb25zIGJ5IGhvbGRpbmcgYSBzb2NrZXQgcmVmZXJlbmNlIGluIGBfX3Jkc19yZG1hX21hcGAgYW5kIGByZHNfY21zZ19yZG1hX2FyZ3NgIGFuZCByZWxlYXNpbmcgaXQgaW4gYF9fcmRzX3B1dF9tcl9maW5hbGAuIEl0IGFsc28gbW9kaWZpZXMgYHJkc19yZG1hX2ZyZWVfb3BgIGFuZCBgcmRzX2F0b21pY19mcmVlX29wYCB0byB1c2Ugbm9uLXNsZWVwaW5nIHBhZ2UgdW5waW5uaW5nIGZ1bmN0aW9ucyBzaW5jZSB0aGV5IGNhbiBiZSBjYWxsZWQgZnJvbSB0YXNrbGV0IGNvbnRleHQuIEZpbmFsbHksIGl0IGZpeGVzIGEgbWVzc2FnZSByZWZjb3VudCBsZWFrIGluIGByZHNfc2VuZF94bWl0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBSRFMgYW5kIFJETUEgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSRFMmIzM0OywKICAgICYjMzQ7UkRTX1JETUEmIzM0OywKICAgICYjMzQ7UkRTX1RDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fcmRzX3B1dF9tcl9maW5hbCYjMzQ7LAogICAgJiMzNDtfX3Jkc19yZG1hX21hcCYjMzQ7LAogICAgJiMzNDtyZHNfcmRtYV9mcmVlX29wJiMzNDssCiAgICAmIzM0O3Jkc19hdG9taWNfZnJlZV9vcCYjMzQ7LAogICAgJiMzNDtyZHNfY21zZ19yZG1hX2FyZ3MmIzM0OywKICAgICYjMzQ7cmRzX3NlbmRfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNvY2tldCByZWZjb3VudCBsZWFrIGluIFJEUyBSRE1BIG9wZXJhdGlvbnMgYnkgaG9sZGluZyBhIHNvY2tldCByZWZlcmVuY2UgaW4gYF9fcmRzX3JkbWFfbWFwYCBhbmQgYHJkc19jbXNnX3JkbWFfYXJnc2AgYW5kIHJlbGVhc2luZyBpdCBpbiBgX19yZHNfcHV0X21yX2ZpbmFsYC4gSXQgYWxzbyBtb2RpZmllcyBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgIHRvIHVzZSBub24tc2xlZXBpbmcgcGFnZSB1bnBpbm5pbmcgZnVuY3Rpb25zIHNpbmNlIHRoZXkgY2FuIGJlIGNhbGxlZCBmcm9tIHRhc2tsZXQgY29udGV4dC4gRmluYWxseSwgaXQgZml4ZXMgYSBtZXNzYWdlIHJlZmNvdW50IGxlYWsgaW4gYHJkc19zZW5kX3htaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIFJEUyBhbmQgUkRNQSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo0ODo1Ny4yNjM5MzgwNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzI4MjgxNjc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRFNcIixcbiAgICBcIlJEU19SRE1BXCIsXG4gICAgXCJSRFNfVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19yZHNfcHV0X21yX2ZpbmFsXCIsXG4gICAgXCJfX3Jkc19yZG1hX21hcFwiLFxuICAgIFwicmRzX3JkbWFfZnJlZV9vcFwiLFxuICAgIFwicmRzX2F0b21pY19mcmVlX29wXCIsXG4gICAgXCJyZHNfY21zZ19yZG1hX2FyZ3NcIixcbiAgICBcInJkc19zZW5kX3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHNvY2tldCByZWZjb3VudCBsZWFrIGluIFJEUyBSRE1BIG9wZXJhdGlvbnMgYnkgaG9sZGluZyBhIHNvY2tldCByZWZlcmVuY2UgaW4gYF9fcmRzX3JkbWFfbWFwYCBhbmQgYHJkc19jbXNnX3JkbWFfYXJnc2AgYW5kIHJlbGVhc2luZyBpdCBpbiBgX19yZHNfcHV0X21yX2ZpbmFsYC4gSXQgYWxzbyBtb2RpZmllcyBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgIHRvIHVzZSBub24tc2xlZXBpbmcgcGFnZSB1bnBpbm5pbmcgZnVuY3Rpb25zIHNpbmNlIHRoZXkgY2FuIGJlIGNhbGxlZCBmcm9tIHRhc2tsZXQgY29udGV4dC4gRmluYWxseSwgaXQgZml4ZXMgYSBtZXNzYWdlIHJlZmNvdW50IGxlYWsgaW4gYHJkc19zZW5kX3htaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIFJEUyBhbmQgUkRNQSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjQ4OjU3LjI2Mzk1NDU3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTY5MTE3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjOWRmNmMxMzMzZmIxZmEwODg0ODgzZDIyYWVmNjljNDMzNTRjZmNiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDExIDIxOjQ4OjU2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRtYS5jIGIvbmV0L3Jkcy9yZG1hLmNcXG5pbmRleCA2MWZiNmU0NTI4MWJmMS4uZmUyMjE5NjhmM2ZlNzMgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy9yZG1hLmNcXG4rKysgYi9uZXQvcmRzL3JkbWEuY1xcbkBAIC0xMTcsNiArMTE3LDcgQEAgdm9pZCBfX3Jkc19wdXRfbXJfZmluYWwoc3RydWN0IGtyZWYgKmtyZWYpXFxuIFxcdHN0cnVjdCByZHNfbXIgKm1yID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByZHNfbXIsIHJfa3JlZik7XFxuIFxcbiBcXHRyZHNfZGVzdHJveV9tcihtcik7XFxuK1xcdHNvY2tfcHV0KHJkc19yc190b19zayhtci1cXHUwMDNlcl9zb2NrKSk7XFxuIFxcdGtmcmVlKG1yKTtcXG4gfVxcbiBcXG5AQCAtMjQzLDcgKzI0NCwxMSBAQCBzdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsXFxuIFxcdGtyZWZfaW5pdChcXHUwMDI2bXItXFx1MDAzZXJfa3JlZik7XFxuIFxcdFJCX0NMRUFSX05PREUoXFx1MDAyNm1yLVxcdTAwM2VyX3JiX25vZGUpO1xcbiBcXHRtci1cXHUwMDNlcl90cmFucyA9IHJzLVxcdTAwM2Vyc190cmFuc3BvcnQ7XFxuK1xcdC8qIFRoZSBNUiBjYW4gb3V0bGl2ZSBpdHMgc29ja2V0OiBhIHNvY2tldCByZWZlcmVuY2UgaXMgaGVsZFxcbitcXHQgKiB1bnRpbCB0aGUgZmluYWwga3JlZiBpcyBkcm9wcGVkIGluIF9fcmRzX3B1dF9tcl9maW5hbCgpLlxcbitcXHQgKi9cXG4gXFx0bXItXFx1MDAzZXJfc29jayA9IHJzO1xcbitcXHRzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7XFxuIFxcbiBcXHRpZiAoYXJncy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRFNfUkRNQV9VU0VfT05DRSlcXG4gXFx0XFx0bXItXFx1MDAzZXJfdXNlX29uY2UgPSAxO1xcbkBAIC00OTUsOSArNTAwLDEzIEBAIHZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pXFxuIFxcbiBcXHRcXHRcXHQvKiBNYXJrIHBhZ2UgZGlydHkgaWYgaXQgd2FzIHBvc3NpYmx5IG1vZGlmaWVkLCB3aGljaFxcbiBcXHRcXHRcXHQgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlXFxuLVxcdFxcdFxcdCAqIHRvIGxvY2FsIG1lbW9yeVxcbitcXHRcXHRcXHQgKiB0byBsb2NhbCBtZW1vcnkuICBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgSUJcXG4rXFx0XFx0XFx0ICogc2VuZCBjb21wbGV0aW9uIHRhc2tsZXQsIHNvIHRoZSBzbGVlcGluZyBfbG9ja1xcbitcXHRcXHRcXHQgKiB2YXJpYW50IG11c3Qgbm90IGJlIHVzZWQgaGVyZS5cXG4gXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhcXHUwMDI2cGFnZSwgMSwgIXJvLVxcdTAwM2VvcF93cml0ZSk7XFxuK1xcdFxcdFxcdGlmICghcm8tXFx1MDAzZW9wX3dyaXRlKVxcbitcXHRcXHRcXHRcXHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcXG4rXFx0XFx0XFx0dW5waW5fdXNlcl9wYWdlKHBhZ2UpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuQEAgLTUxMyw4ICs1MjIsMTIgQEAgdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pXFxuIFxcbiBcXHQvKiBNYXJrIHBhZ2UgZGlydHkgaWYgaXQgd2FzIHBvc3NpYmx5IG1vZGlmaWVkLCB3aGljaFxcbiBcXHQgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlXFxuLVxcdCAqIHRvIGxvY2FsIG1lbW9yeSAqL1xcbi1cXHR1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soXFx1MDAyNnBhZ2UsIDEsIHRydWUpO1xcbitcXHQgKiB0byBsb2NhbCBtZW1vcnkuICBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgSUIgc2VuZFxcbitcXHQgKiBjb21wbGV0aW9uIHRhc2tsZXQsIHNvIHRoZSBzbGVlcGluZyBfbG9jayB2YXJpYW50IG11c3RcXG4rXFx0ICogbm90IGJlIHVzZWQgaGVyZS5cXG4rXFx0ICovXFxuK1xcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xcbitcXHR1bnBpbl91c2VyX3BhZ2UocGFnZSk7XFxuIFxcbiBcXHRrZnJlZShhby1cXHUwMDNlb3Bfbm90aWZpZXIpO1xcbiBcXHRhby1cXHUwMDNlb3Bfbm90aWZpZXIgPSBOVUxMO1xcbkBAIC03NDcsNiArNzYwLDEwIEBAIGludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRyZHNkZWJ1ZyhcXFwiTmVlZCBvZHA7IGxvY2FsX29kcF9tciAlcCB0cmFuc19wcml2YXRlICVwXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgbG9jYWxfb2RwX21yLCBsb2NhbF9vZHBfbXItXFx1MDAzZXJfdHJhbnNfcHJpdmF0ZSk7XFxuK1xcdFxcdFxcdC8qIEZyb20gaGVyZSBvbiB0aGUgTVIgaXMgdG9ybiBkb3duIHRocm91Z2hcXG4rXFx0XFx0XFx0ICogX19yZHNfcHV0X21yX2ZpbmFsKCksIHdoaWNoIGRyb3BzIHRoaXMgcmVmZXJlbmNlLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0c29ja19ob2xkKHJkc19yc190b19zayhycykpO1xcbiBcXHRcXHRcXHRvcC1cXHUwMDNlb3Bfb2RwX21yID0gbG9jYWxfb2RwX21yO1xcbiBcXHRcXHRcXHRvcC1cXHUwMDNlb3Bfb2RwX2FkZHIgPSBpb3YtXFx1MDAzZWFkZHI7XFxuIFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuY1xcbmluZGV4IDY4YmUxYmYwZTBhZGY5Li5hYjNhODM2NmM1M2JkOSAxMDA2NDRcXG4tLS0gYS9uZXQvcmRzL3NlbmQuY1xcbisrKyBiL25ldC9yZHMvc2VuZC5jXFxuQEAgLTMzOSw5ICszMzksMTcgQEAgaW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbiBcXHRcXHRcXHQgICAgKHJtLVxcdTAwM2VyZG1hLm9wX2FjdGl2ZSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgdGVzdF9iaXQoUkRTX01TR19SRVRSQU5TTUlUVEVELCBcXHUwMDI2cm0tXFx1MDAzZW1fZmxhZ3MpKSkge1xcbiBcXHRcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Y3AtXFx1MDAzZWNwX2xvY2ssIGZsYWdzKTtcXG4tXFx0XFx0XFx0XFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sIFxcdTAwMjZybS1cXHUwMDNlbV9mbGFncykpXFxuK1xcdFxcdFxcdFxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX01TR19PTl9DT05OLCBcXHUwMDI2cm0tXFx1MDAzZW1fZmxhZ3MpKSB7XFxuK1xcdFxcdFxcdFxcdFxcdC8qIG91ciByZWYgaXMgcHV0IGFmdGVyIHRoZSBiYXRjaCAqL1xcbiBcXHRcXHRcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNnJtLVxcdTAwM2VtX2Nvbm5faXRlbSwgXFx1MDAyNnRvX2JlX2Ryb3BwZWQpO1xcbi1cXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZjcC1cXHUwMDNlY3BfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZjcC1cXHUwMDNlY3BfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRcXHQvKiBhbHJlYWR5IG9mZiB0aGUgY29ubiBsaXN0OyBkcm9wXFxuK1xcdFxcdFxcdFxcdFxcdCAqIHRoZSByZWYgdGFrZW4gYWJvdmUgb3Vyc2VsdmVzXFxuK1xcdFxcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZjcC1cXHUwMDNlY3BfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRcXHRyZHNfbWVzc2FnZV9wdXQocm0pO1xcbitcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo0ODo1Ny41NjIwMjMzOTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjk4NDcyMTg4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRFNcIixcbiAgICBcIlJEU19SRE1BXCIsXG4gICAgXCJSRFNfVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19yZHNfcHV0X21yX2ZpbmFsXCIsXG4gICAgXCJfX3Jkc19yZG1hX21hcFwiLFxuICAgIFwicmRzX3JkbWFfZnJlZV9vcFwiLFxuICAgIFwicmRzX2F0b21pY19mcmVlX29wXCIsXG4gICAgXCJyZHNfY21zZ19yZG1hX2FyZ3NcIixcbiAgICBcInJkc19zZW5kX3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHNvY2tldCByZWZjb3VudCBsZWFrIGluIFJEUyBSRE1BIG9wZXJhdGlvbnMgYnkgaG9sZGluZyBhIHNvY2tldCByZWZlcmVuY2UgaW4gYF9fcmRzX3JkbWFfbWFwYCBhbmQgYHJkc19jbXNnX3JkbWFfYXJnc2AgYW5kIHJlbGVhc2luZyBpdCBpbiBgX19yZHNfcHV0X21yX2ZpbmFsYC4gSXQgYWxzbyBtb2RpZmllcyBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgIHRvIHVzZSBub24tc2xlZXBpbmcgcGFnZSB1bnBpbm5pbmcgZnVuY3Rpb25zIHNpbmNlIHRoZXkgY2FuIGJlIGNhbGxlZCBmcm9tIHRhc2tsZXQgY29udGV4dC4gRmluYWxseSwgaXQgZml4ZXMgYSBtZXNzYWdlIHJlZmNvdW50IGxlYWsgaW4gYHJkc19zZW5kX3htaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIFJEUyBhbmQgUkRNQSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzlkZjZjMTMzM2ZiMWZhMDg4NDg4M2QyMmFlZjY5YzQzMzU0Y2ZjYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDExIDIxOjQ4OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hLmMgYi9uZXQvcmRzL3JkbWEuY1xuaW5kZXggNjFmYjZlNDUyODFiZjEuLmZlMjIxOTY4ZjNmZTczIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9yZG1hLmNcbisrKyBiL25ldC9yZHMvcmRtYS5jXG5AQCAtMTE3LDYgKzExNyw3IEBAIHZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKVxuIFx0c3RydWN0IHJkc19tciAqbXIgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJkc19tciwgcl9rcmVmKTtcbiBcbiBcdHJkc19kZXN0cm95X21yKG1yKTtcbitcdHNvY2tfcHV0KHJkc19yc190b19zayhtci1cdTAwM2VyX3NvY2spKTtcbiBcdGtmcmVlKG1yKTtcbiB9XG4gXG5AQCAtMjQzLDcgKzI0NCwxMSBAQCBzdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsXG4gXHRrcmVmX2luaXQoXHUwMDI2bXItXHUwMDNlcl9rcmVmKTtcbiBcdFJCX0NMRUFSX05PREUoXHUwMDI2bXItXHUwMDNlcl9yYl9ub2RlKTtcbiBcdG1yLVx1MDAzZXJfdHJhbnMgPSBycy1cdTAwM2Vyc190cmFuc3BvcnQ7XG4rXHQvKiBUaGUgTVIgY2FuIG91dGxpdmUgaXRzIHNvY2tldDogYSBzb2NrZXQgcmVmZXJlbmNlIGlzIGhlbGRcbitcdCAqIHVudGlsIHRoZSBmaW5hbCBrcmVmIGlzIGRyb3BwZWQgaW4gX19yZHNfcHV0X21yX2ZpbmFsKCkuXG4rXHQgKi9cbiBcdG1yLVx1MDAzZXJfc29jayA9IHJzO1xuK1x0c29ja19ob2xkKHJkc19yc190b19zayhycykpO1xuIFxuIFx0aWYgKGFyZ3MtXHUwMDNlZmxhZ3MgXHUwMDI2IFJEU19SRE1BX1VTRV9PTkNFKVxuIFx0XHRtci1cdTAwM2VyX3VzZV9vbmNlID0gMTtcbkBAIC00OTUsOSArNTAwLDEzIEBAIHZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pXG4gXG4gXHRcdFx0LyogTWFyayBwYWdlIGRpcnR5IGlmIGl0IHdhcyBwb3NzaWJseSBtb2RpZmllZCwgd2hpY2hcbiBcdFx0XHQgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlXG4tXHRcdFx0ICogdG8gbG9jYWwgbWVtb3J5XG4rXHRcdFx0ICogdG8gbG9jYWwgbWVtb3J5LiAgVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIElCXG4rXHRcdFx0ICogc2VuZCBjb21wbGV0aW9uIHRhc2tsZXQsIHNvIHRoZSBzbGVlcGluZyBfbG9ja1xuK1x0XHRcdCAqIHZhcmlhbnQgbXVzdCBub3QgYmUgdXNlZCBoZXJlLlxuIFx0XHRcdCAqL1xuLVx0XHRcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhcdTAwMjZwYWdlLCAxLCAhcm8tXHUwMDNlb3Bfd3JpdGUpO1xuK1x0XHRcdGlmICghcm8tXHUwMDNlb3Bfd3JpdGUpXG4rXHRcdFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbitcdFx0XHR1bnBpbl91c2VyX3BhZ2UocGFnZSk7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC01MTMsOCArNTIyLDEyIEBAIHZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKVxuIFxuIFx0LyogTWFyayBwYWdlIGRpcnR5IGlmIGl0IHdhcyBwb3NzaWJseSBtb2RpZmllZCwgd2hpY2hcbiBcdCAqIGlzIHRoZSBjYXNlIGZvciBhIFJETUFfUkVBRCB3aGljaCBjb3BpZXMgZnJvbSByZW1vdGVcbi1cdCAqIHRvIGxvY2FsIG1lbW9yeSAqL1xuLVx0dW5waW5fdXNlcl9wYWdlc19kaXJ0eV9sb2NrKFx1MDAyNnBhZ2UsIDEsIHRydWUpO1xuK1x0ICogdG8gbG9jYWwgbWVtb3J5LiAgVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIElCIHNlbmRcbitcdCAqIGNvbXBsZXRpb24gdGFza2xldCwgc28gdGhlIHNsZWVwaW5nIF9sb2NrIHZhcmlhbnQgbXVzdFxuK1x0ICogbm90IGJlIHVzZWQgaGVyZS5cbitcdCAqL1xuK1x0c2V0X3BhZ2VfZGlydHkocGFnZSk7XG4rXHR1bnBpbl91c2VyX3BhZ2UocGFnZSk7XG4gXG4gXHRrZnJlZShhby1cdTAwM2VvcF9ub3RpZmllcik7XG4gXHRhby1cdTAwM2VvcF9ub3RpZmllciA9IE5VTEw7XG5AQCAtNzQ3LDYgKzc2MCwxMCBAQCBpbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG4gXHRcdFx0fVxuIFx0XHRcdHJkc2RlYnVnKFwiTmVlZCBvZHA7IGxvY2FsX29kcF9tciAlcCB0cmFuc19wcml2YXRlICVwXFxuXCIsXG4gXHRcdFx0XHQgbG9jYWxfb2RwX21yLCBsb2NhbF9vZHBfbXItXHUwMDNlcl90cmFuc19wcml2YXRlKTtcbitcdFx0XHQvKiBGcm9tIGhlcmUgb24gdGhlIE1SIGlzIHRvcm4gZG93biB0aHJvdWdoXG4rXHRcdFx0ICogX19yZHNfcHV0X21yX2ZpbmFsKCksIHdoaWNoIGRyb3BzIHRoaXMgcmVmZXJlbmNlLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHNvY2tfaG9sZChyZHNfcnNfdG9fc2socnMpKTtcbiBcdFx0XHRvcC1cdTAwM2VvcF9vZHBfbXIgPSBsb2NhbF9vZHBfbXI7XG4gXHRcdFx0b3AtXHUwMDNlb3Bfb2RwX2FkZHIgPSBpb3YtXHUwMDNlYWRkcjtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmNcbmluZGV4IDY4YmUxYmYwZTBhZGY5Li5hYjNhODM2NmM1M2JkOSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvc2VuZC5jXG4rKysgYi9uZXQvcmRzL3NlbmQuY1xuQEAgLTMzOSw5ICszMzksMTcgQEAgaW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIFx0XHRcdCAgICAocm0tXHUwMDNlcmRtYS5vcF9hY3RpdmUgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgIHRlc3RfYml0KFJEU19NU0dfUkVUUkFOU01JVFRFRCwgXHUwMDI2cm0tXHUwMDNlbV9mbGFncykpKSB7XG4gXHRcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZjcC1cdTAwM2VjcF9sb2NrLCBmbGFncyk7XG4tXHRcdFx0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19NU0dfT05fQ09OTiwgXHUwMDI2cm0tXHUwMDNlbV9mbGFncykpXG4rXHRcdFx0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19NU0dfT05fQ09OTiwgXHUwMDI2cm0tXHUwMDNlbV9mbGFncykpIHtcbitcdFx0XHRcdFx0Lyogb3VyIHJlZiBpcyBwdXQgYWZ0ZXIgdGhlIGJhdGNoICovXG4gXHRcdFx0XHRcdGxpc3RfbW92ZShcdTAwMjZybS1cdTAwM2VtX2Nvbm5faXRlbSwgXHUwMDI2dG9fYmVfZHJvcHBlZCk7XG4tXHRcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmNwLVx1MDAzZWNwX2xvY2ssIGZsYWdzKTtcbitcdFx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjcC1cdTAwM2VjcF9sb2NrLCBmbGFncyk7XG4rXHRcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0XHQvKiBhbHJlYWR5IG9mZiB0aGUgY29ubiBsaXN0OyBkcm9wXG4rXHRcdFx0XHRcdCAqIHRoZSByZWYgdGFrZW4gYWJvdmUgb3Vyc2VsdmVzXG4rXHRcdFx0XHRcdCAqL1xuK1x0XHRcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmNwLVx1MDAzZWNwX2xvY2ssIGZsYWdzKTtcbitcdFx0XHRcdFx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcbitcdFx0XHRcdH1cbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjQ4OjU3LjU2MjAyNTQ2OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NjA2NzQ3MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUkRTIFBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBwb2tpbmcgYXJvdW5kIGluIHRoZSBSRFMgc3Vic3lzdGVtIOKAkyBzcGVjaWZpY2FsbHkgYG5ldC9yZHMvcmRtYS5jYCBhbmQgYG5ldC9yZHMvc2VuZC5jYC4gTXkgaW5pdGlhbCByZWFkIHN1Z2dlc3RzIHNvbWUgaW1wb3J0YW50IHJlZmFjdG9yaW5nIGFyb3VuZCBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgcmVsYXRlZCB0byBSRE1BIG9wZXJhdGlvbnMuIFRoZXkndmUgYWRkZWQgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyB1c2luZyBgc29ja19ob2xkYCBhbmQgYHNvY2tfcHV0YCB3aXRoaW4gYHJkc19tcmAgYW5kIGByZHNfY21zZ19yZG1hX2FyZ3NgLCB3aGljaCBpcyBzbWFydC4gRW5zdXJlcyB0aGUgc29ja2V0IG91dGxpdmVzIHRoZSBtZW1vcnkgcmVnaW9uLCB3aGljaCBpcyBhIGNvbW1vbiBzb3VyY2Ugb2Ygc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MuIFRoZSBvdGhlciBjaGFuZ2Ugd2l0aCByZXBsYWNpbmcgYHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9ja2Agd2l0aCBgc2V0X3BhZ2VfZGlydHlgIGFuZCBgdW5waW5fdXNlcl9wYWdlYCBpbiBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgIGJlY2F1c2UgaXQncyBpbiBhIHRhc2tsZXQgY29udGV4dCBpcyBhIGdvb2QgbW92ZSB0b28g4oCTIGF2b2lkcyBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMuIEZpbmFsbHksIGZpeGluZyB0aGF0IHJlZmNvdW50IGxlYWsgaW4gYHJkc19zZW5kX3htaXRgIHdoZW4gbWVzc2FnZXMgYXJlIGFscmVhZHkgb2ZmIHRoZSBjb25uZWN0aW9uIGxpc3Q/IERlZmluaXRlbHkgYSB3aW4hXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gUkRTJ3MgYmVoYXZpb3VyLiBJdCBhbHRlcnMgaG93IGl0IGhhbmRsZXMgcmVzb3VyY2VzLCBlc3BlY2lhbGx5IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzb2NrZXQgbGlmZXNwYW4sIGluIFJETUEgb3BlcmF0aW9ucy4gSSB3b3VsZCBjb25zaWRlciB0aGlzIGEgaGlnaC1wcmlvcml0eSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgaXQgdG91Y2hlcyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbmV0d29yayBpbnRlcmFjdGlvbnM7IHRob3NlIGFyZSBhbHdheXMgcmlza3kgYXJlYXMuXG5cbk5vdywgbGV0J3MgZmlndXJlIG91dCBob3cgdG8gYnVpbGQgdGhpcyB3aXRoIGZ1enppbmcgZW5hYmxlZC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGltZSB0byBzZWFyY2ggdGhlIGtlcm5lbCBjb25maWcgZm9yIGBDT05GSUdfUkRTYCBvciBhbnl0aGluZyByZWxhdGVkLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk1NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjQ5OjAyLjMyMjcwMjkxOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTE5MDc1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL0tjb25maWctMi1cXG5uZXQvcmRzL0tjb25maWc6Mzpjb25maWcgUkRTXFxubmV0L3Jkcy9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIlRoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXFxcIlxcbi0tXFxubmV0L3Jkcy9LY29uZmlnLTktXFxubmV0L3Jkcy9LY29uZmlnOjEwOmNvbmZpZyBSRFNfUkRNQVxcbm5ldC9yZHMvS2NvbmZpZy0xMS1cXHR0cmlzdGF0ZSBcXFwiUkRTIG92ZXIgSW5maW5pYmFuZFxcXCJcXG4tLVxcbm5ldC9yZHMvS2NvbmZpZy0xNi1cXG5uZXQvcmRzL0tjb25maWc6MTc6Y29uZmlnIFJEU19UQ1BcXG5uZXQvcmRzL0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcIlJEUyBvdmVyIFRDUFxcXCJcXG4tLVxcbm5ldC9yZHMvS2NvbmZpZy0yNC1cXG5uZXQvcmRzL0tjb25maWc6MjU6Y29uZmlnIFJEU19ERUJVR1xcbm5ldC9yZHMvS2NvbmZpZy0yNi1cXHRib29sIFxcXCJSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo0OTowMi4zNzc5MDE5NThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQ3OTYyOTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipFeGFtaW5pbmcgdGhlIFJEUy9SRE1BIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIGBSRFNgIGFzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZWxlbWVudCBoZXJlLiBJIGltbWVkaWF0ZWx5IGhhdmUgYSBodW5jaCB0aGF0IGBSRFNfUkRNQWAgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IOKAkyBwcm9iYWJseSAqY3J1Y2lhbCog4oCTIGZvciB0aGUgcHJvcGVyIGhhbmRsaW5nIG9mIGBuZXQvcmRzL3JkbWEuY2AuIEl0J3MgYSBjbGFzc2ljIHNjZW5hcmlvOyBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhhdCBSRE1BIGltcGxlbWVudGF0aW9uIGlzIGNvbXBpbGVkIGludG8gdGhlIG1vZHVsZSBjb25kaXRpb25hbGx5LiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBuZXQvcmRzL01ha2VmaWxlYCBhbmQgc2VlIGlmIGByZG1hLmNgIGhhcyBhbnkgYnVpbGQgZGlyZWN0aXZlcyBhcm91bmQgaXQuIFRoYXQnbGwgdGVsbCBtZSBpZiBgUkRTX1JETUFgIGFjdHVhbGx5IGNvbnRyb2xzIHdoZXRoZXIgdGhhdCBSRE1BIGZ1bmN0aW9uYWxpdHkgaXMgaW5jbHVkZWQuIEkgbmVlZCB0aGF0IGJ1aWxkIHByb2Nlc3MgaW5mb3JtYXRpb24gYXMgcGFydCBvZiBteSBvdmVydmlldy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc1MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjQ5OjA1LjUyNTg2NzI0NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTM1NDY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZG1hXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9NYWtlZmlsZT0zPXJkcy15IDo9XFx0YWZfcmRzLm8gYmluZC5vIGNvbmcubyBjb25uZWN0aW9uLm8gaW5mby5vIG1lc3NhZ2UubyAgIFxcXFxcXG5uZXQvcmRzL01ha2VmaWxlLTQtXFx0XFx0XFx0cmVjdi5vIHNlbmQubyBzdGF0cy5vIHN5c2N0bC5vIHRocmVhZHMubyB0cmFuc3BvcnQubyBcXFxcXFxubmV0L3Jkcy9NYWtlZmlsZTo1OlxcdFxcdFxcdGxvb3AubyBwYWdlLm8gcmRtYS5vXFxubmV0L3Jkcy9NYWtlZmlsZS02LVxcbm5ldC9yZHMvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfUkRTX1JETUEpICs9IHJkc19yZG1hLm9cXG5uZXQvcmRzL01ha2VmaWxlLTgtcmRzX3JkbWEteSA6PVxcdHJkbWFfdHJhbnNwb3J0Lm8gXFxcXFxcbm5ldC9yZHMvTWFrZWZpbGUtOS1cXHRcXHRcXHRpYi5vIGliX2NtLm8gaWJfcmVjdi5vIGliX3JpbmcubyBpYl9zZW5kLm8gaWJfc3RhdHMubyBcXFxcXFxubmV0L3Jkcy9NYWtlZmlsZToxMDpcXHRcXHRcXHRpYl9zeXNjdGwubyBpYl9yZG1hLm8gaWJfZnJtci5vXFxubmV0L3Jkcy9NYWtlZmlsZS0xMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjE6NDk6MDUuNTgxMjI4MzQ1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY1MzU1MjI2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUkRTL1JETUEgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGtlcm5lbCBtb2R1bGUgc3R1ZmYuIEl0IHNlZW1zIGByZG1hLm9gIGlzIGJha2VkIGluIHdpdGggYHJkcy15YCwgYW5kIHRoZXJlZm9yZSBpcyBidWlsdCB3aGVuIGBDT05GSUdfUkRTYCBpcyBlbmFibGVkLiBTaW1pbGFybHksIGByZHNfcmRtYS5vYCBnZXRzIGNvbXBpbGVkIG9ubHkgd2hlbiBgQ09ORklHX1JEU19SRE1BYCBpcyBzZXQuIFRoZSBmaWxlIHRoYXQncyBiZWVuIG1vZGlmaWVkLCBgbmV0L3Jkcy9yZG1hLmNgLCByZWxhdGVzIGRpcmVjdGx5IHRvIGByZG1hLm9gLCBzbyBpbnR1aXRpdmVseSwgYENPTkZJR19SRFNgIHNob3VsZCBiZSBlbm91Z2ggdG8gaW5jb3Jwb3JhdGUgdGhvc2UgY2hhbmdlcy4gQnV0IHdhaXQgYSBzZWMuLi4gYG5ldC9yZHMvcmRtYS5jYCAqaGFuZGxlcyogUkRNQSBvcGVyYXRpb25zIGZvciBSRFMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYFJEU19SRE1BYCBpc24ndCByZXF1aXJlZCB0byBhY3R1YWxseSAqdXNlKiB0aGUgUkRNQSBiaXRzIHdpdGhpbiB0aGF0IGZpbGUsIHNvIGxldCBtZSBkZWx2ZSBkZWVwZXIuXG5cbkxldCdzIHNlZSwgdGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnM6IGBfX3Jkc19wdXRfbXJfZmluYWxgLCBgX19yZHNfcmRtYV9tYXBgLCBgcmRzX3JkbWFfZnJlZV9vcGAsIGByZHNfYXRvbWljX2ZyZWVfb3BgLCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCwgYW5kIGByZHNfc2VuZF94bWl0YC4gSGFuZyBvbi4uLiBgcmRzX3NlbmRfeG1pdGAgaXMgYWN0dWFsbHkgaW4gYG5ldC9yZHMvc2VuZC5jYCwgd2hpY2ggaXMgYWxzbyBpbmNsdWRlZCBpbiB0aGUgYHJkcy15YCBtb2R1bGUuXG5cbkFscmlnaHQsIHRpbWUgdG8gZm9jdXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBvbmVzIHRoYXQgZGVtYW5kIGZ1cnRoZXIgc2NydXRpbnkuXG5cblNvLCBoZXJlJ3MgbXkgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMsIGFnYWluOlxuLSBgX19yZHNfcHV0X21yX2ZpbmFsYFxuLSBgX19yZHNfcmRtYV9tYXBgXG4tIGByZHNfcmRtYV9mcmVlX29wYFxuLSBgcmRzX2F0b21pY19mcmVlX29wYFxuLSBgcmRzX2Ntc2dfcmRtYV9hcmdzYFxuLSBgcmRzX3NlbmRfeG1pdGBcblxuYHJkc19zZW5kX3htaXRgIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBob3QgcGF0aCDigJMgdGhhdCdzIHRoZSBtZXNzYWdlIHRyYW5zbWlzc2lvbiBmdW5jdGlvbiwgc28gdGhhdCdzIGRlZmluaXRlbHkgYSBjYW5kaWRhdGUuIGBfX3Jkc19yZG1hX21hcGAgYW5kIGByZHNfY21zZ19yZG1hX2FyZ3NgIGxvb2sgcHJvbWlzaW5nIHRvbywgdGhleSBhcmUgcHJvYmFibHkgaW52b2x2ZWQgaW4gc2V0dGluZyB1cCB0aGUgUkRNQSBtYXBwaW5ncy4gUGx1cywgYHJkc19yZG1hX2ZyZWVfb3BgIGFuZCBgcmRzX2F0b21pY19mcmVlX29wYCBhcmUgdmVyeSBsaWtlbHkgaW52b2x2ZWQgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIHRvIHRoZSBSRE1BIHRyYW5zZmVycywgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZS5cblxuSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGRvdWJsZS1jaGVja2luZyB0aGUgY29kZSBpbiBgcmRzX2Ntc2dfcmRtYV9hcmdzYCBhbmQgYF9fcmRzX3JkbWFfbWFwYCB0byBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNDcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjE6NDk6MTIuMjM0NzgyOTI3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Nzg1ODkyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZHNfY21zZ19yZG1hX2FyZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9yZG1hLmM9NTY2PWludCByZHNfcmRtYV9leHRyYV9zaXplKHN0cnVjdCByZHNfcmRtYV9hcmdzICphcmdzLFxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtNjE3LSAqL1xcbm5ldC9yZHMvcmRtYS5jOjYxODppbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXFxubmV0L3Jkcy9yZG1hLmMtNjE5LVxcdFxcdCAgICAgICBzdHJ1Y3QgY21zZ2hkciAqY21zZyxcXG4tLVxcbm5ldC9yZHMvcmRzLmg9OTY2PWludCByZHNfY21zZ19yZG1hX2Rlc3Qoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG5uZXQvcmRzL3Jkcy5oLTk2Ny1cXHRcXHRcXHQgIHN0cnVjdCBjbXNnaGRyICpjbXNnKTtcXG5uZXQvcmRzL3Jkcy5oOjk2ODppbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXFxubmV0L3Jkcy9yZHMuaC05NjktXFx0XFx0XFx0ICBzdHJ1Y3QgY21zZ2hkciAqY21zZyxcXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTEwNTM9c3RhdGljIGludCByZHNfY21zZ19zZW5kKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXFxuLS1cXG5uZXQvcmRzL3NlbmQuYy0xMDczLVxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm5ldC9yZHMvc2VuZC5jOjEwNzQ6XFx0XFx0XFx0cmV0ID0gcmRzX2Ntc2dfcmRtYV9hcmdzKHJzLCBybSwgY21zZywgXFx1MDAyNnZjdC1cXHUwMDNldmVjW2luZF0pO1xcbm5ldC9yZHMvc2VuZC5jLTEwNzUtXFx0XFx0XFx0aW5kKys7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjQ5OjEyLjM5MjY0NjQyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwOTk5ODQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQSBDb250cm9sIE1lc3NhZ2UgQm9uYW56YSEqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IFJETUEgYW5kIG1lc3NhZ2UgaGFuZGxpbmcuIEV4Y2VsbGVudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHJkc19jbXNnX3JkbWFfYXJnc2AgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEl0J3MgdHJpZ2dlcmVkIGR1cmluZyBzZW5kLXNpZGUgY29udHJvbCBtZXNzYWdlIHBhcnNpbmcg4oCTIHdoaWNoIHNjcmVhbXMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgcG9pbnRzIGR1ZSB0byB0aGUgY29tcGxleGl0eSBhbmQgdmFyaWFiaWxpdHkgb2YgdXNlci1zdXBwbGllZCBkYXRhLiBUaGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiBmdW5jdGlvbiB0aGF0IGxvdmVzIHRvIHJldmVhbCBzdWJ0bGUgZmxhd3Mgd2hlbiBmZWQgbWFsZm9ybWVkIGlucHV0LiBUaGlzIGlzIHdoZXJlIEkgd291bGQgc3RhcnQgbXkgZnV6emluZyBjYW1wYWlnbi5cblxuTm93LCBsZXQncyBkaWcgYSBiaXQgZGVlcGVyLiBJIHNlZSBgX19yZHNfcmRtYV9tYXBgIGdldHMgY2FsbGVkIGZyb20gYHJkc19nZXRfbXJgLiBUaGlzIGlzIGludGVyZXN0aW5nLiBgcmRzX2dldF9tcmAgc291bmRzIGxpa2UgaXQgaGFuZGxlcyBtZW1vcnkgcmVnaW9ucywgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgUkRNQSBzZXR1cC4gVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93IGlzIHdoZXJlIGByZHNfZ2V0X21yYCBpcyBjYWxsZWQgZnJvbS4gSXMgdGhpcyBhbiBpb2N0bCBjYWxsLCBhIHNldHNvY2tvcHQsIG9yIHBlcmhhcHMgc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEtub3dpbmcgdGhpcyBjYWxsaW5nIGNvbnRleHQgd2lsbCBiZSB2aXRhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXR0YWNrIHN1cmZhY2UgYW5kIGhvdyB0byBleHBsb2l0IHBvdGVudGlhbCBmbGF3cy4gSXQgd2lsbCBndWlkZSBtZSBvbiB3aGVyZSB0byBwbGFjZSB0aGUgZnV6emluZyBoYXJuZXNzLiBUaGF0J3MgdGhlIG5leHQgdGhpbmcgdG8gaW52ZXN0aWdhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MDMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo0OToxNi4xMDI2NDc4MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkyMDc1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19yZHNfcmRtYV9tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9yZG1hLmM9MTU1PXN0YXRpYyBpbnQgcmRzX3Bpbl9wYWdlcyh1bnNpZ25lZCBsb25nIHVzZXJfYWRkciwgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtMTcyLVxcbm5ldC9yZHMvcmRtYS5jOjE3MzpzdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsXFxubmV0L3Jkcy9yZG1hLmMtMTc0LVxcdFxcdFxcdCAgdTY0ICpjb29raWVfcmV0LCBzdHJ1Y3QgcmRzX21yICoqbXJfcmV0LFxcbi0tXFxubmV0L3Jkcy9yZG1hLmM9MzYwPWludCByZHNfZ2V0X21yKHN0cnVjdCByZHNfc29jayAqcnMsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy0zNjktXFxubmV0L3Jkcy9yZG1hLmM6MzcwOlxcdHJldHVybiBfX3Jkc19yZG1hX21hcChycywgXFx1MDAyNmFyZ3MsIE5VTEwsIE5VTEwsIE5VTEwpO1xcbm5ldC9yZHMvcmRtYS5jLTM3MS19XFxuLS1cXG5uZXQvcmRzL3JkbWEuYz0zNzM9aW50IHJkc19nZXRfbXJfZm9yX2Rlc3Qoc3RydWN0IHJkc19zb2NrICpycywgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTM5My1cXG5uZXQvcmRzL3JkbWEuYzozOTQ6XFx0cmV0dXJuIF9fcmRzX3JkbWFfbWFwKHJzLCBcXHUwMDI2bmV3X2FyZ3MsIE5VTEwsIE5VTEwsIE5VTEwpO1xcbm5ldC9yZHMvcmRtYS5jLTM5NS19XFxuLS1cXG5uZXQvcmRzL3JkbWEuYz04NjQ9aW50IHJkc19jbXNnX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy04NzAtXFxubmV0L3Jkcy9yZG1hLmM6ODcxOlxcdHJldHVybiBfX3Jkc19yZG1hX21hcChycywgQ01TR19EQVRBKGNtc2cpLCBcXHUwMDI2cm0tXFx1MDAzZW1fcmRtYV9jb29raWUsXFxubmV0L3Jkcy9yZG1hLmMtODcyLVxcdFxcdFxcdCAgICAgIFxcdTAwMjZybS1cXHUwMDNlcmRtYS5vcF9yZG1hX21yLCBybS1cXHUwMDNlbV9jb25uX3BhdGgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo0OToxNi4xNjE4NTc3M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTUwNzA5NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRm9jdXNpbmcgb24gUkRNQSBNYXBwaW5nIGFuZCBGcmVlIE9wZXJhdGlvbnMqKlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgX19yZHNfcmRtYV9tYXBgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gZGlzc2VjdCBoZXJlLiBJIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGByZHNfZ2V0X21yYCwgYHJkc19nZXRfbXJfZm9yX2Rlc3RgLCBhbmQgYHJkc19jbXNnX3JkbWFfbWFwYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLCB0aGF0IG1lYW5zIHRoZXNlIGFyZSBwb3RlbnRpYWxseSB1c2VyLWFjY2Vzc2libGUgdmlhIGBzZXRzb2Nrb3B0YCBhbmQgYHNlbmRtc2dgLiBTaW5jZSB0aG9zZSBzeXNjYWxscyBhcmUgdGhlIGludGVyZmFjZSB0byB1c2Vyc3BhY2UgZm9yIHRoZXNlIGZ1bmN0aW9ucywgYF9fcmRzX3JkbWFfbWFwYCBhbmQgaXRzIGFzc29jaWF0ZWQgc3RydWN0dXJlIGByZHNfY21zZ19yZG1hX2FyZ3NgIGFyZSBjbGVhcmx5IHRoZSBmb2NhbCBwb2ludHMgb2YgYW55IGludmVzdGlnYXRpb24gaW50byB0aGlzIFJETUEgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlbSBmdWxseS5cblxuTmV4dCwgSSBzaG91bGQgbG9vayBjbG9zZWx5IGF0IGByZHNfcmRtYV9mcmVlX29wYCBhbmQgYHJkc19hdG9taWNfZnJlZV9vcGAuIFRoZSBtYXBwaW5nIGFuZCB1bm1hcHBpbmcvZnJlZWluZyBvcGVyYXRpb25zIGFyZSBhbHdheXMgdGhlIGNyaXRpY2FsIHBvaW50cyB0byBhbmFseXplIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3VlcywgZXNwZWNpYWxseSBpbiBSRE1BIGNvbnRleHRzIHdoZXJlIG1lbW9yeSBpcyBiZWluZyBwaW5uZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NzMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjE6NDk6MjIuNzEyNTY5OTE5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjkyNTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZHNfcmRtYV9mcmVlX29wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvbWVzc2FnZS5jPTEzMj1zdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbi0tXFxubmV0L3Jkcy9tZXNzYWdlLmMtMTc0LVxcdGlmIChybS1cXHUwMDNlcmRtYS5vcF9hY3RpdmUpXFxubmV0L3Jkcy9tZXNzYWdlLmM6MTc1OlxcdFxcdHJkc19yZG1hX2ZyZWVfb3AoXFx1MDAyNnJtLVxcdTAwM2VyZG1hKTtcXG5uZXQvcmRzL21lc3NhZ2UuYy0xNzYtXFx0aWYgKHJtLVxcdTAwM2VyZG1hLm9wX3JkbWFfbXIpXFxuLS1cXG5uZXQvcmRzL3JkbWEuYz00NDY9dm9pZCByZHNfcmRtYV91bnVzZShzdHJ1Y3QgcmRzX3NvY2sgKnJzLCB1MzIgcl9rZXksIGludCBmb3JjZSlcXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTQ5MC1cXG5uZXQvcmRzL3JkbWEuYzo0OTE6dm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybylcXG5uZXQvcmRzL3JkbWEuYy00OTIte1xcbi0tXFxubmV0L3Jkcy9yZG1hLmM9NjE4PWludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTgwOS1cXHRpZiAocmV0KVxcbm5ldC9yZHMvcmRtYS5jOjgxMDpcXHRcXHRyZHNfcmRtYV9mcmVlX29wKG9wKTtcXG5uZXQvcmRzL3JkbWEuYy04MTEtXFx0ZWxzZVxcbi0tXFxubmV0L3Jkcy9yZHMuaD05NzE9aW50IHJkc19jbXNnX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXFxubmV0L3Jkcy9yZHMuaC05NzItXFx0XFx0XFx0ICBzdHJ1Y3QgY21zZ2hkciAqY21zZyk7XFxubmV0L3Jkcy9yZHMuaDo5NzM6dm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybyk7XFxubmV0L3Jkcy9yZHMuaC05NzQtdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo0OToyMi43Njk1MDAzOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODMyMzE4OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6NjQ4MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjE6NDk6MjkuNjAxODIyMTUxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDg4Mzk5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZHNfYXRvbWljX2ZyZWVfb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9tZXNzYWdlLmM9MTMyPXN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3B1cmdlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXFxuLS1cXG5uZXQvcmRzL21lc3NhZ2UuYy0xNzktXFx0aWYgKHJtLVxcdTAwM2VhdG9taWMub3BfYWN0aXZlKVxcbm5ldC9yZHMvbWVzc2FnZS5jOjE4MDpcXHRcXHRyZHNfYXRvbWljX2ZyZWVfb3AoXFx1MDAyNnJtLVxcdTAwM2VhdG9taWMpO1xcbm5ldC9yZHMvbWVzc2FnZS5jLTE4MS1cXHRpZiAocm0tXFx1MDAzZWF0b21pYy5vcF9yZG1hX21yKVxcbi0tXFxubmV0L3Jkcy9yZG1hLmM9NDkxPXZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy01MTgtXFxubmV0L3Jkcy9yZG1hLmM6NTE5OnZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKVxcbm5ldC9yZHMvcmRtYS5jLTUyMC17XFxuLS1cXG5uZXQvcmRzL3Jkcy5oPTk3Mz12b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKTtcXG5uZXQvcmRzL3Jkcy5oOjk3NDp2b2lkIHJkc19hdG9taWNfZnJlZV9vcChzdHJ1Y3Qgcm1fYXRvbWljX29wICphbyk7XFxubmV0L3Jkcy9yZHMuaC05NzUtdm9pZCByZHNfcmRtYV9zZW5kX2NvbXBsZXRlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sIGludCB3Y19zdGF0dXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo0OToyOS42NjY3MTA3MjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk2Nzk4MDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29kZSBwYXRocy5cblxuKipFeGFtaW5pbmcgUG90ZW50aWFsIENsZWFudXAgQ2FuZGlkYXRlcyBpbiBSRFMqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIHdlIG1pZ2h0IGJlIGFibGUgdG8gaW1wcm92ZSBtZXNzYWdlIGhhbmRsaW5nLiBMb29raW5nIGF0IHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcywgSSdtIGZvY3VzaW5nIG9uIGFyZWFzIHdoZXJlIHdlJ3JlIHJlbGVhc2luZyByZXNvdXJjZXMgb3IgaGFuZGxpbmcgZXJyb3JzLiBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgIGltbWVkaWF0ZWx5IHNwcmluZyB0byBtaW5kLiBTZWVtcyBsaWtlIHRoZXkncmUgY2FsbGVkIGR1cmluZyBtZXNzYWdlIHB1cmdpbmcgb3IgaW4gZXJyb3Igc2NlbmFyaW9zLCB3aGljaCBzdWdnZXN0cyB0aGV5IGNvdWxkIGJlIHdvcnRod2hpbGUgdGFyZ2V0cyBmb3IgcmVmaW5lbWVudC4gTmVlZCB0byBleGFtaW5lIHdoYXQgdGhlaXIgcm9sZXMgYXJlLlxuXG5Ob3csIGxldCdzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgcmRzX3NlbmRfeG1pdGAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3Bwb3J0dW5pdGllcyBpbiB0aGUgc2VuZCBwYXRoLCBzaW5jZSB0aGlzIGlzIGEgY3JpdGljYWwgc3BvdCBmb3IgcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NzMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo0OTozNS42MzQ2OTI5NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgzMzQ3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmRzX3NlbmRfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2NvbmcuYz0yMTc9dm9pZCByZHNfY29uZ19xdWV1ZV91cGRhdGVzKHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcClcXG4tLVxcbm5ldC9yZHMvY29uZy5jLTIzMC1cXHRcXHRcXHRyZHNfc3RhdHNfaW5jKHNfY29uZ191cGRhdGVfcXVldWVkKTtcXG5uZXQvcmRzL2NvbmcuYzoyMzE6XFx0XFx0XFx0LyogV2UgY2Fubm90IGlubGluZSB0aGUgY2FsbCB0byByZHNfc2VuZF94bWl0KCkgaGVyZVxcbm5ldC9yZHMvY29uZy5jLTIzMi1cXHRcXHRcXHQgKiBmb3IgdHdvIHJlYXNvbnMgKGJvdGggcGVydGFpbmluZyB0byBhIFRDUCB0cmFuc3BvcnQpOlxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jPTI4Mj1zdGF0aWMgdm9pZCByZHNfaWJfdGFza2xldF9mbl9zZW5kKHVuc2lnbmVkIGxvbmcgZGF0YSlcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0yOTktXFx0ICAgIHRlc3RfYml0KDAsIFxcdTAwMjZjb25uLVxcdTAwM2VjX21hcF9xdWV1ZWQpKSlcXG5uZXQvcmRzL2liX2NtLmM6MzAwOlxcdFxcdHJkc19zZW5kX3htaXQoXFx1MDAyNmljLVxcdTAwM2Vjb25uLVxcdTAwM2VjX3BhdGhbMF0pO1xcbm5ldC9yZHMvaWJfY20uYy0zMDEtfVxcbi0tXFxubmV0L3Jkcy9pYl9zZW5kLmM9MjQ1PXZvaWQgcmRzX2liX3NlbmRfY3FlX2hhbmRsZXIoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX3djICp3YylcXG4tLVxcbm5ldC9yZHMvaWJfc2VuZC5jLTMzNS0gKlxcbm5ldC9yZHMvaWJfc2VuZC5jOjMzNjogKiBUaGUgUkRTIHNlbmQgY29kZSBpcyBlc3NlbnRpYWxseSBzaW5nbGUtdGhyZWFkZWQ7IHJkc19zZW5kX3htaXRcXG5uZXQvcmRzL2liX3NlbmQuYy0zMzctICogc2V0cyBSRFNfSU5fWE1JVCB0byBlbnN1cmUgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgc2VuZCByaW5nLlxcbi0tXFxubmV0L3Jkcy9sb29wLmM9MjMxPXZvaWQgcmRzX2xvb3BfbmV0X2V4aXQodm9pZClcXG4tLVxcbm5ldC9yZHMvbG9vcC5jLTIzNy0gKiBUaGlzIGlzIG1pc3NpbmcgLnhtaXRfKiBiZWNhdXNlIGxvb3AgZG9lc24ndCBnbyB0aHJvdWdoIGdlbmVyaWNcXG5uZXQvcmRzL2xvb3AuYzoyMzg6ICogcmRzX3NlbmRfeG1pdCgpIGFuZCBkb2Vzbid0IGNhbGwgcmRzX3JlY3ZfaW5jb21pbmcoKS4gIC5saXN0ZW5fc3RvcCBhbmRcXG5uZXQvcmRzL2xvb3AuYy0yMzktICogLmxhZGRyX2NoZWNrIGFyZSBtaXNzaW5nIGJlY2F1c2UgdHJhbnNwb3J0LmMgZG9lc24ndCBpdGVyYXRlIG92ZXJcXG4tLVxcbm5ldC9yZHMvcmRzLmg9NTI5PXN0cnVjdCByZHNfdHJhbnNwb3J0IHtcXG4tLVxcbm5ldC9yZHMvcmRzLmgtNTY5LVxcdC8qXFxubmV0L3Jkcy9yZHMuaDo1NzA6XFx0ICogLnhtaXQgaXMgY2FsbGVkIGJ5IHJkc19zZW5kX3htaXQoKSB0byB0ZWxsIHRoZSB0cmFuc3BvcnQgdG8gc2VuZFxcbm5ldC9yZHMvcmRzLmgtNTcxLVxcdCAqIHBhcnQgb2YgYSBtZXNzYWdlLiAgVGhlIGNhbGxlciBzZXJpYWxpemVzIG9uIHRoZSBzZW5kX3NlbSBzbyB0aGlzXFxuLS1cXG5uZXQvcmRzL3Jkcy5oPTk0Nj12b2lkIHJkc19zZW5kX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNvbm4pO1xcbm5ldC9yZHMvcmRzLmg6OTQ3OmludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCk7XFxubmV0L3Jkcy9yZHMuaC05NDgtc3RydWN0IHNvY2thZGRyX2luO1xcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNDQtXFxubmV0L3Jkcy9zZW5kLmM6NDU6LyogV2hlbiB0cmFuc21pdHRpbmcgbWVzc2FnZXMgaW4gcmRzX3NlbmRfeG1pdCwgd2UgbmVlZCB0byBlbWVyZ2UgZnJvbVxcbm5ldC9yZHMvc2VuZC5jLTQ2LSAqIHRpbWUgdG8gdGltZSBhbmQgYnJpZWZseSByZWxlYXNlIHRoZSBDUFUuIE90aGVyd2lzZSB0aGUgc29mdGxvY2sgd2F0Y2hkb2dcXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTU5PXN0YXRpYyB2b2lkIHJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soc3RydWN0IGxpc3RfaGVhZCAqbWVzc2FnZXMsIGludCBzdGF0dXMpO1xcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNjItICogUmVzZXQgdGhlIHNlbmQgc3RhdGUuICBDYWxsZXJzIG11c3QgZW5zdXJlIHRoYXQgdGhpcyBkb2Vzbid0IHJhY2Ugd2l0aFxcbm5ldC9yZHMvc2VuZC5jOjYzOiAqIHJkc19zZW5kX3htaXQoKS5cXG5uZXQvcmRzL3NlbmQuYy02NC0gKi9cXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTEyOD1zdGF0aWMgYm9vbCByZHNfbXByZHNfY3AwX2NhdGNodXAoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtMTg2LSAqL1xcbm5ldC9yZHMvc2VuZC5jOjE4NzppbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxubmV0L3Jkcy9zZW5kLmMtMTg4LXtcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTUzNy19XFxubmV0L3Jkcy9zZW5kLmM6NTM4OkVYUE9SVF9TWU1CT0xfR1BMKHJkc19zZW5kX3htaXQpO1xcbm5ldC9yZHMvc2VuZC5jLTUzOS1cXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTY3Mj1zdGF0aWMgdm9pZCByZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKHN0cnVjdCBsaXN0X2hlYWQgKm1lc3NhZ2VzLCBpbnQgc3RhdHVzKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNzQ3LSAqIG1lc3NhZ2VzIHVwIHRvLCBhbmQgaW5jbHVkaW5nLCB0aGUgZ2l2ZW4gc2VxdWVuY2UgbnVtYmVyLiAgTWVzc2FnZXMgYXJlXFxubmV0L3Jkcy9zZW5kLmM6NzQ4OiAqIG1vdmVkIHRvIHRoZSByZXRyYW5zIHF1ZXVlIHdoZW4gcmRzX3NlbmRfeG1pdCBwaWNrcyB0aGVtIG9mZiB0aGUgc2VuZFxcbm5ldC9yZHMvc2VuZC5jLTc0OS0gKiBxdWV1ZS4gVGhpcyBtZWFucyB0aGF0IGluIHRoZSBUQ1AgY2FzZSwgdGhlIG1lc3NhZ2UgbWF5IG5vdCBoYXZlIGJlZW5cXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTExMzc9aW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtMTQzNC1cXG5uZXQvcmRzL3NlbmQuYzoxNDM1OlxcdHJldCA9IHJkc19zZW5kX3htaXQoY3BhdGgpO1xcbm5ldC9yZHMvc2VuZC5jLTE0MzYtXFx0aWYgKHJldCA9PSAtRU5PTUVNIHx8IHJldCA9PSAtRUFHQUlOKSB7XFxuLS1cXG5uZXQvcmRzL3RjcC5jPTEyNj12b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvcmRzL3RjcC5jLTE0MC1cXHQgKiBjcF9zdGF0ZSB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBSRFNfQ09OTl9VUCwgYW5kIHRoZW5cXG5uZXQvcmRzL3RjcC5jOjE0MTpcXHQgKiB3YWl0aW5nIGZvciBhbnkgZXhpc3RpbmcgdGhyZWFkcyBpbiByZHNfc2VuZF94bWl0IHRvXFxubmV0L3Jkcy90Y3AuYy0xNDItXFx0ICogY29tcGxldGUgcmVsZWFzZV9pbl94bWl0KCkuIChTdWJzZXF1ZW50IHRocmVhZHMgZW50ZXJpbmdcXG5uZXQvcmRzL3RjcC5jOjE0MzpcXHQgKiByZHNfc2VuZF94bWl0KCkgd2lsbCBiYWlsIG9uICFyZHNfY29ubl91cCgpLlxcbm5ldC9yZHMvdGNwLmMtMTQ0LVxcdCAqXFxuLS1cXG5uZXQvcmRzL3RocmVhZHMuYz0xOTE9dm9pZCByZHNfc2VuZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3Jkcy90aHJlYWRzLmMtMTk5LVxcdFxcdGNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKTtcXG5uZXQvcmRzL3RocmVhZHMuYzoyMDA6XFx0XFx0cmV0ID0gcmRzX3NlbmRfeG1pdChjcCk7XFxubmV0L3Jkcy90aHJlYWRzLmMtMjAxLVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo0OTozNS42OTMwMzM1MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTM5MTU5NDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6ODU4MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjE6NDk6NDIuODMyMTk1NTU4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njk5ODQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZHNfc2VuZG1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2FmX3Jkcy5jPTY0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyByZHNfcHJvdG9fb3BzID0ge1xcbi0tXFxubmV0L3Jkcy9hZl9yZHMuYy02NjAtXFx0LmdldHNvY2tvcHRfaXRlciA9XFx0cmRzX2dldHNvY2tvcHQsXFxubmV0L3Jkcy9hZl9yZHMuYzo2NjE6XFx0LnNlbmRtc2cgPVxcdHJkc19zZW5kbXNnLFxcbm5ldC9yZHMvYWZfcmRzLmMtNjYyLVxcdC5yZWN2bXNnID1cXHRyZHNfcmVjdm1zZyxcXG4tLVxcbm5ldC9yZHMvcmRzLmg9NjE4PXN0cnVjdCByZHNfc29jayB7XFxuLS1cXG5uZXQvcmRzL3Jkcy5oLTY0MC1cXHQvKlxcbm5ldC9yZHMvcmRzLmg6NjQxOlxcdCAqIHJkc19zZW5kbXNnIGNhY2hlcyB0aGUgY29ubiBpdCB1c2VkIHRoZSBsYXN0IHRpbWUgYXJvdW5kLlxcbm5ldC9yZHMvcmRzLmgtNjQyLVxcdCAqIFRoaXMgaGVscHMgYXZvaWQgY29zdGx5IGxvb2t1cHMuXFxuLS1cXG5uZXQvcmRzL3Jkcy5oPTkzOT12b2lkIHJkczZfaW5jX2luZm9fY29weShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsXFxuLS1cXG5uZXQvcmRzL3Jkcy5oLTk0NC0vKiBzZW5kLmMgKi9cXG5uZXQvcmRzL3Jkcy5oOjk0NTppbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pO1xcbm5ldC9yZHMvcmRzLmgtOTQ2LXZvaWQgcmRzX3NlbmRfcGF0aF9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY29ubik7XFxuLS1cXG5uZXQvcmRzL3JlY3YuYz0xOTk9c3RhdGljIHZvaWQgcmRzX3JlY3ZfaHNfZXh0aGRycyhzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLFxcbi0tXFxubmV0L3Jkcy9yZWN2LmMtMjcwLSAqXFxubmV0L3Jkcy9yZWN2LmM6MjcxOiAqIDEuIHJkc19zZW5kbXNnIG9uIGZpcnN0IGNvbm5lY3QgYXR0ZW1wdCBzZW5kcyB0aGUgcHJvYmUgcGluZywgd2l0aCB0aGVcXG5uZXQvcmRzL3JlY3YuYy0yNzItICogICAgc2VuZGVyJ3MgbnBhdGhzIChzX25wYXRocylcXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTExMTQ9c3RhdGljIGludCByZHNfcmRtYV9ieXRlcyhzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCAqcmRtYV9ieXRlcylcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTExMzYtXFxubmV0L3Jkcy9zZW5kLmM6MTEzNzppbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pXFxubmV0L3Jkcy9zZW5kLmMtMTEzOC17XFxuLS1cXG5uZXQvcmRzL3NlbmQuYy0xMTYyLVxcbm5ldC9yZHMvc2VuZC5jOjExNjM6XFx0LyogZXhwZWN0IDEgUkRNQSBDTVNHIHBlciByZHNfc2VuZG1zZy4gY2FuIHN0aWxsIGdyb3cgaWYgbW9yZSBuZWVkZWQuICovXFxubmV0L3Jkcy9zZW5kLmMtMTE2NC1cXHR2Y3QuaW5jciA9IDE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjQ5OjQyLjg4OTIwMTY5OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mzc0ODgzMTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBSRFMgU2VuZCBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgaW4gYHJkc19zZW5kX3htaXRgLiBJdCdzIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGhhbmRsaW5nIG1lc3NhZ2Ugc2VuZGluZyBpbiBSRFMsIGNhbGxlZCBmcm9tIGJvdGggYHJkc19zZW5kbXNnYCBhbmQgYHJkc19zZW5kX3dvcmtlcmAuIFRoYXQgbWFrZXMgaXQgYSBuYXR1cmFsIGZvY2FsIHBvaW50IGZvciBteSBhbmFseXNpcywgYWx0aG91Z2gsIGJlY2F1c2UgaXQgaXMgdGhlIHByaW1hcnkgc2VuZCBmdW5jdGlvbiwgaXQgbWlnaHQgYmUgYSBiaXQgdG9vIGJyb2FkIHRvIHN0YXJ0LlxuXG5Ib3dldmVyLCB0aGUgcGF0Y2ggKnNwZWNpZmljYWxseSogdGFyZ2V0cyBhbiBlcnJvciBjb25kaXRpb24gd2l0aGluIGByZHNfc2VuZF94bWl0YCB3aGVuIFJETUEgb3BlcmF0aW9ucyBhcmUgYWN0aXZlIOKAkyBgcm0tXHUwMDNlcmRtYS5vcF9hY3RpdmVgIGlzIHRydWUg4oCTIGFuZCBhIG1lc3NhZ2UgaGFzIGJlZW4gcmV0cmFuc21pdHRlZCwgYXMgZmxhZ2dlZCBieSBgUkRTX01TR19SRVRSQU5TTUlUVEVEYC4gVGhpcyByZWFsbHkgbmFycm93cyBkb3duIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHZlY3Rvci4gVGhhdCBnaXZlcyBtZSBhIHByZWNpc2UgZm9jdXMuIEkgc2hvdWxkIGJlIGZ1enppbmcgYHJkc19zZW5kbXNnYCBhbmQgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBSRE1BLXJlbGF0ZWQgb3BlcmF0aW9ucy5cblxuSSdsbCBkZWZpbml0ZWx5IGluY2x1ZGUgYHJkc19zZW5kX3htaXRgIGluIG15IGZvY3VzIHN5bWJvbHMsIGJ1dCBhbHNvIHdhbnQgdG8gaW5jbHVkZSB0aGUgc3VwcG9ydGluZyBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSBpbnZvbHZlZCBpbiB0aGUgZXJyb3IgcGF0aC4gSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBfX3Jkc19yZG1hX21hcGAsIGByZHNfY21zZ19yZG1hX2FyZ3NgLCBgcmRzX3JkbWFfZnJlZV9vcGAsIGFuZCBgcmRzX2F0b21pY19mcmVlX29wYC4gVGhlc2Ugc2hvdWxkIGJlIHRoZSBrZXkgaW5ncmVkaWVudHMsIGVzcGVjaWFsbHkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgcmV0cmFuc21pc3Npb24gY29kZSBwYXRoLlxuXG5PbmUgdGhpbmcgSSBuZWVkIHRvIGRvdWJsZSBjaGVjayBpcyB0aGF0IHRoaXMgaXMgaW5kZWVkIHNwZWNpZmljIHRvIHRoZSBSRE1BIHBhdGguIFRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvcmRzL3JkbWEuY2AsIGFuZCB0aGF0J3Mgb2J2aW91c2x5IHN1Z2dlc3RpdmUuIEkga25vdyBgcmRtYS5jYCBpcyBjb21waWxlZCB1bmRlciBgQ09ORklHX1JEU2AsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYENPTkZJR19SRFNfUkRNQWAgaXMgbmVlZGVkLCBqdXN0IHRvIGJlIHN1cmUuIEknbSBnb2luZyB0byBxdWlja2x5IHJlLWNoZWNrIGBuZXQvcmRzL0tjb25maWdgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTM0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjQ5OjQ4LjI2NDA4NzQwMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg0NzMwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUkRTX1JETUFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvS2NvbmZpZz0zPWNvbmZpZyBSRFNcXG4tLVxcbm5ldC9yZHMvS2NvbmZpZy05LVxcbm5ldC9yZHMvS2NvbmZpZzoxMDpjb25maWcgUkRTX1JETUFcXG5uZXQvcmRzL0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIlJEUyBvdmVyIEluZmluaWJhbmRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjQ5OjQ4LjMyMjU2NzcyMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjIxNzIzMTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6OTc1MCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjE6NDk6NTUuOTQ0MjkyOTY2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTg2Nzg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJSRFNfUkRNQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvTWFrZWZpbGU9Mz1yZHMteSA6PVxcdGFmX3Jkcy5vIGJpbmQubyBjb25nLm8gY29ubmVjdGlvbi5vIGluZm8ubyBtZXNzYWdlLm8gICBcXFxcXFxuLS1cXG5uZXQvcmRzL01ha2VmaWxlLTYtXFxubmV0L3Jkcy9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19SRFNfUkRNQSkgKz0gcmRzX3JkbWEub1xcbm5ldC9yZHMvTWFrZWZpbGUtOC1yZHNfcmRtYS15IDo9XFx0cmRtYV90cmFuc3BvcnQubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjQ5OjU2LjAwNDE2NTAwNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDc2MDYxMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFJEUyBhbmQgUkRNQSBDb21waWxhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmV0L3Jkcy9yZG1hLmNgLiBJdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgY29kZSBnZXRzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19SRFNgIGlzIGVuYWJsZWQuIEJ1dCwgaGVyZSdzIHRoZSByZWFsIHF1ZXN0aW9uOiBkb2VzIHNpbXBseSBoYXZpbmcgYENPTkZJR19SRFNgIGdpdmUgbWUgUkRNQSBmdW5jdGlvbmFsaXR5IHdpdGhpbiBSRFM/IE9yLCBpcyBgQ09ORklHX1JEU19SRE1BYCBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIHRoYXQgc3BlY2lmaWMgUkRNQSBpbnRlZ3JhdGlvbj9cblxuSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhbnkgcGF0aHdheSB0byBgcmRzX2Ntc2dfcmRtYV9hcmdzYCB3aXRob3V0IGBDT05GSUdfUkRTX1JETUFgLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIGlmIFJEUyBSRE1BIGNhbiBiZSB1c2VkIHdpdGhvdXQgZXhwbGljaXRseSBlbmFibGluZyBpdCwgd2hpY2ggd291bGQgYmUgYW4gdW5leHBlY3RlZCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNzMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo0OTo1OS4wODAyMjkwNzRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4ODc1ODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJkc19jbXNnX3JkbWFfYXJnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL3JkbWEuYz01NjY9aW50IHJkc19yZG1hX2V4dHJhX3NpemUoc3RydWN0IHJkc19yZG1hX2FyZ3MgKmFyZ3MsXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy02MTctICovXFxubmV0L3Jkcy9yZG1hLmM6NjE4OmludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG5uZXQvcmRzL3JkbWEuYy02MTktXFx0XFx0ICAgICAgIHN0cnVjdCBjbXNnaGRyICpjbXNnLFxcbi0tXFxubmV0L3Jkcy9yZHMuaD05NjY9aW50IHJkc19jbXNnX3JkbWFfZGVzdChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxcbm5ldC9yZHMvcmRzLmgtOTY3LVxcdFxcdFxcdCAgc3RydWN0IGNtc2doZHIgKmNtc2cpO1xcbm5ldC9yZHMvcmRzLmg6OTY4OmludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG5uZXQvcmRzL3Jkcy5oLTk2OS1cXHRcXHRcXHQgIHN0cnVjdCBjbXNnaGRyICpjbXNnLFxcbi0tXFxubmV0L3Jkcy9zZW5kLmM9MTA1Mz1zdGF0aWMgaW50IHJkc19jbXNnX3NlbmQoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTEwNzMtXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubmV0L3Jkcy9zZW5kLmM6MTA3NDpcXHRcXHRcXHRyZXQgPSByZHNfY21zZ19yZG1hX2FyZ3MocnMsIHJtLCBjbXNnLCBcXHUwMDI2dmN0LVxcdTAwM2V2ZWNbaW5kXSk7XFxubmV0L3Jkcy9zZW5kLmMtMTA3NS1cXHRcXHRcXHRpbmQrKztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjE6NDk6NTkuMTQ5MTExNDYzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NDM5ODk5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSRFMgUkRNQSBBcmd1bWVudCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIGByZHNfY21zZ19yZG1hX2FyZ3NgIGlzIGNhbGxlZCBmcm9tIGByZHNfY21zZ19zZW5kYCB3aXRoaW4gYG5ldC9yZHMvc2VuZC5jYC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZDsgaXQncyBwYXJ0IG9mIHRoZSBSZW1vdGUgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFJEUykgaW1wbGVtZW50YXRpb24sIGFuZCBpdCdzIGJ1aWx0IHdoZW4gYENPTkZJR19SRFNgIGlzIGVuYWJsZWQuIFNlZW1zIGxvZ2ljYWwuXG5cbkhvd2V2ZXIsIHRoZSBrZXkgcXVlc3Rpb24gbm93IGJlY29tZXM6ICpkb2VzKiBgcmRzX2Ntc2dfcmRtYV9hcmdzYCAqcmVxdWlyZSogYW4gdW5kZXJseWluZyBSRE1BIHRyYW5zcG9ydCB0byBiZSBmdW5jdGlvbmFsLCBvciB3aWxsIGl0IHNpbXBseSBleGVjdXRlLCBwb3RlbnRpYWxseSBmYWlsaW5nIGxhdGVyIGlmIG5vIFJETUEgaGFyZHdhcmUgaXMgcHJlc2VudD8gVGhlIHByZXNlbmNlIG9mIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBgQ09ORklHX1JEU2AgZGVwZW5kZW5jeSBhbG9uZSBkb2Vzbid0IGNsYXJpZnkgaXRzIG9wZXJhdGlvbmFsIHJlbGlhbmNlIG9uIGFuIFJETUEtY2FwYWJsZSBzZXR1cC4gVGhpcyBmZWVscyBsaWtlIGFuIG9wdGltaXphdGlvbiB0aGF0IG5lZWRzIGRlZXBlciBwcm9iaW5nLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGByZHNfY21zZ19yZG1hX2FyZ3NgIGl0c2VsZi4gVGhhdCdzIHRoZSBvbmx5IHdheSB0byB1bmRlcnN0YW5kIGl0cyBhY3R1YWwgYmVoYXZpb3IgYW5kIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTcyNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo1MDowNS42OTMxMDM4MzNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Jkcy9yZG1hLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjE4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjE4OlxcdGludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4gNjE5OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgY21zZ2hkciAqY21zZyxcXG4gNjIwOlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcmRzX2lvdl92ZWN0b3IgKnZlYylcXG4gNjIxOlxcdHtcXG4gNjIyOlxcdFxcdHN0cnVjdCByZHNfcmRtYV9hcmdzICphcmdzO1xcbiA2MjM6XFx0XFx0c3RydWN0IHJtX3JkbWFfb3AgKm9wID0gXFx1MDAyNnJtLVxcdTAwM2VyZG1hO1xcbiA2MjQ6XFx0XFx0aW50IG5yX3BhZ2VzO1xcbiA2MjU6XFx0XFx0dW5zaWduZWQgaW50IG5yX2J5dGVzO1xcbiA2MjY6XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlcyA9IE5VTEw7XFxuIDYyNzpcXHRcXHRzdHJ1Y3QgcmRzX2lvdmVjICppb3ZzO1xcbiA2Mjg6XFx0XFx0dW5zaWduZWQgaW50IGksIGo7XFxuIDYyOTpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gNjMwOlxcdFxcdGJvb2wgb2RwX3N1cHBvcnRlZCA9IHRydWU7XFxuIDYzMTpcXHRcXG4gNjMyOlxcdFxcdGlmIChjbXNnLVxcdTAwM2VjbXNnX2xlbiBcXHUwMDNjIENNU0dfTEVOKHNpemVvZihzdHJ1Y3QgcmRzX3JkbWFfYXJncykpXFxuIDYzMzpcXHRcXHQgICAgfHwgcm0tXFx1MDAzZXJkbWEub3BfYWN0aXZlKVxcbiA2MzQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDYzNTpcXHRcXG4gNjM2OlxcdFxcdGFyZ3MgPSBDTVNHX0RBVEEoY21zZyk7XFxuIDYzNzpcXHRcXG4gNjM4OlxcdFxcdGlmIChpcHY2X2FkZHJfYW55KFxcdTAwMjZycy1cXHUwMDNlcnNfYm91bmRfYWRkcikpIHtcXG4gNjM5OlxcdFxcdFxcdHJldCA9IC1FTk9UQ09OTjsgLyogWFhYIG5vdCBhIGdyZWF0IGVycm5vICovXFxuIDY0MDpcXHRcXHRcXHRnb3RvIG91dF9yZXQ7XFxuIDY0MTpcXHRcXHR9XFxuIDY0MjpcXHRcXG4gNjQzOlxcdFxcdGlmIChhcmdzLVxcdTAwM2Vucl9sb2NhbCBcXHUwMDNlIFVJT19NQVhJT1YpIHtcXG4gNjQ0OlxcdFxcdFxcdHJldCA9IC1FTVNHU0laRTtcXG4gNjQ1OlxcdFxcdFxcdGdvdG8gb3V0X3JldDtcXG4gNjQ2OlxcdFxcdH1cXG4gNjQ3OlxcdFxcbiA2NDg6XFx0XFx0aWYgKHZlYy1cXHUwMDNlbGVuICE9IGFyZ3MtXFx1MDAzZW5yX2xvY2FsKSB7XFxuIDY0OTpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiA2NTA6XFx0XFx0XFx0Z290byBvdXRfcmV0O1xcbiA2NTE6XFx0XFx0fVxcbiA2NTI6XFx0XFx0Lyogb2RwLW1yIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG11bHRpcGxlIHJlcXVlc3RzIHdpdGhpbiBvbmUgbWVzc2FnZSAqL1xcbiA2NTM6XFx0XFx0aWYgKGFyZ3MtXFx1MDAzZW5yX2xvY2FsICE9IDEpXFxuIDY1NDpcXHRcXHRcXHRvZHBfc3VwcG9ydGVkID0gZmFsc2U7XFxuIDY1NTpcXHRcXG4gNjU2OlxcdFxcdGlvdnMgPSB2ZWMtXFx1MDAzZWlvdjtcXG4gNjU3OlxcdFxcbiA2NTg6XFx0XFx0bnJfcGFnZXMgPSByZHNfcmRtYV9wYWdlcyhpb3ZzLCBhcmdzLVxcdTAwM2Vucl9sb2NhbCk7XFxuIDY1OTpcXHRcXHRpZiAobnJfcGFnZXMgXFx1MDAzYyAwKSB7XFxuIDY2MDpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiA2NjE6XFx0XFx0XFx0Z290byBvdXRfcmV0O1xcbiA2NjI6XFx0XFx0fVxcbiA2NjM6XFx0XFxuIDY2NDpcXHRcXHRwYWdlcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCBucl9wYWdlcyk7XFxuIDY2NTpcXHRcXHRpZiAoIXBhZ2VzKSB7XFxuIDY2NjpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiA2Njc6XFx0XFx0XFx0Z290byBvdXRfcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo1MDowNS42OTMxOTY1MTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQyOTE5OTEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjExNDgzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjUwOjEzLjEyMjM5OTc3MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Jkcy9yZG1hLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzUwOlxcdFxcdFxcdFxcdFxcdHJzLVxcdTAwM2Vyc190cmFuc3BvcnQtXFx1MDAzZWdldF9tcihcXG4gNzUxOlxcdFxcdFxcdFxcdFxcdFxcdE5VTEwsIDAsIHJzLCBcXHUwMDI2bG9jYWxfb2RwX21yLVxcdTAwM2VyX2tleSwgTlVMTCxcXG4gNzUyOlxcdFxcdFxcdFxcdFxcdFxcdGlvdi1cXHUwMDNlYWRkciwgaW92LVxcdTAwM2VieXRlcywgT0RQX1ZJUlRVQUwpO1xcbiA3NTM6XFx0XFx0XFx0XFx0aWYgKElTX0VSUihsb2NhbF9vZHBfbXItXFx1MDAzZXJfdHJhbnNfcHJpdmF0ZSkpIHtcXG4gNzU0OlxcdFxcdFxcdFxcdFxcdHJldCA9IFBUUl9FUlIobG9jYWxfb2RwX21yLVxcdTAwM2VyX3RyYW5zX3ByaXZhdGUpO1xcbiA3NTU6XFx0XFx0XFx0XFx0XFx0cmRzZGVidWcoXFxcImdldF9tciByZXQgJWQgJXBcXFxcXFxcIlxcXCIsIHJldCxcXG4gNzU2OlxcdFxcdFxcdFxcdFxcdFxcdCBsb2NhbF9vZHBfbXItXFx1MDAzZXJfdHJhbnNfcHJpdmF0ZSk7XFxuIDc1NzpcXHRcXHRcXHRcXHRcXHRrZnJlZShsb2NhbF9vZHBfbXIpO1xcbiA3NTg6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuIDc1OTpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9wYWdlcztcXG4gNzYwOlxcdFxcdFxcdFxcdH1cXG4gNzYxOlxcdFxcdFxcdFxcdHJkc2RlYnVnKFxcXCJOZWVkIG9kcDsgbG9jYWxfb2RwX21yICVwIHRyYW5zX3ByaXZhdGUgJXBcXFxcblxcXCIsXFxuIDc2MjpcXHRcXHRcXHRcXHRcXHQgbG9jYWxfb2RwX21yLCBsb2NhbF9vZHBfbXItXFx1MDAzZXJfdHJhbnNfcHJpdmF0ZSk7XFxuIDc2MzpcXHRcXHRcXHRcXHQvKiBGcm9tIGhlcmUgb24gdGhlIE1SIGlzIHRvcm4gZG93biB0aHJvdWdoXFxuIDc2NDpcXHRcXHRcXHRcXHQgKiBfX3Jkc19wdXRfbXJfZmluYWwoKSwgd2hpY2ggZHJvcHMgdGhpcyByZWZlcmVuY2UuXFxuIDc2NTpcXHRcXHRcXHRcXHQgKi9cXG4gNzY2OlxcdFxcdFxcdFxcdHNvY2tfaG9sZChyZHNfcnNfdG9fc2socnMpKTtcXG4gNzY3OlxcdFxcdFxcdFxcdG9wLVxcdTAwM2VvcF9vZHBfbXIgPSBsb2NhbF9vZHBfbXI7XFxuIDc2ODpcXHRcXHRcXHRcXHRvcC1cXHUwMDNlb3Bfb2RwX2FkZHIgPSBpb3YtXFx1MDAzZWFkZHI7XFxuIDc2OTpcXHRcXHRcXHR9XFxuIDc3MDpcXHRcXG4gNzcxOlxcdFxcdFxcdHJkc2RlYnVnKFxcXCJSRFM6IG5yX2J5dGVzICV1IG5yICV1IGlvdi1cXHUwMDNlYnl0ZXMgJWxsdSBpb3YtXFx1MDAzZWFkZHIgJWxseFxcXFxuXFxcIixcXG4gNzcyOlxcdFxcdFxcdFxcdCBucl9ieXRlcywgbnIsIGlvdi1cXHUwMDNlYnl0ZXMsIGlvdi1cXHUwMDNlYWRkcik7XFxuIDc3MzpcXHRcXG4gNzc0OlxcdFxcdFxcdG5yX2J5dGVzICs9IGlvdi1cXHUwMDNlYnl0ZXM7XFxuIDc3NTpcXHRcXG4gNzc2OlxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBucjsgaisrKSB7XFxuIDc3NzpcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gaW92LVxcdTAwM2VhZGRyIFxcdTAwMjYgflBBR0VfTUFTSztcXG4gNzc4OlxcdFxcdFxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XFxuIDc3OTpcXHRcXG4gNzgwOlxcdFxcdFxcdFxcdHNnID0gXFx1MDAyNm9wLVxcdTAwM2VvcF9zZ1tvcC1cXHUwMDNlb3BfbmVudHMgKyBqXTtcXG4gNzgxOlxcdFxcdFxcdFxcdHNnX3NldF9wYWdlKHNnLCBwYWdlc1tqXSxcXG4gNzgyOlxcdFxcdFxcdFxcdFxcdFxcdG1pbl90KHVuc2lnbmVkIGludCwgaW92LVxcdTAwM2VieXRlcywgUEFHRV9TSVpFIC0gb2Zmc2V0KSxcXG4gNzgzOlxcdFxcdFxcdFxcdFxcdFxcdG9mZnNldCk7XFxuIDc4NDpcXHRcXG4gNzg1OlxcdFxcdFxcdFxcdHNnX2RtYV9sZW4oc2cpID0gc2ctXFx1MDAzZWxlbmd0aDtcXG4gNzg2OlxcdFxcdFxcdFxcdHJkc2RlYnVnKFxcXCJSRFM6IHNnLVxcdTAwM2VvZmZzZXQgJXggc2ctXFx1MDAzZWxlbiAleCBpb3YtXFx1MDAzZWFkZHIgJWxseCBpb3YtXFx1MDAzZWJ5dGVzICVsbHVcXFxcblxcXCIsXFxuIDc4NzpcXHRcXHRcXHRcXHQgICAgICAgc2ctXFx1MDAzZW9mZnNldCwgc2ctXFx1MDAzZWxlbmd0aCwgaW92LVxcdTAwM2VhZGRyLCBpb3YtXFx1MDAzZWJ5dGVzKTtcXG4gNzg4OlxcdFxcbiA3ODk6XFx0XFx0XFx0XFx0aW92LVxcdTAwM2VhZGRyICs9IHNnLVxcdTAwM2VsZW5ndGg7XFxuIDc5MDpcXHRcXHRcXHRcXHRpb3YtXFx1MDAzZWJ5dGVzIC09IHNnLVxcdTAwM2VsZW5ndGg7XFxuIDc5MTpcXHRcXHRcXHR9XFxuIDc5MjpcXHRcXG4gNzkzOlxcdFxcdFxcdG9wLVxcdTAwM2VvcF9uZW50cyArPSBucjtcXG4gNzk0OlxcdFxcdH1cXG4gNzk1OlxcdFxcbiA3OTY6XFx0XFx0aWYgKG5yX2J5dGVzIFxcdTAwM2UgYXJncy1cXHUwMDNlcmVtb3RlX3ZlYy5ieXRlcykge1xcbiA3OTc6XFx0XFx0XFx0cmRzZGVidWcoXFxcIlJEUyBucl9ieXRlcyAldSByZW1vdGVfYnl0ZXMgJXUgZG8gbm90IG1hdGNoXFxcXG5cXFwiLFxcbiA3OTg6XFx0XFx0XFx0XFx0XFx0bnJfYnl0ZXMsXFxuIDc5OTpcXHRcXHRcXHRcXHRcXHQodW5zaWduZWQgaW50KSBhcmdzLVxcdTAwM2VyZW1vdGVfdmVjLmJ5dGVzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjE6NTA6MTMuMTIyNTAyOTYyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTkzNjc1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSRFMgUkRNQSBDb2RlIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYHJkc19jbXNnX3JkbWFfYXJnc2Agd29ya3MgYW5kIGl0IGFwcGVhcnMgdG8gcmVseSBvbiBgcnMtXHUwMDNlcnNfdHJhbnNwb3J0LVx1MDAzZWdldF9tcmAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIHRoZXJlJ3Mgbm8gdHJhbnNwb3J0IGJvdW5kLCB0aGlzIGNvdWxkIGZhaWwgcHJldHR5IGVhcmx5IG9uLiBIb3dldmVyLCB0aGUgY29kZSAqaXMqIHJlYWNoYWJsZSwgc28gdGhhdCBhc3N1bXB0aW9uIGlzIGEgYml0IHNoYWt5LiBJJ20gd29uZGVyaW5nIGlmIGBDT05GSUdfUkRTX1JETUFgIGlzIGFjdHVhbGx5ICpyZXF1aXJlZCogdG8gdHJpZ2dlciB0aGlzIHNwZWNpZmljIHNlY3Rpb24uIFByb2JhYmx5IG5vdCwgc3RyaWN0bHkgc3BlYWtpbmcsIHRvIGp1c3QgKnJlYWNoKiB0aGUgY29kZS4gSG93ZXZlciwgd2l0aG91dCBhIHRydWUgUkRNQSB0cmFuc3BvcnQgaW5pdGlhbGl6ZWQsIGBycy1cdTAwM2Vyc190cmFuc3BvcnRgIGlzIGxpa2VseSB0byBiZSBOVUxMLCBvciBhdCBsZWFzdCBub3QgaGF2ZSBpbXBsZW1lbnRlZCBgZ2V0X21yYCwgbWFraW5nIHRoZSB3aG9sZSB0aGluZyBhIG5vLW9wLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZSwgdGhlIGBycy1cdTAwM2Vyc190cmFuc3BvcnRgIGlzIHNldCBkdXJpbmcgdGhlIGJpbmRpbmcgb3IgY29ubmVjdGluZyBwaGFzZS4gVGhhdCBtYWtlcyBtb3JlIHNlbnNlLiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCBpZiB3ZSdyZSB1c2luZyBzb21ldGhpbmcgbGlrZSBgUkRTX1RDUGAsIGRvZXMgdGhhdCB0cmFuc3BvcnQgKmV2ZW4qIGltcGxlbWVudCBgZ2V0X21yYD8gSSdkIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdCBwYXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc3NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjUwOjE3LjI4MTg3MjYzNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2ODg0NTYwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfbXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy90Y3BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjUwOjE3LjQ1ODc2NTg1NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODQyNzg5OTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipMb29raW5nIGZvciBgZ2V0X21yYCBpbiBSRE1BIGFuZCBUQ1AgVHJhbnNwb3J0cyoqXG5cblJpZ2h0LCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIGZpbmQgd2hlcmUgbWVtb3J5IHJlZ2lzdHJhdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgbmV0d29yayBzdGFjaywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gUkRNQSwgc2luY2UgVENQIGRvZXNuJ3QgaW1wbGVtZW50IGBnZXRfbXJgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgUkRNQSBoYW5kbGVzIGl0cyBtZW1vcnkgcmVnaXN0cmF0aW9uLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbmV0L3Jkcy9pYl9yZG1hLmNgIG9yIGEgZmlsZSBzaW1pbGFybHkgbmFtZWQsIHJlbGF0ZWQgdG8gdGhlIFJETUEgaW1wbGVtZW50YXRpb24uIFRoYXQncyBsaWtlbHkgd2hlcmUgdGhlIHJlbGV2YW50IGBnZXRfbXJgIGZ1bmN0aW9uYWxpdHksIG9yIGl0cyBlcXVpdmFsZW50LCB3aWxsIGJlIHNpdHVhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE4OSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjUwOjIwLjMwMTU1ODE5M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1Nzk1NzAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9tclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL2liXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo1MDoyMC4zNjExNDg4MjNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc4MTQ1MTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBnZXRfbXJgIGluIGByZHNfdHJhbnNwb3J0YCoqXG5cbk9rYXksIHNvIGBnZXRfbXJgIGlzIGEgZmllbGQgd2l0aGluIHRoZSBgcmRzX3RyYW5zcG9ydGAgc3RydWN0dXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiV2hlcmUgZXhhY3RseSBpcyB0aGlzIHZhbHVlIGJlaW5nIHNldD9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXNzaWdubWVudCBjb250ZXh0IHRvIHRydWx5IGdyYXNwIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvci4gVGhpcyBpcyBmdW5kYW1lbnRhbCBpbiBkZWJ1Z2dpbmcgb3IgdW5kZXJzdGFuZGluZyB0aGUgZmxvdy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhyb3VnaCB0aGUgY29kZSBhbmQgZmluZCB0aGUgc3BlY2lmaWMgcG9pbnRzIHdoZXJlIGBnZXRfbXJgIGlzIHBvcHVsYXRlZC4gVGhhdCdzIHRoZSBvbmx5IHdheSB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgZmllbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mzk1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjE6NTA6MjMuMTQyNjAyOTYzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTcyMjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcLmdldF9tclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2liLmM9NTU1PXN0cnVjdCByZHNfdHJhbnNwb3J0IHJkc19pYl90cmFuc3BvcnQgPSB7XFxuLS1cXG5uZXQvcmRzL2liLmMtNTcyLVxcdC5leGl0XFx0XFx0XFx0PSByZHNfaWJfZXhpdCxcXG5uZXQvcmRzL2liLmM6NTczOlxcdC5nZXRfbXJcXHRcXHRcXHQ9IHJkc19pYl9nZXRfbXIsXFxubmV0L3Jkcy9pYi5jLTU3NC1cXHQuc3luY19tclxcdFxcdD0gcmRzX2liX3N5bmNfbXIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjUwOjIzLjE5ODMzMDQxM1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQzNzExODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJETUEgQ29uZmlndXJhdGlvbiBDaGVjayoqXG5cbk9rYXksIHNvIGByZHNfaWJfdHJhbnNwb3J0YCBpcyB0aGUga2V5IOKAkyBpdCBpbXBsZW1lbnRzIGBnZXRfbXJgLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgdGhlIFJlbW90ZSBEaXJlY3QgTWVtb3J5IEFjY2VzcyAoUkRNQSkgZnVuY3Rpb25hbGl0eS4gQW5kIHRoYXQgdHJhbnNwb3J0IGlzIGRlZmluZWQgaW4gYG5ldC9yZHMvaWIuY2AuICBJIGtub3cgdGhhdCBmaWxlJ3MgY29tcGlsZWQgd2hlbiBgQ09ORklHX1JEU19SRE1BYCBpcyBlbmFibGVkLiBUaGVyZWZvcmUsIHRvIGVuc3VyZSBJJ20gdGhvcm91Z2hseSB0ZXN0aW5nIHRoZSBSRE1BIGNhcGFiaWxpdGllcywgSSBhYnNvbHV0ZWx5IG5lZWQgYENPTkZJR19SRFNfUkRNQWAgdG8gYmUgc2V0LiAgSXQncyBub24tbmVnb3RpYWJsZS5cblxuV2hpbGUgSSdtIGF0IGl0LCBJIHNob3VsZCB2ZXJpZnkgd2hldGhlciBgQ09ORklHX1JEU19UQ1BgIGlzIGFsc28gYmVuZWZpY2lhbCB0byBoYXZlIGVuYWJsZWQuICBJIHN1c3BlY3QgaXQgd2lsbCBiZSwgc28gSSBzaG91bGQgY29uc2lkZXIgc2V0dGluZyBpdCB0b28uXG5cblJpZ2h0LCBsZXQgbWUgYWRkIGBSRFNgLCBgUkRTX1JETUFgLCBhbmQgYFJEU19UQ1BgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoYXQgY292ZXJzIHRoZSBiYXNpYyBzZXR1cC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBzeW1ib2xzIGFmZmVjdGVkLiBNeSBmb2N1cyBuZWVkcyB0byBpbmNsdWRlOlxuKiAgIGBfX3Jkc19yZG1hX21hcGBcbiogICBgcmRzX2Ntc2dfcmRtYV9hcmdzYFxuKiAgIGByZHNfcmRtYV9mcmVlX29wYFxuKiAgIGByZHNfYXRvbWljX2ZyZWVfb3BgXG4qICAgYHJkc19zZW5kX3htaXRgXG5cbkFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkPyBBaCwgeWVzLCBgX19yZHNfcHV0X21yX2ZpbmFsYCBhcHBlYXJzIHRvIGhhdmUgYmVlbiB0b3VjaGVkIGFzIHdlbGwuIFRoYXQgbG9va3MgbGlrZSBhIHByb21pc2luZyBhZGRpdGlvbmFsIHRhcmdldCB0byByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzAyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjUwOjI3Ljc0MjA0NDYwOVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY4NjE3MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19yZHNfcHV0X21yX2ZpbmFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvbWVzc2FnZS5jPTEzMj1zdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbi0tXFxubmV0L3Jkcy9tZXNzYWdlLmMtMTc2LVxcdGlmIChybS1cXHUwMDNlcmRtYS5vcF9yZG1hX21yKVxcbm5ldC9yZHMvbWVzc2FnZS5jOjE3NzpcXHRcXHRrcmVmX3B1dChcXHUwMDI2cm0tXFx1MDAzZXJkbWEub3BfcmRtYV9tci1cXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xcbm5ldC9yZHMvbWVzc2FnZS5jLTE3OC1cXG4tLVxcbm5ldC9yZHMvbWVzc2FnZS5jLTE4MS1cXHRpZiAocm0tXFx1MDAzZWF0b21pYy5vcF9yZG1hX21yKVxcbm5ldC9yZHMvbWVzc2FnZS5jOjE4MjpcXHRcXHRrcmVmX3B1dChcXHUwMDI2cm0tXFx1MDAzZWF0b21pYy5vcF9yZG1hX21yLVxcdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XFxubmV0L3Jkcy9tZXNzYWdlLmMtMTgzLX1cXG4tLVxcbm5ldC9yZHMvcmRtYS5jPTk1PXN0YXRpYyB2b2lkIHJkc19kZXN0cm95X21yKHN0cnVjdCByZHNfbXIgKm1yKVxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtMTE0LVxcbm5ldC9yZHMvcmRtYS5jOjExNTp2b2lkIF9fcmRzX3B1dF9tcl9maW5hbChzdHJ1Y3Qga3JlZiAqa3JlZilcXG5uZXQvcmRzL3JkbWEuYy0xMTYte1xcbi0tXFxubmV0L3Jkcy9yZG1hLmM9MTI4PXZvaWQgcmRzX3JkbWFfZHJvcF9rZXlzKHN0cnVjdCByZHNfc29jayAqcnMpXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy0xNDItXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cnMtXFx1MDAzZXJzX3JkbWFfbG9jaywgZmxhZ3MpO1xcbm5ldC9yZHMvcmRtYS5jOjE0MzpcXHRcXHRrcmVmX3B1dChcXHUwMDI2bXItXFx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcXG5uZXQvcmRzL3JkbWEuYy0xNDQtXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnJzLVxcdTAwM2Vyc19yZG1hX2xvY2ssIGZsYWdzKTtcXG4tLVxcbm5ldC9yZHMvcmRtYS5jPTE3Mz1zdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy0yNDctXFx0LyogVGhlIE1SIGNhbiBvdXRsaXZlIGl0cyBzb2NrZXQ6IGEgc29ja2V0IHJlZmVyZW5jZSBpcyBoZWxkXFxubmV0L3Jkcy9yZG1hLmM6MjQ4OlxcdCAqIHVudGlsIHRoZSBmaW5hbCBrcmVmIGlzIGRyb3BwZWQgaW4gX19yZHNfcHV0X21yX2ZpbmFsKCkuXFxubmV0L3Jkcy9yZG1hLmMtMjQ5LVxcdCAqL1xcbi0tXFxubmV0L3Jkcy9yZG1hLmMtMzU1LVxcdGlmIChtcilcXG5uZXQvcmRzL3JkbWEuYzozNTY6XFx0XFx0a3JlZl9wdXQoXFx1MDAyNm1yLVxcdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XFxubmV0L3Jkcy9yZG1hLmMtMzU3LVxcdHJldHVybiByZXQ7XFxuLS1cXG5uZXQvcmRzL3JkbWEuYz00MDA9aW50IHJkc19mcmVlX21yKHN0cnVjdCByZHNfc29jayAqcnMsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy00MzYtXFxubmV0L3Jkcy9yZG1hLmM6NDM3OlxcdGtyZWZfcHV0KFxcdTAwMjZtci1cXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xcbm5ldC9yZHMvcmRtYS5jLTQzOC1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9yZHMvcmRtYS5jPTQ0Nj12b2lkIHJkc19yZG1hX3VudXNlKHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiByX2tleSwgaW50IGZvcmNlKVxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtNDgyLVxcdC8qIFJlbGVhc2UgdGhlIHJlZmVyZW5jZSBoZWxkIGFib3ZlLiAqL1xcbm5ldC9yZHMvcmRtYS5jOjQ4MzpcXHRrcmVmX3B1dChcXHUwMDI2bXItXFx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcXG5uZXQvcmRzL3JkbWEuYy00ODQtXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy00ODctXFx0aWYgKHpvdF9tZSlcXG5uZXQvcmRzL3JkbWEuYzo0ODg6XFx0XFx0a3JlZl9wdXQoXFx1MDAyNm1yLVxcdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XFxubmV0L3Jkcy9yZG1hLmMtNDg5LX1cXG4tLVxcbm5ldC9yZHMvcmRtYS5jPTQ5MT12b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtNDk1LVxcdGlmIChyby1cXHUwMDNlb3Bfb2RwX21yKSB7XFxubmV0L3Jkcy9yZG1hLmM6NDk2OlxcdFxcdGtyZWZfcHV0KFxcdTAwMjZyby1cXHUwMDNlb3Bfb2RwX21yLVxcdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XFxubmV0L3Jkcy9yZG1hLmMtNDk3LVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvcmRzL3JkbWEuYz02MTg9aW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtNzYzLVxcdFxcdFxcdC8qIEZyb20gaGVyZSBvbiB0aGUgTVIgaXMgdG9ybiBkb3duIHRocm91Z2hcXG5uZXQvcmRzL3JkbWEuYzo3NjQ6XFx0XFx0XFx0ICogX19yZHNfcHV0X21yX2ZpbmFsKCksIHdoaWNoIGRyb3BzIHRoaXMgcmVmZXJlbmNlLlxcbm5ldC9yZHMvcmRtYS5jLTc2NS1cXHRcXHRcXHQgKi9cXG4tLVxcbm5ldC9yZHMvcmRzLmg9OTc3PWludCByZHNfY21zZ19hdG9taWMoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4tLVxcbm5ldC9yZHMvcmRzLmgtOTc5LVxcbm5ldC9yZHMvcmRzLmg6OTgwOnZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKTtcXG5uZXQvcmRzL3Jkcy5oLTk4MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjE6NTA6MjcuODM4OTEzOTQzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwODE5MTI0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxNDc5MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjE6NTA6MzQuOTIwODI4NTkxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yZHMvcmRtYS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExMDpcXHRcXG4gMTExOlxcdFxcdGlmICh0cmFuc19wcml2YXRlKVxcbiAxMTI6XFx0XFx0XFx0bXItXFx1MDAzZXJfdHJhbnMtXFx1MDAzZWZyZWVfbXIodHJhbnNfcHJpdmF0ZSwgbXItXFx1MDAzZXJfaW52YWxpZGF0ZSk7XFxuIDExMzpcXHR9XFxuIDExNDpcXHRcXG4gMTE1OlxcdHZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKVxcbiAxMTY6XFx0e1xcbiAxMTc6XFx0XFx0c3RydWN0IHJkc19tciAqbXIgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJkc19tciwgcl9rcmVmKTtcXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0cmRzX2Rlc3Ryb3lfbXIobXIpO1xcbiAxMjA6XFx0XFx0c29ja19wdXQocmRzX3JzX3RvX3NrKG1yLVxcdTAwM2VyX3NvY2spKTtcXG4gMTIxOlxcdFxcdGtmcmVlKG1yKTtcXG4gMTIyOlxcdH1cXG4gMTIzOlxcdFxcbiAxMjQ6XFx0LypcXG4gMTI1OlxcdCAqIEJ5IHRoZSB0aW1lIHRoaXMgaXMgY2FsbGVkIHdlIGNhbid0IGhhdmUgYW55IG1vcmUgaW9jdGxzIGNhbGxlZCBvblxcbiAxMjY6XFx0ICogdGhlIHNvY2tldCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHJhY2luZyB3aXRoIG90aGVycy5cXG4gMTI3OlxcdCAqL1xcbiAxMjg6XFx0dm9pZCByZHNfcmRtYV9kcm9wX2tleXMoc3RydWN0IHJkc19zb2NrICpycylcXG4gMTI5OlxcdHtcXG4gMTMwOlxcdFxcdHN0cnVjdCByZHNfbXIgKm1yO1xcbiAxMzE6XFx0XFx0c3RydWN0IHJiX25vZGUgKm5vZGU7XFxuIDEzMjpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHQvKiBSZWxlYXNlIGFueSBNUnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc29ja2V0ICovXFxuIDEzNTpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cnMtXFx1MDAzZXJzX3JkbWFfbG9jaywgZmxhZ3MpO1xcbiAxMzY6XFx0XFx0d2hpbGUgKChub2RlID0gcmJfZmlyc3QoXFx1MDAyNnJzLVxcdTAwM2Vyc19yZG1hX2tleXMpKSkge1xcbiAxMzc6XFx0XFx0XFx0bXIgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgcmRzX21yLCByX3JiX25vZGUpO1xcbiAxMzg6XFx0XFx0XFx0aWYgKG1yLVxcdTAwM2VyX3RyYW5zID09IHJzLVxcdTAwM2Vyc190cmFuc3BvcnQpXFxuIDEzOTpcXHRcXHRcXHRcXHRtci1cXHUwMDNlcl9pbnZhbGlkYXRlID0gMDtcXG4gMTQwOlxcdFxcdFxcdHJiX2VyYXNlKFxcdTAwMjZtci1cXHUwMDNlcl9yYl9ub2RlLCBcXHUwMDI2cnMtXFx1MDAzZXJzX3JkbWFfa2V5cyk7XFxuIDE0MTpcXHRcXHRcXHRSQl9DTEVBUl9OT0RFKFxcdTAwMjZtci1cXHUwMDNlcl9yYl9ub2RlKTtcXG4gMTQyOlxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnJzLVxcdTAwM2Vyc19yZG1hX2xvY2ssIGZsYWdzKTtcXG4gMTQzOlxcdFxcdFxcdGtyZWZfcHV0KFxcdTAwMjZtci1cXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xcbiAxNDQ6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnJzLVxcdTAwM2Vyc19yZG1hX2xvY2ssIGZsYWdzKTtcXG4gMTQ1OlxcdFxcdH1cXG4gMTQ2OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnJzLVxcdTAwM2Vyc19yZG1hX2xvY2ssIGZsYWdzKTtcXG4gMTQ3OlxcdFxcbiAxNDg6XFx0XFx0aWYgKHJzLVxcdTAwM2Vyc190cmFuc3BvcnQgXFx1MDAyNlxcdTAwMjYgcnMtXFx1MDAzZXJzX3RyYW5zcG9ydC1cXHUwMDNlZmx1c2hfbXJzKVxcbiAxNDk6XFx0XFx0XFx0cnMtXFx1MDAzZXJzX3RyYW5zcG9ydC1cXHUwMDNlZmx1c2hfbXJzKCk7XFxuIDE1MDpcXHR9XFxuIDE1MTpcXHRcXG4gMTUyOlxcdC8qXFxuIDE1MzpcXHQgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcGluIHVzZXIgcGFnZXMuXFxuIDE1NDpcXHQgKi9cXG4gMTU1OlxcdHN0YXRpYyBpbnQgcmRzX3Bpbl9wYWdlcyh1bnNpZ25lZCBsb25nIHVzZXJfYWRkciwgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbiAxNTY6XFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlcywgaW50IHdyaXRlKVxcbiAxNTc6XFx0e1xcbiAxNTg6XFx0XFx0dW5zaWduZWQgaW50IGd1cF9mbGFncyA9IEZPTExfTE9OR1RFUk07XFxuIDE1OTpcXHRcXHRpbnQgcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo1MDozNC45MjA5MTY5NjFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTUzNTg5MTE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBSRFMvUkRNQSoqXG5cbk9rYXksIGxldCdzIG5haWwgZG93biB0aGlzIGZ1enppbmcgdGFyZ2V0LiBgX19yZHNfcHV0X21yX2ZpbmFsYCBsb29rcyBsaWtlIGEga2V5IHBvaW50LCBzaW5jZSBpdCdzIHdoZXJlIHRoZSBzb2NrZXQgcmVmZXJlbmNlIGlzIGRyb3BwZWQuIFRoaXMgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0LlxuXG5UaGVyZWZvcmUsIHRoZSBtYWluIHN5bWJvbHMgSSB3YW50IHRvIGZvY3VzIHRoZSBmdXp6ZXIgb24gYXJlOiBgX19yZHNfcHV0X21yX2ZpbmFsYCwgbmF0dXJhbGx5LCBidXQgYWxzbyBgX19yZHNfcmRtYV9tYXBgLCBgcmRzX3JkbWFfZnJlZV9vcGAsIGByZHNfYXRvbWljX2ZyZWVfb3BgLCBhbmQgYHJkc19jbXNnX3JkbWFfYXJnc2AuIFRob3NlIGFsbCBzZWVtIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIFJETUEgcGF0aCBhbmQgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZS5cblxuSG1tLCBgcmRzX3NlbmRfeG1pdGAuLi4gdGhhdCdzIGEgaG90IGZ1bmN0aW9uLCBhbmQgSSB3YXMgb3JpZ2luYWxseSBoZXNpdGFudCB0byBhZGQgaXQgdG8gdGhlIGZvY3VzIGxpc3QgYmVjYXVzZSBJIGRvbid0IHdhbnQgdG8gc2tldyB0aGUgdGVzdCBkaXN0cmlidXRpb25zLiBIb3dldmVyLCB0aGUgcGF0Y2ggKnNwZWNpZmljYWxseSogbW9kaWZpZXMgYHJkc19zZW5kX3htaXRgIHRvIGZpeCBhIHJlZmNvdW50IGxlYWsgd2hlbiBgcm0tXHUwMDNlbV9mbGFnc2AgaGFzIGBSRFNfTVNHX09OX0NPTk5gIGNsZWFyZWQuIElmIEkgZG9uJ3QgaW5jbHVkZSBpdCwgdGhlIGZ1enplciBtaWdodCBtaXNzIHRoYXQgcGFydCBvZiB0aGUgc2VuZCBwYXRoIGVudGlyZWx5LiBUaGUgZW50cnkgcG9pbnQgaXMgYHJkc19zZW5kbXNnYCwgd2hpY2ggbWVhbnMgdGhlIGZ1enplciBzaG91bGQgc3BlbmQgc29tZSB0aW1lIGluIHRoZSBzZW5kIHBhdGguIFRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIGluY2x1ZGUgYHJkc19zZW5kX3htaXRgIGJlY2F1c2UgdGhlIGZpeCBpcyBleHBsaWNpdCBpbiB0aGUgcGF0Y2guXG5cbk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIG15IGNvbmZpZ3VyYXRpb24gYXNzdW1wdGlvbnMuIEknbSBwcmV0dHkgc3VyZSBgUkRTYCBhbmQgYFJEU19SRE1BYCBhcmUgdGhlIG1haW4gb25lcywgYnV0IGxldCBtZSBhZGQgYFJEU19UQ1BgIGp1c3QgdG8gbWFrZSBzdXJlIEkgY292ZXIgZXZlcnl0aGluZy5cblxuQWxyaWdodCwgaGVyZSdzIG15IHN1bW1hcnk6XG5cbldvcnRoRnV6emluZzogVHJ1ZVxuRm9jdXNTeW1ib2xzOlxuLSBgX19yZHNfcHV0X21yX2ZpbmFsYFxuLSBgX19yZHNfcmRtYV9tYXBgXG4tIGByZHNfcmRtYV9mcmVlX29wYFxuLSBgcmRzX2F0b21pY19mcmVlX29wYFxuLSBgcmRzX2Ntc2dfcmRtYV9hcmdzYFxuLSBgcmRzX3NlbmRfeG1pdGBcbkVuYWJsZUNvbmZpZ3M6XG4tIGBSRFNgXG4tIGBSRFNfUkRNQWBcbi0gYFJEU19UQ1BgXG5cbk15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgcGF0Y2ggZnVuZGFtZW50YWxseSBmaXhlcyBhIHNvY2tldCByZWZjb3VudCBsZWFrIHdpdGhpbiBSRFMgUkRNQSBvcGVyYXRpb25zLiBJdCBkb2VzIHRoaXMgYnkgY2FyZWZ1bGx5IG1hbmFnaW5nIHNvY2tldCByZWZlcmVuY2VzIGluIGBfX3Jkc19yZG1hX21hcGAgYW5kIGByZHNfY21zZ19yZG1hX2FyZ3NgLCBhbmQgcmVsZWFzaW5nIHRoZW0gaW4gYF9fcmRzX3B1dF9tcl9maW5hbGAuIEFkZGl0aW9uYWxseSwgYHJkc19yZG1hX2ZyZWVfb3BgIGFuZCBgcmRzX2F0b21pY19mcmVlX29wYCBhcmUgY2hhbmdlZCB0byB1c2Ugbm9uLXNsZWVwaW5nIHBhZ2UgdW5waW5uaW5nIGZ1bmN0aW9ucyBzaW5jZSB0aGV5IGNvdWxkIGJlIGNhbGxlZCBmcm9tIGEgdGFza2xldCBjb250ZXh0LiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50LiBGaW5hbGx5LCBpdCBjb3JyZWN0cyBhIG1lc3NhZ2UgcmVmY291bnQgbGVhayBpbiBgcmRzX3NlbmRfeG1pdGAuIFRoZXNlIGFyZSBhbGwgY3J1Y2lhbCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIFJEUyBhbmQgUkRNQSBsb2dpYyBpdHNlbGYsIG1ha2luZyB0aGVtIGlkZWFsIGZ1enppbmcgdGFyZ2V0cy5cblxuT2theSwgSSdtIGNvbmZpZGVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDMzLCJPdXRwdXRUb2tlbnMiOjI0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjUwOjQ0LjQ1NjgxMDUwNVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5OTMxNDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRFNcIixcbiAgICBcIlJEU19SRE1BXCIsXG4gICAgXCJSRFNfVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19yZHNfcHV0X21yX2ZpbmFsXCIsXG4gICAgXCJfX3Jkc19yZG1hX21hcFwiLFxuICAgIFwicmRzX3JkbWFfZnJlZV9vcFwiLFxuICAgIFwicmRzX2F0b21pY19mcmVlX29wXCIsXG4gICAgXCJyZHNfY21zZ19yZG1hX2FyZ3NcIixcbiAgICBcInJkc19zZW5kX3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHNvY2tldCByZWZjb3VudCBsZWFrIGluIFJEUyBSRE1BIG9wZXJhdGlvbnMgYnkgaG9sZGluZyBhIHNvY2tldCByZWZlcmVuY2UgaW4gYF9fcmRzX3JkbWFfbWFwYCBhbmQgYHJkc19jbXNnX3JkbWFfYXJnc2AgYW5kIHJlbGVhc2luZyBpdCBpbiBgX19yZHNfcHV0X21yX2ZpbmFsYC4gSXQgYWxzbyBtb2RpZmllcyBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgIHRvIHVzZSBub24tc2xlZXBpbmcgcGFnZSB1bnBpbm5pbmcgZnVuY3Rpb25zIHNpbmNlIHRoZXkgY2FuIGJlIGNhbGxlZCBmcm9tIHRhc2tsZXQgY29udGV4dC4gRmluYWxseSwgaXQgZml4ZXMgYSBtZXNzYWdlIHJlZmNvdW50IGxlYWsgaW4gYHJkc19zZW5kX3htaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIFJEUyBhbmQgUkRNQSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfUkRNQVwiLFxuICAgIFwiUkRTX1RDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fcmRzX3B1dF9tcl9maW5hbFwiLFxuICAgIFwiX19yZHNfcmRtYV9tYXBcIixcbiAgICBcInJkc19yZG1hX2ZyZWVfb3BcIixcbiAgICBcInJkc19hdG9taWNfZnJlZV9vcFwiLFxuICAgIFwicmRzX2Ntc2dfcmRtYV9hcmdzXCIsXG4gICAgXCJyZHNfc2VuZF94bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzb2NrZXQgcmVmY291bnQgbGVhayBpbiBSRFMgUkRNQSBvcGVyYXRpb25zIGJ5IGhvbGRpbmcgYSBzb2NrZXQgcmVmZXJlbmNlIGluIGBfX3Jkc19yZG1hX21hcGAgYW5kIGByZHNfY21zZ19yZG1hX2FyZ3NgIGFuZCByZWxlYXNpbmcgaXQgaW4gYF9fcmRzX3B1dF9tcl9maW5hbGAuIEl0IGFsc28gbW9kaWZpZXMgYHJkc19yZG1hX2ZyZWVfb3BgIGFuZCBgcmRzX2F0b21pY19mcmVlX29wYCB0byB1c2Ugbm9uLXNsZWVwaW5nIHBhZ2UgdW5waW5uaW5nIGZ1bmN0aW9ucyBzaW5jZSB0aGV5IGNhbiBiZSBjYWxsZWQgZnJvbSB0YXNrbGV0IGNvbnRleHQuIEZpbmFsbHksIGl0IGZpeGVzIGEgbWVzc2FnZSByZWZjb3VudCBsZWFrIGluIGByZHNfc2VuZF94bWl0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBSRFMgYW5kIFJETUEgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflownhljk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-11 21:12:22 +0000 UTC FinishedAt: 2026-07-11 21:50:46 +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": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_RDMA", "RDS_TCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_RDMA", "RDS_TCP" ], "series_id": "b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__rds_put_mr_final", "__rds_rdma_map", "rds_rdma_free_op", "rds_atomic_free_op", "rds_cmsg_rdma_args", "rds_send_xmit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfUkRNQSYjMzQ7LAogICAgJiMzNDtSRFNfVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19yZHNfcHV0X21yX2ZpbmFsJiMzNDssCiAgICAmIzM0O19fcmRzX3JkbWFfbWFwJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX2ZyZWVfb3AmIzM0OywKICAgICYjMzQ7cmRzX2F0b21pY19mcmVlX29wJiMzNDssCiAgICAmIzM0O3Jkc19jbXNnX3JkbWFfYXJncyYjMzQ7LAogICAgJiMzNDtyZHNfc2VuZF94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc29ja2V0IHJlZmNvdW50IGxlYWsgaW4gUkRTIFJETUEgb3BlcmF0aW9ucyBieSBob2xkaW5nIGEgc29ja2V0IHJlZmVyZW5jZSBpbiBgX19yZHNfcmRtYV9tYXBgIGFuZCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCBhbmQgcmVsZWFzaW5nIGl0IGluIGBfX3Jkc19wdXRfbXJfZmluYWxgLiBJdCBhbHNvIG1vZGlmaWVzIGByZHNfcmRtYV9mcmVlX29wYCBhbmQgYHJkc19hdG9taWNfZnJlZV9vcGAgdG8gdXNlIG5vbi1zbGVlcGluZyBwYWdlIHVucGlubmluZyBmdW5jdGlvbnMgc2luY2UgdGhleSBjYW4gYmUgY2FsbGVkIGZyb20gdGFza2xldCBjb250ZXh0LiBGaW5hbGx5LCBpdCBmaXhlcyBhIG1lc3NhZ2UgcmVmY291bnQgbGVhayBpbiBgcmRzX3NlbmRfeG1pdGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgUkRTIGFuZCBSRE1BIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM5ZGY2YzEzMzNmYjFmYTA4ODQ4ODNkMjJhZWY2OWM0MzM1NGNmY2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAyMTo0ODo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcmRzL3JkbWEuYyBiL25ldC9yZHMvcmRtYS5jXG5pbmRleCA2MWZiNmU0NTI4MWJmMS4uZmUyMjE5NjhmM2ZlNzMgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3JkbWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9yZG1hLmNcbkBAIC0xMTcsNiAmIzQzOzExNyw3IEBAIHZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKVxuIFx0c3RydWN0IHJkc19tciAqbXIgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJkc19tciwgcl9rcmVmKTtcbiBcbiBcdHJkc19kZXN0cm95X21yKG1yKTtcbiYjNDM7XHRzb2NrX3B1dChyZHNfcnNfdG9fc2sobXItXHUwMDNlcl9zb2NrKSk7XG4gXHRrZnJlZShtcik7XG4gfVxuIFxuQEAgLTI0Myw3ICYjNDM7MjQ0LDExIEBAIHN0YXRpYyBpbnQgX19yZHNfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19nZXRfbXJfYXJncyAqYXJncyxcbiBcdGtyZWZfaW5pdChcdTAwMjZtci1cdTAwM2VyX2tyZWYpO1xuIFx0UkJfQ0xFQVJfTk9ERShcdTAwMjZtci1cdTAwM2VyX3JiX25vZGUpO1xuIFx0bXItXHUwMDNlcl90cmFucyA9IHJzLVx1MDAzZXJzX3RyYW5zcG9ydDtcbiYjNDM7XHQvKiBUaGUgTVIgY2FuIG91dGxpdmUgaXRzIHNvY2tldDogYSBzb2NrZXQgcmVmZXJlbmNlIGlzIGhlbGRcbiYjNDM7XHQgKiB1bnRpbCB0aGUgZmluYWwga3JlZiBpcyBkcm9wcGVkIGluIF9fcmRzX3B1dF9tcl9maW5hbCgpLlxuJiM0MztcdCAqL1xuIFx0bXItXHUwMDNlcl9zb2NrID0gcnM7XG4mIzQzO1x0c29ja19ob2xkKHJkc19yc190b19zayhycykpO1xuIFxuIFx0aWYgKGFyZ3MtXHUwMDNlZmxhZ3MgXHUwMDI2IFJEU19SRE1BX1VTRV9PTkNFKVxuIFx0XHRtci1cdTAwM2VyX3VzZV9vbmNlID0gMTtcbkBAIC00OTUsOSAmIzQzOzUwMCwxMyBAQCB2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxuIFxuIFx0XHRcdC8qIE1hcmsgcGFnZSBkaXJ0eSBpZiBpdCB3YXMgcG9zc2libHkgbW9kaWZpZWQsIHdoaWNoXG4gXHRcdFx0ICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZVxuLVx0XHRcdCAqIHRvIGxvY2FsIG1lbW9yeVxuJiM0MztcdFx0XHQgKiB0byBsb2NhbCBtZW1vcnkuICBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgSUJcbiYjNDM7XHRcdFx0ICogc2VuZCBjb21wbGV0aW9uIHRhc2tsZXQsIHNvIHRoZSBzbGVlcGluZyBfbG9ja1xuJiM0MztcdFx0XHQgKiB2YXJpYW50IG11c3Qgbm90IGJlIHVzZWQgaGVyZS5cbiBcdFx0XHQgKi9cbi1cdFx0XHR1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soXHUwMDI2cGFnZSwgMSwgIXJvLVx1MDAzZW9wX3dyaXRlKTtcbiYjNDM7XHRcdFx0aWYgKCFyby1cdTAwM2VvcF93cml0ZSlcbiYjNDM7XHRcdFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbiYjNDM7XHRcdFx0dW5waW5fdXNlcl9wYWdlKHBhZ2UpO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtNTEzLDggJiM0Mzs1MjIsMTIgQEAgdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pXG4gXG4gXHQvKiBNYXJrIHBhZ2UgZGlydHkgaWYgaXQgd2FzIHBvc3NpYmx5IG1vZGlmaWVkLCB3aGljaFxuIFx0ICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZVxuLVx0ICogdG8gbG9jYWwgbWVtb3J5ICovXG4tXHR1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soXHUwMDI2cGFnZSwgMSwgdHJ1ZSk7XG4mIzQzO1x0ICogdG8gbG9jYWwgbWVtb3J5LiAgVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIElCIHNlbmRcbiYjNDM7XHQgKiBjb21wbGV0aW9uIHRhc2tsZXQsIHNvIHRoZSBzbGVlcGluZyBfbG9jayB2YXJpYW50IG11c3RcbiYjNDM7XHQgKiBub3QgYmUgdXNlZCBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuJiM0MztcdHVucGluX3VzZXJfcGFnZShwYWdlKTtcbiBcbiBcdGtmcmVlKGFvLVx1MDAzZW9wX25vdGlmaWVyKTtcbiBcdGFvLVx1MDAzZW9wX25vdGlmaWVyID0gTlVMTDtcbkBAIC03NDcsNiAmIzQzOzc2MCwxMCBAQCBpbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG4gXHRcdFx0fVxuIFx0XHRcdHJkc2RlYnVnKFwmIzM0O05lZWQgb2RwOyBsb2NhbF9vZHBfbXIgJXAgdHJhbnNfcHJpdmF0ZSAlcFxcblwmIzM0OyxcbiBcdFx0XHRcdCBsb2NhbF9vZHBfbXIsIGxvY2FsX29kcF9tci1cdTAwM2VyX3RyYW5zX3ByaXZhdGUpO1xuJiM0MztcdFx0XHQvKiBGcm9tIGhlcmUgb24gdGhlIE1SIGlzIHRvcm4gZG93biB0aHJvdWdoXG4mIzQzO1x0XHRcdCAqIF9fcmRzX3B1dF9tcl9maW5hbCgpLCB3aGljaCBkcm9wcyB0aGlzIHJlZmVyZW5jZS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHNvY2tfaG9sZChyZHNfcnNfdG9fc2socnMpKTtcbiBcdFx0XHRvcC1cdTAwM2VvcF9vZHBfbXIgPSBsb2NhbF9vZHBfbXI7XG4gXHRcdFx0b3AtXHUwMDNlb3Bfb2RwX2FkZHIgPSBpb3YtXHUwMDNlYWRkcjtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmNcbmluZGV4IDY4YmUxYmYwZTBhZGY5Li5hYjNhODM2NmM1M2JkOSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvc2VuZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3NlbmQuY1xuQEAgLTMzOSw5ICYjNDM7MzM5LDE3IEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFx0XHQgICAgKHJtLVx1MDAzZXJkbWEub3BfYWN0aXZlIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICB0ZXN0X2JpdChSRFNfTVNHX1JFVFJBTlNNSVRURUQsIFx1MDAyNnJtLVx1MDAzZW1fZmxhZ3MpKSkge1xuIFx0XHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Y3AtXHUwMDNlY3BfbG9jaywgZmxhZ3MpO1xuLVx0XHRcdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sIFx1MDAyNnJtLVx1MDAzZW1fZmxhZ3MpKVxuJiM0MztcdFx0XHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX01TR19PTl9DT05OLCBcdTAwMjZybS1cdTAwM2VtX2ZsYWdzKSkge1xuJiM0MztcdFx0XHRcdFx0Lyogb3VyIHJlZiBpcyBwdXQgYWZ0ZXIgdGhlIGJhdGNoICovXG4gXHRcdFx0XHRcdGxpc3RfbW92ZShcdTAwMjZybS1cdTAwM2VtX2Nvbm5faXRlbSwgXHUwMDI2dG9fYmVfZHJvcHBlZCk7XG4tXHRcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmNwLVx1MDAzZWNwX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3AtXHUwMDNlY3BfbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0XHQvKiBhbHJlYWR5IG9mZiB0aGUgY29ubiBsaXN0OyBkcm9wXG4mIzQzO1x0XHRcdFx0XHQgKiB0aGUgcmVmIHRha2VuIGFib3ZlIG91cnNlbHZlc1xuJiM0MztcdFx0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmNwLVx1MDAzZWNwX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdFx0XHRcdHJkc19tZXNzYWdlX3B1dChybSk7XG4mIzQzO1x0XHRcdFx0fVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfUkRNQSYjMzQ7LAogICAgJiMzNDtSRFNfVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19yZHNfcHV0X21yX2ZpbmFsJiMzNDssCiAgICAmIzM0O19fcmRzX3JkbWFfbWFwJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX2ZyZWVfb3AmIzM0OywKICAgICYjMzQ7cmRzX2F0b21pY19mcmVlX29wJiMzNDssCiAgICAmIzM0O3Jkc19jbXNnX3JkbWFfYXJncyYjMzQ7LAogICAgJiMzNDtyZHNfc2VuZF94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc29ja2V0IHJlZmNvdW50IGxlYWsgaW4gUkRTIFJETUEgb3BlcmF0aW9ucyBieSBob2xkaW5nIGEgc29ja2V0IHJlZmVyZW5jZSBpbiBgX19yZHNfcmRtYV9tYXBgIGFuZCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCBhbmQgcmVsZWFzaW5nIGl0IGluIGBfX3Jkc19wdXRfbXJfZmluYWxgLiBJdCBhbHNvIG1vZGlmaWVzIGByZHNfcmRtYV9mcmVlX29wYCBhbmQgYHJkc19hdG9taWNfZnJlZV9vcGAgdG8gdXNlIG5vbi1zbGVlcGluZyBwYWdlIHVucGlubmluZyBmdW5jdGlvbnMgc2luY2UgdGhleSBjYW4gYmUgY2FsbGVkIGZyb20gdGFza2xldCBjb250ZXh0LiBGaW5hbGx5LCBpdCBmaXhlcyBhIG1lc3NhZ2UgcmVmY291bnQgbGVhayBpbiBgcmRzX3NlbmRfeG1pdGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgUkRTIGFuZCBSRE1BIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzlkZjZjMTMzM2ZiMWZhMDg4NDg4M2QyMmFlZjY5YzQzMzU0Y2ZjYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDExIDIxOjQ4OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hLmMgYi9uZXQvcmRzL3JkbWEuYwppbmRleCA2MWZiNmU0NTI4MWJmMS4uZmUyMjE5NjhmM2ZlNzMgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvcmRtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvcmRtYS5jCkBAIC0xMTcsNiAmIzQzOzExNyw3IEBAIHZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKQogCXN0cnVjdCByZHNfbXIgKm1yID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByZHNfbXIsIHJfa3JlZik7CiAKIAlyZHNfZGVzdHJveV9tcihtcik7CiYjNDM7CXNvY2tfcHV0KHJkc19yc190b19zayhtci0mZ3Q7cl9zb2NrKSk7CiAJa2ZyZWUobXIpOwogfQogCkBAIC0yNDMsNyAmIzQzOzI0NCwxMSBAQCBzdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsCiAJa3JlZl9pbml0KCZhbXA7bXItJmd0O3Jfa3JlZik7CiAJUkJfQ0xFQVJfTk9ERSgmYW1wO21yLSZndDtyX3JiX25vZGUpOwogCW1yLSZndDtyX3RyYW5zID0gcnMtJmd0O3JzX3RyYW5zcG9ydDsKJiM0MzsJLyogVGhlIE1SIGNhbiBvdXRsaXZlIGl0cyBzb2NrZXQ6IGEgc29ja2V0IHJlZmVyZW5jZSBpcyBoZWxkCiYjNDM7CSAqIHVudGlsIHRoZSBmaW5hbCBrcmVmIGlzIGRyb3BwZWQgaW4gX19yZHNfcHV0X21yX2ZpbmFsKCkuCiYjNDM7CSAqLwogCW1yLSZndDtyX3NvY2sgPSByczsKJiM0MzsJc29ja19ob2xkKHJkc19yc190b19zayhycykpOwogCiAJaWYgKGFyZ3MtJmd0O2ZsYWdzICZhbXA7IFJEU19SRE1BX1VTRV9PTkNFKQogCQltci0mZ3Q7cl91c2Vfb25jZSA9IDE7CkBAIC00OTUsOSAmIzQzOzUwMCwxMyBAQCB2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKQogCiAJCQkvKiBNYXJrIHBhZ2UgZGlydHkgaWYgaXQgd2FzIHBvc3NpYmx5IG1vZGlmaWVkLCB3aGljaAogCQkJICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZQotCQkJICogdG8gbG9jYWwgbWVtb3J5CiYjNDM7CQkJICogdG8gbG9jYWwgbWVtb3J5LiAgVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIElCCiYjNDM7CQkJICogc2VuZCBjb21wbGV0aW9uIHRhc2tsZXQsIHNvIHRoZSBzbGVlcGluZyBfbG9jawomIzQzOwkJCSAqIHZhcmlhbnQgbXVzdCBub3QgYmUgdXNlZCBoZXJlLgogCQkJICovCi0JCQl1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soJmFtcDtwYWdlLCAxLCAhcm8tJmd0O29wX3dyaXRlKTsKJiM0MzsJCQlpZiAoIXJvLSZndDtvcF93cml0ZSkKJiM0MzsJCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CiYjNDM7CQkJdW5waW5fdXNlcl9wYWdlKHBhZ2UpOwogCQl9CiAJfQogCkBAIC01MTMsOCAmIzQzOzUyMiwxMiBAQCB2b2lkIHJkc19hdG9taWNfZnJlZV9vcChzdHJ1Y3Qgcm1fYXRvbWljX29wICphbykKIAogCS8qIE1hcmsgcGFnZSBkaXJ0eSBpZiBpdCB3YXMgcG9zc2libHkgbW9kaWZpZWQsIHdoaWNoCiAJICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZQotCSAqIHRvIGxvY2FsIG1lbW9yeSAqLwotCXVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jaygmYW1wO3BhZ2UsIDEsIHRydWUpOwomIzQzOwkgKiB0byBsb2NhbCBtZW1vcnkuICBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgSUIgc2VuZAomIzQzOwkgKiBjb21wbGV0aW9uIHRhc2tsZXQsIHNvIHRoZSBzbGVlcGluZyBfbG9jayB2YXJpYW50IG11c3QKJiM0MzsJICogbm90IGJlIHVzZWQgaGVyZS4KJiM0MzsJICovCiYjNDM7CXNldF9wYWdlX2RpcnR5KHBhZ2UpOwomIzQzOwl1bnBpbl91c2VyX3BhZ2UocGFnZSk7CiAKIAlrZnJlZShhby0mZ3Q7b3Bfbm90aWZpZXIpOwogCWFvLSZndDtvcF9ub3RpZmllciA9IE5VTEw7CkBAIC03NDcsNiAmIzQzOzc2MCwxMCBAQCBpbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCiAJCQl9CiAJCQlyZHNkZWJ1ZygmIzM0O05lZWQgb2RwOyBsb2NhbF9vZHBfbXIgJXAgdHJhbnNfcHJpdmF0ZSAlcFxuJiMzNDssCiAJCQkJIGxvY2FsX29kcF9tciwgbG9jYWxfb2RwX21yLSZndDtyX3RyYW5zX3ByaXZhdGUpOwomIzQzOwkJCS8qIEZyb20gaGVyZSBvbiB0aGUgTVIgaXMgdG9ybiBkb3duIHRocm91Z2gKJiM0MzsJCQkgKiBfX3Jkc19wdXRfbXJfZmluYWwoKSwgd2hpY2ggZHJvcHMgdGhpcyByZWZlcmVuY2UuCiYjNDM7CQkJICovCiYjNDM7CQkJc29ja19ob2xkKHJkc19yc190b19zayhycykpOwogCQkJb3AtJmd0O29wX29kcF9tciA9IGxvY2FsX29kcF9tcjsKIAkJCW9wLSZndDtvcF9vZHBfYWRkciA9IGlvdi0mZ3Q7YWRkcjsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuYwppbmRleCA2OGJlMWJmMGUwYWRmOS4uYWIzYTgzNjZjNTNiZDkgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvc2VuZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvc2VuZC5jCkBAIC0zMzksOSAmIzQzOzMzOSwxNyBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJCQkgICAgKHJtLSZndDtyZG1hLm9wX2FjdGl2ZSAmYW1wOyZhbXA7CiAJCQkgICAgdGVzdF9iaXQoUkRTX01TR19SRVRSQU5TTUlUVEVELCAmYW1wO3JtLSZndDttX2ZsYWdzKSkpIHsKIAkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2NwLSZndDtjcF9sb2NrLCBmbGFncyk7Ci0JCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sICZhbXA7cm0tJmd0O21fZmxhZ3MpKQomIzQzOwkJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19NU0dfT05fQ09OTiwgJmFtcDtybS0mZ3Q7bV9mbGFncykpIHsKJiM0MzsJCQkJCS8qIG91ciByZWYgaXMgcHV0IGFmdGVyIHRoZSBiYXRjaCAqLwogCQkJCQlsaXN0X21vdmUoJmFtcDtybS0mZ3Q7bV9jb25uX2l0ZW0sICZhbXA7dG9fYmVfZHJvcHBlZCk7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2NwLSZndDtjcF9sb2NrLCBmbGFncyk7CiYjNDM7CQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Y3AtJmd0O2NwX2xvY2ssIGZsYWdzKTsKJiM0MzsJCQkJfSBlbHNlIHsKJiM0MzsJCQkJCS8qIGFscmVhZHkgb2ZmIHRoZSBjb25uIGxpc3Q7IGRyb3AKJiM0MzsJCQkJCSAqIHRoZSByZWYgdGFrZW4gYWJvdmUgb3Vyc2VsdmVzCiYjNDM7CQkJCQkgKi8KJiM0MzsJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjcC0mZ3Q7Y3BfbG9jaywgZmxhZ3MpOwomIzQzOwkJCQkJcmRzX21lc3NhZ2VfcHV0KHJtKTsKJiM0MzsJCQkJfQogCQkJCWNvbnRpbnVlOwogCQkJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUkRTIFBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBwb2tpbmcgYXJvdW5kIGluIHRoZSBSRFMgc3Vic3lzdGVtIOKAkyBzcGVjaWZpY2FsbHkgYG5ldC9yZHMvcmRtYS5jYCBhbmQgYG5ldC9yZHMvc2VuZC5jYC4gTXkgaW5pdGlhbCByZWFkIHN1Z2dlc3RzIHNvbWUgaW1wb3J0YW50IHJlZmFjdG9yaW5nIGFyb3VuZCBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgcmVsYXRlZCB0byBSRE1BIG9wZXJhdGlvbnMuIFRoZXkmIzM5O3ZlIGFkZGVkIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcgdXNpbmcgYHNvY2tfaG9sZGAgYW5kIGBzb2NrX3B1dGAgd2l0aGluIGByZHNfbXJgIGFuZCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCwgd2hpY2ggaXMgc21hcnQuIEVuc3VyZXMgdGhlIHNvY2tldCBvdXRsaXZlcyB0aGUgbWVtb3J5IHJlZ2lvbiwgd2hpY2ggaXMgYSBjb21tb24gc291cmNlIG9mIHN1YnRsZSBtZW1vcnkgY29ycnVwdGlvbiBidWdzLiBUaGUgb3RoZXIgY2hhbmdlIHdpdGggcmVwbGFjaW5nIGB1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2tgIHdpdGggYHNldF9wYWdlX2RpcnR5YCBhbmQgYHVucGluX3VzZXJfcGFnZWAgaW4gYHJkc19yZG1hX2ZyZWVfb3BgIGFuZCBgcmRzX2F0b21pY19mcmVlX29wYCBiZWNhdXNlIGl0JiMzOTtzIGluIGEgdGFza2xldCBjb250ZXh0IGlzIGEgZ29vZCBtb3ZlIHRvbyDigJMgYXZvaWRzIHBvdGVudGlhbCBsb2NraW5nIGlzc3Vlcy4gRmluYWxseSwgZml4aW5nIHRoYXQgcmVmY291bnQgbGVhayBpbiBgcmRzX3NlbmRfeG1pdGAgd2hlbiBtZXNzYWdlcyBhcmUgYWxyZWFkeSBvZmYgdGhlIGNvbm5lY3Rpb24gbGlzdD8gRGVmaW5pdGVseSBhIHdpbiEKCkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gUkRTJiMzOTtzIGJlaGF2aW91ci4gSXQgYWx0ZXJzIGhvdyBpdCBoYW5kbGVzIHJlc291cmNlcywgZXNwZWNpYWxseSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc29ja2V0IGxpZmVzcGFuLCBpbiBSRE1BIG9wZXJhdGlvbnMuIEkgd291bGQgY29uc2lkZXIgdGhpcyBhIGhpZ2gtcHJpb3JpdHkgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IGl0IHRvdWNoZXMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG5ldHdvcmsgaW50ZXJhY3Rpb25zOyB0aG9zZSBhcmUgYWx3YXlzIHJpc2t5IGFyZWFzLgoKTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCBob3cgdG8gYnVpbGQgdGhpcyB3aXRoIGZ1enppbmcgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRpbWUgdG8gc2VhcmNoIHRoZSBrZXJuZWwgY29uZmlnIGZvciBgQ09ORklHX1JEU2Agb3IgYW55dGhpbmcgcmVsYXRlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSRFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9LY29uZmlnLTItXG5uZXQvcmRzL0tjb25maWc6Mzpjb25maWcgUkRTXG5uZXQvcmRzL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O1RoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXCYjMzQ7XG4tLVxubmV0L3Jkcy9LY29uZmlnLTktXG5uZXQvcmRzL0tjb25maWc6MTA6Y29uZmlnIFJEU19SRE1BXG5uZXQvcmRzL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtSRFMgb3ZlciBJbmZpbmliYW5kXCYjMzQ7XG4tLVxubmV0L3Jkcy9LY29uZmlnLTE2LVxubmV0L3Jkcy9LY29uZmlnOjE3OmNvbmZpZyBSRFNfVENQXG5uZXQvcmRzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtSRFMgb3ZlciBUQ1BcJiMzNDtcbi0tXG5uZXQvcmRzL0tjb25maWctMjQtXG5uZXQvcmRzL0tjb25maWc6MjU6Y29uZmlnIFJEU19ERUJVR1xubmV0L3Jkcy9LY29uZmlnLTI2LVx0Ym9vbCBcJiMzNDtSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc1MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkV4YW1pbmluZyB0aGUgUkRTL1JETUEgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBgUkRTYCBhcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIGVsZW1lbnQgaGVyZS4gSSBpbW1lZGlhdGVseSBoYXZlIGEgaHVuY2ggdGhhdCBgUkRTX1JETUFgIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCDigJMgcHJvYmFibHkgKmNydWNpYWwqIOKAkyBmb3IgdGhlIHByb3BlciBoYW5kbGluZyBvZiBgbmV0L3Jkcy9yZG1hLmNgLiBJdCYjMzk7cyBhIGNsYXNzaWMgc2NlbmFyaW87IEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGF0IFJETUEgaW1wbGVtZW50YXRpb24gaXMgY29tcGlsZWQgaW50byB0aGUgbW9kdWxlIGNvbmRpdGlvbmFsbHkuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYG5ldC9yZHMvTWFrZWZpbGVgIGFuZCBzZWUgaWYgYHJkbWEuY2AgaGFzIGFueSBidWlsZCBkaXJlY3RpdmVzIGFyb3VuZCBpdC4gVGhhdCYjMzk7bGwgdGVsbCBtZSBpZiBgUkRTX1JETUFgIGFjdHVhbGx5IGNvbnRyb2xzIHdoZXRoZXIgdGhhdCBSRE1BIGZ1bmN0aW9uYWxpdHkgaXMgaW5jbHVkZWQuIEkgbmVlZCB0aGF0IGJ1aWxkIHByb2Nlc3MgaW5mb3JtYXRpb24gYXMgcGFydCBvZiBteSBvdmVydmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZG1hXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9NYWtlZmlsZT0zPXJkcy15IDo9XHRhZl9yZHMubyBiaW5kLm8gY29uZy5vIGNvbm5lY3Rpb24ubyBpbmZvLm8gbWVzc2FnZS5vICAgXFxcbm5ldC9yZHMvTWFrZWZpbGUtNC1cdFx0XHRyZWN2Lm8gc2VuZC5vIHN0YXRzLm8gc3lzY3RsLm8gdGhyZWFkcy5vIHRyYW5zcG9ydC5vIFxcXG5uZXQvcmRzL01ha2VmaWxlOjU6XHRcdFx0bG9vcC5vIHBhZ2UubyByZG1hLm9cbm5ldC9yZHMvTWFrZWZpbGUtNi1cbm5ldC9yZHMvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfUkRTX1JETUEpICYjNDM7PSByZHNfcmRtYS5vXG5uZXQvcmRzL01ha2VmaWxlLTgtcmRzX3JkbWEteSA6PVx0cmRtYV90cmFuc3BvcnQubyBcXFxubmV0L3Jkcy9NYWtlZmlsZS05LVx0XHRcdGliLm8gaWJfY20ubyBpYl9yZWN2Lm8gaWJfcmluZy5vIGliX3NlbmQubyBpYl9zdGF0cy5vIFxcXG5uZXQvcmRzL01ha2VmaWxlOjEwOlx0XHRcdGliX3N5c2N0bC5vIGliX3JkbWEubyBpYl9mcm1yLm9cbm5ldC9yZHMvTWFrZWZpbGUtMTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI0NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUkRTL1JETUEgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMga2VybmVsIG1vZHVsZSBzdHVmZi4gSXQgc2VlbXMgYHJkbWEub2AgaXMgYmFrZWQgaW4gd2l0aCBgcmRzLXlgLCBhbmQgdGhlcmVmb3JlIGlzIGJ1aWx0IHdoZW4gYENPTkZJR19SRFNgIGlzIGVuYWJsZWQuIFNpbWlsYXJseSwgYHJkc19yZG1hLm9gIGdldHMgY29tcGlsZWQgb25seSB3aGVuIGBDT05GSUdfUkRTX1JETUFgIGlzIHNldC4gVGhlIGZpbGUgdGhhdCYjMzk7cyBiZWVuIG1vZGlmaWVkLCBgbmV0L3Jkcy9yZG1hLmNgLCByZWxhdGVzIGRpcmVjdGx5IHRvIGByZG1hLm9gLCBzbyBpbnR1aXRpdmVseSwgYENPTkZJR19SRFNgIHNob3VsZCBiZSBlbm91Z2ggdG8gaW5jb3Jwb3JhdGUgdGhvc2UgY2hhbmdlcy4gQnV0IHdhaXQgYSBzZWMuLi4gYG5ldC9yZHMvcmRtYS5jYCAqaGFuZGxlcyogUkRNQSBvcGVyYXRpb25zIGZvciBSRFMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYFJEU19SRE1BYCBpc24mIzM5O3QgcmVxdWlyZWQgdG8gYWN0dWFsbHkgKnVzZSogdGhlIFJETUEgYml0cyB3aXRoaW4gdGhhdCBmaWxlLCBzbyBsZXQgbWUgZGVsdmUgZGVlcGVyLgoKTGV0JiMzOTtzIHNlZSwgdGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnM6IGBfX3Jkc19wdXRfbXJfZmluYWxgLCBgX19yZHNfcmRtYV9tYXBgLCBgcmRzX3JkbWFfZnJlZV9vcGAsIGByZHNfYXRvbWljX2ZyZWVfb3BgLCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCwgYW5kIGByZHNfc2VuZF94bWl0YC4gSGFuZyBvbi4uLiBgcmRzX3NlbmRfeG1pdGAgaXMgYWN0dWFsbHkgaW4gYG5ldC9yZHMvc2VuZC5jYCwgd2hpY2ggaXMgYWxzbyBpbmNsdWRlZCBpbiB0aGUgYHJkcy15YCBtb2R1bGUuCgpBbHJpZ2h0LCB0aW1lIHRvIGZvY3VzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHRoZSBrZXkgb25lcyB0aGF0IGRlbWFuZCBmdXJ0aGVyIHNjcnV0aW55LgoKU28sIGhlcmUmIzM5O3MgbXkgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMsIGFnYWluOgotIGBfX3Jkc19wdXRfbXJfZmluYWxgCi0gYF9fcmRzX3JkbWFfbWFwYAotIGByZHNfcmRtYV9mcmVlX29wYAotIGByZHNfYXRvbWljX2ZyZWVfb3BgCi0gYHJkc19jbXNnX3JkbWFfYXJnc2AKLSBgcmRzX3NlbmRfeG1pdGAKCmByZHNfc2VuZF94bWl0YCBpcyBhbG1vc3QgY2VydGFpbmx5IGEgaG90IHBhdGgg4oCTIHRoYXQmIzM5O3MgdGhlIG1lc3NhZ2UgdHJhbnNtaXNzaW9uIGZ1bmN0aW9uLCBzbyB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSBjYW5kaWRhdGUuIGBfX3Jkc19yZG1hX21hcGAgYW5kIGByZHNfY21zZ19yZG1hX2FyZ3NgIGxvb2sgcHJvbWlzaW5nIHRvbywgdGhleSBhcmUgcHJvYmFibHkgaW52b2x2ZWQgaW4gc2V0dGluZyB1cCB0aGUgUkRNQSBtYXBwaW5ncy4gUGx1cywgYHJkc19yZG1hX2ZyZWVfb3BgIGFuZCBgcmRzX2F0b21pY19mcmVlX29wYCBhcmUgdmVyeSBsaWtlbHkgaW52b2x2ZWQgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIHRvIHRoZSBSRE1BIHRyYW5zZmVycywgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZS4KCkkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZG91YmxlLWNoZWNraW5nIHRoZSBjb2RlIGluIGByZHNfY21zZ19yZG1hX2FyZ3NgIGFuZCBgX19yZHNfcmRtYV9tYXBgIHRvIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmRzX2Ntc2dfcmRtYV9hcmdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9yZG1hLmM9NTY2PWludCByZHNfcmRtYV9leHRyYV9zaXplKHN0cnVjdCByZHNfcmRtYV9hcmdzICphcmdzLFxuLS1cbm5ldC9yZHMvcmRtYS5jLTYxNy0gKi9cbm5ldC9yZHMvcmRtYS5jOjYxODppbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG5uZXQvcmRzL3JkbWEuYy02MTktXHRcdCAgICAgICBzdHJ1Y3QgY21zZ2hkciAqY21zZyxcbi0tXG5uZXQvcmRzL3Jkcy5oPTk2Nj1pbnQgcmRzX2Ntc2dfcmRtYV9kZXN0KHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG5uZXQvcmRzL3Jkcy5oLTk2Ny1cdFx0XHQgIHN0cnVjdCBjbXNnaGRyICpjbXNnKTtcbm5ldC9yZHMvcmRzLmg6OTY4OmludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbm5ldC9yZHMvcmRzLmgtOTY5LVx0XHRcdCAgc3RydWN0IGNtc2doZHIgKmNtc2csXG4tLVxubmV0L3Jkcy9zZW5kLmM9MTA1Mz1zdGF0aWMgaW50IHJkc19jbXNnX3NlbmQoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbi0tXG5uZXQvcmRzL3NlbmQuYy0xMDczLVx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG5uZXQvcmRzL3NlbmQuYzoxMDc0Olx0XHRcdHJldCA9IHJkc19jbXNnX3JkbWFfYXJncyhycywgcm0sIGNtc2csIFx1MDAyNnZjdC1cdTAwM2V2ZWNbaW5kXSk7XG5uZXQvcmRzL3NlbmQuYy0xMDc1LVx0XHRcdGluZCYjNDM7JiM0Mzs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYwMwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IEEgQ29udHJvbCBNZXNzYWdlIEJvbmFuemEhKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IFJETUEgYW5kIG1lc3NhZ2UgaGFuZGxpbmcuIEV4Y2VsbGVudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHJkc19jbXNnX3JkbWFfYXJnc2AgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEl0JiMzOTtzIHRyaWdnZXJlZCBkdXJpbmcgc2VuZC1zaWRlIGNvbnRyb2wgbWVzc2FnZSBwYXJzaW5nIOKAkyB3aGljaCBzY3JlYW1zIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHBvaW50cyBkdWUgdG8gdGhlIGNvbXBsZXhpdHkgYW5kIHZhcmlhYmlsaXR5IG9mIHVzZXItc3VwcGxpZWQgZGF0YS4gVGhpcyBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgZnVuY3Rpb24gdGhhdCBsb3ZlcyB0byByZXZlYWwgc3VidGxlIGZsYXdzIHdoZW4gZmVkIG1hbGZvcm1lZCBpbnB1dC4gVGhpcyBpcyB3aGVyZSBJIHdvdWxkIHN0YXJ0IG15IGZ1enppbmcgY2FtcGFpZ24uCgpOb3csIGxldCYjMzk7cyBkaWcgYSBiaXQgZGVlcGVyLiBJIHNlZSBgX19yZHNfcmRtYV9tYXBgIGdldHMgY2FsbGVkIGZyb20gYHJkc19nZXRfbXJgLiBUaGlzIGlzIGludGVyZXN0aW5nLiBgcmRzX2dldF9tcmAgc291bmRzIGxpa2UgaXQgaGFuZGxlcyBtZW1vcnkgcmVnaW9ucywgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgUkRNQSBzZXR1cC4gVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93IGlzIHdoZXJlIGByZHNfZ2V0X21yYCBpcyBjYWxsZWQgZnJvbS4gSXMgdGhpcyBhbiBpb2N0bCBjYWxsLCBhIHNldHNvY2tvcHQsIG9yIHBlcmhhcHMgc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEtub3dpbmcgdGhpcyBjYWxsaW5nIGNvbnRleHQgd2lsbCBiZSB2aXRhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXR0YWNrIHN1cmZhY2UgYW5kIGhvdyB0byBleHBsb2l0IHBvdGVudGlhbCBmbGF3cy4gSXQgd2lsbCBndWlkZSBtZSBvbiB3aGVyZSB0byBwbGFjZSB0aGUgZnV6emluZyBoYXJuZXNzLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHRoaW5nIHRvIGludmVzdGlnYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3Jkc19yZG1hX21hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvcmRtYS5jPTE1NT1zdGF0aWMgaW50IHJkc19waW5fcGFnZXModW5zaWduZWQgbG9uZyB1c2VyX2FkZHIsIHVuc2lnbmVkIGludCBucl9wYWdlcyxcbi0tXG5uZXQvcmRzL3JkbWEuYy0xNzItXG5uZXQvcmRzL3JkbWEuYzoxNzM6c3RhdGljIGludCBfX3Jkc19yZG1hX21hcChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzICphcmdzLFxubmV0L3Jkcy9yZG1hLmMtMTc0LVx0XHRcdCAgdTY0ICpjb29raWVfcmV0LCBzdHJ1Y3QgcmRzX21yICoqbXJfcmV0LFxuLS1cbm5ldC9yZHMvcmRtYS5jPTM2MD1pbnQgcmRzX2dldF9tcihzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9yZHMvcmRtYS5jLTM2OS1cbm5ldC9yZHMvcmRtYS5jOjM3MDpcdHJldHVybiBfX3Jkc19yZG1hX21hcChycywgXHUwMDI2YXJncywgTlVMTCwgTlVMTCwgTlVMTCk7XG5uZXQvcmRzL3JkbWEuYy0zNzEtfVxuLS1cbm5ldC9yZHMvcmRtYS5jPTM3Mz1pbnQgcmRzX2dldF9tcl9mb3JfZGVzdChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9yZHMvcmRtYS5jLTM5My1cbm5ldC9yZHMvcmRtYS5jOjM5NDpcdHJldHVybiBfX3Jkc19yZG1hX21hcChycywgXHUwMDI2bmV3X2FyZ3MsIE5VTEwsIE5VTEwsIE5VTEwpO1xubmV0L3Jkcy9yZG1hLmMtMzk1LX1cbi0tXG5uZXQvcmRzL3JkbWEuYz04NjQ9aW50IHJkc19jbXNnX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG4tLVxubmV0L3Jkcy9yZG1hLmMtODcwLVxubmV0L3Jkcy9yZG1hLmM6ODcxOlx0cmV0dXJuIF9fcmRzX3JkbWFfbWFwKHJzLCBDTVNHX0RBVEEoY21zZyksIFx1MDAyNnJtLVx1MDAzZW1fcmRtYV9jb29raWUsXG5uZXQvcmRzL3JkbWEuYy04NzItXHRcdFx0ICAgICAgXHUwMDI2cm0tXHUwMDNlcmRtYS5vcF9yZG1hX21yLCBybS1cdTAwM2VtX2Nvbm5fcGF0aCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NzMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkZvY3VzaW5nIG9uIFJETUEgTWFwcGluZyBhbmQgRnJlZSBPcGVyYXRpb25zKioKCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBfX3Jkc19yZG1hX21hcGAgaXMgdGhlIGtleSBmdW5jdGlvbiB0byBkaXNzZWN0IGhlcmUuIEkgc2VlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGByZHNfZ2V0X21yYCwgYHJkc19nZXRfbXJfZm9yX2Rlc3RgLCBhbmQgYHJkc19jbXNnX3JkbWFfbWFwYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLCB0aGF0IG1lYW5zIHRoZXNlIGFyZSBwb3RlbnRpYWxseSB1c2VyLWFjY2Vzc2libGUgdmlhIGBzZXRzb2Nrb3B0YCBhbmQgYHNlbmRtc2dgLiBTaW5jZSB0aG9zZSBzeXNjYWxscyBhcmUgdGhlIGludGVyZmFjZSB0byB1c2Vyc3BhY2UgZm9yIHRoZXNlIGZ1bmN0aW9ucywgYF9fcmRzX3JkbWFfbWFwYCBhbmQgaXRzIGFzc29jaWF0ZWQgc3RydWN0dXJlIGByZHNfY21zZ19yZG1hX2FyZ3NgIGFyZSBjbGVhcmx5IHRoZSBmb2NhbCBwb2ludHMgb2YgYW55IGludmVzdGlnYXRpb24gaW50byB0aGlzIFJETUEgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlbSBmdWxseS4KCk5leHQsIEkgc2hvdWxkIGxvb2sgY2xvc2VseSBhdCBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgLiBUaGUgbWFwcGluZyBhbmQgdW5tYXBwaW5nL2ZyZWVpbmcgb3BlcmF0aW9ucyBhcmUgYWx3YXlzIHRoZSBjcml0aWNhbCBwb2ludHMgdG8gYW5hbHl6ZSBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBpc3N1ZXMsIGVzcGVjaWFsbHkgaW4gUkRNQSBjb250ZXh0cyB3aGVyZSBtZW1vcnkgaXMgYmVpbmcgcGlubmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHNfcmRtYV9mcmVlX29wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9tZXNzYWdlLmM9MTMyPXN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3B1cmdlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXG4tLVxubmV0L3Jkcy9tZXNzYWdlLmMtMTc0LVx0aWYgKHJtLVx1MDAzZXJkbWEub3BfYWN0aXZlKVxubmV0L3Jkcy9tZXNzYWdlLmM6MTc1Olx0XHRyZHNfcmRtYV9mcmVlX29wKFx1MDAyNnJtLVx1MDAzZXJkbWEpO1xubmV0L3Jkcy9tZXNzYWdlLmMtMTc2LVx0aWYgKHJtLVx1MDAzZXJkbWEub3BfcmRtYV9tcilcbi0tXG5uZXQvcmRzL3JkbWEuYz00NDY9dm9pZCByZHNfcmRtYV91bnVzZShzdHJ1Y3QgcmRzX3NvY2sgKnJzLCB1MzIgcl9rZXksIGludCBmb3JjZSlcbi0tXG5uZXQvcmRzL3JkbWEuYy00OTAtXG5uZXQvcmRzL3JkbWEuYzo0OTE6dm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybylcbm5ldC9yZHMvcmRtYS5jLTQ5Mi17XG4tLVxubmV0L3Jkcy9yZG1hLmM9NjE4PWludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbi0tXG5uZXQvcmRzL3JkbWEuYy04MDktXHRpZiAocmV0KVxubmV0L3Jkcy9yZG1hLmM6ODEwOlx0XHRyZHNfcmRtYV9mcmVlX29wKG9wKTtcbm5ldC9yZHMvcmRtYS5jLTgxMS1cdGVsc2Vcbi0tXG5uZXQvcmRzL3Jkcy5oPTk3MT1pbnQgcmRzX2Ntc2dfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbm5ldC9yZHMvcmRzLmgtOTcyLVx0XHRcdCAgc3RydWN0IGNtc2doZHIgKmNtc2cpO1xubmV0L3Jkcy9yZHMuaDo5NzM6dm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybyk7XG5uZXQvcmRzL3Jkcy5oLTk3NC12b2lkIHJkc19hdG9taWNfZnJlZV9vcChzdHJ1Y3Qgcm1fYXRvbWljX29wICphbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0ODIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHNfYXRvbWljX2ZyZWVfb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcmRzL21lc3NhZ2UuYz0xMzI9c3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfcHVyZ2Uoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbi0tXG5uZXQvcmRzL21lc3NhZ2UuYy0xNzktXHRpZiAocm0tXHUwMDNlYXRvbWljLm9wX2FjdGl2ZSlcbm5ldC9yZHMvbWVzc2FnZS5jOjE4MDpcdFx0cmRzX2F0b21pY19mcmVlX29wKFx1MDAyNnJtLVx1MDAzZWF0b21pYyk7XG5uZXQvcmRzL21lc3NhZ2UuYy0xODEtXHRpZiAocm0tXHUwMDNlYXRvbWljLm9wX3JkbWFfbXIpXG4tLVxubmV0L3Jkcy9yZG1hLmM9NDkxPXZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pXG4tLVxubmV0L3Jkcy9yZG1hLmMtNTE4LVxubmV0L3Jkcy9yZG1hLmM6NTE5OnZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKVxubmV0L3Jkcy9yZG1hLmMtNTIwLXtcbi0tXG5uZXQvcmRzL3Jkcy5oPTk3Mz12b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKTtcbm5ldC9yZHMvcmRzLmg6OTc0OnZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKTtcbm5ldC9yZHMvcmRzLmgtOTc1LXZvaWQgcmRzX3JkbWFfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCBpbnQgd2Nfc3RhdHVzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY3MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29kZSBwYXRocy4KCioqRXhhbWluaW5nIFBvdGVudGlhbCBDbGVhbnVwIENhbmRpZGF0ZXMgaW4gUkRTKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXJlIHdlIG1pZ2h0IGJlIGFibGUgdG8gaW1wcm92ZSBtZXNzYWdlIGhhbmRsaW5nLiBMb29raW5nIGF0IHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcywgSSYjMzk7bSBmb2N1c2luZyBvbiBhcmVhcyB3aGVyZSB3ZSYjMzk7cmUgcmVsZWFzaW5nIHJlc291cmNlcyBvciBoYW5kbGluZyBlcnJvcnMuIGByZHNfcmRtYV9mcmVlX29wYCBhbmQgYHJkc19hdG9taWNfZnJlZV9vcGAgaW1tZWRpYXRlbHkgc3ByaW5nIHRvIG1pbmQuIFNlZW1zIGxpa2UgdGhleSYjMzk7cmUgY2FsbGVkIGR1cmluZyBtZXNzYWdlIHB1cmdpbmcgb3IgaW4gZXJyb3Igc2NlbmFyaW9zLCB3aGljaCBzdWdnZXN0cyB0aGV5IGNvdWxkIGJlIHdvcnRod2hpbGUgdGFyZ2V0cyBmb3IgcmVmaW5lbWVudC4gTmVlZCB0byBleGFtaW5lIHdoYXQgdGhlaXIgcm9sZXMgYXJlLgoKTm93LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGByZHNfc2VuZF94bWl0YCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvcHBvcnR1bml0aWVzIGluIHRoZSBzZW5kIHBhdGgsIHNpbmNlIHRoaXMgaXMgYSBjcml0aWNhbCBzcG90IGZvciBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmRzX3NlbmRfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvY29uZy5jPTIxNz12b2lkIHJkc19jb25nX3F1ZXVlX3VwZGF0ZXMoc3RydWN0IHJkc19jb25nX21hcCAqbWFwKVxuLS1cbm5ldC9yZHMvY29uZy5jLTIzMC1cdFx0XHRyZHNfc3RhdHNfaW5jKHNfY29uZ191cGRhdGVfcXVldWVkKTtcbm5ldC9yZHMvY29uZy5jOjIzMTpcdFx0XHQvKiBXZSBjYW5ub3QgaW5saW5lIHRoZSBjYWxsIHRvIHJkc19zZW5kX3htaXQoKSBoZXJlXG5uZXQvcmRzL2NvbmcuYy0yMzItXHRcdFx0ICogZm9yIHR3byByZWFzb25zIChib3RoIHBlcnRhaW5pbmcgdG8gYSBUQ1AgdHJhbnNwb3J0KTpcbi0tXG5uZXQvcmRzL2liX2NtLmM9MjgyPXN0YXRpYyB2b2lkIHJkc19pYl90YXNrbGV0X2ZuX3NlbmQodW5zaWduZWQgbG9uZyBkYXRhKVxuLS1cbm5ldC9yZHMvaWJfY20uYy0yOTktXHQgICAgdGVzdF9iaXQoMCwgXHUwMDI2Y29ubi1cdTAwM2VjX21hcF9xdWV1ZWQpKSlcbm5ldC9yZHMvaWJfY20uYzozMDA6XHRcdHJkc19zZW5kX3htaXQoXHUwMDI2aWMtXHUwMDNlY29ubi1cdTAwM2VjX3BhdGhbMF0pO1xubmV0L3Jkcy9pYl9jbS5jLTMwMS19XG4tLVxubmV0L3Jkcy9pYl9zZW5kLmM9MjQ1PXZvaWQgcmRzX2liX3NlbmRfY3FlX2hhbmRsZXIoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX3djICp3Yylcbi0tXG5uZXQvcmRzL2liX3NlbmQuYy0zMzUtICpcbm5ldC9yZHMvaWJfc2VuZC5jOjMzNjogKiBUaGUgUkRTIHNlbmQgY29kZSBpcyBlc3NlbnRpYWxseSBzaW5nbGUtdGhyZWFkZWQ7IHJkc19zZW5kX3htaXRcbm5ldC9yZHMvaWJfc2VuZC5jLTMzNy0gKiBzZXRzIFJEU19JTl9YTUlUIHRvIGVuc3VyZSBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBzZW5kIHJpbmcuXG4tLVxubmV0L3Jkcy9sb29wLmM9MjMxPXZvaWQgcmRzX2xvb3BfbmV0X2V4aXQodm9pZClcbi0tXG5uZXQvcmRzL2xvb3AuYy0yMzctICogVGhpcyBpcyBtaXNzaW5nIC54bWl0XyogYmVjYXVzZSBsb29wIGRvZXNuJiMzOTt0IGdvIHRocm91Z2ggZ2VuZXJpY1xubmV0L3Jkcy9sb29wLmM6MjM4OiAqIHJkc19zZW5kX3htaXQoKSBhbmQgZG9lc24mIzM5O3QgY2FsbCByZHNfcmVjdl9pbmNvbWluZygpLiAgLmxpc3Rlbl9zdG9wIGFuZFxubmV0L3Jkcy9sb29wLmMtMjM5LSAqIC5sYWRkcl9jaGVjayBhcmUgbWlzc2luZyBiZWNhdXNlIHRyYW5zcG9ydC5jIGRvZXNuJiMzOTt0IGl0ZXJhdGUgb3ZlclxuLS1cbm5ldC9yZHMvcmRzLmg9NTI5PXN0cnVjdCByZHNfdHJhbnNwb3J0IHtcbi0tXG5uZXQvcmRzL3Jkcy5oLTU2OS1cdC8qXG5uZXQvcmRzL3Jkcy5oOjU3MDpcdCAqIC54bWl0IGlzIGNhbGxlZCBieSByZHNfc2VuZF94bWl0KCkgdG8gdGVsbCB0aGUgdHJhbnNwb3J0IHRvIHNlbmRcbm5ldC9yZHMvcmRzLmgtNTcxLVx0ICogcGFydCBvZiBhIG1lc3NhZ2UuICBUaGUgY2FsbGVyIHNlcmlhbGl6ZXMgb24gdGhlIHNlbmRfc2VtIHNvIHRoaXNcbi0tXG5uZXQvcmRzL3Jkcy5oPTk0Nj12b2lkIHJkc19zZW5kX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNvbm4pO1xubmV0L3Jkcy9yZHMuaDo5NDc6aW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKTtcbm5ldC9yZHMvcmRzLmgtOTQ4LXN0cnVjdCBzb2NrYWRkcl9pbjtcbi0tXG5uZXQvcmRzL3NlbmQuYy00NC1cbm5ldC9yZHMvc2VuZC5jOjQ1Oi8qIFdoZW4gdHJhbnNtaXR0aW5nIG1lc3NhZ2VzIGluIHJkc19zZW5kX3htaXQsIHdlIG5lZWQgdG8gZW1lcmdlIGZyb21cbm5ldC9yZHMvc2VuZC5jLTQ2LSAqIHRpbWUgdG8gdGltZSBhbmQgYnJpZWZseSByZWxlYXNlIHRoZSBDUFUuIE90aGVyd2lzZSB0aGUgc29mdGxvY2sgd2F0Y2hkb2dcbi0tXG5uZXQvcmRzL3NlbmQuYz01OT1zdGF0aWMgdm9pZCByZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKHN0cnVjdCBsaXN0X2hlYWQgKm1lc3NhZ2VzLCBpbnQgc3RhdHVzKTtcbi0tXG5uZXQvcmRzL3NlbmQuYy02Mi0gKiBSZXNldCB0aGUgc2VuZCBzdGF0ZS4gIENhbGxlcnMgbXVzdCBlbnN1cmUgdGhhdCB0aGlzIGRvZXNuJiMzOTt0IHJhY2Ugd2l0aFxubmV0L3Jkcy9zZW5kLmM6NjM6ICogcmRzX3NlbmRfeG1pdCgpLlxubmV0L3Jkcy9zZW5kLmMtNjQtICovXG4tLVxubmV0L3Jkcy9zZW5kLmM9MTI4PXN0YXRpYyBib29sIHJkc19tcHJkc19jcDBfY2F0Y2h1cChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4tLVxubmV0L3Jkcy9zZW5kLmMtMTg2LSAqL1xubmV0L3Jkcy9zZW5kLmM6MTg3OmludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbm5ldC9yZHMvc2VuZC5jLTE4OC17XG4tLVxubmV0L3Jkcy9zZW5kLmMtNTM3LX1cbm5ldC9yZHMvc2VuZC5jOjUzODpFWFBPUlRfU1lNQk9MX0dQTChyZHNfc2VuZF94bWl0KTtcbm5ldC9yZHMvc2VuZC5jLTUzOS1cbi0tXG5uZXQvcmRzL3NlbmQuYz02NzI9c3RhdGljIHZvaWQgcmRzX3NlbmRfcmVtb3ZlX2Zyb21fc29jayhzdHJ1Y3QgbGlzdF9oZWFkICptZXNzYWdlcywgaW50IHN0YXR1cylcbi0tXG5uZXQvcmRzL3NlbmQuYy03NDctICogbWVzc2FnZXMgdXAgdG8sIGFuZCBpbmNsdWRpbmcsIHRoZSBnaXZlbiBzZXF1ZW5jZSBudW1iZXIuICBNZXNzYWdlcyBhcmVcbm5ldC9yZHMvc2VuZC5jOjc0ODogKiBtb3ZlZCB0byB0aGUgcmV0cmFucyBxdWV1ZSB3aGVuIHJkc19zZW5kX3htaXQgcGlja3MgdGhlbSBvZmYgdGhlIHNlbmRcbm5ldC9yZHMvc2VuZC5jLTc0OS0gKiBxdWV1ZS4gVGhpcyBtZWFucyB0aGF0IGluIHRoZSBUQ1AgY2FzZSwgdGhlIG1lc3NhZ2UgbWF5IG5vdCBoYXZlIGJlZW5cbi0tXG5uZXQvcmRzL3NlbmQuYz0xMTM3PWludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbilcbi0tXG5uZXQvcmRzL3NlbmQuYy0xNDM0LVxubmV0L3Jkcy9zZW5kLmM6MTQzNTpcdHJldCA9IHJkc19zZW5kX3htaXQoY3BhdGgpO1xubmV0L3Jkcy9zZW5kLmMtMTQzNi1cdGlmIChyZXQgPT0gLUVOT01FTSB8fCByZXQgPT0gLUVBR0FJTikge1xuLS1cbm5ldC9yZHMvdGNwLmM9MTI2PXZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvcmRzL3RjcC5jLTE0MC1cdCAqIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIFJEU19DT05OX1VQLCBhbmQgdGhlblxubmV0L3Jkcy90Y3AuYzoxNDE6XHQgKiB3YWl0aW5nIGZvciBhbnkgZXhpc3RpbmcgdGhyZWFkcyBpbiByZHNfc2VuZF94bWl0IHRvXG5uZXQvcmRzL3RjcC5jLTE0Mi1cdCAqIGNvbXBsZXRlIHJlbGVhc2VfaW5feG1pdCgpLiAoU3Vic2VxdWVudCB0aHJlYWRzIGVudGVyaW5nXG5uZXQvcmRzL3RjcC5jOjE0MzpcdCAqIHJkc19zZW5kX3htaXQoKSB3aWxsIGJhaWwgb24gIXJkc19jb25uX3VwKCkuXG5uZXQvcmRzL3RjcC5jLTE0NC1cdCAqXG4tLVxubmV0L3Jkcy90aHJlYWRzLmM9MTkxPXZvaWQgcmRzX3NlbmRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvcmRzL3RocmVhZHMuYy0xOTktXHRcdGNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG5uZXQvcmRzL3RocmVhZHMuYzoyMDA6XHRcdHJldCA9IHJkc19zZW5kX3htaXQoY3ApO1xubmV0L3Jkcy90aHJlYWRzLmMtMjAxLVx0XHRjb25kX3Jlc2NoZWQoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU4MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jkc19zZW5kbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9hZl9yZHMuYz02NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcmRzX3Byb3RvX29wcyA9IHtcbi0tXG5uZXQvcmRzL2FmX3Jkcy5jLTY2MC1cdC5nZXRzb2Nrb3B0X2l0ZXIgPVx0cmRzX2dldHNvY2tvcHQsXG5uZXQvcmRzL2FmX3Jkcy5jOjY2MTpcdC5zZW5kbXNnID1cdHJkc19zZW5kbXNnLFxubmV0L3Jkcy9hZl9yZHMuYy02NjItXHQucmVjdm1zZyA9XHRyZHNfcmVjdm1zZyxcbi0tXG5uZXQvcmRzL3Jkcy5oPTYxOD1zdHJ1Y3QgcmRzX3NvY2sge1xuLS1cbm5ldC9yZHMvcmRzLmgtNjQwLVx0Lypcbm5ldC9yZHMvcmRzLmg6NjQxOlx0ICogcmRzX3NlbmRtc2cgY2FjaGVzIHRoZSBjb25uIGl0IHVzZWQgdGhlIGxhc3QgdGltZSBhcm91bmQuXG5uZXQvcmRzL3Jkcy5oLTY0Mi1cdCAqIFRoaXMgaGVscHMgYXZvaWQgY29zdGx5IGxvb2t1cHMuXG4tLVxubmV0L3Jkcy9yZHMuaD05Mzk9dm9pZCByZHM2X2luY19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLFxuLS1cbm5ldC9yZHMvcmRzLmgtOTQ0LS8qIHNlbmQuYyAqL1xubmV0L3Jkcy9yZHMuaDo5NDU6aW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKTtcbm5ldC9yZHMvcmRzLmgtOTQ2LXZvaWQgcmRzX3NlbmRfcGF0aF9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY29ubik7XG4tLVxubmV0L3Jkcy9yZWN2LmM9MTk5PXN0YXRpYyB2b2lkIHJkc19yZWN2X2hzX2V4dGhkcnMoc3RydWN0IHJkc19oZWFkZXIgKmhkcixcbi0tXG5uZXQvcmRzL3JlY3YuYy0yNzAtICpcbm5ldC9yZHMvcmVjdi5jOjI3MTogKiAxLiByZHNfc2VuZG1zZyBvbiBmaXJzdCBjb25uZWN0IGF0dGVtcHQgc2VuZHMgdGhlIHByb2JlIHBpbmcsIHdpdGggdGhlXG5uZXQvcmRzL3JlY3YuYy0yNzItICogICAgc2VuZGVyJiMzOTtzIG5wYXRocyAoc19ucGF0aHMpXG4tLVxubmV0L3Jkcy9zZW5kLmM9MTExND1zdGF0aWMgaW50IHJkc19yZG1hX2J5dGVzKHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90ICpyZG1hX2J5dGVzKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTExMzYtXG5uZXQvcmRzL3NlbmQuYzoxMTM3OmludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbilcbm5ldC9yZHMvc2VuZC5jLTExMzgte1xuLS1cbm5ldC9yZHMvc2VuZC5jLTExNjItXG5uZXQvcmRzL3NlbmQuYzoxMTYzOlx0LyogZXhwZWN0IDEgUkRNQSBDTVNHIHBlciByZHNfc2VuZG1zZy4gY2FuIHN0aWxsIGdyb3cgaWYgbW9yZSBuZWVkZWQuICovXG5uZXQvcmRzL3NlbmQuYy0xMTY0LVx0dmN0LmluY3IgPSAxO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEzNAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUkRTIFNlbmQgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgaW4gYHJkc19zZW5kX3htaXRgLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBmdW5jdGlvbiBoYW5kbGluZyBtZXNzYWdlIHNlbmRpbmcgaW4gUkRTLCBjYWxsZWQgZnJvbSBib3RoIGByZHNfc2VuZG1zZ2AgYW5kIGByZHNfc2VuZF93b3JrZXJgLiBUaGF0IG1ha2VzIGl0IGEgbmF0dXJhbCBmb2NhbCBwb2ludCBmb3IgbXkgYW5hbHlzaXMsIGFsdGhvdWdoLCBiZWNhdXNlIGl0IGlzIHRoZSBwcmltYXJ5IHNlbmQgZnVuY3Rpb24sIGl0IG1pZ2h0IGJlIGEgYml0IHRvbyBicm9hZCB0byBzdGFydC4KCkhvd2V2ZXIsIHRoZSBwYXRjaCAqc3BlY2lmaWNhbGx5KiB0YXJnZXRzIGFuIGVycm9yIGNvbmRpdGlvbiB3aXRoaW4gYHJkc19zZW5kX3htaXRgIHdoZW4gUkRNQSBvcGVyYXRpb25zIGFyZSBhY3RpdmUg4oCTIGBybS0mZ3Q7cmRtYS5vcF9hY3RpdmVgIGlzIHRydWUg4oCTIGFuZCBhIG1lc3NhZ2UgaGFzIGJlZW4gcmV0cmFuc21pdHRlZCwgYXMgZmxhZ2dlZCBieSBgUkRTX01TR19SRVRSQU5TTUlUVEVEYC4gVGhpcyByZWFsbHkgbmFycm93cyBkb3duIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHZlY3Rvci4gVGhhdCBnaXZlcyBtZSBhIHByZWNpc2UgZm9jdXMuIEkgc2hvdWxkIGJlIGZ1enppbmcgYHJkc19zZW5kbXNnYCBhbmQgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBSRE1BLXJlbGF0ZWQgb3BlcmF0aW9ucy4KCkkmIzM5O2xsIGRlZmluaXRlbHkgaW5jbHVkZSBgcmRzX3NlbmRfeG1pdGAgaW4gbXkgZm9jdXMgc3ltYm9scywgYnV0IGFsc28gd2FudCB0byBpbmNsdWRlIHRoZSBzdXBwb3J0aW5nIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGludm9sdmVkIGluIHRoZSBlcnJvciBwYXRoLiBJIHNob3VsZCBhbHNvIGluY2x1ZGUgYF9fcmRzX3JkbWFfbWFwYCwgYHJkc19jbXNnX3JkbWFfYXJnc2AsIGByZHNfcmRtYV9mcmVlX29wYCwgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgLiBUaGVzZSBzaG91bGQgYmUgdGhlIGtleSBpbmdyZWRpZW50cywgZXNwZWNpYWxseSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSByZXRyYW5zbWlzc2lvbiBjb2RlIHBhdGguCgpPbmUgdGhpbmcgSSBuZWVkIHRvIGRvdWJsZSBjaGVjayBpcyB0aGF0IHRoaXMgaXMgaW5kZWVkIHNwZWNpZmljIHRvIHRoZSBSRE1BIHBhdGguIFRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvcmRzL3JkbWEuY2AsIGFuZCB0aGF0JiMzOTtzIG9idmlvdXNseSBzdWdnZXN0aXZlLiBJIGtub3cgYHJkbWEuY2AgaXMgY29tcGlsZWQgdW5kZXIgYENPTkZJR19SRFNgLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBDT05GSUdfUkRTX1JETUFgIGlzIG5lZWRlZCwganVzdCB0byBiZSBzdXJlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmUtY2hlY2sgYG5ldC9yZHMvS2NvbmZpZ2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UkRTX1JETUEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9LY29uZmlnPTM9Y29uZmlnIFJEU1xuLS1cbm5ldC9yZHMvS2NvbmZpZy05LVxubmV0L3Jkcy9LY29uZmlnOjEwOmNvbmZpZyBSRFNfUkRNQVxubmV0L3Jkcy9LY29uZmlnLTExLVx0dHJpc3RhdGUgXCYjMzQ7UkRTIG92ZXIgSW5maW5pYmFuZFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzUwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UkRTX1JETUEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvTWFrZWZpbGU9Mz1yZHMteSA6PVx0YWZfcmRzLm8gYmluZC5vIGNvbmcubyBjb25uZWN0aW9uLm8gaW5mby5vIG1lc3NhZ2UubyAgIFxcXG4tLVxubmV0L3Jkcy9NYWtlZmlsZS02LVxubmV0L3Jkcy9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19SRFNfUkRNQSkgJiM0Mzs9IHJkc19yZG1hLm9cbm5ldC9yZHMvTWFrZWZpbGUtOC1yZHNfcmRtYS15IDo9XHRyZG1hX3RyYW5zcG9ydC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDczCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgUkRTIGFuZCBSRE1BIENvbXBpbGF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG5ldC9yZHMvcmRtYS5jYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBjb2RlIGdldHMgY29tcGlsZWQgd2hlbiBgQ09ORklHX1JEU2AgaXMgZW5hYmxlZC4gQnV0LCBoZXJlJiMzOTtzIHRoZSByZWFsIHF1ZXN0aW9uOiBkb2VzIHNpbXBseSBoYXZpbmcgYENPTkZJR19SRFNgIGdpdmUgbWUgUkRNQSBmdW5jdGlvbmFsaXR5IHdpdGhpbiBSRFM/IE9yLCBpcyBgQ09ORklHX1JEU19SRE1BYCBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIHRoYXQgc3BlY2lmaWMgUkRNQSBpbnRlZ3JhdGlvbj8KCkkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFueSBwYXRod2F5IHRvIGByZHNfY21zZ19yZG1hX2FyZ3NgIHdpdGhvdXQgYENPTkZJR19SRFNfUkRNQWAuIEkgbmVlZCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIHRvIHVuZGVyc3RhbmQgaWYgUkRTIFJETUEgY2FuIGJlIHVzZWQgd2l0aG91dCBleHBsaWNpdGx5IGVuYWJsaW5nIGl0LCB3aGljaCB3b3VsZCBiZSBhbiB1bmV4cGVjdGVkIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHNfY21zZ19yZG1hX2FyZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcmRzL3JkbWEuYz01NjY9aW50IHJkc19yZG1hX2V4dHJhX3NpemUoc3RydWN0IHJkc19yZG1hX2FyZ3MgKmFyZ3MsXG4tLVxubmV0L3Jkcy9yZG1hLmMtNjE3LSAqL1xubmV0L3Jkcy9yZG1hLmM6NjE4OmludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbm5ldC9yZHMvcmRtYS5jLTYxOS1cdFx0ICAgICAgIHN0cnVjdCBjbXNnaGRyICpjbXNnLFxuLS1cbm5ldC9yZHMvcmRzLmg9OTY2PWludCByZHNfY21zZ19yZG1hX2Rlc3Qoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbm5ldC9yZHMvcmRzLmgtOTY3LVx0XHRcdCAgc3RydWN0IGNtc2doZHIgKmNtc2cpO1xubmV0L3Jkcy9yZHMuaDo5Njg6aW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxubmV0L3Jkcy9yZHMuaC05NjktXHRcdFx0ICBzdHJ1Y3QgY21zZ2hkciAqY21zZyxcbi0tXG5uZXQvcmRzL3NlbmQuYz0xMDUzPXN0YXRpYyBpbnQgcmRzX2Ntc2dfc2VuZChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxuLS1cbm5ldC9yZHMvc2VuZC5jLTEwNzMtXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbm5ldC9yZHMvc2VuZC5jOjEwNzQ6XHRcdFx0cmV0ID0gcmRzX2Ntc2dfcmRtYV9hcmdzKHJzLCBybSwgY21zZywgXHUwMDI2dmN0LVx1MDAzZXZlY1tpbmRdKTtcbm5ldC9yZHMvc2VuZC5jLTEwNzUtXHRcdFx0aW5kJiM0MzsmIzQzOztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MjcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSRFMgUkRNQSBBcmd1bWVudCBIYW5kbGluZyoqCgpPa2F5LCBzbyBgcmRzX2Ntc2dfcmRtYV9hcmdzYCBpcyBjYWxsZWQgZnJvbSBgcmRzX2Ntc2dfc2VuZGAgd2l0aGluIGBuZXQvcmRzL3NlbmQuY2AuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkOyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBSZW1vdGUgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFJEUykgaW1wbGVtZW50YXRpb24sIGFuZCBpdCYjMzk7cyBidWlsdCB3aGVuIGBDT05GSUdfUkRTYCBpcyBlbmFibGVkLiBTZWVtcyBsb2dpY2FsLgoKSG93ZXZlciwgdGhlIGtleSBxdWVzdGlvbiBub3cgYmVjb21lczogKmRvZXMqIGByZHNfY21zZ19yZG1hX2FyZ3NgICpyZXF1aXJlKiBhbiB1bmRlcmx5aW5nIFJETUEgdHJhbnNwb3J0IHRvIGJlIGZ1bmN0aW9uYWwsIG9yIHdpbGwgaXQgc2ltcGx5IGV4ZWN1dGUsIHBvdGVudGlhbGx5IGZhaWxpbmcgbGF0ZXIgaWYgbm8gUkRNQSBoYXJkd2FyZSBpcyBwcmVzZW50PyBUaGUgcHJlc2VuY2Ugb2YgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGBDT05GSUdfUkRTYCBkZXBlbmRlbmN5IGFsb25lIGRvZXNuJiMzOTt0IGNsYXJpZnkgaXRzIG9wZXJhdGlvbmFsIHJlbGlhbmNlIG9uIGFuIFJETUEtY2FwYWJsZSBzZXR1cC4gVGhpcyBmZWVscyBsaWtlIGFuIG9wdGltaXphdGlvbiB0aGF0IG5lZWRzIGRlZXBlciBwcm9iaW5nLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGByZHNfY21zZ19yZG1hX2FyZ3NgIGl0c2VsZi4gVGhhdCYjMzk7cyB0aGUgb25seSB3YXkgdG8gdW5kZXJzdGFuZCBpdHMgYWN0dWFsIGJlaGF2aW9yIGFuZCBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGF0IGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yZHMvcmRtYS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTg6XHRpbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG4gNjE5Olx0XHRcdCAgICAgICBzdHJ1Y3QgY21zZ2hkciAqY21zZyxcbiA2MjA6XHRcdFx0ICAgICAgIHN0cnVjdCByZHNfaW92X3ZlY3RvciAqdmVjKVxuIDYyMTpcdHtcbiA2MjI6XHRcdHN0cnVjdCByZHNfcmRtYV9hcmdzICphcmdzO1xuIDYyMzpcdFx0c3RydWN0IHJtX3JkbWFfb3AgKm9wID0gXHUwMDI2cm0tXHUwMDNlcmRtYTtcbiA2MjQ6XHRcdGludCBucl9wYWdlcztcbiA2MjU6XHRcdHVuc2lnbmVkIGludCBucl9ieXRlcztcbiA2MjY6XHRcdHN0cnVjdCBwYWdlICoqcGFnZXMgPSBOVUxMO1xuIDYyNzpcdFx0c3RydWN0IHJkc19pb3ZlYyAqaW92cztcbiA2Mjg6XHRcdHVuc2lnbmVkIGludCBpLCBqO1xuIDYyOTpcdFx0aW50IHJldCA9IDA7XG4gNjMwOlx0XHRib29sIG9kcF9zdXBwb3J0ZWQgPSB0cnVlO1xuIDYzMTpcdFxuIDYzMjpcdFx0aWYgKGNtc2ctXHUwMDNlY21zZ19sZW4gXHUwMDNjIENNU0dfTEVOKHNpemVvZihzdHJ1Y3QgcmRzX3JkbWFfYXJncykpXG4gNjMzOlx0XHQgICAgfHwgcm0tXHUwMDNlcmRtYS5vcF9hY3RpdmUpXG4gNjM0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDYzNTpcdFxuIDYzNjpcdFx0YXJncyA9IENNU0dfREFUQShjbXNnKTtcbiA2Mzc6XHRcbiA2Mzg6XHRcdGlmIChpcHY2X2FkZHJfYW55KFx1MDAyNnJzLVx1MDAzZXJzX2JvdW5kX2FkZHIpKSB7XG4gNjM5Olx0XHRcdHJldCA9IC1FTk9UQ09OTjsgLyogWFhYIG5vdCBhIGdyZWF0IGVycm5vICovXG4gNjQwOlx0XHRcdGdvdG8gb3V0X3JldDtcbiA2NDE6XHRcdH1cbiA2NDI6XHRcbiA2NDM6XHRcdGlmIChhcmdzLVx1MDAzZW5yX2xvY2FsIFx1MDAzZSBVSU9fTUFYSU9WKSB7XG4gNjQ0Olx0XHRcdHJldCA9IC1FTVNHU0laRTtcbiA2NDU6XHRcdFx0Z290byBvdXRfcmV0O1xuIDY0NjpcdFx0fVxuIDY0NzpcdFxuIDY0ODpcdFx0aWYgKHZlYy1cdTAwM2VsZW4gIT0gYXJncy1cdTAwM2Vucl9sb2NhbCkge1xuIDY0OTpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDY1MDpcdFx0XHRnb3RvIG91dF9yZXQ7XG4gNjUxOlx0XHR9XG4gNjUyOlx0XHQvKiBvZHAtbXIgaXMgbm90IHN1cHBvcnRlZCBmb3IgbXVsdGlwbGUgcmVxdWVzdHMgd2l0aGluIG9uZSBtZXNzYWdlICovXG4gNjUzOlx0XHRpZiAoYXJncy1cdTAwM2Vucl9sb2NhbCAhPSAxKVxuIDY1NDpcdFx0XHRvZHBfc3VwcG9ydGVkID0gZmFsc2U7XG4gNjU1Olx0XG4gNjU2Olx0XHRpb3ZzID0gdmVjLVx1MDAzZWlvdjtcbiA2NTc6XHRcbiA2NTg6XHRcdG5yX3BhZ2VzID0gcmRzX3JkbWFfcGFnZXMoaW92cywgYXJncy1cdTAwM2Vucl9sb2NhbCk7XG4gNjU5Olx0XHRpZiAobnJfcGFnZXMgXHUwMDNjIDApIHtcbiA2NjA6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiA2NjE6XHRcdFx0Z290byBvdXRfcmV0O1xuIDY2MjpcdFx0fVxuIDY2MzpcdFxuIDY2NDpcdFx0cGFnZXMgPSBremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgbnJfcGFnZXMpO1xuIDY2NTpcdFx0aWYgKCFwYWdlcykge1xuIDY2NjpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDY2NzpcdFx0XHRnb3RvIG91dF9yZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDgzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcmRzL3JkbWEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzUwOlx0XHRcdFx0XHRycy1cdTAwM2Vyc190cmFuc3BvcnQtXHUwMDNlZ2V0X21yKFxuIDc1MTpcdFx0XHRcdFx0XHROVUxMLCAwLCBycywgXHUwMDI2bG9jYWxfb2RwX21yLVx1MDAzZXJfa2V5LCBOVUxMLFxuIDc1MjpcdFx0XHRcdFx0XHRpb3YtXHUwMDNlYWRkciwgaW92LVx1MDAzZWJ5dGVzLCBPRFBfVklSVFVBTCk7XG4gNzUzOlx0XHRcdFx0aWYgKElTX0VSUihsb2NhbF9vZHBfbXItXHUwMDNlcl90cmFuc19wcml2YXRlKSkge1xuIDc1NDpcdFx0XHRcdFx0cmV0ID0gUFRSX0VSUihsb2NhbF9vZHBfbXItXHUwMDNlcl90cmFuc19wcml2YXRlKTtcbiA3NTU6XHRcdFx0XHRcdHJkc2RlYnVnKFwmIzM0O2dldF9tciByZXQgJWQgJXBcXFwmIzM0O1wmIzM0OywgcmV0LFxuIDc1NjpcdFx0XHRcdFx0XHQgbG9jYWxfb2RwX21yLVx1MDAzZXJfdHJhbnNfcHJpdmF0ZSk7XG4gNzU3Olx0XHRcdFx0XHRrZnJlZShsb2NhbF9vZHBfbXIpO1xuIDc1ODpcdFx0XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4gNzU5Olx0XHRcdFx0XHRnb3RvIG91dF9wYWdlcztcbiA3NjA6XHRcdFx0XHR9XG4gNzYxOlx0XHRcdFx0cmRzZGVidWcoXCYjMzQ7TmVlZCBvZHA7IGxvY2FsX29kcF9tciAlcCB0cmFuc19wcml2YXRlICVwXFxuXCYjMzQ7LFxuIDc2MjpcdFx0XHRcdFx0IGxvY2FsX29kcF9tciwgbG9jYWxfb2RwX21yLVx1MDAzZXJfdHJhbnNfcHJpdmF0ZSk7XG4gNzYzOlx0XHRcdFx0LyogRnJvbSBoZXJlIG9uIHRoZSBNUiBpcyB0b3JuIGRvd24gdGhyb3VnaFxuIDc2NDpcdFx0XHRcdCAqIF9fcmRzX3B1dF9tcl9maW5hbCgpLCB3aGljaCBkcm9wcyB0aGlzIHJlZmVyZW5jZS5cbiA3NjU6XHRcdFx0XHQgKi9cbiA3NjY6XHRcdFx0XHRzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7XG4gNzY3Olx0XHRcdFx0b3AtXHUwMDNlb3Bfb2RwX21yID0gbG9jYWxfb2RwX21yO1xuIDc2ODpcdFx0XHRcdG9wLVx1MDAzZW9wX29kcF9hZGRyID0gaW92LVx1MDAzZWFkZHI7XG4gNzY5Olx0XHRcdH1cbiA3NzA6XHRcbiA3NzE6XHRcdFx0cmRzZGVidWcoXCYjMzQ7UkRTOiBucl9ieXRlcyAldSBuciAldSBpb3YtXHUwMDNlYnl0ZXMgJWxsdSBpb3YtXHUwMDNlYWRkciAlbGx4XFxuXCYjMzQ7LFxuIDc3MjpcdFx0XHRcdCBucl9ieXRlcywgbnIsIGlvdi1cdTAwM2VieXRlcywgaW92LVx1MDAzZWFkZHIpO1xuIDc3MzpcdFxuIDc3NDpcdFx0XHRucl9ieXRlcyAmIzQzOz0gaW92LVx1MDAzZWJ5dGVzO1xuIDc3NTpcdFxuIDc3NjpcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBucjsgaiYjNDM7JiM0MzspIHtcbiA3Nzc6XHRcdFx0XHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gaW92LVx1MDAzZWFkZHIgXHUwMDI2IH5QQUdFX01BU0s7XG4gNzc4Olx0XHRcdFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbiA3Nzk6XHRcbiA3ODA6XHRcdFx0XHRzZyA9IFx1MDAyNm9wLVx1MDAzZW9wX3NnW29wLVx1MDAzZW9wX25lbnRzICYjNDM7IGpdO1xuIDc4MTpcdFx0XHRcdHNnX3NldF9wYWdlKHNnLCBwYWdlc1tqXSxcbiA3ODI6XHRcdFx0XHRcdFx0bWluX3QodW5zaWduZWQgaW50LCBpb3YtXHUwMDNlYnl0ZXMsIFBBR0VfU0laRSAtIG9mZnNldCksXG4gNzgzOlx0XHRcdFx0XHRcdG9mZnNldCk7XG4gNzg0Olx0XG4gNzg1Olx0XHRcdFx0c2dfZG1hX2xlbihzZykgPSBzZy1cdTAwM2VsZW5ndGg7XG4gNzg2Olx0XHRcdFx0cmRzZGVidWcoXCYjMzQ7UkRTOiBzZy1cdTAwM2VvZmZzZXQgJXggc2ctXHUwMDNlbGVuICV4IGlvdi1cdTAwM2VhZGRyICVsbHggaW92LVx1MDAzZWJ5dGVzICVsbHVcXG5cJiMzNDssXG4gNzg3Olx0XHRcdFx0ICAgICAgIHNnLVx1MDAzZW9mZnNldCwgc2ctXHUwMDNlbGVuZ3RoLCBpb3YtXHUwMDNlYWRkciwgaW92LVx1MDAzZWJ5dGVzKTtcbiA3ODg6XHRcbiA3ODk6XHRcdFx0XHRpb3YtXHUwMDNlYWRkciAmIzQzOz0gc2ctXHUwMDNlbGVuZ3RoO1xuIDc5MDpcdFx0XHRcdGlvdi1cdTAwM2VieXRlcyAtPSBzZy1cdTAwM2VsZW5ndGg7XG4gNzkxOlx0XHRcdH1cbiA3OTI6XHRcbiA3OTM6XHRcdFx0b3AtXHUwMDNlb3BfbmVudHMgJiM0Mzs9IG5yO1xuIDc5NDpcdFx0fVxuIDc5NTpcdFxuIDc5NjpcdFx0aWYgKG5yX2J5dGVzIFx1MDAzZSBhcmdzLVx1MDAzZXJlbW90ZV92ZWMuYnl0ZXMpIHtcbiA3OTc6XHRcdFx0cmRzZGVidWcoXCYjMzQ7UkRTIG5yX2J5dGVzICV1IHJlbW90ZV9ieXRlcyAldSBkbyBub3QgbWF0Y2hcXG5cJiMzNDssXG4gNzk4Olx0XHRcdFx0XHRucl9ieXRlcyxcbiA3OTk6XHRcdFx0XHRcdCh1bnNpZ25lZCBpbnQpIGFyZ3MtXHUwMDNlcmVtb3RlX3ZlYy5ieXRlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzc3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUkRTIFJETUEgQ29kZSBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYHJkc19jbXNnX3JkbWFfYXJnc2Agd29ya3MgYW5kIGl0IGFwcGVhcnMgdG8gcmVseSBvbiBgcnMtJmd0O3JzX3RyYW5zcG9ydC0mZ3Q7Z2V0X21yYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaWYgdGhlcmUmIzM5O3Mgbm8gdHJhbnNwb3J0IGJvdW5kLCB0aGlzIGNvdWxkIGZhaWwgcHJldHR5IGVhcmx5IG9uLiBIb3dldmVyLCB0aGUgY29kZSAqaXMqIHJlYWNoYWJsZSwgc28gdGhhdCBhc3N1bXB0aW9uIGlzIGEgYml0IHNoYWt5LiBJJiMzOTttIHdvbmRlcmluZyBpZiBgQ09ORklHX1JEU19SRE1BYCBpcyBhY3R1YWxseSAqcmVxdWlyZWQqIHRvIHRyaWdnZXIgdGhpcyBzcGVjaWZpYyBzZWN0aW9uLiBQcm9iYWJseSBub3QsIHN0cmljdGx5IHNwZWFraW5nLCB0byBqdXN0ICpyZWFjaCogdGhlIGNvZGUuIEhvd2V2ZXIsIHdpdGhvdXQgYSB0cnVlIFJETUEgdHJhbnNwb3J0IGluaXRpYWxpemVkLCBgcnMtJmd0O3JzX3RyYW5zcG9ydGAgaXMgbGlrZWx5IHRvIGJlIE5VTEwsIG9yIGF0IGxlYXN0IG5vdCBoYXZlIGltcGxlbWVudGVkIGBnZXRfbXJgLCBtYWtpbmcgdGhlIHdob2xlIHRoaW5nIGEgbm8tb3AuCgpCdXQgd2FpdCBhIG1pbnV0ZSwgdGhlIGBycy0mZ3Q7cnNfdHJhbnNwb3J0YCBpcyBzZXQgZHVyaW5nIHRoZSBiaW5kaW5nIG9yIGNvbm5lY3RpbmcgcGhhc2UuIFRoYXQgbWFrZXMgbW9yZSBzZW5zZS4gTm93IHRoZSBxdWVzdGlvbiBpcywgaWYgd2UmIzM5O3JlIHVzaW5nIHNvbWV0aGluZyBsaWtlIGBSRFNfVENQYCwgZG9lcyB0aGF0IHRyYW5zcG9ydCAqZXZlbiogaW1wbGVtZW50IGBnZXRfbXJgPyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdCBwYXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9tciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvdGNwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxODkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipMb29raW5nIGZvciBgZ2V0X21yYCBpbiBSRE1BIGFuZCBUQ1AgVHJhbnNwb3J0cyoqCgpSaWdodCwgSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCB3aGVyZSBtZW1vcnkgcmVnaXN0cmF0aW9uIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBSRE1BLCBzaW5jZSBUQ1AgZG9lc24mIzM5O3QgaW1wbGVtZW50IGBnZXRfbXJgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgUkRNQSBoYW5kbGVzIGl0cyBtZW1vcnkgcmVnaXN0cmF0aW9uLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbmV0L3Jkcy9pYl9yZG1hLmNgIG9yIGEgZmlsZSBzaW1pbGFybHkgbmFtZWQsIHJlbGF0ZWQgdG8gdGhlIFJETUEgaW1wbGVtZW50YXRpb24uIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSByZWxldmFudCBgZ2V0X21yYCBmdW5jdGlvbmFsaXR5LCBvciBpdHMgZXF1aXZhbGVudCwgd2lsbCBiZSBzaXR1YXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfbXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzL2liJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzOTUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYGdldF9tcmAgaW4gYHJkc190cmFuc3BvcnRgKioKCk9rYXksIHNvIGBnZXRfbXJgIGlzIGEgZmllbGQgd2l0aGluIHRoZSBgcmRzX3RyYW5zcG9ydGAgc3RydWN0dXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgZXhhY3RseSBpcyB0aGlzIHZhbHVlIGJlaW5nIHNldD8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXNzaWdubWVudCBjb250ZXh0IHRvIHRydWx5IGdyYXNwIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvci4gVGhpcyBpcyBmdW5kYW1lbnRhbCBpbiBkZWJ1Z2dpbmcgb3IgdW5kZXJzdGFuZGluZyB0aGUgZmxvdy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhyb3VnaCB0aGUgY29kZSBhbmQgZmluZCB0aGUgc3BlY2lmaWMgcG9pbnRzIHdoZXJlIGBnZXRfbXJgIGlzIHBvcHVsYXRlZC4gVGhhdCYjMzk7cyB0aGUgb25seSB3YXkgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlIGZpZWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC5nZXRfbXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcmRzL2liLmM9NTU1PXN0cnVjdCByZHNfdHJhbnNwb3J0IHJkc19pYl90cmFuc3BvcnQgPSB7XG4tLVxubmV0L3Jkcy9pYi5jLTU3Mi1cdC5leGl0XHRcdFx0PSByZHNfaWJfZXhpdCxcbm5ldC9yZHMvaWIuYzo1NzM6XHQuZ2V0X21yXHRcdFx0PSByZHNfaWJfZ2V0X21yLFxubmV0L3Jkcy9pYi5jLTU3NC1cdC5zeW5jX21yXHRcdD0gcmRzX2liX3N5bmNfbXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzAyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJETUEgQ29uZmlndXJhdGlvbiBDaGVjayoqCgpPa2F5LCBzbyBgcmRzX2liX3RyYW5zcG9ydGAgaXMgdGhlIGtleSDigJMgaXQgaW1wbGVtZW50cyBgZ2V0X21yYCwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHRoZSBSZW1vdGUgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKFJETUEpIGZ1bmN0aW9uYWxpdHkuIEFuZCB0aGF0IHRyYW5zcG9ydCBpcyBkZWZpbmVkIGluIGBuZXQvcmRzL2liLmNgLiAgSSBrbm93IHRoYXQgZmlsZSYjMzk7cyBjb21waWxlZCB3aGVuIGBDT05GSUdfUkRTX1JETUFgIGlzIGVuYWJsZWQuIFRoZXJlZm9yZSwgdG8gZW5zdXJlIEkmIzM5O20gdGhvcm91Z2hseSB0ZXN0aW5nIHRoZSBSRE1BIGNhcGFiaWxpdGllcywgSSBhYnNvbHV0ZWx5IG5lZWQgYENPTkZJR19SRFNfUkRNQWAgdG8gYmUgc2V0LiAgSXQmIzM5O3Mgbm9uLW5lZ290aWFibGUuCgpXaGlsZSBJJiMzOTttIGF0IGl0LCBJIHNob3VsZCB2ZXJpZnkgd2hldGhlciBgQ09ORklHX1JEU19UQ1BgIGlzIGFsc28gYmVuZWZpY2lhbCB0byBoYXZlIGVuYWJsZWQuICBJIHN1c3BlY3QgaXQgd2lsbCBiZSwgc28gSSBzaG91bGQgY29uc2lkZXIgc2V0dGluZyBpdCB0b28uCgpSaWdodCwgbGV0IG1lIGFkZCBgUkRTYCwgYFJEU19SRE1BYCwgYW5kIGBSRFNfVENQYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGF0IGNvdmVycyB0aGUgYmFzaWMgc2V0dXAuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBzeW1ib2xzIGFmZmVjdGVkLiBNeSBmb2N1cyBuZWVkcyB0byBpbmNsdWRlOgoqICAgYF9fcmRzX3JkbWFfbWFwYAoqICAgYHJkc19jbXNnX3JkbWFfYXJnc2AKKiAgIGByZHNfcmRtYV9mcmVlX29wYAoqICAgYHJkc19hdG9taWNfZnJlZV9vcGAKKiAgIGByZHNfc2VuZF94bWl0YAoKQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQ/IEFoLCB5ZXMsIGBfX3Jkc19wdXRfbXJfZmluYWxgIGFwcGVhcnMgdG8gaGF2ZSBiZWVuIHRvdWNoZWQgYXMgd2VsbC4gVGhhdCBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIGFkZGl0aW9uYWwgdGFyZ2V0IHRvIHJldmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19yZHNfcHV0X21yX2ZpbmFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9tZXNzYWdlLmM9MTMyPXN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3B1cmdlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXG4tLVxubmV0L3Jkcy9tZXNzYWdlLmMtMTc2LVx0aWYgKHJtLVx1MDAzZXJkbWEub3BfcmRtYV9tcilcbm5ldC9yZHMvbWVzc2FnZS5jOjE3NzpcdFx0a3JlZl9wdXQoXHUwMDI2cm0tXHUwMDNlcmRtYS5vcF9yZG1hX21yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvbWVzc2FnZS5jLTE3OC1cbi0tXG5uZXQvcmRzL21lc3NhZ2UuYy0xODEtXHRpZiAocm0tXHUwMDNlYXRvbWljLm9wX3JkbWFfbXIpXG5uZXQvcmRzL21lc3NhZ2UuYzoxODI6XHRcdGtyZWZfcHV0KFx1MDAyNnJtLVx1MDAzZWF0b21pYy5vcF9yZG1hX21yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvbWVzc2FnZS5jLTE4My19XG4tLVxubmV0L3Jkcy9yZG1hLmM9OTU9c3RhdGljIHZvaWQgcmRzX2Rlc3Ryb3lfbXIoc3RydWN0IHJkc19tciAqbXIpXG4tLVxubmV0L3Jkcy9yZG1hLmMtMTE0LVxubmV0L3Jkcy9yZG1hLmM6MTE1OnZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKVxubmV0L3Jkcy9yZG1hLmMtMTE2LXtcbi0tXG5uZXQvcmRzL3JkbWEuYz0xMjg9dm9pZCByZHNfcmRtYV9kcm9wX2tleXMoc3RydWN0IHJkc19zb2NrICpycylcbi0tXG5uZXQvcmRzL3JkbWEuYy0xNDItXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cnMtXHUwMDNlcnNfcmRtYV9sb2NrLCBmbGFncyk7XG5uZXQvcmRzL3JkbWEuYzoxNDM6XHRcdGtyZWZfcHV0KFx1MDAyNm1yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvcmRtYS5jLTE0NC1cdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cnMtXHUwMDNlcnNfcmRtYV9sb2NrLCBmbGFncyk7XG4tLVxubmV0L3Jkcy9yZG1hLmM9MTczPXN0YXRpYyBpbnQgX19yZHNfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19nZXRfbXJfYXJncyAqYXJncyxcbi0tXG5uZXQvcmRzL3JkbWEuYy0yNDctXHQvKiBUaGUgTVIgY2FuIG91dGxpdmUgaXRzIHNvY2tldDogYSBzb2NrZXQgcmVmZXJlbmNlIGlzIGhlbGRcbm5ldC9yZHMvcmRtYS5jOjI0ODpcdCAqIHVudGlsIHRoZSBmaW5hbCBrcmVmIGlzIGRyb3BwZWQgaW4gX19yZHNfcHV0X21yX2ZpbmFsKCkuXG5uZXQvcmRzL3JkbWEuYy0yNDktXHQgKi9cbi0tXG5uZXQvcmRzL3JkbWEuYy0zNTUtXHRpZiAobXIpXG5uZXQvcmRzL3JkbWEuYzozNTY6XHRcdGtyZWZfcHV0KFx1MDAyNm1yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvcmRtYS5jLTM1Ny1cdHJldHVybiByZXQ7XG4tLVxubmV0L3Jkcy9yZG1hLmM9NDAwPWludCByZHNfZnJlZV9tcihzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9yZHMvcmRtYS5jLTQzNi1cbm5ldC9yZHMvcmRtYS5jOjQzNzpcdGtyZWZfcHV0KFx1MDAyNm1yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvcmRtYS5jLTQzOC1cdHJldHVybiAwO1xuLS1cbm5ldC9yZHMvcmRtYS5jPTQ0Nj12b2lkIHJkc19yZG1hX3VudXNlKHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiByX2tleSwgaW50IGZvcmNlKVxuLS1cbm5ldC9yZHMvcmRtYS5jLTQ4Mi1cdC8qIFJlbGVhc2UgdGhlIHJlZmVyZW5jZSBoZWxkIGFib3ZlLiAqL1xubmV0L3Jkcy9yZG1hLmM6NDgzOlx0a3JlZl9wdXQoXHUwMDI2bXItXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xubmV0L3Jkcy9yZG1hLmMtNDg0LVxuLS1cbm5ldC9yZHMvcmRtYS5jLTQ4Ny1cdGlmICh6b3RfbWUpXG5uZXQvcmRzL3JkbWEuYzo0ODg6XHRcdGtyZWZfcHV0KFx1MDAyNm1yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvcmRtYS5jLTQ4OS19XG4tLVxubmV0L3Jkcy9yZG1hLmM9NDkxPXZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pXG4tLVxubmV0L3Jkcy9yZG1hLmMtNDk1LVx0aWYgKHJvLVx1MDAzZW9wX29kcF9tcikge1xubmV0L3Jkcy9yZG1hLmM6NDk2Olx0XHRrcmVmX3B1dChcdTAwMjZyby1cdTAwM2VvcF9vZHBfbXItXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xubmV0L3Jkcy9yZG1hLmMtNDk3LVx0fSBlbHNlIHtcbi0tXG5uZXQvcmRzL3JkbWEuYz02MTg9aW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxuLS1cbm5ldC9yZHMvcmRtYS5jLTc2My1cdFx0XHQvKiBGcm9tIGhlcmUgb24gdGhlIE1SIGlzIHRvcm4gZG93biB0aHJvdWdoXG5uZXQvcmRzL3JkbWEuYzo3NjQ6XHRcdFx0ICogX19yZHNfcHV0X21yX2ZpbmFsKCksIHdoaWNoIGRyb3BzIHRoaXMgcmVmZXJlbmNlLlxubmV0L3Jkcy9yZG1hLmMtNzY1LVx0XHRcdCAqL1xuLS1cbm5ldC9yZHMvcmRzLmg9OTc3PWludCByZHNfY21zZ19hdG9taWMoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbi0tXG5uZXQvcmRzL3Jkcy5oLTk3OS1cbm5ldC9yZHMvcmRzLmg6OTgwOnZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKTtcbm5ldC9yZHMvcmRzLmgtOTgxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc5MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Jkcy9yZG1hLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExMDpcdFxuIDExMTpcdFx0aWYgKHRyYW5zX3ByaXZhdGUpXG4gMTEyOlx0XHRcdG1yLVx1MDAzZXJfdHJhbnMtXHUwMDNlZnJlZV9tcih0cmFuc19wcml2YXRlLCBtci1cdTAwM2VyX2ludmFsaWRhdGUpO1xuIDExMzpcdH1cbiAxMTQ6XHRcbiAxMTU6XHR2b2lkIF9fcmRzX3B1dF9tcl9maW5hbChzdHJ1Y3Qga3JlZiAqa3JlZilcbiAxMTY6XHR7XG4gMTE3Olx0XHRzdHJ1Y3QgcmRzX21yICptciA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmRzX21yLCByX2tyZWYpO1xuIDExODpcdFxuIDExOTpcdFx0cmRzX2Rlc3Ryb3lfbXIobXIpO1xuIDEyMDpcdFx0c29ja19wdXQocmRzX3JzX3RvX3NrKG1yLVx1MDAzZXJfc29jaykpO1xuIDEyMTpcdFx0a2ZyZWUobXIpO1xuIDEyMjpcdH1cbiAxMjM6XHRcbiAxMjQ6XHQvKlxuIDEyNTpcdCAqIEJ5IHRoZSB0aW1lIHRoaXMgaXMgY2FsbGVkIHdlIGNhbiYjMzk7dCBoYXZlIGFueSBtb3JlIGlvY3RscyBjYWxsZWQgb25cbiAxMjY6XHQgKiB0aGUgc29ja2V0IHNvIHdlIGRvbiYjMzk7dCBuZWVkIHRvIHdvcnJ5IGFib3V0IHJhY2luZyB3aXRoIG90aGVycy5cbiAxMjc6XHQgKi9cbiAxMjg6XHR2b2lkIHJkc19yZG1hX2Ryb3Bfa2V5cyhzdHJ1Y3QgcmRzX3NvY2sgKnJzKVxuIDEyOTpcdHtcbiAxMzA6XHRcdHN0cnVjdCByZHNfbXIgKm1yO1xuIDEzMTpcdFx0c3RydWN0IHJiX25vZGUgKm5vZGU7XG4gMTMyOlx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDEzMzpcdFxuIDEzNDpcdFx0LyogUmVsZWFzZSBhbnkgTVJzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNvY2tldCAqL1xuIDEzNTpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cnMtXHUwMDNlcnNfcmRtYV9sb2NrLCBmbGFncyk7XG4gMTM2Olx0XHR3aGlsZSAoKG5vZGUgPSByYl9maXJzdChcdTAwMjZycy1cdTAwM2Vyc19yZG1hX2tleXMpKSkge1xuIDEzNzpcdFx0XHRtciA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCByZHNfbXIsIHJfcmJfbm9kZSk7XG4gMTM4Olx0XHRcdGlmIChtci1cdTAwM2VyX3RyYW5zID09IHJzLVx1MDAzZXJzX3RyYW5zcG9ydClcbiAxMzk6XHRcdFx0XHRtci1cdTAwM2VyX2ludmFsaWRhdGUgPSAwO1xuIDE0MDpcdFx0XHRyYl9lcmFzZShcdTAwMjZtci1cdTAwM2VyX3JiX25vZGUsIFx1MDAyNnJzLVx1MDAzZXJzX3JkbWFfa2V5cyk7XG4gMTQxOlx0XHRcdFJCX0NMRUFSX05PREUoXHUwMDI2bXItXHUwMDNlcl9yYl9ub2RlKTtcbiAxNDI6XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZycy1cdTAwM2Vyc19yZG1hX2xvY2ssIGZsYWdzKTtcbiAxNDM6XHRcdFx0a3JlZl9wdXQoXHUwMDI2bXItXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xuIDE0NDpcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZycy1cdTAwM2Vyc19yZG1hX2xvY2ssIGZsYWdzKTtcbiAxNDU6XHRcdH1cbiAxNDY6XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cnMtXHUwMDNlcnNfcmRtYV9sb2NrLCBmbGFncyk7XG4gMTQ3Olx0XG4gMTQ4Olx0XHRpZiAocnMtXHUwMDNlcnNfdHJhbnNwb3J0IFx1MDAyNlx1MDAyNiBycy1cdTAwM2Vyc190cmFuc3BvcnQtXHUwMDNlZmx1c2hfbXJzKVxuIDE0OTpcdFx0XHRycy1cdTAwM2Vyc190cmFuc3BvcnQtXHUwMDNlZmx1c2hfbXJzKCk7XG4gMTUwOlx0fVxuIDE1MTpcdFxuIDE1MjpcdC8qXG4gMTUzOlx0ICogSGVscGVyIGZ1bmN0aW9uIHRvIHBpbiB1c2VyIHBhZ2VzLlxuIDE1NDpcdCAqL1xuIDE1NTpcdHN0YXRpYyBpbnQgcmRzX3Bpbl9wYWdlcyh1bnNpZ25lZCBsb25nIHVzZXJfYWRkciwgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxuIDE1NjpcdFx0XHRcdHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCB3cml0ZSlcbiAxNTc6XHR7XG4gMTU4Olx0XHR1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzID0gRk9MTF9MT05HVEVSTTtcbiAxNTk6XHRcdGludCByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDMzCgkJCQkJCQlvdXRwdXQ6IDI0MwoJCQkJCQkJdGhvdWdodHM6IDUzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBSRFMvUkRNQSoqCgpPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoaXMgZnV6emluZyB0YXJnZXQuIGBfX3Jkc19wdXRfbXJfZmluYWxgIGxvb2tzIGxpa2UgYSBrZXkgcG9pbnQsIHNpbmNlIGl0JiMzOTtzIHdoZXJlIHRoZSBzb2NrZXQgcmVmZXJlbmNlIGlzIGRyb3BwZWQuIFRoaXMgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0LgoKVGhlcmVmb3JlLCB0aGUgbWFpbiBzeW1ib2xzIEkgd2FudCB0byBmb2N1cyB0aGUgZnV6emVyIG9uIGFyZTogYF9fcmRzX3B1dF9tcl9maW5hbGAsIG5hdHVyYWxseSwgYnV0IGFsc28gYF9fcmRzX3JkbWFfbWFwYCwgYHJkc19yZG1hX2ZyZWVfb3BgLCBgcmRzX2F0b21pY19mcmVlX29wYCwgYW5kIGByZHNfY21zZ19yZG1hX2FyZ3NgLiBUaG9zZSBhbGwgc2VlbSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBSRE1BIHBhdGggYW5kIHRoZSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUuCgpIbW0sIGByZHNfc2VuZF94bWl0YC4uLiB0aGF0JiMzOTtzIGEgaG90IGZ1bmN0aW9uLCBhbmQgSSB3YXMgb3JpZ2luYWxseSBoZXNpdGFudCB0byBhZGQgaXQgdG8gdGhlIGZvY3VzIGxpc3QgYmVjYXVzZSBJIGRvbiYjMzk7dCB3YW50IHRvIHNrZXcgdGhlIHRlc3QgZGlzdHJpYnV0aW9ucy4gSG93ZXZlciwgdGhlIHBhdGNoICpzcGVjaWZpY2FsbHkqIG1vZGlmaWVzIGByZHNfc2VuZF94bWl0YCB0byBmaXggYSByZWZjb3VudCBsZWFrIHdoZW4gYHJtLSZndDttX2ZsYWdzYCBoYXMgYFJEU19NU0dfT05fQ09OTmAgY2xlYXJlZC4gSWYgSSBkb24mIzM5O3QgaW5jbHVkZSBpdCwgdGhlIGZ1enplciBtaWdodCBtaXNzIHRoYXQgcGFydCBvZiB0aGUgc2VuZCBwYXRoIGVudGlyZWx5LiBUaGUgZW50cnkgcG9pbnQgaXMgYHJkc19zZW5kbXNnYCwgd2hpY2ggbWVhbnMgdGhlIGZ1enplciBzaG91bGQgc3BlbmQgc29tZSB0aW1lIGluIHRoZSBzZW5kIHBhdGguIFRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGByZHNfc2VuZF94bWl0YCBiZWNhdXNlIHRoZSBmaXggaXMgZXhwbGljaXQgaW4gdGhlIHBhdGNoLgoKTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgbXkgY29uZmlndXJhdGlvbiBhc3N1bXB0aW9ucy4gSSYjMzk7bSBwcmV0dHkgc3VyZSBgUkRTYCBhbmQgYFJEU19SRE1BYCBhcmUgdGhlIG1haW4gb25lcywgYnV0IGxldCBtZSBhZGQgYFJEU19UQ1BgIGp1c3QgdG8gbWFrZSBzdXJlIEkgY292ZXIgZXZlcnl0aGluZy4KCkFscmlnaHQsIGhlcmUmIzM5O3MgbXkgc3VtbWFyeToKCldvcnRoRnV6emluZzogVHJ1ZQpGb2N1c1N5bWJvbHM6Ci0gYF9fcmRzX3B1dF9tcl9maW5hbGAKLSBgX19yZHNfcmRtYV9tYXBgCi0gYHJkc19yZG1hX2ZyZWVfb3BgCi0gYHJkc19hdG9taWNfZnJlZV9vcGAKLSBgcmRzX2Ntc2dfcmRtYV9hcmdzYAotIGByZHNfc2VuZF94bWl0YApFbmFibGVDb25maWdzOgotIGBSRFNgCi0gYFJEU19SRE1BYAotIGBSRFNfVENQYAoKTXkgcmVhc29uaW5nIGlzIHRoaXM6IHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGZpeGVzIGEgc29ja2V0IHJlZmNvdW50IGxlYWsgd2l0aGluIFJEUyBSRE1BIG9wZXJhdGlvbnMuIEl0IGRvZXMgdGhpcyBieSBjYXJlZnVsbHkgbWFuYWdpbmcgc29ja2V0IHJlZmVyZW5jZXMgaW4gYF9fcmRzX3JkbWFfbWFwYCBhbmQgYHJkc19jbXNnX3JkbWFfYXJnc2AsIGFuZCByZWxlYXNpbmcgdGhlbSBpbiBgX19yZHNfcHV0X21yX2ZpbmFsYC4gQWRkaXRpb25hbGx5LCBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgIGFyZSBjaGFuZ2VkIHRvIHVzZSBub24tc2xlZXBpbmcgcGFnZSB1bnBpbm5pbmcgZnVuY3Rpb25zIHNpbmNlIHRoZXkgY291bGQgYmUgY2FsbGVkIGZyb20gYSB0YXNrbGV0IGNvbnRleHQuIFRoaXMgaXMgdmVyeSBpbXBvcnRhbnQuIEZpbmFsbHksIGl0IGNvcnJlY3RzIGEgbWVzc2FnZSByZWZjb3VudCBsZWFrIGluIGByZHNfc2VuZF94bWl0YC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgUkRTIGFuZCBSRE1BIGxvZ2ljIGl0c2VsZiwgbWFraW5nIHRoZW0gaWRlYWwgZnV6emluZyB0YXJnZXRzLgoKT2theSwgSSYjMzk7bSBjb25maWRlbnQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UkRTJiMzNDssCiAgICAmIzM0O1JEU19SRE1BJiMzNDssCiAgICAmIzM0O1JEU19UQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3Jkc19wdXRfbXJfZmluYWwmIzM0OywKICAgICYjMzQ7X19yZHNfcmRtYV9tYXAmIzM0OywKICAgICYjMzQ7cmRzX3JkbWFfZnJlZV9vcCYjMzQ7LAogICAgJiMzNDtyZHNfYXRvbWljX2ZyZWVfb3AmIzM0OywKICAgICYjMzQ7cmRzX2Ntc2dfcmRtYV9hcmdzJiMzNDssCiAgICAmIzM0O3Jkc19zZW5kX3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBzb2NrZXQgcmVmY291bnQgbGVhayBpbiBSRFMgUkRNQSBvcGVyYXRpb25zIGJ5IGhvbGRpbmcgYSBzb2NrZXQgcmVmZXJlbmNlIGluIGBfX3Jkc19yZG1hX21hcGAgYW5kIGByZHNfY21zZ19yZG1hX2FyZ3NgIGFuZCByZWxlYXNpbmcgaXQgaW4gYF9fcmRzX3B1dF9tcl9maW5hbGAuIEl0IGFsc28gbW9kaWZpZXMgYHJkc19yZG1hX2ZyZWVfb3BgIGFuZCBgcmRzX2F0b21pY19mcmVlX29wYCB0byB1c2Ugbm9uLXNsZWVwaW5nIHBhZ2UgdW5waW5uaW5nIGZ1bmN0aW9ucyBzaW5jZSB0aGV5IGNhbiBiZSBjYWxsZWQgZnJvbSB0YXNrbGV0IGNvbnRleHQuIEZpbmFsbHksIGl0IGZpeGVzIGEgbWVzc2FnZSByZWZjb3VudCBsZWFrIGluIGByZHNfc2VuZF94bWl0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBSRFMgYW5kIFJETUEgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSRFMmIzM0OywKICAgICYjMzQ7UkRTX1JETUEmIzM0OywKICAgICYjMzQ7UkRTX1RDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fcmRzX3B1dF9tcl9maW5hbCYjMzQ7LAogICAgJiMzNDtfX3Jkc19yZG1hX21hcCYjMzQ7LAogICAgJiMzNDtyZHNfcmRtYV9mcmVlX29wJiMzNDssCiAgICAmIzM0O3Jkc19hdG9taWNfZnJlZV9vcCYjMzQ7LAogICAgJiMzNDtyZHNfY21zZ19yZG1hX2FyZ3MmIzM0OywKICAgICYjMzQ7cmRzX3NlbmRfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNvY2tldCByZWZjb3VudCBsZWFrIGluIFJEUyBSRE1BIG9wZXJhdGlvbnMgYnkgaG9sZGluZyBhIHNvY2tldCByZWZlcmVuY2UgaW4gYF9fcmRzX3JkbWFfbWFwYCBhbmQgYHJkc19jbXNnX3JkbWFfYXJnc2AgYW5kIHJlbGVhc2luZyBpdCBpbiBgX19yZHNfcHV0X21yX2ZpbmFsYC4gSXQgYWxzbyBtb2RpZmllcyBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgIHRvIHVzZSBub24tc2xlZXBpbmcgcGFnZSB1bnBpbm5pbmcgZnVuY3Rpb25zIHNpbmNlIHRoZXkgY2FuIGJlIGNhbGxlZCBmcm9tIHRhc2tsZXQgY29udGV4dC4gRmluYWxseSwgaXQgZml4ZXMgYSBtZXNzYWdlIHJlZmNvdW50IGxlYWsgaW4gYHJkc19zZW5kX3htaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIFJEUyBhbmQgUkRNQSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo0ODo1Ny4yNjM5MzgwNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzI4MjgxNjc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRFNcIixcbiAgICBcIlJEU19SRE1BXCIsXG4gICAgXCJSRFNfVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19yZHNfcHV0X21yX2ZpbmFsXCIsXG4gICAgXCJfX3Jkc19yZG1hX21hcFwiLFxuICAgIFwicmRzX3JkbWFfZnJlZV9vcFwiLFxuICAgIFwicmRzX2F0b21pY19mcmVlX29wXCIsXG4gICAgXCJyZHNfY21zZ19yZG1hX2FyZ3NcIixcbiAgICBcInJkc19zZW5kX3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHNvY2tldCByZWZjb3VudCBsZWFrIGluIFJEUyBSRE1BIG9wZXJhdGlvbnMgYnkgaG9sZGluZyBhIHNvY2tldCByZWZlcmVuY2UgaW4gYF9fcmRzX3JkbWFfbWFwYCBhbmQgYHJkc19jbXNnX3JkbWFfYXJnc2AgYW5kIHJlbGVhc2luZyBpdCBpbiBgX19yZHNfcHV0X21yX2ZpbmFsYC4gSXQgYWxzbyBtb2RpZmllcyBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgIHRvIHVzZSBub24tc2xlZXBpbmcgcGFnZSB1bnBpbm5pbmcgZnVuY3Rpb25zIHNpbmNlIHRoZXkgY2FuIGJlIGNhbGxlZCBmcm9tIHRhc2tsZXQgY29udGV4dC4gRmluYWxseSwgaXQgZml4ZXMgYSBtZXNzYWdlIHJlZmNvdW50IGxlYWsgaW4gYHJkc19zZW5kX3htaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIFJEUyBhbmQgUkRNQSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjQ4OjU3LjI2Mzk1NDU3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTY5MTE3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjOWRmNmMxMzMzZmIxZmEwODg0ODgzZDIyYWVmNjljNDMzNTRjZmNiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDExIDIxOjQ4OjU2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRtYS5jIGIvbmV0L3Jkcy9yZG1hLmNcXG5pbmRleCA2MWZiNmU0NTI4MWJmMS4uZmUyMjE5NjhmM2ZlNzMgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy9yZG1hLmNcXG4rKysgYi9uZXQvcmRzL3JkbWEuY1xcbkBAIC0xMTcsNiArMTE3LDcgQEAgdm9pZCBfX3Jkc19wdXRfbXJfZmluYWwoc3RydWN0IGtyZWYgKmtyZWYpXFxuIFxcdHN0cnVjdCByZHNfbXIgKm1yID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByZHNfbXIsIHJfa3JlZik7XFxuIFxcbiBcXHRyZHNfZGVzdHJveV9tcihtcik7XFxuK1xcdHNvY2tfcHV0KHJkc19yc190b19zayhtci1cXHUwMDNlcl9zb2NrKSk7XFxuIFxcdGtmcmVlKG1yKTtcXG4gfVxcbiBcXG5AQCAtMjQzLDcgKzI0NCwxMSBAQCBzdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsXFxuIFxcdGtyZWZfaW5pdChcXHUwMDI2bXItXFx1MDAzZXJfa3JlZik7XFxuIFxcdFJCX0NMRUFSX05PREUoXFx1MDAyNm1yLVxcdTAwM2VyX3JiX25vZGUpO1xcbiBcXHRtci1cXHUwMDNlcl90cmFucyA9IHJzLVxcdTAwM2Vyc190cmFuc3BvcnQ7XFxuK1xcdC8qIFRoZSBNUiBjYW4gb3V0bGl2ZSBpdHMgc29ja2V0OiBhIHNvY2tldCByZWZlcmVuY2UgaXMgaGVsZFxcbitcXHQgKiB1bnRpbCB0aGUgZmluYWwga3JlZiBpcyBkcm9wcGVkIGluIF9fcmRzX3B1dF9tcl9maW5hbCgpLlxcbitcXHQgKi9cXG4gXFx0bXItXFx1MDAzZXJfc29jayA9IHJzO1xcbitcXHRzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7XFxuIFxcbiBcXHRpZiAoYXJncy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRFNfUkRNQV9VU0VfT05DRSlcXG4gXFx0XFx0bXItXFx1MDAzZXJfdXNlX29uY2UgPSAxO1xcbkBAIC00OTUsOSArNTAwLDEzIEBAIHZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pXFxuIFxcbiBcXHRcXHRcXHQvKiBNYXJrIHBhZ2UgZGlydHkgaWYgaXQgd2FzIHBvc3NpYmx5IG1vZGlmaWVkLCB3aGljaFxcbiBcXHRcXHRcXHQgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlXFxuLVxcdFxcdFxcdCAqIHRvIGxvY2FsIG1lbW9yeVxcbitcXHRcXHRcXHQgKiB0byBsb2NhbCBtZW1vcnkuICBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgSUJcXG4rXFx0XFx0XFx0ICogc2VuZCBjb21wbGV0aW9uIHRhc2tsZXQsIHNvIHRoZSBzbGVlcGluZyBfbG9ja1xcbitcXHRcXHRcXHQgKiB2YXJpYW50IG11c3Qgbm90IGJlIHVzZWQgaGVyZS5cXG4gXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhcXHUwMDI2cGFnZSwgMSwgIXJvLVxcdTAwM2VvcF93cml0ZSk7XFxuK1xcdFxcdFxcdGlmICghcm8tXFx1MDAzZW9wX3dyaXRlKVxcbitcXHRcXHRcXHRcXHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcXG4rXFx0XFx0XFx0dW5waW5fdXNlcl9wYWdlKHBhZ2UpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuQEAgLTUxMyw4ICs1MjIsMTIgQEAgdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pXFxuIFxcbiBcXHQvKiBNYXJrIHBhZ2UgZGlydHkgaWYgaXQgd2FzIHBvc3NpYmx5IG1vZGlmaWVkLCB3aGljaFxcbiBcXHQgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlXFxuLVxcdCAqIHRvIGxvY2FsIG1lbW9yeSAqL1xcbi1cXHR1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soXFx1MDAyNnBhZ2UsIDEsIHRydWUpO1xcbitcXHQgKiB0byBsb2NhbCBtZW1vcnkuICBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgSUIgc2VuZFxcbitcXHQgKiBjb21wbGV0aW9uIHRhc2tsZXQsIHNvIHRoZSBzbGVlcGluZyBfbG9jayB2YXJpYW50IG11c3RcXG4rXFx0ICogbm90IGJlIHVzZWQgaGVyZS5cXG4rXFx0ICovXFxuK1xcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xcbitcXHR1bnBpbl91c2VyX3BhZ2UocGFnZSk7XFxuIFxcbiBcXHRrZnJlZShhby1cXHUwMDNlb3Bfbm90aWZpZXIpO1xcbiBcXHRhby1cXHUwMDNlb3Bfbm90aWZpZXIgPSBOVUxMO1xcbkBAIC03NDcsNiArNzYwLDEwIEBAIGludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRyZHNkZWJ1ZyhcXFwiTmVlZCBvZHA7IGxvY2FsX29kcF9tciAlcCB0cmFuc19wcml2YXRlICVwXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgbG9jYWxfb2RwX21yLCBsb2NhbF9vZHBfbXItXFx1MDAzZXJfdHJhbnNfcHJpdmF0ZSk7XFxuK1xcdFxcdFxcdC8qIEZyb20gaGVyZSBvbiB0aGUgTVIgaXMgdG9ybiBkb3duIHRocm91Z2hcXG4rXFx0XFx0XFx0ICogX19yZHNfcHV0X21yX2ZpbmFsKCksIHdoaWNoIGRyb3BzIHRoaXMgcmVmZXJlbmNlLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0c29ja19ob2xkKHJkc19yc190b19zayhycykpO1xcbiBcXHRcXHRcXHRvcC1cXHUwMDNlb3Bfb2RwX21yID0gbG9jYWxfb2RwX21yO1xcbiBcXHRcXHRcXHRvcC1cXHUwMDNlb3Bfb2RwX2FkZHIgPSBpb3YtXFx1MDAzZWFkZHI7XFxuIFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuY1xcbmluZGV4IDY4YmUxYmYwZTBhZGY5Li5hYjNhODM2NmM1M2JkOSAxMDA2NDRcXG4tLS0gYS9uZXQvcmRzL3NlbmQuY1xcbisrKyBiL25ldC9yZHMvc2VuZC5jXFxuQEAgLTMzOSw5ICszMzksMTcgQEAgaW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbiBcXHRcXHRcXHQgICAgKHJtLVxcdTAwM2VyZG1hLm9wX2FjdGl2ZSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgdGVzdF9iaXQoUkRTX01TR19SRVRSQU5TTUlUVEVELCBcXHUwMDI2cm0tXFx1MDAzZW1fZmxhZ3MpKSkge1xcbiBcXHRcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Y3AtXFx1MDAzZWNwX2xvY2ssIGZsYWdzKTtcXG4tXFx0XFx0XFx0XFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sIFxcdTAwMjZybS1cXHUwMDNlbV9mbGFncykpXFxuK1xcdFxcdFxcdFxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX01TR19PTl9DT05OLCBcXHUwMDI2cm0tXFx1MDAzZW1fZmxhZ3MpKSB7XFxuK1xcdFxcdFxcdFxcdFxcdC8qIG91ciByZWYgaXMgcHV0IGFmdGVyIHRoZSBiYXRjaCAqL1xcbiBcXHRcXHRcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNnJtLVxcdTAwM2VtX2Nvbm5faXRlbSwgXFx1MDAyNnRvX2JlX2Ryb3BwZWQpO1xcbi1cXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZjcC1cXHUwMDNlY3BfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZjcC1cXHUwMDNlY3BfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRcXHQvKiBhbHJlYWR5IG9mZiB0aGUgY29ubiBsaXN0OyBkcm9wXFxuK1xcdFxcdFxcdFxcdFxcdCAqIHRoZSByZWYgdGFrZW4gYWJvdmUgb3Vyc2VsdmVzXFxuK1xcdFxcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZjcC1cXHUwMDNlY3BfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRcXHRyZHNfbWVzc2FnZV9wdXQocm0pO1xcbitcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo0ODo1Ny41NjIwMjMzOTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjk4NDcyMTg4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRFNcIixcbiAgICBcIlJEU19SRE1BXCIsXG4gICAgXCJSRFNfVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19yZHNfcHV0X21yX2ZpbmFsXCIsXG4gICAgXCJfX3Jkc19yZG1hX21hcFwiLFxuICAgIFwicmRzX3JkbWFfZnJlZV9vcFwiLFxuICAgIFwicmRzX2F0b21pY19mcmVlX29wXCIsXG4gICAgXCJyZHNfY21zZ19yZG1hX2FyZ3NcIixcbiAgICBcInJkc19zZW5kX3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHNvY2tldCByZWZjb3VudCBsZWFrIGluIFJEUyBSRE1BIG9wZXJhdGlvbnMgYnkgaG9sZGluZyBhIHNvY2tldCByZWZlcmVuY2UgaW4gYF9fcmRzX3JkbWFfbWFwYCBhbmQgYHJkc19jbXNnX3JkbWFfYXJnc2AgYW5kIHJlbGVhc2luZyBpdCBpbiBgX19yZHNfcHV0X21yX2ZpbmFsYC4gSXQgYWxzbyBtb2RpZmllcyBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgIHRvIHVzZSBub24tc2xlZXBpbmcgcGFnZSB1bnBpbm5pbmcgZnVuY3Rpb25zIHNpbmNlIHRoZXkgY2FuIGJlIGNhbGxlZCBmcm9tIHRhc2tsZXQgY29udGV4dC4gRmluYWxseSwgaXQgZml4ZXMgYSBtZXNzYWdlIHJlZmNvdW50IGxlYWsgaW4gYHJkc19zZW5kX3htaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIFJEUyBhbmQgUkRNQSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzlkZjZjMTMzM2ZiMWZhMDg4NDg4M2QyMmFlZjY5YzQzMzU0Y2ZjYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDExIDIxOjQ4OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hLmMgYi9uZXQvcmRzL3JkbWEuY1xuaW5kZXggNjFmYjZlNDUyODFiZjEuLmZlMjIxOTY4ZjNmZTczIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9yZG1hLmNcbisrKyBiL25ldC9yZHMvcmRtYS5jXG5AQCAtMTE3LDYgKzExNyw3IEBAIHZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKVxuIFx0c3RydWN0IHJkc19tciAqbXIgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJkc19tciwgcl9rcmVmKTtcbiBcbiBcdHJkc19kZXN0cm95X21yKG1yKTtcbitcdHNvY2tfcHV0KHJkc19yc190b19zayhtci1cdTAwM2VyX3NvY2spKTtcbiBcdGtmcmVlKG1yKTtcbiB9XG4gXG5AQCAtMjQzLDcgKzI0NCwxMSBAQCBzdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsXG4gXHRrcmVmX2luaXQoXHUwMDI2bXItXHUwMDNlcl9rcmVmKTtcbiBcdFJCX0NMRUFSX05PREUoXHUwMDI2bXItXHUwMDNlcl9yYl9ub2RlKTtcbiBcdG1yLVx1MDAzZXJfdHJhbnMgPSBycy1cdTAwM2Vyc190cmFuc3BvcnQ7XG4rXHQvKiBUaGUgTVIgY2FuIG91dGxpdmUgaXRzIHNvY2tldDogYSBzb2NrZXQgcmVmZXJlbmNlIGlzIGhlbGRcbitcdCAqIHVudGlsIHRoZSBmaW5hbCBrcmVmIGlzIGRyb3BwZWQgaW4gX19yZHNfcHV0X21yX2ZpbmFsKCkuXG4rXHQgKi9cbiBcdG1yLVx1MDAzZXJfc29jayA9IHJzO1xuK1x0c29ja19ob2xkKHJkc19yc190b19zayhycykpO1xuIFxuIFx0aWYgKGFyZ3MtXHUwMDNlZmxhZ3MgXHUwMDI2IFJEU19SRE1BX1VTRV9PTkNFKVxuIFx0XHRtci1cdTAwM2VyX3VzZV9vbmNlID0gMTtcbkBAIC00OTUsOSArNTAwLDEzIEBAIHZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pXG4gXG4gXHRcdFx0LyogTWFyayBwYWdlIGRpcnR5IGlmIGl0IHdhcyBwb3NzaWJseSBtb2RpZmllZCwgd2hpY2hcbiBcdFx0XHQgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlXG4tXHRcdFx0ICogdG8gbG9jYWwgbWVtb3J5XG4rXHRcdFx0ICogdG8gbG9jYWwgbWVtb3J5LiAgVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIElCXG4rXHRcdFx0ICogc2VuZCBjb21wbGV0aW9uIHRhc2tsZXQsIHNvIHRoZSBzbGVlcGluZyBfbG9ja1xuK1x0XHRcdCAqIHZhcmlhbnQgbXVzdCBub3QgYmUgdXNlZCBoZXJlLlxuIFx0XHRcdCAqL1xuLVx0XHRcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhcdTAwMjZwYWdlLCAxLCAhcm8tXHUwMDNlb3Bfd3JpdGUpO1xuK1x0XHRcdGlmICghcm8tXHUwMDNlb3Bfd3JpdGUpXG4rXHRcdFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbitcdFx0XHR1bnBpbl91c2VyX3BhZ2UocGFnZSk7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC01MTMsOCArNTIyLDEyIEBAIHZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKVxuIFxuIFx0LyogTWFyayBwYWdlIGRpcnR5IGlmIGl0IHdhcyBwb3NzaWJseSBtb2RpZmllZCwgd2hpY2hcbiBcdCAqIGlzIHRoZSBjYXNlIGZvciBhIFJETUFfUkVBRCB3aGljaCBjb3BpZXMgZnJvbSByZW1vdGVcbi1cdCAqIHRvIGxvY2FsIG1lbW9yeSAqL1xuLVx0dW5waW5fdXNlcl9wYWdlc19kaXJ0eV9sb2NrKFx1MDAyNnBhZ2UsIDEsIHRydWUpO1xuK1x0ICogdG8gbG9jYWwgbWVtb3J5LiAgVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIElCIHNlbmRcbitcdCAqIGNvbXBsZXRpb24gdGFza2xldCwgc28gdGhlIHNsZWVwaW5nIF9sb2NrIHZhcmlhbnQgbXVzdFxuK1x0ICogbm90IGJlIHVzZWQgaGVyZS5cbitcdCAqL1xuK1x0c2V0X3BhZ2VfZGlydHkocGFnZSk7XG4rXHR1bnBpbl91c2VyX3BhZ2UocGFnZSk7XG4gXG4gXHRrZnJlZShhby1cdTAwM2VvcF9ub3RpZmllcik7XG4gXHRhby1cdTAwM2VvcF9ub3RpZmllciA9IE5VTEw7XG5AQCAtNzQ3LDYgKzc2MCwxMCBAQCBpbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG4gXHRcdFx0fVxuIFx0XHRcdHJkc2RlYnVnKFwiTmVlZCBvZHA7IGxvY2FsX29kcF9tciAlcCB0cmFuc19wcml2YXRlICVwXFxuXCIsXG4gXHRcdFx0XHQgbG9jYWxfb2RwX21yLCBsb2NhbF9vZHBfbXItXHUwMDNlcl90cmFuc19wcml2YXRlKTtcbitcdFx0XHQvKiBGcm9tIGhlcmUgb24gdGhlIE1SIGlzIHRvcm4gZG93biB0aHJvdWdoXG4rXHRcdFx0ICogX19yZHNfcHV0X21yX2ZpbmFsKCksIHdoaWNoIGRyb3BzIHRoaXMgcmVmZXJlbmNlLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHNvY2tfaG9sZChyZHNfcnNfdG9fc2socnMpKTtcbiBcdFx0XHRvcC1cdTAwM2VvcF9vZHBfbXIgPSBsb2NhbF9vZHBfbXI7XG4gXHRcdFx0b3AtXHUwMDNlb3Bfb2RwX2FkZHIgPSBpb3YtXHUwMDNlYWRkcjtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmNcbmluZGV4IDY4YmUxYmYwZTBhZGY5Li5hYjNhODM2NmM1M2JkOSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvc2VuZC5jXG4rKysgYi9uZXQvcmRzL3NlbmQuY1xuQEAgLTMzOSw5ICszMzksMTcgQEAgaW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIFx0XHRcdCAgICAocm0tXHUwMDNlcmRtYS5vcF9hY3RpdmUgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgIHRlc3RfYml0KFJEU19NU0dfUkVUUkFOU01JVFRFRCwgXHUwMDI2cm0tXHUwMDNlbV9mbGFncykpKSB7XG4gXHRcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZjcC1cdTAwM2VjcF9sb2NrLCBmbGFncyk7XG4tXHRcdFx0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19NU0dfT05fQ09OTiwgXHUwMDI2cm0tXHUwMDNlbV9mbGFncykpXG4rXHRcdFx0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19NU0dfT05fQ09OTiwgXHUwMDI2cm0tXHUwMDNlbV9mbGFncykpIHtcbitcdFx0XHRcdFx0Lyogb3VyIHJlZiBpcyBwdXQgYWZ0ZXIgdGhlIGJhdGNoICovXG4gXHRcdFx0XHRcdGxpc3RfbW92ZShcdTAwMjZybS1cdTAwM2VtX2Nvbm5faXRlbSwgXHUwMDI2dG9fYmVfZHJvcHBlZCk7XG4tXHRcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmNwLVx1MDAzZWNwX2xvY2ssIGZsYWdzKTtcbitcdFx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjcC1cdTAwM2VjcF9sb2NrLCBmbGFncyk7XG4rXHRcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0XHQvKiBhbHJlYWR5IG9mZiB0aGUgY29ubiBsaXN0OyBkcm9wXG4rXHRcdFx0XHRcdCAqIHRoZSByZWYgdGFrZW4gYWJvdmUgb3Vyc2VsdmVzXG4rXHRcdFx0XHRcdCAqL1xuK1x0XHRcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmNwLVx1MDAzZWNwX2xvY2ssIGZsYWdzKTtcbitcdFx0XHRcdFx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcbitcdFx0XHRcdH1cbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjQ4OjU3LjU2MjAyNTQ2OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NjA2NzQ3MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUkRTIFBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBwb2tpbmcgYXJvdW5kIGluIHRoZSBSRFMgc3Vic3lzdGVtIOKAkyBzcGVjaWZpY2FsbHkgYG5ldC9yZHMvcmRtYS5jYCBhbmQgYG5ldC9yZHMvc2VuZC5jYC4gTXkgaW5pdGlhbCByZWFkIHN1Z2dlc3RzIHNvbWUgaW1wb3J0YW50IHJlZmFjdG9yaW5nIGFyb3VuZCBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgcmVsYXRlZCB0byBSRE1BIG9wZXJhdGlvbnMuIFRoZXkndmUgYWRkZWQgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyB1c2luZyBgc29ja19ob2xkYCBhbmQgYHNvY2tfcHV0YCB3aXRoaW4gYHJkc19tcmAgYW5kIGByZHNfY21zZ19yZG1hX2FyZ3NgLCB3aGljaCBpcyBzbWFydC4gRW5zdXJlcyB0aGUgc29ja2V0IG91dGxpdmVzIHRoZSBtZW1vcnkgcmVnaW9uLCB3aGljaCBpcyBhIGNvbW1vbiBzb3VyY2Ugb2Ygc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MuIFRoZSBvdGhlciBjaGFuZ2Ugd2l0aCByZXBsYWNpbmcgYHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9ja2Agd2l0aCBgc2V0X3BhZ2VfZGlydHlgIGFuZCBgdW5waW5fdXNlcl9wYWdlYCBpbiBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgIGJlY2F1c2UgaXQncyBpbiBhIHRhc2tsZXQgY29udGV4dCBpcyBhIGdvb2QgbW92ZSB0b28g4oCTIGF2b2lkcyBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMuIEZpbmFsbHksIGZpeGluZyB0aGF0IHJlZmNvdW50IGxlYWsgaW4gYHJkc19zZW5kX3htaXRgIHdoZW4gbWVzc2FnZXMgYXJlIGFscmVhZHkgb2ZmIHRoZSBjb25uZWN0aW9uIGxpc3Q/IERlZmluaXRlbHkgYSB3aW4hXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gUkRTJ3MgYmVoYXZpb3VyLiBJdCBhbHRlcnMgaG93IGl0IGhhbmRsZXMgcmVzb3VyY2VzLCBlc3BlY2lhbGx5IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzb2NrZXQgbGlmZXNwYW4sIGluIFJETUEgb3BlcmF0aW9ucy4gSSB3b3VsZCBjb25zaWRlciB0aGlzIGEgaGlnaC1wcmlvcml0eSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgaXQgdG91Y2hlcyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbmV0d29yayBpbnRlcmFjdGlvbnM7IHRob3NlIGFyZSBhbHdheXMgcmlza3kgYXJlYXMuXG5cbk5vdywgbGV0J3MgZmlndXJlIG91dCBob3cgdG8gYnVpbGQgdGhpcyB3aXRoIGZ1enppbmcgZW5hYmxlZC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGltZSB0byBzZWFyY2ggdGhlIGtlcm5lbCBjb25maWcgZm9yIGBDT05GSUdfUkRTYCBvciBhbnl0aGluZyByZWxhdGVkLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk1NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjQ5OjAyLjMyMjcwMjkxOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTE5MDc1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL0tjb25maWctMi1cXG5uZXQvcmRzL0tjb25maWc6Mzpjb25maWcgUkRTXFxubmV0L3Jkcy9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIlRoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXFxcIlxcbi0tXFxubmV0L3Jkcy9LY29uZmlnLTktXFxubmV0L3Jkcy9LY29uZmlnOjEwOmNvbmZpZyBSRFNfUkRNQVxcbm5ldC9yZHMvS2NvbmZpZy0xMS1cXHR0cmlzdGF0ZSBcXFwiUkRTIG92ZXIgSW5maW5pYmFuZFxcXCJcXG4tLVxcbm5ldC9yZHMvS2NvbmZpZy0xNi1cXG5uZXQvcmRzL0tjb25maWc6MTc6Y29uZmlnIFJEU19UQ1BcXG5uZXQvcmRzL0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcIlJEUyBvdmVyIFRDUFxcXCJcXG4tLVxcbm5ldC9yZHMvS2NvbmZpZy0yNC1cXG5uZXQvcmRzL0tjb25maWc6MjU6Y29uZmlnIFJEU19ERUJVR1xcbm5ldC9yZHMvS2NvbmZpZy0yNi1cXHRib29sIFxcXCJSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo0OTowMi4zNzc5MDE5NThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQ3OTYyOTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipFeGFtaW5pbmcgdGhlIFJEUy9SRE1BIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIGBSRFNgIGFzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZWxlbWVudCBoZXJlLiBJIGltbWVkaWF0ZWx5IGhhdmUgYSBodW5jaCB0aGF0IGBSRFNfUkRNQWAgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IOKAkyBwcm9iYWJseSAqY3J1Y2lhbCog4oCTIGZvciB0aGUgcHJvcGVyIGhhbmRsaW5nIG9mIGBuZXQvcmRzL3JkbWEuY2AuIEl0J3MgYSBjbGFzc2ljIHNjZW5hcmlvOyBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhhdCBSRE1BIGltcGxlbWVudGF0aW9uIGlzIGNvbXBpbGVkIGludG8gdGhlIG1vZHVsZSBjb25kaXRpb25hbGx5LiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBuZXQvcmRzL01ha2VmaWxlYCBhbmQgc2VlIGlmIGByZG1hLmNgIGhhcyBhbnkgYnVpbGQgZGlyZWN0aXZlcyBhcm91bmQgaXQuIFRoYXQnbGwgdGVsbCBtZSBpZiBgUkRTX1JETUFgIGFjdHVhbGx5IGNvbnRyb2xzIHdoZXRoZXIgdGhhdCBSRE1BIGZ1bmN0aW9uYWxpdHkgaXMgaW5jbHVkZWQuIEkgbmVlZCB0aGF0IGJ1aWxkIHByb2Nlc3MgaW5mb3JtYXRpb24gYXMgcGFydCBvZiBteSBvdmVydmlldy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc1MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjQ5OjA1LjUyNTg2NzI0NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTM1NDY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZG1hXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9NYWtlZmlsZT0zPXJkcy15IDo9XFx0YWZfcmRzLm8gYmluZC5vIGNvbmcubyBjb25uZWN0aW9uLm8gaW5mby5vIG1lc3NhZ2UubyAgIFxcXFxcXG5uZXQvcmRzL01ha2VmaWxlLTQtXFx0XFx0XFx0cmVjdi5vIHNlbmQubyBzdGF0cy5vIHN5c2N0bC5vIHRocmVhZHMubyB0cmFuc3BvcnQubyBcXFxcXFxubmV0L3Jkcy9NYWtlZmlsZTo1OlxcdFxcdFxcdGxvb3AubyBwYWdlLm8gcmRtYS5vXFxubmV0L3Jkcy9NYWtlZmlsZS02LVxcbm5ldC9yZHMvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfUkRTX1JETUEpICs9IHJkc19yZG1hLm9cXG5uZXQvcmRzL01ha2VmaWxlLTgtcmRzX3JkbWEteSA6PVxcdHJkbWFfdHJhbnNwb3J0Lm8gXFxcXFxcbm5ldC9yZHMvTWFrZWZpbGUtOS1cXHRcXHRcXHRpYi5vIGliX2NtLm8gaWJfcmVjdi5vIGliX3JpbmcubyBpYl9zZW5kLm8gaWJfc3RhdHMubyBcXFxcXFxubmV0L3Jkcy9NYWtlZmlsZToxMDpcXHRcXHRcXHRpYl9zeXNjdGwubyBpYl9yZG1hLm8gaWJfZnJtci5vXFxubmV0L3Jkcy9NYWtlZmlsZS0xMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjE6NDk6MDUuNTgxMjI4MzQ1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY1MzU1MjI2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUkRTL1JETUEgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGtlcm5lbCBtb2R1bGUgc3R1ZmYuIEl0IHNlZW1zIGByZG1hLm9gIGlzIGJha2VkIGluIHdpdGggYHJkcy15YCwgYW5kIHRoZXJlZm9yZSBpcyBidWlsdCB3aGVuIGBDT05GSUdfUkRTYCBpcyBlbmFibGVkLiBTaW1pbGFybHksIGByZHNfcmRtYS5vYCBnZXRzIGNvbXBpbGVkIG9ubHkgd2hlbiBgQ09ORklHX1JEU19SRE1BYCBpcyBzZXQuIFRoZSBmaWxlIHRoYXQncyBiZWVuIG1vZGlmaWVkLCBgbmV0L3Jkcy9yZG1hLmNgLCByZWxhdGVzIGRpcmVjdGx5IHRvIGByZG1hLm9gLCBzbyBpbnR1aXRpdmVseSwgYENPTkZJR19SRFNgIHNob3VsZCBiZSBlbm91Z2ggdG8gaW5jb3Jwb3JhdGUgdGhvc2UgY2hhbmdlcy4gQnV0IHdhaXQgYSBzZWMuLi4gYG5ldC9yZHMvcmRtYS5jYCAqaGFuZGxlcyogUkRNQSBvcGVyYXRpb25zIGZvciBSRFMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYFJEU19SRE1BYCBpc24ndCByZXF1aXJlZCB0byBhY3R1YWxseSAqdXNlKiB0aGUgUkRNQSBiaXRzIHdpdGhpbiB0aGF0IGZpbGUsIHNvIGxldCBtZSBkZWx2ZSBkZWVwZXIuXG5cbkxldCdzIHNlZSwgdGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnM6IGBfX3Jkc19wdXRfbXJfZmluYWxgLCBgX19yZHNfcmRtYV9tYXBgLCBgcmRzX3JkbWFfZnJlZV9vcGAsIGByZHNfYXRvbWljX2ZyZWVfb3BgLCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCwgYW5kIGByZHNfc2VuZF94bWl0YC4gSGFuZyBvbi4uLiBgcmRzX3NlbmRfeG1pdGAgaXMgYWN0dWFsbHkgaW4gYG5ldC9yZHMvc2VuZC5jYCwgd2hpY2ggaXMgYWxzbyBpbmNsdWRlZCBpbiB0aGUgYHJkcy15YCBtb2R1bGUuXG5cbkFscmlnaHQsIHRpbWUgdG8gZm9jdXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBvbmVzIHRoYXQgZGVtYW5kIGZ1cnRoZXIgc2NydXRpbnkuXG5cblNvLCBoZXJlJ3MgbXkgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMsIGFnYWluOlxuLSBgX19yZHNfcHV0X21yX2ZpbmFsYFxuLSBgX19yZHNfcmRtYV9tYXBgXG4tIGByZHNfcmRtYV9mcmVlX29wYFxuLSBgcmRzX2F0b21pY19mcmVlX29wYFxuLSBgcmRzX2Ntc2dfcmRtYV9hcmdzYFxuLSBgcmRzX3NlbmRfeG1pdGBcblxuYHJkc19zZW5kX3htaXRgIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBob3QgcGF0aCDigJMgdGhhdCdzIHRoZSBtZXNzYWdlIHRyYW5zbWlzc2lvbiBmdW5jdGlvbiwgc28gdGhhdCdzIGRlZmluaXRlbHkgYSBjYW5kaWRhdGUuIGBfX3Jkc19yZG1hX21hcGAgYW5kIGByZHNfY21zZ19yZG1hX2FyZ3NgIGxvb2sgcHJvbWlzaW5nIHRvbywgdGhleSBhcmUgcHJvYmFibHkgaW52b2x2ZWQgaW4gc2V0dGluZyB1cCB0aGUgUkRNQSBtYXBwaW5ncy4gUGx1cywgYHJkc19yZG1hX2ZyZWVfb3BgIGFuZCBgcmRzX2F0b21pY19mcmVlX29wYCBhcmUgdmVyeSBsaWtlbHkgaW52b2x2ZWQgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIHRvIHRoZSBSRE1BIHRyYW5zZmVycywgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZS5cblxuSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGRvdWJsZS1jaGVja2luZyB0aGUgY29kZSBpbiBgcmRzX2Ntc2dfcmRtYV9hcmdzYCBhbmQgYF9fcmRzX3JkbWFfbWFwYCB0byBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNDcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjE6NDk6MTIuMjM0NzgyOTI3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Nzg1ODkyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZHNfY21zZ19yZG1hX2FyZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9yZG1hLmM9NTY2PWludCByZHNfcmRtYV9leHRyYV9zaXplKHN0cnVjdCByZHNfcmRtYV9hcmdzICphcmdzLFxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtNjE3LSAqL1xcbm5ldC9yZHMvcmRtYS5jOjYxODppbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXFxubmV0L3Jkcy9yZG1hLmMtNjE5LVxcdFxcdCAgICAgICBzdHJ1Y3QgY21zZ2hkciAqY21zZyxcXG4tLVxcbm5ldC9yZHMvcmRzLmg9OTY2PWludCByZHNfY21zZ19yZG1hX2Rlc3Qoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG5uZXQvcmRzL3Jkcy5oLTk2Ny1cXHRcXHRcXHQgIHN0cnVjdCBjbXNnaGRyICpjbXNnKTtcXG5uZXQvcmRzL3Jkcy5oOjk2ODppbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXFxubmV0L3Jkcy9yZHMuaC05NjktXFx0XFx0XFx0ICBzdHJ1Y3QgY21zZ2hkciAqY21zZyxcXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTEwNTM9c3RhdGljIGludCByZHNfY21zZ19zZW5kKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXFxuLS1cXG5uZXQvcmRzL3NlbmQuYy0xMDczLVxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm5ldC9yZHMvc2VuZC5jOjEwNzQ6XFx0XFx0XFx0cmV0ID0gcmRzX2Ntc2dfcmRtYV9hcmdzKHJzLCBybSwgY21zZywgXFx1MDAyNnZjdC1cXHUwMDNldmVjW2luZF0pO1xcbm5ldC9yZHMvc2VuZC5jLTEwNzUtXFx0XFx0XFx0aW5kKys7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjQ5OjEyLjM5MjY0NjQyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwOTk5ODQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQSBDb250cm9sIE1lc3NhZ2UgQm9uYW56YSEqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IFJETUEgYW5kIG1lc3NhZ2UgaGFuZGxpbmcuIEV4Y2VsbGVudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHJkc19jbXNnX3JkbWFfYXJnc2AgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEl0J3MgdHJpZ2dlcmVkIGR1cmluZyBzZW5kLXNpZGUgY29udHJvbCBtZXNzYWdlIHBhcnNpbmcg4oCTIHdoaWNoIHNjcmVhbXMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgcG9pbnRzIGR1ZSB0byB0aGUgY29tcGxleGl0eSBhbmQgdmFyaWFiaWxpdHkgb2YgdXNlci1zdXBwbGllZCBkYXRhLiBUaGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiBmdW5jdGlvbiB0aGF0IGxvdmVzIHRvIHJldmVhbCBzdWJ0bGUgZmxhd3Mgd2hlbiBmZWQgbWFsZm9ybWVkIGlucHV0LiBUaGlzIGlzIHdoZXJlIEkgd291bGQgc3RhcnQgbXkgZnV6emluZyBjYW1wYWlnbi5cblxuTm93LCBsZXQncyBkaWcgYSBiaXQgZGVlcGVyLiBJIHNlZSBgX19yZHNfcmRtYV9tYXBgIGdldHMgY2FsbGVkIGZyb20gYHJkc19nZXRfbXJgLiBUaGlzIGlzIGludGVyZXN0aW5nLiBgcmRzX2dldF9tcmAgc291bmRzIGxpa2UgaXQgaGFuZGxlcyBtZW1vcnkgcmVnaW9ucywgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgUkRNQSBzZXR1cC4gVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93IGlzIHdoZXJlIGByZHNfZ2V0X21yYCBpcyBjYWxsZWQgZnJvbS4gSXMgdGhpcyBhbiBpb2N0bCBjYWxsLCBhIHNldHNvY2tvcHQsIG9yIHBlcmhhcHMgc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEtub3dpbmcgdGhpcyBjYWxsaW5nIGNvbnRleHQgd2lsbCBiZSB2aXRhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXR0YWNrIHN1cmZhY2UgYW5kIGhvdyB0byBleHBsb2l0IHBvdGVudGlhbCBmbGF3cy4gSXQgd2lsbCBndWlkZSBtZSBvbiB3aGVyZSB0byBwbGFjZSB0aGUgZnV6emluZyBoYXJuZXNzLiBUaGF0J3MgdGhlIG5leHQgdGhpbmcgdG8gaW52ZXN0aWdhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MDMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo0OToxNi4xMDI2NDc4MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkyMDc1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19yZHNfcmRtYV9tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9yZG1hLmM9MTU1PXN0YXRpYyBpbnQgcmRzX3Bpbl9wYWdlcyh1bnNpZ25lZCBsb25nIHVzZXJfYWRkciwgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtMTcyLVxcbm5ldC9yZHMvcmRtYS5jOjE3MzpzdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsXFxubmV0L3Jkcy9yZG1hLmMtMTc0LVxcdFxcdFxcdCAgdTY0ICpjb29raWVfcmV0LCBzdHJ1Y3QgcmRzX21yICoqbXJfcmV0LFxcbi0tXFxubmV0L3Jkcy9yZG1hLmM9MzYwPWludCByZHNfZ2V0X21yKHN0cnVjdCByZHNfc29jayAqcnMsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy0zNjktXFxubmV0L3Jkcy9yZG1hLmM6MzcwOlxcdHJldHVybiBfX3Jkc19yZG1hX21hcChycywgXFx1MDAyNmFyZ3MsIE5VTEwsIE5VTEwsIE5VTEwpO1xcbm5ldC9yZHMvcmRtYS5jLTM3MS19XFxuLS1cXG5uZXQvcmRzL3JkbWEuYz0zNzM9aW50IHJkc19nZXRfbXJfZm9yX2Rlc3Qoc3RydWN0IHJkc19zb2NrICpycywgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTM5My1cXG5uZXQvcmRzL3JkbWEuYzozOTQ6XFx0cmV0dXJuIF9fcmRzX3JkbWFfbWFwKHJzLCBcXHUwMDI2bmV3X2FyZ3MsIE5VTEwsIE5VTEwsIE5VTEwpO1xcbm5ldC9yZHMvcmRtYS5jLTM5NS19XFxuLS1cXG5uZXQvcmRzL3JkbWEuYz04NjQ9aW50IHJkc19jbXNnX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy04NzAtXFxubmV0L3Jkcy9yZG1hLmM6ODcxOlxcdHJldHVybiBfX3Jkc19yZG1hX21hcChycywgQ01TR19EQVRBKGNtc2cpLCBcXHUwMDI2cm0tXFx1MDAzZW1fcmRtYV9jb29raWUsXFxubmV0L3Jkcy9yZG1hLmMtODcyLVxcdFxcdFxcdCAgICAgIFxcdTAwMjZybS1cXHUwMDNlcmRtYS5vcF9yZG1hX21yLCBybS1cXHUwMDNlbV9jb25uX3BhdGgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo0OToxNi4xNjE4NTc3M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTUwNzA5NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRm9jdXNpbmcgb24gUkRNQSBNYXBwaW5nIGFuZCBGcmVlIE9wZXJhdGlvbnMqKlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgX19yZHNfcmRtYV9tYXBgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gZGlzc2VjdCBoZXJlLiBJIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGByZHNfZ2V0X21yYCwgYHJkc19nZXRfbXJfZm9yX2Rlc3RgLCBhbmQgYHJkc19jbXNnX3JkbWFfbWFwYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLCB0aGF0IG1lYW5zIHRoZXNlIGFyZSBwb3RlbnRpYWxseSB1c2VyLWFjY2Vzc2libGUgdmlhIGBzZXRzb2Nrb3B0YCBhbmQgYHNlbmRtc2dgLiBTaW5jZSB0aG9zZSBzeXNjYWxscyBhcmUgdGhlIGludGVyZmFjZSB0byB1c2Vyc3BhY2UgZm9yIHRoZXNlIGZ1bmN0aW9ucywgYF9fcmRzX3JkbWFfbWFwYCBhbmQgaXRzIGFzc29jaWF0ZWQgc3RydWN0dXJlIGByZHNfY21zZ19yZG1hX2FyZ3NgIGFyZSBjbGVhcmx5IHRoZSBmb2NhbCBwb2ludHMgb2YgYW55IGludmVzdGlnYXRpb24gaW50byB0aGlzIFJETUEgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlbSBmdWxseS5cblxuTmV4dCwgSSBzaG91bGQgbG9vayBjbG9zZWx5IGF0IGByZHNfcmRtYV9mcmVlX29wYCBhbmQgYHJkc19hdG9taWNfZnJlZV9vcGAuIFRoZSBtYXBwaW5nIGFuZCB1bm1hcHBpbmcvZnJlZWluZyBvcGVyYXRpb25zIGFyZSBhbHdheXMgdGhlIGNyaXRpY2FsIHBvaW50cyB0byBhbmFseXplIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3VlcywgZXNwZWNpYWxseSBpbiBSRE1BIGNvbnRleHRzIHdoZXJlIG1lbW9yeSBpcyBiZWluZyBwaW5uZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NzMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjE6NDk6MjIuNzEyNTY5OTE5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjkyNTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZHNfcmRtYV9mcmVlX29wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvbWVzc2FnZS5jPTEzMj1zdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbi0tXFxubmV0L3Jkcy9tZXNzYWdlLmMtMTc0LVxcdGlmIChybS1cXHUwMDNlcmRtYS5vcF9hY3RpdmUpXFxubmV0L3Jkcy9tZXNzYWdlLmM6MTc1OlxcdFxcdHJkc19yZG1hX2ZyZWVfb3AoXFx1MDAyNnJtLVxcdTAwM2VyZG1hKTtcXG5uZXQvcmRzL21lc3NhZ2UuYy0xNzYtXFx0aWYgKHJtLVxcdTAwM2VyZG1hLm9wX3JkbWFfbXIpXFxuLS1cXG5uZXQvcmRzL3JkbWEuYz00NDY9dm9pZCByZHNfcmRtYV91bnVzZShzdHJ1Y3QgcmRzX3NvY2sgKnJzLCB1MzIgcl9rZXksIGludCBmb3JjZSlcXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTQ5MC1cXG5uZXQvcmRzL3JkbWEuYzo0OTE6dm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybylcXG5uZXQvcmRzL3JkbWEuYy00OTIte1xcbi0tXFxubmV0L3Jkcy9yZG1hLmM9NjE4PWludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTgwOS1cXHRpZiAocmV0KVxcbm5ldC9yZHMvcmRtYS5jOjgxMDpcXHRcXHRyZHNfcmRtYV9mcmVlX29wKG9wKTtcXG5uZXQvcmRzL3JkbWEuYy04MTEtXFx0ZWxzZVxcbi0tXFxubmV0L3Jkcy9yZHMuaD05NzE9aW50IHJkc19jbXNnX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXFxubmV0L3Jkcy9yZHMuaC05NzItXFx0XFx0XFx0ICBzdHJ1Y3QgY21zZ2hkciAqY21zZyk7XFxubmV0L3Jkcy9yZHMuaDo5NzM6dm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybyk7XFxubmV0L3Jkcy9yZHMuaC05NzQtdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo0OToyMi43Njk1MDAzOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODMyMzE4OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6NjQ4MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjE6NDk6MjkuNjAxODIyMTUxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDg4Mzk5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZHNfYXRvbWljX2ZyZWVfb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9tZXNzYWdlLmM9MTMyPXN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3B1cmdlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXFxuLS1cXG5uZXQvcmRzL21lc3NhZ2UuYy0xNzktXFx0aWYgKHJtLVxcdTAwM2VhdG9taWMub3BfYWN0aXZlKVxcbm5ldC9yZHMvbWVzc2FnZS5jOjE4MDpcXHRcXHRyZHNfYXRvbWljX2ZyZWVfb3AoXFx1MDAyNnJtLVxcdTAwM2VhdG9taWMpO1xcbm5ldC9yZHMvbWVzc2FnZS5jLTE4MS1cXHRpZiAocm0tXFx1MDAzZWF0b21pYy5vcF9yZG1hX21yKVxcbi0tXFxubmV0L3Jkcy9yZG1hLmM9NDkxPXZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy01MTgtXFxubmV0L3Jkcy9yZG1hLmM6NTE5OnZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKVxcbm5ldC9yZHMvcmRtYS5jLTUyMC17XFxuLS1cXG5uZXQvcmRzL3Jkcy5oPTk3Mz12b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKTtcXG5uZXQvcmRzL3Jkcy5oOjk3NDp2b2lkIHJkc19hdG9taWNfZnJlZV9vcChzdHJ1Y3Qgcm1fYXRvbWljX29wICphbyk7XFxubmV0L3Jkcy9yZHMuaC05NzUtdm9pZCByZHNfcmRtYV9zZW5kX2NvbXBsZXRlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sIGludCB3Y19zdGF0dXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo0OToyOS42NjY3MTA3MjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk2Nzk4MDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29kZSBwYXRocy5cblxuKipFeGFtaW5pbmcgUG90ZW50aWFsIENsZWFudXAgQ2FuZGlkYXRlcyBpbiBSRFMqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIHdlIG1pZ2h0IGJlIGFibGUgdG8gaW1wcm92ZSBtZXNzYWdlIGhhbmRsaW5nLiBMb29raW5nIGF0IHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcywgSSdtIGZvY3VzaW5nIG9uIGFyZWFzIHdoZXJlIHdlJ3JlIHJlbGVhc2luZyByZXNvdXJjZXMgb3IgaGFuZGxpbmcgZXJyb3JzLiBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgIGltbWVkaWF0ZWx5IHNwcmluZyB0byBtaW5kLiBTZWVtcyBsaWtlIHRoZXkncmUgY2FsbGVkIGR1cmluZyBtZXNzYWdlIHB1cmdpbmcgb3IgaW4gZXJyb3Igc2NlbmFyaW9zLCB3aGljaCBzdWdnZXN0cyB0aGV5IGNvdWxkIGJlIHdvcnRod2hpbGUgdGFyZ2V0cyBmb3IgcmVmaW5lbWVudC4gTmVlZCB0byBleGFtaW5lIHdoYXQgdGhlaXIgcm9sZXMgYXJlLlxuXG5Ob3csIGxldCdzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgcmRzX3NlbmRfeG1pdGAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3Bwb3J0dW5pdGllcyBpbiB0aGUgc2VuZCBwYXRoLCBzaW5jZSB0aGlzIGlzIGEgY3JpdGljYWwgc3BvdCBmb3IgcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NzMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo0OTozNS42MzQ2OTI5NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgzMzQ3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmRzX3NlbmRfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2NvbmcuYz0yMTc9dm9pZCByZHNfY29uZ19xdWV1ZV91cGRhdGVzKHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcClcXG4tLVxcbm5ldC9yZHMvY29uZy5jLTIzMC1cXHRcXHRcXHRyZHNfc3RhdHNfaW5jKHNfY29uZ191cGRhdGVfcXVldWVkKTtcXG5uZXQvcmRzL2NvbmcuYzoyMzE6XFx0XFx0XFx0LyogV2UgY2Fubm90IGlubGluZSB0aGUgY2FsbCB0byByZHNfc2VuZF94bWl0KCkgaGVyZVxcbm5ldC9yZHMvY29uZy5jLTIzMi1cXHRcXHRcXHQgKiBmb3IgdHdvIHJlYXNvbnMgKGJvdGggcGVydGFpbmluZyB0byBhIFRDUCB0cmFuc3BvcnQpOlxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jPTI4Mj1zdGF0aWMgdm9pZCByZHNfaWJfdGFza2xldF9mbl9zZW5kKHVuc2lnbmVkIGxvbmcgZGF0YSlcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0yOTktXFx0ICAgIHRlc3RfYml0KDAsIFxcdTAwMjZjb25uLVxcdTAwM2VjX21hcF9xdWV1ZWQpKSlcXG5uZXQvcmRzL2liX2NtLmM6MzAwOlxcdFxcdHJkc19zZW5kX3htaXQoXFx1MDAyNmljLVxcdTAwM2Vjb25uLVxcdTAwM2VjX3BhdGhbMF0pO1xcbm5ldC9yZHMvaWJfY20uYy0zMDEtfVxcbi0tXFxubmV0L3Jkcy9pYl9zZW5kLmM9MjQ1PXZvaWQgcmRzX2liX3NlbmRfY3FlX2hhbmRsZXIoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX3djICp3YylcXG4tLVxcbm5ldC9yZHMvaWJfc2VuZC5jLTMzNS0gKlxcbm5ldC9yZHMvaWJfc2VuZC5jOjMzNjogKiBUaGUgUkRTIHNlbmQgY29kZSBpcyBlc3NlbnRpYWxseSBzaW5nbGUtdGhyZWFkZWQ7IHJkc19zZW5kX3htaXRcXG5uZXQvcmRzL2liX3NlbmQuYy0zMzctICogc2V0cyBSRFNfSU5fWE1JVCB0byBlbnN1cmUgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgc2VuZCByaW5nLlxcbi0tXFxubmV0L3Jkcy9sb29wLmM9MjMxPXZvaWQgcmRzX2xvb3BfbmV0X2V4aXQodm9pZClcXG4tLVxcbm5ldC9yZHMvbG9vcC5jLTIzNy0gKiBUaGlzIGlzIG1pc3NpbmcgLnhtaXRfKiBiZWNhdXNlIGxvb3AgZG9lc24ndCBnbyB0aHJvdWdoIGdlbmVyaWNcXG5uZXQvcmRzL2xvb3AuYzoyMzg6ICogcmRzX3NlbmRfeG1pdCgpIGFuZCBkb2Vzbid0IGNhbGwgcmRzX3JlY3ZfaW5jb21pbmcoKS4gIC5saXN0ZW5fc3RvcCBhbmRcXG5uZXQvcmRzL2xvb3AuYy0yMzktICogLmxhZGRyX2NoZWNrIGFyZSBtaXNzaW5nIGJlY2F1c2UgdHJhbnNwb3J0LmMgZG9lc24ndCBpdGVyYXRlIG92ZXJcXG4tLVxcbm5ldC9yZHMvcmRzLmg9NTI5PXN0cnVjdCByZHNfdHJhbnNwb3J0IHtcXG4tLVxcbm5ldC9yZHMvcmRzLmgtNTY5LVxcdC8qXFxubmV0L3Jkcy9yZHMuaDo1NzA6XFx0ICogLnhtaXQgaXMgY2FsbGVkIGJ5IHJkc19zZW5kX3htaXQoKSB0byB0ZWxsIHRoZSB0cmFuc3BvcnQgdG8gc2VuZFxcbm5ldC9yZHMvcmRzLmgtNTcxLVxcdCAqIHBhcnQgb2YgYSBtZXNzYWdlLiAgVGhlIGNhbGxlciBzZXJpYWxpemVzIG9uIHRoZSBzZW5kX3NlbSBzbyB0aGlzXFxuLS1cXG5uZXQvcmRzL3Jkcy5oPTk0Nj12b2lkIHJkc19zZW5kX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNvbm4pO1xcbm5ldC9yZHMvcmRzLmg6OTQ3OmludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCk7XFxubmV0L3Jkcy9yZHMuaC05NDgtc3RydWN0IHNvY2thZGRyX2luO1xcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNDQtXFxubmV0L3Jkcy9zZW5kLmM6NDU6LyogV2hlbiB0cmFuc21pdHRpbmcgbWVzc2FnZXMgaW4gcmRzX3NlbmRfeG1pdCwgd2UgbmVlZCB0byBlbWVyZ2UgZnJvbVxcbm5ldC9yZHMvc2VuZC5jLTQ2LSAqIHRpbWUgdG8gdGltZSBhbmQgYnJpZWZseSByZWxlYXNlIHRoZSBDUFUuIE90aGVyd2lzZSB0aGUgc29mdGxvY2sgd2F0Y2hkb2dcXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTU5PXN0YXRpYyB2b2lkIHJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soc3RydWN0IGxpc3RfaGVhZCAqbWVzc2FnZXMsIGludCBzdGF0dXMpO1xcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNjItICogUmVzZXQgdGhlIHNlbmQgc3RhdGUuICBDYWxsZXJzIG11c3QgZW5zdXJlIHRoYXQgdGhpcyBkb2Vzbid0IHJhY2Ugd2l0aFxcbm5ldC9yZHMvc2VuZC5jOjYzOiAqIHJkc19zZW5kX3htaXQoKS5cXG5uZXQvcmRzL3NlbmQuYy02NC0gKi9cXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTEyOD1zdGF0aWMgYm9vbCByZHNfbXByZHNfY3AwX2NhdGNodXAoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtMTg2LSAqL1xcbm5ldC9yZHMvc2VuZC5jOjE4NzppbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxubmV0L3Jkcy9zZW5kLmMtMTg4LXtcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTUzNy19XFxubmV0L3Jkcy9zZW5kLmM6NTM4OkVYUE9SVF9TWU1CT0xfR1BMKHJkc19zZW5kX3htaXQpO1xcbm5ldC9yZHMvc2VuZC5jLTUzOS1cXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTY3Mj1zdGF0aWMgdm9pZCByZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKHN0cnVjdCBsaXN0X2hlYWQgKm1lc3NhZ2VzLCBpbnQgc3RhdHVzKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNzQ3LSAqIG1lc3NhZ2VzIHVwIHRvLCBhbmQgaW5jbHVkaW5nLCB0aGUgZ2l2ZW4gc2VxdWVuY2UgbnVtYmVyLiAgTWVzc2FnZXMgYXJlXFxubmV0L3Jkcy9zZW5kLmM6NzQ4OiAqIG1vdmVkIHRvIHRoZSByZXRyYW5zIHF1ZXVlIHdoZW4gcmRzX3NlbmRfeG1pdCBwaWNrcyB0aGVtIG9mZiB0aGUgc2VuZFxcbm5ldC9yZHMvc2VuZC5jLTc0OS0gKiBxdWV1ZS4gVGhpcyBtZWFucyB0aGF0IGluIHRoZSBUQ1AgY2FzZSwgdGhlIG1lc3NhZ2UgbWF5IG5vdCBoYXZlIGJlZW5cXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTExMzc9aW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtMTQzNC1cXG5uZXQvcmRzL3NlbmQuYzoxNDM1OlxcdHJldCA9IHJkc19zZW5kX3htaXQoY3BhdGgpO1xcbm5ldC9yZHMvc2VuZC5jLTE0MzYtXFx0aWYgKHJldCA9PSAtRU5PTUVNIHx8IHJldCA9PSAtRUFHQUlOKSB7XFxuLS1cXG5uZXQvcmRzL3RjcC5jPTEyNj12b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvcmRzL3RjcC5jLTE0MC1cXHQgKiBjcF9zdGF0ZSB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBSRFNfQ09OTl9VUCwgYW5kIHRoZW5cXG5uZXQvcmRzL3RjcC5jOjE0MTpcXHQgKiB3YWl0aW5nIGZvciBhbnkgZXhpc3RpbmcgdGhyZWFkcyBpbiByZHNfc2VuZF94bWl0IHRvXFxubmV0L3Jkcy90Y3AuYy0xNDItXFx0ICogY29tcGxldGUgcmVsZWFzZV9pbl94bWl0KCkuIChTdWJzZXF1ZW50IHRocmVhZHMgZW50ZXJpbmdcXG5uZXQvcmRzL3RjcC5jOjE0MzpcXHQgKiByZHNfc2VuZF94bWl0KCkgd2lsbCBiYWlsIG9uICFyZHNfY29ubl91cCgpLlxcbm5ldC9yZHMvdGNwLmMtMTQ0LVxcdCAqXFxuLS1cXG5uZXQvcmRzL3RocmVhZHMuYz0xOTE9dm9pZCByZHNfc2VuZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3Jkcy90aHJlYWRzLmMtMTk5LVxcdFxcdGNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKTtcXG5uZXQvcmRzL3RocmVhZHMuYzoyMDA6XFx0XFx0cmV0ID0gcmRzX3NlbmRfeG1pdChjcCk7XFxubmV0L3Jkcy90aHJlYWRzLmMtMjAxLVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo0OTozNS42OTMwMzM1MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTM5MTU5NDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6ODU4MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjE6NDk6NDIuODMyMTk1NTU4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njk5ODQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZHNfc2VuZG1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2FmX3Jkcy5jPTY0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyByZHNfcHJvdG9fb3BzID0ge1xcbi0tXFxubmV0L3Jkcy9hZl9yZHMuYy02NjAtXFx0LmdldHNvY2tvcHRfaXRlciA9XFx0cmRzX2dldHNvY2tvcHQsXFxubmV0L3Jkcy9hZl9yZHMuYzo2NjE6XFx0LnNlbmRtc2cgPVxcdHJkc19zZW5kbXNnLFxcbm5ldC9yZHMvYWZfcmRzLmMtNjYyLVxcdC5yZWN2bXNnID1cXHRyZHNfcmVjdm1zZyxcXG4tLVxcbm5ldC9yZHMvcmRzLmg9NjE4PXN0cnVjdCByZHNfc29jayB7XFxuLS1cXG5uZXQvcmRzL3Jkcy5oLTY0MC1cXHQvKlxcbm5ldC9yZHMvcmRzLmg6NjQxOlxcdCAqIHJkc19zZW5kbXNnIGNhY2hlcyB0aGUgY29ubiBpdCB1c2VkIHRoZSBsYXN0IHRpbWUgYXJvdW5kLlxcbm5ldC9yZHMvcmRzLmgtNjQyLVxcdCAqIFRoaXMgaGVscHMgYXZvaWQgY29zdGx5IGxvb2t1cHMuXFxuLS1cXG5uZXQvcmRzL3Jkcy5oPTkzOT12b2lkIHJkczZfaW5jX2luZm9fY29weShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsXFxuLS1cXG5uZXQvcmRzL3Jkcy5oLTk0NC0vKiBzZW5kLmMgKi9cXG5uZXQvcmRzL3Jkcy5oOjk0NTppbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pO1xcbm5ldC9yZHMvcmRzLmgtOTQ2LXZvaWQgcmRzX3NlbmRfcGF0aF9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY29ubik7XFxuLS1cXG5uZXQvcmRzL3JlY3YuYz0xOTk9c3RhdGljIHZvaWQgcmRzX3JlY3ZfaHNfZXh0aGRycyhzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLFxcbi0tXFxubmV0L3Jkcy9yZWN2LmMtMjcwLSAqXFxubmV0L3Jkcy9yZWN2LmM6MjcxOiAqIDEuIHJkc19zZW5kbXNnIG9uIGZpcnN0IGNvbm5lY3QgYXR0ZW1wdCBzZW5kcyB0aGUgcHJvYmUgcGluZywgd2l0aCB0aGVcXG5uZXQvcmRzL3JlY3YuYy0yNzItICogICAgc2VuZGVyJ3MgbnBhdGhzIChzX25wYXRocylcXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTExMTQ9c3RhdGljIGludCByZHNfcmRtYV9ieXRlcyhzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCAqcmRtYV9ieXRlcylcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTExMzYtXFxubmV0L3Jkcy9zZW5kLmM6MTEzNzppbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pXFxubmV0L3Jkcy9zZW5kLmMtMTEzOC17XFxuLS1cXG5uZXQvcmRzL3NlbmQuYy0xMTYyLVxcbm5ldC9yZHMvc2VuZC5jOjExNjM6XFx0LyogZXhwZWN0IDEgUkRNQSBDTVNHIHBlciByZHNfc2VuZG1zZy4gY2FuIHN0aWxsIGdyb3cgaWYgbW9yZSBuZWVkZWQuICovXFxubmV0L3Jkcy9zZW5kLmMtMTE2NC1cXHR2Y3QuaW5jciA9IDE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjQ5OjQyLjg4OTIwMTY5OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mzc0ODgzMTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBSRFMgU2VuZCBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgaW4gYHJkc19zZW5kX3htaXRgLiBJdCdzIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGhhbmRsaW5nIG1lc3NhZ2Ugc2VuZGluZyBpbiBSRFMsIGNhbGxlZCBmcm9tIGJvdGggYHJkc19zZW5kbXNnYCBhbmQgYHJkc19zZW5kX3dvcmtlcmAuIFRoYXQgbWFrZXMgaXQgYSBuYXR1cmFsIGZvY2FsIHBvaW50IGZvciBteSBhbmFseXNpcywgYWx0aG91Z2gsIGJlY2F1c2UgaXQgaXMgdGhlIHByaW1hcnkgc2VuZCBmdW5jdGlvbiwgaXQgbWlnaHQgYmUgYSBiaXQgdG9vIGJyb2FkIHRvIHN0YXJ0LlxuXG5Ib3dldmVyLCB0aGUgcGF0Y2ggKnNwZWNpZmljYWxseSogdGFyZ2V0cyBhbiBlcnJvciBjb25kaXRpb24gd2l0aGluIGByZHNfc2VuZF94bWl0YCB3aGVuIFJETUEgb3BlcmF0aW9ucyBhcmUgYWN0aXZlIOKAkyBgcm0tXHUwMDNlcmRtYS5vcF9hY3RpdmVgIGlzIHRydWUg4oCTIGFuZCBhIG1lc3NhZ2UgaGFzIGJlZW4gcmV0cmFuc21pdHRlZCwgYXMgZmxhZ2dlZCBieSBgUkRTX01TR19SRVRSQU5TTUlUVEVEYC4gVGhpcyByZWFsbHkgbmFycm93cyBkb3duIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHZlY3Rvci4gVGhhdCBnaXZlcyBtZSBhIHByZWNpc2UgZm9jdXMuIEkgc2hvdWxkIGJlIGZ1enppbmcgYHJkc19zZW5kbXNnYCBhbmQgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBSRE1BLXJlbGF0ZWQgb3BlcmF0aW9ucy5cblxuSSdsbCBkZWZpbml0ZWx5IGluY2x1ZGUgYHJkc19zZW5kX3htaXRgIGluIG15IGZvY3VzIHN5bWJvbHMsIGJ1dCBhbHNvIHdhbnQgdG8gaW5jbHVkZSB0aGUgc3VwcG9ydGluZyBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSBpbnZvbHZlZCBpbiB0aGUgZXJyb3IgcGF0aC4gSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBfX3Jkc19yZG1hX21hcGAsIGByZHNfY21zZ19yZG1hX2FyZ3NgLCBgcmRzX3JkbWFfZnJlZV9vcGAsIGFuZCBgcmRzX2F0b21pY19mcmVlX29wYC4gVGhlc2Ugc2hvdWxkIGJlIHRoZSBrZXkgaW5ncmVkaWVudHMsIGVzcGVjaWFsbHkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgcmV0cmFuc21pc3Npb24gY29kZSBwYXRoLlxuXG5PbmUgdGhpbmcgSSBuZWVkIHRvIGRvdWJsZSBjaGVjayBpcyB0aGF0IHRoaXMgaXMgaW5kZWVkIHNwZWNpZmljIHRvIHRoZSBSRE1BIHBhdGguIFRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvcmRzL3JkbWEuY2AsIGFuZCB0aGF0J3Mgb2J2aW91c2x5IHN1Z2dlc3RpdmUuIEkga25vdyBgcmRtYS5jYCBpcyBjb21waWxlZCB1bmRlciBgQ09ORklHX1JEU2AsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYENPTkZJR19SRFNfUkRNQWAgaXMgbmVlZGVkLCBqdXN0IHRvIGJlIHN1cmUuIEknbSBnb2luZyB0byBxdWlja2x5IHJlLWNoZWNrIGBuZXQvcmRzL0tjb25maWdgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTM0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjQ5OjQ4LjI2NDA4NzQwMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg0NzMwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUkRTX1JETUFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvS2NvbmZpZz0zPWNvbmZpZyBSRFNcXG4tLVxcbm5ldC9yZHMvS2NvbmZpZy05LVxcbm5ldC9yZHMvS2NvbmZpZzoxMDpjb25maWcgUkRTX1JETUFcXG5uZXQvcmRzL0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIlJEUyBvdmVyIEluZmluaWJhbmRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjQ5OjQ4LjMyMjU2NzcyMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjIxNzIzMTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6OTc1MCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjE6NDk6NTUuOTQ0MjkyOTY2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTg2Nzg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJSRFNfUkRNQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvTWFrZWZpbGU9Mz1yZHMteSA6PVxcdGFmX3Jkcy5vIGJpbmQubyBjb25nLm8gY29ubmVjdGlvbi5vIGluZm8ubyBtZXNzYWdlLm8gICBcXFxcXFxuLS1cXG5uZXQvcmRzL01ha2VmaWxlLTYtXFxubmV0L3Jkcy9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19SRFNfUkRNQSkgKz0gcmRzX3JkbWEub1xcbm5ldC9yZHMvTWFrZWZpbGUtOC1yZHNfcmRtYS15IDo9XFx0cmRtYV90cmFuc3BvcnQubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjQ5OjU2LjAwNDE2NTAwNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDc2MDYxMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFJEUyBhbmQgUkRNQSBDb21waWxhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmV0L3Jkcy9yZG1hLmNgLiBJdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgY29kZSBnZXRzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19SRFNgIGlzIGVuYWJsZWQuIEJ1dCwgaGVyZSdzIHRoZSByZWFsIHF1ZXN0aW9uOiBkb2VzIHNpbXBseSBoYXZpbmcgYENPTkZJR19SRFNgIGdpdmUgbWUgUkRNQSBmdW5jdGlvbmFsaXR5IHdpdGhpbiBSRFM/IE9yLCBpcyBgQ09ORklHX1JEU19SRE1BYCBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIHRoYXQgc3BlY2lmaWMgUkRNQSBpbnRlZ3JhdGlvbj9cblxuSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhbnkgcGF0aHdheSB0byBgcmRzX2Ntc2dfcmRtYV9hcmdzYCB3aXRob3V0IGBDT05GSUdfUkRTX1JETUFgLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIGlmIFJEUyBSRE1BIGNhbiBiZSB1c2VkIHdpdGhvdXQgZXhwbGljaXRseSBlbmFibGluZyBpdCwgd2hpY2ggd291bGQgYmUgYW4gdW5leHBlY3RlZCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNzMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo0OTo1OS4wODAyMjkwNzRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4ODc1ODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJkc19jbXNnX3JkbWFfYXJnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL3JkbWEuYz01NjY9aW50IHJkc19yZG1hX2V4dHJhX3NpemUoc3RydWN0IHJkc19yZG1hX2FyZ3MgKmFyZ3MsXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy02MTctICovXFxubmV0L3Jkcy9yZG1hLmM6NjE4OmludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG5uZXQvcmRzL3JkbWEuYy02MTktXFx0XFx0ICAgICAgIHN0cnVjdCBjbXNnaGRyICpjbXNnLFxcbi0tXFxubmV0L3Jkcy9yZHMuaD05NjY9aW50IHJkc19jbXNnX3JkbWFfZGVzdChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxcbm5ldC9yZHMvcmRzLmgtOTY3LVxcdFxcdFxcdCAgc3RydWN0IGNtc2doZHIgKmNtc2cpO1xcbm5ldC9yZHMvcmRzLmg6OTY4OmludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG5uZXQvcmRzL3Jkcy5oLTk2OS1cXHRcXHRcXHQgIHN0cnVjdCBjbXNnaGRyICpjbXNnLFxcbi0tXFxubmV0L3Jkcy9zZW5kLmM9MTA1Mz1zdGF0aWMgaW50IHJkc19jbXNnX3NlbmQoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTEwNzMtXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubmV0L3Jkcy9zZW5kLmM6MTA3NDpcXHRcXHRcXHRyZXQgPSByZHNfY21zZ19yZG1hX2FyZ3MocnMsIHJtLCBjbXNnLCBcXHUwMDI2dmN0LVxcdTAwM2V2ZWNbaW5kXSk7XFxubmV0L3Jkcy9zZW5kLmMtMTA3NS1cXHRcXHRcXHRpbmQrKztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjE6NDk6NTkuMTQ5MTExNDYzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NDM5ODk5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSRFMgUkRNQSBBcmd1bWVudCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIGByZHNfY21zZ19yZG1hX2FyZ3NgIGlzIGNhbGxlZCBmcm9tIGByZHNfY21zZ19zZW5kYCB3aXRoaW4gYG5ldC9yZHMvc2VuZC5jYC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZDsgaXQncyBwYXJ0IG9mIHRoZSBSZW1vdGUgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFJEUykgaW1wbGVtZW50YXRpb24sIGFuZCBpdCdzIGJ1aWx0IHdoZW4gYENPTkZJR19SRFNgIGlzIGVuYWJsZWQuIFNlZW1zIGxvZ2ljYWwuXG5cbkhvd2V2ZXIsIHRoZSBrZXkgcXVlc3Rpb24gbm93IGJlY29tZXM6ICpkb2VzKiBgcmRzX2Ntc2dfcmRtYV9hcmdzYCAqcmVxdWlyZSogYW4gdW5kZXJseWluZyBSRE1BIHRyYW5zcG9ydCB0byBiZSBmdW5jdGlvbmFsLCBvciB3aWxsIGl0IHNpbXBseSBleGVjdXRlLCBwb3RlbnRpYWxseSBmYWlsaW5nIGxhdGVyIGlmIG5vIFJETUEgaGFyZHdhcmUgaXMgcHJlc2VudD8gVGhlIHByZXNlbmNlIG9mIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBgQ09ORklHX1JEU2AgZGVwZW5kZW5jeSBhbG9uZSBkb2Vzbid0IGNsYXJpZnkgaXRzIG9wZXJhdGlvbmFsIHJlbGlhbmNlIG9uIGFuIFJETUEtY2FwYWJsZSBzZXR1cC4gVGhpcyBmZWVscyBsaWtlIGFuIG9wdGltaXphdGlvbiB0aGF0IG5lZWRzIGRlZXBlciBwcm9iaW5nLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGByZHNfY21zZ19yZG1hX2FyZ3NgIGl0c2VsZi4gVGhhdCdzIHRoZSBvbmx5IHdheSB0byB1bmRlcnN0YW5kIGl0cyBhY3R1YWwgYmVoYXZpb3IgYW5kIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTcyNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo1MDowNS42OTMxMDM4MzNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Jkcy9yZG1hLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjE4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjE4OlxcdGludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4gNjE5OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgY21zZ2hkciAqY21zZyxcXG4gNjIwOlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcmRzX2lvdl92ZWN0b3IgKnZlYylcXG4gNjIxOlxcdHtcXG4gNjIyOlxcdFxcdHN0cnVjdCByZHNfcmRtYV9hcmdzICphcmdzO1xcbiA2MjM6XFx0XFx0c3RydWN0IHJtX3JkbWFfb3AgKm9wID0gXFx1MDAyNnJtLVxcdTAwM2VyZG1hO1xcbiA2MjQ6XFx0XFx0aW50IG5yX3BhZ2VzO1xcbiA2MjU6XFx0XFx0dW5zaWduZWQgaW50IG5yX2J5dGVzO1xcbiA2MjY6XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlcyA9IE5VTEw7XFxuIDYyNzpcXHRcXHRzdHJ1Y3QgcmRzX2lvdmVjICppb3ZzO1xcbiA2Mjg6XFx0XFx0dW5zaWduZWQgaW50IGksIGo7XFxuIDYyOTpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gNjMwOlxcdFxcdGJvb2wgb2RwX3N1cHBvcnRlZCA9IHRydWU7XFxuIDYzMTpcXHRcXG4gNjMyOlxcdFxcdGlmIChjbXNnLVxcdTAwM2VjbXNnX2xlbiBcXHUwMDNjIENNU0dfTEVOKHNpemVvZihzdHJ1Y3QgcmRzX3JkbWFfYXJncykpXFxuIDYzMzpcXHRcXHQgICAgfHwgcm0tXFx1MDAzZXJkbWEub3BfYWN0aXZlKVxcbiA2MzQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDYzNTpcXHRcXG4gNjM2OlxcdFxcdGFyZ3MgPSBDTVNHX0RBVEEoY21zZyk7XFxuIDYzNzpcXHRcXG4gNjM4OlxcdFxcdGlmIChpcHY2X2FkZHJfYW55KFxcdTAwMjZycy1cXHUwMDNlcnNfYm91bmRfYWRkcikpIHtcXG4gNjM5OlxcdFxcdFxcdHJldCA9IC1FTk9UQ09OTjsgLyogWFhYIG5vdCBhIGdyZWF0IGVycm5vICovXFxuIDY0MDpcXHRcXHRcXHRnb3RvIG91dF9yZXQ7XFxuIDY0MTpcXHRcXHR9XFxuIDY0MjpcXHRcXG4gNjQzOlxcdFxcdGlmIChhcmdzLVxcdTAwM2Vucl9sb2NhbCBcXHUwMDNlIFVJT19NQVhJT1YpIHtcXG4gNjQ0OlxcdFxcdFxcdHJldCA9IC1FTVNHU0laRTtcXG4gNjQ1OlxcdFxcdFxcdGdvdG8gb3V0X3JldDtcXG4gNjQ2OlxcdFxcdH1cXG4gNjQ3OlxcdFxcbiA2NDg6XFx0XFx0aWYgKHZlYy1cXHUwMDNlbGVuICE9IGFyZ3MtXFx1MDAzZW5yX2xvY2FsKSB7XFxuIDY0OTpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiA2NTA6XFx0XFx0XFx0Z290byBvdXRfcmV0O1xcbiA2NTE6XFx0XFx0fVxcbiA2NTI6XFx0XFx0Lyogb2RwLW1yIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG11bHRpcGxlIHJlcXVlc3RzIHdpdGhpbiBvbmUgbWVzc2FnZSAqL1xcbiA2NTM6XFx0XFx0aWYgKGFyZ3MtXFx1MDAzZW5yX2xvY2FsICE9IDEpXFxuIDY1NDpcXHRcXHRcXHRvZHBfc3VwcG9ydGVkID0gZmFsc2U7XFxuIDY1NTpcXHRcXG4gNjU2OlxcdFxcdGlvdnMgPSB2ZWMtXFx1MDAzZWlvdjtcXG4gNjU3OlxcdFxcbiA2NTg6XFx0XFx0bnJfcGFnZXMgPSByZHNfcmRtYV9wYWdlcyhpb3ZzLCBhcmdzLVxcdTAwM2Vucl9sb2NhbCk7XFxuIDY1OTpcXHRcXHRpZiAobnJfcGFnZXMgXFx1MDAzYyAwKSB7XFxuIDY2MDpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiA2NjE6XFx0XFx0XFx0Z290byBvdXRfcmV0O1xcbiA2NjI6XFx0XFx0fVxcbiA2NjM6XFx0XFxuIDY2NDpcXHRcXHRwYWdlcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCBucl9wYWdlcyk7XFxuIDY2NTpcXHRcXHRpZiAoIXBhZ2VzKSB7XFxuIDY2NjpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiA2Njc6XFx0XFx0XFx0Z290byBvdXRfcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo1MDowNS42OTMxOTY1MTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQyOTE5OTEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjExNDgzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjUwOjEzLjEyMjM5OTc3MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Jkcy9yZG1hLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzUwOlxcdFxcdFxcdFxcdFxcdHJzLVxcdTAwM2Vyc190cmFuc3BvcnQtXFx1MDAzZWdldF9tcihcXG4gNzUxOlxcdFxcdFxcdFxcdFxcdFxcdE5VTEwsIDAsIHJzLCBcXHUwMDI2bG9jYWxfb2RwX21yLVxcdTAwM2VyX2tleSwgTlVMTCxcXG4gNzUyOlxcdFxcdFxcdFxcdFxcdFxcdGlvdi1cXHUwMDNlYWRkciwgaW92LVxcdTAwM2VieXRlcywgT0RQX1ZJUlRVQUwpO1xcbiA3NTM6XFx0XFx0XFx0XFx0aWYgKElTX0VSUihsb2NhbF9vZHBfbXItXFx1MDAzZXJfdHJhbnNfcHJpdmF0ZSkpIHtcXG4gNzU0OlxcdFxcdFxcdFxcdFxcdHJldCA9IFBUUl9FUlIobG9jYWxfb2RwX21yLVxcdTAwM2VyX3RyYW5zX3ByaXZhdGUpO1xcbiA3NTU6XFx0XFx0XFx0XFx0XFx0cmRzZGVidWcoXFxcImdldF9tciByZXQgJWQgJXBcXFxcXFxcIlxcXCIsIHJldCxcXG4gNzU2OlxcdFxcdFxcdFxcdFxcdFxcdCBsb2NhbF9vZHBfbXItXFx1MDAzZXJfdHJhbnNfcHJpdmF0ZSk7XFxuIDc1NzpcXHRcXHRcXHRcXHRcXHRrZnJlZShsb2NhbF9vZHBfbXIpO1xcbiA3NTg6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuIDc1OTpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9wYWdlcztcXG4gNzYwOlxcdFxcdFxcdFxcdH1cXG4gNzYxOlxcdFxcdFxcdFxcdHJkc2RlYnVnKFxcXCJOZWVkIG9kcDsgbG9jYWxfb2RwX21yICVwIHRyYW5zX3ByaXZhdGUgJXBcXFxcblxcXCIsXFxuIDc2MjpcXHRcXHRcXHRcXHRcXHQgbG9jYWxfb2RwX21yLCBsb2NhbF9vZHBfbXItXFx1MDAzZXJfdHJhbnNfcHJpdmF0ZSk7XFxuIDc2MzpcXHRcXHRcXHRcXHQvKiBGcm9tIGhlcmUgb24gdGhlIE1SIGlzIHRvcm4gZG93biB0aHJvdWdoXFxuIDc2NDpcXHRcXHRcXHRcXHQgKiBfX3Jkc19wdXRfbXJfZmluYWwoKSwgd2hpY2ggZHJvcHMgdGhpcyByZWZlcmVuY2UuXFxuIDc2NTpcXHRcXHRcXHRcXHQgKi9cXG4gNzY2OlxcdFxcdFxcdFxcdHNvY2tfaG9sZChyZHNfcnNfdG9fc2socnMpKTtcXG4gNzY3OlxcdFxcdFxcdFxcdG9wLVxcdTAwM2VvcF9vZHBfbXIgPSBsb2NhbF9vZHBfbXI7XFxuIDc2ODpcXHRcXHRcXHRcXHRvcC1cXHUwMDNlb3Bfb2RwX2FkZHIgPSBpb3YtXFx1MDAzZWFkZHI7XFxuIDc2OTpcXHRcXHRcXHR9XFxuIDc3MDpcXHRcXG4gNzcxOlxcdFxcdFxcdHJkc2RlYnVnKFxcXCJSRFM6IG5yX2J5dGVzICV1IG5yICV1IGlvdi1cXHUwMDNlYnl0ZXMgJWxsdSBpb3YtXFx1MDAzZWFkZHIgJWxseFxcXFxuXFxcIixcXG4gNzcyOlxcdFxcdFxcdFxcdCBucl9ieXRlcywgbnIsIGlvdi1cXHUwMDNlYnl0ZXMsIGlvdi1cXHUwMDNlYWRkcik7XFxuIDc3MzpcXHRcXG4gNzc0OlxcdFxcdFxcdG5yX2J5dGVzICs9IGlvdi1cXHUwMDNlYnl0ZXM7XFxuIDc3NTpcXHRcXG4gNzc2OlxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBucjsgaisrKSB7XFxuIDc3NzpcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gaW92LVxcdTAwM2VhZGRyIFxcdTAwMjYgflBBR0VfTUFTSztcXG4gNzc4OlxcdFxcdFxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XFxuIDc3OTpcXHRcXG4gNzgwOlxcdFxcdFxcdFxcdHNnID0gXFx1MDAyNm9wLVxcdTAwM2VvcF9zZ1tvcC1cXHUwMDNlb3BfbmVudHMgKyBqXTtcXG4gNzgxOlxcdFxcdFxcdFxcdHNnX3NldF9wYWdlKHNnLCBwYWdlc1tqXSxcXG4gNzgyOlxcdFxcdFxcdFxcdFxcdFxcdG1pbl90KHVuc2lnbmVkIGludCwgaW92LVxcdTAwM2VieXRlcywgUEFHRV9TSVpFIC0gb2Zmc2V0KSxcXG4gNzgzOlxcdFxcdFxcdFxcdFxcdFxcdG9mZnNldCk7XFxuIDc4NDpcXHRcXG4gNzg1OlxcdFxcdFxcdFxcdHNnX2RtYV9sZW4oc2cpID0gc2ctXFx1MDAzZWxlbmd0aDtcXG4gNzg2OlxcdFxcdFxcdFxcdHJkc2RlYnVnKFxcXCJSRFM6IHNnLVxcdTAwM2VvZmZzZXQgJXggc2ctXFx1MDAzZWxlbiAleCBpb3YtXFx1MDAzZWFkZHIgJWxseCBpb3YtXFx1MDAzZWJ5dGVzICVsbHVcXFxcblxcXCIsXFxuIDc4NzpcXHRcXHRcXHRcXHQgICAgICAgc2ctXFx1MDAzZW9mZnNldCwgc2ctXFx1MDAzZWxlbmd0aCwgaW92LVxcdTAwM2VhZGRyLCBpb3YtXFx1MDAzZWJ5dGVzKTtcXG4gNzg4OlxcdFxcbiA3ODk6XFx0XFx0XFx0XFx0aW92LVxcdTAwM2VhZGRyICs9IHNnLVxcdTAwM2VsZW5ndGg7XFxuIDc5MDpcXHRcXHRcXHRcXHRpb3YtXFx1MDAzZWJ5dGVzIC09IHNnLVxcdTAwM2VsZW5ndGg7XFxuIDc5MTpcXHRcXHRcXHR9XFxuIDc5MjpcXHRcXG4gNzkzOlxcdFxcdFxcdG9wLVxcdTAwM2VvcF9uZW50cyArPSBucjtcXG4gNzk0OlxcdFxcdH1cXG4gNzk1OlxcdFxcbiA3OTY6XFx0XFx0aWYgKG5yX2J5dGVzIFxcdTAwM2UgYXJncy1cXHUwMDNlcmVtb3RlX3ZlYy5ieXRlcykge1xcbiA3OTc6XFx0XFx0XFx0cmRzZGVidWcoXFxcIlJEUyBucl9ieXRlcyAldSByZW1vdGVfYnl0ZXMgJXUgZG8gbm90IG1hdGNoXFxcXG5cXFwiLFxcbiA3OTg6XFx0XFx0XFx0XFx0XFx0bnJfYnl0ZXMsXFxuIDc5OTpcXHRcXHRcXHRcXHRcXHQodW5zaWduZWQgaW50KSBhcmdzLVxcdTAwM2VyZW1vdGVfdmVjLmJ5dGVzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjE6NTA6MTMuMTIyNTAyOTYyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTkzNjc1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSRFMgUkRNQSBDb2RlIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYHJkc19jbXNnX3JkbWFfYXJnc2Agd29ya3MgYW5kIGl0IGFwcGVhcnMgdG8gcmVseSBvbiBgcnMtXHUwMDNlcnNfdHJhbnNwb3J0LVx1MDAzZWdldF9tcmAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIHRoZXJlJ3Mgbm8gdHJhbnNwb3J0IGJvdW5kLCB0aGlzIGNvdWxkIGZhaWwgcHJldHR5IGVhcmx5IG9uLiBIb3dldmVyLCB0aGUgY29kZSAqaXMqIHJlYWNoYWJsZSwgc28gdGhhdCBhc3N1bXB0aW9uIGlzIGEgYml0IHNoYWt5LiBJJ20gd29uZGVyaW5nIGlmIGBDT05GSUdfUkRTX1JETUFgIGlzIGFjdHVhbGx5ICpyZXF1aXJlZCogdG8gdHJpZ2dlciB0aGlzIHNwZWNpZmljIHNlY3Rpb24uIFByb2JhYmx5IG5vdCwgc3RyaWN0bHkgc3BlYWtpbmcsIHRvIGp1c3QgKnJlYWNoKiB0aGUgY29kZS4gSG93ZXZlciwgd2l0aG91dCBhIHRydWUgUkRNQSB0cmFuc3BvcnQgaW5pdGlhbGl6ZWQsIGBycy1cdTAwM2Vyc190cmFuc3BvcnRgIGlzIGxpa2VseSB0byBiZSBOVUxMLCBvciBhdCBsZWFzdCBub3QgaGF2ZSBpbXBsZW1lbnRlZCBgZ2V0X21yYCwgbWFraW5nIHRoZSB3aG9sZSB0aGluZyBhIG5vLW9wLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZSwgdGhlIGBycy1cdTAwM2Vyc190cmFuc3BvcnRgIGlzIHNldCBkdXJpbmcgdGhlIGJpbmRpbmcgb3IgY29ubmVjdGluZyBwaGFzZS4gVGhhdCBtYWtlcyBtb3JlIHNlbnNlLiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCBpZiB3ZSdyZSB1c2luZyBzb21ldGhpbmcgbGlrZSBgUkRTX1RDUGAsIGRvZXMgdGhhdCB0cmFuc3BvcnQgKmV2ZW4qIGltcGxlbWVudCBgZ2V0X21yYD8gSSdkIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdCBwYXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc3NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjUwOjE3LjI4MTg3MjYzNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2ODg0NTYwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfbXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy90Y3BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjUwOjE3LjQ1ODc2NTg1NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODQyNzg5OTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipMb29raW5nIGZvciBgZ2V0X21yYCBpbiBSRE1BIGFuZCBUQ1AgVHJhbnNwb3J0cyoqXG5cblJpZ2h0LCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIGZpbmQgd2hlcmUgbWVtb3J5IHJlZ2lzdHJhdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgbmV0d29yayBzdGFjaywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gUkRNQSwgc2luY2UgVENQIGRvZXNuJ3QgaW1wbGVtZW50IGBnZXRfbXJgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgUkRNQSBoYW5kbGVzIGl0cyBtZW1vcnkgcmVnaXN0cmF0aW9uLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbmV0L3Jkcy9pYl9yZG1hLmNgIG9yIGEgZmlsZSBzaW1pbGFybHkgbmFtZWQsIHJlbGF0ZWQgdG8gdGhlIFJETUEgaW1wbGVtZW50YXRpb24uIFRoYXQncyBsaWtlbHkgd2hlcmUgdGhlIHJlbGV2YW50IGBnZXRfbXJgIGZ1bmN0aW9uYWxpdHksIG9yIGl0cyBlcXVpdmFsZW50LCB3aWxsIGJlIHNpdHVhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE4OSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjUwOjIwLjMwMTU1ODE5M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1Nzk1NzAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9tclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL2liXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo1MDoyMC4zNjExNDg4MjNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc4MTQ1MTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBnZXRfbXJgIGluIGByZHNfdHJhbnNwb3J0YCoqXG5cbk9rYXksIHNvIGBnZXRfbXJgIGlzIGEgZmllbGQgd2l0aGluIHRoZSBgcmRzX3RyYW5zcG9ydGAgc3RydWN0dXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiV2hlcmUgZXhhY3RseSBpcyB0aGlzIHZhbHVlIGJlaW5nIHNldD9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXNzaWdubWVudCBjb250ZXh0IHRvIHRydWx5IGdyYXNwIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvci4gVGhpcyBpcyBmdW5kYW1lbnRhbCBpbiBkZWJ1Z2dpbmcgb3IgdW5kZXJzdGFuZGluZyB0aGUgZmxvdy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhyb3VnaCB0aGUgY29kZSBhbmQgZmluZCB0aGUgc3BlY2lmaWMgcG9pbnRzIHdoZXJlIGBnZXRfbXJgIGlzIHBvcHVsYXRlZC4gVGhhdCdzIHRoZSBvbmx5IHdheSB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgZmllbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mzk1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjE6NTA6MjMuMTQyNjAyOTYzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTcyMjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcLmdldF9tclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2liLmM9NTU1PXN0cnVjdCByZHNfdHJhbnNwb3J0IHJkc19pYl90cmFuc3BvcnQgPSB7XFxuLS1cXG5uZXQvcmRzL2liLmMtNTcyLVxcdC5leGl0XFx0XFx0XFx0PSByZHNfaWJfZXhpdCxcXG5uZXQvcmRzL2liLmM6NTczOlxcdC5nZXRfbXJcXHRcXHRcXHQ9IHJkc19pYl9nZXRfbXIsXFxubmV0L3Jkcy9pYi5jLTU3NC1cXHQuc3luY19tclxcdFxcdD0gcmRzX2liX3N5bmNfbXIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjUwOjIzLjE5ODMzMDQxM1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQzNzExODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJETUEgQ29uZmlndXJhdGlvbiBDaGVjayoqXG5cbk9rYXksIHNvIGByZHNfaWJfdHJhbnNwb3J0YCBpcyB0aGUga2V5IOKAkyBpdCBpbXBsZW1lbnRzIGBnZXRfbXJgLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgdGhlIFJlbW90ZSBEaXJlY3QgTWVtb3J5IEFjY2VzcyAoUkRNQSkgZnVuY3Rpb25hbGl0eS4gQW5kIHRoYXQgdHJhbnNwb3J0IGlzIGRlZmluZWQgaW4gYG5ldC9yZHMvaWIuY2AuICBJIGtub3cgdGhhdCBmaWxlJ3MgY29tcGlsZWQgd2hlbiBgQ09ORklHX1JEU19SRE1BYCBpcyBlbmFibGVkLiBUaGVyZWZvcmUsIHRvIGVuc3VyZSBJJ20gdGhvcm91Z2hseSB0ZXN0aW5nIHRoZSBSRE1BIGNhcGFiaWxpdGllcywgSSBhYnNvbHV0ZWx5IG5lZWQgYENPTkZJR19SRFNfUkRNQWAgdG8gYmUgc2V0LiAgSXQncyBub24tbmVnb3RpYWJsZS5cblxuV2hpbGUgSSdtIGF0IGl0LCBJIHNob3VsZCB2ZXJpZnkgd2hldGhlciBgQ09ORklHX1JEU19UQ1BgIGlzIGFsc28gYmVuZWZpY2lhbCB0byBoYXZlIGVuYWJsZWQuICBJIHN1c3BlY3QgaXQgd2lsbCBiZSwgc28gSSBzaG91bGQgY29uc2lkZXIgc2V0dGluZyBpdCB0b28uXG5cblJpZ2h0LCBsZXQgbWUgYWRkIGBSRFNgLCBgUkRTX1JETUFgLCBhbmQgYFJEU19UQ1BgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoYXQgY292ZXJzIHRoZSBiYXNpYyBzZXR1cC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBzeW1ib2xzIGFmZmVjdGVkLiBNeSBmb2N1cyBuZWVkcyB0byBpbmNsdWRlOlxuKiAgIGBfX3Jkc19yZG1hX21hcGBcbiogICBgcmRzX2Ntc2dfcmRtYV9hcmdzYFxuKiAgIGByZHNfcmRtYV9mcmVlX29wYFxuKiAgIGByZHNfYXRvbWljX2ZyZWVfb3BgXG4qICAgYHJkc19zZW5kX3htaXRgXG5cbkFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkPyBBaCwgeWVzLCBgX19yZHNfcHV0X21yX2ZpbmFsYCBhcHBlYXJzIHRvIGhhdmUgYmVlbiB0b3VjaGVkIGFzIHdlbGwuIFRoYXQgbG9va3MgbGlrZSBhIHByb21pc2luZyBhZGRpdGlvbmFsIHRhcmdldCB0byByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzAyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjUwOjI3Ljc0MjA0NDYwOVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY4NjE3MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19yZHNfcHV0X21yX2ZpbmFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvbWVzc2FnZS5jPTEzMj1zdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbi0tXFxubmV0L3Jkcy9tZXNzYWdlLmMtMTc2LVxcdGlmIChybS1cXHUwMDNlcmRtYS5vcF9yZG1hX21yKVxcbm5ldC9yZHMvbWVzc2FnZS5jOjE3NzpcXHRcXHRrcmVmX3B1dChcXHUwMDI2cm0tXFx1MDAzZXJkbWEub3BfcmRtYV9tci1cXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xcbm5ldC9yZHMvbWVzc2FnZS5jLTE3OC1cXG4tLVxcbm5ldC9yZHMvbWVzc2FnZS5jLTE4MS1cXHRpZiAocm0tXFx1MDAzZWF0b21pYy5vcF9yZG1hX21yKVxcbm5ldC9yZHMvbWVzc2FnZS5jOjE4MjpcXHRcXHRrcmVmX3B1dChcXHUwMDI2cm0tXFx1MDAzZWF0b21pYy5vcF9yZG1hX21yLVxcdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XFxubmV0L3Jkcy9tZXNzYWdlLmMtMTgzLX1cXG4tLVxcbm5ldC9yZHMvcmRtYS5jPTk1PXN0YXRpYyB2b2lkIHJkc19kZXN0cm95X21yKHN0cnVjdCByZHNfbXIgKm1yKVxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtMTE0LVxcbm5ldC9yZHMvcmRtYS5jOjExNTp2b2lkIF9fcmRzX3B1dF9tcl9maW5hbChzdHJ1Y3Qga3JlZiAqa3JlZilcXG5uZXQvcmRzL3JkbWEuYy0xMTYte1xcbi0tXFxubmV0L3Jkcy9yZG1hLmM9MTI4PXZvaWQgcmRzX3JkbWFfZHJvcF9rZXlzKHN0cnVjdCByZHNfc29jayAqcnMpXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy0xNDItXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cnMtXFx1MDAzZXJzX3JkbWFfbG9jaywgZmxhZ3MpO1xcbm5ldC9yZHMvcmRtYS5jOjE0MzpcXHRcXHRrcmVmX3B1dChcXHUwMDI2bXItXFx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcXG5uZXQvcmRzL3JkbWEuYy0xNDQtXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnJzLVxcdTAwM2Vyc19yZG1hX2xvY2ssIGZsYWdzKTtcXG4tLVxcbm5ldC9yZHMvcmRtYS5jPTE3Mz1zdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy0yNDctXFx0LyogVGhlIE1SIGNhbiBvdXRsaXZlIGl0cyBzb2NrZXQ6IGEgc29ja2V0IHJlZmVyZW5jZSBpcyBoZWxkXFxubmV0L3Jkcy9yZG1hLmM6MjQ4OlxcdCAqIHVudGlsIHRoZSBmaW5hbCBrcmVmIGlzIGRyb3BwZWQgaW4gX19yZHNfcHV0X21yX2ZpbmFsKCkuXFxubmV0L3Jkcy9yZG1hLmMtMjQ5LVxcdCAqL1xcbi0tXFxubmV0L3Jkcy9yZG1hLmMtMzU1LVxcdGlmIChtcilcXG5uZXQvcmRzL3JkbWEuYzozNTY6XFx0XFx0a3JlZl9wdXQoXFx1MDAyNm1yLVxcdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XFxubmV0L3Jkcy9yZG1hLmMtMzU3LVxcdHJldHVybiByZXQ7XFxuLS1cXG5uZXQvcmRzL3JkbWEuYz00MDA9aW50IHJkc19mcmVlX21yKHN0cnVjdCByZHNfc29jayAqcnMsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy00MzYtXFxubmV0L3Jkcy9yZG1hLmM6NDM3OlxcdGtyZWZfcHV0KFxcdTAwMjZtci1cXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xcbm5ldC9yZHMvcmRtYS5jLTQzOC1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9yZHMvcmRtYS5jPTQ0Nj12b2lkIHJkc19yZG1hX3VudXNlKHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiByX2tleSwgaW50IGZvcmNlKVxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtNDgyLVxcdC8qIFJlbGVhc2UgdGhlIHJlZmVyZW5jZSBoZWxkIGFib3ZlLiAqL1xcbm5ldC9yZHMvcmRtYS5jOjQ4MzpcXHRrcmVmX3B1dChcXHUwMDI2bXItXFx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcXG5uZXQvcmRzL3JkbWEuYy00ODQtXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy00ODctXFx0aWYgKHpvdF9tZSlcXG5uZXQvcmRzL3JkbWEuYzo0ODg6XFx0XFx0a3JlZl9wdXQoXFx1MDAyNm1yLVxcdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XFxubmV0L3Jkcy9yZG1hLmMtNDg5LX1cXG4tLVxcbm5ldC9yZHMvcmRtYS5jPTQ5MT12b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtNDk1LVxcdGlmIChyby1cXHUwMDNlb3Bfb2RwX21yKSB7XFxubmV0L3Jkcy9yZG1hLmM6NDk2OlxcdFxcdGtyZWZfcHV0KFxcdTAwMjZyby1cXHUwMDNlb3Bfb2RwX21yLVxcdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XFxubmV0L3Jkcy9yZG1hLmMtNDk3LVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvcmRzL3JkbWEuYz02MTg9aW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtNzYzLVxcdFxcdFxcdC8qIEZyb20gaGVyZSBvbiB0aGUgTVIgaXMgdG9ybiBkb3duIHRocm91Z2hcXG5uZXQvcmRzL3JkbWEuYzo3NjQ6XFx0XFx0XFx0ICogX19yZHNfcHV0X21yX2ZpbmFsKCksIHdoaWNoIGRyb3BzIHRoaXMgcmVmZXJlbmNlLlxcbm5ldC9yZHMvcmRtYS5jLTc2NS1cXHRcXHRcXHQgKi9cXG4tLVxcbm5ldC9yZHMvcmRzLmg9OTc3PWludCByZHNfY21zZ19hdG9taWMoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4tLVxcbm5ldC9yZHMvcmRzLmgtOTc5LVxcbm5ldC9yZHMvcmRzLmg6OTgwOnZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKTtcXG5uZXQvcmRzL3Jkcy5oLTk4MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjE6NTA6MjcuODM4OTEzOTQzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwODE5MTI0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxNDc5MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjE6NTA6MzQuOTIwODI4NTkxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yZHMvcmRtYS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExMDpcXHRcXG4gMTExOlxcdFxcdGlmICh0cmFuc19wcml2YXRlKVxcbiAxMTI6XFx0XFx0XFx0bXItXFx1MDAzZXJfdHJhbnMtXFx1MDAzZWZyZWVfbXIodHJhbnNfcHJpdmF0ZSwgbXItXFx1MDAzZXJfaW52YWxpZGF0ZSk7XFxuIDExMzpcXHR9XFxuIDExNDpcXHRcXG4gMTE1OlxcdHZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKVxcbiAxMTY6XFx0e1xcbiAxMTc6XFx0XFx0c3RydWN0IHJkc19tciAqbXIgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJkc19tciwgcl9rcmVmKTtcXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0cmRzX2Rlc3Ryb3lfbXIobXIpO1xcbiAxMjA6XFx0XFx0c29ja19wdXQocmRzX3JzX3RvX3NrKG1yLVxcdTAwM2VyX3NvY2spKTtcXG4gMTIxOlxcdFxcdGtmcmVlKG1yKTtcXG4gMTIyOlxcdH1cXG4gMTIzOlxcdFxcbiAxMjQ6XFx0LypcXG4gMTI1OlxcdCAqIEJ5IHRoZSB0aW1lIHRoaXMgaXMgY2FsbGVkIHdlIGNhbid0IGhhdmUgYW55IG1vcmUgaW9jdGxzIGNhbGxlZCBvblxcbiAxMjY6XFx0ICogdGhlIHNvY2tldCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHJhY2luZyB3aXRoIG90aGVycy5cXG4gMTI3OlxcdCAqL1xcbiAxMjg6XFx0dm9pZCByZHNfcmRtYV9kcm9wX2tleXMoc3RydWN0IHJkc19zb2NrICpycylcXG4gMTI5OlxcdHtcXG4gMTMwOlxcdFxcdHN0cnVjdCByZHNfbXIgKm1yO1xcbiAxMzE6XFx0XFx0c3RydWN0IHJiX25vZGUgKm5vZGU7XFxuIDEzMjpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHQvKiBSZWxlYXNlIGFueSBNUnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc29ja2V0ICovXFxuIDEzNTpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cnMtXFx1MDAzZXJzX3JkbWFfbG9jaywgZmxhZ3MpO1xcbiAxMzY6XFx0XFx0d2hpbGUgKChub2RlID0gcmJfZmlyc3QoXFx1MDAyNnJzLVxcdTAwM2Vyc19yZG1hX2tleXMpKSkge1xcbiAxMzc6XFx0XFx0XFx0bXIgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgcmRzX21yLCByX3JiX25vZGUpO1xcbiAxMzg6XFx0XFx0XFx0aWYgKG1yLVxcdTAwM2VyX3RyYW5zID09IHJzLVxcdTAwM2Vyc190cmFuc3BvcnQpXFxuIDEzOTpcXHRcXHRcXHRcXHRtci1cXHUwMDNlcl9pbnZhbGlkYXRlID0gMDtcXG4gMTQwOlxcdFxcdFxcdHJiX2VyYXNlKFxcdTAwMjZtci1cXHUwMDNlcl9yYl9ub2RlLCBcXHUwMDI2cnMtXFx1MDAzZXJzX3JkbWFfa2V5cyk7XFxuIDE0MTpcXHRcXHRcXHRSQl9DTEVBUl9OT0RFKFxcdTAwMjZtci1cXHUwMDNlcl9yYl9ub2RlKTtcXG4gMTQyOlxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnJzLVxcdTAwM2Vyc19yZG1hX2xvY2ssIGZsYWdzKTtcXG4gMTQzOlxcdFxcdFxcdGtyZWZfcHV0KFxcdTAwMjZtci1cXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xcbiAxNDQ6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnJzLVxcdTAwM2Vyc19yZG1hX2xvY2ssIGZsYWdzKTtcXG4gMTQ1OlxcdFxcdH1cXG4gMTQ2OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnJzLVxcdTAwM2Vyc19yZG1hX2xvY2ssIGZsYWdzKTtcXG4gMTQ3OlxcdFxcbiAxNDg6XFx0XFx0aWYgKHJzLVxcdTAwM2Vyc190cmFuc3BvcnQgXFx1MDAyNlxcdTAwMjYgcnMtXFx1MDAzZXJzX3RyYW5zcG9ydC1cXHUwMDNlZmx1c2hfbXJzKVxcbiAxNDk6XFx0XFx0XFx0cnMtXFx1MDAzZXJzX3RyYW5zcG9ydC1cXHUwMDNlZmx1c2hfbXJzKCk7XFxuIDE1MDpcXHR9XFxuIDE1MTpcXHRcXG4gMTUyOlxcdC8qXFxuIDE1MzpcXHQgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcGluIHVzZXIgcGFnZXMuXFxuIDE1NDpcXHQgKi9cXG4gMTU1OlxcdHN0YXRpYyBpbnQgcmRzX3Bpbl9wYWdlcyh1bnNpZ25lZCBsb25nIHVzZXJfYWRkciwgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbiAxNTY6XFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlcywgaW50IHdyaXRlKVxcbiAxNTc6XFx0e1xcbiAxNTg6XFx0XFx0dW5zaWduZWQgaW50IGd1cF9mbGFncyA9IEZPTExfTE9OR1RFUk07XFxuIDE1OTpcXHRcXHRpbnQgcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMTo1MDozNC45MjA5MTY5NjFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTUzNTg5MTE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBSRFMvUkRNQSoqXG5cbk9rYXksIGxldCdzIG5haWwgZG93biB0aGlzIGZ1enppbmcgdGFyZ2V0LiBgX19yZHNfcHV0X21yX2ZpbmFsYCBsb29rcyBsaWtlIGEga2V5IHBvaW50LCBzaW5jZSBpdCdzIHdoZXJlIHRoZSBzb2NrZXQgcmVmZXJlbmNlIGlzIGRyb3BwZWQuIFRoaXMgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0LlxuXG5UaGVyZWZvcmUsIHRoZSBtYWluIHN5bWJvbHMgSSB3YW50IHRvIGZvY3VzIHRoZSBmdXp6ZXIgb24gYXJlOiBgX19yZHNfcHV0X21yX2ZpbmFsYCwgbmF0dXJhbGx5LCBidXQgYWxzbyBgX19yZHNfcmRtYV9tYXBgLCBgcmRzX3JkbWFfZnJlZV9vcGAsIGByZHNfYXRvbWljX2ZyZWVfb3BgLCBhbmQgYHJkc19jbXNnX3JkbWFfYXJnc2AuIFRob3NlIGFsbCBzZWVtIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIFJETUEgcGF0aCBhbmQgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZS5cblxuSG1tLCBgcmRzX3NlbmRfeG1pdGAuLi4gdGhhdCdzIGEgaG90IGZ1bmN0aW9uLCBhbmQgSSB3YXMgb3JpZ2luYWxseSBoZXNpdGFudCB0byBhZGQgaXQgdG8gdGhlIGZvY3VzIGxpc3QgYmVjYXVzZSBJIGRvbid0IHdhbnQgdG8gc2tldyB0aGUgdGVzdCBkaXN0cmlidXRpb25zLiBIb3dldmVyLCB0aGUgcGF0Y2ggKnNwZWNpZmljYWxseSogbW9kaWZpZXMgYHJkc19zZW5kX3htaXRgIHRvIGZpeCBhIHJlZmNvdW50IGxlYWsgd2hlbiBgcm0tXHUwMDNlbV9mbGFnc2AgaGFzIGBSRFNfTVNHX09OX0NPTk5gIGNsZWFyZWQuIElmIEkgZG9uJ3QgaW5jbHVkZSBpdCwgdGhlIGZ1enplciBtaWdodCBtaXNzIHRoYXQgcGFydCBvZiB0aGUgc2VuZCBwYXRoIGVudGlyZWx5LiBUaGUgZW50cnkgcG9pbnQgaXMgYHJkc19zZW5kbXNnYCwgd2hpY2ggbWVhbnMgdGhlIGZ1enplciBzaG91bGQgc3BlbmQgc29tZSB0aW1lIGluIHRoZSBzZW5kIHBhdGguIFRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIGluY2x1ZGUgYHJkc19zZW5kX3htaXRgIGJlY2F1c2UgdGhlIGZpeCBpcyBleHBsaWNpdCBpbiB0aGUgcGF0Y2guXG5cbk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIG15IGNvbmZpZ3VyYXRpb24gYXNzdW1wdGlvbnMuIEknbSBwcmV0dHkgc3VyZSBgUkRTYCBhbmQgYFJEU19SRE1BYCBhcmUgdGhlIG1haW4gb25lcywgYnV0IGxldCBtZSBhZGQgYFJEU19UQ1BgIGp1c3QgdG8gbWFrZSBzdXJlIEkgY292ZXIgZXZlcnl0aGluZy5cblxuQWxyaWdodCwgaGVyZSdzIG15IHN1bW1hcnk6XG5cbldvcnRoRnV6emluZzogVHJ1ZVxuRm9jdXNTeW1ib2xzOlxuLSBgX19yZHNfcHV0X21yX2ZpbmFsYFxuLSBgX19yZHNfcmRtYV9tYXBgXG4tIGByZHNfcmRtYV9mcmVlX29wYFxuLSBgcmRzX2F0b21pY19mcmVlX29wYFxuLSBgcmRzX2Ntc2dfcmRtYV9hcmdzYFxuLSBgcmRzX3NlbmRfeG1pdGBcbkVuYWJsZUNvbmZpZ3M6XG4tIGBSRFNgXG4tIGBSRFNfUkRNQWBcbi0gYFJEU19UQ1BgXG5cbk15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgcGF0Y2ggZnVuZGFtZW50YWxseSBmaXhlcyBhIHNvY2tldCByZWZjb3VudCBsZWFrIHdpdGhpbiBSRFMgUkRNQSBvcGVyYXRpb25zLiBJdCBkb2VzIHRoaXMgYnkgY2FyZWZ1bGx5IG1hbmFnaW5nIHNvY2tldCByZWZlcmVuY2VzIGluIGBfX3Jkc19yZG1hX21hcGAgYW5kIGByZHNfY21zZ19yZG1hX2FyZ3NgLCBhbmQgcmVsZWFzaW5nIHRoZW0gaW4gYF9fcmRzX3B1dF9tcl9maW5hbGAuIEFkZGl0aW9uYWxseSwgYHJkc19yZG1hX2ZyZWVfb3BgIGFuZCBgcmRzX2F0b21pY19mcmVlX29wYCBhcmUgY2hhbmdlZCB0byB1c2Ugbm9uLXNsZWVwaW5nIHBhZ2UgdW5waW5uaW5nIGZ1bmN0aW9ucyBzaW5jZSB0aGV5IGNvdWxkIGJlIGNhbGxlZCBmcm9tIGEgdGFza2xldCBjb250ZXh0LiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50LiBGaW5hbGx5LCBpdCBjb3JyZWN0cyBhIG1lc3NhZ2UgcmVmY291bnQgbGVhayBpbiBgcmRzX3NlbmRfeG1pdGAuIFRoZXNlIGFyZSBhbGwgY3J1Y2lhbCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIFJEUyBhbmQgUkRNQSBsb2dpYyBpdHNlbGYsIG1ha2luZyB0aGVtIGlkZWFsIGZ1enppbmcgdGFyZ2V0cy5cblxuT2theSwgSSdtIGNvbmZpZGVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDMzLCJPdXRwdXRUb2tlbnMiOjI0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIxOjUwOjQ0LjQ1NjgxMDUwNVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5OTMxNDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRFNcIixcbiAgICBcIlJEU19SRE1BXCIsXG4gICAgXCJSRFNfVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19yZHNfcHV0X21yX2ZpbmFsXCIsXG4gICAgXCJfX3Jkc19yZG1hX21hcFwiLFxuICAgIFwicmRzX3JkbWFfZnJlZV9vcFwiLFxuICAgIFwicmRzX2F0b21pY19mcmVlX29wXCIsXG4gICAgXCJyZHNfY21zZ19yZG1hX2FyZ3NcIixcbiAgICBcInJkc19zZW5kX3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHNvY2tldCByZWZjb3VudCBsZWFrIGluIFJEUyBSRE1BIG9wZXJhdGlvbnMgYnkgaG9sZGluZyBhIHNvY2tldCByZWZlcmVuY2UgaW4gYF9fcmRzX3JkbWFfbWFwYCBhbmQgYHJkc19jbXNnX3JkbWFfYXJnc2AgYW5kIHJlbGVhc2luZyBpdCBpbiBgX19yZHNfcHV0X21yX2ZpbmFsYC4gSXQgYWxzbyBtb2RpZmllcyBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgIHRvIHVzZSBub24tc2xlZXBpbmcgcGFnZSB1bnBpbm5pbmcgZnVuY3Rpb25zIHNpbmNlIHRoZXkgY2FuIGJlIGNhbGxlZCBmcm9tIHRhc2tsZXQgY29udGV4dC4gRmluYWxseSwgaXQgZml4ZXMgYSBtZXNzYWdlIHJlZmNvdW50IGxlYWsgaW4gYHJkc19zZW5kX3htaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIFJEUyBhbmQgUkRNQSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfUkRNQVwiLFxuICAgIFwiUkRTX1RDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fcmRzX3B1dF9tcl9maW5hbFwiLFxuICAgIFwiX19yZHNfcmRtYV9tYXBcIixcbiAgICBcInJkc19yZG1hX2ZyZWVfb3BcIixcbiAgICBcInJkc19hdG9taWNfZnJlZV9vcFwiLFxuICAgIFwicmRzX2Ntc2dfcmRtYV9hcmdzXCIsXG4gICAgXCJyZHNfc2VuZF94bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzb2NrZXQgcmVmY291bnQgbGVhayBpbiBSRFMgUkRNQSBvcGVyYXRpb25zIGJ5IGhvbGRpbmcgYSBzb2NrZXQgcmVmZXJlbmNlIGluIGBfX3Jkc19yZG1hX21hcGAgYW5kIGByZHNfY21zZ19yZG1hX2FyZ3NgIGFuZCByZWxlYXNpbmcgaXQgaW4gYF9fcmRzX3B1dF9tcl9maW5hbGAuIEl0IGFsc28gbW9kaWZpZXMgYHJkc19yZG1hX2ZyZWVfb3BgIGFuZCBgcmRzX2F0b21pY19mcmVlX29wYCB0byB1c2Ugbm9uLXNsZWVwaW5nIHBhZ2UgdW5waW5uaW5nIGZ1bmN0aW9ucyBzaW5jZSB0aGV5IGNhbiBiZSBjYWxsZWQgZnJvbSB0YXNrbGV0IGNvbnRleHQuIEZpbmFsbHksIGl0IGZpeGVzIGEgbWVzc2FnZSByZWZjb3VudCBsZWFrIGluIGByZHNfc2VuZF94bWl0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBSRFMgYW5kIFJETUEgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflownhljk[1] Phase: Succeeded StartedAt: 2026-07-11 21:50:55 +0000 UTC FinishedAt: 2026-07-11 21:50:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhljk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-11 21:50:55 +0000 UTC FinishedAt: 2026-07-11 21:50:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhljk[2] Phase: Succeeded StartedAt: 2026-07-11 21:50:55 +0000 UTC FinishedAt: 2026-07-12 02:51:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 21:50:55 +0000 UTC FinishedAt: 2026-07-12 02:51:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 21:50:55 +0000 UTC FinishedAt: 2026-07-11 21:51:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 21:50:55 +0000 UTC FinishedAt: 2026-07-11 21:51:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"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-workflownhljk/series-workflownhljk-convert-artifact-16066711/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 21:51:06 +0000 UTC FinishedAt: 2026-07-11 22:46:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 21:51:06 +0000 UTC FinishedAt: 2026-07-11 22:46:51 +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:*6c28b1c0-fa36-406e-9621-67cc65d88fca,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-workflownhljk/series-workflownhljk-convert-artifact-16066711/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": "e4fdab95-de3e-4e93-bd20-43b97b29ec82", "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-workflownhljk/series-workflownhljk-build-action-3374835181/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 21:51:06 +0000 UTC FinishedAt: 2026-07-11 22:46:41 +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:*6c28b1c0-fa36-406e-9621-67cc65d88fca,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-workflownhljk/series-workflownhljk-convert-artifact-16066711/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": "e4fdab95-de3e-4e93-bd20-43b97b29ec82", "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-workflownhljk/series-workflownhljk-build-action-3374835181/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 22:46:51 +0000 UTC FinishedAt: 2026-07-11 22:46:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 22:46:51 +0000 UTC FinishedAt: 2026-07-11 22:46:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 22:46:51 +0000 UTC FinishedAt: 2026-07-11 22:47:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 22:46:51 +0000 UTC FinishedAt: 2026-07-11 22:47:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-workflownhljk/series-workflownhljk-convert-artifact-644101318/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 22:47:11 +0000 UTC FinishedAt: 2026-07-11 22:49:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 22:47:11 +0000 UTC FinishedAt: 2026-07-11 22:49:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e4fdab95-de3e-4e93-bd20-43b97b29ec82,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-workflownhljk/series-workflownhljk-build-action-3374835181/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-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 22:49:24 +0000 UTC FinishedAt: 2026-07-11 22:49:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 22:49:24 +0000 UTC FinishedAt: 2026-07-11 22:49:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 22:49:24 +0000 UTC FinishedAt: 2026-07-11 23:46:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 22:49:24 +0000 UTC FinishedAt: 2026-07-11 23:46:32 +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:*6c28b1c0-fa36-406e-9621-67cc65d88fca,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-workflownhljk/series-workflownhljk-convert-artifact-644101318/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": "32a4b05b-4240-45da-a11f-6376f166b069", "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-workflownhljk/series-workflownhljk-build-action-1506850826/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 22:49:24 +0000 UTC FinishedAt: 2026-07-11 23:46:03 +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:*6c28b1c0-fa36-406e-9621-67cc65d88fca,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-workflownhljk/series-workflownhljk-convert-artifact-644101318/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": "32a4b05b-4240-45da-a11f-6376f166b069", "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-workflownhljk/series-workflownhljk-build-action-1506850826/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 23:46:32 +0000 UTC FinishedAt: 2026-07-11 23:46:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 23:46:32 +0000 UTC FinishedAt: 2026-07-11 23:46:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 23:46:32 +0000 UTC FinishedAt: 2026-07-11 23:48:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 23:46:32 +0000 UTC FinishedAt: 2026-07-11 23:48:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*32a4b05b-4240-45da-a11f-6376f166b069,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-workflownhljk/series-workflownhljk-build-action-1506850826/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-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 23:48:47 +0000 UTC FinishedAt: 2026-07-12 02:51:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 23:48:47 +0000 UTC FinishedAt: 2026-07-12 02:51:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"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:*e4fdab95-de3e-4e93-bd20-43b97b29ec82,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*32a4b05b-4240-45da-a11f-6376f166b069,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-workflownhljk/series-workflownhljk-build-action-3374835181/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-workflownhljk/series-workflownhljk-build-action-1506850826/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 23:48:47 +0000 UTC FinishedAt: 2026-07-11 23:48:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 23:48:47 +0000 UTC FinishedAt: 2026-07-11 23:48:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"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-workflownhljk/series-workflownhljk-convert-artifact-4141707915/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 23:48:47 +0000 UTC FinishedAt: 2026-07-11 23:48:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 23:48:47 +0000 UTC FinishedAt: 2026-07-11 23:48:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 23:48:47 +0000 UTC FinishedAt: 2026-07-11 23:48:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 23:48:57 +0000 UTC FinishedAt: 2026-07-12 02:51:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhljk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_put_mr_final","__rds_rdma_map","rds_rdma_free_op","rds_atomic_free_op","rds_cmsg_rdma_args","rds_send_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","RDS_TCP"],"series_id":"b9f7dd3f-1f7c-4e11-aa61-89b7f9dbc632","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-07-11 23:48:57 +0000 UTC FinishedAt: 2026-07-12 02:51:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e4fdab95-de3e-4e93-bd20-43b97b29ec82,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*32a4b05b-4240-45da-a11f-6376f166b069,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-workflownhljk/series-workflownhljk-build-action-3374835181/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-workflownhljk/series-workflownhljk-build-action-1506850826/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-workflownhljk/series-workflownhljk-convert-artifact-4141707915/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,}