Name: series-workflowbwkwv Phase: Succeeded StartedAt: 2026-08-13 00:22:12 +0000 UTC FinishedAt: 2026-08-13 04:21:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkwv[0] Phase: Succeeded StartedAt: 2026-08-13 00:22:12 +0000 UTC FinishedAt: 2026-08-13 00:41:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkwv[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 00:22:12 +0000 UTC FinishedAt: 2026-08-13 00:41:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "7b53449540502cb21b32bca62a6258e22cd97bbe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NETFILTER_INGRESS", "NF_CONNTRACK", "NF_TABLES", "NFT_FLOW_OFFLOAD", "NET_ACT_CT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "7b53449540502cb21b32bca62a6258e22cd97bbe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NETFILTER_INGRESS", "NF_CONNTRACK", "NF_TABLES", "NFT_FLOW_OFFLOAD", "NET_ACT_CT" ], "series_id": "5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "flow_offload_add" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0lOR1JFU1MmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORlRfRkxPV19PRkZMT0FEJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmbG93X29mZmxvYWRfYWRkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgKHJhY2UgY29uZGl0aW9uKSBkdXJpbmcgdGhlIGFkZGl0aW9uIG9mIGEgZmxvdyB0byB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUuIEJ5IGludHJvZHVjaW5nIHRoZSBgTkZfRkxPV19DT05GSVJNRURgIGZsYWcgYW5kIGNoYW5naW5nIHRoZSByaGFzaHRhYmxlIGluc2VydGlvbiBvcmRlciwgaXQgcHJldmVudHMgY29uY3VycmVudCBsb29rdXBzIG9yIGdhcmJhZ2UgY29sbGVjdGlvbiBmcm9tIGFjY2Vzc2luZyBhIGZsb3cgYmVmb3JlIGl0IGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBhZGRlZC4gQ29uY3VycmVuY3kgYnVncyBvZiB0aGlzIG5hdHVyZSB0eXBpY2FsbHkgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSAoaW5mby1sZWFrcykgb3IgY29tcGxleCB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHNwZWNpZmljYWxseSByZXF1aXJlIEtNU0FOLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgY29yZSBieSBpbnRyb2R1Y2luZyBhIG5ldyBORl9GTE9XX0NPTkZJUk1FRCBmbGFnLiBJdCBtb2RpZmllcyBmbG93X29mZmxvYWRfYWRkIHRvIHNldCB0aGlzIGZsYWcgYWZ0ZXIgaW5zZXJ0aW5nIGJvdGggZGlyZWN0aW9ucyBvZiB0aGUgZmxvdyBpbnRvIHRoZSByaGFzaHRhYmxlLCBhbmQgdXBkYXRlcyBsb29rdXAgYW5kIGdhcmJhZ2UgY29sbGVjdGlvbiBsb2dpYyB0byBpZ25vcmUgdW5jb25maXJtZWQgZmxvd3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZDM1MzlhYmRmNTBhMThlMjFkOWMwMzQzZDAzM2VjMjY5ZGNiMDlkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDA6Mzk6NDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbmluZGV4IGNlNDE0MTE4OTYyZjUuLjYxOGQyNmU0OWZkZjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG5AQCAtMTg5LDYgJiM0MzsxODksNyBAQCBlbnVtIG5mX2Zsb3dfZmxhZ3Mge1xuIFx0TkZfRkxPV19IV19QRU5ESU5HLFxuIFx0TkZfRkxPV19IV19CSURJUkVDVElPTkFMLFxuIFx0TkZfRkxPV19IV19FU1RBQkxJU0hFRCxcbiYjNDM7XHRORl9GTE9XX0NPTkZJUk1FRCxcbiB9O1xuIFxuIGVudW0gZmxvd19vZmZsb2FkX3R5cGUge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG5pbmRleCA4YjExNjVmMmI1YTQ5Li4xZTJjNGExZGI5YTcwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuQEAgLTMzMiwxOCAmIzQzOzMzMiwxNyBAQCBpbnQgZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxuIFx0Zmxvdy1cdTAwM2V0aW1lb3V0ID0gbmZfZmxvd3RhYmxlX3RpbWVfc3RhbXAgJiM0MzsgZmxvd19vZmZsb2FkX2dldF90aW1lb3V0KGZsb3cpO1xuIFxuIFx0ZXJyID0gcmhhc2h0YWJsZV9pbnNlcnRfZmFzdChcdTAwMjZmbG93X3RhYmxlLVx1MDAzZXJoYXNodGFibGUsXG4tXHRcdFx0XHQgICAgIFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfUkVQTFldLm5vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX09SSUdJTkFMXS5ub2RlLFxuIFx0XHRcdFx0ICAgICBuZl9mbG93X29mZmxvYWRfcmhhc2hfcGFyYW1zKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHQvKiBHQyBvbmx5IGl0ZXJhdGVzIG9yaWdpbmFsLWRpcmVjdGlvbiBlbnRyaWVzOyBwdWJsaXNoIG9yaWdpbmFsIGxhc3QuICovXG4gXHRlcnIgPSByaGFzaHRhYmxlX2luc2VydF9mYXN0KFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlcmhhc2h0YWJsZSxcbi1cdFx0XHRcdCAgICAgXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0ubm9kZSxcbiYjNDM7XHRcdFx0XHQgICAgIFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfUkVQTFldLm5vZGUsXG4gXHRcdFx0XHQgICAgIG5mX2Zsb3dfb2ZmbG9hZF9yaGFzaF9wYXJhbXMpO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlcmhhc2h0YWJsZSxcbi1cdFx0XHRcdCAgICAgICBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX1JFUExZXS5ub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgICBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX09SSUdJTkFMXS5ub2RlLFxuIFx0XHRcdFx0ICAgICAgIG5mX2Zsb3dfb2ZmbG9hZF9yaGFzaF9wYXJhbXMpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuQEAgLTM1Myw2ICYjNDM7MzUyLDggQEAgaW50IGZsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbiBcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93X3RhYmxlKSlcbiBcdFx0bmZfZmxvd19vZmZsb2FkX2FkZChmbG93X3RhYmxlLCBmbG93KTtcbiBcbiYjNDM7XHRzZXRfYml0KE5GX0ZMT1dfQ09ORklSTUVELCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2FkZCk7XG5AQCAtNDEyLDcgJiM0Mzs0MTMsOCBAQCBmbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4gXG4gXHRkaXIgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyO1xuIFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbi1cdGlmICh0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRpZiAodW5saWtlbHkoIXRlc3RfYml0KE5GX0ZMT1dfQ09ORklSTUVELCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSkgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0aWYgKHVubGlrZWx5KG5mX2N0X2lzX2R5aW5nKGZsb3ctXHUwMDNlY3QpKSlcbkBAIC01NjgsMTUgJiM0Mzs1NzAsMTkgQEAgc3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9leHRlbmRfY3RfdGltZW91dChzdHJ1Y3QgbmZfY29ubiAqY3QpXG4gc3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKVxuIHtcbi1cdGJvb2wgdGVhcmRvd24gPSB0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRib29sIHRlYXJkb3duO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfYml0KE5GX0ZMT1dfQ09ORklSTUVELCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHJldHVybjtcbiBcbiBcdGlmIChuZl9mbG93X2hhc19leHBpcmVkKGZsb3cpIHx8XG4gXHQgICAgbmZfY3RfaXNfZHlpbmcoZmxvdy1cdTAwM2VjdCkgfHxcbiBcdCAgICBuZl9mbG93X2N1c3RvbV9nYyhmbG93X3RhYmxlLCBmbG93KSkge1xuIFx0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4gXHRcdHRlYXJkb3duID0gdHJ1ZTtcbi1cdH0gZWxzZSBpZiAoIXRlYXJkb3duKSB7XG4mIzQzO1x0fSBlbHNlIGlmICghdGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncykpIHtcbiBcdFx0bmZfZmxvd190YWJsZV9leHRlbmRfY3RfdGltZW91dChmbG93LVx1MDAzZWN0KTtcbiYjNDM7XHRcdHRlYXJkb3duID0gZmFsc2U7XG4gXHR9XG4gXG4gXHRpZiAodGVhcmRvd24pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMDozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfSU5HUkVTUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9DVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Zsb3dfb2ZmbG9hZF9hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgY29yZSBieSBpbnRyb2R1Y2luZyBhIG5ldyBORl9GTE9XX0NPTkZJUk1FRCBmbGFnLiBJdCBtb2RpZmllcyBmbG93X29mZmxvYWRfYWRkIHRvIHNldCB0aGlzIGZsYWcgYWZ0ZXIgaW5zZXJ0aW5nIGJvdGggZGlyZWN0aW9ucyBvZiB0aGUgZmxvdyBpbnRvIHRoZSByaGFzaHRhYmxlLCBhbmQgdXBkYXRlcyBsb29rdXAgYW5kIGdhcmJhZ2UgY29sbGVjdGlvbiBsb2dpYyB0byBpZ25vcmUgdW5jb25maXJtZWQgZmxvd3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZDM1MzlhYmRmNTBhMThlMjFkOWMwMzQzZDAzM2VjMjY5ZGNiMDlkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMDA6Mzk6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaAppbmRleCBjZTQxNDExODk2MmY1Li42MThkMjZlNDlmZGY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKQEAgLTE4OSw2ICYjNDM7MTg5LDcgQEAgZW51bSBuZl9mbG93X2ZsYWdzIHsKIAlORl9GTE9XX0hXX1BFTkRJTkcsCiAJTkZfRkxPV19IV19CSURJUkVDVElPTkFMLAogCU5GX0ZMT1dfSFdfRVNUQUJMSVNIRUQsCiYjNDM7CU5GX0ZMT1dfQ09ORklSTUVELAogfTsKIAogZW51bSBmbG93X29mZmxvYWRfdHlwZSB7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYwppbmRleCA4YjExNjVmMmI1YTQ5Li4xZTJjNGExZGI5YTcwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKQEAgLTMzMiwxOCAmIzQzOzMzMiwxNyBAQCBpbnQgZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KQogCWZsb3ctJmd0O3RpbWVvdXQgPSBuZl9mbG93dGFibGVfdGltZV9zdGFtcCAmIzQzOyBmbG93X29mZmxvYWRfZ2V0X3RpbWVvdXQoZmxvdyk7CiAKIAllcnIgPSByaGFzaHRhYmxlX2luc2VydF9mYXN0KCZhbXA7Zmxvd190YWJsZS0mZ3Q7cmhhc2h0YWJsZSwKLQkJCQkgICAgICZhbXA7Zmxvdy0mZ3Q7dHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfUkVQTFldLm5vZGUsCiYjNDM7CQkJCSAgICAgJmFtcDtmbG93LSZndDt0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0ubm9kZSwKIAkJCQkgICAgIG5mX2Zsb3dfb2ZmbG9hZF9yaGFzaF9wYXJhbXMpOwogCWlmIChlcnIgJmx0OyAwKQogCQlyZXR1cm4gZXJyOwogCi0JLyogR0Mgb25seSBpdGVyYXRlcyBvcmlnaW5hbC1kaXJlY3Rpb24gZW50cmllczsgcHVibGlzaCBvcmlnaW5hbCBsYXN0LiAqLwogCWVyciA9IHJoYXNodGFibGVfaW5zZXJ0X2Zhc3QoJmFtcDtmbG93X3RhYmxlLSZndDtyaGFzaHRhYmxlLAotCQkJCSAgICAgJmFtcDtmbG93LSZndDt0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0ubm9kZSwKJiM0MzsJCQkJICAgICAmYW1wO2Zsb3ctJmd0O3R1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX1JFUExZXS5ub2RlLAogCQkJCSAgICAgbmZfZmxvd19vZmZsb2FkX3JoYXNoX3BhcmFtcyk7CiAJaWYgKGVyciAmbHQ7IDApIHsKIAkJcmhhc2h0YWJsZV9yZW1vdmVfZmFzdCgmYW1wO2Zsb3dfdGFibGUtJmd0O3JoYXNodGFibGUsCi0JCQkJICAgICAgICZhbXA7Zmxvdy0mZ3Q7dHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfUkVQTFldLm5vZGUsCiYjNDM7CQkJCSAgICAgICAmYW1wO2Zsb3ctJmd0O3R1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX09SSUdJTkFMXS5ub2RlLAogCQkJCSAgICAgICBuZl9mbG93X29mZmxvYWRfcmhhc2hfcGFyYW1zKTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC0zNTMsNiAmIzQzOzM1Miw4IEBAIGludCBmbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpCiAJaWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3dfdGFibGUpKQogCQluZl9mbG93X29mZmxvYWRfYWRkKGZsb3dfdGFibGUsIGZsb3cpOwogCiYjNDM7CXNldF9iaXQoTkZfRkxPV19DT05GSVJNRUQsICZhbXA7Zmxvdy0mZ3Q7ZmxhZ3MpOwomIzQzOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2FkZCk7CkBAIC00MTIsNyAmIzQzOzQxMyw4IEBAIGZsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwKIAogCWRpciA9IHR1cGxlaGFzaC0mZ3Q7dHVwbGUuZGlyOwogCWZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7Ci0JaWYgKHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sICZhbXA7Zmxvdy0mZ3Q7ZmxhZ3MpKQomIzQzOwlpZiAodW5saWtlbHkoIXRlc3RfYml0KE5GX0ZMT1dfQ09ORklSTUVELCAmYW1wO2Zsb3ctJmd0O2ZsYWdzKSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sICZhbXA7Zmxvdy0mZ3Q7ZmxhZ3MpKQogCQlyZXR1cm4gTlVMTDsKIAogCWlmICh1bmxpa2VseShuZl9jdF9pc19keWluZyhmbG93LSZndDtjdCkpKQpAQCAtNTY4LDE1ICYjNDM7NTcwLDE5IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZXh0ZW5kX2N0X3RpbWVvdXQoc3RydWN0IG5mX2Nvbm4gKmN0KQogc3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwKIAkJCQkgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgdm9pZCAqZGF0YSkKIHsKLQlib29sIHRlYXJkb3duID0gdGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgJmFtcDtmbG93LSZndDtmbGFncyk7CiYjNDM7CWJvb2wgdGVhcmRvd247CiYjNDM7CiYjNDM7CWlmICghdGVzdF9iaXQoTkZfRkxPV19DT05GSVJNRUQsICZhbXA7Zmxvdy0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwogCiAJaWYgKG5mX2Zsb3dfaGFzX2V4cGlyZWQoZmxvdykgfHwKIAkgICAgbmZfY3RfaXNfZHlpbmcoZmxvdy0mZ3Q7Y3QpIHx8CiAJICAgIG5mX2Zsb3dfY3VzdG9tX2djKGZsb3dfdGFibGUsIGZsb3cpKSB7CiAJCWZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTsKIAkJdGVhcmRvd24gPSB0cnVlOwotCX0gZWxzZSBpZiAoIXRlYXJkb3duKSB7CiYjNDM7CX0gZWxzZSBpZiAoIXRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sICZhbXA7Zmxvdy0mZ3Q7ZmxhZ3MpKSB7CiAJCW5mX2Zsb3dfdGFibGVfZXh0ZW5kX2N0X3RpbWVvdXQoZmxvdy0mZ3Q7Y3QpOwomIzQzOwkJdGVhcmRvd24gPSBmYWxzZTsKIAl9CiAKIAlpZiAodGVhcmRvd24pIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAzOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIE5ldGZpbHRlciBGbG93IFRhYmxlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AuIEl0JiMzOTtzIGludHJvZHVjaW5nIGEgbmV3IGBORl9GTE9XX0NPTkZJUk1FRGAgZmxhZyB0byBgbmZfZmxvd19mbGFnc2AuIEltbWVkaWF0ZWx5LCBJIHNlZSB0aGlzIGlzIGFib3V0IHN0YXRlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBmbG93IHRhYmxlLCBwcm9iYWJseSB0byBpbXByb3ZlIGNvbmN1cnJlbmN5IG9yIGNvcnJlY3RuZXNzLgoKU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggc2VlbXMgdG8gbW9kaWZ5IGhvdyBuZXcgZmxvd3MgYXJlIGFkZGVkIChgZmxvd19vZmZsb2FkX2FkZGApLiBJdCYjMzk7cyBub3cgaW5zZXJ0aW5nIHRoZSBvcmlnaW5hbCBkaXJlY3Rpb24sIHRoZW4gdGhlIHJlcGx5LCBhbmQgdGhlbiAqZmluYWxseSogc2V0dGluZyB0aGlzIGBORl9GTE9XX0NPTkZJUk1FRGAgZmxhZy4gVGhpcyBzY3JlYW1zICYjMzQ7YXRvbWljaXR5JiMzNDsgdG8gbWUg4oCTIHRoZXkmIzM5O3JlIGVuc3VyaW5nIHRoZSBmbG93IGlzbiYjMzk7dCBjb25zaWRlcmVkICYjMzQ7cmVhZHkmIzM0OyB1bnRpbCBhbGwgZXNzZW50aWFsIHBhcnRzIGFyZSBpbiBwbGFjZS4KClRoZSBtb2RpZmljYXRpb25zIHRvIGBmbG93X29mZmxvYWRfbG9va3VwYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYCBhcmUgZnVydGhlciBpbmRpY2F0b3JzLiBUaGV5JiMzOTtyZSBib3RoIGNoZWNraW5nIGZvciBgTkZfRkxPV19DT05GSVJNRURgLiAgSWYgaXQgaXNuJiMzOTt0IHNldCwgYGZsb3dfb2ZmbG9hZF9sb29rdXBgIHJldHVybnMgTlVMTCAoZWZmZWN0aXZlbHkgaGlkaW5nIHRoZSBpbmNvbXBsZXRlIGVudHJ5KSBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYCBiYWlscyBlYXJseS4gIFRoaXMgaXMgYSBjbGV2ZXIgd2F5IHRvIHByZXZlbnQgcHJlbWF0dXJlIGxvb2t1cHMgb3IgZ2FyYmFnZSBjb2xsZWN0aW9uIG9mIGZsb3dzIHRoYXQgYXJlbiYjMzk7dCBmdWxseSBwb3B1bGF0ZWQuCgpJdCYjMzk7cyBjbGVhciB0aGF0IHRoZSBnb2FsIGhlcmUgaXMgdG8gZml4IGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiAgVGhlIGNvbW1lbnQgbWVudGlvbnMgdGhhdCB0aGUgcmFjZSBpbnZvbHZlcyBhIGZsb3cgYmVpbmcgbG9va2VkIHVwIG9yIEdDJiMzOTtkIGJlZm9yZSBpdCYjMzk7cyBmdWxseSBhZGRlZC4gVGhpcyBpcyBhIGNvbW1vbiBhbmQgbmFzdHkgcHJvYmxlbSBpbiBjb25jdXJyZW50IHN5c3RlbXMsIGFuZCB0aGlzIGFwcHJvYWNoIGlzIGEgc29saWQgd2F5IHRvIGFkZHJlc3MgaXQuICBJdCBsb29rcyBsaWtlIHRoaXMgcHJldmVudHMgb3BlcmF0aW9ucyBvbiBhbiBpbmNvbXBsZXRlIGZsb3cuCgpOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBpbnZvbHZlZC4gIEkga25vdyB0aGF0IGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jYCBpcyBnb2luZyB0byBiZSBjb21waWxlZCBpZiBgQ09ORklHX05GX0ZMT1dfVEFCTEVgIGlzIGRlZmluZWQuIExldCYjMzk7cyBjb25maXJtIHRoYXQgYnkgY2hlY2tpbmcgYG5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfdGFibGVfY29yZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE0Mj1vYmotJChDT05GSUdfTkZfRkxPV19UQUJMRSlcdCYjNDM7PSBuZl9mbG93X3RhYmxlLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQzOm5mX2Zsb3dfdGFibGUtb2Jqc1x0XHQ6PSBuZl9mbG93X3RhYmxlX2NvcmUubyBuZl9mbG93X3RhYmxlX2lwLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ0LVx0XHRcdFx0ICAgbmZfZmxvd190YWJsZV9wYXRoLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODM0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIEZsb3cgVGFibGUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgQ09ORklHX05GX0ZMT1dfVEFCTEVgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIG9yIG92ZXJsb29raW5nIHBvdGVudGlhbCBjb25mbGljdHMuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIGhpbmdlIG9uIHRoaXMgb25lLiBVbmRlcnN0YW5kaW5nIHRoZSBwcmVyZXF1aXNpdGVzIHdpbGwgcGFpbnQgdGhlIGZ1bGwgcGljdHVyZSBvZiBob3cgdGhpcyBvcHRpb24gZml0cyBpbnRvIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0ZMT1dfVEFCTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzIxOmNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cdGJvb2wgXCYjMzQ7U3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjA0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBORl9GTE9XX1RBQkxFIEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYE5GX0ZMT1dfVEFCTEVgIEtjb25maWcuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBmZWF0dXJlLiBXaGF0IGFyZSB0aGUga2V5IGJ1aWxkLXRpbWUgZGVjaXNpb25zIHdlJiMzOTtyZSBwcmVzZW50ZWQgd2l0aD8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBmZWF0dXJlcyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gZXZlbiAqYmUqIGEgdmlhYmxlIG9wdGlvbj8gQXJlIHRoZXJlIHNwZWNpZmljIG5ldHdvcmtpbmcgc3RhY2sgcHJlcmVxdWlzaXRlcywgb3IgaXMgaXQgdGllZCB0byBjZXJ0YWluIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAoZS5nLiwgaGFyZHdhcmUgb2ZmbG9hZCBzdXBwb3J0KT8gSSBuZWVkIHRvIGtub3cgdGhlIHByZWNvbmRpdGlvbnMuCiogICAqKkRlZmF1bHQgQmVoYXZpb3I6KiogV2hhdCYjMzk7cyB0aGUgZGVmYXVsdCBzdGF0ZSDigJMgaXMgaXQgYnVpbHQtaW4sIG1vZHVsYXIsIG9yIGRpc2FibGVkPyBVbmRlcnN0YW5kaW5nIHRoZSBkZWZhdWx0IHByb3ZpZGVzIGNyaXRpY2FsIGNvbnRleHQuCiogICAqKkNvbmZpZ3VyYXRpb24gT3B0aW9uczoqKiBCZXlvbmQganVzdCBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhlIG1vZHVsZSwgd2hhdCB0dW5hYmxlIHBhcmFtZXRlcnMgZXhpc3Q/IEFyZSB0aGVyZSBvcHRpb25zIHJlbGF0ZWQgdG8gZmxvdyB0YWJsZSBzaXplLCBhZ2luZywgb3Igc3BlY2lmaWMgb2ZmbG9hZCBmZWF0dXJlcz8gVGhpcyB3aWxsIGluZm9ybSBhbnkgb3B0aW1pemF0aW9uIHN0cmF0ZWd5IEkgbmVlZC4KKiAgICoqSGVscCBUZXh0OioqIFRoaXMgc2hvdWxkIGJlIHF1aXRlIGluc2lnaHRmdWwuIFdoYXQgZG8gdGhlIGRlc2NyaXB0aW9ucyB0ZWxsIHVzIGFib3V0IHRoZSBpbnRlbmRlZCBwdXJwb3NlIGFuZCB1c2UgY2FzZXMgZm9yIHRoZSBmZWF0dXJlPyBUaGUgaGVscCB0ZXh0IHNob3VsZCBjbHVlIG1lIGluIG9uIHdoYXQga2luZCBvZiBwcm9ibGVtcyB0aGlzIHNvbHZlcy4KKiAgICoqQ29uZmxpY3RzOioqIEkmIzM5O2xsIGJlIG9uIHRoZSBsb29rb3V0IGZvciBhbnkgb2J2aW91cyBjb25mbGljdHMgd2l0aCBvdGhlciBuZXR3b3JraW5nIGZlYXR1cmVzLiBBcmUgdGhlcmUgYW55IGtub3duIGluY29tcGF0aWJpbGl0aWVzIHdpdGggZXN0YWJsaXNoZWQgc29sdXRpb25zIHRoYXQgSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlcj8KKiAgICoqQ29uZGl0aW9uYWwgRGVwZW5kZW5jaWVzOioqIEkgYW50aWNpcGF0ZSB0aGVyZSB3aWxsIGJlIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgYmFzZWQgb24gdGhlIGtlcm5lbCYjMzk7cyBhcmNoaXRlY3R1cmUsIGhhcmR3YXJlLCBvciBhbm90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgoKSSYjMzk7bSBlc3NlbnRpYWxseSB0cnlpbmcgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGBORl9GTE9XX1RBQkxFYC4gSXQmIzM5O3MgYWxsIGFib3V0IGNvbnRleHQsIHJlc3RyaWN0aW9ucywgYW5kIHRoZSBrbm9icyBJIGNhbiB0d2Vhay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcxMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzExOlx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVcbiA3MTI6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuIDcxMzpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfSU5HUkVTU1xuIDcxNDpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbiA3MTU6XHRcdGRlcGVuZHMgb24gTkZfVEFCTEVTXG4gNzE2Olx0XHRoZWxwXG4gNzE3Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGZsb3cgdGFibGUgY29yZSBpbmZyYXN0cnVjdHVyZS5cbiA3MTg6XHRcbiA3MTk6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiA3MjA6XHRcbiA3MjE6XHRjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcbiA3MjI6XHRcdGJvb2wgXCYjMzQ7U3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcJiMzNDtcbiA3MjM6XHRcdGRlcGVuZHMgb24gTkZfRkxPV19UQUJMRVxuIDcyNDpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4gNzI1Olx0XHRoZWxwXG4gNzI2Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZm9yIHRoZSBmbG93IHRhYmxlIG9mZmxvYWQgc3RhdGlzdGljc1xuIDcyNzpcdFx0ICB0byBiZSBzaG93biBpbiBwcm9jZnMgdW5kZXIgbmV0L25ldGZpbHRlci9uZl9mbG93dGFibGUuXG4gNzI4Olx0XG4gNzI5Olx0Y29uZmlnIE5FVEZJTFRFUl9YVEFCTEVTXG4gNzMwOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgWHRhYmxlcyBzdXBwb3J0IChyZXF1aXJlZCBmb3IgaXBfdGFibGVzKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NDQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTmV0ZmlsdGVyIEZsb3cgT2ZmbG9hZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBOZXRmaWx0ZXIgZmxvdyBvZmZsb2FkIHNpdHVhdGlvbi4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGFyZSB0aGUgZGVwZW5kZW5jaWVzLiBXZSYjMzk7dmUgZ290IGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuIFRoYXQgbWVhbnMgdG8gZ2V0IHRoaXMgd2hvbGUgdGhpbmcgd29ya2luZywgdGhlIGBFbmFibGVDb25maWdzYCBuZWVkIHRvIGluY2x1ZGUgYE5GX0ZMT1dfVEFCTEVgIChuYXR1cmFsbHkpLCBgTkVURklMVEVSX0lOR1JFU1NgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9UQUJMRVNgLiBXZSBuZWVkIHRob3NlIGJ1aWxkaW5nIGJsb2NrcyBpbiBwbGFjZSBiZWZvcmUgd2UgY2FuIGV2ZW4gYmVnaW4uCgpOZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGBGb2N1c1N5bWJvbHNgLiBFc3NlbnRpYWxseSwgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IHBsYXllcnMgaGVyZSB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZD8gTG9va3MgbGlrZSB3ZSBoYXZlOgoKKiAgIGBmbG93X29mZmxvYWRfYWRkYAoqICAgYGZsb3dfb2ZmbG9hZF9sb29rdXBgCiogICBgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXBgCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogYXJlIHRoZXNlIHN5bWJvbHMgZXhwb3J0ZWQgb3IgYXJlIHRoZXkgc3RhdGljIHdpdGhpbiB0aGUgbW9kdWxlPyBLbm93aW5nIHRoYXQgdGVsbHMgbWUgaG93IGVhc2lseSB0aGV5IGNhbiBiZSBhY2Nlc3NlZCBhbmQgdXNlZC4gYGZsb3dfb2ZmbG9hZF9hZGRgIGlzICpkZWZpbml0ZWx5KiBleHBvcnRlZCDigJMgSSBjYW4gc2VlIGBFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYWRkKWAuIE5vdywgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIGBmbG93X29mZmxvYWRfbG9va3VwYCBpcyBhbHNvIGV4cG9ydGVkLiBUaGF0JiMzOTtzIHRoZSBuZXh0IGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbG93X29mZmxvYWRfbG9va3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTQwMT1zdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NDAyOmZsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDAzLVx0XHQgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MjQtfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo0MjU6RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2xvb2t1cCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQyNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYxNQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRXhhbWluaW5nIEZsb3cgT2ZmbG9hZCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZsb3cgb2ZmbG9hZCBmdW5jdGlvbnMuIExldCBtZSBzZWUuLi4gYGZsb3dfb2ZmbG9hZF9sb29rdXBgIC0geWVwLCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGNhbiBhY2Nlc3MgYW5kIHVzZSBpdCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIG5vIHByb2JsZW0gdGhlcmUuIE5vdywgdGhlIG90aGVyIG9uZSwgYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYC4uLkFoLCBnb29kLiBUaGF0IG9uZSYjMzk7cyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQmIzM5O3Mgd2hhdCBJIGV4cGVjdGVkIGZvciBhIGdhcmJhZ2UgY29sbGVjdGlvbiBzdGVwLiBJdCYjMzk7cyBtZWFudCB0byBiZSBhbiBpbnRlcm5hbCBoZWxwZXIsIG5vdCBzb21ldGhpbmcgZXhwb3NlZCBmb3IgZXh0ZXJuYWwgdXNlLiBFeGNlbGxlbnQuIEp1c3QgYXMgcGxhbm5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd19vZmZsb2FkX2djX3N0ZXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NTEyPXN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZXh0ZW5kX2N0X3RpbWVvdXQoc3RydWN0IG5mX2Nvbm4gKmN0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNTY5LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo1NzA6c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNTcxLVx0XHRcdFx0ICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz02MDY9dm9pZCBuZl9mbG93X3RhYmxlX2djX3J1bihzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02MDcte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo2MDg6XHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd190YWJsZSwgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAsIE5VTEwpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02MDktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTE1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBGbG93IFRhYmxlIEdhcmJhZ2UgQ29sbGVjdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBnYXJiYWdlIGNvbGxlY3Rpb24uIEkgc2VlIHRoYXQgdGhlIGBuZl9mbG93X3RhYmxlX2djX3J1bmAgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGluaXRpYXRpbmcgdGhpcyBwcm9jZXNzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyBgbmZfZmxvd190YWJsZV9nY19ydW5gIGV4cG9ydGVkLCBvciBpcyBpdCBpbnRlcm5hbD8mIzM0OyBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBxdWVzdGlvbi4gVW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgaGVscHMgZGV0ZXJtaW5lIGhvdyBpdCYjMzk7cyBpbnZva2VkIGFuZCBpZiBJIGNhbiBwb3RlbnRpYWxseSBob29rIGludG8gaXQgZm9yIGRlYnVnZ2luZyBvciBjdXN0b20gZXh0ZW5zaW9ucy4gVGhlbiBJIG5vdGljZSB0aGUgY2FsbCB0byBgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXBgLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucyBpcyB0aGUgY3J1eCBvZiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHByb2dyZXNzZXMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcGAgYWN0dWFsbHkgZG9lcyBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgaW50byB0aGUgYmlnZ2VyIGdhcmJhZ2UgY29sbGVjdGlvbiBvcGVyYXRpb24gd2l0aGluIE5ldGZpbHRlci4gVGhpcyB3aWxsIGRyaXZlIG15IG5leHQgcXVlc3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfdGFibGVfZ2NfcnVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTU3MD1zdGF0aWMgdm9pZCBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjA1LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo2MDY6dm9pZCBuZl9mbG93X3RhYmxlX2djX3J1bihzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02MDcte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NjExPXN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYxNS1cdGZsb3dfdGFibGUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mX2Zsb3d0YWJsZSwgZ2Nfd29yay53b3JrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NjE2Olx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYxNy1cdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50X3dxLCBcdTAwMjZmbG93X3RhYmxlLVx1MDAzZWdjX3dvcmssIEhaKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc2Nz12b2lkIG5mX2Zsb3dfdGFibGVfZnJlZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzc2LVx0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3dfdGFibGUsIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cCwgTlVMTCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc3NzpcdG5mX2Zsb3dfdGFibGVfZ2NfcnVuKGZsb3dfdGFibGUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NzgtXHRuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2hfY2xlYW51cChmbG93X3RhYmxlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg3MgoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIFJlYWNoIG9mIGBuZl9mbG93X3RhYmxlX2djX3J1bmAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbmZfZmxvd190YWJsZV9nY19ydW5gIGZ1bmN0aW9uLiBUaGUgcHJvYmxlbSBpcywgaXQgaXNuJiMzOTt0IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIHdoaWNoIGlzIGEgYml0IG9mIGEgaHVyZGxlLiAgQnV0LCBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2NgLiBBbmQgdGhhdCYjMzk7cyBpbnRlcmVzdGluZyBiZWNhdXNlICp0aGF0KiBmdW5jdGlvbiBpcyBhIHdvcmtxdWV1ZSBjYWxsYmFjay4gVGhhdCBjb3VsZCBtZWFuIGl0IGhhcyBpbXBsaWNhdGlvbnMgZm9yIGNvbmN1cnJlbmN5IGFuZCBzY2hlZHVsaW5nLiAgQWxzbywgaXQmIzM5O3MgY2FsbGVkIGZyb20gYG5mX2Zsb3dfdGFibGVfZnJlZWAsIHdoaWNoIGlzIGFub3RoZXIgcG90ZW50aWFsIGVudHJ5IHBvaW50LgoKV2FpdCBhIHNlY29uZC4uLkkmIzM5O20gZ2V0dGluZyBhaGVhZCBvZiBteXNlbGYuICBKdXN0IGJlY2F1c2UgaXQgKmxvb2tzKiBsaWtlIGl0JiMzOTtzIG5vdCBleHBvcnRlZCBkb2VzbiYjMzk7dCBtYWtlIGl0IHNvLiBJJiMzOTt2ZSBiZWVuIGZvb2xlZCBieSB0aGlzIGJlZm9yZSwgc28gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzbiYjMzk7dCBhIGNhc2Ugd2hlcmUgaXQgKmNvdWxkKiBiZSBleHBvcnRlZCwgcGVyaGFwcyB0aHJvdWdoIHNvbWUgb3RoZXIgbWVjaGFuaXNtLiBJIHJlYWxseSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbmZfZmxvd190YWJsZV9nY19ydW5gIGlzIGFjdHVhbGx5IHN0YXRpYyBiZWZvcmUgSSBkcmF3IGFueSBjb25jbHVzaW9ucyBhYm91dCBpdHMgYWNjZXNzaWJpbGl0eSBhbmQsIHRoZXJlZm9yZSwgdGhlIHdheXMgaXQgbWlnaHQgYmUgaW52b2tlZCBvciB1c2VkLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qbmZfZmxvd190YWJsZV9nY19ydW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI3MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipGb2N1c2luZyBJbndhcmQ6IFdoZXJlIHRoZSBSZWFsIEFjdGlvbiBJcyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggZXhwb3J0cyBoZXJlLCBzY3JhdGNoIHRoYXQgbGluZSBvZiB0aGlua2luZy4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgbGFzZXItc2hhcnAgb24gdGhlc2UgdHdvIGZ1bmN0aW9uczogYGZsb3dfb2ZmbG9hZF9hZGRgIGFuZCBgZmxvd19vZmZsb2FkX2xvb2t1cGAuIEJ1dCB3YWl0Li4uIGhhbmcgb24gYSBtaW51dGUuLi4gYGZsb3dfb2ZmbG9hZF9sb29rdXBgIGlzIGEgKmhvdC1wYXRoKiBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUgb25lIHRoYXQmIzM5O3MgY2FsbGVkIGZvciAqZXZlcnkgc2luZ2xlIHBhY2tldCog4oCTIGl0JiMzOTtzIHRoZSBjcml0aWNhbCBsb29rdXAuIFRoYXQgbWVhbnMgcGVyZm9ybWFuY2UgaGVyZSBpcyBwYXJhbW91bnQuIFNvLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgY29udGV4dHMgb2YgYGZsb3dfb2ZmbG9hZF9sb29rdXBgLiBHb3R0YSBzZWUgKndoZXJlKiBpdCYjMzk7cyBiZWluZyBpbnZva2VkLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgb3ZlcmFsbCBpbXBhY3QgYW5kIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Zsb3dfb2ZmbG9hZF9sb29rdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmM9MzY9YnBmX3hkcF9mbG93X3R1cGxlX2xvb2t1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy00Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYzo0NzpcdHR1cGxlaGFzaCA9IGZsb3dfb2ZmbG9hZF9sb29rdXAobmZfZmxvd190YWJsZSwgdHVwbGUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTQ4LVx0aWYgKCF0dXBsZWhhc2gpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz00MDE9c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjQwMjpmbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQwMy1cdFx0ICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDI0LX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NDI1OkVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9sb29rdXApO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MjYtXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9NDYxPXN0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ2MjpuZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NjMtXHRcdCAgICAgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ3Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ3MzpcdHJldHVybiBmbG93X29mZmxvYWRfbG9va3VwKGZsb3dfdGFibGUsIFx1MDAyNnR1cGxlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ3NC19XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9ODA3PW5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODIzLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6ODI0Olx0dHVwbGVoYXNoID0gbmZfZmxvd19vZmZsb2FkX2xvb2t1cChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHNrYik7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04MjUtXHRpZiAoIXR1cGxlaGFzaClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMTA4PW5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExMTktXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMTIwOlx0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXHUwMDI2dHVwbGUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTEyMS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMjkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBDYWxsIFBhdGhzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGZ1bmN0aW9uIGNhbGxzLiBSaWdodCwgYGZsb3dfb2ZmbG9hZF9sb29rdXBgIGlzIGRlZmluaXRlbHkgYSBob3QtcGF0aCBmdW5jdGlvbiwgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIGhvb2suIFRoYXQmIzM5O3MgYSBrZXkgY29uc2lkZXJhdGlvbiBmb3IgcGVyZm9ybWFuY2UsIHNvIHdlIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIG9wdGltaXplZC4gTm93LCBgZmxvd19vZmZsb2FkX2FkZGAgc2VlbXMgbGVzcyBwZXJmb3JtYW5jZS1jcml0aWNhbCwgc2luY2UgaXQmIzM5O3Mgb25seSBpbnZva2VkIHdoZW4gYSBuZXcgZmxvdyBpcyBvZmZsb2FkZWQuIFN0aWxsLCBpdCYjMzk7cyBvcGVyYXRpbmcgb24gdGhlIGRhdGEgcGF0aCwgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAgYW5kIG9mZmxvYWQsIHNvIHdlIGNhbiYjMzk7dCBjb21wbGV0ZWx5IGlnbm9yZSBpdCBlaXRoZXIuIFdhaXQsIGhvbGQgb24uIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgYWJvdXQgdGhlIGNhbGwgc3RhY2sgZm9yIGBmbG93X29mZmxvYWRfYWRkYC4gSSAqdGhpbmsqIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIG9yIHNvbWV0aGluZyBzaW1pbGFyLi4uIExldCBtZSB2ZXJpZnkgdGhhdCB0byBiZSBzdXJlLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgZXhlY3V0aW9uIHBhdGggdG8gcHJvcGVybHkgYXNzZXNzIGl0cyBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Zsb3dfb2ZmbG9hZF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTMwOT11bnNpZ25lZCBsb25nIGZsb3dfb2ZmbG9hZF9nZXRfdGltZW91dChzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzI3LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzozMjg6aW50IGZsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzI5LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM1Mi1cdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93X3RhYmxlKSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MzUzOlx0XHRuZl9mbG93X29mZmxvYWRfYWRkKGZsb3dfdGFibGUsIGZsb3cpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNTQtXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNTgtfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzozNTk6RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2FkZCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM2MC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTE5LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoyMDpzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3E7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTIxLXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmZfZmxvd19vZmZsb2FkX2RlbF93cTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwNjU9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3F1ZXVlX3dvcmsoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA3MC1cdFx0TkZfRkxPV19UQUJMRV9TVEFUX0lOQ19BVE9NSUMobmV0LCBjb3VudF93cV9hZGQpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMDcxOlx0XHRxdWV1ZV93b3JrKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EsIFx1MDAyNm9mZmxvYWQtXHUwMDNld29yayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNzItXHR9IGVsc2UgaWYgKG9mZmxvYWQtXHUwMDNlY21kID09IEZMT1dfQ0xTX0RFU1RST1kpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExMTM9dm9pZCBuZl9mbG93X29mZmxvYWRfcmVmcmVzaChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTI0LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTI1OnZvaWQgbmZfZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExMjYtXHRcdFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTczPXZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNzUtXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd3RhYmxlKSkge1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTc2Olx0XHRmbHVzaF93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2FkZF93cSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNzctXHRcdGZsdXNoX3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfZGVsX3dxKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEyOTQ9aW50IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9pbml0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyOTUte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjk2Olx0bmZfZmxvd19vZmZsb2FkX2FkZF93cSAgPSBhbGxvY193b3JrcXVldWUoXCYjMzQ7bmZfZnRfb2ZmbG9hZF9hZGRcJiMzNDssXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyOTctXHRcdFx0XHRcdFx0ICBXUV9VTkJPVU5EIHwgV1FfU1lTRlMsIDApO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjk4Olx0aWYgKCFuZl9mbG93X29mZmxvYWRfYWRkX3dxKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjk5LVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMTUtZXJyX2RlbF93cTpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMxNjpcdGRlc3Ryb3lfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzE3LVx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMzIwPXZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2V4aXQodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyMS17XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMjI6XHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfYWRkX3dxKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyMy1cdGRlc3Ryb3lfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jPTUwPXN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTIwLVx0X19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncyk7XG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoxMjE6XHRyZXQgPSBmbG93X29mZmxvYWRfYWRkKGZsb3d0YWJsZSwgZmxvdyk7XG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xMjItXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEzNAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBGbG93IE9mZmxvYWQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhpcyBmbG93IG9mZmxvYWQgaW1wbGVtZW50YXRpb24sIGFuZCBgZmxvd19vZmZsb2FkX2FkZGAgc2VlbXMgbGlrZSBhIGNyaXRpY2FsIGZ1bmN0aW9uLiBJdCYjMzk7cyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgd2hpY2ggaXMgdGhlIGV2YWx1YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBgZmxvd19vZmZsb2FkYCBleHByZXNzaW9uIGluIG5mdGFibGVzLiBUaGF0JiMzOTtzIGEgc29saWQgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgZmxvd3MgYXJlIGFjdHVhbGx5IGFkZGVkIHRvIHRoZSBmbG93IHRhYmxlLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgc2hvdWxkIGZvY3VzLgoKSG1tLCBidXQgd2FpdCBhIHNlY29uZCwgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgaXMgYSBob3QtcGF0aCBmdW5jdGlvbiEgSXQgZ2V0cyBjYWxsZWQgKmZvciBldmVyeSBwYWNrZXQqIHRoYXQgbWF0Y2hlcyBhbiBvZmZsb2FkIHJ1bGUuIFRoYXQgc3VnZ2VzdHMgaXQmIzM5O3MgcGVyZm9ybWFuY2UtY3JpdGljYWwsIGV2ZW4gdGhvdWdoIGl0IG9ubHkgYWRkcyB0aGUgZmxvdyBvbmNlLiBTbywgSSBoYXZlIHRvIGJlIGNhcmVmdWwgd2hlbiBsb29raW5nIGF0IHRoaXMgb25lLgoKSXMgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9uPyBJIHNlZSB0aGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcGAsIHdoaWNoIGdldHMgY2FsbGVkIGZyb20gYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYCwgd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IGBuZl9mbG93X29mZmxvYWRfd29ya19nY2AuIEludGVyZXN0aW5nLCBidXQgc2luY2UgYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYCBpcyBzdGF0aWMsIEkgY2FuJiMzOTt0IHJlYWxseSBmb2N1cyBvbiBpdC4gU28gdGhhdCBicmluZ3MgbWUgYmFjayB0byBgZmxvd19vZmZsb2FkX2FkZGAuCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgaXMgZXhwb3J0ZWQgb3IgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMuIE5vcGUsIGl0JiMzOTtzIHN0YXRpYy4gT2theSwgaXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgbmZfZmxvd190YWJsZV9jb3JlLmNgIGZvciBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmZsb3dfb2ZmbG9hZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz01Mz1zdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93X29mZmxvYWRfYWxsb2Moc3RydWN0IG5mX2Nvbm4gKmN0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzYtfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3NzpFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYWxsb2MpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTE2ND12b2lkIGZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xNzAtfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoxNzE6RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX3JvdXRlX2luaXQpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xNzItXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0yNjE9dm9pZCBmbG93X29mZmxvYWRfZnJlZShzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjcyLX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MjczOkVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9mcmVlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjc0LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MzI4PWludCBmbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNTgtfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzozNTk6RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2FkZCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM2MC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MzYxPXZvaWQgZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM3OC19XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjM3OTpFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfcmVmcmVzaCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM4MC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTM5Mz12b2lkIGZsb3dfb2ZmbG9hZF90ZWFyZG93bihzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzk4LX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Mzk5OkVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF90ZWFyZG93bik7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQwMC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTQwMj1mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MjQtfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo0MjU6RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2xvb2t1cCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQyNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEZsb3cgT2ZmbG9hZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmbG93IG9mZmxvYWQgZnVuY3Rpb25zLCBhbmQgaXQgc2VlbXMgbGlrZSBgZmxvd19vZmZsb2FkX2FkZGAgaXMgZGVmaW5pdGVseSBhIGtleSBwbGF5ZXIsIG9idmlvdXNseSBkZWFsaW5nIHdpdGggdGhlIGFkZGl0aW9uIG9mIGZsb3dzLiBUaGVuLCB3ZSYjMzk7dmUgZ290IGBmbG93X29mZmxvYWRfdGVhcmRvd25gLCB3aGljaCBJJiMzOTtkIGV4cGVjdCBpcyBpbnRpbWF0ZWx5IHRpZWQgdG8gdGhlIGZsb3cgbGlmZWN5Y2xlLCBoYW5kbGluZyB0aGUgcmVtb3ZhbC4gQW5kLCBgZmxvd19vZmZsb2FkX2FsbG9jYCBpcyByZWxhdGVkIGFzIHdlbGwsIHByb2JhYmx5IG1hbmFnaW5nIHRoZSBhbGxvY2F0aW9uIG9mIHJlc291cmNlcy4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgaXMgaW4gcGxheSBjb25maWctd2lzZS4gSSYjMzk7bSBnb2luZyB0byBzY2FuIGZvciBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQWgsIGhlcmUgd2UgZ28sIGBDT05GSUdfTkZfRkxPV19UQUJMRWAg4oCTIHRoYXQmIzM5O3MgdGhlIGJpZyBvbmUsIHRoZSBjb3JlIGNvbXBvbmVudCBJJiMzOTttIGludGVyZXN0ZWQgaW4uIFRoZW4sIHRoZSBkZXBlbmRlbmNpZXMsIGdvdCB0byBoYXZlIGBDT05GSUdfTkZfVEFCTEVTYCwgYENPTkZJR19ORl9DT05OVFJBQ0tgLCBhbmQgYENPTkZJR19ORVRGSUxURVJfSU5HUkVTU2AgYWxsIHdvcmtpbmcgdG9nZXRoZXIuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgcXVpY2sgbG9vayBpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBjb25maXJtIHRoZSBjb250ZXh0IGFyb3VuZCBgTkZfRkxPV19UQUJMRWAuIFRoaXMgd2lsbCBwcm92aWRlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgYWxsIHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzExLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MTE6XHRjb25maWcgTkZfRkxPV19UQUJMRVxuIDcxMjpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbW9kdWxlXCYjMzQ7XG4gNzEzOlx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9JTkdSRVNTXG4gNzE0Olx0XHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xuIDcxNTpcdFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcbiA3MTY6XHRcdGhlbHBcbiA3MTc6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgZmxvdyB0YWJsZSBjb3JlIGluZnJhc3RydWN0dXJlLlxuIDcxODpcdFxuIDcxOTpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxuIDcyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE3NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZyB0aGUgaW1wb3J0YW5jZSBvZiBgTkZfRkxPV19UQUJMRWAsIGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIGRlcGVuZGVuY3kgcmVzb2x1dGlvbi4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGV2ZXJ5dGhpbmcgaXMgY29ycmVjdGx5IGNvbmZpZ3VyZWQgZm9yIHRoZSBkZXNpcmVkIGZ1bmN0aW9uYWxpdHkuCgpOb3csIG15IHRyYWluIG9mIHRob3VnaHQgdHVybnMgdG93YXJkIGBORVRGSUxURVJfSU5HUkVTU2AuIEdpdmVuIGl0cyByb2xlLCBJIG5lZWQgdG8gY2hlY2sg4oCTIGFuZCBjaGVjayB0aG9yb3VnaGx5IOKAkyB0byBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyLCBwZXJoYXBzIGxlc3Mgb2J2aW91cywgZGVwZW5kZW5jaWVzIHRoYXQgbmVlZCB0byBiZSBhY2NvdW50ZWQgZm9yLiBXZSYjMzk7cmUgdGFsa2luZyBzdWJ0bGUgaW50ZXJhY3Rpb25zIGhlcmUuIE1pc3Npbmcgb25lIG9mIHRoZXNlIGNhbiBsZWFkIHRvIHNvbWUgcmVhbGx5IGZydXN0cmF0aW5nIGRlYnVnZ2luZyBzZXNzaW9ucyBkb3duIHRoZSBsaW5lLiBTbywgSSBuZWVkIHRvIG1ldGhvZGljYWxseSB2ZXJpZnkgKmV2ZXJ5dGhpbmcqIHRoYXQgaXQgcmVsaWVzIG9uLCB3aGV0aGVyIGV4cGxpY2l0bHkgc3RhdGVkIG9yIHBvdGVudGlhbGx5IGltcGxpZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbW9kdWxlcyBhbmQgc3ViLXN5c3RlbXMuIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVEZJTFRFUl9JTkdSRVNTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yPW1lbnUgXCYjMzQ7Q29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvblwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjU6Y29uZmlnIE5FVEZJTFRFUl9JTkdSRVNTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIGluZ3Jlc3Mgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU0OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIE5ldGZpbHRlciBGbG93IFRhYmxlIFBhdGNoKioKCk9rYXksIHNvIGBORVRGSUxURVJfSU5HUkVTU2AgaXMgYSBib29sZWFuLCBnb29kIHRvIGtub3cuIFRoZSBjb3JlIG9mIHRoaXMgbG9va3MgbGlrZSBpdCBoaW5nZXMgb24gYE5GX0ZMT1dfVEFCTEVgLCBhbmQgdGhhdCYjMzk7cyBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AuIERlZmluaXRlbHkgc29tZXRoaW5nIHRvIGZvY3VzIG9uLiBJdCYjMzk7cyBjb21waWxlZCB3aGVuIGBDT05GSUdfTkZfRkxPV19UQUJMRWAgaXMgZW5hYmxlZC4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYWRkaW5nIGFuZCBnYXJiYWdlIGNvbGxlY3RpbmcgZmxvdyBvZmZsb2Fkcy4gU291bmRzIGxpa2UgYSB0ZXh0Ym9vayBmdXp6aW5nIHRhcmdldCDigJMgYSByYWNlIGNvbmRpdGlvbiBpcyByaXBlIGZvciBleHBsb2l0YXRpb24uCgpMZXQmIzM5O3MgcHVsbCB0b2dldGhlciB0aGUga2V5IGRldGFpbHMuIFllYWgsIHRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIHN1bW1hcml6ZSB0aGF0OiBgV29ydGhGdXp6aW5nOiB0cnVlYC4gVGhlIGNyaXRpY2FsIHN5bWJvbHMgdG8gbG9vayBhdCBhcmUgbGlrZWx5IGdvaW5nIHRvIGJlIGBmbG93X29mZmxvYWRfYWRkYCwgc2luY2UgdGhhdCYjMzk7cyB3aGF0JiMzOTtzIGdldHRpbmcgbW9kaWZpZWQuIFNvIGBGb2N1c1N5bWJvbHM6IFsmIzM0O2Zsb3dfb2ZmbG9hZF9hZGQmIzM0O11gLiBUbyBidWlsZCB0aGlzLCBJJiMzOTtsbCBuZWVkIGBFbmFibGVDb25maWdzOiBbJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssICYjMzQ7TkVURklMVEVSX0lOR1JFU1MmIzM0OywgJiMzNDtORl9DT05OVFJBQ0smIzM0OywgJiMzNDtORl9UQUJMRVMmIzM0O11gLiBUaGUgcmVhc29uIGlzIHByZXR0eSBjbGVhcjogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgbG9naWMgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gZHVyaW5nIGZsb3cgb2ZmbG9hZCBhZGRpdGlvbiBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uIGJ5IGludHJvZHVjaW5nIGEgbmV3IE5GX0ZMT1dfQ09ORklSTUVEIGZsYWcuJiMzNDsKCk5vdywgYSBxdWljayBzYW5pdHkgY2hlY2suIFNob3VsZCBJIGFkZCBvdGhlciBzeW1ib2xzPyBgZmxvd19vZmZsb2FkX2xvb2t1cGA/IEl0JiMzOTtzIGEgaG90LXBhdGggZnVuY3Rpb24sIHNvIGxpa2VseSBub3QgdGhlIGluaXRpYWwgZW50cnkgcG9pbnQuIFRoZW4gdGhlcmUmIzM5O3MgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAsIGJ1dCB0aGF0JiMzOTtzIHN0YXRpYywgc28gaXQmIzM5O3MgcHJvYmFibHkgbm90IGFzIGltcGFjdGZ1bCBoZXJlLiBgZmxvd19vZmZsb2FkX2FkZGAgaXMgKnRoZSogZXhwb3J0ZWQgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQuIFRoYXQmIzM5O3MgdGhlIGtleS4KCkxldCYjMzk7cyBub3QgZm9yZ2V0IGFib3V0IG90aGVyIGNvbmZpZ3MuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBtYWtlIHN1cmUgSSBjYW4gdHJpZ2dlciB0aGlzIHRocm91Z2ggdGhlIG5vcm1hbCB1c2VyIGludGVyZmFjZXMsIHNvIGBDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRGAgaXMgbGlrZWx5IHJlcXVpcmVkLCBvdGhlcndpc2UgSSB3aWxsIG5vdCBiZSBhYmxlIHRvIGFjdHVhbGx5IHJlYWNoIHRoZSBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZnV6emVkIHZpYSBuZnRhYmxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GVF9GTE9XX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTQ5OD1jb25maWcgTkZUX0VYVEhEUl9EQ0NQXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwMy1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDQ6Y29uZmlnIE5GVF9GTE9XX09GRkxPQURcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDUtXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgTkZfRkxPV19UQUJMRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQxNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgdGhlIEZsb3cgVGFibGUgT2ZmbG9hZCBFeHByZXNzaW9uKioKClJpZ2h0LCBzbyBgTkZUX0ZMT1dfT0ZGTE9BRGAgaXMgdGhlIG5hbWUgb2YgdGhhdCBzcGVjaWZpYyBuZnRhYmxlcyBleHByZXNzaW9uIHRoYXQgZGVhbHMgd2l0aCB0aGUgZmxvdyB0YWJsZS4gT2theSwgdGhhdCYjMzk7cyB3aGF0IEkgdGhvdWdodCwgYnV0IGl0IGFsd2F5cyBwYXlzIHRvIGRvdWJsZS1jaGVjay4gVGltZSB0byBxdWlja2x5IGludmVzdGlnYXRlIGl0cyBkZXBlbmRlbmNpZXMuIE5lZWQgdG8gc2VlIHdoYXQgb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcyBhcmUgcmVxdWlyZWQgZm9yIHRoYXQgdG8gZnVuY3Rpb24gcHJvcGVybHkuIEdvdHRhIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTA0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDQ6XHRjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxuIDUwNTpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbiA1MDY6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgaGFyZHdhcmUgZmxvdyBvZmZsb2FkIG1vZHVsZVwmIzM0O1xuIDUwNzpcdFx0aGVscFxuIDUwODpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBcJiMzNDtmbG93X29mZmxvYWRcJiMzNDsgZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gdXNlIHRvXG4gNTA5Olx0XHQgIGNob29zZSB3aGF0IGZsb3dzIGFyZSBwbGFjZWQgaW50byB0aGUgaGFyZHdhcmUuXG4gNTEwOlx0XG4gNTExOlx0Y29uZmlnIE5GVF9DT05OTElNSVRcbiA1MTI6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgY29ubmxpbWl0IG1vZHVsZVwmIzM0O1xuIDUxMzpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NjkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCB3ZXJlIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKkVuYWJsaW5nIFVzZXItU3BhY2UgRmxvdyBPZmZsb2FkKioKCkFscmlnaHQsIHRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYE5GVF9GTE9XX09GRkxPQURgIGlzIHRoZSAqa2V5KiBpbmdyZWRpZW50IGhlcmUuIEl0JiMzOTtzIHRoZSBtZWNoYW5pc20gd2UgbmVlZCB0byBhY3R1YWxseSBraWNrIG9mZiB0aGlzIGZsb3cgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5IGRpcmVjdGx5IGZyb20gdXNlciBzcGFjZSB0aHJvdWdoIG5mdGFibGVzLiBTbywgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0byBpbmNsdWRlIHRoYXQgbW9kdWxlLiBJdCYjMzk7cyBub3Qgb3B0aW9uYWw7IGl0JiMzOTtzIGZ1bmRhbWVudGFsLgoKTm93LCBiZWZvcmUgSSBjb21taXQgdG8gdGhhdCwgSSBzaG91bGQgZG8gYSBxdWljayBzYW5pdHkgY2hlY2suIEkgbmVlZCB0byBlbnN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYSBkaWZmZXJlbnQsIHBlcmhhcHMgbW9yZSBlbGVnYW50IG9yIGVmZmljaWVudCwgd2F5IHRvIHRyaWdnZXIgYGZsb3dfb2ZmbG9hZF9hZGRgLiBJIHZhZ3VlbHkgcmVtZW1iZXIgYWN0X2N0IG1pZ2h0IGJlIHJlbGV2YW50LiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoaXMgd2hvbGUgZmxvdy4gUGVyaGFwcyBpdCBwcm92aWRlcyBhbiBhbHRlcm5hdGl2ZSBwYXRoPyBCZXR0ZXIgdG8gYmUgdGhvcm91Z2ggYmVmb3JlIGZpbmFsaXppbmcgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Zsb3dfb2ZmbG9hZF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfY3QuYz00MjQ9c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfYWRkKHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTQ1My1cbm5ldC9zY2hlZC9hY3RfY3QuYzo0NTQ6XHRlcnIgPSBmbG93X29mZmxvYWRfYWRkKFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0LCBlbnRyeSk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtNDU1LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxODEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQ29uZmlybWluZyBgYWN0X2N0YCBVc2FnZSBhbmQgUGl2b3RpbmcgdG8gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIHdhcyBkb3VibGUtY2hlY2tpbmcgc29tZSBjb2RlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGFuZCB5ZXAsIGBuZXQvc2NoZWQvYWN0X2N0LmNgIGRlZmluaXRlbHkgdXRpbGl6ZXMgaXQuIEdvb2QsIHRoYXQgY29uZmlybXMgdGhlIGluaXRpYWwgYXNzdW1wdGlvbi4gTm93IHRoYXQgSSYjMzk7dmUgZXN0YWJsaXNoZWQgdGhhdCBgYWN0X2N0YCBpcyBpbmRlZWQgaW4gcGxheSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtb2R1bGUgaXMgYmVpbmcgc2V0IHVwIGFuZCB3aGF0IHBhcmFtZXRlcnMgaXQmIzM5O3MgdXNpbmcuIFdoYXQgYXJlIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlnIG9wdGlvbnMgdGhhdCBjb250cm9sIGl0cyBiZWhhdmlvcj8gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aCB0aGUgYnJvYWRlciBjb25uZWN0aW9uIHRyYWNraW5nIGluZnJhc3RydWN0dXJlIGFuZCBob3cgaXRzIGZlYXR1cmUgc2V0IGlzIGVuYWJsZWQuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9BQ1RfQ1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz04NTM9Y29uZmlnIE5FVF9BQ1RfQ09OTk1BUktcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy04NjQtXG5uZXQvc2NoZWQvS2NvbmZpZzo4NjU6Y29uZmlnIE5FVF9BQ1RfQ1RJTkZPXG5uZXQvc2NoZWQvS2NvbmZpZy04NjYtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgQ29ubmVjdGlvbiBNYXJrIEFjdGlvbnNcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz05MDY9Y29uZmlnIE5FVF9BQ1RfVFVOTkVMX0tFWVxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTkxNi1cbm5ldC9zY2hlZC9LY29uZmlnOjkxNzpjb25maWcgTkVUX0FDVF9DVFxubmV0L3NjaGVkL0tjb25maWctOTE4LVx0dHJpc3RhdGUgXCYjMzQ7Y29ubmVjdGlvbiB0cmFja2luZyB0YyBhY3Rpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1ODIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgTkVUX0FDVF9DVGAgRGVwZW5kZW5jaWVzKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVUX0FDVF9DVGAuIEJlZm9yZSBJIGRpZyBpbiB0b28gZGVlcCBvbiBhbnl0aGluZywgbGV0IG1lIG1lbnRhbGx5IG1hcCBvdXQgdGhlIHBvdGVudGlhbCBkb3duc3RyZWFtIGVmZmVjdHMgb2YgYW55IGNoYW5nZXMuIEkgd2FudCB0byBtaW5pbWl6ZSBhbnkgc3VycHJpc2VzIG9yIGNhc2NhZGluZyBpc3N1ZXMuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgaWRlbnRpZnlpbmcgdGhlIGRpcmVjdCBwYXJlbnQgY29tcG9uZW50czsgSSBuZWVkIHRvIGNvbnNpZGVyIGluZGlyZWN0IGNvbm5lY3Rpb25zIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbW9kdWxlcy4gSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgdGhpcyBpbXBhY3RzIGRhdGEgZmxvdywgcGVyZm9ybWFuY2UsIGFuZCBhbnkgaW50ZWdyYXRpb24gcG9pbnRzLiBJdCYjMzk7cyBhIHF1aWNrIHNhbml0eSBjaGVjayBiZWZvcmUgSSBnZXQgaW50byB0aGUgd2VlZHMsIGVuc3VyaW5nIEkmIzM5O20gYXBwcm9hY2hpbmcgdGhpcyBzeXN0ZW1hdGljYWxseSBhbmQgdGhvcm91Z2hseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkxNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTE3Olx0Y29uZmlnIE5FVF9BQ1RfQ1RcbiA5MTg6XHRcdHRyaXN0YXRlIFwmIzM0O2Nvbm5lY3Rpb24gdHJhY2tpbmcgdGMgYWN0aW9uXCYjMzQ7XG4gOTE5Olx0XHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUIFx1MDAyNlx1MDAyNiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2ICghTkZfTkFUIHx8IE5GX05BVCkgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbiA5MjA6XHRcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTXG4gOTIxOlx0XHRzZWxlY3QgTkZfTkFUX09WUyBpZiBORl9OQVRcbiA5MjI6XHRcdGhlbHBcbiA5MjM6XHRcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyBzZW5kaW5nIHRoZSBwYWNrZXRzIHRvIGNvbm50cmFjayBtb2R1bGUuXG4gOTI0Olx0XG4gOTI1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gOTI2Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTQ5CgkJCQkJCQlvdXRwdXQ6IDE2MAoJCQkJCQkJdGhvdWdodHM6IDIxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTmV0ZmlsdGVyIEZsb3cgVGFibGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgYE5FVF9BQ1RfQ1RgIGlzIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIGBORVRfQ0xTX0FDVGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX0ZMT1dfVEFCTEVgLiBHaXZlbiB0aGF0LCBJJiMzOTttIGdvaW5nIHRvIGFkZCBgTkVUX0FDVF9DVGAgYW5kIGBORlRfRkxPV19PRkZMT0FEYCB0byB0aGUgY29uZmlndXJhdGlvbiwgYWxvbmdzaWRlIGBORl9GTE9XX1RBQkxFYCwgYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYCwgYXMgdGhleSBhcmUgcHJlcmVxdWlzaXRlcyBvciBzdXBwb3J0aXZlIGNvbXBvbmVudHMuIFRoZSBmb2N1cyBoZXJlIGlzIG9uIGBmbG93X29mZmxvYWRfYWRkYC4KClRoZSBjb3JlIG9mIHRoaXMgaXMgYSByYWNlIGNvbmRpdGlvbiBmaXggd2l0aGluIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSwgd2hpY2ggaXMgYWRkcmVzc2VkIGJ5IGEgbmV3IGBORl9GTE9XX0NPTkZJUk1FRGAgZmxhZy4gVGhlIHBhdGNoIG1vZGlmaWVzIGBmbG93X29mZmxvYWRfYWRkYCB0byBzZXQgdGhpcyBmbGFnIGFmdGVyIGluc2VydGluZyBib3RoIGZsb3cgZGlyZWN0aW9ucyBpbnRvIHRoZSByaGFzaHRhYmxlLiBDcml0aWNhbGx5LCBpdCBhbHNvIHVwZGF0ZXMgdGhlIGxvb2t1cCBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uIGxvZ2ljIHRvIGlnbm9yZSBhbnkgZmxvd3MgdGhhdCBoYXZlbiYjMzk7dCBiZWVuIGNvbmZpcm1lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCB0b3VjaGluZyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIHNvIHdlIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsLgoKSSYjMzk7bSB0aGlua2luZyB0aGlzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGEgYHNldC1yZXN1bHRzYCBhY3Rpb24sIGFzIGl0JiMzOTtzIGEgdmVyeSBjbGVhciBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9JTkdSRVNTJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORVRfQUNUX0NUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zmxvd19vZmZsb2FkX2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjb3JlIGJ5IGludHJvZHVjaW5nIGEgbmV3IE5GX0ZMT1dfQ09ORklSTUVEIGZsYWcuIEl0IG1vZGlmaWVzIGZsb3dfb2ZmbG9hZF9hZGQgdG8gc2V0IHRoaXMgZmxhZyBhZnRlciBpbnNlcnRpbmcgYm90aCBkaXJlY3Rpb25zIG9mIHRoZSBmbG93IGludG8gdGhlIHJoYXNodGFibGUsIGFuZCB1cGRhdGVzIGxvb2t1cCBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uIGxvZ2ljIHRvIGlnbm9yZSB1bmNvbmZpcm1lZCBmbG93cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfSU5HUkVTUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9DVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Zsb3dfb2ZmbG9hZF9hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgY29yZSBieSBpbnRyb2R1Y2luZyBhIG5ldyBORl9GTE9XX0NPTkZJUk1FRCBmbGFnLiBJdCBtb2RpZmllcyBmbG93X29mZmxvYWRfYWRkIHRvIHNldCB0aGlzIGZsYWcgYWZ0ZXIgaW5zZXJ0aW5nIGJvdGggZGlyZWN0aW9ucyBvZiB0aGUgZmxvdyBpbnRvIHRoZSByaGFzaHRhYmxlLCBhbmQgdXBkYXRlcyBsb29rdXAgYW5kIGdhcmJhZ2UgY29sbGVjdGlvbiBsb2dpYyB0byBpZ25vcmUgdW5jb25maXJtZWQgZmxvd3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgKHJhY2UgY29uZGl0aW9uKSBkdXJpbmcgdGhlIGFkZGl0aW9uIG9mIGEgZmxvdyB0byB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUuIEJ5IGludHJvZHVjaW5nIHRoZSBgTkZfRkxPV19DT05GSVJNRURgIGZsYWcgYW5kIGNoYW5naW5nIHRoZSByaGFzaHRhYmxlIGluc2VydGlvbiBvcmRlciwgaXQgcHJldmVudHMgY29uY3VycmVudCBsb29rdXBzIG9yIGdhcmJhZ2UgY29sbGVjdGlvbiBmcm9tIGFjY2Vzc2luZyBhIGZsb3cgYmVmb3JlIGl0IGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBhZGRlZC4gQ29uY3VycmVuY3kgYnVncyBvZiB0aGlzIG5hdHVyZSB0eXBpY2FsbHkgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSAoaW5mby1sZWFrcykgb3IgY29tcGxleCB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHNwZWNpZmljYWxseSByZXF1aXJlIEtNU0FOLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmQzNTM5YWJkZjUwYTE4ZTIxZDljMDM0M2QwMzNlYzI2OWRjYjA5ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDAwOjM5OjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKaW5kZXggY2U0MTQxMTg5NjJmNS4uNjE4ZDI2ZTQ5ZmRmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oCkBAIC0xODksNiAmIzQzOzE4OSw3IEBAIGVudW0gbmZfZmxvd19mbGFncyB7CiAJTkZfRkxPV19IV19QRU5ESU5HLAogCU5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwKIAlORl9GTE9XX0hXX0VTVEFCTElTSEVELAomIzQzOwlORl9GTE9XX0NPTkZJUk1FRCwKIH07CiAKIGVudW0gZmxvd19vZmZsb2FkX3R5cGUgewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKaW5kZXggOGIxMTY1ZjJiNWE0OS4uMWUyYzRhMWRiOWE3MCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jCkBAIC0zMzIsMTggJiM0MzszMzIsMTcgQEAgaW50IGZsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdykKIAlmbG93LSZndDt0aW1lb3V0ID0gbmZfZmxvd3RhYmxlX3RpbWVfc3RhbXAgJiM0MzsgZmxvd19vZmZsb2FkX2dldF90aW1lb3V0KGZsb3cpOwogCiAJZXJyID0gcmhhc2h0YWJsZV9pbnNlcnRfZmFzdCgmYW1wO2Zsb3dfdGFibGUtJmd0O3JoYXNodGFibGUsCi0JCQkJICAgICAmYW1wO2Zsb3ctJmd0O3R1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX1JFUExZXS5ub2RlLAomIzQzOwkJCQkgICAgICZhbXA7Zmxvdy0mZ3Q7dHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUxdLm5vZGUsCiAJCQkJICAgICBuZl9mbG93X29mZmxvYWRfcmhhc2hfcGFyYW1zKTsKIAlpZiAoZXJyICZsdDsgMCkKIAkJcmV0dXJuIGVycjsKIAotCS8qIEdDIG9ubHkgaXRlcmF0ZXMgb3JpZ2luYWwtZGlyZWN0aW9uIGVudHJpZXM7IHB1Ymxpc2ggb3JpZ2luYWwgbGFzdC4gKi8KIAllcnIgPSByaGFzaHRhYmxlX2luc2VydF9mYXN0KCZhbXA7Zmxvd190YWJsZS0mZ3Q7cmhhc2h0YWJsZSwKLQkJCQkgICAgICZhbXA7Zmxvdy0mZ3Q7dHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUxdLm5vZGUsCiYjNDM7CQkJCSAgICAgJmFtcDtmbG93LSZndDt0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9SRVBMWV0ubm9kZSwKIAkJCQkgICAgIG5mX2Zsb3dfb2ZmbG9hZF9yaGFzaF9wYXJhbXMpOwogCWlmIChlcnIgJmx0OyAwKSB7CiAJCXJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoJmFtcDtmbG93X3RhYmxlLSZndDtyaGFzaHRhYmxlLAotCQkJCSAgICAgICAmYW1wO2Zsb3ctJmd0O3R1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX1JFUExZXS5ub2RlLAomIzQzOwkJCQkgICAgICAgJmFtcDtmbG93LSZndDt0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0ubm9kZSwKIAkJCQkgICAgICAgbmZfZmxvd19vZmZsb2FkX3JoYXNoX3BhcmFtcyk7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMzUzLDYgJiM0MzszNTIsOCBAQCBpbnQgZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KQogCWlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93X3RhYmxlKSkKIAkJbmZfZmxvd19vZmZsb2FkX2FkZChmbG93X3RhYmxlLCBmbG93KTsKIAomIzQzOwlzZXRfYml0KE5GX0ZMT1dfQ09ORklSTUVELCAmYW1wO2Zsb3ctJmd0O2ZsYWdzKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9hZGQpOwpAQCAtNDEyLDcgJiM0Mzs0MTMsOCBAQCBmbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsCiAKIAlkaXIgPSB0dXBsZWhhc2gtJmd0O3R1cGxlLmRpcjsKIAlmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pOwotCWlmICh0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCAmYW1wO2Zsb3ctJmd0O2ZsYWdzKSkKJiM0MzsJaWYgKHVubGlrZWx5KCF0ZXN0X2JpdChORl9GTE9XX0NPTkZJUk1FRCwgJmFtcDtmbG93LSZndDtmbGFncykpIHx8CiYjNDM7CSAgICB0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCAmYW1wO2Zsb3ctJmd0O2ZsYWdzKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlpZiAodW5saWtlbHkobmZfY3RfaXNfZHlpbmcoZmxvdy0mZ3Q7Y3QpKSkKQEAgLTU2OCwxNSAmIzQzOzU3MCwxOSBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X3RhYmxlX2V4dGVuZF9jdF90aW1lb3V0KHN0cnVjdCBuZl9jb25uICpjdCkKIHN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsCiAJCQkJICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpCiB7Ci0JYm9vbCB0ZWFyZG93biA9IHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sICZhbXA7Zmxvdy0mZ3Q7ZmxhZ3MpOwomIzQzOwlib29sIHRlYXJkb3duOwomIzQzOwomIzQzOwlpZiAoIXRlc3RfYml0KE5GX0ZMT1dfQ09ORklSTUVELCAmYW1wO2Zsb3ctJmd0O2ZsYWdzKSkKJiM0MzsJCXJldHVybjsKIAogCWlmIChuZl9mbG93X2hhc19leHBpcmVkKGZsb3cpIHx8CiAJICAgIG5mX2N0X2lzX2R5aW5nKGZsb3ctJmd0O2N0KSB8fAogCSAgICBuZl9mbG93X2N1c3RvbV9nYyhmbG93X3RhYmxlLCBmbG93KSkgewogCQlmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7CiAJCXRlYXJkb3duID0gdHJ1ZTsKLQl9IGVsc2UgaWYgKCF0ZWFyZG93bikgewomIzQzOwl9IGVsc2UgaWYgKCF0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCAmYW1wO2Zsb3ctJmd0O2ZsYWdzKSkgewogCQluZl9mbG93X3RhYmxlX2V4dGVuZF9jdF90aW1lb3V0KGZsb3ctJmd0O2N0KTsKJiM0MzsJCXRlYXJkb3duID0gZmFsc2U7CiAJfQogCiAJaWYgKHRlYXJkb3duKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDM1CgkJCQkJCQlvdXRwdXQ6IDE3MQoJCQkJCQkJdGhvdWdodHM6IDg5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBGaXhpbmcgYSBSYWNlLCBOb3QgSW50cm9kdWNpbmcgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIGZsb3cgb2ZmbG9hZCBjb2RlLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBzaXR1YXRpb24gd2hlcmUgYSBmbG93IGVudHJ5IHdhcyBnZXR0aW5nIGluc2VydGVkIGludG8gdGhlIHJoYXNodGFibGUgYmVmb3JlIGl0IHdhcyBmdWxseSBpbml0aWFsaXplZCwgbGVhZGluZyB0byBwb3RlbnRpYWwgYWNjZXNzIGJ5IG90aGVyIHRocmVhZHMgKGxpa2UgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIG9yIGxvb2t1cHMpIGJlZm9yZSBpdCB3YXMgcmVhZHkuCgpNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIG9yaWdpbmFsIGlzc3VlIGludm9sdmVkIGluc2VydGluZyB0aGUgJiMzNDtSRVBMWSYjMzQ7IGRpcmVjdGlvbiBlbnRyeSBpbnRvIHRoZSBoYXNoIHRhYmxlIGJlZm9yZSB0aGUgJiMzNDtPUklHSU5BTCYjMzQ7IGRpcmVjdGlvbiBlbnRyeSwgd2hpY2ggd2FzbiYjMzk7dCBmdWxseSBpbml0aWFsaXplZC4gVGhlIEdDIG9ubHkgaXRlcmF0ZXMgb3JpZ2luYWwtZGlyZWN0aW9uIGVudHJpZXM7IHB1Ymxpc2ggb3JpZ2luYWwgbGFzdC4gVGhpcyBwYXRjaCBjbGV2ZXJseSBmbGlwcyB0aGUgaW5zZXJ0aW9uIG9yZGVyIChPUklHSU5BTCB0aGVuIFJFUExZKSBhbmQgaW50cm9kdWNlcyBhIGBORl9GTE9XX0NPTkZJUk1FRGAgZmxhZyB0byBhY3QgYXMgYSAmIzM0O3JlYWR5JiMzNDsgc2lnbmFsLiBUaGUgbG9va3VwIGFuZCBHQyBmdW5jdGlvbnMgYXJlIHRoZW4gdXBkYXRlZCB0byBiYWlsIG91dCBlYXJseSBpZiB0aGlzIGZsYWcgaXNuJiMzOTt0IHNldC4KClRoZSBjb3JlIG9mIG15IGFuYWx5c2lzIGlzIHRoaXM6IHdoaWxlIHRoZSBpbml0aWFsIHByb2JsZW0gY291bGQgaGF2ZSByZXN1bHRlZCBpbiB1bmRlZmluZWQgYmVoYXZpb3IgZnJvbSBhY2Nlc3NpbmcgcGFydGlhbGx5IGluaXRpYWxpemVkIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpdCB3YXMgZHVlIHRvIGEgY29uY3VycmVuY3kgaXNzdWUsIG5vdCB0aGUgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpwZXIgc2UqLiBJdCYjMzk7cyBhIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgYWNjZXNzIGlzc3VlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBhbmQgS0NTQU4gKEtlcm5lbCBDb250cm9sLWZsb3cgSW50ZWdyaXR5KSBhcmUgZGVzaWduZWQgdG8gZGV0ZWN0LiBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzIHVzZWQgdG8gZGV0ZWN0IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJhY2UgY29uZGl0aW9uIG1lYW50IHRoYXQgbWVtb3J5IG1heSBub3QgaGF2ZSBiZWVuIGZ1bGx5IGluaXRpYWxpemVkLiBCdXQgdGhlIHByb2JsZW0gaXMgYWNjZXNzaW5nIGludmFsaWQgbWVtb3J5IGFuZCBub3QgYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlIHBhdGNoIGl0c2VsZiBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgaXQgZG9lc24mIzM5O3QgaGF2ZSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IHJlbGllcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaXQgZG9lc24mIzM5O3QgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcyBhcm91bmQgYm91bmRzIGNoZWNrcyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSBmbG93IHN0cnVjdCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGJlZm9yZSBgZmxvd19vZmZsb2FkX2FkZGAsIHNvIGl0IGlzIG5vdCBhIEtNU0FOIHByb2JsZW0uIFRoZSByYWNlIGlzIGJlaW5nIGFkZHJlc3NlZCBieSB0aGlzIHBhdGNoLgoKTXkgcXVpY2sgY2hlY2sgaXMgdG8gbG9vayBhdCB0aGUgYGZsb3dfb2ZmbG9hZF9hbGxvY2AgZnVuY3Rpb24uIEJ1dCB0aGVyZSBpcyBubyBuZWVkIGZvciB0aGlzLCBzaW5jZSB0aGUgcHJvYmxlbSBpcyBjb25jdXJyZW5jeS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpcyBhIGJ1ZyBmaXggZm9jdXNlZCBvbiBjb25jdXJyZW5jeSBhbmQgc2hvdWxkIG5vdCBiZSB0ZXN0ZWQgd2l0aCBLTVNBTi4gSSB3aWxsIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIChyYWNlIGNvbmRpdGlvbikgZHVyaW5nIHRoZSBhZGRpdGlvbiBvZiBhIGZsb3cgdG8gdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlLiBCeSBpbnRyb2R1Y2luZyB0aGUgYE5GX0ZMT1dfQ09ORklSTUVEYCBmbGFnIGFuZCBjaGFuZ2luZyB0aGUgcmhhc2h0YWJsZSBpbnNlcnRpb24gb3JkZXIsIGl0IHByZXZlbnRzIGNvbmN1cnJlbnQgbG9va3VwcyBvciBnYXJiYWdlIGNvbGxlY3Rpb24gZnJvbSBhY2Nlc3NpbmcgYSBmbG93IGJlZm9yZSBpdCBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgYWRkZWQuIENvbmN1cnJlbmN5IGJ1Z3Mgb2YgdGhpcyBuYXR1cmUgdHlwaWNhbGx5IGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaGUgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UgKGluZm8tbGVha3MpIG9yIGNvbXBsZXggdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCBzcGVjaWZpY2FsbHkgcmVxdWlyZSBLTVNBTi4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSAocmFjZSBjb25kaXRpb24pIGR1cmluZyB0aGUgYWRkaXRpb24gb2YgYSBmbG93IHRvIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZS4gQnkgaW50cm9kdWNpbmcgdGhlIGBORl9GTE9XX0NPTkZJUk1FRGAgZmxhZyBhbmQgY2hhbmdpbmcgdGhlIHJoYXNodGFibGUgaW5zZXJ0aW9uIG9yZGVyLCBpdCBwcmV2ZW50cyBjb25jdXJyZW50IGxvb2t1cHMgb3IgZ2FyYmFnZSBjb2xsZWN0aW9uIGZyb20gYWNjZXNzaW5nIGEgZmxvdyBiZWZvcmUgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIGFkZGVkLiBDb25jdXJyZW5jeSBidWdzIG9mIHRoaXMgbmF0dXJlIHR5cGljYWxseSBsZWFkIHRvIHVzZS1hZnRlci1mcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgY29weWluZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIChpbmZvLWxlYWtzKSBvciBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgc3BlY2lmaWNhbGx5IHJlcXVpcmUgS01TQU4uIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDozOTo0OC43MTg4ODIwODFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTA0NzA0ODI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORVRGSUxURVJfSU5HUkVTU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgICBcIk5FVF9BQ1RfQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmbG93X29mZmxvYWRfYWRkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSAocmFjZSBjb25kaXRpb24pIGR1cmluZyB0aGUgYWRkaXRpb24gb2YgYSBmbG93IHRvIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZS4gQnkgaW50cm9kdWNpbmcgdGhlIGBORl9GTE9XX0NPTkZJUk1FRGAgZmxhZyBhbmQgY2hhbmdpbmcgdGhlIHJoYXNodGFibGUgaW5zZXJ0aW9uIG9yZGVyLCBpdCBwcmV2ZW50cyBjb25jdXJyZW50IGxvb2t1cHMgb3IgZ2FyYmFnZSBjb2xsZWN0aW9uIGZyb20gYWNjZXNzaW5nIGEgZmxvdyBiZWZvcmUgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIGFkZGVkLiBDb25jdXJyZW5jeSBidWdzIG9mIHRoaXMgbmF0dXJlIHR5cGljYWxseSBsZWFkIHRvIHVzZS1hZnRlci1mcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgY29weWluZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIChpbmZvLWxlYWtzKSBvciBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgc3BlY2lmaWNhbGx5IHJlcXVpcmUgS01TQU4uIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGNvcmUgYnkgaW50cm9kdWNpbmcgYSBuZXcgTkZfRkxPV19DT05GSVJNRUQgZmxhZy4gSXQgbW9kaWZpZXMgZmxvd19vZmZsb2FkX2FkZCB0byBzZXQgdGhpcyBmbGFnIGFmdGVyIGluc2VydGluZyBib3RoIGRpcmVjdGlvbnMgb2YgdGhlIGZsb3cgaW50byB0aGUgcmhhc2h0YWJsZSwgYW5kIHVwZGF0ZXMgbG9va3VwIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMgdG8gaWdub3JlIHVuY29uZmlybWVkIGZsb3dzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDozOTo0OC43MTg4ODgyODFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNjk0MTUxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJkMzUzOWFiZGY1MGExOGUyMWQ5YzAzNDNkMDMzZWMyNjlkY2IwOWRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMDA6Mzk6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcXG5pbmRleCBjZTQxNDExODk2MmY1Li42MThkMjZlNDlmZGY2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXFxuQEAgLTE4OSw2ICsxODksNyBAQCBlbnVtIG5mX2Zsb3dfZmxhZ3Mge1xcbiBcXHRORl9GTE9XX0hXX1BFTkRJTkcsXFxuIFxcdE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCxcXG4gXFx0TkZfRkxPV19IV19FU1RBQkxJU0hFRCxcXG4rXFx0TkZfRkxPV19DT05GSVJNRUQsXFxuIH07XFxuIFxcbiBlbnVtIGZsb3dfb2ZmbG9hZF90eXBlIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcXG5pbmRleCA4YjExNjVmMmI1YTQ5Li4xZTJjNGExZGI5YTcwIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXFxuQEAgLTMzMiwxOCArMzMyLDE3IEBAIGludCBmbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxuIFxcdGZsb3ctXFx1MDAzZXRpbWVvdXQgPSBuZl9mbG93dGFibGVfdGltZV9zdGFtcCArIGZsb3dfb2ZmbG9hZF9nZXRfdGltZW91dChmbG93KTtcXG4gXFxuIFxcdGVyciA9IHJoYXNodGFibGVfaW5zZXJ0X2Zhc3QoXFx1MDAyNmZsb3dfdGFibGUtXFx1MDAzZXJoYXNodGFibGUsXFxuLVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmZsb3ctXFx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX1JFUExZXS5ub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZmbG93LVxcdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0ubm9kZSxcXG4gXFx0XFx0XFx0XFx0ICAgICBuZl9mbG93X29mZmxvYWRfcmhhc2hfcGFyYW1zKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHQvKiBHQyBvbmx5IGl0ZXJhdGVzIG9yaWdpbmFsLWRpcmVjdGlvbiBlbnRyaWVzOyBwdWJsaXNoIG9yaWdpbmFsIGxhc3QuICovXFxuIFxcdGVyciA9IHJoYXNodGFibGVfaW5zZXJ0X2Zhc3QoXFx1MDAyNmZsb3dfdGFibGUtXFx1MDAzZXJoYXNodGFibGUsXFxuLVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmZsb3ctXFx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX09SSUdJTkFMXS5ub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZmbG93LVxcdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9SRVBMWV0ubm9kZSxcXG4gXFx0XFx0XFx0XFx0ICAgICBuZl9mbG93X29mZmxvYWRfcmhhc2hfcGFyYW1zKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2Zmxvd190YWJsZS1cXHUwMDNlcmhhc2h0YWJsZSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZmbG93LVxcdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9SRVBMWV0ubm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZmbG93LVxcdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0ubm9kZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIG5mX2Zsb3dfb2ZmbG9hZF9yaGFzaF9wYXJhbXMpO1xcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuQEAgLTM1Myw2ICszNTIsOCBAQCBpbnQgZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxcbiBcXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd190YWJsZSkpXFxuIFxcdFxcdG5mX2Zsb3dfb2ZmbG9hZF9hZGQoZmxvd190YWJsZSwgZmxvdyk7XFxuIFxcbitcXHRzZXRfYml0KE5GX0ZMT1dfQ09ORklSTUVELCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2FkZCk7XFxuQEAgLTQxMiw3ICs0MTMsOCBAQCBmbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuIFxcbiBcXHRkaXIgPSB0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRpcjtcXG4gXFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcXG4tXFx0aWYgKHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncykpXFxuK1xcdGlmICh1bmxpa2VseSghdGVzdF9iaXQoTkZfRkxPV19DT05GSVJNRUQsIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncykpIHx8XFxuK1xcdCAgICB0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShuZl9jdF9pc19keWluZyhmbG93LVxcdTAwM2VjdCkpKVxcbkBAIC01NjgsMTUgKzU3MCwxOSBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X3RhYmxlX2V4dGVuZF9jdF90aW1lb3V0KHN0cnVjdCBuZl9jb25uICpjdClcXG4gc3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpXFxuIHtcXG4tXFx0Ym9vbCB0ZWFyZG93biA9IHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncyk7XFxuK1xcdGJvb2wgdGVhcmRvd247XFxuK1xcbitcXHRpZiAoIXRlc3RfYml0KE5GX0ZMT1dfQ09ORklSTUVELCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRpZiAobmZfZmxvd19oYXNfZXhwaXJlZChmbG93KSB8fFxcbiBcXHQgICAgbmZfY3RfaXNfZHlpbmcoZmxvdy1cXHUwMDNlY3QpIHx8XFxuIFxcdCAgICBuZl9mbG93X2N1c3RvbV9nYyhmbG93X3RhYmxlLCBmbG93KSkge1xcbiBcXHRcXHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XFxuIFxcdFxcdHRlYXJkb3duID0gdHJ1ZTtcXG4tXFx0fSBlbHNlIGlmICghdGVhcmRvd24pIHtcXG4rXFx0fSBlbHNlIGlmICghdGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgXFx1MDAyNmZsb3ctXFx1MDAzZWZsYWdzKSkge1xcbiBcXHRcXHRuZl9mbG93X3RhYmxlX2V4dGVuZF9jdF90aW1lb3V0KGZsb3ctXFx1MDAzZWN0KTtcXG4rXFx0XFx0dGVhcmRvd24gPSBmYWxzZTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHRlYXJkb3duKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjM5OjQ5LjE0NjU3NjQxNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc2MzEzMzM2MDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5FVEZJTFRFUl9JTkdSRVNTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkVUX0FDVF9DVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZsb3dfb2ZmbG9hZF9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjb3JlIGJ5IGludHJvZHVjaW5nIGEgbmV3IE5GX0ZMT1dfQ09ORklSTUVEIGZsYWcuIEl0IG1vZGlmaWVzIGZsb3dfb2ZmbG9hZF9hZGQgdG8gc2V0IHRoaXMgZmxhZyBhZnRlciBpbnNlcnRpbmcgYm90aCBkaXJlY3Rpb25zIG9mIHRoZSBmbG93IGludG8gdGhlIHJoYXNodGFibGUsIGFuZCB1cGRhdGVzIGxvb2t1cCBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uIGxvZ2ljIHRvIGlnbm9yZSB1bmNvbmZpcm1lZCBmbG93cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmQzNTM5YWJkZjUwYTE4ZTIxZDljMDM0M2QwMzNlYzI2OWRjYjA5ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDAwOjM5OjQ3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbmluZGV4IGNlNDE0MTE4OTYyZjUuLjYxOGQyNmU0OWZkZjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG5AQCAtMTg5LDYgKzE4OSw3IEBAIGVudW0gbmZfZmxvd19mbGFncyB7XG4gXHRORl9GTE9XX0hXX1BFTkRJTkcsXG4gXHRORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsXG4gXHRORl9GTE9XX0hXX0VTVEFCTElTSEVELFxuK1x0TkZfRkxPV19DT05GSVJNRUQsXG4gfTtcbiBcbiBlbnVtIGZsb3dfb2ZmbG9hZF90eXBlIHtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuaW5kZXggOGIxMTY1ZjJiNWE0OS4uMWUyYzRhMWRiOWE3MCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbkBAIC0zMzIsMTggKzMzMiwxNyBAQCBpbnQgZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxuIFx0Zmxvdy1cdTAwM2V0aW1lb3V0ID0gbmZfZmxvd3RhYmxlX3RpbWVfc3RhbXAgKyBmbG93X29mZmxvYWRfZ2V0X3RpbWVvdXQoZmxvdyk7XG4gXG4gXHRlcnIgPSByaGFzaHRhYmxlX2luc2VydF9mYXN0KFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlcmhhc2h0YWJsZSxcbi1cdFx0XHRcdCAgICAgXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9SRVBMWV0ubm9kZSxcbitcdFx0XHRcdCAgICAgXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0ubm9kZSxcbiBcdFx0XHRcdCAgICAgbmZfZmxvd19vZmZsb2FkX3JoYXNoX3BhcmFtcyk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0LyogR0Mgb25seSBpdGVyYXRlcyBvcmlnaW5hbC1kaXJlY3Rpb24gZW50cmllczsgcHVibGlzaCBvcmlnaW5hbCBsYXN0LiAqL1xuIFx0ZXJyID0gcmhhc2h0YWJsZV9pbnNlcnRfZmFzdChcdTAwMjZmbG93X3RhYmxlLVx1MDAzZXJoYXNodGFibGUsXG4tXHRcdFx0XHQgICAgIFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUxdLm5vZGUsXG4rXHRcdFx0XHQgICAgIFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfUkVQTFldLm5vZGUsXG4gXHRcdFx0XHQgICAgIG5mX2Zsb3dfb2ZmbG9hZF9yaGFzaF9wYXJhbXMpO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlcmhhc2h0YWJsZSxcbi1cdFx0XHRcdCAgICAgICBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX1JFUExZXS5ub2RlLFxuK1x0XHRcdFx0ICAgICAgIFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUxdLm5vZGUsXG4gXHRcdFx0XHQgICAgICAgbmZfZmxvd19vZmZsb2FkX3JoYXNoX3BhcmFtcyk7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG5AQCAtMzUzLDYgKzM1Miw4IEBAIGludCBmbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG4gXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd190YWJsZSkpXG4gXHRcdG5mX2Zsb3dfb2ZmbG9hZF9hZGQoZmxvd190YWJsZSwgZmxvdyk7XG4gXG4rXHRzZXRfYml0KE5GX0ZMT1dfQ09ORklSTUVELCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYWRkKTtcbkBAIC00MTIsNyArNDEzLDggQEAgZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuIFxuIFx0ZGlyID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpcjtcbiBcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XG4tXHRpZiAodGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncykpXG4rXHRpZiAodW5saWtlbHkoIXRlc3RfYml0KE5GX0ZMT1dfQ09ORklSTUVELCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSkgfHxcbitcdCAgICB0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRpZiAodW5saWtlbHkobmZfY3RfaXNfZHlpbmcoZmxvdy1cdTAwM2VjdCkpKVxuQEAgLTU2OCwxNSArNTcwLDE5IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZXh0ZW5kX2N0X3RpbWVvdXQoc3RydWN0IG5mX2Nvbm4gKmN0KVxuIHN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4gXHRcdFx0XHQgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgdm9pZCAqZGF0YSlcbiB7XG4tXHRib29sIHRlYXJkb3duID0gdGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncyk7XG4rXHRib29sIHRlYXJkb3duO1xuK1xuK1x0aWYgKCF0ZXN0X2JpdChORl9GTE9XX0NPTkZJUk1FRCwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncykpXG4rXHRcdHJldHVybjtcbiBcbiBcdGlmIChuZl9mbG93X2hhc19leHBpcmVkKGZsb3cpIHx8XG4gXHQgICAgbmZfY3RfaXNfZHlpbmcoZmxvdy1cdTAwM2VjdCkgfHxcbiBcdCAgICBuZl9mbG93X2N1c3RvbV9nYyhmbG93X3RhYmxlLCBmbG93KSkge1xuIFx0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4gXHRcdHRlYXJkb3duID0gdHJ1ZTtcbi1cdH0gZWxzZSBpZiAoIXRlYXJkb3duKSB7XG4rXHR9IGVsc2UgaWYgKCF0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSkge1xuIFx0XHRuZl9mbG93X3RhYmxlX2V4dGVuZF9jdF90aW1lb3V0KGZsb3ctXHUwMDNlY3QpO1xuK1x0XHR0ZWFyZG93biA9IGZhbHNlO1xuIFx0fVxuIFxuIFx0aWYgKHRlYXJkb3duKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDozOTo0OS4xNDY1Nzc5MDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDU4OTY5NjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgTmV0ZmlsdGVyIEZsb3cgVGFibGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AuIEl0J3MgaW50cm9kdWNpbmcgYSBuZXcgYE5GX0ZMT1dfQ09ORklSTUVEYCBmbGFnIHRvIGBuZl9mbG93X2ZsYWdzYC4gSW1tZWRpYXRlbHksIEkgc2VlIHRoaXMgaXMgYWJvdXQgc3RhdGUgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGZsb3cgdGFibGUsIHByb2JhYmx5IHRvIGltcHJvdmUgY29uY3VycmVuY3kgb3IgY29ycmVjdG5lc3MuXG5cblNwZWNpZmljYWxseSwgdGhlIHBhdGNoIHNlZW1zIHRvIG1vZGlmeSBob3cgbmV3IGZsb3dzIGFyZSBhZGRlZCAoYGZsb3dfb2ZmbG9hZF9hZGRgKS4gSXQncyBub3cgaW5zZXJ0aW5nIHRoZSBvcmlnaW5hbCBkaXJlY3Rpb24sIHRoZW4gdGhlIHJlcGx5LCBhbmQgdGhlbiAqZmluYWxseSogc2V0dGluZyB0aGlzIGBORl9GTE9XX0NPTkZJUk1FRGAgZmxhZy4gVGhpcyBzY3JlYW1zIFwiYXRvbWljaXR5XCIgdG8gbWUg4oCTIHRoZXkncmUgZW5zdXJpbmcgdGhlIGZsb3cgaXNuJ3QgY29uc2lkZXJlZCBcInJlYWR5XCIgdW50aWwgYWxsIGVzc2VudGlhbCBwYXJ0cyBhcmUgaW4gcGxhY2UuXG5cblRoZSBtb2RpZmljYXRpb25zIHRvIGBmbG93X29mZmxvYWRfbG9va3VwYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYCBhcmUgZnVydGhlciBpbmRpY2F0b3JzLiBUaGV5J3JlIGJvdGggY2hlY2tpbmcgZm9yIGBORl9GTE9XX0NPTkZJUk1FRGAuICBJZiBpdCBpc24ndCBzZXQsIGBmbG93X29mZmxvYWRfbG9va3VwYCByZXR1cm5zIE5VTEwgKGVmZmVjdGl2ZWx5IGhpZGluZyB0aGUgaW5jb21wbGV0ZSBlbnRyeSkgYW5kIGBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcGAgYmFpbHMgZWFybHkuICBUaGlzIGlzIGEgY2xldmVyIHdheSB0byBwcmV2ZW50IHByZW1hdHVyZSBsb29rdXBzIG9yIGdhcmJhZ2UgY29sbGVjdGlvbiBvZiBmbG93cyB0aGF0IGFyZW4ndCBmdWxseSBwb3B1bGF0ZWQuXG5cbkl0J3MgY2xlYXIgdGhhdCB0aGUgZ29hbCBoZXJlIGlzIHRvIGZpeCBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbi4gIFRoZSBjb21tZW50IG1lbnRpb25zIHRoYXQgdGhlIHJhY2UgaW52b2x2ZXMgYSBmbG93IGJlaW5nIGxvb2tlZCB1cCBvciBHQydkIGJlZm9yZSBpdCdzIGZ1bGx5IGFkZGVkLiBUaGlzIGlzIGEgY29tbW9uIGFuZCBuYXN0eSBwcm9ibGVtIGluIGNvbmN1cnJlbnQgc3lzdGVtcywgYW5kIHRoaXMgYXBwcm9hY2ggaXMgYSBzb2xpZCB3YXkgdG8gYWRkcmVzcyBpdC4gIEl0IGxvb2tzIGxpa2UgdGhpcyBwcmV2ZW50cyBvcGVyYXRpb25zIG9uIGFuIGluY29tcGxldGUgZmxvdy5cblxuTm93LCBsZXQncyBmaWd1cmUgb3V0IHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBpbnZvbHZlZC4gIEkga25vdyB0aGF0IGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jYCBpcyBnb2luZyB0byBiZSBjb21waWxlZCBpZiBgQ09ORklHX05GX0ZMT1dfVEFCTEVgIGlzIGRlZmluZWQuIExldCdzIGNvbmZpcm0gdGhhdCBieSBjaGVja2luZyBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMzgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDozOTo1NC42MDU1NTAzOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE5MTAwNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd190YWJsZV9jb3JlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE0Mj1vYmotJChDT05GSUdfTkZfRkxPV19UQUJMRSlcXHQrPSBuZl9mbG93X3RhYmxlLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0MzpuZl9mbG93X3RhYmxlLW9ianNcXHRcXHQ6PSBuZl9mbG93X3RhYmxlX2NvcmUubyBuZl9mbG93X3RhYmxlX2lwLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ0LVxcdFxcdFxcdFxcdCAgIG5mX2Zsb3dfdGFibGVfcGF0aC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6Mzk6NTQuNzU3NDY0OTc0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1MDMwNjAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgRmxvdyBUYWJsZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYENPTkZJR19ORl9GTE9XX1RBQkxFYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIG9yIG92ZXJsb29raW5nIHBvdGVudGlhbCBjb25mbGljdHMuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgaGluZ2Ugb24gdGhpcyBvbmUuIFVuZGVyc3RhbmRpbmcgdGhlIHByZXJlcXVpc2l0ZXMgd2lsbCBwYWludCB0aGUgZnVsbCBwaWN0dXJlIG9mIGhvdyB0aGlzIG9wdGlvbiBmaXRzIGludG8gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgzNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjM5OjU3LjgwNzc3MzY5M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQxNjI0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfRkxPV19UQUJMRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIyLVxcdGJvb2wgXFxcIlN1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDozOTo1Ny44NTQxOTM5MThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQ0OTA3ODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE5GX0ZMT1dfVEFCTEUgS2NvbmZpZyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgYE5GX0ZMT1dfVEFCTEVgIEtjb25maWcuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBmZWF0dXJlLiBXaGF0IGFyZSB0aGUga2V5IGJ1aWxkLXRpbWUgZGVjaXNpb25zIHdlJ3JlIHByZXNlbnRlZCB3aXRoPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBmZWF0dXJlcyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gZXZlbiAqYmUqIGEgdmlhYmxlIG9wdGlvbj8gQXJlIHRoZXJlIHNwZWNpZmljIG5ldHdvcmtpbmcgc3RhY2sgcHJlcmVxdWlzaXRlcywgb3IgaXMgaXQgdGllZCB0byBjZXJ0YWluIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAoZS5nLiwgaGFyZHdhcmUgb2ZmbG9hZCBzdXBwb3J0KT8gSSBuZWVkIHRvIGtub3cgdGhlIHByZWNvbmRpdGlvbnMuXG4qICAgKipEZWZhdWx0IEJlaGF2aW9yOioqIFdoYXQncyB0aGUgZGVmYXVsdCBzdGF0ZSDigJMgaXMgaXQgYnVpbHQtaW4sIG1vZHVsYXIsIG9yIGRpc2FibGVkPyBVbmRlcnN0YW5kaW5nIHRoZSBkZWZhdWx0IHByb3ZpZGVzIGNyaXRpY2FsIGNvbnRleHQuXG4qICAgKipDb25maWd1cmF0aW9uIE9wdGlvbnM6KiogQmV5b25kIGp1c3QgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoZSBtb2R1bGUsIHdoYXQgdHVuYWJsZSBwYXJhbWV0ZXJzIGV4aXN0PyBBcmUgdGhlcmUgb3B0aW9ucyByZWxhdGVkIHRvIGZsb3cgdGFibGUgc2l6ZSwgYWdpbmcsIG9yIHNwZWNpZmljIG9mZmxvYWQgZmVhdHVyZXM/IFRoaXMgd2lsbCBpbmZvcm0gYW55IG9wdGltaXphdGlvbiBzdHJhdGVneSBJIG5lZWQuXG4qICAgKipIZWxwIFRleHQ6KiogVGhpcyBzaG91bGQgYmUgcXVpdGUgaW5zaWdodGZ1bC4gV2hhdCBkbyB0aGUgZGVzY3JpcHRpb25zIHRlbGwgdXMgYWJvdXQgdGhlIGludGVuZGVkIHB1cnBvc2UgYW5kIHVzZSBjYXNlcyBmb3IgdGhlIGZlYXR1cmU/IFRoZSBoZWxwIHRleHQgc2hvdWxkIGNsdWUgbWUgaW4gb24gd2hhdCBraW5kIG9mIHByb2JsZW1zIHRoaXMgc29sdmVzLlxuKiAgICoqQ29uZmxpY3RzOioqIEknbGwgYmUgb24gdGhlIGxvb2tvdXQgZm9yIGFueSBvYnZpb3VzIGNvbmZsaWN0cyB3aXRoIG90aGVyIG5ldHdvcmtpbmcgZmVhdHVyZXMuIEFyZSB0aGVyZSBhbnkga25vd24gaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBlc3RhYmxpc2hlZCBzb2x1dGlvbnMgdGhhdCBJJ2xsIG5lZWQgdG8gY29uc2lkZXI/XG4qICAgKipDb25kaXRpb25hbCBEZXBlbmRlbmNpZXM6KiogSSBhbnRpY2lwYXRlIHRoZXJlIHdpbGwgYmUgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGJhc2VkIG9uIHRoZSBrZXJuZWwncyBhcmNoaXRlY3R1cmUsIGhhcmR3YXJlLCBvciBhbm90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxuXG5JJ20gZXNzZW50aWFsbHkgdHJ5aW5nIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBgTkZfRkxPV19UQUJMRWAuIEl0J3MgYWxsIGFib3V0IGNvbnRleHQsIHJlc3RyaWN0aW9ucywgYW5kIHRoZSBrbm9icyBJIGNhbiB0d2Vhay5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIwNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQwOjAxLjg5OTEwNDE2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MTEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MTE6XFx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG4gNzEyOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcXFwiXFxuIDcxMzpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9JTkdSRVNTXFxuIDcxNDpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbiA3MTU6XFx0XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcXG4gNzE2OlxcdFxcdGhlbHBcXG4gNzE3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgZmxvdyB0YWJsZSBjb3JlIGluZnJhc3RydWN0dXJlLlxcbiA3MTg6XFx0XFxuIDcxOTpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuIDcyMDpcXHRcXG4gNzIxOlxcdGNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xcbiA3MjI6XFx0XFx0Ym9vbCBcXFwiU3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcXFwiXFxuIDcyMzpcXHRcXHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcXG4gNzI0OlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbiA3MjU6XFx0XFx0aGVscFxcbiA3MjY6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGZvciB0aGUgZmxvdyB0YWJsZSBvZmZsb2FkIHN0YXRpc3RpY3NcXG4gNzI3OlxcdFxcdCAgdG8gYmUgc2hvd24gaW4gcHJvY2ZzIHVuZGVyIG5ldC9uZXRmaWx0ZXIvbmZfZmxvd3RhYmxlLlxcbiA3Mjg6XFx0XFxuIDcyOTpcXHRjb25maWcgTkVURklMVEVSX1hUQUJMRVNcXG4gNzMwOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgWHRhYmxlcyBzdXBwb3J0IChyZXF1aXJlZCBmb3IgaXBfdGFibGVzKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6NDA6MDEuODk5MjQ1OTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE5OTg5MzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE5ldGZpbHRlciBGbG93IE9mZmxvYWQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIE5ldGZpbHRlciBmbG93IG9mZmxvYWQgc2l0dWF0aW9uLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXJlIHRoZSBkZXBlbmRlbmNpZXMuIFdlJ3ZlIGdvdCBgTkVURklMVEVSX0lOR1JFU1NgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9UQUJMRVNgLiBUaGF0IG1lYW5zIHRvIGdldCB0aGlzIHdob2xlIHRoaW5nIHdvcmtpbmcsIHRoZSBgRW5hYmxlQ29uZmlnc2AgbmVlZCB0byBpbmNsdWRlIGBORl9GTE9XX1RBQkxFYCAobmF0dXJhbGx5KSwgYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYC4gV2UgbmVlZCB0aG9zZSBidWlsZGluZyBibG9ja3MgaW4gcGxhY2UgYmVmb3JlIHdlIGNhbiBldmVuIGJlZ2luLlxuXG5OZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGBGb2N1c1N5bWJvbHNgLiBFc3NlbnRpYWxseSwgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IHBsYXllcnMgaGVyZSB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZD8gTG9va3MgbGlrZSB3ZSBoYXZlOlxuXG4qICAgYGZsb3dfb2ZmbG9hZF9hZGRgXG4qICAgYGZsb3dfb2ZmbG9hZF9sb29rdXBgXG4qICAgYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYFxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogYXJlIHRoZXNlIHN5bWJvbHMgZXhwb3J0ZWQgb3IgYXJlIHRoZXkgc3RhdGljIHdpdGhpbiB0aGUgbW9kdWxlPyBLbm93aW5nIHRoYXQgdGVsbHMgbWUgaG93IGVhc2lseSB0aGV5IGNhbiBiZSBhY2Nlc3NlZCBhbmQgdXNlZC4gYGZsb3dfb2ZmbG9hZF9hZGRgIGlzICpkZWZpbml0ZWx5KiBleHBvcnRlZCDigJMgSSBjYW4gc2VlIGBFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYWRkKWAuIE5vdywgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIGBmbG93X29mZmxvYWRfbG9va3VwYCBpcyBhbHNvIGV4cG9ydGVkLiBUaGF0J3MgdGhlIG5leHQgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NDQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MDowNi4yMTkyMzg2MzRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTg2Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZsb3dfb2ZmbG9hZF9sb29rdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTQwMT1zdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjQwMjpmbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MDMtXFx0XFx0ICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MjQtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NDI1OkVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9sb29rdXApO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDI2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MDowNi4yNjY4MzA3MThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg0OTY4NTU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipFeGFtaW5pbmcgRmxvdyBPZmZsb2FkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZsb3cgb2ZmbG9hZCBmdW5jdGlvbnMuIExldCBtZSBzZWUuLi4gYGZsb3dfb2ZmbG9hZF9sb29rdXBgIC0geWVwLCB0aGF0J3MgZGVmaW5pdGVseSBleHBvcnRlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgY2FuIGFjY2VzcyBhbmQgdXNlIGl0IGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgbm8gcHJvYmxlbSB0aGVyZS4gTm93LCB0aGUgb3RoZXIgb25lLCBgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXBgLi4uQWgsIGdvb2QuIFRoYXQgb25lJ3MgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGF0J3Mgd2hhdCBJIGV4cGVjdGVkIGZvciBhIGdhcmJhZ2UgY29sbGVjdGlvbiBzdGVwLiBJdCdzIG1lYW50IHRvIGJlIGFuIGludGVybmFsIGhlbHBlciwgbm90IHNvbWV0aGluZyBleHBvc2VkIGZvciBleHRlcm5hbCB1c2UuIEV4Y2VsbGVudC4gSnVzdCBhcyBwbGFubmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjE1LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6NDA6MDkuMTE2NTE5MTE3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzYyNDE5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NTEyPXN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZXh0ZW5kX2N0X3RpbWVvdXQoc3RydWN0IG5mX2Nvbm4gKmN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy01NjktXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo1NzA6c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTU3MS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgdm9pZCAqZGF0YSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NjA2PXZvaWQgbmZfZmxvd190YWJsZV9nY19ydW4oc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYwNy17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo2MDg6XFx0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3dfdGFibGUsIG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwLCBOVUxMKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYwOS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQwOjA5LjE2MDE0ODI2M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzgyNTQ5MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIEZsb3cgVGFibGUgR2FyYmFnZSBDb2xsZWN0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBnYXJiYWdlIGNvbGxlY3Rpb24uIEkgc2VlIHRoYXQgdGhlIGBuZl9mbG93X3RhYmxlX2djX3J1bmAgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGluaXRpYXRpbmcgdGhpcyBwcm9jZXNzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyBgbmZfZmxvd190YWJsZV9nY19ydW5gIGV4cG9ydGVkLCBvciBpcyBpdCBpbnRlcm5hbD9cIiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBxdWVzdGlvbi4gVW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgaGVscHMgZGV0ZXJtaW5lIGhvdyBpdCdzIGludm9rZWQgYW5kIGlmIEkgY2FuIHBvdGVudGlhbGx5IGhvb2sgaW50byBpdCBmb3IgZGVidWdnaW5nIG9yIGN1c3RvbSBleHRlbnNpb25zLiBUaGVuIEkgbm90aWNlIHRoZSBjYWxsIHRvIGBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcGAuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGlzIHRoZSBjcnV4IG9mIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gcHJvZ3Jlc3Nlcy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXBgIGFjdHVhbGx5IGRvZXMgYW5kIGhvdyBpdCdzIGludGVncmF0ZWQgaW50byB0aGUgYmlnZ2VyIGdhcmJhZ2UgY29sbGVjdGlvbiBvcGVyYXRpb24gd2l0aGluIE5ldGZpbHRlci4gVGhpcyB3aWxsIGRyaXZlIG15IG5leHQgcXVlc3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMTUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MDoxMi41NDI3MDEwNTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzM2OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfdGFibGVfZ2NfcnVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz01NzA9c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjA1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NjA2OnZvaWQgbmZfZmxvd190YWJsZV9nY19ydW4oc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYwNy17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTYxMT1zdGF0aWMgdm9pZCBuZl9mbG93X29mZmxvYWRfd29ya19nYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYxNS1cXHRmbG93X3RhYmxlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZl9mbG93dGFibGUsIGdjX3dvcmsud29yayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo2MTY6XFx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02MTctXFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsIFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VnY193b3JrLCBIWik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc2Nz12b2lkIG5mX2Zsb3dfdGFibGVfZnJlZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NzYtXFx0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3dfdGFibGUsIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cCwgTlVMTCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3Nzc6XFx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NzgtXFx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoX2NsZWFudXAoZmxvd190YWJsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQwOjEyLjU4OTQ0Mjg1OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTYxODczOTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBSZWFjaCBvZiBgbmZfZmxvd190YWJsZV9nY19ydW5gKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBuZl9mbG93X3RhYmxlX2djX3J1bmAgZnVuY3Rpb24uIFRoZSBwcm9ibGVtIGlzLCBpdCBpc24ndCBleHBsaWNpdGx5IGV4cG9ydGVkLCB3aGljaCBpcyBhIGJpdCBvZiBhIGh1cmRsZS4gIEJ1dCwgSSBzZWUgaXQncyBjYWxsZWQgZnJvbSBgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2NgLiBBbmQgdGhhdCdzIGludGVyZXN0aW5nIGJlY2F1c2UgKnRoYXQqIGZ1bmN0aW9uIGlzIGEgd29ya3F1ZXVlIGNhbGxiYWNrLiBUaGF0IGNvdWxkIG1lYW4gaXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVuY3kgYW5kIHNjaGVkdWxpbmcuICBBbHNvLCBpdCdzIGNhbGxlZCBmcm9tIGBuZl9mbG93X3RhYmxlX2ZyZWVgLCB3aGljaCBpcyBhbm90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludC5cblxuV2FpdCBhIHNlY29uZC4uLkknbSBnZXR0aW5nIGFoZWFkIG9mIG15c2VsZi4gIEp1c3QgYmVjYXVzZSBpdCAqbG9va3MqIGxpa2UgaXQncyBub3QgZXhwb3J0ZWQgZG9lc24ndCBtYWtlIGl0IHNvLiBJJ3ZlIGJlZW4gZm9vbGVkIGJ5IHRoaXMgYmVmb3JlLCBzbyBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpc24ndCBhIGNhc2Ugd2hlcmUgaXQgKmNvdWxkKiBiZSBleHBvcnRlZCwgcGVyaGFwcyB0aHJvdWdoIHNvbWUgb3RoZXIgbWVjaGFuaXNtLiBJIHJlYWxseSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbmZfZmxvd190YWJsZV9nY19ydW5gIGlzIGFjdHVhbGx5IHN0YXRpYyBiZWZvcmUgSSBkcmF3IGFueSBjb25jbHVzaW9ucyBhYm91dCBpdHMgYWNjZXNzaWJpbGl0eSBhbmQsIHRoZXJlZm9yZSwgdGhlIHdheXMgaXQgbWlnaHQgYmUgaW52b2tlZCBvciB1c2VkLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg3MiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQwOjE2LjU1MTMyMDE0MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2MzY5NzUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKm5mX2Zsb3dfdGFibGVfZ2NfcnVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQwOjE2LjU5Njk2NTk4N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDk1NzA4ODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkZvY3VzaW5nIElud2FyZDogV2hlcmUgdGhlIFJlYWwgQWN0aW9uIElzKipcblxuUmlnaHQsIHNvIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggZXhwb3J0cyBoZXJlLCBzY3JhdGNoIHRoYXQgbGluZSBvZiB0aGlua2luZy4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgbGFzZXItc2hhcnAgb24gdGhlc2UgdHdvIGZ1bmN0aW9uczogYGZsb3dfb2ZmbG9hZF9hZGRgIGFuZCBgZmxvd19vZmZsb2FkX2xvb2t1cGAuIEJ1dCB3YWl0Li4uIGhhbmcgb24gYSBtaW51dGUuLi4gYGZsb3dfb2ZmbG9hZF9sb29rdXBgIGlzIGEgKmhvdC1wYXRoKiBmdW5jdGlvbi4gVGhhdCdzIHRoZSBvbmUgdGhhdCdzIGNhbGxlZCBmb3IgKmV2ZXJ5IHNpbmdsZSBwYWNrZXQqIOKAkyBpdCdzIHRoZSBjcml0aWNhbCBsb29rdXAuIFRoYXQgbWVhbnMgcGVyZm9ybWFuY2UgaGVyZSBpcyBwYXJhbW91bnQuIFNvLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgY29udGV4dHMgb2YgYGZsb3dfb2ZmbG9hZF9sb29rdXBgLiBHb3R0YSBzZWUgKndoZXJlKiBpdCdzIGJlaW5nIGludm9rZWQuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIG92ZXJhbGwgaW1wYWN0IGFuZCBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjczLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6NDA6MjAuMDkyNjc3NDU4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzkyNDQyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbG93X29mZmxvYWRfbG9va3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYz0zNj1icGZfeGRwX2Zsb3dfdHVwbGVfbG9va3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmMtNDYtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jOjQ3OlxcdHR1cGxlaGFzaCA9IGZsb3dfb2ZmbG9hZF9sb29rdXAobmZfZmxvd190YWJsZSwgdHVwbGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy00OC1cXHRpZiAoIXR1cGxlaGFzaClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NDAxPXN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NDAyOmZsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQwMy1cXHRcXHQgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQyNC19XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo0MjU6RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2xvb2t1cCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MjYtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00NjE9c3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ2MjpuZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDYzLVxcdFxcdCAgICAgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDcyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ3MzpcXHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcXHUwMDI2dHVwbGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ3NC19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04MDc9bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTgyMy1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4MjQ6XFx0dHVwbGVoYXNoID0gbmZfZmxvd19vZmZsb2FkX2xvb2t1cChcXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCBza2IpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTgyNS1cXHRpZiAoIXR1cGxlaGFzaClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTExMDg9bmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTE5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjExMjA6XFx0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXFx1MDAyNnR1cGxlKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTIxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6NDA6MjAuMTQwNjExMTkzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzEyMzYyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBDYWxsIFBhdGhzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBmdW5jdGlvbiBjYWxscy4gUmlnaHQsIGBmbG93X29mZmxvYWRfbG9va3VwYCBpcyBkZWZpbml0ZWx5IGEgaG90LXBhdGggZnVuY3Rpb24sIGNhbGxlZCBkaXJlY3RseSBmcm9tIHRoZSBob29rLiBUaGF0J3MgYSBrZXkgY29uc2lkZXJhdGlvbiBmb3IgcGVyZm9ybWFuY2UsIHNvIHdlIG5lZWQgdG8gZW5zdXJlIGl0J3Mgb3B0aW1pemVkLiBOb3csIGBmbG93X29mZmxvYWRfYWRkYCBzZWVtcyBsZXNzIHBlcmZvcm1hbmNlLWNyaXRpY2FsLCBzaW5jZSBpdCdzIG9ubHkgaW52b2tlZCB3aGVuIGEgbmV3IGZsb3cgaXMgb2ZmbG9hZGVkLiBTdGlsbCwgaXQncyBvcGVyYXRpbmcgb24gdGhlIGRhdGEgcGF0aCwgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAgYW5kIG9mZmxvYWQsIHNvIHdlIGNhbid0IGNvbXBsZXRlbHkgaWdub3JlIGl0IGVpdGhlci4gV2FpdCwgaG9sZCBvbi4gSSBuZWVkIHRvIGJlIG1vcmUgcHJlY2lzZSBhYm91dCB0aGUgY2FsbCBzdGFjayBmb3IgYGZsb3dfb2ZmbG9hZF9hZGRgLiBJICp0aGluayogaXQncyBjYWxsZWQgZnJvbSBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBvciBzb21ldGhpbmcgc2ltaWxhci4uLiBMZXQgbWUgdmVyaWZ5IHRoYXQgdG8gYmUgc3VyZS4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgZXhlY3V0aW9uIHBhdGggdG8gcHJvcGVybHkgYXNzZXNzIGl0cyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMjksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6NDA6MjQuNjcxODUwNTg2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQwODA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbG93X29mZmxvYWRfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MzA5PXVuc2lnbmVkIGxvbmcgZmxvd19vZmZsb2FkX2dldF90aW1lb3V0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTMyNy1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjMyODppbnQgZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzI5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzUyLVxcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93X3RhYmxlKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjM1MzpcXHRcXHRuZl9mbG93X29mZmxvYWRfYWRkKGZsb3dfdGFibGUsIGZsb3cpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzU0LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNTgtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MzU5OkVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9hZGQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzYwLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xOS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjIwOnN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmZfZmxvd19vZmZsb2FkX2FkZF93cTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTIxLXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmZfZmxvd19vZmZsb2FkX2RlbF93cTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTA2NT1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfcXVldWVfd29yayhzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNzAtXFx0XFx0TkZfRkxPV19UQUJMRV9TVEFUX0lOQ19BVE9NSUMobmV0LCBjb3VudF93cV9hZGQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA3MTpcXHRcXHRxdWV1ZV93b3JrKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EsIFxcdTAwMjZvZmZsb2FkLVxcdTAwM2V3b3JrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNzItXFx0fSBlbHNlIGlmIChvZmZsb2FkLVxcdTAwM2VjbWQgPT0gRkxPV19DTFNfREVTVFJPWSkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTEzPXZvaWQgbmZfZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTI0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTEyNTp2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEyNi1cXHRcXHRcXHQgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE3Mz12b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNzUtXFx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExNzY6XFx0XFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3Ny1cXHRcXHRmbHVzaF93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2RlbF93cSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEyOTQ9aW50IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9pbml0KHZvaWQpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjk1LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyOTY6XFx0bmZfZmxvd19vZmZsb2FkX2FkZF93cSAgPSBhbGxvY193b3JrcXVldWUoXFxcIm5mX2Z0X29mZmxvYWRfYWRkXFxcIixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyOTctXFx0XFx0XFx0XFx0XFx0XFx0ICBXUV9VTkJPVU5EIHwgV1FfU1lTRlMsIDApO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTI5ODpcXHRpZiAoIW5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjk5LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzE1LWVycl9kZWxfd3E6XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzE2OlxcdGRlc3Ryb3lfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMxNy1cXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTMyMD12b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9leGl0KHZvaWQpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzIxLXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMjI6XFx0ZGVzdHJveV93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2FkZF93cSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzIzLVxcdGRlc3Ryb3lfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9NTA9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTEyMC1cXHRfX3NldF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjEyMTpcXHRyZXQgPSBmbG93X29mZmxvYWRfYWRkKGZsb3d0YWJsZSwgZmxvdyk7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTIyLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MDoyNC43MjAyNjUxMDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYwNjI2MjA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBGbG93IE9mZmxvYWQgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoaXMgZmxvdyBvZmZsb2FkIGltcGxlbWVudGF0aW9uLCBhbmQgYGZsb3dfb2ZmbG9hZF9hZGRgIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBmdW5jdGlvbi4gSXQncyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgd2hpY2ggaXMgdGhlIGV2YWx1YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBgZmxvd19vZmZsb2FkYCBleHByZXNzaW9uIGluIG5mdGFibGVzLiBUaGF0J3MgYSBzb2xpZCBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyBmbG93cyBhcmUgYWN0dWFsbHkgYWRkZWQgdG8gdGhlIGZsb3cgdGFibGUsIHNvIHRoYXQncyB3aGVyZSBJIHNob3VsZCBmb2N1cy5cblxuSG1tLCBidXQgd2FpdCBhIHNlY29uZCwgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgaXMgYSBob3QtcGF0aCBmdW5jdGlvbiEgSXQgZ2V0cyBjYWxsZWQgKmZvciBldmVyeSBwYWNrZXQqIHRoYXQgbWF0Y2hlcyBhbiBvZmZsb2FkIHJ1bGUuIFRoYXQgc3VnZ2VzdHMgaXQncyBwZXJmb3JtYW5jZS1jcml0aWNhbCwgZXZlbiB0aG91Z2ggaXQgb25seSBhZGRzIHRoZSBmbG93IG9uY2UuIFNvLCBJIGhhdmUgdG8gYmUgY2FyZWZ1bCB3aGVuIGxvb2tpbmcgYXQgdGhpcyBvbmUuXG5cbklzIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbj8gSSBzZWUgdGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXBgLCB3aGljaCBnZXRzIGNhbGxlZCBmcm9tIGBuZl9mbG93X3RhYmxlX2djX3J1bmAsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSBgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2NgLiBJbnRlcmVzdGluZywgYnV0IHNpbmNlIGBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcGAgaXMgc3RhdGljLCBJIGNhbid0IHJlYWxseSBmb2N1cyBvbiBpdC4gU28gdGhhdCBicmluZ3MgbWUgYmFjayB0byBgZmxvd19vZmZsb2FkX2FkZGAuXG5cbk5vdywgbGV0J3Mgc2VlIGlmIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIGlzIGV4cG9ydGVkIG9yIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zLiBOb3BlLCBpdCdzIHN0YXRpYy4gT2theSwgaXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gSSdsbCBuZWVkIHRvIGNoZWNrIGBuZl9mbG93X3RhYmxlX2NvcmUuY2AgZm9yIGFueSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMzQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6NDA6MzAuMzI2NTMwMTg5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQxMjgwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipmbG93X29mZmxvYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTUzPXN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3dfb2ZmbG9hZF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqY3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc2LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc3OkVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9hbGxvYyk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MTY0PXZvaWQgZmxvd19vZmZsb2FkX3JvdXRlX2luaXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMTcwLX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjE3MTpFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfcm91dGVfaW5pdCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xNzItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTI2MT12b2lkIGZsb3dfb2ZmbG9hZF9mcmVlKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTI3Mi19XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyNzM6RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2ZyZWUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjc0LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0zMjg9aW50IGZsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzU4LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjM1OTpFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYWRkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM2MC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTM2MT12b2lkIGZsb3dfb2ZmbG9hZF9yZWZyZXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM3OC19XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzozNzk6RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX3JlZnJlc2gpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzgwLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0zOTM9dm9pZCBmbG93X29mZmxvYWRfdGVhcmRvd24oc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzk4LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjM5OTpFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfdGVhcmRvd24pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDAwLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz00MDI9Zmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MjQtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NDI1OkVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9sb29rdXApO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDI2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MDozMC4zNzI5NDgzMjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1OTY2NDA5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgRmxvdyBPZmZsb2FkIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmbG93IG9mZmxvYWQgZnVuY3Rpb25zLCBhbmQgaXQgc2VlbXMgbGlrZSBgZmxvd19vZmZsb2FkX2FkZGAgaXMgZGVmaW5pdGVseSBhIGtleSBwbGF5ZXIsIG9idmlvdXNseSBkZWFsaW5nIHdpdGggdGhlIGFkZGl0aW9uIG9mIGZsb3dzLiBUaGVuLCB3ZSd2ZSBnb3QgYGZsb3dfb2ZmbG9hZF90ZWFyZG93bmAsIHdoaWNoIEknZCBleHBlY3QgaXMgaW50aW1hdGVseSB0aWVkIHRvIHRoZSBmbG93IGxpZmVjeWNsZSwgaGFuZGxpbmcgdGhlIHJlbW92YWwuIEFuZCwgYGZsb3dfb2ZmbG9hZF9hbGxvY2AgaXMgcmVsYXRlZCBhcyB3ZWxsLCBwcm9iYWJseSBtYW5hZ2luZyB0aGUgYWxsb2NhdGlvbiBvZiByZXNvdXJjZXMuXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQgZWxzZSBpcyBpbiBwbGF5IGNvbmZpZy13aXNlLiBJJ20gZ29pbmcgdG8gc2NhbiBmb3Igb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEFoLCBoZXJlIHdlIGdvLCBgQ09ORklHX05GX0ZMT1dfVEFCTEVgIOKAkyB0aGF0J3MgdGhlIGJpZyBvbmUsIHRoZSBjb3JlIGNvbXBvbmVudCBJJ20gaW50ZXJlc3RlZCBpbi4gVGhlbiwgdGhlIGRlcGVuZGVuY2llcywgZ290IHRvIGhhdmUgYENPTkZJR19ORl9UQUJMRVNgLCBgQ09ORklHX05GX0NPTk5UUkFDS2AsIGFuZCBgQ09ORklHX05FVEZJTFRFUl9JTkdSRVNTYCBhbGwgd29ya2luZyB0b2dldGhlci5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbSBnb2luZyB0byB0YWtlIGEgcXVpY2sgbG9vayBpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBjb25maXJtIHRoZSBjb250ZXh0IGFyb3VuZCBgTkZfRkxPV19UQUJMRWAuIFRoaXMgd2lsbCBwcm92aWRlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgYWxsIHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjExLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQwOjM0LjkzMjYxNjA5NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcxMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcxMTpcXHRjb25maWcgTkZfRkxPV19UQUJMRVxcbiA3MTI6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG4gNzEzOlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0lOR1JFU1NcXG4gNzE0OlxcdFxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXFxuIDcxNTpcXHRcXHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xcbiA3MTY6XFx0XFx0aGVscFxcbiA3MTc6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBmbG93IHRhYmxlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUuXFxuIDcxODpcXHRcXG4gNzE5OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG4gNzIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MDozNC45MzI3MjAwNjZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyMjYzMDU2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoZSBpbXBvcnRhbmNlIG9mIGBORl9GTE9XX1RBQkxFYCwgYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgZGVwZW5kZW5jeSByZXNvbHV0aW9uLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgZXZlcnl0aGluZyBpcyBjb3JyZWN0bHkgY29uZmlndXJlZCBmb3IgdGhlIGRlc2lyZWQgZnVuY3Rpb25hbGl0eS5cblxuTm93LCBteSB0cmFpbiBvZiB0aG91Z2h0IHR1cm5zIHRvd2FyZCBgTkVURklMVEVSX0lOR1JFU1NgLiBHaXZlbiBpdHMgcm9sZSwgSSBuZWVkIHRvIGNoZWNrIOKAkyBhbmQgY2hlY2sgdGhvcm91Z2hseSDigJMgdG8gc2VlIGlmIHRoZXJlIGFyZSAqYW55KiBvdGhlciwgcGVyaGFwcyBsZXNzIG9idmlvdXMsIGRlcGVuZGVuY2llcyB0aGF0IG5lZWQgdG8gYmUgYWNjb3VudGVkIGZvci4gV2UncmUgdGFsa2luZyBzdWJ0bGUgaW50ZXJhY3Rpb25zIGhlcmUuIE1pc3Npbmcgb25lIG9mIHRoZXNlIGNhbiBsZWFkIHRvIHNvbWUgcmVhbGx5IGZydXN0cmF0aW5nIGRlYnVnZ2luZyBzZXNzaW9ucyBkb3duIHRoZSBsaW5lLiBTbywgSSBuZWVkIHRvIG1ldGhvZGljYWxseSB2ZXJpZnkgKmV2ZXJ5dGhpbmcqIHRoYXQgaXQgcmVsaWVzIG9uLCB3aGV0aGVyIGV4cGxpY2l0bHkgc3RhdGVkIG9yIHBvdGVudGlhbGx5IGltcGxpZWQgd2l0aGluIHRoZSBrZXJuZWwncyBtb2R1bGVzIGFuZCBzdWItc3lzdGVtcy4gVGhhdCdzIHRoZSBjcml0aWNhbCBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTc3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MDozOC44NTUzNTQwMDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNjcxNDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRGSUxURVJfSU5HUkVTU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTI9bWVudSBcXFwiQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvblxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1OmNvbmZpZyBORVRGSUxURVJfSU5HUkVTU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02LVxcdGJvb2wgXFxcIk5ldGZpbHRlciBpbmdyZXNzIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQwOjM4LjkwNzAyOTQ5N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTM5NjQyMDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgTmV0ZmlsdGVyIEZsb3cgVGFibGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgTkVURklMVEVSX0lOR1JFU1NgIGlzIGEgYm9vbGVhbiwgZ29vZCB0byBrbm93LiBUaGUgY29yZSBvZiB0aGlzIGxvb2tzIGxpa2UgaXQgaGluZ2VzIG9uIGBORl9GTE9XX1RBQkxFYCwgYW5kIHRoYXQncyBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AuIERlZmluaXRlbHkgc29tZXRoaW5nIHRvIGZvY3VzIG9uLiBJdCdzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19ORl9GTE9XX1RBQkxFYCBpcyBlbmFibGVkLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBhZGRpbmcgYW5kIGdhcmJhZ2UgY29sbGVjdGluZyBmbG93IG9mZmxvYWRzLiBTb3VuZHMgbGlrZSBhIHRleHRib29rIGZ1enppbmcgdGFyZ2V0IOKAkyBhIHJhY2UgY29uZGl0aW9uIGlzIHJpcGUgZm9yIGV4cGxvaXRhdGlvbi5cblxuTGV0J3MgcHVsbCB0b2dldGhlciB0aGUga2V5IGRldGFpbHMuIFllYWgsIHRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIEknbGwgc3VtbWFyaXplIHRoYXQ6IGBXb3J0aEZ1enppbmc6IHRydWVgLiBUaGUgY3JpdGljYWwgc3ltYm9scyB0byBsb29rIGF0IGFyZSBsaWtlbHkgZ29pbmcgdG8gYmUgYGZsb3dfb2ZmbG9hZF9hZGRgLCBzaW5jZSB0aGF0J3Mgd2hhdCdzIGdldHRpbmcgbW9kaWZpZWQuIFNvIGBGb2N1c1N5bWJvbHM6IFtcImZsb3dfb2ZmbG9hZF9hZGRcIl1gLiBUbyBidWlsZCB0aGlzLCBJJ2xsIG5lZWQgYEVuYWJsZUNvbmZpZ3M6IFtcIk5GX0ZMT1dfVEFCTEVcIiwgXCJORVRGSUxURVJfSU5HUkVTU1wiLCBcIk5GX0NPTk5UUkFDS1wiLCBcIk5GX1RBQkxFU1wiXWAuIFRoZSByZWFzb24gaXMgcHJldHR5IGNsZWFyOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBsb2dpYyB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgZmxvdyBvZmZsb2FkIGFkZGl0aW9uIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gYnkgaW50cm9kdWNpbmcgYSBuZXcgTkZfRkxPV19DT05GSVJNRUQgZmxhZy5cIlxuXG5Ob3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBTaG91bGQgSSBhZGQgb3RoZXIgc3ltYm9scz8gYGZsb3dfb2ZmbG9hZF9sb29rdXBgPyBJdCdzIGEgaG90LXBhdGggZnVuY3Rpb24sIHNvIGxpa2VseSBub3QgdGhlIGluaXRpYWwgZW50cnkgcG9pbnQuIFRoZW4gdGhlcmUncyBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgYnV0IHRoYXQncyBzdGF0aWMsIHNvIGl0J3MgcHJvYmFibHkgbm90IGFzIGltcGFjdGZ1bCBoZXJlLiBgZmxvd19vZmZsb2FkX2FkZGAgaXMgKnRoZSogZXhwb3J0ZWQgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQuIFRoYXQncyB0aGUga2V5LlxuXG5MZXQncyBub3QgZm9yZ2V0IGFib3V0IG90aGVyIGNvbmZpZ3MuIEknbSBnb2luZyB0byB3YW50IHRvIG1ha2Ugc3VyZSBJIGNhbiB0cmlnZ2VyIHRoaXMgdGhyb3VnaCB0aGUgbm9ybWFsIHVzZXIgaW50ZXJmYWNlcywgc28gYENPTkZJR19ORlRfRkxPV19PRkZMT0FEYCBpcyBsaWtlbHkgcmVxdWlyZWQsIG90aGVyd2lzZSBJIHdpbGwgbm90IGJlIGFibGUgdG8gYWN0dWFsbHkgcmVhY2ggdGhlIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBmdXp6ZWQgdmlhIG5mdGFibGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU0OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MDo0NS40NDY2NzM2MDJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTA0MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORlRfRkxPV19PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDk4PWNvbmZpZyBORlRfRVhUSERSX0RDQ1BcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjUwNDpjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDUtXFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfRkxPV19UQUJMRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MDo0NS40OTU1ODcwNTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzNjU2ODgwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyB0aGUgRmxvdyBUYWJsZSBPZmZsb2FkIEV4cHJlc3Npb24qKlxuXG5SaWdodCwgc28gYE5GVF9GTE9XX09GRkxPQURgIGlzIHRoZSBuYW1lIG9mIHRoYXQgc3BlY2lmaWMgbmZ0YWJsZXMgZXhwcmVzc2lvbiB0aGF0IGRlYWxzIHdpdGggdGhlIGZsb3cgdGFibGUuIE9rYXksIHRoYXQncyB3aGF0IEkgdGhvdWdodCwgYnV0IGl0IGFsd2F5cyBwYXlzIHRvIGRvdWJsZS1jaGVjay4gVGltZSB0byBxdWlja2x5IGludmVzdGlnYXRlIGl0cyBkZXBlbmRlbmNpZXMuIE5lZWQgdG8gc2VlIHdoYXQgb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcyBhcmUgcmVxdWlyZWQgZm9yIHRoYXQgdG8gZnVuY3Rpb24gcHJvcGVybHkuIEdvdHRhIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQxNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQwOjQ4LjgzMjE1ODY3NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwNCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwNDpcXHRjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxcbiA1MDU6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfRkxPV19UQUJMRVxcbiA1MDY6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgaGFyZHdhcmUgZmxvdyBvZmZsb2FkIG1vZHVsZVxcXCJcXG4gNTA3OlxcdFxcdGhlbHBcXG4gNTA4OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXFxcImZsb3dfb2ZmbG9hZFxcXCIgZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gdXNlIHRvXFxuIDUwOTpcXHRcXHQgIGNob29zZSB3aGF0IGZsb3dzIGFyZSBwbGFjZWQgaW50byB0aGUgaGFyZHdhcmUuXFxuIDUxMDpcXHRcXG4gNTExOlxcdGNvbmZpZyBORlRfQ09OTkxJTUlUXFxuIDUxMjpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBjb25ubGltaXQgbW9kdWxlXFxcIlxcbiA1MTM6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6NDA6NDguODMyMjcwMTg2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzIzNTExNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCB3ZXJlIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRW5hYmxpbmcgVXNlci1TcGFjZSBGbG93IE9mZmxvYWQqKlxuXG5BbHJpZ2h0LCB0aGUgY29yZSBpc3N1ZSBpcyB0aGF0IGBORlRfRkxPV19PRkZMT0FEYCBpcyB0aGUgKmtleSogaW5ncmVkaWVudCBoZXJlLiBJdCdzIHRoZSBtZWNoYW5pc20gd2UgbmVlZCB0byBhY3R1YWxseSBraWNrIG9mZiB0aGlzIGZsb3cgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5IGRpcmVjdGx5IGZyb20gdXNlciBzcGFjZSB0aHJvdWdoIG5mdGFibGVzLiBTbywgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0byBpbmNsdWRlIHRoYXQgbW9kdWxlLiBJdCdzIG5vdCBvcHRpb25hbDsgaXQncyBmdW5kYW1lbnRhbC5cblxuTm93LCBiZWZvcmUgSSBjb21taXQgdG8gdGhhdCwgSSBzaG91bGQgZG8gYSBxdWljayBzYW5pdHkgY2hlY2suIEkgbmVlZCB0byBlbnN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBhIGRpZmZlcmVudCwgcGVyaGFwcyBtb3JlIGVsZWdhbnQgb3IgZWZmaWNpZW50LCB3YXkgdG8gdHJpZ2dlciBgZmxvd19vZmZsb2FkX2FkZGAuIEkgdmFndWVseSByZW1lbWJlciBhY3RfY3QgbWlnaHQgYmUgcmVsZXZhbnQuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgaXRzIGludGVyYWN0aW9uIHdpdGggdGhpcyB3aG9sZSBmbG93LiBQZXJoYXBzIGl0IHByb3ZpZGVzIGFuIGFsdGVybmF0aXZlIHBhdGg/IEJldHRlciB0byBiZSB0aG9yb3VnaCBiZWZvcmUgZmluYWxpemluZyB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NjksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQwOjUyLjMwNDYyNDcyM1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwOTQ0OTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZsb3dfb2ZmbG9hZF9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2N0LmM9NDI0PXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2FkZChzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTQ1My1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDU0OlxcdGVyciA9IGZsb3dfb2ZmbG9hZF9hZGQoXFx1MDAyNmN0X2Z0LVxcdTAwM2VuZl9mdCwgZW50cnkpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy00NTUtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6NDA6NTIuNTc1NTc4Nzc1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzY0NDg4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDb25maXJtaW5nIGBhY3RfY3RgIFVzYWdlIGFuZCBQaXZvdGluZyB0byBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSB3YXMgZG91YmxlLWNoZWNraW5nIHNvbWUgY29kZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBjb25uZWN0aW9uIHRyYWNraW5nLCBhbmQgeWVwLCBgbmV0L3NjaGVkL2FjdF9jdC5jYCBkZWZpbml0ZWx5IHV0aWxpemVzIGl0LiBHb29kLCB0aGF0IGNvbmZpcm1zIHRoZSBpbml0aWFsIGFzc3VtcHRpb24uIE5vdyB0aGF0IEkndmUgZXN0YWJsaXNoZWQgdGhhdCBgYWN0X2N0YCBpcyBpbmRlZWQgaW4gcGxheSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtb2R1bGUgaXMgYmVpbmcgc2V0IHVwIGFuZCB3aGF0IHBhcmFtZXRlcnMgaXQncyB1c2luZy4gV2hhdCBhcmUgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgaXRzIGJlaGF2aW9yPyBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCB0aGUgYnJvYWRlciBjb25uZWN0aW9uIHRyYWNraW5nIGluZnJhc3RydWN0dXJlIGFuZCBob3cgaXRzIGZlYXR1cmUgc2V0IGlzIGVuYWJsZWQuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvbmZpZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxODEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MDo1NS43MTIwMjk4NzNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDI2MTAyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0FDVF9DVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz04NTM9Y29uZmlnIE5FVF9BQ1RfQ09OTk1BUktcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTg2NC1cXG5uZXQvc2NoZWQvS2NvbmZpZzo4NjU6Y29uZmlnIE5FVF9BQ1RfQ1RJTkZPXFxubmV0L3NjaGVkL0tjb25maWctODY2LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgQ29ubmVjdGlvbiBNYXJrIEFjdGlvbnNcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz05MDY9Y29uZmlnIE5FVF9BQ1RfVFVOTkVMX0tFWVxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctOTE2LVxcbm5ldC9zY2hlZC9LY29uZmlnOjkxNzpjb25maWcgTkVUX0FDVF9DVFxcbm5ldC9zY2hlZC9LY29uZmlnLTkxOC1cXHR0cmlzdGF0ZSBcXFwiY29ubmVjdGlvbiB0cmFja2luZyB0YyBhY3Rpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQwOjU1Ljg2NjI5OTcwN1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQ2NzUwMjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgTkVUX0FDVF9DVGAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORVRfQUNUX0NUYC4gQmVmb3JlIEkgZGlnIGluIHRvbyBkZWVwIG9uIGFueXRoaW5nLCBsZXQgbWUgbWVudGFsbHkgbWFwIG91dCB0aGUgcG90ZW50aWFsIGRvd25zdHJlYW0gZWZmZWN0cyBvZiBhbnkgY2hhbmdlcy4gSSB3YW50IHRvIG1pbmltaXplIGFueSBzdXJwcmlzZXMgb3IgY2FzY2FkaW5nIGlzc3Vlcy4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGlkZW50aWZ5aW5nIHRoZSBkaXJlY3QgcGFyZW50IGNvbXBvbmVudHM7IEkgbmVlZCB0byBjb25zaWRlciBpbmRpcmVjdCBjb25uZWN0aW9ucyBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIG1vZHVsZXMuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgdGhpcyBpbXBhY3RzIGRhdGEgZmxvdywgcGVyZm9ybWFuY2UsIGFuZCBhbnkgaW50ZWdyYXRpb24gcG9pbnRzLiBJdCdzIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGJlZm9yZSBJIGdldCBpbnRvIHRoZSB3ZWVkcywgZW5zdXJpbmcgSSdtIGFwcHJvYWNoaW5nIHRoaXMgc3lzdGVtYXRpY2FsbHkgYW5kIHRob3JvdWdobHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTgyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6NDA6NTkuMDEzMDUyOTA5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkxNyxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkxNzpcXHRjb25maWcgTkVUX0FDVF9DVFxcbiA5MTg6XFx0XFx0dHJpc3RhdGUgXFxcImNvbm5lY3Rpb24gdHJhY2tpbmcgdGMgYWN0aW9uXFxcIlxcbiA5MTk6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVCBcXHUwMDI2XFx1MDAyNiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgKCFORl9OQVQgfHwgTkZfTkFUKSBcXHUwMDI2XFx1MDAyNiBORl9GTE9XX1RBQkxFXFxuIDkyMDpcXHRcXHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WU1xcbiA5MjE6XFx0XFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXFxuIDkyMjpcXHRcXHRoZWxwXFxuIDkyMzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgc2VuZGluZyB0aGUgcGFja2V0cyB0byBjb25udHJhY2sgbW9kdWxlLlxcbiA5MjQ6XFx0XFxuIDkyNTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDkyNjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6NDA6NTkuMDEzMTMzMTU5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNjMzODAxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldGZpbHRlciBGbG93IFRhYmxlIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBjbGVhciB0aGF0IGBORVRfQUNUX0NUYCBpcyBpbnRyaW5zaWNhbGx5IGxpbmtlZCB0byBgTkVUX0NMU19BQ1RgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9GTE9XX1RBQkxFYC4gR2l2ZW4gdGhhdCwgSSdtIGdvaW5nIHRvIGFkZCBgTkVUX0FDVF9DVGAgYW5kIGBORlRfRkxPV19PRkZMT0FEYCB0byB0aGUgY29uZmlndXJhdGlvbiwgYWxvbmdzaWRlIGBORl9GTE9XX1RBQkxFYCwgYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYCwgYXMgdGhleSBhcmUgcHJlcmVxdWlzaXRlcyBvciBzdXBwb3J0aXZlIGNvbXBvbmVudHMuIFRoZSBmb2N1cyBoZXJlIGlzIG9uIGBmbG93X29mZmxvYWRfYWRkYC5cblxuVGhlIGNvcmUgb2YgdGhpcyBpcyBhIHJhY2UgY29uZGl0aW9uIGZpeCB3aXRoaW4gdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlLCB3aGljaCBpcyBhZGRyZXNzZWQgYnkgYSBuZXcgYE5GX0ZMT1dfQ09ORklSTUVEYCBmbGFnLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGZsb3dfb2ZmbG9hZF9hZGRgIHRvIHNldCB0aGlzIGZsYWcgYWZ0ZXIgaW5zZXJ0aW5nIGJvdGggZmxvdyBkaXJlY3Rpb25zIGludG8gdGhlIHJoYXNodGFibGUuIENyaXRpY2FsbHksIGl0IGFsc28gdXBkYXRlcyB0aGUgbG9va3VwIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMgdG8gaWdub3JlIGFueSBmbG93cyB0aGF0IGhhdmVuJ3QgYmVlbiBjb25maXJtZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgdG91Y2hpbmcgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBzbyB3ZSBuZWVkIHRvIGJlIHZlcnkgY2FyZWZ1bC5cblxuSSdtIHRoaW5raW5nIHRoaXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgYSBgc2V0LXJlc3VsdHNgIGFjdGlvbiwgYXMgaXQncyBhIHZlcnkgY2xlYXIgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDk0OSwiT3V0cHV0VG9rZW5zIjoxNjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MTowNS4zNzY1MTYwODFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzM5MzI1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkVURklMVEVSX0lOR1JFU1NcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCIsXG4gICAgXCJORVRfQUNUX0NUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmxvd19vZmZsb2FkX2FkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGNvcmUgYnkgaW50cm9kdWNpbmcgYSBuZXcgTkZfRkxPV19DT05GSVJNRUQgZmxhZy4gSXQgbW9kaWZpZXMgZmxvd19vZmZsb2FkX2FkZCB0byBzZXQgdGhpcyBmbGFnIGFmdGVyIGluc2VydGluZyBib3RoIGRpcmVjdGlvbnMgb2YgdGhlIGZsb3cgaW50byB0aGUgcmhhc2h0YWJsZSwgYW5kIHVwZGF0ZXMgbG9va3VwIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMgdG8gaWdub3JlIHVuY29uZmlybWVkIGZsb3dzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5FVEZJTFRFUl9JTkdSRVNTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkVUX0FDVF9DVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZsb3dfb2ZmbG9hZF9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjb3JlIGJ5IGludHJvZHVjaW5nIGEgbmV3IE5GX0ZMT1dfQ09ORklSTUVEIGZsYWcuIEl0IG1vZGlmaWVzIGZsb3dfb2ZmbG9hZF9hZGQgdG8gc2V0IHRoaXMgZmxhZyBhZnRlciBpbnNlcnRpbmcgYm90aCBkaXJlY3Rpb25zIG9mIHRoZSBmbG93IGludG8gdGhlIHJoYXNodGFibGUsIGFuZCB1cGRhdGVzIGxvb2t1cCBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uIGxvZ2ljIHRvIGlnbm9yZSB1bmNvbmZpcm1lZCBmbG93cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6NDE6MDUuNDU5OTE2MzcyWiIsIlNlcSI6MzksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMwNjAwNDYyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQxOjA1LjQ2MDQ1NzI2MloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjMwNTQ1ODYxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgKHJhY2UgY29uZGl0aW9uKSBkdXJpbmcgdGhlIGFkZGl0aW9uIG9mIGEgZmxvdyB0byB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUuIEJ5IGludHJvZHVjaW5nIHRoZSBgTkZfRkxPV19DT05GSVJNRURgIGZsYWcgYW5kIGNoYW5naW5nIHRoZSByaGFzaHRhYmxlIGluc2VydGlvbiBvcmRlciwgaXQgcHJldmVudHMgY29uY3VycmVudCBsb29rdXBzIG9yIGdhcmJhZ2UgY29sbGVjdGlvbiBmcm9tIGFjY2Vzc2luZyBhIGZsb3cgYmVmb3JlIGl0IGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBhZGRlZC4gQ29uY3VycmVuY3kgYnVncyBvZiB0aGlzIG5hdHVyZSB0eXBpY2FsbHkgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSAoaW5mby1sZWFrcykgb3IgY29tcGxleCB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHNwZWNpZmljYWxseSByZXF1aXJlIEtNU0FOLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZDM1MzlhYmRmNTBhMThlMjFkOWMwMzQzZDAzM2VjMjY5ZGNiMDlkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDA6Mzk6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuaW5kZXggY2U0MTQxMTg5NjJmNS4uNjE4ZDI2ZTQ5ZmRmNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbkBAIC0xODksNiArMTg5LDcgQEAgZW51bSBuZl9mbG93X2ZsYWdzIHtcbiBcdE5GX0ZMT1dfSFdfUEVORElORyxcbiBcdE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCxcbiBcdE5GX0ZMT1dfSFdfRVNUQUJMSVNIRUQsXG4rXHRORl9GTE9XX0NPTkZJUk1FRCxcbiB9O1xuIFxuIGVudW0gZmxvd19vZmZsb2FkX3R5cGUge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG5pbmRleCA4YjExNjVmMmI1YTQ5Li4xZTJjNGExZGI5YTcwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuQEAgLTMzMiwxOCArMzMyLDE3IEBAIGludCBmbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG4gXHRmbG93LVx1MDAzZXRpbWVvdXQgPSBuZl9mbG93dGFibGVfdGltZV9zdGFtcCArIGZsb3dfb2ZmbG9hZF9nZXRfdGltZW91dChmbG93KTtcbiBcbiBcdGVyciA9IHJoYXNodGFibGVfaW5zZXJ0X2Zhc3QoXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VyaGFzaHRhYmxlLFxuLVx0XHRcdFx0ICAgICBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX1JFUExZXS5ub2RlLFxuK1x0XHRcdFx0ICAgICBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX09SSUdJTkFMXS5ub2RlLFxuIFx0XHRcdFx0ICAgICBuZl9mbG93X29mZmxvYWRfcmhhc2hfcGFyYW1zKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHQvKiBHQyBvbmx5IGl0ZXJhdGVzIG9yaWdpbmFsLWRpcmVjdGlvbiBlbnRyaWVzOyBwdWJsaXNoIG9yaWdpbmFsIGxhc3QuICovXG4gXHRlcnIgPSByaGFzaHRhYmxlX2luc2VydF9mYXN0KFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlcmhhc2h0YWJsZSxcbi1cdFx0XHRcdCAgICAgXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0ubm9kZSxcbitcdFx0XHRcdCAgICAgXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9SRVBMWV0ubm9kZSxcbiBcdFx0XHRcdCAgICAgbmZfZmxvd19vZmZsb2FkX3JoYXNoX3BhcmFtcyk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VyaGFzaHRhYmxlLFxuLVx0XHRcdFx0ICAgICAgIFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfUkVQTFldLm5vZGUsXG4rXHRcdFx0XHQgICAgICAgXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0ubm9kZSxcbiBcdFx0XHRcdCAgICAgICBuZl9mbG93X29mZmxvYWRfcmhhc2hfcGFyYW1zKTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbkBAIC0zNTMsNiArMzUyLDggQEAgaW50IGZsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbiBcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93X3RhYmxlKSlcbiBcdFx0bmZfZmxvd19vZmZsb2FkX2FkZChmbG93X3RhYmxlLCBmbG93KTtcbiBcbitcdHNldF9iaXQoTkZfRkxPV19DT05GSVJNRUQsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9hZGQpO1xuQEAgLTQxMiw3ICs0MTMsOCBAQCBmbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4gXG4gXHRkaXIgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyO1xuIFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbi1cdGlmICh0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSlcbitcdGlmICh1bmxpa2VseSghdGVzdF9iaXQoTkZfRkxPV19DT05GSVJNRUQsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpKSB8fFxuK1x0ICAgIHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdGlmICh1bmxpa2VseShuZl9jdF9pc19keWluZyhmbG93LVx1MDAzZWN0KSkpXG5AQCAtNTY4LDE1ICs1NzAsMTkgQEAgc3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9leHRlbmRfY3RfdGltZW91dChzdHJ1Y3QgbmZfY29ubiAqY3QpXG4gc3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKVxuIHtcbi1cdGJvb2wgdGVhcmRvd24gPSB0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbitcdGJvb2wgdGVhcmRvd247XG4rXG4rXHRpZiAoIXRlc3RfYml0KE5GX0ZMT1dfQ09ORklSTUVELCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSlcbitcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKG5mX2Zsb3dfaGFzX2V4cGlyZWQoZmxvdykgfHxcbiBcdCAgICBuZl9jdF9pc19keWluZyhmbG93LVx1MDAzZWN0KSB8fFxuIFx0ICAgIG5mX2Zsb3dfY3VzdG9tX2djKGZsb3dfdGFibGUsIGZsb3cpKSB7XG4gXHRcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcbiBcdFx0dGVhcmRvd24gPSB0cnVlO1xuLVx0fSBlbHNlIGlmICghdGVhcmRvd24pIHtcbitcdH0gZWxzZSBpZiAoIXRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG5mX2Zsb3dfdGFibGVfZXh0ZW5kX2N0X3RpbWVvdXQoZmxvdy1cdTAwM2VjdCk7XG4rXHRcdHRlYXJkb3duID0gZmFsc2U7XG4gXHR9XG4gXG4gXHRpZiAodGVhcmRvd24pIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQxOjA1LjQ2MDQ1ODE1MloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjMwNTQzMzYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBGaXhpbmcgYSBSYWNlLCBOb3QgSW50cm9kdWNpbmcgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgZmxvdyBvZmZsb2FkIGNvZGUuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhIHNpdHVhdGlvbiB3aGVyZSBhIGZsb3cgZW50cnkgd2FzIGdldHRpbmcgaW5zZXJ0ZWQgaW50byB0aGUgcmhhc2h0YWJsZSBiZWZvcmUgaXQgd2FzIGZ1bGx5IGluaXRpYWxpemVkLCBsZWFkaW5nIHRvIHBvdGVudGlhbCBhY2Nlc3MgYnkgb3RoZXIgdGhyZWFkcyAobGlrZSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Igb3IgbG9va3VwcykgYmVmb3JlIGl0IHdhcyByZWFkeS5cblxuTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBvcmlnaW5hbCBpc3N1ZSBpbnZvbHZlZCBpbnNlcnRpbmcgdGhlIFwiUkVQTFlcIiBkaXJlY3Rpb24gZW50cnkgaW50byB0aGUgaGFzaCB0YWJsZSBiZWZvcmUgdGhlIFwiT1JJR0lOQUxcIiBkaXJlY3Rpb24gZW50cnksIHdoaWNoIHdhc24ndCBmdWxseSBpbml0aWFsaXplZC4gVGhlIEdDIG9ubHkgaXRlcmF0ZXMgb3JpZ2luYWwtZGlyZWN0aW9uIGVudHJpZXM7IHB1Ymxpc2ggb3JpZ2luYWwgbGFzdC4gVGhpcyBwYXRjaCBjbGV2ZXJseSBmbGlwcyB0aGUgaW5zZXJ0aW9uIG9yZGVyIChPUklHSU5BTCB0aGVuIFJFUExZKSBhbmQgaW50cm9kdWNlcyBhIGBORl9GTE9XX0NPTkZJUk1FRGAgZmxhZyB0byBhY3QgYXMgYSBcInJlYWR5XCIgc2lnbmFsLiBUaGUgbG9va3VwIGFuZCBHQyBmdW5jdGlvbnMgYXJlIHRoZW4gdXBkYXRlZCB0byBiYWlsIG91dCBlYXJseSBpZiB0aGlzIGZsYWcgaXNuJ3Qgc2V0LlxuXG5UaGUgY29yZSBvZiBteSBhbmFseXNpcyBpcyB0aGlzOiB3aGlsZSB0aGUgaW5pdGlhbCBwcm9ibGVtIGNvdWxkIGhhdmUgcmVzdWx0ZWQgaW4gdW5kZWZpbmVkIGJlaGF2aW9yIGZyb20gYWNjZXNzaW5nIHBhcnRpYWxseSBpbml0aWFsaXplZCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSwgaXQgd2FzIGR1ZSB0byBhIGNvbmN1cnJlbmN5IGlzc3VlLCBub3QgdGhlIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAqcGVyIHNlKi4gSXQncyBhIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgYWNjZXNzIGlzc3VlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBhbmQgS0NTQU4gKEtlcm5lbCBDb250cm9sLWZsb3cgSW50ZWdyaXR5KSBhcmUgZGVzaWduZWQgdG8gZGV0ZWN0LiBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzIHVzZWQgdG8gZGV0ZWN0IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJhY2UgY29uZGl0aW9uIG1lYW50IHRoYXQgbWVtb3J5IG1heSBub3QgaGF2ZSBiZWVuIGZ1bGx5IGluaXRpYWxpemVkLiBCdXQgdGhlIHByb2JsZW0gaXMgYWNjZXNzaW5nIGludmFsaWQgbWVtb3J5IGFuZCBub3QgYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIGl0IGRvZXNuJ3QgaGF2ZSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IHJlbGllcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaXQgZG9lc24ndCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgaXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgYXJvdW5kIGJvdW5kcyBjaGVja3MgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgZmxvdyBzdHJ1Y3QgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBiZWZvcmUgYGZsb3dfb2ZmbG9hZF9hZGRgLCBzbyBpdCBpcyBub3QgYSBLTVNBTiBwcm9ibGVtLiBUaGUgcmFjZSBpcyBiZWluZyBhZGRyZXNzZWQgYnkgdGhpcyBwYXRjaC5cblxuTXkgcXVpY2sgY2hlY2sgaXMgdG8gbG9vayBhdCB0aGUgYGZsb3dfb2ZmbG9hZF9hbGxvY2AgZnVuY3Rpb24uIEJ1dCB0aGVyZSBpcyBubyBuZWVkIGZvciB0aGlzLCBzaW5jZSB0aGUgcHJvYmxlbSBpcyBjb25jdXJyZW5jeS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGEgYnVnIGZpeCBmb2N1c2VkIG9uIGNvbmN1cnJlbmN5IGFuZCBzaG91bGQgbm90IGJlIHRlc3RlZCB3aXRoIEtNU0FOLiBJIHdpbGwgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzNSwiT3V0cHV0VG9rZW5zIjoxNzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MToxNy43NjU4OTU4MzRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIChyYWNlIGNvbmRpdGlvbikgZHVyaW5nIHRoZSBhZGRpdGlvbiBvZiBhIGZsb3cgdG8gdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlLiBCeSBpbnRyb2R1Y2luZyB0aGUgYE5GX0ZMT1dfQ09ORklSTUVEYCBmbGFnIGFuZCBjaGFuZ2luZyB0aGUgcmhhc2h0YWJsZSBpbnNlcnRpb24gb3JkZXIsIGl0IHByZXZlbnRzIGNvbmN1cnJlbnQgbG9va3VwcyBvciBnYXJiYWdlIGNvbGxlY3Rpb24gZnJvbSBhY2Nlc3NpbmcgYSBmbG93IGJlZm9yZSBpdCBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgYWRkZWQuIENvbmN1cnJlbmN5IGJ1Z3Mgb2YgdGhpcyBuYXR1cmUgdHlwaWNhbGx5IGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaGUgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UgKGluZm8tbGVha3MpIG9yIGNvbXBsZXggdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCBzcGVjaWZpY2FsbHkgcmVxdWlyZSBLTVNBTi4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgKHJhY2UgY29uZGl0aW9uKSBkdXJpbmcgdGhlIGFkZGl0aW9uIG9mIGEgZmxvdyB0byB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUuIEJ5IGludHJvZHVjaW5nIHRoZSBgTkZfRkxPV19DT05GSVJNRURgIGZsYWcgYW5kIGNoYW5naW5nIHRoZSByaGFzaHRhYmxlIGluc2VydGlvbiBvcmRlciwgaXQgcHJldmVudHMgY29uY3VycmVudCBsb29rdXBzIG9yIGdhcmJhZ2UgY29sbGVjdGlvbiBmcm9tIGFjY2Vzc2luZyBhIGZsb3cgYmVmb3JlIGl0IGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBhZGRlZC4gQ29uY3VycmVuY3kgYnVncyBvZiB0aGlzIG5hdHVyZSB0eXBpY2FsbHkgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSAoaW5mby1sZWFrcykgb3IgY29tcGxleCB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHNwZWNpZmljYWxseSByZXF1aXJlIEtNU0FOLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowbwkwv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 00:22:12 +0000 UTC FinishedAt: 2026-08-13 00:41:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "7b53449540502cb21b32bca62a6258e22cd97bbe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NETFILTER_INGRESS", "NF_CONNTRACK", "NF_TABLES", "NFT_FLOW_OFFLOAD", "NET_ACT_CT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "7b53449540502cb21b32bca62a6258e22cd97bbe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NETFILTER_INGRESS", "NF_CONNTRACK", "NF_TABLES", "NFT_FLOW_OFFLOAD", "NET_ACT_CT" ], "series_id": "5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "flow_offload_add" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0lOR1JFU1MmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORlRfRkxPV19PRkZMT0FEJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmbG93X29mZmxvYWRfYWRkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgKHJhY2UgY29uZGl0aW9uKSBkdXJpbmcgdGhlIGFkZGl0aW9uIG9mIGEgZmxvdyB0byB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUuIEJ5IGludHJvZHVjaW5nIHRoZSBgTkZfRkxPV19DT05GSVJNRURgIGZsYWcgYW5kIGNoYW5naW5nIHRoZSByaGFzaHRhYmxlIGluc2VydGlvbiBvcmRlciwgaXQgcHJldmVudHMgY29uY3VycmVudCBsb29rdXBzIG9yIGdhcmJhZ2UgY29sbGVjdGlvbiBmcm9tIGFjY2Vzc2luZyBhIGZsb3cgYmVmb3JlIGl0IGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBhZGRlZC4gQ29uY3VycmVuY3kgYnVncyBvZiB0aGlzIG5hdHVyZSB0eXBpY2FsbHkgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSAoaW5mby1sZWFrcykgb3IgY29tcGxleCB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHNwZWNpZmljYWxseSByZXF1aXJlIEtNU0FOLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgY29yZSBieSBpbnRyb2R1Y2luZyBhIG5ldyBORl9GTE9XX0NPTkZJUk1FRCBmbGFnLiBJdCBtb2RpZmllcyBmbG93X29mZmxvYWRfYWRkIHRvIHNldCB0aGlzIGZsYWcgYWZ0ZXIgaW5zZXJ0aW5nIGJvdGggZGlyZWN0aW9ucyBvZiB0aGUgZmxvdyBpbnRvIHRoZSByaGFzaHRhYmxlLCBhbmQgdXBkYXRlcyBsb29rdXAgYW5kIGdhcmJhZ2UgY29sbGVjdGlvbiBsb2dpYyB0byBpZ25vcmUgdW5jb25maXJtZWQgZmxvd3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZDM1MzlhYmRmNTBhMThlMjFkOWMwMzQzZDAzM2VjMjY5ZGNiMDlkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDA6Mzk6NDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbmluZGV4IGNlNDE0MTE4OTYyZjUuLjYxOGQyNmU0OWZkZjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG5AQCAtMTg5LDYgJiM0MzsxODksNyBAQCBlbnVtIG5mX2Zsb3dfZmxhZ3Mge1xuIFx0TkZfRkxPV19IV19QRU5ESU5HLFxuIFx0TkZfRkxPV19IV19CSURJUkVDVElPTkFMLFxuIFx0TkZfRkxPV19IV19FU1RBQkxJU0hFRCxcbiYjNDM7XHRORl9GTE9XX0NPTkZJUk1FRCxcbiB9O1xuIFxuIGVudW0gZmxvd19vZmZsb2FkX3R5cGUge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG5pbmRleCA4YjExNjVmMmI1YTQ5Li4xZTJjNGExZGI5YTcwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuQEAgLTMzMiwxOCAmIzQzOzMzMiwxNyBAQCBpbnQgZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxuIFx0Zmxvdy1cdTAwM2V0aW1lb3V0ID0gbmZfZmxvd3RhYmxlX3RpbWVfc3RhbXAgJiM0MzsgZmxvd19vZmZsb2FkX2dldF90aW1lb3V0KGZsb3cpO1xuIFxuIFx0ZXJyID0gcmhhc2h0YWJsZV9pbnNlcnRfZmFzdChcdTAwMjZmbG93X3RhYmxlLVx1MDAzZXJoYXNodGFibGUsXG4tXHRcdFx0XHQgICAgIFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfUkVQTFldLm5vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX09SSUdJTkFMXS5ub2RlLFxuIFx0XHRcdFx0ICAgICBuZl9mbG93X29mZmxvYWRfcmhhc2hfcGFyYW1zKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHQvKiBHQyBvbmx5IGl0ZXJhdGVzIG9yaWdpbmFsLWRpcmVjdGlvbiBlbnRyaWVzOyBwdWJsaXNoIG9yaWdpbmFsIGxhc3QuICovXG4gXHRlcnIgPSByaGFzaHRhYmxlX2luc2VydF9mYXN0KFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlcmhhc2h0YWJsZSxcbi1cdFx0XHRcdCAgICAgXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0ubm9kZSxcbiYjNDM7XHRcdFx0XHQgICAgIFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfUkVQTFldLm5vZGUsXG4gXHRcdFx0XHQgICAgIG5mX2Zsb3dfb2ZmbG9hZF9yaGFzaF9wYXJhbXMpO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlcmhhc2h0YWJsZSxcbi1cdFx0XHRcdCAgICAgICBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX1JFUExZXS5ub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgICBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX09SSUdJTkFMXS5ub2RlLFxuIFx0XHRcdFx0ICAgICAgIG5mX2Zsb3dfb2ZmbG9hZF9yaGFzaF9wYXJhbXMpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuQEAgLTM1Myw2ICYjNDM7MzUyLDggQEAgaW50IGZsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbiBcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93X3RhYmxlKSlcbiBcdFx0bmZfZmxvd19vZmZsb2FkX2FkZChmbG93X3RhYmxlLCBmbG93KTtcbiBcbiYjNDM7XHRzZXRfYml0KE5GX0ZMT1dfQ09ORklSTUVELCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2FkZCk7XG5AQCAtNDEyLDcgJiM0Mzs0MTMsOCBAQCBmbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4gXG4gXHRkaXIgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyO1xuIFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbi1cdGlmICh0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRpZiAodW5saWtlbHkoIXRlc3RfYml0KE5GX0ZMT1dfQ09ORklSTUVELCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSkgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0aWYgKHVubGlrZWx5KG5mX2N0X2lzX2R5aW5nKGZsb3ctXHUwMDNlY3QpKSlcbkBAIC01NjgsMTUgJiM0Mzs1NzAsMTkgQEAgc3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9leHRlbmRfY3RfdGltZW91dChzdHJ1Y3QgbmZfY29ubiAqY3QpXG4gc3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKVxuIHtcbi1cdGJvb2wgdGVhcmRvd24gPSB0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRib29sIHRlYXJkb3duO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfYml0KE5GX0ZMT1dfQ09ORklSTUVELCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHJldHVybjtcbiBcbiBcdGlmIChuZl9mbG93X2hhc19leHBpcmVkKGZsb3cpIHx8XG4gXHQgICAgbmZfY3RfaXNfZHlpbmcoZmxvdy1cdTAwM2VjdCkgfHxcbiBcdCAgICBuZl9mbG93X2N1c3RvbV9nYyhmbG93X3RhYmxlLCBmbG93KSkge1xuIFx0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4gXHRcdHRlYXJkb3duID0gdHJ1ZTtcbi1cdH0gZWxzZSBpZiAoIXRlYXJkb3duKSB7XG4mIzQzO1x0fSBlbHNlIGlmICghdGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncykpIHtcbiBcdFx0bmZfZmxvd190YWJsZV9leHRlbmRfY3RfdGltZW91dChmbG93LVx1MDAzZWN0KTtcbiYjNDM7XHRcdHRlYXJkb3duID0gZmFsc2U7XG4gXHR9XG4gXG4gXHRpZiAodGVhcmRvd24pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMDozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfSU5HUkVTUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9DVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Zsb3dfb2ZmbG9hZF9hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgY29yZSBieSBpbnRyb2R1Y2luZyBhIG5ldyBORl9GTE9XX0NPTkZJUk1FRCBmbGFnLiBJdCBtb2RpZmllcyBmbG93X29mZmxvYWRfYWRkIHRvIHNldCB0aGlzIGZsYWcgYWZ0ZXIgaW5zZXJ0aW5nIGJvdGggZGlyZWN0aW9ucyBvZiB0aGUgZmxvdyBpbnRvIHRoZSByaGFzaHRhYmxlLCBhbmQgdXBkYXRlcyBsb29rdXAgYW5kIGdhcmJhZ2UgY29sbGVjdGlvbiBsb2dpYyB0byBpZ25vcmUgdW5jb25maXJtZWQgZmxvd3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZDM1MzlhYmRmNTBhMThlMjFkOWMwMzQzZDAzM2VjMjY5ZGNiMDlkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMDA6Mzk6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaAppbmRleCBjZTQxNDExODk2MmY1Li42MThkMjZlNDlmZGY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKQEAgLTE4OSw2ICYjNDM7MTg5LDcgQEAgZW51bSBuZl9mbG93X2ZsYWdzIHsKIAlORl9GTE9XX0hXX1BFTkRJTkcsCiAJTkZfRkxPV19IV19CSURJUkVDVElPTkFMLAogCU5GX0ZMT1dfSFdfRVNUQUJMSVNIRUQsCiYjNDM7CU5GX0ZMT1dfQ09ORklSTUVELAogfTsKIAogZW51bSBmbG93X29mZmxvYWRfdHlwZSB7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYwppbmRleCA4YjExNjVmMmI1YTQ5Li4xZTJjNGExZGI5YTcwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKQEAgLTMzMiwxOCAmIzQzOzMzMiwxNyBAQCBpbnQgZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KQogCWZsb3ctJmd0O3RpbWVvdXQgPSBuZl9mbG93dGFibGVfdGltZV9zdGFtcCAmIzQzOyBmbG93X29mZmxvYWRfZ2V0X3RpbWVvdXQoZmxvdyk7CiAKIAllcnIgPSByaGFzaHRhYmxlX2luc2VydF9mYXN0KCZhbXA7Zmxvd190YWJsZS0mZ3Q7cmhhc2h0YWJsZSwKLQkJCQkgICAgICZhbXA7Zmxvdy0mZ3Q7dHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfUkVQTFldLm5vZGUsCiYjNDM7CQkJCSAgICAgJmFtcDtmbG93LSZndDt0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0ubm9kZSwKIAkJCQkgICAgIG5mX2Zsb3dfb2ZmbG9hZF9yaGFzaF9wYXJhbXMpOwogCWlmIChlcnIgJmx0OyAwKQogCQlyZXR1cm4gZXJyOwogCi0JLyogR0Mgb25seSBpdGVyYXRlcyBvcmlnaW5hbC1kaXJlY3Rpb24gZW50cmllczsgcHVibGlzaCBvcmlnaW5hbCBsYXN0LiAqLwogCWVyciA9IHJoYXNodGFibGVfaW5zZXJ0X2Zhc3QoJmFtcDtmbG93X3RhYmxlLSZndDtyaGFzaHRhYmxlLAotCQkJCSAgICAgJmFtcDtmbG93LSZndDt0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0ubm9kZSwKJiM0MzsJCQkJICAgICAmYW1wO2Zsb3ctJmd0O3R1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX1JFUExZXS5ub2RlLAogCQkJCSAgICAgbmZfZmxvd19vZmZsb2FkX3JoYXNoX3BhcmFtcyk7CiAJaWYgKGVyciAmbHQ7IDApIHsKIAkJcmhhc2h0YWJsZV9yZW1vdmVfZmFzdCgmYW1wO2Zsb3dfdGFibGUtJmd0O3JoYXNodGFibGUsCi0JCQkJICAgICAgICZhbXA7Zmxvdy0mZ3Q7dHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfUkVQTFldLm5vZGUsCiYjNDM7CQkJCSAgICAgICAmYW1wO2Zsb3ctJmd0O3R1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX09SSUdJTkFMXS5ub2RlLAogCQkJCSAgICAgICBuZl9mbG93X29mZmxvYWRfcmhhc2hfcGFyYW1zKTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC0zNTMsNiAmIzQzOzM1Miw4IEBAIGludCBmbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpCiAJaWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3dfdGFibGUpKQogCQluZl9mbG93X29mZmxvYWRfYWRkKGZsb3dfdGFibGUsIGZsb3cpOwogCiYjNDM7CXNldF9iaXQoTkZfRkxPV19DT05GSVJNRUQsICZhbXA7Zmxvdy0mZ3Q7ZmxhZ3MpOwomIzQzOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2FkZCk7CkBAIC00MTIsNyAmIzQzOzQxMyw4IEBAIGZsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwKIAogCWRpciA9IHR1cGxlaGFzaC0mZ3Q7dHVwbGUuZGlyOwogCWZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7Ci0JaWYgKHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sICZhbXA7Zmxvdy0mZ3Q7ZmxhZ3MpKQomIzQzOwlpZiAodW5saWtlbHkoIXRlc3RfYml0KE5GX0ZMT1dfQ09ORklSTUVELCAmYW1wO2Zsb3ctJmd0O2ZsYWdzKSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sICZhbXA7Zmxvdy0mZ3Q7ZmxhZ3MpKQogCQlyZXR1cm4gTlVMTDsKIAogCWlmICh1bmxpa2VseShuZl9jdF9pc19keWluZyhmbG93LSZndDtjdCkpKQpAQCAtNTY4LDE1ICYjNDM7NTcwLDE5IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZXh0ZW5kX2N0X3RpbWVvdXQoc3RydWN0IG5mX2Nvbm4gKmN0KQogc3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwKIAkJCQkgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgdm9pZCAqZGF0YSkKIHsKLQlib29sIHRlYXJkb3duID0gdGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgJmFtcDtmbG93LSZndDtmbGFncyk7CiYjNDM7CWJvb2wgdGVhcmRvd247CiYjNDM7CiYjNDM7CWlmICghdGVzdF9iaXQoTkZfRkxPV19DT05GSVJNRUQsICZhbXA7Zmxvdy0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwogCiAJaWYgKG5mX2Zsb3dfaGFzX2V4cGlyZWQoZmxvdykgfHwKIAkgICAgbmZfY3RfaXNfZHlpbmcoZmxvdy0mZ3Q7Y3QpIHx8CiAJICAgIG5mX2Zsb3dfY3VzdG9tX2djKGZsb3dfdGFibGUsIGZsb3cpKSB7CiAJCWZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTsKIAkJdGVhcmRvd24gPSB0cnVlOwotCX0gZWxzZSBpZiAoIXRlYXJkb3duKSB7CiYjNDM7CX0gZWxzZSBpZiAoIXRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sICZhbXA7Zmxvdy0mZ3Q7ZmxhZ3MpKSB7CiAJCW5mX2Zsb3dfdGFibGVfZXh0ZW5kX2N0X3RpbWVvdXQoZmxvdy0mZ3Q7Y3QpOwomIzQzOwkJdGVhcmRvd24gPSBmYWxzZTsKIAl9CiAKIAlpZiAodGVhcmRvd24pIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAzOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIE5ldGZpbHRlciBGbG93IFRhYmxlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AuIEl0JiMzOTtzIGludHJvZHVjaW5nIGEgbmV3IGBORl9GTE9XX0NPTkZJUk1FRGAgZmxhZyB0byBgbmZfZmxvd19mbGFnc2AuIEltbWVkaWF0ZWx5LCBJIHNlZSB0aGlzIGlzIGFib3V0IHN0YXRlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBmbG93IHRhYmxlLCBwcm9iYWJseSB0byBpbXByb3ZlIGNvbmN1cnJlbmN5IG9yIGNvcnJlY3RuZXNzLgoKU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggc2VlbXMgdG8gbW9kaWZ5IGhvdyBuZXcgZmxvd3MgYXJlIGFkZGVkIChgZmxvd19vZmZsb2FkX2FkZGApLiBJdCYjMzk7cyBub3cgaW5zZXJ0aW5nIHRoZSBvcmlnaW5hbCBkaXJlY3Rpb24sIHRoZW4gdGhlIHJlcGx5LCBhbmQgdGhlbiAqZmluYWxseSogc2V0dGluZyB0aGlzIGBORl9GTE9XX0NPTkZJUk1FRGAgZmxhZy4gVGhpcyBzY3JlYW1zICYjMzQ7YXRvbWljaXR5JiMzNDsgdG8gbWUg4oCTIHRoZXkmIzM5O3JlIGVuc3VyaW5nIHRoZSBmbG93IGlzbiYjMzk7dCBjb25zaWRlcmVkICYjMzQ7cmVhZHkmIzM0OyB1bnRpbCBhbGwgZXNzZW50aWFsIHBhcnRzIGFyZSBpbiBwbGFjZS4KClRoZSBtb2RpZmljYXRpb25zIHRvIGBmbG93X29mZmxvYWRfbG9va3VwYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYCBhcmUgZnVydGhlciBpbmRpY2F0b3JzLiBUaGV5JiMzOTtyZSBib3RoIGNoZWNraW5nIGZvciBgTkZfRkxPV19DT05GSVJNRURgLiAgSWYgaXQgaXNuJiMzOTt0IHNldCwgYGZsb3dfb2ZmbG9hZF9sb29rdXBgIHJldHVybnMgTlVMTCAoZWZmZWN0aXZlbHkgaGlkaW5nIHRoZSBpbmNvbXBsZXRlIGVudHJ5KSBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYCBiYWlscyBlYXJseS4gIFRoaXMgaXMgYSBjbGV2ZXIgd2F5IHRvIHByZXZlbnQgcHJlbWF0dXJlIGxvb2t1cHMgb3IgZ2FyYmFnZSBjb2xsZWN0aW9uIG9mIGZsb3dzIHRoYXQgYXJlbiYjMzk7dCBmdWxseSBwb3B1bGF0ZWQuCgpJdCYjMzk7cyBjbGVhciB0aGF0IHRoZSBnb2FsIGhlcmUgaXMgdG8gZml4IGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiAgVGhlIGNvbW1lbnQgbWVudGlvbnMgdGhhdCB0aGUgcmFjZSBpbnZvbHZlcyBhIGZsb3cgYmVpbmcgbG9va2VkIHVwIG9yIEdDJiMzOTtkIGJlZm9yZSBpdCYjMzk7cyBmdWxseSBhZGRlZC4gVGhpcyBpcyBhIGNvbW1vbiBhbmQgbmFzdHkgcHJvYmxlbSBpbiBjb25jdXJyZW50IHN5c3RlbXMsIGFuZCB0aGlzIGFwcHJvYWNoIGlzIGEgc29saWQgd2F5IHRvIGFkZHJlc3MgaXQuICBJdCBsb29rcyBsaWtlIHRoaXMgcHJldmVudHMgb3BlcmF0aW9ucyBvbiBhbiBpbmNvbXBsZXRlIGZsb3cuCgpOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBpbnZvbHZlZC4gIEkga25vdyB0aGF0IGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jYCBpcyBnb2luZyB0byBiZSBjb21waWxlZCBpZiBgQ09ORklHX05GX0ZMT1dfVEFCTEVgIGlzIGRlZmluZWQuIExldCYjMzk7cyBjb25maXJtIHRoYXQgYnkgY2hlY2tpbmcgYG5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfdGFibGVfY29yZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE0Mj1vYmotJChDT05GSUdfTkZfRkxPV19UQUJMRSlcdCYjNDM7PSBuZl9mbG93X3RhYmxlLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQzOm5mX2Zsb3dfdGFibGUtb2Jqc1x0XHQ6PSBuZl9mbG93X3RhYmxlX2NvcmUubyBuZl9mbG93X3RhYmxlX2lwLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ0LVx0XHRcdFx0ICAgbmZfZmxvd190YWJsZV9wYXRoLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODM0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIEZsb3cgVGFibGUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgQ09ORklHX05GX0ZMT1dfVEFCTEVgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIG9yIG92ZXJsb29raW5nIHBvdGVudGlhbCBjb25mbGljdHMuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIGhpbmdlIG9uIHRoaXMgb25lLiBVbmRlcnN0YW5kaW5nIHRoZSBwcmVyZXF1aXNpdGVzIHdpbGwgcGFpbnQgdGhlIGZ1bGwgcGljdHVyZSBvZiBob3cgdGhpcyBvcHRpb24gZml0cyBpbnRvIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0ZMT1dfVEFCTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzIxOmNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cdGJvb2wgXCYjMzQ7U3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjA0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBORl9GTE9XX1RBQkxFIEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYE5GX0ZMT1dfVEFCTEVgIEtjb25maWcuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBmZWF0dXJlLiBXaGF0IGFyZSB0aGUga2V5IGJ1aWxkLXRpbWUgZGVjaXNpb25zIHdlJiMzOTtyZSBwcmVzZW50ZWQgd2l0aD8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBmZWF0dXJlcyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gZXZlbiAqYmUqIGEgdmlhYmxlIG9wdGlvbj8gQXJlIHRoZXJlIHNwZWNpZmljIG5ldHdvcmtpbmcgc3RhY2sgcHJlcmVxdWlzaXRlcywgb3IgaXMgaXQgdGllZCB0byBjZXJ0YWluIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAoZS5nLiwgaGFyZHdhcmUgb2ZmbG9hZCBzdXBwb3J0KT8gSSBuZWVkIHRvIGtub3cgdGhlIHByZWNvbmRpdGlvbnMuCiogICAqKkRlZmF1bHQgQmVoYXZpb3I6KiogV2hhdCYjMzk7cyB0aGUgZGVmYXVsdCBzdGF0ZSDigJMgaXMgaXQgYnVpbHQtaW4sIG1vZHVsYXIsIG9yIGRpc2FibGVkPyBVbmRlcnN0YW5kaW5nIHRoZSBkZWZhdWx0IHByb3ZpZGVzIGNyaXRpY2FsIGNvbnRleHQuCiogICAqKkNvbmZpZ3VyYXRpb24gT3B0aW9uczoqKiBCZXlvbmQganVzdCBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhlIG1vZHVsZSwgd2hhdCB0dW5hYmxlIHBhcmFtZXRlcnMgZXhpc3Q/IEFyZSB0aGVyZSBvcHRpb25zIHJlbGF0ZWQgdG8gZmxvdyB0YWJsZSBzaXplLCBhZ2luZywgb3Igc3BlY2lmaWMgb2ZmbG9hZCBmZWF0dXJlcz8gVGhpcyB3aWxsIGluZm9ybSBhbnkgb3B0aW1pemF0aW9uIHN0cmF0ZWd5IEkgbmVlZC4KKiAgICoqSGVscCBUZXh0OioqIFRoaXMgc2hvdWxkIGJlIHF1aXRlIGluc2lnaHRmdWwuIFdoYXQgZG8gdGhlIGRlc2NyaXB0aW9ucyB0ZWxsIHVzIGFib3V0IHRoZSBpbnRlbmRlZCBwdXJwb3NlIGFuZCB1c2UgY2FzZXMgZm9yIHRoZSBmZWF0dXJlPyBUaGUgaGVscCB0ZXh0IHNob3VsZCBjbHVlIG1lIGluIG9uIHdoYXQga2luZCBvZiBwcm9ibGVtcyB0aGlzIHNvbHZlcy4KKiAgICoqQ29uZmxpY3RzOioqIEkmIzM5O2xsIGJlIG9uIHRoZSBsb29rb3V0IGZvciBhbnkgb2J2aW91cyBjb25mbGljdHMgd2l0aCBvdGhlciBuZXR3b3JraW5nIGZlYXR1cmVzLiBBcmUgdGhlcmUgYW55IGtub3duIGluY29tcGF0aWJpbGl0aWVzIHdpdGggZXN0YWJsaXNoZWQgc29sdXRpb25zIHRoYXQgSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlcj8KKiAgICoqQ29uZGl0aW9uYWwgRGVwZW5kZW5jaWVzOioqIEkgYW50aWNpcGF0ZSB0aGVyZSB3aWxsIGJlIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgYmFzZWQgb24gdGhlIGtlcm5lbCYjMzk7cyBhcmNoaXRlY3R1cmUsIGhhcmR3YXJlLCBvciBhbm90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgoKSSYjMzk7bSBlc3NlbnRpYWxseSB0cnlpbmcgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGBORl9GTE9XX1RBQkxFYC4gSXQmIzM5O3MgYWxsIGFib3V0IGNvbnRleHQsIHJlc3RyaWN0aW9ucywgYW5kIHRoZSBrbm9icyBJIGNhbiB0d2Vhay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcxMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzExOlx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVcbiA3MTI6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuIDcxMzpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfSU5HUkVTU1xuIDcxNDpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbiA3MTU6XHRcdGRlcGVuZHMgb24gTkZfVEFCTEVTXG4gNzE2Olx0XHRoZWxwXG4gNzE3Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGZsb3cgdGFibGUgY29yZSBpbmZyYXN0cnVjdHVyZS5cbiA3MTg6XHRcbiA3MTk6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiA3MjA6XHRcbiA3MjE6XHRjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcbiA3MjI6XHRcdGJvb2wgXCYjMzQ7U3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcJiMzNDtcbiA3MjM6XHRcdGRlcGVuZHMgb24gTkZfRkxPV19UQUJMRVxuIDcyNDpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4gNzI1Olx0XHRoZWxwXG4gNzI2Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZm9yIHRoZSBmbG93IHRhYmxlIG9mZmxvYWQgc3RhdGlzdGljc1xuIDcyNzpcdFx0ICB0byBiZSBzaG93biBpbiBwcm9jZnMgdW5kZXIgbmV0L25ldGZpbHRlci9uZl9mbG93dGFibGUuXG4gNzI4Olx0XG4gNzI5Olx0Y29uZmlnIE5FVEZJTFRFUl9YVEFCTEVTXG4gNzMwOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgWHRhYmxlcyBzdXBwb3J0IChyZXF1aXJlZCBmb3IgaXBfdGFibGVzKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NDQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTmV0ZmlsdGVyIEZsb3cgT2ZmbG9hZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBOZXRmaWx0ZXIgZmxvdyBvZmZsb2FkIHNpdHVhdGlvbi4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGFyZSB0aGUgZGVwZW5kZW5jaWVzLiBXZSYjMzk7dmUgZ290IGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuIFRoYXQgbWVhbnMgdG8gZ2V0IHRoaXMgd2hvbGUgdGhpbmcgd29ya2luZywgdGhlIGBFbmFibGVDb25maWdzYCBuZWVkIHRvIGluY2x1ZGUgYE5GX0ZMT1dfVEFCTEVgIChuYXR1cmFsbHkpLCBgTkVURklMVEVSX0lOR1JFU1NgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9UQUJMRVNgLiBXZSBuZWVkIHRob3NlIGJ1aWxkaW5nIGJsb2NrcyBpbiBwbGFjZSBiZWZvcmUgd2UgY2FuIGV2ZW4gYmVnaW4uCgpOZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGBGb2N1c1N5bWJvbHNgLiBFc3NlbnRpYWxseSwgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IHBsYXllcnMgaGVyZSB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZD8gTG9va3MgbGlrZSB3ZSBoYXZlOgoKKiAgIGBmbG93X29mZmxvYWRfYWRkYAoqICAgYGZsb3dfb2ZmbG9hZF9sb29rdXBgCiogICBgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXBgCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogYXJlIHRoZXNlIHN5bWJvbHMgZXhwb3J0ZWQgb3IgYXJlIHRoZXkgc3RhdGljIHdpdGhpbiB0aGUgbW9kdWxlPyBLbm93aW5nIHRoYXQgdGVsbHMgbWUgaG93IGVhc2lseSB0aGV5IGNhbiBiZSBhY2Nlc3NlZCBhbmQgdXNlZC4gYGZsb3dfb2ZmbG9hZF9hZGRgIGlzICpkZWZpbml0ZWx5KiBleHBvcnRlZCDigJMgSSBjYW4gc2VlIGBFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYWRkKWAuIE5vdywgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIGBmbG93X29mZmxvYWRfbG9va3VwYCBpcyBhbHNvIGV4cG9ydGVkLiBUaGF0JiMzOTtzIHRoZSBuZXh0IGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbG93X29mZmxvYWRfbG9va3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTQwMT1zdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NDAyOmZsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDAzLVx0XHQgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MjQtfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo0MjU6RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2xvb2t1cCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQyNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYxNQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRXhhbWluaW5nIEZsb3cgT2ZmbG9hZCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZsb3cgb2ZmbG9hZCBmdW5jdGlvbnMuIExldCBtZSBzZWUuLi4gYGZsb3dfb2ZmbG9hZF9sb29rdXBgIC0geWVwLCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGNhbiBhY2Nlc3MgYW5kIHVzZSBpdCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIG5vIHByb2JsZW0gdGhlcmUuIE5vdywgdGhlIG90aGVyIG9uZSwgYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYC4uLkFoLCBnb29kLiBUaGF0IG9uZSYjMzk7cyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQmIzM5O3Mgd2hhdCBJIGV4cGVjdGVkIGZvciBhIGdhcmJhZ2UgY29sbGVjdGlvbiBzdGVwLiBJdCYjMzk7cyBtZWFudCB0byBiZSBhbiBpbnRlcm5hbCBoZWxwZXIsIG5vdCBzb21ldGhpbmcgZXhwb3NlZCBmb3IgZXh0ZXJuYWwgdXNlLiBFeGNlbGxlbnQuIEp1c3QgYXMgcGxhbm5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd19vZmZsb2FkX2djX3N0ZXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NTEyPXN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZXh0ZW5kX2N0X3RpbWVvdXQoc3RydWN0IG5mX2Nvbm4gKmN0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNTY5LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo1NzA6c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNTcxLVx0XHRcdFx0ICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz02MDY9dm9pZCBuZl9mbG93X3RhYmxlX2djX3J1bihzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02MDcte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo2MDg6XHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd190YWJsZSwgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAsIE5VTEwpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02MDktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTE1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBGbG93IFRhYmxlIEdhcmJhZ2UgQ29sbGVjdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBnYXJiYWdlIGNvbGxlY3Rpb24uIEkgc2VlIHRoYXQgdGhlIGBuZl9mbG93X3RhYmxlX2djX3J1bmAgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGluaXRpYXRpbmcgdGhpcyBwcm9jZXNzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyBgbmZfZmxvd190YWJsZV9nY19ydW5gIGV4cG9ydGVkLCBvciBpcyBpdCBpbnRlcm5hbD8mIzM0OyBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBxdWVzdGlvbi4gVW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgaGVscHMgZGV0ZXJtaW5lIGhvdyBpdCYjMzk7cyBpbnZva2VkIGFuZCBpZiBJIGNhbiBwb3RlbnRpYWxseSBob29rIGludG8gaXQgZm9yIGRlYnVnZ2luZyBvciBjdXN0b20gZXh0ZW5zaW9ucy4gVGhlbiBJIG5vdGljZSB0aGUgY2FsbCB0byBgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXBgLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucyBpcyB0aGUgY3J1eCBvZiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHByb2dyZXNzZXMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcGAgYWN0dWFsbHkgZG9lcyBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgaW50byB0aGUgYmlnZ2VyIGdhcmJhZ2UgY29sbGVjdGlvbiBvcGVyYXRpb24gd2l0aGluIE5ldGZpbHRlci4gVGhpcyB3aWxsIGRyaXZlIG15IG5leHQgcXVlc3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfdGFibGVfZ2NfcnVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTU3MD1zdGF0aWMgdm9pZCBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjA1LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo2MDY6dm9pZCBuZl9mbG93X3RhYmxlX2djX3J1bihzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02MDcte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NjExPXN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYxNS1cdGZsb3dfdGFibGUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mX2Zsb3d0YWJsZSwgZ2Nfd29yay53b3JrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NjE2Olx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYxNy1cdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50X3dxLCBcdTAwMjZmbG93X3RhYmxlLVx1MDAzZWdjX3dvcmssIEhaKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc2Nz12b2lkIG5mX2Zsb3dfdGFibGVfZnJlZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzc2LVx0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3dfdGFibGUsIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cCwgTlVMTCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc3NzpcdG5mX2Zsb3dfdGFibGVfZ2NfcnVuKGZsb3dfdGFibGUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NzgtXHRuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2hfY2xlYW51cChmbG93X3RhYmxlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg3MgoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIFJlYWNoIG9mIGBuZl9mbG93X3RhYmxlX2djX3J1bmAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbmZfZmxvd190YWJsZV9nY19ydW5gIGZ1bmN0aW9uLiBUaGUgcHJvYmxlbSBpcywgaXQgaXNuJiMzOTt0IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIHdoaWNoIGlzIGEgYml0IG9mIGEgaHVyZGxlLiAgQnV0LCBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2NgLiBBbmQgdGhhdCYjMzk7cyBpbnRlcmVzdGluZyBiZWNhdXNlICp0aGF0KiBmdW5jdGlvbiBpcyBhIHdvcmtxdWV1ZSBjYWxsYmFjay4gVGhhdCBjb3VsZCBtZWFuIGl0IGhhcyBpbXBsaWNhdGlvbnMgZm9yIGNvbmN1cnJlbmN5IGFuZCBzY2hlZHVsaW5nLiAgQWxzbywgaXQmIzM5O3MgY2FsbGVkIGZyb20gYG5mX2Zsb3dfdGFibGVfZnJlZWAsIHdoaWNoIGlzIGFub3RoZXIgcG90ZW50aWFsIGVudHJ5IHBvaW50LgoKV2FpdCBhIHNlY29uZC4uLkkmIzM5O20gZ2V0dGluZyBhaGVhZCBvZiBteXNlbGYuICBKdXN0IGJlY2F1c2UgaXQgKmxvb2tzKiBsaWtlIGl0JiMzOTtzIG5vdCBleHBvcnRlZCBkb2VzbiYjMzk7dCBtYWtlIGl0IHNvLiBJJiMzOTt2ZSBiZWVuIGZvb2xlZCBieSB0aGlzIGJlZm9yZSwgc28gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzbiYjMzk7dCBhIGNhc2Ugd2hlcmUgaXQgKmNvdWxkKiBiZSBleHBvcnRlZCwgcGVyaGFwcyB0aHJvdWdoIHNvbWUgb3RoZXIgbWVjaGFuaXNtLiBJIHJlYWxseSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbmZfZmxvd190YWJsZV9nY19ydW5gIGlzIGFjdHVhbGx5IHN0YXRpYyBiZWZvcmUgSSBkcmF3IGFueSBjb25jbHVzaW9ucyBhYm91dCBpdHMgYWNjZXNzaWJpbGl0eSBhbmQsIHRoZXJlZm9yZSwgdGhlIHdheXMgaXQgbWlnaHQgYmUgaW52b2tlZCBvciB1c2VkLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qbmZfZmxvd190YWJsZV9nY19ydW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI3MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipGb2N1c2luZyBJbndhcmQ6IFdoZXJlIHRoZSBSZWFsIEFjdGlvbiBJcyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggZXhwb3J0cyBoZXJlLCBzY3JhdGNoIHRoYXQgbGluZSBvZiB0aGlua2luZy4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgbGFzZXItc2hhcnAgb24gdGhlc2UgdHdvIGZ1bmN0aW9uczogYGZsb3dfb2ZmbG9hZF9hZGRgIGFuZCBgZmxvd19vZmZsb2FkX2xvb2t1cGAuIEJ1dCB3YWl0Li4uIGhhbmcgb24gYSBtaW51dGUuLi4gYGZsb3dfb2ZmbG9hZF9sb29rdXBgIGlzIGEgKmhvdC1wYXRoKiBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUgb25lIHRoYXQmIzM5O3MgY2FsbGVkIGZvciAqZXZlcnkgc2luZ2xlIHBhY2tldCog4oCTIGl0JiMzOTtzIHRoZSBjcml0aWNhbCBsb29rdXAuIFRoYXQgbWVhbnMgcGVyZm9ybWFuY2UgaGVyZSBpcyBwYXJhbW91bnQuIFNvLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgY29udGV4dHMgb2YgYGZsb3dfb2ZmbG9hZF9sb29rdXBgLiBHb3R0YSBzZWUgKndoZXJlKiBpdCYjMzk7cyBiZWluZyBpbnZva2VkLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgb3ZlcmFsbCBpbXBhY3QgYW5kIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Zsb3dfb2ZmbG9hZF9sb29rdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmM9MzY9YnBmX3hkcF9mbG93X3R1cGxlX2xvb2t1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy00Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYzo0NzpcdHR1cGxlaGFzaCA9IGZsb3dfb2ZmbG9hZF9sb29rdXAobmZfZmxvd190YWJsZSwgdHVwbGUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTQ4LVx0aWYgKCF0dXBsZWhhc2gpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz00MDE9c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjQwMjpmbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQwMy1cdFx0ICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDI0LX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NDI1OkVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9sb29rdXApO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MjYtXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9NDYxPXN0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ2MjpuZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NjMtXHRcdCAgICAgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ3Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ3MzpcdHJldHVybiBmbG93X29mZmxvYWRfbG9va3VwKGZsb3dfdGFibGUsIFx1MDAyNnR1cGxlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ3NC19XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9ODA3PW5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODIzLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6ODI0Olx0dHVwbGVoYXNoID0gbmZfZmxvd19vZmZsb2FkX2xvb2t1cChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHNrYik7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04MjUtXHRpZiAoIXR1cGxlaGFzaClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMTA4PW5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExMTktXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMTIwOlx0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXHUwMDI2dHVwbGUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTEyMS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMjkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBDYWxsIFBhdGhzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGZ1bmN0aW9uIGNhbGxzLiBSaWdodCwgYGZsb3dfb2ZmbG9hZF9sb29rdXBgIGlzIGRlZmluaXRlbHkgYSBob3QtcGF0aCBmdW5jdGlvbiwgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIGhvb2suIFRoYXQmIzM5O3MgYSBrZXkgY29uc2lkZXJhdGlvbiBmb3IgcGVyZm9ybWFuY2UsIHNvIHdlIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIG9wdGltaXplZC4gTm93LCBgZmxvd19vZmZsb2FkX2FkZGAgc2VlbXMgbGVzcyBwZXJmb3JtYW5jZS1jcml0aWNhbCwgc2luY2UgaXQmIzM5O3Mgb25seSBpbnZva2VkIHdoZW4gYSBuZXcgZmxvdyBpcyBvZmZsb2FkZWQuIFN0aWxsLCBpdCYjMzk7cyBvcGVyYXRpbmcgb24gdGhlIGRhdGEgcGF0aCwgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAgYW5kIG9mZmxvYWQsIHNvIHdlIGNhbiYjMzk7dCBjb21wbGV0ZWx5IGlnbm9yZSBpdCBlaXRoZXIuIFdhaXQsIGhvbGQgb24uIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgYWJvdXQgdGhlIGNhbGwgc3RhY2sgZm9yIGBmbG93X29mZmxvYWRfYWRkYC4gSSAqdGhpbmsqIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIG9yIHNvbWV0aGluZyBzaW1pbGFyLi4uIExldCBtZSB2ZXJpZnkgdGhhdCB0byBiZSBzdXJlLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgZXhlY3V0aW9uIHBhdGggdG8gcHJvcGVybHkgYXNzZXNzIGl0cyBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Zsb3dfb2ZmbG9hZF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTMwOT11bnNpZ25lZCBsb25nIGZsb3dfb2ZmbG9hZF9nZXRfdGltZW91dChzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzI3LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzozMjg6aW50IGZsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzI5LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM1Mi1cdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93X3RhYmxlKSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MzUzOlx0XHRuZl9mbG93X29mZmxvYWRfYWRkKGZsb3dfdGFibGUsIGZsb3cpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNTQtXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNTgtfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzozNTk6RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2FkZCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM2MC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTE5LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoyMDpzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3E7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTIxLXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmZfZmxvd19vZmZsb2FkX2RlbF93cTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwNjU9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3F1ZXVlX3dvcmsoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA3MC1cdFx0TkZfRkxPV19UQUJMRV9TVEFUX0lOQ19BVE9NSUMobmV0LCBjb3VudF93cV9hZGQpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMDcxOlx0XHRxdWV1ZV93b3JrKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EsIFx1MDAyNm9mZmxvYWQtXHUwMDNld29yayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNzItXHR9IGVsc2UgaWYgKG9mZmxvYWQtXHUwMDNlY21kID09IEZMT1dfQ0xTX0RFU1RST1kpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExMTM9dm9pZCBuZl9mbG93X29mZmxvYWRfcmVmcmVzaChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTI0LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTI1OnZvaWQgbmZfZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExMjYtXHRcdFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTczPXZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNzUtXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd3RhYmxlKSkge1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTc2Olx0XHRmbHVzaF93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2FkZF93cSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNzctXHRcdGZsdXNoX3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfZGVsX3dxKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEyOTQ9aW50IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9pbml0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyOTUte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjk2Olx0bmZfZmxvd19vZmZsb2FkX2FkZF93cSAgPSBhbGxvY193b3JrcXVldWUoXCYjMzQ7bmZfZnRfb2ZmbG9hZF9hZGRcJiMzNDssXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyOTctXHRcdFx0XHRcdFx0ICBXUV9VTkJPVU5EIHwgV1FfU1lTRlMsIDApO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjk4Olx0aWYgKCFuZl9mbG93X29mZmxvYWRfYWRkX3dxKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjk5LVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMTUtZXJyX2RlbF93cTpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMxNjpcdGRlc3Ryb3lfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzE3LVx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMzIwPXZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2V4aXQodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyMS17XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMjI6XHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfYWRkX3dxKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyMy1cdGRlc3Ryb3lfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jPTUwPXN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTIwLVx0X19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncyk7XG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoxMjE6XHRyZXQgPSBmbG93X29mZmxvYWRfYWRkKGZsb3d0YWJsZSwgZmxvdyk7XG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xMjItXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEzNAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBGbG93IE9mZmxvYWQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhpcyBmbG93IG9mZmxvYWQgaW1wbGVtZW50YXRpb24sIGFuZCBgZmxvd19vZmZsb2FkX2FkZGAgc2VlbXMgbGlrZSBhIGNyaXRpY2FsIGZ1bmN0aW9uLiBJdCYjMzk7cyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgd2hpY2ggaXMgdGhlIGV2YWx1YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBgZmxvd19vZmZsb2FkYCBleHByZXNzaW9uIGluIG5mdGFibGVzLiBUaGF0JiMzOTtzIGEgc29saWQgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgZmxvd3MgYXJlIGFjdHVhbGx5IGFkZGVkIHRvIHRoZSBmbG93IHRhYmxlLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgc2hvdWxkIGZvY3VzLgoKSG1tLCBidXQgd2FpdCBhIHNlY29uZCwgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgaXMgYSBob3QtcGF0aCBmdW5jdGlvbiEgSXQgZ2V0cyBjYWxsZWQgKmZvciBldmVyeSBwYWNrZXQqIHRoYXQgbWF0Y2hlcyBhbiBvZmZsb2FkIHJ1bGUuIFRoYXQgc3VnZ2VzdHMgaXQmIzM5O3MgcGVyZm9ybWFuY2UtY3JpdGljYWwsIGV2ZW4gdGhvdWdoIGl0IG9ubHkgYWRkcyB0aGUgZmxvdyBvbmNlLiBTbywgSSBoYXZlIHRvIGJlIGNhcmVmdWwgd2hlbiBsb29raW5nIGF0IHRoaXMgb25lLgoKSXMgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9uPyBJIHNlZSB0aGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcGAsIHdoaWNoIGdldHMgY2FsbGVkIGZyb20gYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYCwgd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IGBuZl9mbG93X29mZmxvYWRfd29ya19nY2AuIEludGVyZXN0aW5nLCBidXQgc2luY2UgYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYCBpcyBzdGF0aWMsIEkgY2FuJiMzOTt0IHJlYWxseSBmb2N1cyBvbiBpdC4gU28gdGhhdCBicmluZ3MgbWUgYmFjayB0byBgZmxvd19vZmZsb2FkX2FkZGAuCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgaXMgZXhwb3J0ZWQgb3IgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMuIE5vcGUsIGl0JiMzOTtzIHN0YXRpYy4gT2theSwgaXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgbmZfZmxvd190YWJsZV9jb3JlLmNgIGZvciBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmZsb3dfb2ZmbG9hZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz01Mz1zdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93X29mZmxvYWRfYWxsb2Moc3RydWN0IG5mX2Nvbm4gKmN0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzYtfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3NzpFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYWxsb2MpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTE2ND12b2lkIGZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xNzAtfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoxNzE6RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX3JvdXRlX2luaXQpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xNzItXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0yNjE9dm9pZCBmbG93X29mZmxvYWRfZnJlZShzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjcyLX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MjczOkVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9mcmVlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjc0LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MzI4PWludCBmbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNTgtfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzozNTk6RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2FkZCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM2MC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MzYxPXZvaWQgZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM3OC19XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjM3OTpFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfcmVmcmVzaCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM4MC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTM5Mz12b2lkIGZsb3dfb2ZmbG9hZF90ZWFyZG93bihzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzk4LX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Mzk5OkVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF90ZWFyZG93bik7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQwMC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTQwMj1mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MjQtfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo0MjU6RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2xvb2t1cCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQyNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEZsb3cgT2ZmbG9hZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmbG93IG9mZmxvYWQgZnVuY3Rpb25zLCBhbmQgaXQgc2VlbXMgbGlrZSBgZmxvd19vZmZsb2FkX2FkZGAgaXMgZGVmaW5pdGVseSBhIGtleSBwbGF5ZXIsIG9idmlvdXNseSBkZWFsaW5nIHdpdGggdGhlIGFkZGl0aW9uIG9mIGZsb3dzLiBUaGVuLCB3ZSYjMzk7dmUgZ290IGBmbG93X29mZmxvYWRfdGVhcmRvd25gLCB3aGljaCBJJiMzOTtkIGV4cGVjdCBpcyBpbnRpbWF0ZWx5IHRpZWQgdG8gdGhlIGZsb3cgbGlmZWN5Y2xlLCBoYW5kbGluZyB0aGUgcmVtb3ZhbC4gQW5kLCBgZmxvd19vZmZsb2FkX2FsbG9jYCBpcyByZWxhdGVkIGFzIHdlbGwsIHByb2JhYmx5IG1hbmFnaW5nIHRoZSBhbGxvY2F0aW9uIG9mIHJlc291cmNlcy4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgaXMgaW4gcGxheSBjb25maWctd2lzZS4gSSYjMzk7bSBnb2luZyB0byBzY2FuIGZvciBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQWgsIGhlcmUgd2UgZ28sIGBDT05GSUdfTkZfRkxPV19UQUJMRWAg4oCTIHRoYXQmIzM5O3MgdGhlIGJpZyBvbmUsIHRoZSBjb3JlIGNvbXBvbmVudCBJJiMzOTttIGludGVyZXN0ZWQgaW4uIFRoZW4sIHRoZSBkZXBlbmRlbmNpZXMsIGdvdCB0byBoYXZlIGBDT05GSUdfTkZfVEFCTEVTYCwgYENPTkZJR19ORl9DT05OVFJBQ0tgLCBhbmQgYENPTkZJR19ORVRGSUxURVJfSU5HUkVTU2AgYWxsIHdvcmtpbmcgdG9nZXRoZXIuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgcXVpY2sgbG9vayBpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBjb25maXJtIHRoZSBjb250ZXh0IGFyb3VuZCBgTkZfRkxPV19UQUJMRWAuIFRoaXMgd2lsbCBwcm92aWRlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgYWxsIHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzExLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MTE6XHRjb25maWcgTkZfRkxPV19UQUJMRVxuIDcxMjpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbW9kdWxlXCYjMzQ7XG4gNzEzOlx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9JTkdSRVNTXG4gNzE0Olx0XHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xuIDcxNTpcdFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcbiA3MTY6XHRcdGhlbHBcbiA3MTc6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgZmxvdyB0YWJsZSBjb3JlIGluZnJhc3RydWN0dXJlLlxuIDcxODpcdFxuIDcxOTpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxuIDcyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE3NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZyB0aGUgaW1wb3J0YW5jZSBvZiBgTkZfRkxPV19UQUJMRWAsIGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIGRlcGVuZGVuY3kgcmVzb2x1dGlvbi4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGV2ZXJ5dGhpbmcgaXMgY29ycmVjdGx5IGNvbmZpZ3VyZWQgZm9yIHRoZSBkZXNpcmVkIGZ1bmN0aW9uYWxpdHkuCgpOb3csIG15IHRyYWluIG9mIHRob3VnaHQgdHVybnMgdG93YXJkIGBORVRGSUxURVJfSU5HUkVTU2AuIEdpdmVuIGl0cyByb2xlLCBJIG5lZWQgdG8gY2hlY2sg4oCTIGFuZCBjaGVjayB0aG9yb3VnaGx5IOKAkyB0byBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyLCBwZXJoYXBzIGxlc3Mgb2J2aW91cywgZGVwZW5kZW5jaWVzIHRoYXQgbmVlZCB0byBiZSBhY2NvdW50ZWQgZm9yLiBXZSYjMzk7cmUgdGFsa2luZyBzdWJ0bGUgaW50ZXJhY3Rpb25zIGhlcmUuIE1pc3Npbmcgb25lIG9mIHRoZXNlIGNhbiBsZWFkIHRvIHNvbWUgcmVhbGx5IGZydXN0cmF0aW5nIGRlYnVnZ2luZyBzZXNzaW9ucyBkb3duIHRoZSBsaW5lLiBTbywgSSBuZWVkIHRvIG1ldGhvZGljYWxseSB2ZXJpZnkgKmV2ZXJ5dGhpbmcqIHRoYXQgaXQgcmVsaWVzIG9uLCB3aGV0aGVyIGV4cGxpY2l0bHkgc3RhdGVkIG9yIHBvdGVudGlhbGx5IGltcGxpZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbW9kdWxlcyBhbmQgc3ViLXN5c3RlbXMuIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVEZJTFRFUl9JTkdSRVNTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yPW1lbnUgXCYjMzQ7Q29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvblwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjU6Y29uZmlnIE5FVEZJTFRFUl9JTkdSRVNTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIGluZ3Jlc3Mgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU0OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIE5ldGZpbHRlciBGbG93IFRhYmxlIFBhdGNoKioKCk9rYXksIHNvIGBORVRGSUxURVJfSU5HUkVTU2AgaXMgYSBib29sZWFuLCBnb29kIHRvIGtub3cuIFRoZSBjb3JlIG9mIHRoaXMgbG9va3MgbGlrZSBpdCBoaW5nZXMgb24gYE5GX0ZMT1dfVEFCTEVgLCBhbmQgdGhhdCYjMzk7cyBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AuIERlZmluaXRlbHkgc29tZXRoaW5nIHRvIGZvY3VzIG9uLiBJdCYjMzk7cyBjb21waWxlZCB3aGVuIGBDT05GSUdfTkZfRkxPV19UQUJMRWAgaXMgZW5hYmxlZC4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYWRkaW5nIGFuZCBnYXJiYWdlIGNvbGxlY3RpbmcgZmxvdyBvZmZsb2Fkcy4gU291bmRzIGxpa2UgYSB0ZXh0Ym9vayBmdXp6aW5nIHRhcmdldCDigJMgYSByYWNlIGNvbmRpdGlvbiBpcyByaXBlIGZvciBleHBsb2l0YXRpb24uCgpMZXQmIzM5O3MgcHVsbCB0b2dldGhlciB0aGUga2V5IGRldGFpbHMuIFllYWgsIHRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIHN1bW1hcml6ZSB0aGF0OiBgV29ydGhGdXp6aW5nOiB0cnVlYC4gVGhlIGNyaXRpY2FsIHN5bWJvbHMgdG8gbG9vayBhdCBhcmUgbGlrZWx5IGdvaW5nIHRvIGJlIGBmbG93X29mZmxvYWRfYWRkYCwgc2luY2UgdGhhdCYjMzk7cyB3aGF0JiMzOTtzIGdldHRpbmcgbW9kaWZpZWQuIFNvIGBGb2N1c1N5bWJvbHM6IFsmIzM0O2Zsb3dfb2ZmbG9hZF9hZGQmIzM0O11gLiBUbyBidWlsZCB0aGlzLCBJJiMzOTtsbCBuZWVkIGBFbmFibGVDb25maWdzOiBbJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssICYjMzQ7TkVURklMVEVSX0lOR1JFU1MmIzM0OywgJiMzNDtORl9DT05OVFJBQ0smIzM0OywgJiMzNDtORl9UQUJMRVMmIzM0O11gLiBUaGUgcmVhc29uIGlzIHByZXR0eSBjbGVhcjogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgbG9naWMgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gZHVyaW5nIGZsb3cgb2ZmbG9hZCBhZGRpdGlvbiBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uIGJ5IGludHJvZHVjaW5nIGEgbmV3IE5GX0ZMT1dfQ09ORklSTUVEIGZsYWcuJiMzNDsKCk5vdywgYSBxdWljayBzYW5pdHkgY2hlY2suIFNob3VsZCBJIGFkZCBvdGhlciBzeW1ib2xzPyBgZmxvd19vZmZsb2FkX2xvb2t1cGA/IEl0JiMzOTtzIGEgaG90LXBhdGggZnVuY3Rpb24sIHNvIGxpa2VseSBub3QgdGhlIGluaXRpYWwgZW50cnkgcG9pbnQuIFRoZW4gdGhlcmUmIzM5O3MgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAsIGJ1dCB0aGF0JiMzOTtzIHN0YXRpYywgc28gaXQmIzM5O3MgcHJvYmFibHkgbm90IGFzIGltcGFjdGZ1bCBoZXJlLiBgZmxvd19vZmZsb2FkX2FkZGAgaXMgKnRoZSogZXhwb3J0ZWQgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQuIFRoYXQmIzM5O3MgdGhlIGtleS4KCkxldCYjMzk7cyBub3QgZm9yZ2V0IGFib3V0IG90aGVyIGNvbmZpZ3MuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBtYWtlIHN1cmUgSSBjYW4gdHJpZ2dlciB0aGlzIHRocm91Z2ggdGhlIG5vcm1hbCB1c2VyIGludGVyZmFjZXMsIHNvIGBDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRGAgaXMgbGlrZWx5IHJlcXVpcmVkLCBvdGhlcndpc2UgSSB3aWxsIG5vdCBiZSBhYmxlIHRvIGFjdHVhbGx5IHJlYWNoIHRoZSBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZnV6emVkIHZpYSBuZnRhYmxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GVF9GTE9XX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTQ5OD1jb25maWcgTkZUX0VYVEhEUl9EQ0NQXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwMy1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDQ6Y29uZmlnIE5GVF9GTE9XX09GRkxPQURcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDUtXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgTkZfRkxPV19UQUJMRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQxNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgdGhlIEZsb3cgVGFibGUgT2ZmbG9hZCBFeHByZXNzaW9uKioKClJpZ2h0LCBzbyBgTkZUX0ZMT1dfT0ZGTE9BRGAgaXMgdGhlIG5hbWUgb2YgdGhhdCBzcGVjaWZpYyBuZnRhYmxlcyBleHByZXNzaW9uIHRoYXQgZGVhbHMgd2l0aCB0aGUgZmxvdyB0YWJsZS4gT2theSwgdGhhdCYjMzk7cyB3aGF0IEkgdGhvdWdodCwgYnV0IGl0IGFsd2F5cyBwYXlzIHRvIGRvdWJsZS1jaGVjay4gVGltZSB0byBxdWlja2x5IGludmVzdGlnYXRlIGl0cyBkZXBlbmRlbmNpZXMuIE5lZWQgdG8gc2VlIHdoYXQgb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcyBhcmUgcmVxdWlyZWQgZm9yIHRoYXQgdG8gZnVuY3Rpb24gcHJvcGVybHkuIEdvdHRhIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTA0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDQ6XHRjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxuIDUwNTpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbiA1MDY6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgaGFyZHdhcmUgZmxvdyBvZmZsb2FkIG1vZHVsZVwmIzM0O1xuIDUwNzpcdFx0aGVscFxuIDUwODpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBcJiMzNDtmbG93X29mZmxvYWRcJiMzNDsgZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gdXNlIHRvXG4gNTA5Olx0XHQgIGNob29zZSB3aGF0IGZsb3dzIGFyZSBwbGFjZWQgaW50byB0aGUgaGFyZHdhcmUuXG4gNTEwOlx0XG4gNTExOlx0Y29uZmlnIE5GVF9DT05OTElNSVRcbiA1MTI6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgY29ubmxpbWl0IG1vZHVsZVwmIzM0O1xuIDUxMzpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NjkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCB3ZXJlIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKkVuYWJsaW5nIFVzZXItU3BhY2UgRmxvdyBPZmZsb2FkKioKCkFscmlnaHQsIHRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYE5GVF9GTE9XX09GRkxPQURgIGlzIHRoZSAqa2V5KiBpbmdyZWRpZW50IGhlcmUuIEl0JiMzOTtzIHRoZSBtZWNoYW5pc20gd2UgbmVlZCB0byBhY3R1YWxseSBraWNrIG9mZiB0aGlzIGZsb3cgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5IGRpcmVjdGx5IGZyb20gdXNlciBzcGFjZSB0aHJvdWdoIG5mdGFibGVzLiBTbywgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0byBpbmNsdWRlIHRoYXQgbW9kdWxlLiBJdCYjMzk7cyBub3Qgb3B0aW9uYWw7IGl0JiMzOTtzIGZ1bmRhbWVudGFsLgoKTm93LCBiZWZvcmUgSSBjb21taXQgdG8gdGhhdCwgSSBzaG91bGQgZG8gYSBxdWljayBzYW5pdHkgY2hlY2suIEkgbmVlZCB0byBlbnN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYSBkaWZmZXJlbnQsIHBlcmhhcHMgbW9yZSBlbGVnYW50IG9yIGVmZmljaWVudCwgd2F5IHRvIHRyaWdnZXIgYGZsb3dfb2ZmbG9hZF9hZGRgLiBJIHZhZ3VlbHkgcmVtZW1iZXIgYWN0X2N0IG1pZ2h0IGJlIHJlbGV2YW50LiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoaXMgd2hvbGUgZmxvdy4gUGVyaGFwcyBpdCBwcm92aWRlcyBhbiBhbHRlcm5hdGl2ZSBwYXRoPyBCZXR0ZXIgdG8gYmUgdGhvcm91Z2ggYmVmb3JlIGZpbmFsaXppbmcgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Zsb3dfb2ZmbG9hZF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfY3QuYz00MjQ9c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfYWRkKHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTQ1My1cbm5ldC9zY2hlZC9hY3RfY3QuYzo0NTQ6XHRlcnIgPSBmbG93X29mZmxvYWRfYWRkKFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0LCBlbnRyeSk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtNDU1LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxODEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQ29uZmlybWluZyBgYWN0X2N0YCBVc2FnZSBhbmQgUGl2b3RpbmcgdG8gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIHdhcyBkb3VibGUtY2hlY2tpbmcgc29tZSBjb2RlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGFuZCB5ZXAsIGBuZXQvc2NoZWQvYWN0X2N0LmNgIGRlZmluaXRlbHkgdXRpbGl6ZXMgaXQuIEdvb2QsIHRoYXQgY29uZmlybXMgdGhlIGluaXRpYWwgYXNzdW1wdGlvbi4gTm93IHRoYXQgSSYjMzk7dmUgZXN0YWJsaXNoZWQgdGhhdCBgYWN0X2N0YCBpcyBpbmRlZWQgaW4gcGxheSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtb2R1bGUgaXMgYmVpbmcgc2V0IHVwIGFuZCB3aGF0IHBhcmFtZXRlcnMgaXQmIzM5O3MgdXNpbmcuIFdoYXQgYXJlIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlnIG9wdGlvbnMgdGhhdCBjb250cm9sIGl0cyBiZWhhdmlvcj8gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aCB0aGUgYnJvYWRlciBjb25uZWN0aW9uIHRyYWNraW5nIGluZnJhc3RydWN0dXJlIGFuZCBob3cgaXRzIGZlYXR1cmUgc2V0IGlzIGVuYWJsZWQuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9BQ1RfQ1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz04NTM9Y29uZmlnIE5FVF9BQ1RfQ09OTk1BUktcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy04NjQtXG5uZXQvc2NoZWQvS2NvbmZpZzo4NjU6Y29uZmlnIE5FVF9BQ1RfQ1RJTkZPXG5uZXQvc2NoZWQvS2NvbmZpZy04NjYtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgQ29ubmVjdGlvbiBNYXJrIEFjdGlvbnNcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz05MDY9Y29uZmlnIE5FVF9BQ1RfVFVOTkVMX0tFWVxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTkxNi1cbm5ldC9zY2hlZC9LY29uZmlnOjkxNzpjb25maWcgTkVUX0FDVF9DVFxubmV0L3NjaGVkL0tjb25maWctOTE4LVx0dHJpc3RhdGUgXCYjMzQ7Y29ubmVjdGlvbiB0cmFja2luZyB0YyBhY3Rpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1ODIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgTkVUX0FDVF9DVGAgRGVwZW5kZW5jaWVzKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVUX0FDVF9DVGAuIEJlZm9yZSBJIGRpZyBpbiB0b28gZGVlcCBvbiBhbnl0aGluZywgbGV0IG1lIG1lbnRhbGx5IG1hcCBvdXQgdGhlIHBvdGVudGlhbCBkb3duc3RyZWFtIGVmZmVjdHMgb2YgYW55IGNoYW5nZXMuIEkgd2FudCB0byBtaW5pbWl6ZSBhbnkgc3VycHJpc2VzIG9yIGNhc2NhZGluZyBpc3N1ZXMuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgaWRlbnRpZnlpbmcgdGhlIGRpcmVjdCBwYXJlbnQgY29tcG9uZW50czsgSSBuZWVkIHRvIGNvbnNpZGVyIGluZGlyZWN0IGNvbm5lY3Rpb25zIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbW9kdWxlcy4gSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgdGhpcyBpbXBhY3RzIGRhdGEgZmxvdywgcGVyZm9ybWFuY2UsIGFuZCBhbnkgaW50ZWdyYXRpb24gcG9pbnRzLiBJdCYjMzk7cyBhIHF1aWNrIHNhbml0eSBjaGVjayBiZWZvcmUgSSBnZXQgaW50byB0aGUgd2VlZHMsIGVuc3VyaW5nIEkmIzM5O20gYXBwcm9hY2hpbmcgdGhpcyBzeXN0ZW1hdGljYWxseSBhbmQgdGhvcm91Z2hseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkxNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTE3Olx0Y29uZmlnIE5FVF9BQ1RfQ1RcbiA5MTg6XHRcdHRyaXN0YXRlIFwmIzM0O2Nvbm5lY3Rpb24gdHJhY2tpbmcgdGMgYWN0aW9uXCYjMzQ7XG4gOTE5Olx0XHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUIFx1MDAyNlx1MDAyNiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2ICghTkZfTkFUIHx8IE5GX05BVCkgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbiA5MjA6XHRcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTXG4gOTIxOlx0XHRzZWxlY3QgTkZfTkFUX09WUyBpZiBORl9OQVRcbiA5MjI6XHRcdGhlbHBcbiA5MjM6XHRcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyBzZW5kaW5nIHRoZSBwYWNrZXRzIHRvIGNvbm50cmFjayBtb2R1bGUuXG4gOTI0Olx0XG4gOTI1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gOTI2Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTQ5CgkJCQkJCQlvdXRwdXQ6IDE2MAoJCQkJCQkJdGhvdWdodHM6IDIxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTmV0ZmlsdGVyIEZsb3cgVGFibGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgYE5FVF9BQ1RfQ1RgIGlzIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIGBORVRfQ0xTX0FDVGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX0ZMT1dfVEFCTEVgLiBHaXZlbiB0aGF0LCBJJiMzOTttIGdvaW5nIHRvIGFkZCBgTkVUX0FDVF9DVGAgYW5kIGBORlRfRkxPV19PRkZMT0FEYCB0byB0aGUgY29uZmlndXJhdGlvbiwgYWxvbmdzaWRlIGBORl9GTE9XX1RBQkxFYCwgYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYCwgYXMgdGhleSBhcmUgcHJlcmVxdWlzaXRlcyBvciBzdXBwb3J0aXZlIGNvbXBvbmVudHMuIFRoZSBmb2N1cyBoZXJlIGlzIG9uIGBmbG93X29mZmxvYWRfYWRkYC4KClRoZSBjb3JlIG9mIHRoaXMgaXMgYSByYWNlIGNvbmRpdGlvbiBmaXggd2l0aGluIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSwgd2hpY2ggaXMgYWRkcmVzc2VkIGJ5IGEgbmV3IGBORl9GTE9XX0NPTkZJUk1FRGAgZmxhZy4gVGhlIHBhdGNoIG1vZGlmaWVzIGBmbG93X29mZmxvYWRfYWRkYCB0byBzZXQgdGhpcyBmbGFnIGFmdGVyIGluc2VydGluZyBib3RoIGZsb3cgZGlyZWN0aW9ucyBpbnRvIHRoZSByaGFzaHRhYmxlLiBDcml0aWNhbGx5LCBpdCBhbHNvIHVwZGF0ZXMgdGhlIGxvb2t1cCBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uIGxvZ2ljIHRvIGlnbm9yZSBhbnkgZmxvd3MgdGhhdCBoYXZlbiYjMzk7dCBiZWVuIGNvbmZpcm1lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCB0b3VjaGluZyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIHNvIHdlIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsLgoKSSYjMzk7bSB0aGlua2luZyB0aGlzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGEgYHNldC1yZXN1bHRzYCBhY3Rpb24sIGFzIGl0JiMzOTtzIGEgdmVyeSBjbGVhciBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9JTkdSRVNTJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORVRfQUNUX0NUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zmxvd19vZmZsb2FkX2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjb3JlIGJ5IGludHJvZHVjaW5nIGEgbmV3IE5GX0ZMT1dfQ09ORklSTUVEIGZsYWcuIEl0IG1vZGlmaWVzIGZsb3dfb2ZmbG9hZF9hZGQgdG8gc2V0IHRoaXMgZmxhZyBhZnRlciBpbnNlcnRpbmcgYm90aCBkaXJlY3Rpb25zIG9mIHRoZSBmbG93IGludG8gdGhlIHJoYXNodGFibGUsIGFuZCB1cGRhdGVzIGxvb2t1cCBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uIGxvZ2ljIHRvIGlnbm9yZSB1bmNvbmZpcm1lZCBmbG93cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfSU5HUkVTUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9DVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Zsb3dfb2ZmbG9hZF9hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgY29yZSBieSBpbnRyb2R1Y2luZyBhIG5ldyBORl9GTE9XX0NPTkZJUk1FRCBmbGFnLiBJdCBtb2RpZmllcyBmbG93X29mZmxvYWRfYWRkIHRvIHNldCB0aGlzIGZsYWcgYWZ0ZXIgaW5zZXJ0aW5nIGJvdGggZGlyZWN0aW9ucyBvZiB0aGUgZmxvdyBpbnRvIHRoZSByaGFzaHRhYmxlLCBhbmQgdXBkYXRlcyBsb29rdXAgYW5kIGdhcmJhZ2UgY29sbGVjdGlvbiBsb2dpYyB0byBpZ25vcmUgdW5jb25maXJtZWQgZmxvd3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDA6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgKHJhY2UgY29uZGl0aW9uKSBkdXJpbmcgdGhlIGFkZGl0aW9uIG9mIGEgZmxvdyB0byB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUuIEJ5IGludHJvZHVjaW5nIHRoZSBgTkZfRkxPV19DT05GSVJNRURgIGZsYWcgYW5kIGNoYW5naW5nIHRoZSByaGFzaHRhYmxlIGluc2VydGlvbiBvcmRlciwgaXQgcHJldmVudHMgY29uY3VycmVudCBsb29rdXBzIG9yIGdhcmJhZ2UgY29sbGVjdGlvbiBmcm9tIGFjY2Vzc2luZyBhIGZsb3cgYmVmb3JlIGl0IGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBhZGRlZC4gQ29uY3VycmVuY3kgYnVncyBvZiB0aGlzIG5hdHVyZSB0eXBpY2FsbHkgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSAoaW5mby1sZWFrcykgb3IgY29tcGxleCB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHNwZWNpZmljYWxseSByZXF1aXJlIEtNU0FOLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmQzNTM5YWJkZjUwYTE4ZTIxZDljMDM0M2QwMzNlYzI2OWRjYjA5ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDAwOjM5OjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKaW5kZXggY2U0MTQxMTg5NjJmNS4uNjE4ZDI2ZTQ5ZmRmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oCkBAIC0xODksNiAmIzQzOzE4OSw3IEBAIGVudW0gbmZfZmxvd19mbGFncyB7CiAJTkZfRkxPV19IV19QRU5ESU5HLAogCU5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwKIAlORl9GTE9XX0hXX0VTVEFCTElTSEVELAomIzQzOwlORl9GTE9XX0NPTkZJUk1FRCwKIH07CiAKIGVudW0gZmxvd19vZmZsb2FkX3R5cGUgewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKaW5kZXggOGIxMTY1ZjJiNWE0OS4uMWUyYzRhMWRiOWE3MCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jCkBAIC0zMzIsMTggJiM0MzszMzIsMTcgQEAgaW50IGZsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdykKIAlmbG93LSZndDt0aW1lb3V0ID0gbmZfZmxvd3RhYmxlX3RpbWVfc3RhbXAgJiM0MzsgZmxvd19vZmZsb2FkX2dldF90aW1lb3V0KGZsb3cpOwogCiAJZXJyID0gcmhhc2h0YWJsZV9pbnNlcnRfZmFzdCgmYW1wO2Zsb3dfdGFibGUtJmd0O3JoYXNodGFibGUsCi0JCQkJICAgICAmYW1wO2Zsb3ctJmd0O3R1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX1JFUExZXS5ub2RlLAomIzQzOwkJCQkgICAgICZhbXA7Zmxvdy0mZ3Q7dHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUxdLm5vZGUsCiAJCQkJICAgICBuZl9mbG93X29mZmxvYWRfcmhhc2hfcGFyYW1zKTsKIAlpZiAoZXJyICZsdDsgMCkKIAkJcmV0dXJuIGVycjsKIAotCS8qIEdDIG9ubHkgaXRlcmF0ZXMgb3JpZ2luYWwtZGlyZWN0aW9uIGVudHJpZXM7IHB1Ymxpc2ggb3JpZ2luYWwgbGFzdC4gKi8KIAllcnIgPSByaGFzaHRhYmxlX2luc2VydF9mYXN0KCZhbXA7Zmxvd190YWJsZS0mZ3Q7cmhhc2h0YWJsZSwKLQkJCQkgICAgICZhbXA7Zmxvdy0mZ3Q7dHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUxdLm5vZGUsCiYjNDM7CQkJCSAgICAgJmFtcDtmbG93LSZndDt0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9SRVBMWV0ubm9kZSwKIAkJCQkgICAgIG5mX2Zsb3dfb2ZmbG9hZF9yaGFzaF9wYXJhbXMpOwogCWlmIChlcnIgJmx0OyAwKSB7CiAJCXJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoJmFtcDtmbG93X3RhYmxlLSZndDtyaGFzaHRhYmxlLAotCQkJCSAgICAgICAmYW1wO2Zsb3ctJmd0O3R1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX1JFUExZXS5ub2RlLAomIzQzOwkJCQkgICAgICAgJmFtcDtmbG93LSZndDt0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0ubm9kZSwKIAkJCQkgICAgICAgbmZfZmxvd19vZmZsb2FkX3JoYXNoX3BhcmFtcyk7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMzUzLDYgJiM0MzszNTIsOCBAQCBpbnQgZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KQogCWlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93X3RhYmxlKSkKIAkJbmZfZmxvd19vZmZsb2FkX2FkZChmbG93X3RhYmxlLCBmbG93KTsKIAomIzQzOwlzZXRfYml0KE5GX0ZMT1dfQ09ORklSTUVELCAmYW1wO2Zsb3ctJmd0O2ZsYWdzKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9hZGQpOwpAQCAtNDEyLDcgJiM0Mzs0MTMsOCBAQCBmbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsCiAKIAlkaXIgPSB0dXBsZWhhc2gtJmd0O3R1cGxlLmRpcjsKIAlmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pOwotCWlmICh0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCAmYW1wO2Zsb3ctJmd0O2ZsYWdzKSkKJiM0MzsJaWYgKHVubGlrZWx5KCF0ZXN0X2JpdChORl9GTE9XX0NPTkZJUk1FRCwgJmFtcDtmbG93LSZndDtmbGFncykpIHx8CiYjNDM7CSAgICB0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCAmYW1wO2Zsb3ctJmd0O2ZsYWdzKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlpZiAodW5saWtlbHkobmZfY3RfaXNfZHlpbmcoZmxvdy0mZ3Q7Y3QpKSkKQEAgLTU2OCwxNSAmIzQzOzU3MCwxOSBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X3RhYmxlX2V4dGVuZF9jdF90aW1lb3V0KHN0cnVjdCBuZl9jb25uICpjdCkKIHN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsCiAJCQkJICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpCiB7Ci0JYm9vbCB0ZWFyZG93biA9IHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sICZhbXA7Zmxvdy0mZ3Q7ZmxhZ3MpOwomIzQzOwlib29sIHRlYXJkb3duOwomIzQzOwomIzQzOwlpZiAoIXRlc3RfYml0KE5GX0ZMT1dfQ09ORklSTUVELCAmYW1wO2Zsb3ctJmd0O2ZsYWdzKSkKJiM0MzsJCXJldHVybjsKIAogCWlmIChuZl9mbG93X2hhc19leHBpcmVkKGZsb3cpIHx8CiAJICAgIG5mX2N0X2lzX2R5aW5nKGZsb3ctJmd0O2N0KSB8fAogCSAgICBuZl9mbG93X2N1c3RvbV9nYyhmbG93X3RhYmxlLCBmbG93KSkgewogCQlmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7CiAJCXRlYXJkb3duID0gdHJ1ZTsKLQl9IGVsc2UgaWYgKCF0ZWFyZG93bikgewomIzQzOwl9IGVsc2UgaWYgKCF0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCAmYW1wO2Zsb3ctJmd0O2ZsYWdzKSkgewogCQluZl9mbG93X3RhYmxlX2V4dGVuZF9jdF90aW1lb3V0KGZsb3ctJmd0O2N0KTsKJiM0MzsJCXRlYXJkb3duID0gZmFsc2U7CiAJfQogCiAJaWYgKHRlYXJkb3duKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDM1CgkJCQkJCQlvdXRwdXQ6IDE3MQoJCQkJCQkJdGhvdWdodHM6IDg5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBGaXhpbmcgYSBSYWNlLCBOb3QgSW50cm9kdWNpbmcgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIGZsb3cgb2ZmbG9hZCBjb2RlLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBzaXR1YXRpb24gd2hlcmUgYSBmbG93IGVudHJ5IHdhcyBnZXR0aW5nIGluc2VydGVkIGludG8gdGhlIHJoYXNodGFibGUgYmVmb3JlIGl0IHdhcyBmdWxseSBpbml0aWFsaXplZCwgbGVhZGluZyB0byBwb3RlbnRpYWwgYWNjZXNzIGJ5IG90aGVyIHRocmVhZHMgKGxpa2UgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIG9yIGxvb2t1cHMpIGJlZm9yZSBpdCB3YXMgcmVhZHkuCgpNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIG9yaWdpbmFsIGlzc3VlIGludm9sdmVkIGluc2VydGluZyB0aGUgJiMzNDtSRVBMWSYjMzQ7IGRpcmVjdGlvbiBlbnRyeSBpbnRvIHRoZSBoYXNoIHRhYmxlIGJlZm9yZSB0aGUgJiMzNDtPUklHSU5BTCYjMzQ7IGRpcmVjdGlvbiBlbnRyeSwgd2hpY2ggd2FzbiYjMzk7dCBmdWxseSBpbml0aWFsaXplZC4gVGhlIEdDIG9ubHkgaXRlcmF0ZXMgb3JpZ2luYWwtZGlyZWN0aW9uIGVudHJpZXM7IHB1Ymxpc2ggb3JpZ2luYWwgbGFzdC4gVGhpcyBwYXRjaCBjbGV2ZXJseSBmbGlwcyB0aGUgaW5zZXJ0aW9uIG9yZGVyIChPUklHSU5BTCB0aGVuIFJFUExZKSBhbmQgaW50cm9kdWNlcyBhIGBORl9GTE9XX0NPTkZJUk1FRGAgZmxhZyB0byBhY3QgYXMgYSAmIzM0O3JlYWR5JiMzNDsgc2lnbmFsLiBUaGUgbG9va3VwIGFuZCBHQyBmdW5jdGlvbnMgYXJlIHRoZW4gdXBkYXRlZCB0byBiYWlsIG91dCBlYXJseSBpZiB0aGlzIGZsYWcgaXNuJiMzOTt0IHNldC4KClRoZSBjb3JlIG9mIG15IGFuYWx5c2lzIGlzIHRoaXM6IHdoaWxlIHRoZSBpbml0aWFsIHByb2JsZW0gY291bGQgaGF2ZSByZXN1bHRlZCBpbiB1bmRlZmluZWQgYmVoYXZpb3IgZnJvbSBhY2Nlc3NpbmcgcGFydGlhbGx5IGluaXRpYWxpemVkIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpdCB3YXMgZHVlIHRvIGEgY29uY3VycmVuY3kgaXNzdWUsIG5vdCB0aGUgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpwZXIgc2UqLiBJdCYjMzk7cyBhIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgYWNjZXNzIGlzc3VlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBhbmQgS0NTQU4gKEtlcm5lbCBDb250cm9sLWZsb3cgSW50ZWdyaXR5KSBhcmUgZGVzaWduZWQgdG8gZGV0ZWN0LiBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzIHVzZWQgdG8gZGV0ZWN0IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJhY2UgY29uZGl0aW9uIG1lYW50IHRoYXQgbWVtb3J5IG1heSBub3QgaGF2ZSBiZWVuIGZ1bGx5IGluaXRpYWxpemVkLiBCdXQgdGhlIHByb2JsZW0gaXMgYWNjZXNzaW5nIGludmFsaWQgbWVtb3J5IGFuZCBub3QgYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlIHBhdGNoIGl0c2VsZiBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgaXQgZG9lc24mIzM5O3QgaGF2ZSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IHJlbGllcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaXQgZG9lc24mIzM5O3QgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcyBhcm91bmQgYm91bmRzIGNoZWNrcyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSBmbG93IHN0cnVjdCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGJlZm9yZSBgZmxvd19vZmZsb2FkX2FkZGAsIHNvIGl0IGlzIG5vdCBhIEtNU0FOIHByb2JsZW0uIFRoZSByYWNlIGlzIGJlaW5nIGFkZHJlc3NlZCBieSB0aGlzIHBhdGNoLgoKTXkgcXVpY2sgY2hlY2sgaXMgdG8gbG9vayBhdCB0aGUgYGZsb3dfb2ZmbG9hZF9hbGxvY2AgZnVuY3Rpb24uIEJ1dCB0aGVyZSBpcyBubyBuZWVkIGZvciB0aGlzLCBzaW5jZSB0aGUgcHJvYmxlbSBpcyBjb25jdXJyZW5jeS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpcyBhIGJ1ZyBmaXggZm9jdXNlZCBvbiBjb25jdXJyZW5jeSBhbmQgc2hvdWxkIG5vdCBiZSB0ZXN0ZWQgd2l0aCBLTVNBTi4gSSB3aWxsIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIChyYWNlIGNvbmRpdGlvbikgZHVyaW5nIHRoZSBhZGRpdGlvbiBvZiBhIGZsb3cgdG8gdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlLiBCeSBpbnRyb2R1Y2luZyB0aGUgYE5GX0ZMT1dfQ09ORklSTUVEYCBmbGFnIGFuZCBjaGFuZ2luZyB0aGUgcmhhc2h0YWJsZSBpbnNlcnRpb24gb3JkZXIsIGl0IHByZXZlbnRzIGNvbmN1cnJlbnQgbG9va3VwcyBvciBnYXJiYWdlIGNvbGxlY3Rpb24gZnJvbSBhY2Nlc3NpbmcgYSBmbG93IGJlZm9yZSBpdCBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgYWRkZWQuIENvbmN1cnJlbmN5IGJ1Z3Mgb2YgdGhpcyBuYXR1cmUgdHlwaWNhbGx5IGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaGUgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UgKGluZm8tbGVha3MpIG9yIGNvbXBsZXggdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCBzcGVjaWZpY2FsbHkgcmVxdWlyZSBLTVNBTi4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSAocmFjZSBjb25kaXRpb24pIGR1cmluZyB0aGUgYWRkaXRpb24gb2YgYSBmbG93IHRvIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZS4gQnkgaW50cm9kdWNpbmcgdGhlIGBORl9GTE9XX0NPTkZJUk1FRGAgZmxhZyBhbmQgY2hhbmdpbmcgdGhlIHJoYXNodGFibGUgaW5zZXJ0aW9uIG9yZGVyLCBpdCBwcmV2ZW50cyBjb25jdXJyZW50IGxvb2t1cHMgb3IgZ2FyYmFnZSBjb2xsZWN0aW9uIGZyb20gYWNjZXNzaW5nIGEgZmxvdyBiZWZvcmUgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIGFkZGVkLiBDb25jdXJyZW5jeSBidWdzIG9mIHRoaXMgbmF0dXJlIHR5cGljYWxseSBsZWFkIHRvIHVzZS1hZnRlci1mcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgY29weWluZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIChpbmZvLWxlYWtzKSBvciBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgc3BlY2lmaWNhbGx5IHJlcXVpcmUgS01TQU4uIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDozOTo0OC43MTg4ODIwODFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTA0NzA0ODI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORVRGSUxURVJfSU5HUkVTU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgICBcIk5FVF9BQ1RfQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmbG93X29mZmxvYWRfYWRkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSAocmFjZSBjb25kaXRpb24pIGR1cmluZyB0aGUgYWRkaXRpb24gb2YgYSBmbG93IHRvIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZS4gQnkgaW50cm9kdWNpbmcgdGhlIGBORl9GTE9XX0NPTkZJUk1FRGAgZmxhZyBhbmQgY2hhbmdpbmcgdGhlIHJoYXNodGFibGUgaW5zZXJ0aW9uIG9yZGVyLCBpdCBwcmV2ZW50cyBjb25jdXJyZW50IGxvb2t1cHMgb3IgZ2FyYmFnZSBjb2xsZWN0aW9uIGZyb20gYWNjZXNzaW5nIGEgZmxvdyBiZWZvcmUgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIGFkZGVkLiBDb25jdXJyZW5jeSBidWdzIG9mIHRoaXMgbmF0dXJlIHR5cGljYWxseSBsZWFkIHRvIHVzZS1hZnRlci1mcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgY29weWluZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIChpbmZvLWxlYWtzKSBvciBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgc3BlY2lmaWNhbGx5IHJlcXVpcmUgS01TQU4uIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGNvcmUgYnkgaW50cm9kdWNpbmcgYSBuZXcgTkZfRkxPV19DT05GSVJNRUQgZmxhZy4gSXQgbW9kaWZpZXMgZmxvd19vZmZsb2FkX2FkZCB0byBzZXQgdGhpcyBmbGFnIGFmdGVyIGluc2VydGluZyBib3RoIGRpcmVjdGlvbnMgb2YgdGhlIGZsb3cgaW50byB0aGUgcmhhc2h0YWJsZSwgYW5kIHVwZGF0ZXMgbG9va3VwIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMgdG8gaWdub3JlIHVuY29uZmlybWVkIGZsb3dzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDozOTo0OC43MTg4ODgyODFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNjk0MTUxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJkMzUzOWFiZGY1MGExOGUyMWQ5YzAzNDNkMDMzZWMyNjlkY2IwOWRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMDA6Mzk6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcXG5pbmRleCBjZTQxNDExODk2MmY1Li42MThkMjZlNDlmZGY2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXFxuQEAgLTE4OSw2ICsxODksNyBAQCBlbnVtIG5mX2Zsb3dfZmxhZ3Mge1xcbiBcXHRORl9GTE9XX0hXX1BFTkRJTkcsXFxuIFxcdE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCxcXG4gXFx0TkZfRkxPV19IV19FU1RBQkxJU0hFRCxcXG4rXFx0TkZfRkxPV19DT05GSVJNRUQsXFxuIH07XFxuIFxcbiBlbnVtIGZsb3dfb2ZmbG9hZF90eXBlIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcXG5pbmRleCA4YjExNjVmMmI1YTQ5Li4xZTJjNGExZGI5YTcwIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXFxuQEAgLTMzMiwxOCArMzMyLDE3IEBAIGludCBmbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxuIFxcdGZsb3ctXFx1MDAzZXRpbWVvdXQgPSBuZl9mbG93dGFibGVfdGltZV9zdGFtcCArIGZsb3dfb2ZmbG9hZF9nZXRfdGltZW91dChmbG93KTtcXG4gXFxuIFxcdGVyciA9IHJoYXNodGFibGVfaW5zZXJ0X2Zhc3QoXFx1MDAyNmZsb3dfdGFibGUtXFx1MDAzZXJoYXNodGFibGUsXFxuLVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmZsb3ctXFx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX1JFUExZXS5ub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZmbG93LVxcdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0ubm9kZSxcXG4gXFx0XFx0XFx0XFx0ICAgICBuZl9mbG93X29mZmxvYWRfcmhhc2hfcGFyYW1zKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHQvKiBHQyBvbmx5IGl0ZXJhdGVzIG9yaWdpbmFsLWRpcmVjdGlvbiBlbnRyaWVzOyBwdWJsaXNoIG9yaWdpbmFsIGxhc3QuICovXFxuIFxcdGVyciA9IHJoYXNodGFibGVfaW5zZXJ0X2Zhc3QoXFx1MDAyNmZsb3dfdGFibGUtXFx1MDAzZXJoYXNodGFibGUsXFxuLVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmZsb3ctXFx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX09SSUdJTkFMXS5ub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZmbG93LVxcdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9SRVBMWV0ubm9kZSxcXG4gXFx0XFx0XFx0XFx0ICAgICBuZl9mbG93X29mZmxvYWRfcmhhc2hfcGFyYW1zKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2Zmxvd190YWJsZS1cXHUwMDNlcmhhc2h0YWJsZSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZmbG93LVxcdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9SRVBMWV0ubm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZmbG93LVxcdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0ubm9kZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIG5mX2Zsb3dfb2ZmbG9hZF9yaGFzaF9wYXJhbXMpO1xcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuQEAgLTM1Myw2ICszNTIsOCBAQCBpbnQgZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxcbiBcXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd190YWJsZSkpXFxuIFxcdFxcdG5mX2Zsb3dfb2ZmbG9hZF9hZGQoZmxvd190YWJsZSwgZmxvdyk7XFxuIFxcbitcXHRzZXRfYml0KE5GX0ZMT1dfQ09ORklSTUVELCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2FkZCk7XFxuQEAgLTQxMiw3ICs0MTMsOCBAQCBmbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuIFxcbiBcXHRkaXIgPSB0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRpcjtcXG4gXFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcXG4tXFx0aWYgKHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncykpXFxuK1xcdGlmICh1bmxpa2VseSghdGVzdF9iaXQoTkZfRkxPV19DT05GSVJNRUQsIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncykpIHx8XFxuK1xcdCAgICB0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShuZl9jdF9pc19keWluZyhmbG93LVxcdTAwM2VjdCkpKVxcbkBAIC01NjgsMTUgKzU3MCwxOSBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X3RhYmxlX2V4dGVuZF9jdF90aW1lb3V0KHN0cnVjdCBuZl9jb25uICpjdClcXG4gc3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpXFxuIHtcXG4tXFx0Ym9vbCB0ZWFyZG93biA9IHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncyk7XFxuK1xcdGJvb2wgdGVhcmRvd247XFxuK1xcbitcXHRpZiAoIXRlc3RfYml0KE5GX0ZMT1dfQ09ORklSTUVELCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRpZiAobmZfZmxvd19oYXNfZXhwaXJlZChmbG93KSB8fFxcbiBcXHQgICAgbmZfY3RfaXNfZHlpbmcoZmxvdy1cXHUwMDNlY3QpIHx8XFxuIFxcdCAgICBuZl9mbG93X2N1c3RvbV9nYyhmbG93X3RhYmxlLCBmbG93KSkge1xcbiBcXHRcXHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XFxuIFxcdFxcdHRlYXJkb3duID0gdHJ1ZTtcXG4tXFx0fSBlbHNlIGlmICghdGVhcmRvd24pIHtcXG4rXFx0fSBlbHNlIGlmICghdGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgXFx1MDAyNmZsb3ctXFx1MDAzZWZsYWdzKSkge1xcbiBcXHRcXHRuZl9mbG93X3RhYmxlX2V4dGVuZF9jdF90aW1lb3V0KGZsb3ctXFx1MDAzZWN0KTtcXG4rXFx0XFx0dGVhcmRvd24gPSBmYWxzZTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHRlYXJkb3duKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjM5OjQ5LjE0NjU3NjQxNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc2MzEzMzM2MDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5FVEZJTFRFUl9JTkdSRVNTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkVUX0FDVF9DVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZsb3dfb2ZmbG9hZF9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjb3JlIGJ5IGludHJvZHVjaW5nIGEgbmV3IE5GX0ZMT1dfQ09ORklSTUVEIGZsYWcuIEl0IG1vZGlmaWVzIGZsb3dfb2ZmbG9hZF9hZGQgdG8gc2V0IHRoaXMgZmxhZyBhZnRlciBpbnNlcnRpbmcgYm90aCBkaXJlY3Rpb25zIG9mIHRoZSBmbG93IGludG8gdGhlIHJoYXNodGFibGUsIGFuZCB1cGRhdGVzIGxvb2t1cCBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uIGxvZ2ljIHRvIGlnbm9yZSB1bmNvbmZpcm1lZCBmbG93cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmQzNTM5YWJkZjUwYTE4ZTIxZDljMDM0M2QwMzNlYzI2OWRjYjA5ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDAwOjM5OjQ3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbmluZGV4IGNlNDE0MTE4OTYyZjUuLjYxOGQyNmU0OWZkZjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG5AQCAtMTg5LDYgKzE4OSw3IEBAIGVudW0gbmZfZmxvd19mbGFncyB7XG4gXHRORl9GTE9XX0hXX1BFTkRJTkcsXG4gXHRORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsXG4gXHRORl9GTE9XX0hXX0VTVEFCTElTSEVELFxuK1x0TkZfRkxPV19DT05GSVJNRUQsXG4gfTtcbiBcbiBlbnVtIGZsb3dfb2ZmbG9hZF90eXBlIHtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuaW5kZXggOGIxMTY1ZjJiNWE0OS4uMWUyYzRhMWRiOWE3MCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbkBAIC0zMzIsMTggKzMzMiwxNyBAQCBpbnQgZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxuIFx0Zmxvdy1cdTAwM2V0aW1lb3V0ID0gbmZfZmxvd3RhYmxlX3RpbWVfc3RhbXAgKyBmbG93X29mZmxvYWRfZ2V0X3RpbWVvdXQoZmxvdyk7XG4gXG4gXHRlcnIgPSByaGFzaHRhYmxlX2luc2VydF9mYXN0KFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlcmhhc2h0YWJsZSxcbi1cdFx0XHRcdCAgICAgXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9SRVBMWV0ubm9kZSxcbitcdFx0XHRcdCAgICAgXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0ubm9kZSxcbiBcdFx0XHRcdCAgICAgbmZfZmxvd19vZmZsb2FkX3JoYXNoX3BhcmFtcyk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0LyogR0Mgb25seSBpdGVyYXRlcyBvcmlnaW5hbC1kaXJlY3Rpb24gZW50cmllczsgcHVibGlzaCBvcmlnaW5hbCBsYXN0LiAqL1xuIFx0ZXJyID0gcmhhc2h0YWJsZV9pbnNlcnRfZmFzdChcdTAwMjZmbG93X3RhYmxlLVx1MDAzZXJoYXNodGFibGUsXG4tXHRcdFx0XHQgICAgIFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUxdLm5vZGUsXG4rXHRcdFx0XHQgICAgIFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfUkVQTFldLm5vZGUsXG4gXHRcdFx0XHQgICAgIG5mX2Zsb3dfb2ZmbG9hZF9yaGFzaF9wYXJhbXMpO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlcmhhc2h0YWJsZSxcbi1cdFx0XHRcdCAgICAgICBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX1JFUExZXS5ub2RlLFxuK1x0XHRcdFx0ICAgICAgIFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUxdLm5vZGUsXG4gXHRcdFx0XHQgICAgICAgbmZfZmxvd19vZmZsb2FkX3JoYXNoX3BhcmFtcyk7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG5AQCAtMzUzLDYgKzM1Miw4IEBAIGludCBmbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG4gXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd190YWJsZSkpXG4gXHRcdG5mX2Zsb3dfb2ZmbG9hZF9hZGQoZmxvd190YWJsZSwgZmxvdyk7XG4gXG4rXHRzZXRfYml0KE5GX0ZMT1dfQ09ORklSTUVELCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYWRkKTtcbkBAIC00MTIsNyArNDEzLDggQEAgZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuIFxuIFx0ZGlyID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpcjtcbiBcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XG4tXHRpZiAodGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncykpXG4rXHRpZiAodW5saWtlbHkoIXRlc3RfYml0KE5GX0ZMT1dfQ09ORklSTUVELCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSkgfHxcbitcdCAgICB0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRpZiAodW5saWtlbHkobmZfY3RfaXNfZHlpbmcoZmxvdy1cdTAwM2VjdCkpKVxuQEAgLTU2OCwxNSArNTcwLDE5IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZXh0ZW5kX2N0X3RpbWVvdXQoc3RydWN0IG5mX2Nvbm4gKmN0KVxuIHN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4gXHRcdFx0XHQgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgdm9pZCAqZGF0YSlcbiB7XG4tXHRib29sIHRlYXJkb3duID0gdGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncyk7XG4rXHRib29sIHRlYXJkb3duO1xuK1xuK1x0aWYgKCF0ZXN0X2JpdChORl9GTE9XX0NPTkZJUk1FRCwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncykpXG4rXHRcdHJldHVybjtcbiBcbiBcdGlmIChuZl9mbG93X2hhc19leHBpcmVkKGZsb3cpIHx8XG4gXHQgICAgbmZfY3RfaXNfZHlpbmcoZmxvdy1cdTAwM2VjdCkgfHxcbiBcdCAgICBuZl9mbG93X2N1c3RvbV9nYyhmbG93X3RhYmxlLCBmbG93KSkge1xuIFx0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4gXHRcdHRlYXJkb3duID0gdHJ1ZTtcbi1cdH0gZWxzZSBpZiAoIXRlYXJkb3duKSB7XG4rXHR9IGVsc2UgaWYgKCF0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSkge1xuIFx0XHRuZl9mbG93X3RhYmxlX2V4dGVuZF9jdF90aW1lb3V0KGZsb3ctXHUwMDNlY3QpO1xuK1x0XHR0ZWFyZG93biA9IGZhbHNlO1xuIFx0fVxuIFxuIFx0aWYgKHRlYXJkb3duKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDozOTo0OS4xNDY1Nzc5MDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDU4OTY5NjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgTmV0ZmlsdGVyIEZsb3cgVGFibGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AuIEl0J3MgaW50cm9kdWNpbmcgYSBuZXcgYE5GX0ZMT1dfQ09ORklSTUVEYCBmbGFnIHRvIGBuZl9mbG93X2ZsYWdzYC4gSW1tZWRpYXRlbHksIEkgc2VlIHRoaXMgaXMgYWJvdXQgc3RhdGUgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGZsb3cgdGFibGUsIHByb2JhYmx5IHRvIGltcHJvdmUgY29uY3VycmVuY3kgb3IgY29ycmVjdG5lc3MuXG5cblNwZWNpZmljYWxseSwgdGhlIHBhdGNoIHNlZW1zIHRvIG1vZGlmeSBob3cgbmV3IGZsb3dzIGFyZSBhZGRlZCAoYGZsb3dfb2ZmbG9hZF9hZGRgKS4gSXQncyBub3cgaW5zZXJ0aW5nIHRoZSBvcmlnaW5hbCBkaXJlY3Rpb24sIHRoZW4gdGhlIHJlcGx5LCBhbmQgdGhlbiAqZmluYWxseSogc2V0dGluZyB0aGlzIGBORl9GTE9XX0NPTkZJUk1FRGAgZmxhZy4gVGhpcyBzY3JlYW1zIFwiYXRvbWljaXR5XCIgdG8gbWUg4oCTIHRoZXkncmUgZW5zdXJpbmcgdGhlIGZsb3cgaXNuJ3QgY29uc2lkZXJlZCBcInJlYWR5XCIgdW50aWwgYWxsIGVzc2VudGlhbCBwYXJ0cyBhcmUgaW4gcGxhY2UuXG5cblRoZSBtb2RpZmljYXRpb25zIHRvIGBmbG93X29mZmxvYWRfbG9va3VwYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYCBhcmUgZnVydGhlciBpbmRpY2F0b3JzLiBUaGV5J3JlIGJvdGggY2hlY2tpbmcgZm9yIGBORl9GTE9XX0NPTkZJUk1FRGAuICBJZiBpdCBpc24ndCBzZXQsIGBmbG93X29mZmxvYWRfbG9va3VwYCByZXR1cm5zIE5VTEwgKGVmZmVjdGl2ZWx5IGhpZGluZyB0aGUgaW5jb21wbGV0ZSBlbnRyeSkgYW5kIGBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcGAgYmFpbHMgZWFybHkuICBUaGlzIGlzIGEgY2xldmVyIHdheSB0byBwcmV2ZW50IHByZW1hdHVyZSBsb29rdXBzIG9yIGdhcmJhZ2UgY29sbGVjdGlvbiBvZiBmbG93cyB0aGF0IGFyZW4ndCBmdWxseSBwb3B1bGF0ZWQuXG5cbkl0J3MgY2xlYXIgdGhhdCB0aGUgZ29hbCBoZXJlIGlzIHRvIGZpeCBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbi4gIFRoZSBjb21tZW50IG1lbnRpb25zIHRoYXQgdGhlIHJhY2UgaW52b2x2ZXMgYSBmbG93IGJlaW5nIGxvb2tlZCB1cCBvciBHQydkIGJlZm9yZSBpdCdzIGZ1bGx5IGFkZGVkLiBUaGlzIGlzIGEgY29tbW9uIGFuZCBuYXN0eSBwcm9ibGVtIGluIGNvbmN1cnJlbnQgc3lzdGVtcywgYW5kIHRoaXMgYXBwcm9hY2ggaXMgYSBzb2xpZCB3YXkgdG8gYWRkcmVzcyBpdC4gIEl0IGxvb2tzIGxpa2UgdGhpcyBwcmV2ZW50cyBvcGVyYXRpb25zIG9uIGFuIGluY29tcGxldGUgZmxvdy5cblxuTm93LCBsZXQncyBmaWd1cmUgb3V0IHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBpbnZvbHZlZC4gIEkga25vdyB0aGF0IGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jYCBpcyBnb2luZyB0byBiZSBjb21waWxlZCBpZiBgQ09ORklHX05GX0ZMT1dfVEFCTEVgIGlzIGRlZmluZWQuIExldCdzIGNvbmZpcm0gdGhhdCBieSBjaGVja2luZyBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMzgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDozOTo1NC42MDU1NTAzOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE5MTAwNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd190YWJsZV9jb3JlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE0Mj1vYmotJChDT05GSUdfTkZfRkxPV19UQUJMRSlcXHQrPSBuZl9mbG93X3RhYmxlLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0MzpuZl9mbG93X3RhYmxlLW9ianNcXHRcXHQ6PSBuZl9mbG93X3RhYmxlX2NvcmUubyBuZl9mbG93X3RhYmxlX2lwLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ0LVxcdFxcdFxcdFxcdCAgIG5mX2Zsb3dfdGFibGVfcGF0aC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6Mzk6NTQuNzU3NDY0OTc0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1MDMwNjAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgRmxvdyBUYWJsZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYENPTkZJR19ORl9GTE9XX1RBQkxFYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIG9yIG92ZXJsb29raW5nIHBvdGVudGlhbCBjb25mbGljdHMuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgaGluZ2Ugb24gdGhpcyBvbmUuIFVuZGVyc3RhbmRpbmcgdGhlIHByZXJlcXVpc2l0ZXMgd2lsbCBwYWludCB0aGUgZnVsbCBwaWN0dXJlIG9mIGhvdyB0aGlzIG9wdGlvbiBmaXRzIGludG8gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgzNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjM5OjU3LjgwNzc3MzY5M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQxNjI0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfRkxPV19UQUJMRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIyLVxcdGJvb2wgXFxcIlN1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDozOTo1Ny44NTQxOTM5MThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQ0OTA3ODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE5GX0ZMT1dfVEFCTEUgS2NvbmZpZyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgYE5GX0ZMT1dfVEFCTEVgIEtjb25maWcuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBmZWF0dXJlLiBXaGF0IGFyZSB0aGUga2V5IGJ1aWxkLXRpbWUgZGVjaXNpb25zIHdlJ3JlIHByZXNlbnRlZCB3aXRoPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBmZWF0dXJlcyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gZXZlbiAqYmUqIGEgdmlhYmxlIG9wdGlvbj8gQXJlIHRoZXJlIHNwZWNpZmljIG5ldHdvcmtpbmcgc3RhY2sgcHJlcmVxdWlzaXRlcywgb3IgaXMgaXQgdGllZCB0byBjZXJ0YWluIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAoZS5nLiwgaGFyZHdhcmUgb2ZmbG9hZCBzdXBwb3J0KT8gSSBuZWVkIHRvIGtub3cgdGhlIHByZWNvbmRpdGlvbnMuXG4qICAgKipEZWZhdWx0IEJlaGF2aW9yOioqIFdoYXQncyB0aGUgZGVmYXVsdCBzdGF0ZSDigJMgaXMgaXQgYnVpbHQtaW4sIG1vZHVsYXIsIG9yIGRpc2FibGVkPyBVbmRlcnN0YW5kaW5nIHRoZSBkZWZhdWx0IHByb3ZpZGVzIGNyaXRpY2FsIGNvbnRleHQuXG4qICAgKipDb25maWd1cmF0aW9uIE9wdGlvbnM6KiogQmV5b25kIGp1c3QgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoZSBtb2R1bGUsIHdoYXQgdHVuYWJsZSBwYXJhbWV0ZXJzIGV4aXN0PyBBcmUgdGhlcmUgb3B0aW9ucyByZWxhdGVkIHRvIGZsb3cgdGFibGUgc2l6ZSwgYWdpbmcsIG9yIHNwZWNpZmljIG9mZmxvYWQgZmVhdHVyZXM/IFRoaXMgd2lsbCBpbmZvcm0gYW55IG9wdGltaXphdGlvbiBzdHJhdGVneSBJIG5lZWQuXG4qICAgKipIZWxwIFRleHQ6KiogVGhpcyBzaG91bGQgYmUgcXVpdGUgaW5zaWdodGZ1bC4gV2hhdCBkbyB0aGUgZGVzY3JpcHRpb25zIHRlbGwgdXMgYWJvdXQgdGhlIGludGVuZGVkIHB1cnBvc2UgYW5kIHVzZSBjYXNlcyBmb3IgdGhlIGZlYXR1cmU/IFRoZSBoZWxwIHRleHQgc2hvdWxkIGNsdWUgbWUgaW4gb24gd2hhdCBraW5kIG9mIHByb2JsZW1zIHRoaXMgc29sdmVzLlxuKiAgICoqQ29uZmxpY3RzOioqIEknbGwgYmUgb24gdGhlIGxvb2tvdXQgZm9yIGFueSBvYnZpb3VzIGNvbmZsaWN0cyB3aXRoIG90aGVyIG5ldHdvcmtpbmcgZmVhdHVyZXMuIEFyZSB0aGVyZSBhbnkga25vd24gaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBlc3RhYmxpc2hlZCBzb2x1dGlvbnMgdGhhdCBJJ2xsIG5lZWQgdG8gY29uc2lkZXI/XG4qICAgKipDb25kaXRpb25hbCBEZXBlbmRlbmNpZXM6KiogSSBhbnRpY2lwYXRlIHRoZXJlIHdpbGwgYmUgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGJhc2VkIG9uIHRoZSBrZXJuZWwncyBhcmNoaXRlY3R1cmUsIGhhcmR3YXJlLCBvciBhbm90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxuXG5JJ20gZXNzZW50aWFsbHkgdHJ5aW5nIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBgTkZfRkxPV19UQUJMRWAuIEl0J3MgYWxsIGFib3V0IGNvbnRleHQsIHJlc3RyaWN0aW9ucywgYW5kIHRoZSBrbm9icyBJIGNhbiB0d2Vhay5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIwNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQwOjAxLjg5OTEwNDE2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MTEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MTE6XFx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG4gNzEyOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcXFwiXFxuIDcxMzpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9JTkdSRVNTXFxuIDcxNDpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbiA3MTU6XFx0XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcXG4gNzE2OlxcdFxcdGhlbHBcXG4gNzE3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgZmxvdyB0YWJsZSBjb3JlIGluZnJhc3RydWN0dXJlLlxcbiA3MTg6XFx0XFxuIDcxOTpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuIDcyMDpcXHRcXG4gNzIxOlxcdGNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xcbiA3MjI6XFx0XFx0Ym9vbCBcXFwiU3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcXFwiXFxuIDcyMzpcXHRcXHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcXG4gNzI0OlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbiA3MjU6XFx0XFx0aGVscFxcbiA3MjY6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGZvciB0aGUgZmxvdyB0YWJsZSBvZmZsb2FkIHN0YXRpc3RpY3NcXG4gNzI3OlxcdFxcdCAgdG8gYmUgc2hvd24gaW4gcHJvY2ZzIHVuZGVyIG5ldC9uZXRmaWx0ZXIvbmZfZmxvd3RhYmxlLlxcbiA3Mjg6XFx0XFxuIDcyOTpcXHRjb25maWcgTkVURklMVEVSX1hUQUJMRVNcXG4gNzMwOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgWHRhYmxlcyBzdXBwb3J0IChyZXF1aXJlZCBmb3IgaXBfdGFibGVzKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6NDA6MDEuODk5MjQ1OTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE5OTg5MzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE5ldGZpbHRlciBGbG93IE9mZmxvYWQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIE5ldGZpbHRlciBmbG93IG9mZmxvYWQgc2l0dWF0aW9uLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXJlIHRoZSBkZXBlbmRlbmNpZXMuIFdlJ3ZlIGdvdCBgTkVURklMVEVSX0lOR1JFU1NgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9UQUJMRVNgLiBUaGF0IG1lYW5zIHRvIGdldCB0aGlzIHdob2xlIHRoaW5nIHdvcmtpbmcsIHRoZSBgRW5hYmxlQ29uZmlnc2AgbmVlZCB0byBpbmNsdWRlIGBORl9GTE9XX1RBQkxFYCAobmF0dXJhbGx5KSwgYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYC4gV2UgbmVlZCB0aG9zZSBidWlsZGluZyBibG9ja3MgaW4gcGxhY2UgYmVmb3JlIHdlIGNhbiBldmVuIGJlZ2luLlxuXG5OZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGBGb2N1c1N5bWJvbHNgLiBFc3NlbnRpYWxseSwgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IHBsYXllcnMgaGVyZSB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZD8gTG9va3MgbGlrZSB3ZSBoYXZlOlxuXG4qICAgYGZsb3dfb2ZmbG9hZF9hZGRgXG4qICAgYGZsb3dfb2ZmbG9hZF9sb29rdXBgXG4qICAgYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYFxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogYXJlIHRoZXNlIHN5bWJvbHMgZXhwb3J0ZWQgb3IgYXJlIHRoZXkgc3RhdGljIHdpdGhpbiB0aGUgbW9kdWxlPyBLbm93aW5nIHRoYXQgdGVsbHMgbWUgaG93IGVhc2lseSB0aGV5IGNhbiBiZSBhY2Nlc3NlZCBhbmQgdXNlZC4gYGZsb3dfb2ZmbG9hZF9hZGRgIGlzICpkZWZpbml0ZWx5KiBleHBvcnRlZCDigJMgSSBjYW4gc2VlIGBFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYWRkKWAuIE5vdywgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIGBmbG93X29mZmxvYWRfbG9va3VwYCBpcyBhbHNvIGV4cG9ydGVkLiBUaGF0J3MgdGhlIG5leHQgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NDQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MDowNi4yMTkyMzg2MzRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTg2Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZsb3dfb2ZmbG9hZF9sb29rdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTQwMT1zdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjQwMjpmbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MDMtXFx0XFx0ICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MjQtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NDI1OkVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9sb29rdXApO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDI2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MDowNi4yNjY4MzA3MThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg0OTY4NTU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipFeGFtaW5pbmcgRmxvdyBPZmZsb2FkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZsb3cgb2ZmbG9hZCBmdW5jdGlvbnMuIExldCBtZSBzZWUuLi4gYGZsb3dfb2ZmbG9hZF9sb29rdXBgIC0geWVwLCB0aGF0J3MgZGVmaW5pdGVseSBleHBvcnRlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgY2FuIGFjY2VzcyBhbmQgdXNlIGl0IGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgbm8gcHJvYmxlbSB0aGVyZS4gTm93LCB0aGUgb3RoZXIgb25lLCBgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXBgLi4uQWgsIGdvb2QuIFRoYXQgb25lJ3MgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGF0J3Mgd2hhdCBJIGV4cGVjdGVkIGZvciBhIGdhcmJhZ2UgY29sbGVjdGlvbiBzdGVwLiBJdCdzIG1lYW50IHRvIGJlIGFuIGludGVybmFsIGhlbHBlciwgbm90IHNvbWV0aGluZyBleHBvc2VkIGZvciBleHRlcm5hbCB1c2UuIEV4Y2VsbGVudC4gSnVzdCBhcyBwbGFubmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjE1LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6NDA6MDkuMTE2NTE5MTE3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzYyNDE5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NTEyPXN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZXh0ZW5kX2N0X3RpbWVvdXQoc3RydWN0IG5mX2Nvbm4gKmN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy01NjktXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo1NzA6c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTU3MS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgdm9pZCAqZGF0YSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NjA2PXZvaWQgbmZfZmxvd190YWJsZV9nY19ydW4oc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYwNy17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo2MDg6XFx0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3dfdGFibGUsIG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwLCBOVUxMKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYwOS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQwOjA5LjE2MDE0ODI2M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzgyNTQ5MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIEZsb3cgVGFibGUgR2FyYmFnZSBDb2xsZWN0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBnYXJiYWdlIGNvbGxlY3Rpb24uIEkgc2VlIHRoYXQgdGhlIGBuZl9mbG93X3RhYmxlX2djX3J1bmAgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGluaXRpYXRpbmcgdGhpcyBwcm9jZXNzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyBgbmZfZmxvd190YWJsZV9nY19ydW5gIGV4cG9ydGVkLCBvciBpcyBpdCBpbnRlcm5hbD9cIiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBxdWVzdGlvbi4gVW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgaGVscHMgZGV0ZXJtaW5lIGhvdyBpdCdzIGludm9rZWQgYW5kIGlmIEkgY2FuIHBvdGVudGlhbGx5IGhvb2sgaW50byBpdCBmb3IgZGVidWdnaW5nIG9yIGN1c3RvbSBleHRlbnNpb25zLiBUaGVuIEkgbm90aWNlIHRoZSBjYWxsIHRvIGBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcGAuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGlzIHRoZSBjcnV4IG9mIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gcHJvZ3Jlc3Nlcy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXBgIGFjdHVhbGx5IGRvZXMgYW5kIGhvdyBpdCdzIGludGVncmF0ZWQgaW50byB0aGUgYmlnZ2VyIGdhcmJhZ2UgY29sbGVjdGlvbiBvcGVyYXRpb24gd2l0aGluIE5ldGZpbHRlci4gVGhpcyB3aWxsIGRyaXZlIG15IG5leHQgcXVlc3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMTUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MDoxMi41NDI3MDEwNTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzM2OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfdGFibGVfZ2NfcnVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz01NzA9c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjA1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NjA2OnZvaWQgbmZfZmxvd190YWJsZV9nY19ydW4oc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYwNy17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTYxMT1zdGF0aWMgdm9pZCBuZl9mbG93X29mZmxvYWRfd29ya19nYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYxNS1cXHRmbG93X3RhYmxlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZl9mbG93dGFibGUsIGdjX3dvcmsud29yayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo2MTY6XFx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02MTctXFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsIFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VnY193b3JrLCBIWik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc2Nz12b2lkIG5mX2Zsb3dfdGFibGVfZnJlZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NzYtXFx0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3dfdGFibGUsIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cCwgTlVMTCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3Nzc6XFx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NzgtXFx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoX2NsZWFudXAoZmxvd190YWJsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQwOjEyLjU4OTQ0Mjg1OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTYxODczOTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBSZWFjaCBvZiBgbmZfZmxvd190YWJsZV9nY19ydW5gKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBuZl9mbG93X3RhYmxlX2djX3J1bmAgZnVuY3Rpb24uIFRoZSBwcm9ibGVtIGlzLCBpdCBpc24ndCBleHBsaWNpdGx5IGV4cG9ydGVkLCB3aGljaCBpcyBhIGJpdCBvZiBhIGh1cmRsZS4gIEJ1dCwgSSBzZWUgaXQncyBjYWxsZWQgZnJvbSBgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2NgLiBBbmQgdGhhdCdzIGludGVyZXN0aW5nIGJlY2F1c2UgKnRoYXQqIGZ1bmN0aW9uIGlzIGEgd29ya3F1ZXVlIGNhbGxiYWNrLiBUaGF0IGNvdWxkIG1lYW4gaXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVuY3kgYW5kIHNjaGVkdWxpbmcuICBBbHNvLCBpdCdzIGNhbGxlZCBmcm9tIGBuZl9mbG93X3RhYmxlX2ZyZWVgLCB3aGljaCBpcyBhbm90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludC5cblxuV2FpdCBhIHNlY29uZC4uLkknbSBnZXR0aW5nIGFoZWFkIG9mIG15c2VsZi4gIEp1c3QgYmVjYXVzZSBpdCAqbG9va3MqIGxpa2UgaXQncyBub3QgZXhwb3J0ZWQgZG9lc24ndCBtYWtlIGl0IHNvLiBJJ3ZlIGJlZW4gZm9vbGVkIGJ5IHRoaXMgYmVmb3JlLCBzbyBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpc24ndCBhIGNhc2Ugd2hlcmUgaXQgKmNvdWxkKiBiZSBleHBvcnRlZCwgcGVyaGFwcyB0aHJvdWdoIHNvbWUgb3RoZXIgbWVjaGFuaXNtLiBJIHJlYWxseSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbmZfZmxvd190YWJsZV9nY19ydW5gIGlzIGFjdHVhbGx5IHN0YXRpYyBiZWZvcmUgSSBkcmF3IGFueSBjb25jbHVzaW9ucyBhYm91dCBpdHMgYWNjZXNzaWJpbGl0eSBhbmQsIHRoZXJlZm9yZSwgdGhlIHdheXMgaXQgbWlnaHQgYmUgaW52b2tlZCBvciB1c2VkLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg3MiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQwOjE2LjU1MTMyMDE0MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2MzY5NzUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKm5mX2Zsb3dfdGFibGVfZ2NfcnVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQwOjE2LjU5Njk2NTk4N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDk1NzA4ODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkZvY3VzaW5nIElud2FyZDogV2hlcmUgdGhlIFJlYWwgQWN0aW9uIElzKipcblxuUmlnaHQsIHNvIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggZXhwb3J0cyBoZXJlLCBzY3JhdGNoIHRoYXQgbGluZSBvZiB0aGlua2luZy4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgbGFzZXItc2hhcnAgb24gdGhlc2UgdHdvIGZ1bmN0aW9uczogYGZsb3dfb2ZmbG9hZF9hZGRgIGFuZCBgZmxvd19vZmZsb2FkX2xvb2t1cGAuIEJ1dCB3YWl0Li4uIGhhbmcgb24gYSBtaW51dGUuLi4gYGZsb3dfb2ZmbG9hZF9sb29rdXBgIGlzIGEgKmhvdC1wYXRoKiBmdW5jdGlvbi4gVGhhdCdzIHRoZSBvbmUgdGhhdCdzIGNhbGxlZCBmb3IgKmV2ZXJ5IHNpbmdsZSBwYWNrZXQqIOKAkyBpdCdzIHRoZSBjcml0aWNhbCBsb29rdXAuIFRoYXQgbWVhbnMgcGVyZm9ybWFuY2UgaGVyZSBpcyBwYXJhbW91bnQuIFNvLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgY29udGV4dHMgb2YgYGZsb3dfb2ZmbG9hZF9sb29rdXBgLiBHb3R0YSBzZWUgKndoZXJlKiBpdCdzIGJlaW5nIGludm9rZWQuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIG92ZXJhbGwgaW1wYWN0IGFuZCBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjczLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6NDA6MjAuMDkyNjc3NDU4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzkyNDQyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbG93X29mZmxvYWRfbG9va3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYz0zNj1icGZfeGRwX2Zsb3dfdHVwbGVfbG9va3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmMtNDYtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jOjQ3OlxcdHR1cGxlaGFzaCA9IGZsb3dfb2ZmbG9hZF9sb29rdXAobmZfZmxvd190YWJsZSwgdHVwbGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy00OC1cXHRpZiAoIXR1cGxlaGFzaClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NDAxPXN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NDAyOmZsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQwMy1cXHRcXHQgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQyNC19XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo0MjU6RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2xvb2t1cCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MjYtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00NjE9c3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ2MjpuZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDYzLVxcdFxcdCAgICAgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDcyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ3MzpcXHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcXHUwMDI2dHVwbGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ3NC19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04MDc9bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTgyMy1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4MjQ6XFx0dHVwbGVoYXNoID0gbmZfZmxvd19vZmZsb2FkX2xvb2t1cChcXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCBza2IpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTgyNS1cXHRpZiAoIXR1cGxlaGFzaClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTExMDg9bmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTE5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjExMjA6XFx0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXFx1MDAyNnR1cGxlKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTIxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6NDA6MjAuMTQwNjExMTkzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzEyMzYyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBDYWxsIFBhdGhzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBmdW5jdGlvbiBjYWxscy4gUmlnaHQsIGBmbG93X29mZmxvYWRfbG9va3VwYCBpcyBkZWZpbml0ZWx5IGEgaG90LXBhdGggZnVuY3Rpb24sIGNhbGxlZCBkaXJlY3RseSBmcm9tIHRoZSBob29rLiBUaGF0J3MgYSBrZXkgY29uc2lkZXJhdGlvbiBmb3IgcGVyZm9ybWFuY2UsIHNvIHdlIG5lZWQgdG8gZW5zdXJlIGl0J3Mgb3B0aW1pemVkLiBOb3csIGBmbG93X29mZmxvYWRfYWRkYCBzZWVtcyBsZXNzIHBlcmZvcm1hbmNlLWNyaXRpY2FsLCBzaW5jZSBpdCdzIG9ubHkgaW52b2tlZCB3aGVuIGEgbmV3IGZsb3cgaXMgb2ZmbG9hZGVkLiBTdGlsbCwgaXQncyBvcGVyYXRpbmcgb24gdGhlIGRhdGEgcGF0aCwgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAgYW5kIG9mZmxvYWQsIHNvIHdlIGNhbid0IGNvbXBsZXRlbHkgaWdub3JlIGl0IGVpdGhlci4gV2FpdCwgaG9sZCBvbi4gSSBuZWVkIHRvIGJlIG1vcmUgcHJlY2lzZSBhYm91dCB0aGUgY2FsbCBzdGFjayBmb3IgYGZsb3dfb2ZmbG9hZF9hZGRgLiBJICp0aGluayogaXQncyBjYWxsZWQgZnJvbSBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBvciBzb21ldGhpbmcgc2ltaWxhci4uLiBMZXQgbWUgdmVyaWZ5IHRoYXQgdG8gYmUgc3VyZS4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgZXhlY3V0aW9uIHBhdGggdG8gcHJvcGVybHkgYXNzZXNzIGl0cyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMjksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6NDA6MjQuNjcxODUwNTg2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQwODA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbG93X29mZmxvYWRfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MzA5PXVuc2lnbmVkIGxvbmcgZmxvd19vZmZsb2FkX2dldF90aW1lb3V0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTMyNy1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjMyODppbnQgZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzI5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzUyLVxcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93X3RhYmxlKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjM1MzpcXHRcXHRuZl9mbG93X29mZmxvYWRfYWRkKGZsb3dfdGFibGUsIGZsb3cpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzU0LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNTgtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MzU5OkVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9hZGQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzYwLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xOS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjIwOnN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmZfZmxvd19vZmZsb2FkX2FkZF93cTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTIxLXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmZfZmxvd19vZmZsb2FkX2RlbF93cTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTA2NT1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfcXVldWVfd29yayhzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNzAtXFx0XFx0TkZfRkxPV19UQUJMRV9TVEFUX0lOQ19BVE9NSUMobmV0LCBjb3VudF93cV9hZGQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA3MTpcXHRcXHRxdWV1ZV93b3JrKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EsIFxcdTAwMjZvZmZsb2FkLVxcdTAwM2V3b3JrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNzItXFx0fSBlbHNlIGlmIChvZmZsb2FkLVxcdTAwM2VjbWQgPT0gRkxPV19DTFNfREVTVFJPWSkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTEzPXZvaWQgbmZfZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTI0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTEyNTp2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEyNi1cXHRcXHRcXHQgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE3Mz12b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNzUtXFx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExNzY6XFx0XFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3Ny1cXHRcXHRmbHVzaF93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2RlbF93cSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEyOTQ9aW50IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9pbml0KHZvaWQpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjk1LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyOTY6XFx0bmZfZmxvd19vZmZsb2FkX2FkZF93cSAgPSBhbGxvY193b3JrcXVldWUoXFxcIm5mX2Z0X29mZmxvYWRfYWRkXFxcIixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyOTctXFx0XFx0XFx0XFx0XFx0XFx0ICBXUV9VTkJPVU5EIHwgV1FfU1lTRlMsIDApO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTI5ODpcXHRpZiAoIW5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjk5LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzE1LWVycl9kZWxfd3E6XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzE2OlxcdGRlc3Ryb3lfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMxNy1cXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTMyMD12b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9leGl0KHZvaWQpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzIxLXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMjI6XFx0ZGVzdHJveV93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2FkZF93cSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzIzLVxcdGRlc3Ryb3lfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9NTA9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTEyMC1cXHRfX3NldF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjEyMTpcXHRyZXQgPSBmbG93X29mZmxvYWRfYWRkKGZsb3d0YWJsZSwgZmxvdyk7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTIyLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MDoyNC43MjAyNjUxMDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYwNjI2MjA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBGbG93IE9mZmxvYWQgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoaXMgZmxvdyBvZmZsb2FkIGltcGxlbWVudGF0aW9uLCBhbmQgYGZsb3dfb2ZmbG9hZF9hZGRgIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBmdW5jdGlvbi4gSXQncyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgd2hpY2ggaXMgdGhlIGV2YWx1YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBgZmxvd19vZmZsb2FkYCBleHByZXNzaW9uIGluIG5mdGFibGVzLiBUaGF0J3MgYSBzb2xpZCBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyBmbG93cyBhcmUgYWN0dWFsbHkgYWRkZWQgdG8gdGhlIGZsb3cgdGFibGUsIHNvIHRoYXQncyB3aGVyZSBJIHNob3VsZCBmb2N1cy5cblxuSG1tLCBidXQgd2FpdCBhIHNlY29uZCwgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgaXMgYSBob3QtcGF0aCBmdW5jdGlvbiEgSXQgZ2V0cyBjYWxsZWQgKmZvciBldmVyeSBwYWNrZXQqIHRoYXQgbWF0Y2hlcyBhbiBvZmZsb2FkIHJ1bGUuIFRoYXQgc3VnZ2VzdHMgaXQncyBwZXJmb3JtYW5jZS1jcml0aWNhbCwgZXZlbiB0aG91Z2ggaXQgb25seSBhZGRzIHRoZSBmbG93IG9uY2UuIFNvLCBJIGhhdmUgdG8gYmUgY2FyZWZ1bCB3aGVuIGxvb2tpbmcgYXQgdGhpcyBvbmUuXG5cbklzIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbj8gSSBzZWUgdGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXBgLCB3aGljaCBnZXRzIGNhbGxlZCBmcm9tIGBuZl9mbG93X3RhYmxlX2djX3J1bmAsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSBgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2NgLiBJbnRlcmVzdGluZywgYnV0IHNpbmNlIGBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcGAgaXMgc3RhdGljLCBJIGNhbid0IHJlYWxseSBmb2N1cyBvbiBpdC4gU28gdGhhdCBicmluZ3MgbWUgYmFjayB0byBgZmxvd19vZmZsb2FkX2FkZGAuXG5cbk5vdywgbGV0J3Mgc2VlIGlmIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIGlzIGV4cG9ydGVkIG9yIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zLiBOb3BlLCBpdCdzIHN0YXRpYy4gT2theSwgaXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gSSdsbCBuZWVkIHRvIGNoZWNrIGBuZl9mbG93X3RhYmxlX2NvcmUuY2AgZm9yIGFueSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMzQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6NDA6MzAuMzI2NTMwMTg5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQxMjgwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipmbG93X29mZmxvYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTUzPXN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3dfb2ZmbG9hZF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqY3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc2LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc3OkVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9hbGxvYyk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MTY0PXZvaWQgZmxvd19vZmZsb2FkX3JvdXRlX2luaXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMTcwLX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjE3MTpFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfcm91dGVfaW5pdCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xNzItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTI2MT12b2lkIGZsb3dfb2ZmbG9hZF9mcmVlKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTI3Mi19XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyNzM6RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2ZyZWUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjc0LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0zMjg9aW50IGZsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzU4LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjM1OTpFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYWRkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM2MC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTM2MT12b2lkIGZsb3dfb2ZmbG9hZF9yZWZyZXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM3OC19XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzozNzk6RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX3JlZnJlc2gpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzgwLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0zOTM9dm9pZCBmbG93X29mZmxvYWRfdGVhcmRvd24oc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzk4LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjM5OTpFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfdGVhcmRvd24pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDAwLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz00MDI9Zmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MjQtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NDI1OkVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9sb29rdXApO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDI2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MDozMC4zNzI5NDgzMjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1OTY2NDA5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgRmxvdyBPZmZsb2FkIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmbG93IG9mZmxvYWQgZnVuY3Rpb25zLCBhbmQgaXQgc2VlbXMgbGlrZSBgZmxvd19vZmZsb2FkX2FkZGAgaXMgZGVmaW5pdGVseSBhIGtleSBwbGF5ZXIsIG9idmlvdXNseSBkZWFsaW5nIHdpdGggdGhlIGFkZGl0aW9uIG9mIGZsb3dzLiBUaGVuLCB3ZSd2ZSBnb3QgYGZsb3dfb2ZmbG9hZF90ZWFyZG93bmAsIHdoaWNoIEknZCBleHBlY3QgaXMgaW50aW1hdGVseSB0aWVkIHRvIHRoZSBmbG93IGxpZmVjeWNsZSwgaGFuZGxpbmcgdGhlIHJlbW92YWwuIEFuZCwgYGZsb3dfb2ZmbG9hZF9hbGxvY2AgaXMgcmVsYXRlZCBhcyB3ZWxsLCBwcm9iYWJseSBtYW5hZ2luZyB0aGUgYWxsb2NhdGlvbiBvZiByZXNvdXJjZXMuXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQgZWxzZSBpcyBpbiBwbGF5IGNvbmZpZy13aXNlLiBJJ20gZ29pbmcgdG8gc2NhbiBmb3Igb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEFoLCBoZXJlIHdlIGdvLCBgQ09ORklHX05GX0ZMT1dfVEFCTEVgIOKAkyB0aGF0J3MgdGhlIGJpZyBvbmUsIHRoZSBjb3JlIGNvbXBvbmVudCBJJ20gaW50ZXJlc3RlZCBpbi4gVGhlbiwgdGhlIGRlcGVuZGVuY2llcywgZ290IHRvIGhhdmUgYENPTkZJR19ORl9UQUJMRVNgLCBgQ09ORklHX05GX0NPTk5UUkFDS2AsIGFuZCBgQ09ORklHX05FVEZJTFRFUl9JTkdSRVNTYCBhbGwgd29ya2luZyB0b2dldGhlci5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbSBnb2luZyB0byB0YWtlIGEgcXVpY2sgbG9vayBpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBjb25maXJtIHRoZSBjb250ZXh0IGFyb3VuZCBgTkZfRkxPV19UQUJMRWAuIFRoaXMgd2lsbCBwcm92aWRlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgYWxsIHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjExLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQwOjM0LjkzMjYxNjA5NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcxMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcxMTpcXHRjb25maWcgTkZfRkxPV19UQUJMRVxcbiA3MTI6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG4gNzEzOlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0lOR1JFU1NcXG4gNzE0OlxcdFxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXFxuIDcxNTpcXHRcXHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xcbiA3MTY6XFx0XFx0aGVscFxcbiA3MTc6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBmbG93IHRhYmxlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUuXFxuIDcxODpcXHRcXG4gNzE5OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG4gNzIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MDozNC45MzI3MjAwNjZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyMjYzMDU2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoZSBpbXBvcnRhbmNlIG9mIGBORl9GTE9XX1RBQkxFYCwgYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgZGVwZW5kZW5jeSByZXNvbHV0aW9uLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgZXZlcnl0aGluZyBpcyBjb3JyZWN0bHkgY29uZmlndXJlZCBmb3IgdGhlIGRlc2lyZWQgZnVuY3Rpb25hbGl0eS5cblxuTm93LCBteSB0cmFpbiBvZiB0aG91Z2h0IHR1cm5zIHRvd2FyZCBgTkVURklMVEVSX0lOR1JFU1NgLiBHaXZlbiBpdHMgcm9sZSwgSSBuZWVkIHRvIGNoZWNrIOKAkyBhbmQgY2hlY2sgdGhvcm91Z2hseSDigJMgdG8gc2VlIGlmIHRoZXJlIGFyZSAqYW55KiBvdGhlciwgcGVyaGFwcyBsZXNzIG9idmlvdXMsIGRlcGVuZGVuY2llcyB0aGF0IG5lZWQgdG8gYmUgYWNjb3VudGVkIGZvci4gV2UncmUgdGFsa2luZyBzdWJ0bGUgaW50ZXJhY3Rpb25zIGhlcmUuIE1pc3Npbmcgb25lIG9mIHRoZXNlIGNhbiBsZWFkIHRvIHNvbWUgcmVhbGx5IGZydXN0cmF0aW5nIGRlYnVnZ2luZyBzZXNzaW9ucyBkb3duIHRoZSBsaW5lLiBTbywgSSBuZWVkIHRvIG1ldGhvZGljYWxseSB2ZXJpZnkgKmV2ZXJ5dGhpbmcqIHRoYXQgaXQgcmVsaWVzIG9uLCB3aGV0aGVyIGV4cGxpY2l0bHkgc3RhdGVkIG9yIHBvdGVudGlhbGx5IGltcGxpZWQgd2l0aGluIHRoZSBrZXJuZWwncyBtb2R1bGVzIGFuZCBzdWItc3lzdGVtcy4gVGhhdCdzIHRoZSBjcml0aWNhbCBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTc3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MDozOC44NTUzNTQwMDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNjcxNDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRGSUxURVJfSU5HUkVTU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTI9bWVudSBcXFwiQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvblxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1OmNvbmZpZyBORVRGSUxURVJfSU5HUkVTU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02LVxcdGJvb2wgXFxcIk5ldGZpbHRlciBpbmdyZXNzIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQwOjM4LjkwNzAyOTQ5N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTM5NjQyMDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgTmV0ZmlsdGVyIEZsb3cgVGFibGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgTkVURklMVEVSX0lOR1JFU1NgIGlzIGEgYm9vbGVhbiwgZ29vZCB0byBrbm93LiBUaGUgY29yZSBvZiB0aGlzIGxvb2tzIGxpa2UgaXQgaGluZ2VzIG9uIGBORl9GTE9XX1RBQkxFYCwgYW5kIHRoYXQncyBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AuIERlZmluaXRlbHkgc29tZXRoaW5nIHRvIGZvY3VzIG9uLiBJdCdzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19ORl9GTE9XX1RBQkxFYCBpcyBlbmFibGVkLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBhZGRpbmcgYW5kIGdhcmJhZ2UgY29sbGVjdGluZyBmbG93IG9mZmxvYWRzLiBTb3VuZHMgbGlrZSBhIHRleHRib29rIGZ1enppbmcgdGFyZ2V0IOKAkyBhIHJhY2UgY29uZGl0aW9uIGlzIHJpcGUgZm9yIGV4cGxvaXRhdGlvbi5cblxuTGV0J3MgcHVsbCB0b2dldGhlciB0aGUga2V5IGRldGFpbHMuIFllYWgsIHRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIEknbGwgc3VtbWFyaXplIHRoYXQ6IGBXb3J0aEZ1enppbmc6IHRydWVgLiBUaGUgY3JpdGljYWwgc3ltYm9scyB0byBsb29rIGF0IGFyZSBsaWtlbHkgZ29pbmcgdG8gYmUgYGZsb3dfb2ZmbG9hZF9hZGRgLCBzaW5jZSB0aGF0J3Mgd2hhdCdzIGdldHRpbmcgbW9kaWZpZWQuIFNvIGBGb2N1c1N5bWJvbHM6IFtcImZsb3dfb2ZmbG9hZF9hZGRcIl1gLiBUbyBidWlsZCB0aGlzLCBJJ2xsIG5lZWQgYEVuYWJsZUNvbmZpZ3M6IFtcIk5GX0ZMT1dfVEFCTEVcIiwgXCJORVRGSUxURVJfSU5HUkVTU1wiLCBcIk5GX0NPTk5UUkFDS1wiLCBcIk5GX1RBQkxFU1wiXWAuIFRoZSByZWFzb24gaXMgcHJldHR5IGNsZWFyOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBsb2dpYyB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgZmxvdyBvZmZsb2FkIGFkZGl0aW9uIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gYnkgaW50cm9kdWNpbmcgYSBuZXcgTkZfRkxPV19DT05GSVJNRUQgZmxhZy5cIlxuXG5Ob3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBTaG91bGQgSSBhZGQgb3RoZXIgc3ltYm9scz8gYGZsb3dfb2ZmbG9hZF9sb29rdXBgPyBJdCdzIGEgaG90LXBhdGggZnVuY3Rpb24sIHNvIGxpa2VseSBub3QgdGhlIGluaXRpYWwgZW50cnkgcG9pbnQuIFRoZW4gdGhlcmUncyBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgYnV0IHRoYXQncyBzdGF0aWMsIHNvIGl0J3MgcHJvYmFibHkgbm90IGFzIGltcGFjdGZ1bCBoZXJlLiBgZmxvd19vZmZsb2FkX2FkZGAgaXMgKnRoZSogZXhwb3J0ZWQgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQuIFRoYXQncyB0aGUga2V5LlxuXG5MZXQncyBub3QgZm9yZ2V0IGFib3V0IG90aGVyIGNvbmZpZ3MuIEknbSBnb2luZyB0byB3YW50IHRvIG1ha2Ugc3VyZSBJIGNhbiB0cmlnZ2VyIHRoaXMgdGhyb3VnaCB0aGUgbm9ybWFsIHVzZXIgaW50ZXJmYWNlcywgc28gYENPTkZJR19ORlRfRkxPV19PRkZMT0FEYCBpcyBsaWtlbHkgcmVxdWlyZWQsIG90aGVyd2lzZSBJIHdpbGwgbm90IGJlIGFibGUgdG8gYWN0dWFsbHkgcmVhY2ggdGhlIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBmdXp6ZWQgdmlhIG5mdGFibGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU0OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MDo0NS40NDY2NzM2MDJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTA0MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORlRfRkxPV19PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDk4PWNvbmZpZyBORlRfRVhUSERSX0RDQ1BcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjUwNDpjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDUtXFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfRkxPV19UQUJMRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MDo0NS40OTU1ODcwNTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzNjU2ODgwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyB0aGUgRmxvdyBUYWJsZSBPZmZsb2FkIEV4cHJlc3Npb24qKlxuXG5SaWdodCwgc28gYE5GVF9GTE9XX09GRkxPQURgIGlzIHRoZSBuYW1lIG9mIHRoYXQgc3BlY2lmaWMgbmZ0YWJsZXMgZXhwcmVzc2lvbiB0aGF0IGRlYWxzIHdpdGggdGhlIGZsb3cgdGFibGUuIE9rYXksIHRoYXQncyB3aGF0IEkgdGhvdWdodCwgYnV0IGl0IGFsd2F5cyBwYXlzIHRvIGRvdWJsZS1jaGVjay4gVGltZSB0byBxdWlja2x5IGludmVzdGlnYXRlIGl0cyBkZXBlbmRlbmNpZXMuIE5lZWQgdG8gc2VlIHdoYXQgb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcyBhcmUgcmVxdWlyZWQgZm9yIHRoYXQgdG8gZnVuY3Rpb24gcHJvcGVybHkuIEdvdHRhIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQxNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQwOjQ4LjgzMjE1ODY3NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwNCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwNDpcXHRjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxcbiA1MDU6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfRkxPV19UQUJMRVxcbiA1MDY6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgaGFyZHdhcmUgZmxvdyBvZmZsb2FkIG1vZHVsZVxcXCJcXG4gNTA3OlxcdFxcdGhlbHBcXG4gNTA4OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXFxcImZsb3dfb2ZmbG9hZFxcXCIgZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gdXNlIHRvXFxuIDUwOTpcXHRcXHQgIGNob29zZSB3aGF0IGZsb3dzIGFyZSBwbGFjZWQgaW50byB0aGUgaGFyZHdhcmUuXFxuIDUxMDpcXHRcXG4gNTExOlxcdGNvbmZpZyBORlRfQ09OTkxJTUlUXFxuIDUxMjpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBjb25ubGltaXQgbW9kdWxlXFxcIlxcbiA1MTM6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6NDA6NDguODMyMjcwMTg2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzIzNTExNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCB3ZXJlIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRW5hYmxpbmcgVXNlci1TcGFjZSBGbG93IE9mZmxvYWQqKlxuXG5BbHJpZ2h0LCB0aGUgY29yZSBpc3N1ZSBpcyB0aGF0IGBORlRfRkxPV19PRkZMT0FEYCBpcyB0aGUgKmtleSogaW5ncmVkaWVudCBoZXJlLiBJdCdzIHRoZSBtZWNoYW5pc20gd2UgbmVlZCB0byBhY3R1YWxseSBraWNrIG9mZiB0aGlzIGZsb3cgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5IGRpcmVjdGx5IGZyb20gdXNlciBzcGFjZSB0aHJvdWdoIG5mdGFibGVzLiBTbywgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0byBpbmNsdWRlIHRoYXQgbW9kdWxlLiBJdCdzIG5vdCBvcHRpb25hbDsgaXQncyBmdW5kYW1lbnRhbC5cblxuTm93LCBiZWZvcmUgSSBjb21taXQgdG8gdGhhdCwgSSBzaG91bGQgZG8gYSBxdWljayBzYW5pdHkgY2hlY2suIEkgbmVlZCB0byBlbnN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBhIGRpZmZlcmVudCwgcGVyaGFwcyBtb3JlIGVsZWdhbnQgb3IgZWZmaWNpZW50LCB3YXkgdG8gdHJpZ2dlciBgZmxvd19vZmZsb2FkX2FkZGAuIEkgdmFndWVseSByZW1lbWJlciBhY3RfY3QgbWlnaHQgYmUgcmVsZXZhbnQuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgaXRzIGludGVyYWN0aW9uIHdpdGggdGhpcyB3aG9sZSBmbG93LiBQZXJoYXBzIGl0IHByb3ZpZGVzIGFuIGFsdGVybmF0aXZlIHBhdGg/IEJldHRlciB0byBiZSB0aG9yb3VnaCBiZWZvcmUgZmluYWxpemluZyB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NjksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQwOjUyLjMwNDYyNDcyM1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwOTQ0OTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZsb3dfb2ZmbG9hZF9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2N0LmM9NDI0PXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2FkZChzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTQ1My1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDU0OlxcdGVyciA9IGZsb3dfb2ZmbG9hZF9hZGQoXFx1MDAyNmN0X2Z0LVxcdTAwM2VuZl9mdCwgZW50cnkpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy00NTUtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6NDA6NTIuNTc1NTc4Nzc1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzY0NDg4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDb25maXJtaW5nIGBhY3RfY3RgIFVzYWdlIGFuZCBQaXZvdGluZyB0byBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSB3YXMgZG91YmxlLWNoZWNraW5nIHNvbWUgY29kZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBjb25uZWN0aW9uIHRyYWNraW5nLCBhbmQgeWVwLCBgbmV0L3NjaGVkL2FjdF9jdC5jYCBkZWZpbml0ZWx5IHV0aWxpemVzIGl0LiBHb29kLCB0aGF0IGNvbmZpcm1zIHRoZSBpbml0aWFsIGFzc3VtcHRpb24uIE5vdyB0aGF0IEkndmUgZXN0YWJsaXNoZWQgdGhhdCBgYWN0X2N0YCBpcyBpbmRlZWQgaW4gcGxheSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtb2R1bGUgaXMgYmVpbmcgc2V0IHVwIGFuZCB3aGF0IHBhcmFtZXRlcnMgaXQncyB1c2luZy4gV2hhdCBhcmUgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgaXRzIGJlaGF2aW9yPyBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCB0aGUgYnJvYWRlciBjb25uZWN0aW9uIHRyYWNraW5nIGluZnJhc3RydWN0dXJlIGFuZCBob3cgaXRzIGZlYXR1cmUgc2V0IGlzIGVuYWJsZWQuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvbmZpZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxODEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MDo1NS43MTIwMjk4NzNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDI2MTAyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0FDVF9DVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz04NTM9Y29uZmlnIE5FVF9BQ1RfQ09OTk1BUktcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTg2NC1cXG5uZXQvc2NoZWQvS2NvbmZpZzo4NjU6Y29uZmlnIE5FVF9BQ1RfQ1RJTkZPXFxubmV0L3NjaGVkL0tjb25maWctODY2LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgQ29ubmVjdGlvbiBNYXJrIEFjdGlvbnNcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz05MDY9Y29uZmlnIE5FVF9BQ1RfVFVOTkVMX0tFWVxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctOTE2LVxcbm5ldC9zY2hlZC9LY29uZmlnOjkxNzpjb25maWcgTkVUX0FDVF9DVFxcbm5ldC9zY2hlZC9LY29uZmlnLTkxOC1cXHR0cmlzdGF0ZSBcXFwiY29ubmVjdGlvbiB0cmFja2luZyB0YyBhY3Rpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQwOjU1Ljg2NjI5OTcwN1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQ2NzUwMjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgTkVUX0FDVF9DVGAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORVRfQUNUX0NUYC4gQmVmb3JlIEkgZGlnIGluIHRvbyBkZWVwIG9uIGFueXRoaW5nLCBsZXQgbWUgbWVudGFsbHkgbWFwIG91dCB0aGUgcG90ZW50aWFsIGRvd25zdHJlYW0gZWZmZWN0cyBvZiBhbnkgY2hhbmdlcy4gSSB3YW50IHRvIG1pbmltaXplIGFueSBzdXJwcmlzZXMgb3IgY2FzY2FkaW5nIGlzc3Vlcy4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGlkZW50aWZ5aW5nIHRoZSBkaXJlY3QgcGFyZW50IGNvbXBvbmVudHM7IEkgbmVlZCB0byBjb25zaWRlciBpbmRpcmVjdCBjb25uZWN0aW9ucyBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIG1vZHVsZXMuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgdGhpcyBpbXBhY3RzIGRhdGEgZmxvdywgcGVyZm9ybWFuY2UsIGFuZCBhbnkgaW50ZWdyYXRpb24gcG9pbnRzLiBJdCdzIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGJlZm9yZSBJIGdldCBpbnRvIHRoZSB3ZWVkcywgZW5zdXJpbmcgSSdtIGFwcHJvYWNoaW5nIHRoaXMgc3lzdGVtYXRpY2FsbHkgYW5kIHRob3JvdWdobHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTgyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6NDA6NTkuMDEzMDUyOTA5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkxNyxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkxNzpcXHRjb25maWcgTkVUX0FDVF9DVFxcbiA5MTg6XFx0XFx0dHJpc3RhdGUgXFxcImNvbm5lY3Rpb24gdHJhY2tpbmcgdGMgYWN0aW9uXFxcIlxcbiA5MTk6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVCBcXHUwMDI2XFx1MDAyNiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgKCFORl9OQVQgfHwgTkZfTkFUKSBcXHUwMDI2XFx1MDAyNiBORl9GTE9XX1RBQkxFXFxuIDkyMDpcXHRcXHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WU1xcbiA5MjE6XFx0XFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXFxuIDkyMjpcXHRcXHRoZWxwXFxuIDkyMzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgc2VuZGluZyB0aGUgcGFja2V0cyB0byBjb25udHJhY2sgbW9kdWxlLlxcbiA5MjQ6XFx0XFxuIDkyNTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDkyNjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6NDA6NTkuMDEzMTMzMTU5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNjMzODAxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldGZpbHRlciBGbG93IFRhYmxlIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBjbGVhciB0aGF0IGBORVRfQUNUX0NUYCBpcyBpbnRyaW5zaWNhbGx5IGxpbmtlZCB0byBgTkVUX0NMU19BQ1RgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9GTE9XX1RBQkxFYC4gR2l2ZW4gdGhhdCwgSSdtIGdvaW5nIHRvIGFkZCBgTkVUX0FDVF9DVGAgYW5kIGBORlRfRkxPV19PRkZMT0FEYCB0byB0aGUgY29uZmlndXJhdGlvbiwgYWxvbmdzaWRlIGBORl9GTE9XX1RBQkxFYCwgYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYCwgYXMgdGhleSBhcmUgcHJlcmVxdWlzaXRlcyBvciBzdXBwb3J0aXZlIGNvbXBvbmVudHMuIFRoZSBmb2N1cyBoZXJlIGlzIG9uIGBmbG93X29mZmxvYWRfYWRkYC5cblxuVGhlIGNvcmUgb2YgdGhpcyBpcyBhIHJhY2UgY29uZGl0aW9uIGZpeCB3aXRoaW4gdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlLCB3aGljaCBpcyBhZGRyZXNzZWQgYnkgYSBuZXcgYE5GX0ZMT1dfQ09ORklSTUVEYCBmbGFnLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGZsb3dfb2ZmbG9hZF9hZGRgIHRvIHNldCB0aGlzIGZsYWcgYWZ0ZXIgaW5zZXJ0aW5nIGJvdGggZmxvdyBkaXJlY3Rpb25zIGludG8gdGhlIHJoYXNodGFibGUuIENyaXRpY2FsbHksIGl0IGFsc28gdXBkYXRlcyB0aGUgbG9va3VwIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMgdG8gaWdub3JlIGFueSBmbG93cyB0aGF0IGhhdmVuJ3QgYmVlbiBjb25maXJtZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgdG91Y2hpbmcgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBzbyB3ZSBuZWVkIHRvIGJlIHZlcnkgY2FyZWZ1bC5cblxuSSdtIHRoaW5raW5nIHRoaXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgYSBgc2V0LXJlc3VsdHNgIGFjdGlvbiwgYXMgaXQncyBhIHZlcnkgY2xlYXIgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDk0OSwiT3V0cHV0VG9rZW5zIjoxNjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MTowNS4zNzY1MTYwODFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzM5MzI1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkVURklMVEVSX0lOR1JFU1NcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCIsXG4gICAgXCJORVRfQUNUX0NUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmxvd19vZmZsb2FkX2FkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGNvcmUgYnkgaW50cm9kdWNpbmcgYSBuZXcgTkZfRkxPV19DT05GSVJNRUQgZmxhZy4gSXQgbW9kaWZpZXMgZmxvd19vZmZsb2FkX2FkZCB0byBzZXQgdGhpcyBmbGFnIGFmdGVyIGluc2VydGluZyBib3RoIGRpcmVjdGlvbnMgb2YgdGhlIGZsb3cgaW50byB0aGUgcmhhc2h0YWJsZSwgYW5kIHVwZGF0ZXMgbG9va3VwIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMgdG8gaWdub3JlIHVuY29uZmlybWVkIGZsb3dzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5FVEZJTFRFUl9JTkdSRVNTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkVUX0FDVF9DVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZsb3dfb2ZmbG9hZF9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjb3JlIGJ5IGludHJvZHVjaW5nIGEgbmV3IE5GX0ZMT1dfQ09ORklSTUVEIGZsYWcuIEl0IG1vZGlmaWVzIGZsb3dfb2ZmbG9hZF9hZGQgdG8gc2V0IHRoaXMgZmxhZyBhZnRlciBpbnNlcnRpbmcgYm90aCBkaXJlY3Rpb25zIG9mIHRoZSBmbG93IGludG8gdGhlIHJoYXNodGFibGUsIGFuZCB1cGRhdGVzIGxvb2t1cCBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uIGxvZ2ljIHRvIGlnbm9yZSB1bmNvbmZpcm1lZCBmbG93cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDA6NDE6MDUuNDU5OTE2MzcyWiIsIlNlcSI6MzksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMwNjAwNDYyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQxOjA1LjQ2MDQ1NzI2MloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjMwNTQ1ODYxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgKHJhY2UgY29uZGl0aW9uKSBkdXJpbmcgdGhlIGFkZGl0aW9uIG9mIGEgZmxvdyB0byB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUuIEJ5IGludHJvZHVjaW5nIHRoZSBgTkZfRkxPV19DT05GSVJNRURgIGZsYWcgYW5kIGNoYW5naW5nIHRoZSByaGFzaHRhYmxlIGluc2VydGlvbiBvcmRlciwgaXQgcHJldmVudHMgY29uY3VycmVudCBsb29rdXBzIG9yIGdhcmJhZ2UgY29sbGVjdGlvbiBmcm9tIGFjY2Vzc2luZyBhIGZsb3cgYmVmb3JlIGl0IGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBhZGRlZC4gQ29uY3VycmVuY3kgYnVncyBvZiB0aGlzIG5hdHVyZSB0eXBpY2FsbHkgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSAoaW5mby1sZWFrcykgb3IgY29tcGxleCB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHNwZWNpZmljYWxseSByZXF1aXJlIEtNU0FOLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZDM1MzlhYmRmNTBhMThlMjFkOWMwMzQzZDAzM2VjMjY5ZGNiMDlkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDA6Mzk6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuaW5kZXggY2U0MTQxMTg5NjJmNS4uNjE4ZDI2ZTQ5ZmRmNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbkBAIC0xODksNiArMTg5LDcgQEAgZW51bSBuZl9mbG93X2ZsYWdzIHtcbiBcdE5GX0ZMT1dfSFdfUEVORElORyxcbiBcdE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCxcbiBcdE5GX0ZMT1dfSFdfRVNUQUJMSVNIRUQsXG4rXHRORl9GTE9XX0NPTkZJUk1FRCxcbiB9O1xuIFxuIGVudW0gZmxvd19vZmZsb2FkX3R5cGUge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG5pbmRleCA4YjExNjVmMmI1YTQ5Li4xZTJjNGExZGI5YTcwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuQEAgLTMzMiwxOCArMzMyLDE3IEBAIGludCBmbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG4gXHRmbG93LVx1MDAzZXRpbWVvdXQgPSBuZl9mbG93dGFibGVfdGltZV9zdGFtcCArIGZsb3dfb2ZmbG9hZF9nZXRfdGltZW91dChmbG93KTtcbiBcbiBcdGVyciA9IHJoYXNodGFibGVfaW5zZXJ0X2Zhc3QoXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VyaGFzaHRhYmxlLFxuLVx0XHRcdFx0ICAgICBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX1JFUExZXS5ub2RlLFxuK1x0XHRcdFx0ICAgICBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX09SSUdJTkFMXS5ub2RlLFxuIFx0XHRcdFx0ICAgICBuZl9mbG93X29mZmxvYWRfcmhhc2hfcGFyYW1zKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHQvKiBHQyBvbmx5IGl0ZXJhdGVzIG9yaWdpbmFsLWRpcmVjdGlvbiBlbnRyaWVzOyBwdWJsaXNoIG9yaWdpbmFsIGxhc3QuICovXG4gXHRlcnIgPSByaGFzaHRhYmxlX2luc2VydF9mYXN0KFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlcmhhc2h0YWJsZSxcbi1cdFx0XHRcdCAgICAgXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0ubm9kZSxcbitcdFx0XHRcdCAgICAgXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9SRVBMWV0ubm9kZSxcbiBcdFx0XHRcdCAgICAgbmZfZmxvd19vZmZsb2FkX3JoYXNoX3BhcmFtcyk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VyaGFzaHRhYmxlLFxuLVx0XHRcdFx0ICAgICAgIFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfUkVQTFldLm5vZGUsXG4rXHRcdFx0XHQgICAgICAgXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0ubm9kZSxcbiBcdFx0XHRcdCAgICAgICBuZl9mbG93X29mZmxvYWRfcmhhc2hfcGFyYW1zKTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbkBAIC0zNTMsNiArMzUyLDggQEAgaW50IGZsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbiBcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93X3RhYmxlKSlcbiBcdFx0bmZfZmxvd19vZmZsb2FkX2FkZChmbG93X3RhYmxlLCBmbG93KTtcbiBcbitcdHNldF9iaXQoTkZfRkxPV19DT05GSVJNRUQsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9hZGQpO1xuQEAgLTQxMiw3ICs0MTMsOCBAQCBmbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4gXG4gXHRkaXIgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyO1xuIFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbi1cdGlmICh0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSlcbitcdGlmICh1bmxpa2VseSghdGVzdF9iaXQoTkZfRkxPV19DT05GSVJNRUQsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpKSB8fFxuK1x0ICAgIHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdGlmICh1bmxpa2VseShuZl9jdF9pc19keWluZyhmbG93LVx1MDAzZWN0KSkpXG5AQCAtNTY4LDE1ICs1NzAsMTkgQEAgc3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9leHRlbmRfY3RfdGltZW91dChzdHJ1Y3QgbmZfY29ubiAqY3QpXG4gc3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKVxuIHtcbi1cdGJvb2wgdGVhcmRvd24gPSB0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbitcdGJvb2wgdGVhcmRvd247XG4rXG4rXHRpZiAoIXRlc3RfYml0KE5GX0ZMT1dfQ09ORklSTUVELCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSlcbitcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKG5mX2Zsb3dfaGFzX2V4cGlyZWQoZmxvdykgfHxcbiBcdCAgICBuZl9jdF9pc19keWluZyhmbG93LVx1MDAzZWN0KSB8fFxuIFx0ICAgIG5mX2Zsb3dfY3VzdG9tX2djKGZsb3dfdGFibGUsIGZsb3cpKSB7XG4gXHRcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcbiBcdFx0dGVhcmRvd24gPSB0cnVlO1xuLVx0fSBlbHNlIGlmICghdGVhcmRvd24pIHtcbitcdH0gZWxzZSBpZiAoIXRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG5mX2Zsb3dfdGFibGVfZXh0ZW5kX2N0X3RpbWVvdXQoZmxvdy1cdTAwM2VjdCk7XG4rXHRcdHRlYXJkb3duID0gZmFsc2U7XG4gXHR9XG4gXG4gXHRpZiAodGVhcmRvd24pIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAwOjQxOjA1LjQ2MDQ1ODE1MloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjMwNTQzMzYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBGaXhpbmcgYSBSYWNlLCBOb3QgSW50cm9kdWNpbmcgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgZmxvdyBvZmZsb2FkIGNvZGUuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhIHNpdHVhdGlvbiB3aGVyZSBhIGZsb3cgZW50cnkgd2FzIGdldHRpbmcgaW5zZXJ0ZWQgaW50byB0aGUgcmhhc2h0YWJsZSBiZWZvcmUgaXQgd2FzIGZ1bGx5IGluaXRpYWxpemVkLCBsZWFkaW5nIHRvIHBvdGVudGlhbCBhY2Nlc3MgYnkgb3RoZXIgdGhyZWFkcyAobGlrZSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Igb3IgbG9va3VwcykgYmVmb3JlIGl0IHdhcyByZWFkeS5cblxuTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBvcmlnaW5hbCBpc3N1ZSBpbnZvbHZlZCBpbnNlcnRpbmcgdGhlIFwiUkVQTFlcIiBkaXJlY3Rpb24gZW50cnkgaW50byB0aGUgaGFzaCB0YWJsZSBiZWZvcmUgdGhlIFwiT1JJR0lOQUxcIiBkaXJlY3Rpb24gZW50cnksIHdoaWNoIHdhc24ndCBmdWxseSBpbml0aWFsaXplZC4gVGhlIEdDIG9ubHkgaXRlcmF0ZXMgb3JpZ2luYWwtZGlyZWN0aW9uIGVudHJpZXM7IHB1Ymxpc2ggb3JpZ2luYWwgbGFzdC4gVGhpcyBwYXRjaCBjbGV2ZXJseSBmbGlwcyB0aGUgaW5zZXJ0aW9uIG9yZGVyIChPUklHSU5BTCB0aGVuIFJFUExZKSBhbmQgaW50cm9kdWNlcyBhIGBORl9GTE9XX0NPTkZJUk1FRGAgZmxhZyB0byBhY3QgYXMgYSBcInJlYWR5XCIgc2lnbmFsLiBUaGUgbG9va3VwIGFuZCBHQyBmdW5jdGlvbnMgYXJlIHRoZW4gdXBkYXRlZCB0byBiYWlsIG91dCBlYXJseSBpZiB0aGlzIGZsYWcgaXNuJ3Qgc2V0LlxuXG5UaGUgY29yZSBvZiBteSBhbmFseXNpcyBpcyB0aGlzOiB3aGlsZSB0aGUgaW5pdGlhbCBwcm9ibGVtIGNvdWxkIGhhdmUgcmVzdWx0ZWQgaW4gdW5kZWZpbmVkIGJlaGF2aW9yIGZyb20gYWNjZXNzaW5nIHBhcnRpYWxseSBpbml0aWFsaXplZCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSwgaXQgd2FzIGR1ZSB0byBhIGNvbmN1cnJlbmN5IGlzc3VlLCBub3QgdGhlIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAqcGVyIHNlKi4gSXQncyBhIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgYWNjZXNzIGlzc3VlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBhbmQgS0NTQU4gKEtlcm5lbCBDb250cm9sLWZsb3cgSW50ZWdyaXR5KSBhcmUgZGVzaWduZWQgdG8gZGV0ZWN0LiBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzIHVzZWQgdG8gZGV0ZWN0IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJhY2UgY29uZGl0aW9uIG1lYW50IHRoYXQgbWVtb3J5IG1heSBub3QgaGF2ZSBiZWVuIGZ1bGx5IGluaXRpYWxpemVkLiBCdXQgdGhlIHByb2JsZW0gaXMgYWNjZXNzaW5nIGludmFsaWQgbWVtb3J5IGFuZCBub3QgYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIGl0IGRvZXNuJ3QgaGF2ZSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IHJlbGllcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaXQgZG9lc24ndCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgaXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgYXJvdW5kIGJvdW5kcyBjaGVja3MgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgZmxvdyBzdHJ1Y3QgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBiZWZvcmUgYGZsb3dfb2ZmbG9hZF9hZGRgLCBzbyBpdCBpcyBub3QgYSBLTVNBTiBwcm9ibGVtLiBUaGUgcmFjZSBpcyBiZWluZyBhZGRyZXNzZWQgYnkgdGhpcyBwYXRjaC5cblxuTXkgcXVpY2sgY2hlY2sgaXMgdG8gbG9vayBhdCB0aGUgYGZsb3dfb2ZmbG9hZF9hbGxvY2AgZnVuY3Rpb24uIEJ1dCB0aGVyZSBpcyBubyBuZWVkIGZvciB0aGlzLCBzaW5jZSB0aGUgcHJvYmxlbSBpcyBjb25jdXJyZW5jeS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGEgYnVnIGZpeCBmb2N1c2VkIG9uIGNvbmN1cnJlbmN5IGFuZCBzaG91bGQgbm90IGJlIHRlc3RlZCB3aXRoIEtNU0FOLiBJIHdpbGwgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzNSwiT3V0cHV0VG9rZW5zIjoxNzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMDo0MToxNy43NjU4OTU4MzRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIChyYWNlIGNvbmRpdGlvbikgZHVyaW5nIHRoZSBhZGRpdGlvbiBvZiBhIGZsb3cgdG8gdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlLiBCeSBpbnRyb2R1Y2luZyB0aGUgYE5GX0ZMT1dfQ09ORklSTUVEYCBmbGFnIGFuZCBjaGFuZ2luZyB0aGUgcmhhc2h0YWJsZSBpbnNlcnRpb24gb3JkZXIsIGl0IHByZXZlbnRzIGNvbmN1cnJlbnQgbG9va3VwcyBvciBnYXJiYWdlIGNvbGxlY3Rpb24gZnJvbSBhY2Nlc3NpbmcgYSBmbG93IGJlZm9yZSBpdCBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgYWRkZWQuIENvbmN1cnJlbmN5IGJ1Z3Mgb2YgdGhpcyBuYXR1cmUgdHlwaWNhbGx5IGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaGUgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UgKGluZm8tbGVha3MpIG9yIGNvbXBsZXggdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCBzcGVjaWZpY2FsbHkgcmVxdWlyZSBLTVNBTi4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgKHJhY2UgY29uZGl0aW9uKSBkdXJpbmcgdGhlIGFkZGl0aW9uIG9mIGEgZmxvdyB0byB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUuIEJ5IGludHJvZHVjaW5nIHRoZSBgTkZfRkxPV19DT05GSVJNRURgIGZsYWcgYW5kIGNoYW5naW5nIHRoZSByaGFzaHRhYmxlIGluc2VydGlvbiBvcmRlciwgaXQgcHJldmVudHMgY29uY3VycmVudCBsb29rdXBzIG9yIGdhcmJhZ2UgY29sbGVjdGlvbiBmcm9tIGFjY2Vzc2luZyBhIGZsb3cgYmVmb3JlIGl0IGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBhZGRlZC4gQ29uY3VycmVuY3kgYnVncyBvZiB0aGlzIG5hdHVyZSB0eXBpY2FsbHkgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSAoaW5mby1sZWFrcykgb3IgY29tcGxleCB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHNwZWNpZmljYWxseSByZXF1aXJlIEtNU0FOLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowbwkwv[1] Phase: Succeeded StartedAt: 2026-08-13 00:41:29 +0000 UTC FinishedAt: 2026-08-13 00:41:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkwv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 00:41:29 +0000 UTC FinishedAt: 2026-08-13 00:41:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkwv[2] Phase: Succeeded StartedAt: 2026-08-13 00:41:29 +0000 UTC FinishedAt: 2026-08-13 04:21:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 00:41:29 +0000 UTC FinishedAt: 2026-08-13 04:21:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 00:41:29 +0000 UTC FinishedAt: 2026-08-13 00:41:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 00:41:29 +0000 UTC FinishedAt: 2026-08-13 00:41:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowbwkwv/series-workflowbwkwv-convert-artifact-1807959286/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 00:41:39 +0000 UTC FinishedAt: 2026-08-13 00:58:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 00:41:39 +0000 UTC FinishedAt: 2026-08-13 00:58:25 +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:*fd9b197b-b8d6-4d1c-955c-86005379c15d,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-workflowbwkwv/series-workflowbwkwv-convert-artifact-1807959286/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": "7cfafebf-d9fe-4408-9e94-10dd667db857", "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-workflowbwkwv/series-workflowbwkwv-build-action-2670288908/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 00:41:39 +0000 UTC FinishedAt: 2026-08-13 00:58:15 +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:*fd9b197b-b8d6-4d1c-955c-86005379c15d,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-workflowbwkwv/series-workflowbwkwv-convert-artifact-1807959286/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": "7cfafebf-d9fe-4408-9e94-10dd667db857", "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-workflowbwkwv/series-workflowbwkwv-build-action-2670288908/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 00:58:25 +0000 UTC FinishedAt: 2026-08-13 00:58:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 00:58:25 +0000 UTC FinishedAt: 2026-08-13 00:58:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 00:58:25 +0000 UTC FinishedAt: 2026-08-13 00:58:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 00:58:25 +0000 UTC FinishedAt: 2026-08-13 00:58:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowbwkwv/series-workflowbwkwv-convert-artifact-1874091145/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 00:58:35 +0000 UTC FinishedAt: 2026-08-13 01:00:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 00:58:35 +0000 UTC FinishedAt: 2026-08-13 01:00:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7cfafebf-d9fe-4408-9e94-10dd667db857,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-workflowbwkwv/series-workflowbwkwv-build-action-2670288908/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-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 01:00:40 +0000 UTC FinishedAt: 2026-08-13 01:00:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 01:00:40 +0000 UTC FinishedAt: 2026-08-13 01:00:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 01:00:40 +0000 UTC FinishedAt: 2026-08-13 01:17:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 01:00:40 +0000 UTC FinishedAt: 2026-08-13 01:17:30 +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:*fd9b197b-b8d6-4d1c-955c-86005379c15d,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-workflowbwkwv/series-workflowbwkwv-convert-artifact-1874091145/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": "5596edff-5097-4a93-afe8-e60356801241", "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-workflowbwkwv/series-workflowbwkwv-build-action-3313589861/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 01:00:40 +0000 UTC FinishedAt: 2026-08-13 01:17:20 +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:*fd9b197b-b8d6-4d1c-955c-86005379c15d,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-workflowbwkwv/series-workflowbwkwv-convert-artifact-1874091145/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": "5596edff-5097-4a93-afe8-e60356801241", "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-workflowbwkwv/series-workflowbwkwv-build-action-3313589861/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 01:17:30 +0000 UTC FinishedAt: 2026-08-13 01:17:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 01:17:30 +0000 UTC FinishedAt: 2026-08-13 01:17:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 01:17:30 +0000 UTC FinishedAt: 2026-08-13 01:19:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 01:17:30 +0000 UTC FinishedAt: 2026-08-13 01:19:44 +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:*5596edff-5097-4a93-afe8-e60356801241,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-workflowbwkwv/series-workflowbwkwv-build-action-3313589861/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-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 01:19:53 +0000 UTC FinishedAt: 2026-08-13 04:21:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 01:19:53 +0000 UTC FinishedAt: 2026-08-13 04:21:12 +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":["flow_offload_add"],"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:*7cfafebf-d9fe-4408-9e94-10dd667db857,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5596edff-5097-4a93-afe8-e60356801241,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-workflowbwkwv/series-workflowbwkwv-build-action-2670288908/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-workflowbwkwv/series-workflowbwkwv-build-action-3313589861/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 01:19:53 +0000 UTC FinishedAt: 2026-08-13 01:20:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 01:19:53 +0000 UTC FinishedAt: 2026-08-13 01:19:59 +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":["flow_offload_add"],"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-workflowbwkwv/series-workflowbwkwv-convert-artifact-3920560350/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 01:19:53 +0000 UTC FinishedAt: 2026-08-13 01:19:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 01:19:53 +0000 UTC FinishedAt: 2026-08-13 01:19:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 01:19:53 +0000 UTC FinishedAt: 2026-08-13 01:19:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 01:20:04 +0000 UTC FinishedAt: 2026-08-13 04:21:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkwv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES","NFT_FLOW_OFFLOAD","NET_ACT_CT"],"series_id":"5ef8ebf4-bc30-41a6-8c03-b7ec9e282ea8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 01:20:04 +0000 UTC FinishedAt: 2026-08-13 04:21:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7cfafebf-d9fe-4408-9e94-10dd667db857,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5596edff-5097-4a93-afe8-e60356801241,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-workflowbwkwv/series-workflowbwkwv-build-action-2670288908/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-workflowbwkwv/series-workflowbwkwv-build-action-3313589861/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-workflowbwkwv/series-workflowbwkwv-convert-artifact-3920560350/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,}