Name: series-workflow97z6l Phase: Succeeded StartedAt: 2026-07-20 05:24:17 +0000 UTC FinishedAt: 2026-07-20 10:10:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow97z6l[0] Phase: Succeeded StartedAt: 2026-07-20 05:24:17 +0000 UTC FinishedAt: 2026-07-20 05:58:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow97z6l[0].run-triage Phase: Succeeded StartedAt: 2026-07-20 05:24:17 +0000 UTC FinishedAt: 2026-07-20 05:58:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "761214e5c0b14aa4e16a6b763c7a4932ce89f589", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "761214e5c0b14aa4e16a6b763c7a4932ce89f589", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "4348e97e-f8a6-4c43-bc52-c1b06e272f70" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_stream_vprintk" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA3LzIwIDA1OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3N0cmVhbV92cHJpbnRrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZnVuY3Rpb25hbCBidWcgaW4gYGJwZl9zdHJlYW1fcHVzaF9zdHJgIHdoZXJlIHRoZSBjb25zdW1lZCBjYXBhY2l0eSB3YXMgbm90IHJldmVydGVkIGlmIGBfX2JwZl9zdHJlYW1fcHVzaF9zdHJgIGZhaWxlZC4gVGhpcyBsb2dpYyBpcyByZWFjaGFibGUgdmlhIHRoZSBgYnBmX3N0cmVhbV92cHJpbnRrYCBCUEYga2Z1bmMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDU6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3OGI4ZGYxYWJkOWU3NmVmNjk1NzE0MDE5NDMwYTdlOGJjMThhMzFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMDU6NTc6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdHJlYW0uYyBiL2tlcm5lbC9icGYvc3RyZWFtLmNcbmluZGV4IGJlOWNlOThlOTQ2OTI1Li40YjhhNzRiOTE2MmUxYyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3RyZWFtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3RyZWFtLmNcbkBAIC03OSw3ICYjNDM7NzksMTQgQEAgc3RhdGljIGludCBicGZfc3RyZWFtX3B1c2hfc3RyKHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxcbiB7XG4gXHRpbnQgcmV0ID0gYnBmX3N0cmVhbV9jb25zdW1lX2NhcGFjaXR5KHN0cmVhbSwgbGVuKTtcbiBcbi1cdHJldHVybiByZXQgPzogX19icGZfc3RyZWFtX3B1c2hfc3RyKFx1MDAyNnN0cmVhbS1cdTAwM2Vsb2csIHN0ciwgbGVuKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFx1MDAyNnN0cmVhbS1cdTAwM2Vsb2csIHN0ciwgbGVuKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0YXRvbWljX3N1YihsZW4sIFx1MDAyNnN0cmVhbS1cdTAwM2VjYXBhY2l0eSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX3N0cmVhbSAqYnBmX3N0cmVhbV9nZXQoZW51bSBicGZfc3RyZWFtX2lkIHN0cmVhbV9pZCwgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA1OjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3N0cmVhbV92cHJpbnRrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZnVuY3Rpb25hbCBidWcgaW4gYGJwZl9zdHJlYW1fcHVzaF9zdHJgIHdoZXJlIHRoZSBjb25zdW1lZCBjYXBhY2l0eSB3YXMgbm90IHJldmVydGVkIGlmIGBfX2JwZl9zdHJlYW1fcHVzaF9zdHJgIGZhaWxlZC4gVGhpcyBsb2dpYyBpcyByZWFjaGFibGUgdmlhIHRoZSBgYnBmX3N0cmVhbV92cHJpbnRrYCBCUEYga2Z1bmMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc4YjhkZjFhYmQ5ZTc2ZWY2OTU3MTQwMTk0MzBhN2U4YmMxOGEzMWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyMCAwNTo1NzoyMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RyZWFtLmMgYi9rZXJuZWwvYnBmL3N0cmVhbS5jCmluZGV4IGJlOWNlOThlOTQ2OTI1Li40YjhhNzRiOTE2MmUxYyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zdHJlYW0uYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0cmVhbS5jCkBAIC03OSw3ICYjNDM7NzksMTQgQEAgc3RhdGljIGludCBicGZfc3RyZWFtX3B1c2hfc3RyKHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIGNvbnN0IGNoYXIgKnN0ciwgaW50IGwKIHsKIAlpbnQgcmV0ID0gYnBmX3N0cmVhbV9jb25zdW1lX2NhcGFjaXR5KHN0cmVhbSwgbGVuKTsKIAotCXJldHVybiByZXQgPzogX19icGZfc3RyZWFtX3B1c2hfc3RyKCZhbXA7c3RyZWFtLSZndDtsb2csIHN0ciwgbGVuKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IF9fYnBmX3N0cmVhbV9wdXNoX3N0cigmYW1wO3N0cmVhbS0mZ3Q7bG9nLCBzdHIsIGxlbik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlhdG9taWNfc3ViKGxlbiwgJmFtcDtzdHJlYW0tJmd0O2NhcGFjaXR5KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHN0cnVjdCBicGZfc3RyZWFtICpicGZfc3RyZWFtX2dldChlbnVtIGJwZl9zdHJlYW1faWQgc3RyZWFtX2lkLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBicGZfc3RyZWFtX3B1c2hfc3RyYCBwYXRjaC4KCioqQW5hbHl6aW5nIHRoZSBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgTW9kaWZpY2F0aW9uKioKCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlJiMzOTt2ZSBnb3QgYSBtb2RpZmljYXRpb24gdG8gYGtlcm5lbC9icGYvc3RyZWFtLmNgLCBzcGVjaWZpY2FsbHkgaW1wYWN0aW5nIHRoZSBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgZnVuY3Rpb24uIE15IHVzdWFsIGFwcHJvYWNoIGlzIHRvIGltbWVkaWF0ZWx5IGp1bXAgdG8gdGhlIHNvdXJjZSBmaWxlLCBga2VybmVsL2JwZi9zdHJlYW0uY2AsIGFuZCBnZXQgYSBob2xpc3RpYyB2aWV3IG9mIGhvdyBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCwgY3J1Y2lhbGx5LCBpdHMgdXNhZ2UgY29udGV4dCB3aXRoaW4gdGhlIHN0cmVhbSBmcmFtZXdvcmsuIFdoYXQgYXJlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucz8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgZG9lcyBpdCBpbnRlcmFjdCB3aXRoPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5IGJhc2VkIG9uIGl0cyBsb2NhdGlvbiBhbmQgYmVoYXZpb3I/IEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgcXVlc3Rpb25zIGFib3V0IHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzLCBtZW1vcnkgbWFuYWdlbWVudCwgb3IgZXZlbiBzdWJ0bGUgY2hhbmdlcyBpbiBzdHJlYW0gYmVoYXZpb3IgdGhhdCB0aGlzIHNpbmdsZSBmdW5jdGlvbiYjMzk7cyBwYXRjaCBtaWdodCBpbnRyb2R1Y2UuIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIGlmIHRoZSBjaGFuZ2UgaGFzIHByb3BlciBlcnJvciBoYW5kbGluZywgY29uc2lkZXJzIGVkZ2UgY2FzZXMsIGFuZCBhbGlnbnMgd2l0aCB0aGUgb3ZlcmFsbCBkZXNpZ24gZ29hbHMgb2YgdGhlIEJQRiBzdHJlYW0gaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3N0cmVhbV9wdXNoX3N0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RyZWFtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdHJlYW0uYz0xOD1zdGF0aWMgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqYnBmX3N0cmVhbV9lbGVtX2FsbG9jKGludCBsZW4pXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy00MS1cbmtlcm5lbC9icGYvc3RyZWFtLmM6NDI6c3RhdGljIGludCBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGxsaXN0X2hlYWQgKmxvZywgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxua2VybmVsL2JwZi9zdHJlYW0uYy00My17XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz03MT1zdGF0aWMgdm9pZCBicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqZWxlbSlcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTc3LVxua2VybmVsL2JwZi9zdHJlYW0uYzo3ODpzdGF0aWMgaW50IGJwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxua2VybmVsL2JwZi9zdHJlYW0uYy03OS17XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy04NC1cbmtlcm5lbC9icGYvc3RyZWFtLmM6ODU6XHRyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXHUwMDI2c3RyZWFtLVx1MDAzZWxvZywgc3RyLCBsZW4pO1xua2VybmVsL2JwZi9zdHJlYW0uYy04Ni1cdGlmIChyZXQpXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz0yMjI9X19icGZfa2Z1bmMgaW50IGJwZl9zdHJlYW1fdnByaW50ayhpbnQgc3RyZWFtX2lkLCBjb25zdCBjaGFyICpmbXRfX3N0ciwgY29uc3Qgdm9pZCAqYXJncyxcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI0OC1cdC8qIEV4Y2x1ZGUgTlVMTCBieXRlIGR1cmluZyBwdXNoLiAqL1xua2VybmVsL2JwZi9zdHJlYW0uYzoyNDk6XHRyZXQgPSBicGZfc3RyZWFtX3B1c2hfc3RyKHN0cmVhbSwgZGF0YS5idWYsIHJldCk7XG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI1MC1cdGJwZl9icHJpbnRmX2NsZWFudXAoXHUwMDI2ZGF0YSk7XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz0zMTc9aW50IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy0zMzAtXHQvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi9cbmtlcm5lbC9icGYvc3RyZWFtLmM6MzMxOlx0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFx1MDAyNnNzLVx1MDAzZWxvZywgYnVmLVx1MDAzZWJ1ZiwgcmV0KTtcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzMyLVx0YnBmX3B1dF9idWZmZXJzKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBicGZfc3RyZWFtIFN1YnN5c3RlbSoqCgpBbHJpZ2h0LCBzbyBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgaXMgY2FsbGVkIGJ5IGBicGZfc3RyZWFtX3ZwcmludGtgLiBUaGF0JiMzOTtzIGEgdmVyeSBzcGVjaWZpYyBjb25uZWN0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gZmlndXJlIG91dCB0aGUgbGFyZ2VyIGNvbnRleHQuIGBicGZfc3RyZWFtX3ZwcmludGtgLi4uIHRoYXQgbmFtZSBzY3JlYW1zICYjMzQ7Zm9ybWF0dGVkIG91dHB1dCYjMzQ7IHJlbGF0ZWQgdG8gdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgc3Vic3lzdGVtLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiB0aGlzIGludm9sdmVzIHRoZSBrZXJuZWwmIzM5O3MgYWJpbGl0eSB0byBwcmludCBpbmZvcm1hdGlvbiBmcm9tIEJQRiBwcm9ncmFtcywgbGlrZWx5IGZvciBkZWJ1Z2dpbmcgb3IgbG9nZ2luZyBwdXJwb3Nlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoZXJlKiBhbmQgKmhvdyogdGhpcyBmb3JtYXR0ZWQgcHJpbnRpbmcgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIEJQRiBlY29zeXN0ZW0uIElzIGl0IGZvciB0cmFjaW5nIGV2ZW50cz8gUGVyZm9ybWFuY2UgbW9uaXRvcmluZz8gRXJyb3IgcmVwb3J0aW5nIHdpdGhpbiBCUEYgcHJvZ3JhbXM/IEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNhbGwgc2l0ZXMgb2YgYGJwZl9zdHJlYW1fdnByaW50a2AgdG8gZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9zdHJlYW1fdnByaW50ayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jPTQ5NjI9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jZ3JvdXBfcmVhZF94YXR0ciwgS0ZfUkNVKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk2My0jZW5kaWZcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5NjQ6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJlYW1fdnByaW50aywgS0ZfSU1QTElDSVRfQVJHUylcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5NjUtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJlYW1fcHJpbnRfc3RhY2ssIEtGX0lNUExJQ0lUX0FSR1MpXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz0yMTY9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtMjIxLSAqL1xua2VybmVsL2JwZi9zdHJlYW0uYzoyMjI6X19icGZfa2Z1bmMgaW50IGJwZl9zdHJlYW1fdnByaW50ayhpbnQgc3RyZWFtX2lkLCBjb25zdCBjaGFyICpmbXRfX3N0ciwgY29uc3Qgdm9pZCAqYXJncyxcbmtlcm5lbC9icGYvc3RyZWFtLmMtMjIzLVx0XHRcdFx0ICAgdTMyIGxlbl9fc3osIHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEwNjg9ZW51bSBzcGVjaWFsX2tmdW5jX3R5cGUge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTEzNi1cdEtGX2JwZl9zZXNzaW9uX2lzX3JldHVybixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTEzNzpcdEtGX2JwZl9zdHJlYW1fdnByaW50ayxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTEzOC1cdEtGX2JwZl9zdHJlYW1fcHJpbnRfc3RhY2ssXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjMyPUJURl9JRF9VTlVTRURcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIzMy0jZW5kaWZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTIzNDpCVEZfSUQoZnVuYywgYnBmX3N0cmVhbV92cHJpbnRrKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjM1LUJURl9JRChmdW5jLCBicGZfc3RyZWFtX3ByaW50X3N0YWNrKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTcxOT1zdGF0aWMgYm9vbCBpc19icGZfc3RyZWFtX2tmdW5jKHUzMiBidGZfaWQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE3MjAte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjExNzIxOlx0cmV0dXJuIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3N0cmVhbV92cHJpbnRrXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzIyLVx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3N0cmVhbV9wcmludF9zdGFja107XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY5NAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgQlBGIFN0cmVhbSBQcmludGluZyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIGBicGZfc3RyZWFtX3ZwcmludGtgLiBUaGF0JiMzOTtzIGEgQlBGIGtmdW5jLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhIGtlcm5lbCBmdW5jdGlvbiBhdmFpbGFibGUgdG8gQlBGIHByb2dyYW1zLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBsZXQmIzM5O3MgZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucy4mIzM0OyBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgcmVxdWlyZWQgaW4gYGtlcm5lbC9icGYvc3RyZWFtLmNgLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGdlbmVyYWwgQlBGIHN1cHBvcnQ7IHRoaXMgaXMgYSBzcGVjaWZpYyBzdHJlYW0gcHJpbnRpbmcgZmVhdHVyZS4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBhbnkgc3BlY2lmaWMgY29tcGlsZS10aW1lIGZsYWdzLCBvciwgb2YgY291cnNlLCBhbnkgbW9kdWxlIGRlcGVuZGVuY2llcyB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyB1c2FnZSBhbmQgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBjb250ZXh0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYXZhaWxhYmxlIHRvIG1lLCBhbmQgd2hhdCB0aGUgbWluaW11bSBidWlsZCByZXF1aXJlbWVudHMgYXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cmVhbVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTE3PW9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gdHJhbXBvbGluZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE5LWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA1OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFN0cmVhbSBQdXNoIEZ1bmN0aW9uKioKCk9rYXksIHNvIHRoZSBpbnZlc3RpZ2F0aW9uIGNlbnRlcnMgYXJvdW5kIGBDT05GSUdfQlBGX1NZU0NBTExgLiBNeSBmb2N1cyBpcyBvbiB0aGUgYGJwZl9zdHJlYW1fcHVzaF9zdHJgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGBicGZfc3RyZWFtX3ZwcmludGtgIGlzIHRoZSBvbmUgY2FsbGluZyBpdC4gVGltZSB0byBjb25maXJtIGlmIGBicGZfc3RyZWFtX3ZwcmludGtgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZS4gUmlnaHQsIGl0JiMzOTtzIGEga2Z1bmMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGZhaXIgZ2FtZSBmb3IgQlBGIHByb2dyYW1zIHRvIGNhbGwuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MsIGJ1dCBkb2VzbiYjMzk7dCB0ZWxsIHRoZSB3aG9sZSBzdG9yeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZywgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGBicGZfc3RyZWFtX3B1c2hfc3RyYD8gSSBzaG91bGQgbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3Mgc29tZXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc3RyZWFtX3B1c2hfc3RyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdHJlYW0uYz0xOD1zdGF0aWMgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqYnBmX3N0cmVhbV9lbGVtX2FsbG9jKGludCBsZW4pXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy00MS1cbmtlcm5lbC9icGYvc3RyZWFtLmM6NDI6c3RhdGljIGludCBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGxsaXN0X2hlYWQgKmxvZywgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxua2VybmVsL2JwZi9zdHJlYW0uYy00My17XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz03MT1zdGF0aWMgdm9pZCBicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqZWxlbSlcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTc3LVxua2VybmVsL2JwZi9zdHJlYW0uYzo3ODpzdGF0aWMgaW50IGJwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxua2VybmVsL2JwZi9zdHJlYW0uYy03OS17XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy04NC1cbmtlcm5lbC9icGYvc3RyZWFtLmM6ODU6XHRyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXHUwMDI2c3RyZWFtLVx1MDAzZWxvZywgc3RyLCBsZW4pO1xua2VybmVsL2JwZi9zdHJlYW0uYy04Ni1cdGlmIChyZXQpXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz0yMjI9X19icGZfa2Z1bmMgaW50IGJwZl9zdHJlYW1fdnByaW50ayhpbnQgc3RyZWFtX2lkLCBjb25zdCBjaGFyICpmbXRfX3N0ciwgY29uc3Qgdm9pZCAqYXJncyxcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI0OC1cdC8qIEV4Y2x1ZGUgTlVMTCBieXRlIGR1cmluZyBwdXNoLiAqL1xua2VybmVsL2JwZi9zdHJlYW0uYzoyNDk6XHRyZXQgPSBicGZfc3RyZWFtX3B1c2hfc3RyKHN0cmVhbSwgZGF0YS5idWYsIHJldCk7XG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI1MC1cdGJwZl9icHJpbnRmX2NsZWFudXAoXHUwMDI2ZGF0YSk7XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz0zMTc9aW50IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy0zMzAtXHQvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi9cbmtlcm5lbC9icGYvc3RyZWFtLmM6MzMxOlx0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFx1MDAyNnNzLVx1MDAzZWxvZywgYnVmLVx1MDAzZWJ1ZiwgcmV0KTtcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzMyLVx0YnBmX3B1dF9idWZmZXJzKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4OTYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgU3RyZWFtIEJ1ZyBGaXgqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgYnVnIHdpdGhpbiBgYnBmX3N0cmVhbV9wdXNoX3N0cmAuIEkgc2VlIHRoZXkmIzM5O3ZlIGlkZW50aWZpZWQgYW4gaXNzdWUgd2hlcmUgaWYgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgZmFpbHMsIHRoZSBjYXBhY2l0eSBhY2NvdW50aW5nIGlzbiYjMzk7dCBwcm9wZXJseSBoYW5kbGVkLiBUaGV5JiMzOTtyZSBjb3JyZWN0bHkgaW1wbGVtZW50aW5nIGEgcmV2ZXJ0IGJ5IGRlY3JlbWVudGluZyB0aGUgc3RyZWFtIGNhcGFjaXR5IGlmIGBfX2JwZl9zdHJlYW1fcHVzaF9zdHJgIHJldHVybnMgYW4gZXJyb3IuIFRoaXMgaXMgYSBzb2xpZCwgZnVuY3Rpb25hbCBmaXggZm9yIHRoZSBjb3JlIEJQRiBsb2dpYywgZ29vZC4KClNpbmNlIGBicGZfc3RyZWFtX3B1c2hfc3RyYCBpcyBjYWxsZWQgYnkgYGJwZl9zdHJlYW1fdnByaW50a2AsIGFuZCB0aGUgY29uZmlndXJhdGlvbiBpcyBgQlBGX1NZU0NBTExgLCB0aGF0IGdpdmVzIG1lIGEgZ29vZCBlbnRyeSBwb2ludC4gTm93LCBsZXQmIzM5O3MganVzdCBjb25maXJtIGBicGZfc3RyZWFtX3B1c2hfc3RyYCBpcyBzdGF0aWMuIEFscmlnaHQsIGl0IGlzLiBMb29rcyBsaWtlIGBicGZfc3RyZWFtX3ZwcmludGtgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGluIHRoaXMgY29udGV4dC4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBzY2FuIGZvciBhbnkgb3RoZXIgY2FsbGVycyBvZiBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGFyZWFzIGltcGFjdGVkIGJ5IHRoaXMgY2hhbmdlLiBJdCYjMzk7cyBhbHdheXMgZ29vZCBwcmFjdGljZSB0byBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBsaWtlIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9zdHJlYW1fcHVzaF9zdHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdHJlYW0uYz0xOD1zdGF0aWMgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqYnBmX3N0cmVhbV9lbGVtX2FsbG9jKGludCBsZW4pXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy00MS1cbmtlcm5lbC9icGYvc3RyZWFtLmM6NDI6c3RhdGljIGludCBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGxsaXN0X2hlYWQgKmxvZywgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxua2VybmVsL2JwZi9zdHJlYW0uYy00My17XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz03MT1zdGF0aWMgdm9pZCBicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqZWxlbSlcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTc3LVxua2VybmVsL2JwZi9zdHJlYW0uYzo3ODpzdGF0aWMgaW50IGJwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxua2VybmVsL2JwZi9zdHJlYW0uYy03OS17XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy04NC1cbmtlcm5lbC9icGYvc3RyZWFtLmM6ODU6XHRyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXHUwMDI2c3RyZWFtLVx1MDAzZWxvZywgc3RyLCBsZW4pO1xua2VybmVsL2JwZi9zdHJlYW0uYy04Ni1cdGlmIChyZXQpXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz0yMjI9X19icGZfa2Z1bmMgaW50IGJwZl9zdHJlYW1fdnByaW50ayhpbnQgc3RyZWFtX2lkLCBjb25zdCBjaGFyICpmbXRfX3N0ciwgY29uc3Qgdm9pZCAqYXJncyxcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI0OC1cdC8qIEV4Y2x1ZGUgTlVMTCBieXRlIGR1cmluZyBwdXNoLiAqL1xua2VybmVsL2JwZi9zdHJlYW0uYzoyNDk6XHRyZXQgPSBicGZfc3RyZWFtX3B1c2hfc3RyKHN0cmVhbSwgZGF0YS5idWYsIHJldCk7XG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI1MC1cdGJwZl9icHJpbnRmX2NsZWFudXAoXHUwMDI2ZGF0YSk7XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz0zMTc9aW50IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy0zMzAtXHQvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi9cbmtlcm5lbC9icGYvc3RyZWFtLmM6MzMxOlx0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFx1MDAyNnNzLVx1MDAzZWxvZywgYnVmLVx1MDAzZWJ1ZiwgcmV0KTtcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzMyLVx0YnBmX3B1dF9idWZmZXJzKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIHRoZSBDYWxsZXJzIG9mIGBicGZfc3RyZWFtX3B1c2hfc3RyYCoqCgpSaWdodCwgc28gYGJwZl9zdHJlYW1fcHVzaF9zdHJgIGlzIGRlZmluaXRlbHkgY2FsbGVkIGJ5IGBicGZfc3RyZWFtX3ZwcmludGtgLiBUaGF0IG11Y2ggSSByZWNhbGwgY2xlYXJseS4gQnV0IGhhbmcgb24sIGlzICp0aGF0KiBpdD8gQ291bGQgYGJwZl9zdHJlYW1fcHJpbnRfc3RhY2tgIHBvdGVudGlhbGx5IHVzZSBpdCBhcyB3ZWxsPyBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhhdC4gSG1tLCBsb29raW5nIGF0IHRoZSBjb2RlIGZvciBgYnBmX3N0cmVhbV9wcmludF9zdGFja2AuLi4gbm9wZSwgZG9lc24mIzM5O3QgbG9vayBsaWtlIHRoZXJlJiMzOTtzIGEgY2FsbCB0byBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgaW4gdGhlcmUgYXQgYWxsLiBPa2F5LCBzbyBteSBpbml0aWFsIHRob3VnaHQgaG9sZHMg4oCTIHNlZW1zIGxpa2UgYGJwZl9zdHJlYW1fdnByaW50a2AgaXMgdGhlIHByaW1hcnksIGlmIG5vdCBzb2xlLCB1c2VyIG9mIHRoYXQgZnVuY3Rpb24uIEV4Y2VsbGVudCwgY29uZmlybWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc3RyZWFtX3ByaW50X3N0YWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdHJlYW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0cmVhbS5jPTIyMj1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b2lkICphcmdzLFxuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtMjU1LS8qIERpcmVjdGx5IHRyaWdnZXIgYSBzdGFjayBkdW1wIGZyb20gdGhlIHByb2dyYW0uICovXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjI1NjpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV9wcmludF9zdGFjayhpbnQgc3RyZWFtX2lkLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI1Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MzcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEkmIzM5O20gYWJvdXQgdG8gZG86CgoqKkFuYWx5emluZyBgYnBmX3N0cmVhbV9wcmludF9zdGFja2AgQ2FsbHMqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgY2FsbHMgbWFkZSBieSBgYnBmX3N0cmVhbV9wcmludF9zdGFja2AuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGludm9sdmVkIGluIGRlYnVnZ2luZyBvciBwcm9maWxpbmcgQlBGIHByb2dyYW1zLCBlc3BlY2lhbGx5IGdpdmVuIGl0cyBuYW1lLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBCUEYgZWNvc3lzdGVtLiBJIGV4cGVjdCB0aGlzIHdpbGwgcmVxdWlyZSBkaXZpbmcgaW50byB0aGUgY29kZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIGZ1bmN0aW9uJiMzOTtzIGludGVybmFsIGxvZ2ljLCBhbnkgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgaXQgdXRpbGl6ZXMsIGFuZCBhbnkgb3RoZXIgQlBGIGhlbHBlcnMgb3Iga2VybmVsIGZ1bmN0aW9ucyBpdCBpbnRlcmZhY2VzIHdpdGguIFRoZSBnb2FsIGlzIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZCwgc28gSSBjYW4gZWZmZWN0aXZlbHkgZGlhZ25vc2UgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgdHJvdWJsZXNob290IGFueSBpc3N1ZXMgdGhhdCBhcmlzZSB3aXRoIHRoaXMgcGFydGljdWxhciBzdHJlYW0sIGFuZCBob3cgdGhlIHByb2dyYW0gaXMgZ2V0dGluZyBzdGFjayBkYXRhLiBFc3NlbnRpYWxseSwgSSYjMzk7bSBnb2luZyB0byBkZWNvbnN0cnVjdCB0aGUgaW1wbGVtZW50YXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3N0cmVhbV9wcmludF9zdGFjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jPTQ5NjQ9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJlYW1fdnByaW50aywgS0ZfSU1QTElDSVRfQVJHUylcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5NjU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJlYW1fcHJpbnRfc3RhY2ssIEtGX0lNUExJQ0lUX0FSR1MpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTY2LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbCwgS0ZfSU1QTElDSVRfQVJHUylcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTIyMj1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b2lkICphcmdzLFxuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtMjU1LS8qIERpcmVjdGx5IHRyaWdnZXIgYSBzdGFjayBkdW1wIGZyb20gdGhlIHByb2dyYW0uICovXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjI1NjpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV9wcmludF9zdGFjayhpbnQgc3RyZWFtX2lkLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI1Ny17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMDY4PWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExMzctXHRLRl9icGZfc3RyZWFtX3ZwcmludGssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExMzg6XHRLRl9icGZfc3RyZWFtX3ByaW50X3N0YWNrLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTM5LX07XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjM0PUJURl9JRChmdW5jLCBicGZfc3RyZWFtX3ZwcmludGspXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyMzU6QlRGX0lEKGZ1bmMsIGJwZl9zdHJlYW1fcHJpbnRfc3RhY2spXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyMzYtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNzE5PXN0YXRpYyBib29sIGlzX2JwZl9zdHJlYW1fa2Z1bmModTMyIGJ0Zl9pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE3MjEtXHRyZXR1cm4gYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc3RyZWFtX3ZwcmludGtdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE3MjI6XHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc3RyZWFtX3ByaW50X3N0YWNrXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTcyMy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyODYKCQkJCQkJCW91dHB1dDogMTA2CgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFN0cmVhbSBWdWxuZXJhYmlsaXR5IEZpeCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBicGZfc3RyZWFtX3ZwcmludGtgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgdGhlIG9uZSBjYWxsaW5nIHRoZSBwcm9ibGVtYXRpYyBjb2RlLiBUaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGZ1bmN0aW9uYWwgYnVnIGluIGBicGZfc3RyZWFtX3B1c2hfc3RyYC4gU3BlY2lmaWNhbGx5LCBpZiBgX19icGZfc3RyZWFtX3B1c2hfc3RyYCBmYWlscywgdGhlIGNhcGFjaXR5IGNvbnN1bWVkIGlzbiYjMzk7dCBiZWluZyByZXZlcnRlZC4gVGhhdCYjMzk7cyBiYWQuIEFuZCB0aGlzLCBhcyB3ZSYjMzk7dmUgZXN0YWJsaXNoZWQsIGlzIGV4cGxvaXRhYmxlIHRocm91Z2ggdGhlIGBicGZfc3RyZWFtX3ZwcmludGtgIEJQRiBrZnVuYy4KClNvLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBteSBwcmltYXJ5IGZvY3VzOyB0aGF0JiMzOTtzIHRoZSBtYWluIGVuYWJsZXIgaGVyZS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2ssIHRob3VnaC4gV2hpbGUgYGJwZl9zdHJlYW1fdnByaW50a2AgaXMgdGhlIG9idmlvdXMgc3ltYm9sIHRvIGJlIGF3YXJlIG9mLCBJIHNob3VsZCB2ZXJpZnkgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciwgbGVzcy1vYnZpb3VzIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIEkmIzM5O20gbWlzc2luZyB0aGF0IGNvdWxkIGJlIHJlbGV2YW50IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBvdmVybG9vayBhbnkgcG90ZW50aWFsbHkgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGFzcGVjdHMgb2YgdGhpcyB2dWxuZXJhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc3RyZWFtX3ZwcmludGsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBmdW5jdGlvbmFsIGJ1ZyBpbiBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgd2hlcmUgdGhlIGNvbnN1bWVkIGNhcGFjaXR5IHdhcyBub3QgcmV2ZXJ0ZWQgaWYgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgZmFpbGVkLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGZfc3RyZWFtX3ZwcmludGtgIEJQRiBrZnVuYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc3RyZWFtX3ZwcmludGsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBmdW5jdGlvbmFsIGJ1ZyBpbiBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgd2hlcmUgdGhlIGNvbnN1bWVkIGNhcGFjaXR5IHdhcyBub3QgcmV2ZXJ0ZWQgaWYgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgZmFpbGVkLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGZfc3RyZWFtX3ZwcmludGtgIEJQRiBrZnVuYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA1OjU3OjI0LjU2ODM4ODQ1MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMTY2MTM4MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3N0cmVhbV92cHJpbnRrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBmdW5jdGlvbmFsIGJ1ZyBpbiBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgd2hlcmUgdGhlIGNvbnN1bWVkIGNhcGFjaXR5IHdhcyBub3QgcmV2ZXJ0ZWQgaWYgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgZmFpbGVkLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGZfc3RyZWFtX3ZwcmludGtgIEJQRiBrZnVuYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDU6NTc6MjQuNTY4Mzk3MTUxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDM5NDUzMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3OGI4ZGYxYWJkOWU3NmVmNjk1NzE0MDE5NDMwYTdlOGJjMThhMzFlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDIwIDA1OjU3OjIzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RyZWFtLmMgYi9rZXJuZWwvYnBmL3N0cmVhbS5jXFxuaW5kZXggYmU5Y2U5OGU5NDY5MjUuLjRiOGE3NGI5MTYyZTFjIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvc3RyZWFtLmNcXG4rKysgYi9rZXJuZWwvYnBmL3N0cmVhbS5jXFxuQEAgLTc5LDcgKzc5LDE0IEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBjb25zdCBjaGFyICpzdHIsIGludCBsXFxuIHtcXG4gXFx0aW50IHJldCA9IGJwZl9zdHJlYW1fY29uc3VtZV9jYXBhY2l0eShzdHJlYW0sIGxlbik7XFxuIFxcbi1cXHRyZXR1cm4gcmV0ID86IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihcXHUwMDI2c3RyZWFtLVxcdTAwM2Vsb2csIHN0ciwgbGVuKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihcXHUwMDI2c3RyZWFtLVxcdTAwM2Vsb2csIHN0ciwgbGVuKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0YXRvbWljX3N1YihsZW4sIFxcdTAwMjZzdHJlYW0tXFx1MDAzZWNhcGFjaXR5KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX3N0cmVhbSAqYnBmX3N0cmVhbV9nZXQoZW51bSBicGZfc3RyZWFtX2lkIHN0cmVhbV9pZCwgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNTo1NzoyNS4xMTMyODczODZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjIxMjI4MzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3N0cmVhbV92cHJpbnRrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBmdW5jdGlvbmFsIGJ1ZyBpbiBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgd2hlcmUgdGhlIGNvbnN1bWVkIGNhcGFjaXR5IHdhcyBub3QgcmV2ZXJ0ZWQgaWYgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgZmFpbGVkLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGZfc3RyZWFtX3ZwcmludGtgIEJQRiBrZnVuYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3OGI4ZGYxYWJkOWU3NmVmNjk1NzE0MDE5NDMwYTdlOGJjMThhMzFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMDU6NTc6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0cmVhbS5jIGIva2VybmVsL2JwZi9zdHJlYW0uY1xuaW5kZXggYmU5Y2U5OGU5NDY5MjUuLjRiOGE3NGI5MTYyZTFjIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zdHJlYW0uY1xuKysrIGIva2VybmVsL2JwZi9zdHJlYW0uY1xuQEAgLTc5LDcgKzc5LDE0IEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBjb25zdCBjaGFyICpzdHIsIGludCBsXG4ge1xuIFx0aW50IHJldCA9IGJwZl9zdHJlYW1fY29uc3VtZV9jYXBhY2l0eShzdHJlYW0sIGxlbik7XG4gXG4tXHRyZXR1cm4gcmV0ID86IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihcdTAwMjZzdHJlYW0tXHUwMDNlbG9nLCBzdHIsIGxlbik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFx1MDAyNnN0cmVhbS1cdTAwM2Vsb2csIHN0ciwgbGVuKTtcbitcdGlmIChyZXQpXG4rXHRcdGF0b21pY19zdWIobGVuLCBcdTAwMjZzdHJlYW0tXHUwMDNlY2FwYWNpdHkpO1xuK1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBicGZfc3RyZWFtICpicGZfc3RyZWFtX2dldChlbnVtIGJwZl9zdHJlYW1faWQgc3RyZWFtX2lkLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNTo1NzoyNS4xMTMyOTAxMjZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzIwNzg3NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgcGF0Y2guXG5cbioqQW5hbHl6aW5nIHRoZSBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgTW9kaWZpY2F0aW9uKipcblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UndmUgZ290IGEgbW9kaWZpY2F0aW9uIHRvIGBrZXJuZWwvYnBmL3N0cmVhbS5jYCwgc3BlY2lmaWNhbGx5IGltcGFjdGluZyB0aGUgYGJwZl9zdHJlYW1fcHVzaF9zdHJgIGZ1bmN0aW9uLiBNeSB1c3VhbCBhcHByb2FjaCBpcyB0byBpbW1lZGlhdGVseSBqdW1wIHRvIHRoZSBzb3VyY2UgZmlsZSwgYGtlcm5lbC9icGYvc3RyZWFtLmNgLCBhbmQgZ2V0IGEgaG9saXN0aWMgdmlldyBvZiBob3cgYGJwZl9zdHJlYW1fcHVzaF9zdHJgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQsIGNydWNpYWxseSwgaXRzIHVzYWdlIGNvbnRleHQgd2l0aGluIHRoZSBzdHJlYW0gZnJhbWV3b3JrLiBXaGF0IGFyZSB0aGUgY2FsbGluZyBmdW5jdGlvbnM/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgaXQgaW50ZXJhY3Qgd2l0aD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBvciBzZWN1cml0eSBiYXNlZCBvbiBpdHMgbG9jYXRpb24gYW5kIGJlaGF2aW9yPyBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgcXVlc3Rpb25zIGFib3V0IHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzLCBtZW1vcnkgbWFuYWdlbWVudCwgb3IgZXZlbiBzdWJ0bGUgY2hhbmdlcyBpbiBzdHJlYW0gYmVoYXZpb3IgdGhhdCB0aGlzIHNpbmdsZSBmdW5jdGlvbidzIHBhdGNoIG1pZ2h0IGludHJvZHVjZS4gSSdsbCBuZWVkIHRvIGFzc2VzcyBpZiB0aGUgY2hhbmdlIGhhcyBwcm9wZXIgZXJyb3IgaGFuZGxpbmcsIGNvbnNpZGVycyBlZGdlIGNhc2VzLCBhbmQgYWxpZ25zIHdpdGggdGhlIG92ZXJhbGwgZGVzaWduIGdvYWxzIG9mIHRoZSBCUEYgc3RyZWFtIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNTo1NzoyOC40MzQwODExNzVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5NjI0OTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJlYW1fcHVzaF9zdHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zdHJlYW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0cmVhbS5jPTE4PXN0YXRpYyBzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICpicGZfc3RyZWFtX2VsZW1fYWxsb2MoaW50IGxlbilcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtNDEtXFxua2VybmVsL2JwZi9zdHJlYW0uYzo0MjpzdGF0aWMgaW50IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJ1Y3QgbGxpc3RfaGVhZCAqbG9nLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4pXFxua2VybmVsL2JwZi9zdHJlYW0uYy00My17XFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTcxPXN0YXRpYyB2b2lkIGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICplbGVtKVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy03Ny1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjc4OnN0YXRpYyBpbnQgYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4pXFxua2VybmVsL2JwZi9zdHJlYW0uYy03OS17XFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTg0LVxcbmtlcm5lbC9icGYvc3RyZWFtLmM6ODU6XFx0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFxcdTAwMjZzdHJlYW0tXFx1MDAzZWxvZywgc3RyLCBsZW4pO1xcbmtlcm5lbC9icGYvc3RyZWFtLmMtODYtXFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmM9MjIyPV9fYnBmX2tmdW5jIGludCBicGZfc3RyZWFtX3ZwcmludGsoaW50IHN0cmVhbV9pZCwgY29uc3QgY2hhciAqZm10X19zdHIsIGNvbnN0IHZvaWQgKmFyZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI0OC1cXHQvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi9cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjI0OTpcXHRyZXQgPSBicGZfc3RyZWFtX3B1c2hfc3RyKHN0cmVhbSwgZGF0YS5idWYsIHJldCk7XFxua2VybmVsL2JwZi9zdHJlYW0uYy0yNTAtXFx0YnBmX2JwcmludGZfY2xlYW51cChcXHUwMDI2ZGF0YSk7XFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTMxNz1pbnQgYnBmX3N0cmVhbV9zdGFnZV9wcmludGsoc3RydWN0IGJwZl9zdHJlYW1fc3RhZ2UgKnNzLCBjb25zdCBjaGFyICpmbXQsIC4uLilcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzMwLVxcdC8qIEV4Y2x1ZGUgTlVMTCBieXRlIGR1cmluZyBwdXNoLiAqL1xcbmtlcm5lbC9icGYvc3RyZWFtLmM6MzMxOlxcdHJldCA9IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihcXHUwMDI2c3MtXFx1MDAzZWxvZywgYnVmLVxcdTAwM2VidWYsIHJldCk7XFxua2VybmVsL2JwZi9zdHJlYW0uYy0zMzItXFx0YnBmX3B1dF9idWZmZXJzKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA1OjU3OjI4Ljg3MzcxNDY2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzNTc3MzExNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGJwZl9zdHJlYW0gU3Vic3lzdGVtKipcblxuQWxyaWdodCwgc28gYGJwZl9zdHJlYW1fcHVzaF9zdHJgIGlzIGNhbGxlZCBieSBgYnBmX3N0cmVhbV92cHJpbnRrYC4gVGhhdCdzIGEgdmVyeSBzcGVjaWZpYyBjb25uZWN0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gZmlndXJlIG91dCB0aGUgbGFyZ2VyIGNvbnRleHQuIGBicGZfc3RyZWFtX3ZwcmludGtgLi4uIHRoYXQgbmFtZSBzY3JlYW1zIFwiZm9ybWF0dGVkIG91dHB1dFwiIHJlbGF0ZWQgdG8gdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgc3Vic3lzdGVtLiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoaXMgaW52b2x2ZXMgdGhlIGtlcm5lbCdzIGFiaWxpdHkgdG8gcHJpbnQgaW5mb3JtYXRpb24gZnJvbSBCUEYgcHJvZ3JhbXMsIGxpa2VseSBmb3IgZGVidWdnaW5nIG9yIGxvZ2dpbmcgcHVycG9zZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aGVyZSogYW5kICpob3cqIHRoaXMgZm9ybWF0dGVkIHByaW50aW5nIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBCUEYgZWNvc3lzdGVtLiBJcyBpdCBmb3IgdHJhY2luZyBldmVudHM/IFBlcmZvcm1hbmNlIG1vbml0b3Jpbmc/IEVycm9yIHJlcG9ydGluZyB3aXRoaW4gQlBGIHByb2dyYW1zPyBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjYWxsIHNpdGVzIG9mIGBicGZfc3RyZWFtX3ZwcmludGtgIHRvIGdldCB0aGUgd2hvbGUgcGljdHVyZS4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBkb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzg0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDU6NTc6MzIuNDA5NDkxMTI4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMzE4OTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJlYW1fdnByaW50a1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuYz00OTYyPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfY2dyb3VwX3JlYWRfeGF0dHIsIEtGX1JDVSlcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTYzLSNlbmRpZlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5NjQ6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJlYW1fdnByaW50aywgS0ZfSU1QTElDSVRfQVJHUylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTY1LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyZWFtX3ByaW50X3N0YWNrLCBLRl9JTVBMSUNJVF9BUkdTKVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYz0yMTY9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0yMjEtICovXFxua2VybmVsL2JwZi9zdHJlYW0uYzoyMjI6X19icGZfa2Z1bmMgaW50IGJwZl9zdHJlYW1fdnByaW50ayhpbnQgc3RyZWFtX2lkLCBjb25zdCBjaGFyICpmbXRfX3N0ciwgY29uc3Qgdm9pZCAqYXJncyxcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTIyMy1cXHRcXHRcXHRcXHQgICB1MzIgbGVuX19zeiwgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMDY4PWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTEzNi1cXHRLRl9icGZfc2Vzc2lvbl9pc19yZXR1cm4sXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTM3OlxcdEtGX2JwZl9zdHJlYW1fdnByaW50ayxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExMzgtXFx0S0ZfYnBmX3N0cmVhbV9wcmludF9zdGFjayxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTIzMj1CVEZfSURfVU5VU0VEXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjMzLSNlbmRpZlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTIzNDpCVEZfSUQoZnVuYywgYnBmX3N0cmVhbV92cHJpbnRrKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIzNS1CVEZfSUQoZnVuYywgYnBmX3N0cmVhbV9wcmludF9zdGFjaylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTcxOT1zdGF0aWMgYm9vbCBpc19icGZfc3RyZWFtX2tmdW5jKHUzMiBidGZfaWQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzIwLXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE3MjE6XFx0cmV0dXJuIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3N0cmVhbV92cHJpbnRrXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTcyMi1cXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc3RyZWFtX3ByaW50X3N0YWNrXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDU6NTc6MzIuNDgxODE2NzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjYwNDI5MzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBTdHJlYW0gUHJpbnRpbmcgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBicGZfc3RyZWFtX3ZwcmludGtgLiBUaGF0J3MgYSBCUEYga2Z1bmMsIHdoaWNoIG1lYW5zIGl0J3MgYSBrZXJuZWwgZnVuY3Rpb24gYXZhaWxhYmxlIHRvIEJQRiBwcm9ncmFtcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgbGV0J3MgZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucy5cIiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyByZXF1aXJlZCBpbiBga2VybmVsL2JwZi9zdHJlYW0uY2AuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBnZW5lcmFsIEJQRiBzdXBwb3J0OyB0aGlzIGlzIGEgc3BlY2lmaWMgc3RyZWFtIHByaW50aW5nIGZlYXR1cmUuIEknbSBnb2luZyB0byB3YW50IHRvIGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBhbnkgc3BlY2lmaWMgY29tcGlsZS10aW1lIGZsYWdzLCBvciwgb2YgY291cnNlLCBhbnkgbW9kdWxlIGRlcGVuZGVuY2llcyB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyB1c2FnZSBhbmQgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBjb250ZXh0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYXZhaWxhYmxlIHRvIG1lLCBhbmQgd2hhdCB0aGUgbWluaW11bSBidWlsZCByZXF1aXJlbWVudHMgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjk0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDU6NTc6MzUuNzQyMjUwNDAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMzY4NDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cmVhbVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTE3PW9iai0kKENPTkZJR19CUEZfSklUKSArPSB0cmFtcG9saW5lLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmLm8gbWVtYWxsb2MubyBycXNwaW5sb2NrLm8gc3RyZWFtLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE5LWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA1OjU3OjM1LjgxMjYzMDg0NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzAzODE2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgU3RyZWFtIFB1c2ggRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGUgaW52ZXN0aWdhdGlvbiBjZW50ZXJzIGFyb3VuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gTXkgZm9jdXMgaXMgb24gdGhlIGBicGZfc3RyZWFtX3B1c2hfc3RyYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBgYnBmX3N0cmVhbV92cHJpbnRrYCBpcyB0aGUgb25lIGNhbGxpbmcgaXQuIFRpbWUgdG8gY29uZmlybSBpZiBgYnBmX3N0cmVhbV92cHJpbnRrYCBpcyBhY3R1YWxseSByZWFjaGFibGUuIFJpZ2h0LCBpdCdzIGEga2Z1bmMsIHdoaWNoIG1lYW5zIGl0J3MgZmFpciBnYW1lIGZvciBCUEYgcHJvZ3JhbXMgdG8gY2FsbC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncywgYnV0IGRvZXNuJ3QgdGVsbCB0aGUgd2hvbGUgc3RvcnkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZywgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGBicGZfc3RyZWFtX3B1c2hfc3RyYD8gSSBzaG91bGQgbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBzb21ldGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNTo1NzozOS4xNDMwMTY4MTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMjc2NzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJlYW1fcHVzaF9zdHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdHJlYW0uYz0xOD1zdGF0aWMgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqYnBmX3N0cmVhbV9lbGVtX2FsbG9jKGludCBsZW4pXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTQxLVxcbmtlcm5lbC9icGYvc3RyZWFtLmM6NDI6c3RhdGljIGludCBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGxsaXN0X2hlYWQgKmxvZywgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtNDMte1xcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYz03MT1zdGF0aWMgdm9pZCBicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqZWxlbSlcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtNzctXFxua2VybmVsL2JwZi9zdHJlYW0uYzo3ODpzdGF0aWMgaW50IGJwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtNzkte1xcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy04NC1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjg1OlxcdHJldCA9IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihcXHUwMDI2c3RyZWFtLVxcdTAwM2Vsb2csIHN0ciwgbGVuKTtcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTg2LVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTIyMj1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b2lkICphcmdzLFxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0yNDgtXFx0LyogRXhjbHVkZSBOVUxMIGJ5dGUgZHVyaW5nIHB1c2guICovXFxua2VybmVsL2JwZi9zdHJlYW0uYzoyNDk6XFx0cmV0ID0gYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJlYW0sIGRhdGEuYnVmLCByZXQpO1xcbmtlcm5lbC9icGYvc3RyZWFtLmMtMjUwLVxcdGJwZl9icHJpbnRmX2NsZWFudXAoXFx1MDAyNmRhdGEpO1xcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYz0zMTc9aW50IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTMzMC1cXHQvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi9cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjMzMTpcXHRyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXFx1MDAyNnNzLVxcdTAwM2Vsb2csIGJ1Zi1cXHUwMDNlYnVmLCByZXQpO1xcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzMyLVxcdGJwZl9wdXRfYnVmZmVycygpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNTo1NzozOS4yMTYzMDIyODNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ4NDEwNTExNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBTdHJlYW0gQnVnIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGJ1ZyB3aXRoaW4gYGJwZl9zdHJlYW1fcHVzaF9zdHJgLiBJIHNlZSB0aGV5J3ZlIGlkZW50aWZpZWQgYW4gaXNzdWUgd2hlcmUgaWYgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgZmFpbHMsIHRoZSBjYXBhY2l0eSBhY2NvdW50aW5nIGlzbid0IHByb3Blcmx5IGhhbmRsZWQuIFRoZXkncmUgY29ycmVjdGx5IGltcGxlbWVudGluZyBhIHJldmVydCBieSBkZWNyZW1lbnRpbmcgdGhlIHN0cmVhbSBjYXBhY2l0eSBpZiBgX19icGZfc3RyZWFtX3B1c2hfc3RyYCByZXR1cm5zIGFuIGVycm9yLiBUaGlzIGlzIGEgc29saWQsIGZ1bmN0aW9uYWwgZml4IGZvciB0aGUgY29yZSBCUEYgbG9naWMsIGdvb2QuXG5cblNpbmNlIGBicGZfc3RyZWFtX3B1c2hfc3RyYCBpcyBjYWxsZWQgYnkgYGJwZl9zdHJlYW1fdnByaW50a2AsIGFuZCB0aGUgY29uZmlndXJhdGlvbiBpcyBgQlBGX1NZU0NBTExgLCB0aGF0IGdpdmVzIG1lIGEgZ29vZCBlbnRyeSBwb2ludC4gTm93LCBsZXQncyBqdXN0IGNvbmZpcm0gYGJwZl9zdHJlYW1fcHVzaF9zdHJgIGlzIHN0YXRpYy4gQWxyaWdodCwgaXQgaXMuIExvb2tzIGxpa2UgYGJwZl9zdHJlYW1fdnByaW50a2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgaW4gdGhpcyBjb250ZXh0LlxuXG5Ob3csIGxldCBtZSBqdXN0IHF1aWNrbHkgc2NhbiBmb3IgYW55IG90aGVyIGNhbGxlcnMgb2YgYGJwZl9zdHJlYW1fcHVzaF9zdHJgIHRvIGVuc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGFyZWFzIGltcGFjdGVkIGJ5IHRoaXMgY2hhbmdlLiBJdCdzIGFsd2F5cyBnb29kIHByYWN0aWNlIHRvIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGxpa2UgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg5NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNTo1Nzo0NC43MDA0MTEwNjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDQzMjMxMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3N0cmVhbV9wdXNoX3N0clwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdHJlYW0uYz0xOD1zdGF0aWMgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqYnBmX3N0cmVhbV9lbGVtX2FsbG9jKGludCBsZW4pXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTQxLVxcbmtlcm5lbC9icGYvc3RyZWFtLmM6NDI6c3RhdGljIGludCBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGxsaXN0X2hlYWQgKmxvZywgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtNDMte1xcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYz03MT1zdGF0aWMgdm9pZCBicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqZWxlbSlcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtNzctXFxua2VybmVsL2JwZi9zdHJlYW0uYzo3ODpzdGF0aWMgaW50IGJwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtNzkte1xcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy04NC1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjg1OlxcdHJldCA9IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihcXHUwMDI2c3RyZWFtLVxcdTAwM2Vsb2csIHN0ciwgbGVuKTtcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTg2LVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTIyMj1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b2lkICphcmdzLFxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0yNDgtXFx0LyogRXhjbHVkZSBOVUxMIGJ5dGUgZHVyaW5nIHB1c2guICovXFxua2VybmVsL2JwZi9zdHJlYW0uYzoyNDk6XFx0cmV0ID0gYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJlYW0sIGRhdGEuYnVmLCByZXQpO1xcbmtlcm5lbC9icGYvc3RyZWFtLmMtMjUwLVxcdGJwZl9icHJpbnRmX2NsZWFudXAoXFx1MDAyNmRhdGEpO1xcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYz0zMTc9aW50IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTMzMC1cXHQvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi9cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjMzMTpcXHRyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXFx1MDAyNnNzLVxcdTAwM2Vsb2csIGJ1Zi1cXHUwMDNlYnVmLCByZXQpO1xcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzMyLVxcdGJwZl9wdXRfYnVmZmVycygpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNTo1Nzo0Ny4xMDQ3NDI4OTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3ODI3NDQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYGJwZl9zdHJlYW1fcHVzaF9zdHJgKipcblxuUmlnaHQsIHNvIGBicGZfc3RyZWFtX3B1c2hfc3RyYCBpcyBkZWZpbml0ZWx5IGNhbGxlZCBieSBgYnBmX3N0cmVhbV92cHJpbnRrYC4gVGhhdCBtdWNoIEkgcmVjYWxsIGNsZWFybHkuIEJ1dCBoYW5nIG9uLCBpcyAqdGhhdCogaXQ/IENvdWxkIGBicGZfc3RyZWFtX3ByaW50X3N0YWNrYCBwb3RlbnRpYWxseSB1c2UgaXQgYXMgd2VsbD8gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoYXQuIEhtbSwgbG9va2luZyBhdCB0aGUgY29kZSBmb3IgYGJwZl9zdHJlYW1fcHJpbnRfc3RhY2tgLi4uIG5vcGUsIGRvZXNuJ3QgbG9vayBsaWtlIHRoZXJlJ3MgYSBjYWxsIHRvIGBicGZfc3RyZWFtX3B1c2hfc3RyYCBpbiB0aGVyZSBhdCBhbGwuIE9rYXksIHNvIG15IGluaXRpYWwgdGhvdWdodCBob2xkcyDigJMgc2VlbXMgbGlrZSBgYnBmX3N0cmVhbV92cHJpbnRrYCBpcyB0aGUgcHJpbWFyeSwgaWYgbm90IHNvbGUsIHVzZXIgb2YgdGhhdCBmdW5jdGlvbi4gRXhjZWxsZW50LCBjb25maXJtZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMDUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNTo1Nzo1MC4zODMwMjE4MDdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMzM1MjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJlYW1fcHJpbnRfc3RhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zdHJlYW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0cmVhbS5jPTIyMj1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b2lkICphcmdzLFxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0yNTUtLyogRGlyZWN0bHkgdHJpZ2dlciBhIHN0YWNrIGR1bXAgZnJvbSB0aGUgcHJvZ3JhbS4gKi9cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjI1NjpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV9wcmludF9zdGFjayhpbnQgc3RyZWFtX2lkLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXFxua2VybmVsL2JwZi9zdHJlYW0uYy0yNTcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNTo1Nzo1MC40NTUzNjYzNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDAzMjU4MTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEknbSBhYm91dCB0byBkbzpcblxuKipBbmFseXppbmcgYGJwZl9zdHJlYW1fcHJpbnRfc3RhY2tgIENhbGxzKipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjYWxscyBtYWRlIGJ5IGBicGZfc3RyZWFtX3ByaW50X3N0YWNrYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gZGVidWdnaW5nIG9yIHByb2ZpbGluZyBCUEYgcHJvZ3JhbXMsIGVzcGVjaWFsbHkgZ2l2ZW4gaXRzIG5hbWUuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgQlBGIGVjb3N5c3RlbS4gSSBleHBlY3QgdGhpcyB3aWxsIHJlcXVpcmUgZGl2aW5nIGludG8gdGhlIGNvZGUuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIGZ1bmN0aW9uJ3MgaW50ZXJuYWwgbG9naWMsIGFueSByZWxhdGVkIGRhdGEgc3RydWN0dXJlcyBpdCB1dGlsaXplcywgYW5kIGFueSBvdGhlciBCUEYgaGVscGVycyBvciBrZXJuZWwgZnVuY3Rpb25zIGl0IGludGVyZmFjZXMgd2l0aC4gVGhlIGdvYWwgaXMgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QsIHNvIEkgY2FuIGVmZmVjdGl2ZWx5IGRpYWdub3NlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHRyb3VibGVzaG9vdCBhbnkgaXNzdWVzIHRoYXQgYXJpc2Ugd2l0aCB0aGlzIHBhcnRpY3VsYXIgc3RyZWFtLCBhbmQgaG93IHRoZSBwcm9ncmFtIGlzIGdldHRpbmcgc3RhY2sgZGF0YS4gRXNzZW50aWFsbHksIEknbSBnb2luZyB0byBkZWNvbnN0cnVjdCB0aGUgaW1wbGVtZW50YXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQzNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA1OjU3OjUzLjQ1ODYyNzU0OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIyMzM0MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3N0cmVhbV9wcmludF9zdGFja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuYz00OTY0PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyZWFtX3ZwcmludGssIEtGX0lNUExJQ0lUX0FSR1MpXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDk2NTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmVhbV9wcmludF9zdGFjaywgS0ZfSU1QTElDSVRfQVJHUylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTY2LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbCwgS0ZfSU1QTElDSVRfQVJHUylcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmM9MjIyPV9fYnBmX2tmdW5jIGludCBicGZfc3RyZWFtX3ZwcmludGsoaW50IHN0cmVhbV9pZCwgY29uc3QgY2hhciAqZm10X19zdHIsIGNvbnN0IHZvaWQgKmFyZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI1NS0vKiBEaXJlY3RseSB0cmlnZ2VyIGEgc3RhY2sgZHVtcCBmcm9tIHRoZSBwcm9ncmFtLiAqL1xcbmtlcm5lbC9icGYvc3RyZWFtLmM6MjU2Ol9fYnBmX2tmdW5jIGludCBicGZfc3RyZWFtX3ByaW50X3N0YWNrKGludCBzdHJlYW1faWQsIHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eClcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI1Ny17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEwNjg9ZW51bSBzcGVjaWFsX2tmdW5jX3R5cGUge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTM3LVxcdEtGX2JwZl9zdHJlYW1fdnByaW50ayxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExMzg6XFx0S0ZfYnBmX3N0cmVhbV9wcmludF9zdGFjayxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExMzktfTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTIzND1CVEZfSUQoZnVuYywgYnBmX3N0cmVhbV92cHJpbnRrKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTIzNTpCVEZfSUQoZnVuYywgYnBmX3N0cmVhbV9wcmludF9zdGFjaylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyMzYtXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE3MTk9c3RhdGljIGJvb2wgaXNfYnBmX3N0cmVhbV9rZnVuYyh1MzIgYnRmX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzIxLVxcdHJldHVybiBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zdHJlYW1fdnByaW50a10gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE3MjI6XFx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3N0cmVhbV9wcmludF9zdGFja107XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzIzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDU6NTc6NTMuNTQwODczMTE3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTQzNDk0MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgU3RyZWFtIFZ1bG5lcmFiaWxpdHkgRml4KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBicGZfc3RyZWFtX3ZwcmludGtgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgdGhlIG9uZSBjYWxsaW5nIHRoZSBwcm9ibGVtYXRpYyBjb2RlLiBUaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGZ1bmN0aW9uYWwgYnVnIGluIGBicGZfc3RyZWFtX3B1c2hfc3RyYC4gU3BlY2lmaWNhbGx5LCBpZiBgX19icGZfc3RyZWFtX3B1c2hfc3RyYCBmYWlscywgdGhlIGNhcGFjaXR5IGNvbnN1bWVkIGlzbid0IGJlaW5nIHJldmVydGVkLiBUaGF0J3MgYmFkLiBBbmQgdGhpcywgYXMgd2UndmUgZXN0YWJsaXNoZWQsIGlzIGV4cGxvaXRhYmxlIHRocm91Z2ggdGhlIGBicGZfc3RyZWFtX3ZwcmludGtgIEJQRiBrZnVuYy5cblxuU28sIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIG15IHByaW1hcnkgZm9jdXM7IHRoYXQncyB0aGUgbWFpbiBlbmFibGVyIGhlcmUuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2ssIHRob3VnaC4gV2hpbGUgYGJwZl9zdHJlYW1fdnByaW50a2AgaXMgdGhlIG9idmlvdXMgc3ltYm9sIHRvIGJlIGF3YXJlIG9mLCBJIHNob3VsZCB2ZXJpZnkgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyLCBsZXNzLW9idmlvdXMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgSSdtIG1pc3NpbmcgdGhhdCBjb3VsZCBiZSByZWxldmFudCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBvdmVybG9vayBhbnkgcG90ZW50aWFsbHkgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGFzcGVjdHMgb2YgdGhpcyB2dWxuZXJhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjg2LCJPdXRwdXRUb2tlbnMiOjEwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNTo1Nzo1Ny42MzUyMjU0MzVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTI4MjQwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc3RyZWFtX3ZwcmludGtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGZ1bmN0aW9uYWwgYnVnIGluIGBicGZfc3RyZWFtX3B1c2hfc3RyYCB3aGVyZSB0aGUgY29uc3VtZWQgY2FwYWNpdHkgd2FzIG5vdCByZXZlcnRlZCBpZiBgX19icGZfc3RyZWFtX3B1c2hfc3RyYCBmYWlsZWQuIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZl9zdHJlYW1fdnByaW50a2AgQlBGIGtmdW5jLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3N0cmVhbV92cHJpbnRrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBmdW5jdGlvbmFsIGJ1ZyBpbiBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgd2hlcmUgdGhlIGNvbnN1bWVkIGNhcGFjaXR5IHdhcyBub3QgcmV2ZXJ0ZWQgaWYgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgZmFpbGVkLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGZfc3RyZWFtX3ZwcmludGtgIEJQRiBrZnVuYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow97z6l[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-20 05:24:17 +0000 UTC FinishedAt: 2026-07-20 05:57:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "761214e5c0b14aa4e16a6b763c7a4932ce89f589", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "761214e5c0b14aa4e16a6b763c7a4932ce89f589", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "4348e97e-f8a6-4c43-bc52-c1b06e272f70" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_stream_vprintk" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA3LzIwIDA1OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3N0cmVhbV92cHJpbnRrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZnVuY3Rpb25hbCBidWcgaW4gYGJwZl9zdHJlYW1fcHVzaF9zdHJgIHdoZXJlIHRoZSBjb25zdW1lZCBjYXBhY2l0eSB3YXMgbm90IHJldmVydGVkIGlmIGBfX2JwZl9zdHJlYW1fcHVzaF9zdHJgIGZhaWxlZC4gVGhpcyBsb2dpYyBpcyByZWFjaGFibGUgdmlhIHRoZSBgYnBmX3N0cmVhbV92cHJpbnRrYCBCUEYga2Z1bmMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDU6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3OGI4ZGYxYWJkOWU3NmVmNjk1NzE0MDE5NDMwYTdlOGJjMThhMzFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMDU6NTc6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdHJlYW0uYyBiL2tlcm5lbC9icGYvc3RyZWFtLmNcbmluZGV4IGJlOWNlOThlOTQ2OTI1Li40YjhhNzRiOTE2MmUxYyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3RyZWFtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3RyZWFtLmNcbkBAIC03OSw3ICYjNDM7NzksMTQgQEAgc3RhdGljIGludCBicGZfc3RyZWFtX3B1c2hfc3RyKHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxcbiB7XG4gXHRpbnQgcmV0ID0gYnBmX3N0cmVhbV9jb25zdW1lX2NhcGFjaXR5KHN0cmVhbSwgbGVuKTtcbiBcbi1cdHJldHVybiByZXQgPzogX19icGZfc3RyZWFtX3B1c2hfc3RyKFx1MDAyNnN0cmVhbS1cdTAwM2Vsb2csIHN0ciwgbGVuKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFx1MDAyNnN0cmVhbS1cdTAwM2Vsb2csIHN0ciwgbGVuKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0YXRvbWljX3N1YihsZW4sIFx1MDAyNnN0cmVhbS1cdTAwM2VjYXBhY2l0eSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX3N0cmVhbSAqYnBmX3N0cmVhbV9nZXQoZW51bSBicGZfc3RyZWFtX2lkIHN0cmVhbV9pZCwgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA1OjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3N0cmVhbV92cHJpbnRrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZnVuY3Rpb25hbCBidWcgaW4gYGJwZl9zdHJlYW1fcHVzaF9zdHJgIHdoZXJlIHRoZSBjb25zdW1lZCBjYXBhY2l0eSB3YXMgbm90IHJldmVydGVkIGlmIGBfX2JwZl9zdHJlYW1fcHVzaF9zdHJgIGZhaWxlZC4gVGhpcyBsb2dpYyBpcyByZWFjaGFibGUgdmlhIHRoZSBgYnBmX3N0cmVhbV92cHJpbnRrYCBCUEYga2Z1bmMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc4YjhkZjFhYmQ5ZTc2ZWY2OTU3MTQwMTk0MzBhN2U4YmMxOGEzMWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyMCAwNTo1NzoyMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RyZWFtLmMgYi9rZXJuZWwvYnBmL3N0cmVhbS5jCmluZGV4IGJlOWNlOThlOTQ2OTI1Li40YjhhNzRiOTE2MmUxYyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zdHJlYW0uYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0cmVhbS5jCkBAIC03OSw3ICYjNDM7NzksMTQgQEAgc3RhdGljIGludCBicGZfc3RyZWFtX3B1c2hfc3RyKHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIGNvbnN0IGNoYXIgKnN0ciwgaW50IGwKIHsKIAlpbnQgcmV0ID0gYnBmX3N0cmVhbV9jb25zdW1lX2NhcGFjaXR5KHN0cmVhbSwgbGVuKTsKIAotCXJldHVybiByZXQgPzogX19icGZfc3RyZWFtX3B1c2hfc3RyKCZhbXA7c3RyZWFtLSZndDtsb2csIHN0ciwgbGVuKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IF9fYnBmX3N0cmVhbV9wdXNoX3N0cigmYW1wO3N0cmVhbS0mZ3Q7bG9nLCBzdHIsIGxlbik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlhdG9taWNfc3ViKGxlbiwgJmFtcDtzdHJlYW0tJmd0O2NhcGFjaXR5KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHN0cnVjdCBicGZfc3RyZWFtICpicGZfc3RyZWFtX2dldChlbnVtIGJwZl9zdHJlYW1faWQgc3RyZWFtX2lkLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBicGZfc3RyZWFtX3B1c2hfc3RyYCBwYXRjaC4KCioqQW5hbHl6aW5nIHRoZSBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgTW9kaWZpY2F0aW9uKioKCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlJiMzOTt2ZSBnb3QgYSBtb2RpZmljYXRpb24gdG8gYGtlcm5lbC9icGYvc3RyZWFtLmNgLCBzcGVjaWZpY2FsbHkgaW1wYWN0aW5nIHRoZSBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgZnVuY3Rpb24uIE15IHVzdWFsIGFwcHJvYWNoIGlzIHRvIGltbWVkaWF0ZWx5IGp1bXAgdG8gdGhlIHNvdXJjZSBmaWxlLCBga2VybmVsL2JwZi9zdHJlYW0uY2AsIGFuZCBnZXQgYSBob2xpc3RpYyB2aWV3IG9mIGhvdyBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCwgY3J1Y2lhbGx5LCBpdHMgdXNhZ2UgY29udGV4dCB3aXRoaW4gdGhlIHN0cmVhbSBmcmFtZXdvcmsuIFdoYXQgYXJlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucz8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgZG9lcyBpdCBpbnRlcmFjdCB3aXRoPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5IGJhc2VkIG9uIGl0cyBsb2NhdGlvbiBhbmQgYmVoYXZpb3I/IEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgcXVlc3Rpb25zIGFib3V0IHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzLCBtZW1vcnkgbWFuYWdlbWVudCwgb3IgZXZlbiBzdWJ0bGUgY2hhbmdlcyBpbiBzdHJlYW0gYmVoYXZpb3IgdGhhdCB0aGlzIHNpbmdsZSBmdW5jdGlvbiYjMzk7cyBwYXRjaCBtaWdodCBpbnRyb2R1Y2UuIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIGlmIHRoZSBjaGFuZ2UgaGFzIHByb3BlciBlcnJvciBoYW5kbGluZywgY29uc2lkZXJzIGVkZ2UgY2FzZXMsIGFuZCBhbGlnbnMgd2l0aCB0aGUgb3ZlcmFsbCBkZXNpZ24gZ29hbHMgb2YgdGhlIEJQRiBzdHJlYW0gaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3N0cmVhbV9wdXNoX3N0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RyZWFtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdHJlYW0uYz0xOD1zdGF0aWMgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqYnBmX3N0cmVhbV9lbGVtX2FsbG9jKGludCBsZW4pXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy00MS1cbmtlcm5lbC9icGYvc3RyZWFtLmM6NDI6c3RhdGljIGludCBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGxsaXN0X2hlYWQgKmxvZywgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxua2VybmVsL2JwZi9zdHJlYW0uYy00My17XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz03MT1zdGF0aWMgdm9pZCBicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqZWxlbSlcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTc3LVxua2VybmVsL2JwZi9zdHJlYW0uYzo3ODpzdGF0aWMgaW50IGJwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxua2VybmVsL2JwZi9zdHJlYW0uYy03OS17XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy04NC1cbmtlcm5lbC9icGYvc3RyZWFtLmM6ODU6XHRyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXHUwMDI2c3RyZWFtLVx1MDAzZWxvZywgc3RyLCBsZW4pO1xua2VybmVsL2JwZi9zdHJlYW0uYy04Ni1cdGlmIChyZXQpXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz0yMjI9X19icGZfa2Z1bmMgaW50IGJwZl9zdHJlYW1fdnByaW50ayhpbnQgc3RyZWFtX2lkLCBjb25zdCBjaGFyICpmbXRfX3N0ciwgY29uc3Qgdm9pZCAqYXJncyxcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI0OC1cdC8qIEV4Y2x1ZGUgTlVMTCBieXRlIGR1cmluZyBwdXNoLiAqL1xua2VybmVsL2JwZi9zdHJlYW0uYzoyNDk6XHRyZXQgPSBicGZfc3RyZWFtX3B1c2hfc3RyKHN0cmVhbSwgZGF0YS5idWYsIHJldCk7XG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI1MC1cdGJwZl9icHJpbnRmX2NsZWFudXAoXHUwMDI2ZGF0YSk7XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz0zMTc9aW50IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy0zMzAtXHQvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi9cbmtlcm5lbC9icGYvc3RyZWFtLmM6MzMxOlx0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFx1MDAyNnNzLVx1MDAzZWxvZywgYnVmLVx1MDAzZWJ1ZiwgcmV0KTtcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzMyLVx0YnBmX3B1dF9idWZmZXJzKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBicGZfc3RyZWFtIFN1YnN5c3RlbSoqCgpBbHJpZ2h0LCBzbyBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgaXMgY2FsbGVkIGJ5IGBicGZfc3RyZWFtX3ZwcmludGtgLiBUaGF0JiMzOTtzIGEgdmVyeSBzcGVjaWZpYyBjb25uZWN0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gZmlndXJlIG91dCB0aGUgbGFyZ2VyIGNvbnRleHQuIGBicGZfc3RyZWFtX3ZwcmludGtgLi4uIHRoYXQgbmFtZSBzY3JlYW1zICYjMzQ7Zm9ybWF0dGVkIG91dHB1dCYjMzQ7IHJlbGF0ZWQgdG8gdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgc3Vic3lzdGVtLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiB0aGlzIGludm9sdmVzIHRoZSBrZXJuZWwmIzM5O3MgYWJpbGl0eSB0byBwcmludCBpbmZvcm1hdGlvbiBmcm9tIEJQRiBwcm9ncmFtcywgbGlrZWx5IGZvciBkZWJ1Z2dpbmcgb3IgbG9nZ2luZyBwdXJwb3Nlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoZXJlKiBhbmQgKmhvdyogdGhpcyBmb3JtYXR0ZWQgcHJpbnRpbmcgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIEJQRiBlY29zeXN0ZW0uIElzIGl0IGZvciB0cmFjaW5nIGV2ZW50cz8gUGVyZm9ybWFuY2UgbW9uaXRvcmluZz8gRXJyb3IgcmVwb3J0aW5nIHdpdGhpbiBCUEYgcHJvZ3JhbXM/IEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNhbGwgc2l0ZXMgb2YgYGJwZl9zdHJlYW1fdnByaW50a2AgdG8gZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9zdHJlYW1fdnByaW50ayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jPTQ5NjI9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jZ3JvdXBfcmVhZF94YXR0ciwgS0ZfUkNVKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk2My0jZW5kaWZcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5NjQ6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJlYW1fdnByaW50aywgS0ZfSU1QTElDSVRfQVJHUylcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5NjUtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJlYW1fcHJpbnRfc3RhY2ssIEtGX0lNUExJQ0lUX0FSR1MpXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz0yMTY9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtMjIxLSAqL1xua2VybmVsL2JwZi9zdHJlYW0uYzoyMjI6X19icGZfa2Z1bmMgaW50IGJwZl9zdHJlYW1fdnByaW50ayhpbnQgc3RyZWFtX2lkLCBjb25zdCBjaGFyICpmbXRfX3N0ciwgY29uc3Qgdm9pZCAqYXJncyxcbmtlcm5lbC9icGYvc3RyZWFtLmMtMjIzLVx0XHRcdFx0ICAgdTMyIGxlbl9fc3osIHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEwNjg9ZW51bSBzcGVjaWFsX2tmdW5jX3R5cGUge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTEzNi1cdEtGX2JwZl9zZXNzaW9uX2lzX3JldHVybixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTEzNzpcdEtGX2JwZl9zdHJlYW1fdnByaW50ayxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTEzOC1cdEtGX2JwZl9zdHJlYW1fcHJpbnRfc3RhY2ssXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjMyPUJURl9JRF9VTlVTRURcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIzMy0jZW5kaWZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTIzNDpCVEZfSUQoZnVuYywgYnBmX3N0cmVhbV92cHJpbnRrKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjM1LUJURl9JRChmdW5jLCBicGZfc3RyZWFtX3ByaW50X3N0YWNrKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTcxOT1zdGF0aWMgYm9vbCBpc19icGZfc3RyZWFtX2tmdW5jKHUzMiBidGZfaWQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE3MjAte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjExNzIxOlx0cmV0dXJuIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3N0cmVhbV92cHJpbnRrXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzIyLVx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3N0cmVhbV9wcmludF9zdGFja107XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY5NAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgQlBGIFN0cmVhbSBQcmludGluZyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIGBicGZfc3RyZWFtX3ZwcmludGtgLiBUaGF0JiMzOTtzIGEgQlBGIGtmdW5jLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhIGtlcm5lbCBmdW5jdGlvbiBhdmFpbGFibGUgdG8gQlBGIHByb2dyYW1zLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBsZXQmIzM5O3MgZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucy4mIzM0OyBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgcmVxdWlyZWQgaW4gYGtlcm5lbC9icGYvc3RyZWFtLmNgLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGdlbmVyYWwgQlBGIHN1cHBvcnQ7IHRoaXMgaXMgYSBzcGVjaWZpYyBzdHJlYW0gcHJpbnRpbmcgZmVhdHVyZS4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBhbnkgc3BlY2lmaWMgY29tcGlsZS10aW1lIGZsYWdzLCBvciwgb2YgY291cnNlLCBhbnkgbW9kdWxlIGRlcGVuZGVuY2llcyB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyB1c2FnZSBhbmQgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBjb250ZXh0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYXZhaWxhYmxlIHRvIG1lLCBhbmQgd2hhdCB0aGUgbWluaW11bSBidWlsZCByZXF1aXJlbWVudHMgYXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cmVhbVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTE3PW9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gdHJhbXBvbGluZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE5LWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA1OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFN0cmVhbSBQdXNoIEZ1bmN0aW9uKioKCk9rYXksIHNvIHRoZSBpbnZlc3RpZ2F0aW9uIGNlbnRlcnMgYXJvdW5kIGBDT05GSUdfQlBGX1NZU0NBTExgLiBNeSBmb2N1cyBpcyBvbiB0aGUgYGJwZl9zdHJlYW1fcHVzaF9zdHJgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGBicGZfc3RyZWFtX3ZwcmludGtgIGlzIHRoZSBvbmUgY2FsbGluZyBpdC4gVGltZSB0byBjb25maXJtIGlmIGBicGZfc3RyZWFtX3ZwcmludGtgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZS4gUmlnaHQsIGl0JiMzOTtzIGEga2Z1bmMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGZhaXIgZ2FtZSBmb3IgQlBGIHByb2dyYW1zIHRvIGNhbGwuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MsIGJ1dCBkb2VzbiYjMzk7dCB0ZWxsIHRoZSB3aG9sZSBzdG9yeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZywgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGBicGZfc3RyZWFtX3B1c2hfc3RyYD8gSSBzaG91bGQgbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3Mgc29tZXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc3RyZWFtX3B1c2hfc3RyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdHJlYW0uYz0xOD1zdGF0aWMgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqYnBmX3N0cmVhbV9lbGVtX2FsbG9jKGludCBsZW4pXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy00MS1cbmtlcm5lbC9icGYvc3RyZWFtLmM6NDI6c3RhdGljIGludCBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGxsaXN0X2hlYWQgKmxvZywgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxua2VybmVsL2JwZi9zdHJlYW0uYy00My17XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz03MT1zdGF0aWMgdm9pZCBicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqZWxlbSlcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTc3LVxua2VybmVsL2JwZi9zdHJlYW0uYzo3ODpzdGF0aWMgaW50IGJwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxua2VybmVsL2JwZi9zdHJlYW0uYy03OS17XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy04NC1cbmtlcm5lbC9icGYvc3RyZWFtLmM6ODU6XHRyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXHUwMDI2c3RyZWFtLVx1MDAzZWxvZywgc3RyLCBsZW4pO1xua2VybmVsL2JwZi9zdHJlYW0uYy04Ni1cdGlmIChyZXQpXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz0yMjI9X19icGZfa2Z1bmMgaW50IGJwZl9zdHJlYW1fdnByaW50ayhpbnQgc3RyZWFtX2lkLCBjb25zdCBjaGFyICpmbXRfX3N0ciwgY29uc3Qgdm9pZCAqYXJncyxcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI0OC1cdC8qIEV4Y2x1ZGUgTlVMTCBieXRlIGR1cmluZyBwdXNoLiAqL1xua2VybmVsL2JwZi9zdHJlYW0uYzoyNDk6XHRyZXQgPSBicGZfc3RyZWFtX3B1c2hfc3RyKHN0cmVhbSwgZGF0YS5idWYsIHJldCk7XG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI1MC1cdGJwZl9icHJpbnRmX2NsZWFudXAoXHUwMDI2ZGF0YSk7XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz0zMTc9aW50IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy0zMzAtXHQvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi9cbmtlcm5lbC9icGYvc3RyZWFtLmM6MzMxOlx0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFx1MDAyNnNzLVx1MDAzZWxvZywgYnVmLVx1MDAzZWJ1ZiwgcmV0KTtcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzMyLVx0YnBmX3B1dF9idWZmZXJzKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4OTYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgU3RyZWFtIEJ1ZyBGaXgqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgYnVnIHdpdGhpbiBgYnBmX3N0cmVhbV9wdXNoX3N0cmAuIEkgc2VlIHRoZXkmIzM5O3ZlIGlkZW50aWZpZWQgYW4gaXNzdWUgd2hlcmUgaWYgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgZmFpbHMsIHRoZSBjYXBhY2l0eSBhY2NvdW50aW5nIGlzbiYjMzk7dCBwcm9wZXJseSBoYW5kbGVkLiBUaGV5JiMzOTtyZSBjb3JyZWN0bHkgaW1wbGVtZW50aW5nIGEgcmV2ZXJ0IGJ5IGRlY3JlbWVudGluZyB0aGUgc3RyZWFtIGNhcGFjaXR5IGlmIGBfX2JwZl9zdHJlYW1fcHVzaF9zdHJgIHJldHVybnMgYW4gZXJyb3IuIFRoaXMgaXMgYSBzb2xpZCwgZnVuY3Rpb25hbCBmaXggZm9yIHRoZSBjb3JlIEJQRiBsb2dpYywgZ29vZC4KClNpbmNlIGBicGZfc3RyZWFtX3B1c2hfc3RyYCBpcyBjYWxsZWQgYnkgYGJwZl9zdHJlYW1fdnByaW50a2AsIGFuZCB0aGUgY29uZmlndXJhdGlvbiBpcyBgQlBGX1NZU0NBTExgLCB0aGF0IGdpdmVzIG1lIGEgZ29vZCBlbnRyeSBwb2ludC4gTm93LCBsZXQmIzM5O3MganVzdCBjb25maXJtIGBicGZfc3RyZWFtX3B1c2hfc3RyYCBpcyBzdGF0aWMuIEFscmlnaHQsIGl0IGlzLiBMb29rcyBsaWtlIGBicGZfc3RyZWFtX3ZwcmludGtgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGluIHRoaXMgY29udGV4dC4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBzY2FuIGZvciBhbnkgb3RoZXIgY2FsbGVycyBvZiBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGFyZWFzIGltcGFjdGVkIGJ5IHRoaXMgY2hhbmdlLiBJdCYjMzk7cyBhbHdheXMgZ29vZCBwcmFjdGljZSB0byBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBsaWtlIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9zdHJlYW1fcHVzaF9zdHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdHJlYW0uYz0xOD1zdGF0aWMgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqYnBmX3N0cmVhbV9lbGVtX2FsbG9jKGludCBsZW4pXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy00MS1cbmtlcm5lbC9icGYvc3RyZWFtLmM6NDI6c3RhdGljIGludCBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGxsaXN0X2hlYWQgKmxvZywgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxua2VybmVsL2JwZi9zdHJlYW0uYy00My17XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz03MT1zdGF0aWMgdm9pZCBicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqZWxlbSlcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTc3LVxua2VybmVsL2JwZi9zdHJlYW0uYzo3ODpzdGF0aWMgaW50IGJwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxua2VybmVsL2JwZi9zdHJlYW0uYy03OS17XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy04NC1cbmtlcm5lbC9icGYvc3RyZWFtLmM6ODU6XHRyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXHUwMDI2c3RyZWFtLVx1MDAzZWxvZywgc3RyLCBsZW4pO1xua2VybmVsL2JwZi9zdHJlYW0uYy04Ni1cdGlmIChyZXQpXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz0yMjI9X19icGZfa2Z1bmMgaW50IGJwZl9zdHJlYW1fdnByaW50ayhpbnQgc3RyZWFtX2lkLCBjb25zdCBjaGFyICpmbXRfX3N0ciwgY29uc3Qgdm9pZCAqYXJncyxcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI0OC1cdC8qIEV4Y2x1ZGUgTlVMTCBieXRlIGR1cmluZyBwdXNoLiAqL1xua2VybmVsL2JwZi9zdHJlYW0uYzoyNDk6XHRyZXQgPSBicGZfc3RyZWFtX3B1c2hfc3RyKHN0cmVhbSwgZGF0YS5idWYsIHJldCk7XG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI1MC1cdGJwZl9icHJpbnRmX2NsZWFudXAoXHUwMDI2ZGF0YSk7XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz0zMTc9aW50IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy0zMzAtXHQvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi9cbmtlcm5lbC9icGYvc3RyZWFtLmM6MzMxOlx0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFx1MDAyNnNzLVx1MDAzZWxvZywgYnVmLVx1MDAzZWJ1ZiwgcmV0KTtcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzMyLVx0YnBmX3B1dF9idWZmZXJzKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIHRoZSBDYWxsZXJzIG9mIGBicGZfc3RyZWFtX3B1c2hfc3RyYCoqCgpSaWdodCwgc28gYGJwZl9zdHJlYW1fcHVzaF9zdHJgIGlzIGRlZmluaXRlbHkgY2FsbGVkIGJ5IGBicGZfc3RyZWFtX3ZwcmludGtgLiBUaGF0IG11Y2ggSSByZWNhbGwgY2xlYXJseS4gQnV0IGhhbmcgb24sIGlzICp0aGF0KiBpdD8gQ291bGQgYGJwZl9zdHJlYW1fcHJpbnRfc3RhY2tgIHBvdGVudGlhbGx5IHVzZSBpdCBhcyB3ZWxsPyBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhhdC4gSG1tLCBsb29raW5nIGF0IHRoZSBjb2RlIGZvciBgYnBmX3N0cmVhbV9wcmludF9zdGFja2AuLi4gbm9wZSwgZG9lc24mIzM5O3QgbG9vayBsaWtlIHRoZXJlJiMzOTtzIGEgY2FsbCB0byBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgaW4gdGhlcmUgYXQgYWxsLiBPa2F5LCBzbyBteSBpbml0aWFsIHRob3VnaHQgaG9sZHMg4oCTIHNlZW1zIGxpa2UgYGJwZl9zdHJlYW1fdnByaW50a2AgaXMgdGhlIHByaW1hcnksIGlmIG5vdCBzb2xlLCB1c2VyIG9mIHRoYXQgZnVuY3Rpb24uIEV4Y2VsbGVudCwgY29uZmlybWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc3RyZWFtX3ByaW50X3N0YWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdHJlYW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0cmVhbS5jPTIyMj1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b2lkICphcmdzLFxuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtMjU1LS8qIERpcmVjdGx5IHRyaWdnZXIgYSBzdGFjayBkdW1wIGZyb20gdGhlIHByb2dyYW0uICovXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjI1NjpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV9wcmludF9zdGFjayhpbnQgc3RyZWFtX2lkLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI1Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MzcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEkmIzM5O20gYWJvdXQgdG8gZG86CgoqKkFuYWx5emluZyBgYnBmX3N0cmVhbV9wcmludF9zdGFja2AgQ2FsbHMqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgY2FsbHMgbWFkZSBieSBgYnBmX3N0cmVhbV9wcmludF9zdGFja2AuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGludm9sdmVkIGluIGRlYnVnZ2luZyBvciBwcm9maWxpbmcgQlBGIHByb2dyYW1zLCBlc3BlY2lhbGx5IGdpdmVuIGl0cyBuYW1lLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBCUEYgZWNvc3lzdGVtLiBJIGV4cGVjdCB0aGlzIHdpbGwgcmVxdWlyZSBkaXZpbmcgaW50byB0aGUgY29kZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIGZ1bmN0aW9uJiMzOTtzIGludGVybmFsIGxvZ2ljLCBhbnkgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgaXQgdXRpbGl6ZXMsIGFuZCBhbnkgb3RoZXIgQlBGIGhlbHBlcnMgb3Iga2VybmVsIGZ1bmN0aW9ucyBpdCBpbnRlcmZhY2VzIHdpdGguIFRoZSBnb2FsIGlzIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZCwgc28gSSBjYW4gZWZmZWN0aXZlbHkgZGlhZ25vc2UgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgdHJvdWJsZXNob290IGFueSBpc3N1ZXMgdGhhdCBhcmlzZSB3aXRoIHRoaXMgcGFydGljdWxhciBzdHJlYW0sIGFuZCBob3cgdGhlIHByb2dyYW0gaXMgZ2V0dGluZyBzdGFjayBkYXRhLiBFc3NlbnRpYWxseSwgSSYjMzk7bSBnb2luZyB0byBkZWNvbnN0cnVjdCB0aGUgaW1wbGVtZW50YXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3N0cmVhbV9wcmludF9zdGFjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jPTQ5NjQ9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJlYW1fdnByaW50aywgS0ZfSU1QTElDSVRfQVJHUylcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5NjU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJlYW1fcHJpbnRfc3RhY2ssIEtGX0lNUExJQ0lUX0FSR1MpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTY2LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbCwgS0ZfSU1QTElDSVRfQVJHUylcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTIyMj1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b2lkICphcmdzLFxuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtMjU1LS8qIERpcmVjdGx5IHRyaWdnZXIgYSBzdGFjayBkdW1wIGZyb20gdGhlIHByb2dyYW0uICovXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjI1NjpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV9wcmludF9zdGFjayhpbnQgc3RyZWFtX2lkLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI1Ny17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMDY4PWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExMzctXHRLRl9icGZfc3RyZWFtX3ZwcmludGssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExMzg6XHRLRl9icGZfc3RyZWFtX3ByaW50X3N0YWNrLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTM5LX07XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjM0PUJURl9JRChmdW5jLCBicGZfc3RyZWFtX3ZwcmludGspXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyMzU6QlRGX0lEKGZ1bmMsIGJwZl9zdHJlYW1fcHJpbnRfc3RhY2spXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyMzYtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNzE5PXN0YXRpYyBib29sIGlzX2JwZl9zdHJlYW1fa2Z1bmModTMyIGJ0Zl9pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE3MjEtXHRyZXR1cm4gYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc3RyZWFtX3ZwcmludGtdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE3MjI6XHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc3RyZWFtX3ByaW50X3N0YWNrXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTcyMy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyODYKCQkJCQkJCW91dHB1dDogMTA2CgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFN0cmVhbSBWdWxuZXJhYmlsaXR5IEZpeCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBicGZfc3RyZWFtX3ZwcmludGtgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgdGhlIG9uZSBjYWxsaW5nIHRoZSBwcm9ibGVtYXRpYyBjb2RlLiBUaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGZ1bmN0aW9uYWwgYnVnIGluIGBicGZfc3RyZWFtX3B1c2hfc3RyYC4gU3BlY2lmaWNhbGx5LCBpZiBgX19icGZfc3RyZWFtX3B1c2hfc3RyYCBmYWlscywgdGhlIGNhcGFjaXR5IGNvbnN1bWVkIGlzbiYjMzk7dCBiZWluZyByZXZlcnRlZC4gVGhhdCYjMzk7cyBiYWQuIEFuZCB0aGlzLCBhcyB3ZSYjMzk7dmUgZXN0YWJsaXNoZWQsIGlzIGV4cGxvaXRhYmxlIHRocm91Z2ggdGhlIGBicGZfc3RyZWFtX3ZwcmludGtgIEJQRiBrZnVuYy4KClNvLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBteSBwcmltYXJ5IGZvY3VzOyB0aGF0JiMzOTtzIHRoZSBtYWluIGVuYWJsZXIgaGVyZS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2ssIHRob3VnaC4gV2hpbGUgYGJwZl9zdHJlYW1fdnByaW50a2AgaXMgdGhlIG9idmlvdXMgc3ltYm9sIHRvIGJlIGF3YXJlIG9mLCBJIHNob3VsZCB2ZXJpZnkgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciwgbGVzcy1vYnZpb3VzIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIEkmIzM5O20gbWlzc2luZyB0aGF0IGNvdWxkIGJlIHJlbGV2YW50IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBvdmVybG9vayBhbnkgcG90ZW50aWFsbHkgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGFzcGVjdHMgb2YgdGhpcyB2dWxuZXJhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc3RyZWFtX3ZwcmludGsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBmdW5jdGlvbmFsIGJ1ZyBpbiBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgd2hlcmUgdGhlIGNvbnN1bWVkIGNhcGFjaXR5IHdhcyBub3QgcmV2ZXJ0ZWQgaWYgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgZmFpbGVkLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGZfc3RyZWFtX3ZwcmludGtgIEJQRiBrZnVuYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc3RyZWFtX3ZwcmludGsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBmdW5jdGlvbmFsIGJ1ZyBpbiBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgd2hlcmUgdGhlIGNvbnN1bWVkIGNhcGFjaXR5IHdhcyBub3QgcmV2ZXJ0ZWQgaWYgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgZmFpbGVkLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGZfc3RyZWFtX3ZwcmludGtgIEJQRiBrZnVuYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA1OjU3OjI0LjU2ODM4ODQ1MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMTY2MTM4MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3N0cmVhbV92cHJpbnRrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBmdW5jdGlvbmFsIGJ1ZyBpbiBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgd2hlcmUgdGhlIGNvbnN1bWVkIGNhcGFjaXR5IHdhcyBub3QgcmV2ZXJ0ZWQgaWYgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgZmFpbGVkLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGZfc3RyZWFtX3ZwcmludGtgIEJQRiBrZnVuYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDU6NTc6MjQuNTY4Mzk3MTUxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDM5NDUzMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3OGI4ZGYxYWJkOWU3NmVmNjk1NzE0MDE5NDMwYTdlOGJjMThhMzFlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDIwIDA1OjU3OjIzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RyZWFtLmMgYi9rZXJuZWwvYnBmL3N0cmVhbS5jXFxuaW5kZXggYmU5Y2U5OGU5NDY5MjUuLjRiOGE3NGI5MTYyZTFjIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvc3RyZWFtLmNcXG4rKysgYi9rZXJuZWwvYnBmL3N0cmVhbS5jXFxuQEAgLTc5LDcgKzc5LDE0IEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBjb25zdCBjaGFyICpzdHIsIGludCBsXFxuIHtcXG4gXFx0aW50IHJldCA9IGJwZl9zdHJlYW1fY29uc3VtZV9jYXBhY2l0eShzdHJlYW0sIGxlbik7XFxuIFxcbi1cXHRyZXR1cm4gcmV0ID86IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihcXHUwMDI2c3RyZWFtLVxcdTAwM2Vsb2csIHN0ciwgbGVuKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihcXHUwMDI2c3RyZWFtLVxcdTAwM2Vsb2csIHN0ciwgbGVuKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0YXRvbWljX3N1YihsZW4sIFxcdTAwMjZzdHJlYW0tXFx1MDAzZWNhcGFjaXR5KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX3N0cmVhbSAqYnBmX3N0cmVhbV9nZXQoZW51bSBicGZfc3RyZWFtX2lkIHN0cmVhbV9pZCwgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNTo1NzoyNS4xMTMyODczODZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjIxMjI4MzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3N0cmVhbV92cHJpbnRrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBmdW5jdGlvbmFsIGJ1ZyBpbiBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgd2hlcmUgdGhlIGNvbnN1bWVkIGNhcGFjaXR5IHdhcyBub3QgcmV2ZXJ0ZWQgaWYgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgZmFpbGVkLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGZfc3RyZWFtX3ZwcmludGtgIEJQRiBrZnVuYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3OGI4ZGYxYWJkOWU3NmVmNjk1NzE0MDE5NDMwYTdlOGJjMThhMzFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMDU6NTc6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0cmVhbS5jIGIva2VybmVsL2JwZi9zdHJlYW0uY1xuaW5kZXggYmU5Y2U5OGU5NDY5MjUuLjRiOGE3NGI5MTYyZTFjIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zdHJlYW0uY1xuKysrIGIva2VybmVsL2JwZi9zdHJlYW0uY1xuQEAgLTc5LDcgKzc5LDE0IEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBjb25zdCBjaGFyICpzdHIsIGludCBsXG4ge1xuIFx0aW50IHJldCA9IGJwZl9zdHJlYW1fY29uc3VtZV9jYXBhY2l0eShzdHJlYW0sIGxlbik7XG4gXG4tXHRyZXR1cm4gcmV0ID86IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihcdTAwMjZzdHJlYW0tXHUwMDNlbG9nLCBzdHIsIGxlbik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFx1MDAyNnN0cmVhbS1cdTAwM2Vsb2csIHN0ciwgbGVuKTtcbitcdGlmIChyZXQpXG4rXHRcdGF0b21pY19zdWIobGVuLCBcdTAwMjZzdHJlYW0tXHUwMDNlY2FwYWNpdHkpO1xuK1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBicGZfc3RyZWFtICpicGZfc3RyZWFtX2dldChlbnVtIGJwZl9zdHJlYW1faWQgc3RyZWFtX2lkLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNTo1NzoyNS4xMTMyOTAxMjZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzIwNzg3NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgcGF0Y2guXG5cbioqQW5hbHl6aW5nIHRoZSBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgTW9kaWZpY2F0aW9uKipcblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UndmUgZ290IGEgbW9kaWZpY2F0aW9uIHRvIGBrZXJuZWwvYnBmL3N0cmVhbS5jYCwgc3BlY2lmaWNhbGx5IGltcGFjdGluZyB0aGUgYGJwZl9zdHJlYW1fcHVzaF9zdHJgIGZ1bmN0aW9uLiBNeSB1c3VhbCBhcHByb2FjaCBpcyB0byBpbW1lZGlhdGVseSBqdW1wIHRvIHRoZSBzb3VyY2UgZmlsZSwgYGtlcm5lbC9icGYvc3RyZWFtLmNgLCBhbmQgZ2V0IGEgaG9saXN0aWMgdmlldyBvZiBob3cgYGJwZl9zdHJlYW1fcHVzaF9zdHJgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQsIGNydWNpYWxseSwgaXRzIHVzYWdlIGNvbnRleHQgd2l0aGluIHRoZSBzdHJlYW0gZnJhbWV3b3JrLiBXaGF0IGFyZSB0aGUgY2FsbGluZyBmdW5jdGlvbnM/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgaXQgaW50ZXJhY3Qgd2l0aD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBvciBzZWN1cml0eSBiYXNlZCBvbiBpdHMgbG9jYXRpb24gYW5kIGJlaGF2aW9yPyBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgcXVlc3Rpb25zIGFib3V0IHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzLCBtZW1vcnkgbWFuYWdlbWVudCwgb3IgZXZlbiBzdWJ0bGUgY2hhbmdlcyBpbiBzdHJlYW0gYmVoYXZpb3IgdGhhdCB0aGlzIHNpbmdsZSBmdW5jdGlvbidzIHBhdGNoIG1pZ2h0IGludHJvZHVjZS4gSSdsbCBuZWVkIHRvIGFzc2VzcyBpZiB0aGUgY2hhbmdlIGhhcyBwcm9wZXIgZXJyb3IgaGFuZGxpbmcsIGNvbnNpZGVycyBlZGdlIGNhc2VzLCBhbmQgYWxpZ25zIHdpdGggdGhlIG92ZXJhbGwgZGVzaWduIGdvYWxzIG9mIHRoZSBCUEYgc3RyZWFtIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNTo1NzoyOC40MzQwODExNzVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5NjI0OTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJlYW1fcHVzaF9zdHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zdHJlYW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0cmVhbS5jPTE4PXN0YXRpYyBzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICpicGZfc3RyZWFtX2VsZW1fYWxsb2MoaW50IGxlbilcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtNDEtXFxua2VybmVsL2JwZi9zdHJlYW0uYzo0MjpzdGF0aWMgaW50IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJ1Y3QgbGxpc3RfaGVhZCAqbG9nLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4pXFxua2VybmVsL2JwZi9zdHJlYW0uYy00My17XFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTcxPXN0YXRpYyB2b2lkIGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICplbGVtKVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy03Ny1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjc4OnN0YXRpYyBpbnQgYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4pXFxua2VybmVsL2JwZi9zdHJlYW0uYy03OS17XFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTg0LVxcbmtlcm5lbC9icGYvc3RyZWFtLmM6ODU6XFx0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFxcdTAwMjZzdHJlYW0tXFx1MDAzZWxvZywgc3RyLCBsZW4pO1xcbmtlcm5lbC9icGYvc3RyZWFtLmMtODYtXFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmM9MjIyPV9fYnBmX2tmdW5jIGludCBicGZfc3RyZWFtX3ZwcmludGsoaW50IHN0cmVhbV9pZCwgY29uc3QgY2hhciAqZm10X19zdHIsIGNvbnN0IHZvaWQgKmFyZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI0OC1cXHQvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi9cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjI0OTpcXHRyZXQgPSBicGZfc3RyZWFtX3B1c2hfc3RyKHN0cmVhbSwgZGF0YS5idWYsIHJldCk7XFxua2VybmVsL2JwZi9zdHJlYW0uYy0yNTAtXFx0YnBmX2JwcmludGZfY2xlYW51cChcXHUwMDI2ZGF0YSk7XFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTMxNz1pbnQgYnBmX3N0cmVhbV9zdGFnZV9wcmludGsoc3RydWN0IGJwZl9zdHJlYW1fc3RhZ2UgKnNzLCBjb25zdCBjaGFyICpmbXQsIC4uLilcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzMwLVxcdC8qIEV4Y2x1ZGUgTlVMTCBieXRlIGR1cmluZyBwdXNoLiAqL1xcbmtlcm5lbC9icGYvc3RyZWFtLmM6MzMxOlxcdHJldCA9IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihcXHUwMDI2c3MtXFx1MDAzZWxvZywgYnVmLVxcdTAwM2VidWYsIHJldCk7XFxua2VybmVsL2JwZi9zdHJlYW0uYy0zMzItXFx0YnBmX3B1dF9idWZmZXJzKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA1OjU3OjI4Ljg3MzcxNDY2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzNTc3MzExNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGJwZl9zdHJlYW0gU3Vic3lzdGVtKipcblxuQWxyaWdodCwgc28gYGJwZl9zdHJlYW1fcHVzaF9zdHJgIGlzIGNhbGxlZCBieSBgYnBmX3N0cmVhbV92cHJpbnRrYC4gVGhhdCdzIGEgdmVyeSBzcGVjaWZpYyBjb25uZWN0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gZmlndXJlIG91dCB0aGUgbGFyZ2VyIGNvbnRleHQuIGBicGZfc3RyZWFtX3ZwcmludGtgLi4uIHRoYXQgbmFtZSBzY3JlYW1zIFwiZm9ybWF0dGVkIG91dHB1dFwiIHJlbGF0ZWQgdG8gdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgc3Vic3lzdGVtLiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoaXMgaW52b2x2ZXMgdGhlIGtlcm5lbCdzIGFiaWxpdHkgdG8gcHJpbnQgaW5mb3JtYXRpb24gZnJvbSBCUEYgcHJvZ3JhbXMsIGxpa2VseSBmb3IgZGVidWdnaW5nIG9yIGxvZ2dpbmcgcHVycG9zZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aGVyZSogYW5kICpob3cqIHRoaXMgZm9ybWF0dGVkIHByaW50aW5nIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBCUEYgZWNvc3lzdGVtLiBJcyBpdCBmb3IgdHJhY2luZyBldmVudHM/IFBlcmZvcm1hbmNlIG1vbml0b3Jpbmc/IEVycm9yIHJlcG9ydGluZyB3aXRoaW4gQlBGIHByb2dyYW1zPyBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjYWxsIHNpdGVzIG9mIGBicGZfc3RyZWFtX3ZwcmludGtgIHRvIGdldCB0aGUgd2hvbGUgcGljdHVyZS4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBkb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzg0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDU6NTc6MzIuNDA5NDkxMTI4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMzE4OTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJlYW1fdnByaW50a1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuYz00OTYyPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfY2dyb3VwX3JlYWRfeGF0dHIsIEtGX1JDVSlcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTYzLSNlbmRpZlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5NjQ6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJlYW1fdnByaW50aywgS0ZfSU1QTElDSVRfQVJHUylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTY1LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyZWFtX3ByaW50X3N0YWNrLCBLRl9JTVBMSUNJVF9BUkdTKVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYz0yMTY9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0yMjEtICovXFxua2VybmVsL2JwZi9zdHJlYW0uYzoyMjI6X19icGZfa2Z1bmMgaW50IGJwZl9zdHJlYW1fdnByaW50ayhpbnQgc3RyZWFtX2lkLCBjb25zdCBjaGFyICpmbXRfX3N0ciwgY29uc3Qgdm9pZCAqYXJncyxcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTIyMy1cXHRcXHRcXHRcXHQgICB1MzIgbGVuX19zeiwgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMDY4PWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTEzNi1cXHRLRl9icGZfc2Vzc2lvbl9pc19yZXR1cm4sXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTM3OlxcdEtGX2JwZl9zdHJlYW1fdnByaW50ayxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExMzgtXFx0S0ZfYnBmX3N0cmVhbV9wcmludF9zdGFjayxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTIzMj1CVEZfSURfVU5VU0VEXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjMzLSNlbmRpZlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTIzNDpCVEZfSUQoZnVuYywgYnBmX3N0cmVhbV92cHJpbnRrKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIzNS1CVEZfSUQoZnVuYywgYnBmX3N0cmVhbV9wcmludF9zdGFjaylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTcxOT1zdGF0aWMgYm9vbCBpc19icGZfc3RyZWFtX2tmdW5jKHUzMiBidGZfaWQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzIwLXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE3MjE6XFx0cmV0dXJuIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3N0cmVhbV92cHJpbnRrXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTcyMi1cXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc3RyZWFtX3ByaW50X3N0YWNrXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDU6NTc6MzIuNDgxODE2NzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjYwNDI5MzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBTdHJlYW0gUHJpbnRpbmcgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBicGZfc3RyZWFtX3ZwcmludGtgLiBUaGF0J3MgYSBCUEYga2Z1bmMsIHdoaWNoIG1lYW5zIGl0J3MgYSBrZXJuZWwgZnVuY3Rpb24gYXZhaWxhYmxlIHRvIEJQRiBwcm9ncmFtcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgbGV0J3MgZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucy5cIiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyByZXF1aXJlZCBpbiBga2VybmVsL2JwZi9zdHJlYW0uY2AuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBnZW5lcmFsIEJQRiBzdXBwb3J0OyB0aGlzIGlzIGEgc3BlY2lmaWMgc3RyZWFtIHByaW50aW5nIGZlYXR1cmUuIEknbSBnb2luZyB0byB3YW50IHRvIGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBhbnkgc3BlY2lmaWMgY29tcGlsZS10aW1lIGZsYWdzLCBvciwgb2YgY291cnNlLCBhbnkgbW9kdWxlIGRlcGVuZGVuY2llcyB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyB1c2FnZSBhbmQgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBjb250ZXh0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYXZhaWxhYmxlIHRvIG1lLCBhbmQgd2hhdCB0aGUgbWluaW11bSBidWlsZCByZXF1aXJlbWVudHMgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjk0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDU6NTc6MzUuNzQyMjUwNDAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMzY4NDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cmVhbVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTE3PW9iai0kKENPTkZJR19CUEZfSklUKSArPSB0cmFtcG9saW5lLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmLm8gbWVtYWxsb2MubyBycXNwaW5sb2NrLm8gc3RyZWFtLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE5LWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA1OjU3OjM1LjgxMjYzMDg0NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzAzODE2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgU3RyZWFtIFB1c2ggRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGUgaW52ZXN0aWdhdGlvbiBjZW50ZXJzIGFyb3VuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gTXkgZm9jdXMgaXMgb24gdGhlIGBicGZfc3RyZWFtX3B1c2hfc3RyYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBgYnBmX3N0cmVhbV92cHJpbnRrYCBpcyB0aGUgb25lIGNhbGxpbmcgaXQuIFRpbWUgdG8gY29uZmlybSBpZiBgYnBmX3N0cmVhbV92cHJpbnRrYCBpcyBhY3R1YWxseSByZWFjaGFibGUuIFJpZ2h0LCBpdCdzIGEga2Z1bmMsIHdoaWNoIG1lYW5zIGl0J3MgZmFpciBnYW1lIGZvciBCUEYgcHJvZ3JhbXMgdG8gY2FsbC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncywgYnV0IGRvZXNuJ3QgdGVsbCB0aGUgd2hvbGUgc3RvcnkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZywgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGBicGZfc3RyZWFtX3B1c2hfc3RyYD8gSSBzaG91bGQgbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBzb21ldGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNTo1NzozOS4xNDMwMTY4MTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMjc2NzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJlYW1fcHVzaF9zdHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdHJlYW0uYz0xOD1zdGF0aWMgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqYnBmX3N0cmVhbV9lbGVtX2FsbG9jKGludCBsZW4pXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTQxLVxcbmtlcm5lbC9icGYvc3RyZWFtLmM6NDI6c3RhdGljIGludCBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGxsaXN0X2hlYWQgKmxvZywgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtNDMte1xcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYz03MT1zdGF0aWMgdm9pZCBicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqZWxlbSlcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtNzctXFxua2VybmVsL2JwZi9zdHJlYW0uYzo3ODpzdGF0aWMgaW50IGJwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtNzkte1xcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy04NC1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjg1OlxcdHJldCA9IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihcXHUwMDI2c3RyZWFtLVxcdTAwM2Vsb2csIHN0ciwgbGVuKTtcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTg2LVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTIyMj1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b2lkICphcmdzLFxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0yNDgtXFx0LyogRXhjbHVkZSBOVUxMIGJ5dGUgZHVyaW5nIHB1c2guICovXFxua2VybmVsL2JwZi9zdHJlYW0uYzoyNDk6XFx0cmV0ID0gYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJlYW0sIGRhdGEuYnVmLCByZXQpO1xcbmtlcm5lbC9icGYvc3RyZWFtLmMtMjUwLVxcdGJwZl9icHJpbnRmX2NsZWFudXAoXFx1MDAyNmRhdGEpO1xcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYz0zMTc9aW50IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTMzMC1cXHQvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi9cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjMzMTpcXHRyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXFx1MDAyNnNzLVxcdTAwM2Vsb2csIGJ1Zi1cXHUwMDNlYnVmLCByZXQpO1xcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzMyLVxcdGJwZl9wdXRfYnVmZmVycygpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNTo1NzozOS4yMTYzMDIyODNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ4NDEwNTExNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBTdHJlYW0gQnVnIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGJ1ZyB3aXRoaW4gYGJwZl9zdHJlYW1fcHVzaF9zdHJgLiBJIHNlZSB0aGV5J3ZlIGlkZW50aWZpZWQgYW4gaXNzdWUgd2hlcmUgaWYgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgZmFpbHMsIHRoZSBjYXBhY2l0eSBhY2NvdW50aW5nIGlzbid0IHByb3Blcmx5IGhhbmRsZWQuIFRoZXkncmUgY29ycmVjdGx5IGltcGxlbWVudGluZyBhIHJldmVydCBieSBkZWNyZW1lbnRpbmcgdGhlIHN0cmVhbSBjYXBhY2l0eSBpZiBgX19icGZfc3RyZWFtX3B1c2hfc3RyYCByZXR1cm5zIGFuIGVycm9yLiBUaGlzIGlzIGEgc29saWQsIGZ1bmN0aW9uYWwgZml4IGZvciB0aGUgY29yZSBCUEYgbG9naWMsIGdvb2QuXG5cblNpbmNlIGBicGZfc3RyZWFtX3B1c2hfc3RyYCBpcyBjYWxsZWQgYnkgYGJwZl9zdHJlYW1fdnByaW50a2AsIGFuZCB0aGUgY29uZmlndXJhdGlvbiBpcyBgQlBGX1NZU0NBTExgLCB0aGF0IGdpdmVzIG1lIGEgZ29vZCBlbnRyeSBwb2ludC4gTm93LCBsZXQncyBqdXN0IGNvbmZpcm0gYGJwZl9zdHJlYW1fcHVzaF9zdHJgIGlzIHN0YXRpYy4gQWxyaWdodCwgaXQgaXMuIExvb2tzIGxpa2UgYGJwZl9zdHJlYW1fdnByaW50a2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgaW4gdGhpcyBjb250ZXh0LlxuXG5Ob3csIGxldCBtZSBqdXN0IHF1aWNrbHkgc2NhbiBmb3IgYW55IG90aGVyIGNhbGxlcnMgb2YgYGJwZl9zdHJlYW1fcHVzaF9zdHJgIHRvIGVuc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGFyZWFzIGltcGFjdGVkIGJ5IHRoaXMgY2hhbmdlLiBJdCdzIGFsd2F5cyBnb29kIHByYWN0aWNlIHRvIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGxpa2UgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg5NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNTo1Nzo0NC43MDA0MTEwNjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDQzMjMxMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3N0cmVhbV9wdXNoX3N0clwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdHJlYW0uYz0xOD1zdGF0aWMgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqYnBmX3N0cmVhbV9lbGVtX2FsbG9jKGludCBsZW4pXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTQxLVxcbmtlcm5lbC9icGYvc3RyZWFtLmM6NDI6c3RhdGljIGludCBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGxsaXN0X2hlYWQgKmxvZywgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtNDMte1xcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYz03MT1zdGF0aWMgdm9pZCBicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqZWxlbSlcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtNzctXFxua2VybmVsL2JwZi9zdHJlYW0uYzo3ODpzdGF0aWMgaW50IGJwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtNzkte1xcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy04NC1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjg1OlxcdHJldCA9IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihcXHUwMDI2c3RyZWFtLVxcdTAwM2Vsb2csIHN0ciwgbGVuKTtcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTg2LVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTIyMj1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b2lkICphcmdzLFxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0yNDgtXFx0LyogRXhjbHVkZSBOVUxMIGJ5dGUgZHVyaW5nIHB1c2guICovXFxua2VybmVsL2JwZi9zdHJlYW0uYzoyNDk6XFx0cmV0ID0gYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJlYW0sIGRhdGEuYnVmLCByZXQpO1xcbmtlcm5lbC9icGYvc3RyZWFtLmMtMjUwLVxcdGJwZl9icHJpbnRmX2NsZWFudXAoXFx1MDAyNmRhdGEpO1xcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYz0zMTc9aW50IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTMzMC1cXHQvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi9cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjMzMTpcXHRyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXFx1MDAyNnNzLVxcdTAwM2Vsb2csIGJ1Zi1cXHUwMDNlYnVmLCByZXQpO1xcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzMyLVxcdGJwZl9wdXRfYnVmZmVycygpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNTo1Nzo0Ny4xMDQ3NDI4OTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3ODI3NDQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYGJwZl9zdHJlYW1fcHVzaF9zdHJgKipcblxuUmlnaHQsIHNvIGBicGZfc3RyZWFtX3B1c2hfc3RyYCBpcyBkZWZpbml0ZWx5IGNhbGxlZCBieSBgYnBmX3N0cmVhbV92cHJpbnRrYC4gVGhhdCBtdWNoIEkgcmVjYWxsIGNsZWFybHkuIEJ1dCBoYW5nIG9uLCBpcyAqdGhhdCogaXQ/IENvdWxkIGBicGZfc3RyZWFtX3ByaW50X3N0YWNrYCBwb3RlbnRpYWxseSB1c2UgaXQgYXMgd2VsbD8gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoYXQuIEhtbSwgbG9va2luZyBhdCB0aGUgY29kZSBmb3IgYGJwZl9zdHJlYW1fcHJpbnRfc3RhY2tgLi4uIG5vcGUsIGRvZXNuJ3QgbG9vayBsaWtlIHRoZXJlJ3MgYSBjYWxsIHRvIGBicGZfc3RyZWFtX3B1c2hfc3RyYCBpbiB0aGVyZSBhdCBhbGwuIE9rYXksIHNvIG15IGluaXRpYWwgdGhvdWdodCBob2xkcyDigJMgc2VlbXMgbGlrZSBgYnBmX3N0cmVhbV92cHJpbnRrYCBpcyB0aGUgcHJpbWFyeSwgaWYgbm90IHNvbGUsIHVzZXIgb2YgdGhhdCBmdW5jdGlvbi4gRXhjZWxsZW50LCBjb25maXJtZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMDUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNTo1Nzo1MC4zODMwMjE4MDdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMzM1MjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJlYW1fcHJpbnRfc3RhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zdHJlYW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0cmVhbS5jPTIyMj1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b2lkICphcmdzLFxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0yNTUtLyogRGlyZWN0bHkgdHJpZ2dlciBhIHN0YWNrIGR1bXAgZnJvbSB0aGUgcHJvZ3JhbS4gKi9cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjI1NjpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV9wcmludF9zdGFjayhpbnQgc3RyZWFtX2lkLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXFxua2VybmVsL2JwZi9zdHJlYW0uYy0yNTcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNTo1Nzo1MC40NTUzNjYzNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDAzMjU4MTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEknbSBhYm91dCB0byBkbzpcblxuKipBbmFseXppbmcgYGJwZl9zdHJlYW1fcHJpbnRfc3RhY2tgIENhbGxzKipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjYWxscyBtYWRlIGJ5IGBicGZfc3RyZWFtX3ByaW50X3N0YWNrYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gZGVidWdnaW5nIG9yIHByb2ZpbGluZyBCUEYgcHJvZ3JhbXMsIGVzcGVjaWFsbHkgZ2l2ZW4gaXRzIG5hbWUuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgQlBGIGVjb3N5c3RlbS4gSSBleHBlY3QgdGhpcyB3aWxsIHJlcXVpcmUgZGl2aW5nIGludG8gdGhlIGNvZGUuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIGZ1bmN0aW9uJ3MgaW50ZXJuYWwgbG9naWMsIGFueSByZWxhdGVkIGRhdGEgc3RydWN0dXJlcyBpdCB1dGlsaXplcywgYW5kIGFueSBvdGhlciBCUEYgaGVscGVycyBvciBrZXJuZWwgZnVuY3Rpb25zIGl0IGludGVyZmFjZXMgd2l0aC4gVGhlIGdvYWwgaXMgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QsIHNvIEkgY2FuIGVmZmVjdGl2ZWx5IGRpYWdub3NlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHRyb3VibGVzaG9vdCBhbnkgaXNzdWVzIHRoYXQgYXJpc2Ugd2l0aCB0aGlzIHBhcnRpY3VsYXIgc3RyZWFtLCBhbmQgaG93IHRoZSBwcm9ncmFtIGlzIGdldHRpbmcgc3RhY2sgZGF0YS4gRXNzZW50aWFsbHksIEknbSBnb2luZyB0byBkZWNvbnN0cnVjdCB0aGUgaW1wbGVtZW50YXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQzNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA1OjU3OjUzLjQ1ODYyNzU0OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIyMzM0MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3N0cmVhbV9wcmludF9zdGFja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuYz00OTY0PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyZWFtX3ZwcmludGssIEtGX0lNUExJQ0lUX0FSR1MpXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDk2NTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmVhbV9wcmludF9zdGFjaywgS0ZfSU1QTElDSVRfQVJHUylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTY2LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbCwgS0ZfSU1QTElDSVRfQVJHUylcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmM9MjIyPV9fYnBmX2tmdW5jIGludCBicGZfc3RyZWFtX3ZwcmludGsoaW50IHN0cmVhbV9pZCwgY29uc3QgY2hhciAqZm10X19zdHIsIGNvbnN0IHZvaWQgKmFyZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI1NS0vKiBEaXJlY3RseSB0cmlnZ2VyIGEgc3RhY2sgZHVtcCBmcm9tIHRoZSBwcm9ncmFtLiAqL1xcbmtlcm5lbC9icGYvc3RyZWFtLmM6MjU2Ol9fYnBmX2tmdW5jIGludCBicGZfc3RyZWFtX3ByaW50X3N0YWNrKGludCBzdHJlYW1faWQsIHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eClcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI1Ny17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEwNjg9ZW51bSBzcGVjaWFsX2tmdW5jX3R5cGUge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTM3LVxcdEtGX2JwZl9zdHJlYW1fdnByaW50ayxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExMzg6XFx0S0ZfYnBmX3N0cmVhbV9wcmludF9zdGFjayxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExMzktfTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTIzND1CVEZfSUQoZnVuYywgYnBmX3N0cmVhbV92cHJpbnRrKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTIzNTpCVEZfSUQoZnVuYywgYnBmX3N0cmVhbV9wcmludF9zdGFjaylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyMzYtXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE3MTk9c3RhdGljIGJvb2wgaXNfYnBmX3N0cmVhbV9rZnVuYyh1MzIgYnRmX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzIxLVxcdHJldHVybiBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zdHJlYW1fdnByaW50a10gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE3MjI6XFx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3N0cmVhbV9wcmludF9zdGFja107XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzIzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDU6NTc6NTMuNTQwODczMTE3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTQzNDk0MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgU3RyZWFtIFZ1bG5lcmFiaWxpdHkgRml4KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBicGZfc3RyZWFtX3ZwcmludGtgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgdGhlIG9uZSBjYWxsaW5nIHRoZSBwcm9ibGVtYXRpYyBjb2RlLiBUaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGZ1bmN0aW9uYWwgYnVnIGluIGBicGZfc3RyZWFtX3B1c2hfc3RyYC4gU3BlY2lmaWNhbGx5LCBpZiBgX19icGZfc3RyZWFtX3B1c2hfc3RyYCBmYWlscywgdGhlIGNhcGFjaXR5IGNvbnN1bWVkIGlzbid0IGJlaW5nIHJldmVydGVkLiBUaGF0J3MgYmFkLiBBbmQgdGhpcywgYXMgd2UndmUgZXN0YWJsaXNoZWQsIGlzIGV4cGxvaXRhYmxlIHRocm91Z2ggdGhlIGBicGZfc3RyZWFtX3ZwcmludGtgIEJQRiBrZnVuYy5cblxuU28sIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIG15IHByaW1hcnkgZm9jdXM7IHRoYXQncyB0aGUgbWFpbiBlbmFibGVyIGhlcmUuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2ssIHRob3VnaC4gV2hpbGUgYGJwZl9zdHJlYW1fdnByaW50a2AgaXMgdGhlIG9idmlvdXMgc3ltYm9sIHRvIGJlIGF3YXJlIG9mLCBJIHNob3VsZCB2ZXJpZnkgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyLCBsZXNzLW9idmlvdXMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgSSdtIG1pc3NpbmcgdGhhdCBjb3VsZCBiZSByZWxldmFudCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBvdmVybG9vayBhbnkgcG90ZW50aWFsbHkgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGFzcGVjdHMgb2YgdGhpcyB2dWxuZXJhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjg2LCJPdXRwdXRUb2tlbnMiOjEwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNTo1Nzo1Ny42MzUyMjU0MzVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTI4MjQwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc3RyZWFtX3ZwcmludGtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGZ1bmN0aW9uYWwgYnVnIGluIGBicGZfc3RyZWFtX3B1c2hfc3RyYCB3aGVyZSB0aGUgY29uc3VtZWQgY2FwYWNpdHkgd2FzIG5vdCByZXZlcnRlZCBpZiBgX19icGZfc3RyZWFtX3B1c2hfc3RyYCBmYWlsZWQuIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZl9zdHJlYW1fdnByaW50a2AgQlBGIGtmdW5jLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3N0cmVhbV92cHJpbnRrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBmdW5jdGlvbmFsIGJ1ZyBpbiBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgd2hlcmUgdGhlIGNvbnN1bWVkIGNhcGFjaXR5IHdhcyBub3QgcmV2ZXJ0ZWQgaWYgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgZmFpbGVkLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGZfc3RyZWFtX3ZwcmludGtgIEJQRiBrZnVuYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow97z6l[1] Phase: Succeeded StartedAt: 2026-07-20 05:58:09 +0000 UTC FinishedAt: 2026-07-20 05:58:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow97z6l[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-20 05:58:09 +0000 UTC FinishedAt: 2026-07-20 05:58:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow97z6l[2] Phase: Succeeded StartedAt: 2026-07-20 05:58:09 +0000 UTC FinishedAt: 2026-07-20 10:10:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-20 05:58:09 +0000 UTC FinishedAt: 2026-07-20 10:10:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-20 05:58:09 +0000 UTC FinishedAt: 2026-07-20 05:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-20 05:58:09 +0000 UTC FinishedAt: 2026-07-20 05:58:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow97z6l/series-workflow97z6l-convert-artifact-340766640/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-20 05:58:19 +0000 UTC FinishedAt: 2026-07-20 06:28:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-20 05:58:19 +0000 UTC FinishedAt: 2026-07-20 06:28:48 +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:*95e150da-3f3b-48f5-bcac-72d17e23f688,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-workflow97z6l/series-workflow97z6l-convert-artifact-340766640/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": "e2470fd0-ec84-4e9a-ba57-c2f2dad53517", "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-workflow97z6l/series-workflow97z6l-build-action-2765069494/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-20 05:58:19 +0000 UTC FinishedAt: 2026-07-20 06:28:38 +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:*95e150da-3f3b-48f5-bcac-72d17e23f688,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-workflow97z6l/series-workflow97z6l-convert-artifact-340766640/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": "e2470fd0-ec84-4e9a-ba57-c2f2dad53517", "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-workflow97z6l/series-workflow97z6l-build-action-2765069494/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-20 06:28:48 +0000 UTC FinishedAt: 2026-07-20 06:28:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-20 06:28:48 +0000 UTC FinishedAt: 2026-07-20 06:28:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-20 06:28:48 +0000 UTC FinishedAt: 2026-07-20 06:28:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-20 06:28:48 +0000 UTC FinishedAt: 2026-07-20 06:28:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow97z6l/series-workflow97z6l-convert-artifact-415170967/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-20 06:28:58 +0000 UTC FinishedAt: 2026-07-20 06:31:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-20 06:28:58 +0000 UTC FinishedAt: 2026-07-20 06:31:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e2470fd0-ec84-4e9a-ba57-c2f2dad53517,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-workflow97z6l/series-workflow97z6l-build-action-2765069494/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-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-20 06:31:13 +0000 UTC FinishedAt: 2026-07-20 06:31:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-20 06:31:13 +0000 UTC FinishedAt: 2026-07-20 06:31:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-20 06:31:13 +0000 UTC FinishedAt: 2026-07-20 07:07:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-20 06:31:13 +0000 UTC FinishedAt: 2026-07-20 07:07:43 +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:*95e150da-3f3b-48f5-bcac-72d17e23f688,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-workflow97z6l/series-workflow97z6l-convert-artifact-415170967/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": "1d58673c-d450-4688-a7ae-f2d3d68cd80f", "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-workflow97z6l/series-workflow97z6l-build-action-1755985883/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-20 06:31:13 +0000 UTC FinishedAt: 2026-07-20 07:07:33 +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:*95e150da-3f3b-48f5-bcac-72d17e23f688,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-workflow97z6l/series-workflow97z6l-convert-artifact-415170967/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": "1d58673c-d450-4688-a7ae-f2d3d68cd80f", "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-workflow97z6l/series-workflow97z6l-build-action-1755985883/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-20 07:07:43 +0000 UTC FinishedAt: 2026-07-20 07:07:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-20 07:07:43 +0000 UTC FinishedAt: 2026-07-20 07:07:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-20 07:07:43 +0000 UTC FinishedAt: 2026-07-20 07:09:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-20 07:07:43 +0000 UTC FinishedAt: 2026-07-20 07:09:26 +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:*1d58673c-d450-4688-a7ae-f2d3d68cd80f,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-workflow97z6l/series-workflow97z6l-build-action-1755985883/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-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-20 07:09:36 +0000 UTC FinishedAt: 2026-07-20 10:10:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-20 07:09:36 +0000 UTC FinishedAt: 2026-07-20 10:10:58 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"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:*e2470fd0-ec84-4e9a-ba57-c2f2dad53517,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1d58673c-d450-4688-a7ae-f2d3d68cd80f,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-workflow97z6l/series-workflow97z6l-build-action-2765069494/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-workflow97z6l/series-workflow97z6l-build-action-1755985883/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-20 07:09:36 +0000 UTC FinishedAt: 2026-07-20 07:09:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-20 07:09:36 +0000 UTC FinishedAt: 2026-07-20 07:09:41 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"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-workflow97z6l/series-workflow97z6l-convert-artifact-2792194896/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-20 07:09:36 +0000 UTC FinishedAt: 2026-07-20 07:09:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-20 07:09:36 +0000 UTC FinishedAt: 2026-07-20 07:09:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-20 07:09:36 +0000 UTC FinishedAt: 2026-07-20 07:09:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-20 07:09:46 +0000 UTC FinishedAt: 2026-07-20 10:10:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow97z6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_stream_vprintk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4348e97e-f8a6-4c43-bc52-c1b06e272f70","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-20 07:09:46 +0000 UTC FinishedAt: 2026-07-20 10:10:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e2470fd0-ec84-4e9a-ba57-c2f2dad53517,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1d58673c-d450-4688-a7ae-f2d3d68cd80f,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-workflow97z6l/series-workflow97z6l-build-action-2765069494/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-workflow97z6l/series-workflow97z6l-build-action-1755985883/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-workflow97z6l/series-workflow97z6l-convert-artifact-2792194896/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,}