Name: series-workflowmww58 Phase: Succeeded StartedAt: 2026-08-05 03:54:44 +0000 UTC FinishedAt: 2026-08-05 08:09:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmww58[0] Phase: Succeeded StartedAt: 2026-08-05 03:54:44 +0000 UTC FinishedAt: 2026-08-05 03:56:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmww58[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 03:54:44 +0000 UTC FinishedAt: 2026-08-05 03:56:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e5fd3f514e27db1f05fbd72ba615d74941e23c51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e5fd3f514e27db1f05fbd72ba615d74941e23c51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "BPF_SYSCALL" ], "series_id": "6a49a1c8-3231-4357-9a49-da25c822b5a2" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "cgroup_bpf_replace", "link_update" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA1IDAzOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZ3JvdXBfYnBmX3JlcGxhY2UmIzM0OywKICAgICYjMzQ7bGlua191cGRhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNvbXBhdGliaWxpdHkgY2hlY2sgZm9yIGNncm91cCBzdG9yYWdlIHdoZW4gcmVwbGFjaW5nIGEgQlBGIHByb2dyYW0gYXR0YWNoZWQgdG8gYSBjZ3JvdXAgbGluay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gdGhlIEJQRl9MSU5LX1VQREFURSBzeXNjYWxsIHBhdGguIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBoYW5kbGVzIHZhcmlvdXMgQlBGIHByb2dyYW0gY29uZmlndXJhdGlvbnMgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAzOjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTIxZmIxM2EzNDdhMjk0MDkwYWRkNzhmZmU5MzEwMTY1YTY4ZjQzZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMDM6NTY6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbmluZGV4IDQzNTVjY2I3OGE5YzYuLjVjYzliMmQ5MmZkNTggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5AQCAtMTAxOCw2ICYjNDM7MTAxOCwyMCBAQCBzdGF0aWMgdm9pZCByZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUoc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cpXG4mIzQzO3tcbiYjNDM7XHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKHN0eXBlKSB7XG4mIzQzO1x0XHRpZiAob2xkX3Byb2ctXHUwMDNlYXV4LVx1MDAzZWNncm91cF9zdG9yYWdlW3N0eXBlXSAhPVxuJiM0MztcdFx0ICAgIG5ld19wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0pXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsmIzM5O3MgcHJvZ3JhbSBhbmQgcHJvcGFnYXRlIHRoZSBjaGFuZ2VcbiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHNcbkBAIC0xMDU2LDYgJiM0MzsxMDcwLDkgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFx0aWYgKCFmb3VuZClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4mIzQzO1x0aWYgKCFjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUobGluay1cdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdGNncnAtXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0gJiM0Mzs9IDE7XG4gXHRvbGRfcHJvZyA9IHhjaGcoXHUwMDI2bGluay1cdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKTtcbiBcdHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coY2dycCwgYXR5cGUsIHBsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMzo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nncm91cF9icGZfcmVwbGFjZSYjMzQ7LAogICAgJiMzNDtsaW5rX3VwZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY29tcGF0aWJpbGl0eSBjaGVjayBmb3IgY2dyb3VwIHN0b3JhZ2Ugd2hlbiByZXBsYWNpbmcgYSBCUEYgcHJvZ3JhbSBhdHRhY2hlZCB0byBhIGNncm91cCBsaW5rLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiB0aGUgQlBGX0xJTktfVVBEQVRFIHN5c2NhbGwgcGF0aC4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGhhbmRsZXMgdmFyaW91cyBCUEYgcHJvZ3JhbSBjb25maWd1cmF0aW9ucyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMjFmYjEzYTM0N2EyOTQwOTBhZGQ3OGZmZTkzMTAxNjVhNjhmNDNlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgNSAwMzo1NjowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jCmluZGV4IDQzNTVjY2I3OGE5YzYuLjVjYzliMmQ5MmZkNTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY2dyb3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZ3JvdXAuYwpAQCAtMTAxOCw2ICYjNDM7MTAxOCwyMCBAQCBzdGF0aWMgdm9pZCByZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAJfQogfQogCiYjNDM7c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csCiYjNDM7CQkJCQkgICBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nKQomIzQzO3sKJiM0MzsJZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfY2dyb3VwX3N0b3JhZ2VfdHlwZShzdHlwZSkgewomIzQzOwkJaWYgKG9sZF9wcm9nLSZndDthdXgtJmd0O2Nncm91cF9zdG9yYWdlW3N0eXBlXSAhPQomIzQzOwkJICAgIG5ld19wcm9nLSZndDthdXgtJmd0O2Nncm91cF9zdG9yYWdlW3N0eXBlXSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBfX2Nncm91cF9icGZfcmVwbGFjZSgpIC0gUmVwbGFjZSBsaW5rJiMzOTtzIHByb2dyYW0gYW5kIHByb3BhZ2F0ZSB0aGUgY2hhbmdlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHMKQEAgLTEwNTYsNiAmIzQzOzEwNzAsOSBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAJaWYgKCFmb3VuZCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKJiM0MzsJaWYgKCFjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUobGluay0mZ3Q7bGluay5wcm9nLCBuZXdfcHJvZykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAljZ3JwLSZndDticGYucmV2aXNpb25zW2F0eXBlXSAmIzQzOz0gMTsKIAlvbGRfcHJvZyA9IHhjaGcoJmFtcDtsaW5rLSZndDtsaW5rLnByb2csIG5ld19wcm9nKTsKIAlyZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKGNncnAsIGF0eXBlLCBwbCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIFBhdGNoIGZvciBDZ3JvdXAgQ29tcGF0aWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBga2VybmVsL2JwZi9jZ3JvdXAuY2AuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFkZGluZyBhIGNvbXBhdGliaWxpdHkgY2hlY2sgd2l0aGluIHRoZSBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGNhbGxpbmcgdGhpcyBuZXcgZnVuY3Rpb24sIGBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGVgLCByaWdodCBiZWZvcmUgdGhlIHJlcGxhY2VtZW50IGhhcHBlbnMuIFRoZSBsb2dpYyBpcyBzdHJhaWdodGZvcndhcmQ6IGl0JiMzOTtzIGNvbXBhcmluZyB0aGUgYGNncm91cF9zdG9yYWdlYCBlbnRyaWVzIGZvciB0aGUgb2xkIGFuZCBuZXcgQlBGIHByb2dyYW1zIChgb2xkX3Byb2dgIGFuZCBgbmV3X3Byb2dgLCByZXNwZWN0aXZlbHkpIGF0IGEgc3BlY2lmaWMgYHN0eXBlYC4gSWYgdGhvc2Ugc3RvcmFnZXMgYXJlbiYjMzk7dCBjb21wYXRpYmxlLCBpdCB0aHJvd3MgYSBgLUVJTlZBTGAgZXJyb3IuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoYXQgc2VlbXMgc2Vuc2libGUuLi4gd2UgZG9uJiMzOTt0IHdhbnQgdG8gYnJlYWsgdGhpbmdzIGJ5IHJlcGxhY2luZyBhIEJQRiBwcm9ncmFtIHdpdGggb25lIHRoYXQgZXhwZWN0cyBhIGRpZmZlcmVudCBjZ3JvdXAgc3RvcmFnZSBzZXR1cC4mIzM0OwoKTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gZ28gZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKmNvbnRleHQqIG9mIGBfX2Nncm91cF9icGZfcmVwbGFjZWAuIFdoYXQmIzM5O3MgaGFwcGVuaW5nICphcm91bmQqIHRoaXMgY2hlY2s/IFdoYXQgYXJlIHRoZSBzY2VuYXJpb3Mgd2hlcmUgYSBCUEYgcHJvZ3JhbSBpcyBiZWluZyByZXBsYWNlZCB3aXRoaW4gYSBjZ3JvdXA/IEkmIzM5O3ZlIGdvdCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoaXMgY29tcGF0aWJpbGl0eSBjaGVjay4gSXMgaXQgdG9vIHJlc3RyaWN0aXZlPyBEb2VzIGl0IGNhdGNoIGFsbCB0aGUgaW1wb3J0YW50IGNhc2VzPyBBcmUgdGhlcmUgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnM/IEkmIzM5O2xsIHByb2JhYmx5IGJlIGRpdmluZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBiaWdnZXIgcGljdHVyZSBiZWZvcmUgSSBnaXZlIGl0IG15IGZpbmFsIHN0YW1wIG9mIGFwcHJvdmFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fY2dyb3VwX2JwZl9yZXBsYWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTEwMjE9c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM1LS8qKlxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDM2OiAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsmIzM5O3MgcHJvZ3JhbSBhbmQgcHJvcGFnYXRlIHRoZSBjaGFuZ2Vcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNy0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHNcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNDQtICovXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwNDU6c3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ2LVx0XHRcdFx0c3RydWN0IGJwZl9jZ3JvdXBfbGluayAqbGluayxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEwODM9c3RhdGljIGludCBjZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGJwZl9saW5rICpsaW5rLCBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMC1cdH1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTEwMTpcdHJldCA9IF9fY2dyb3VwX2JwZl9yZXBsYWNlKGNnX2xpbmstXHUwMDNlY2dyb3VwLCBjZ19saW5rLCBuZXdfcHJvZyk7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTExMDItb3V0X3VubG9jazpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDY2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gYGNncm91cF9icGZfcmVwbGFjZWAqKgoKQWxyaWdodCwgc28gYGNncm91cF9icGZfcmVwbGFjZWAgaXMgY2xlYXJseSB0aGUgZW50cnkgcG9pbnQsIHVsdGltYXRlbHkgY2FsbGluZyBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLiBNeSBmb2N1cyByaWdodCBub3cgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIHJlcGxhY2VtZW50IG9wZXJhdGlvbi4gVGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoZSB1c2FnZXMgb2YgdGhhdCBmaXJzdCBmdW5jdGlvbiwgYGNncm91cF9icGZfcmVwbGFjZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHRoaW5nIGlzIGFjdHVhbGx5IGludm9rZWQuIElzIGl0IGNhbGxlZCBkaXJlY3RseSwgb3IgaXMgaXQgYXNzaWduZWQgdG8gc29tZSBjYWxsYmFjaz8gSSBuZWVkIHRvIHNlZSB0aGUgZGlmZmVyZW50IHNjZW5hcmlvcyB3aGVyZSB0aGUgQlBGIHByb2dyYW0gZm9yIGEgY2dyb3VwIGlzIHVwZGF0ZWQgb3IgY2hhbmdlZC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcmVwbGFjZW1lbnQgcHJvY2VzcyBpdHNlbGYuIFNvLCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGlmZmVyZW50IHdheXMgYGNncm91cF9icGZfcmVwbGFjZWAgaXMgY2FsbGVkIG9yIHdoYXQgaXQgaXMgYXNzaWduZWQgdG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwX2JwZl9yZXBsYWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTEwMjE9c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM1LS8qKlxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDM2OiAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsmIzM5O3MgcHJvZ3JhbSBhbmQgcHJvcGFnYXRlIHRoZSBjaGFuZ2Vcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNy0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHNcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNDQtICovXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwNDU6c3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ2LVx0XHRcdFx0c3RydWN0IGJwZl9jZ3JvdXBfbGluayAqbGluayxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwODItXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwODM6c3RhdGljIGludCBjZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGJwZl9saW5rICpsaW5rLCBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDg0LVx0XHRcdCAgICAgIHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cpXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTAwLVx0fVxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTAxOlx0cmV0ID0gX19jZ3JvdXBfYnBmX3JlcGxhY2UoY2dfbGluay1cdTAwM2VjZ3JvdXAsIGNnX2xpbmssIG5ld19wcm9nKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMi1vdXRfdW5sb2NrOlxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTUxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfY2dyb3VwX2xpbmtfbG9wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1MTktXHQuZGV0YWNoID0gYnBmX2Nncm91cF9saW5rX2RldGFjaCxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTUyMDpcdC51cGRhdGVfcHJvZyA9IGNncm91cF9icGZfcmVwbGFjZSxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTUyMS1cdC5zaG93X2ZkaW5mbyA9IGJwZl9jZ3JvdXBfbGlua19zaG93X2ZkaW5mbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODU2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJQRiBDZ3JvdXAgTGluayBVcGRhdGU6IEEgRnV6emluZyBUYXJnZXQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IEJQRiBjZ3JvdXAgbGlua3MgYXJlIHVwZGF0ZWQuIFRoZSBgY2dyb3VwX2JwZl9yZXBsYWNlYCBmdW5jdGlvbiBpcyBub3cgYmVpbmcgYXNzaWduZWQgdG8gdGhlIGAudXBkYXRlX3Byb2dgIGZpZWxkIHdpdGhpbiBgYnBmX2Nncm91cF9saW5rX2xvcHNgLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgYSBjbG9zZXIgbG9vaywgYSByZWFsIGZ1enppbmcgdGFyZ2V0IGluIG15IG9waW5pb24uCgpNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGFuZCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLiBIbW0sIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBpdCYjMzk7cyBzdGlsbCBiZWluZyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIg4oCTIHNvbWV0aGluZyBpcyBkZWZpbml0ZWx5IGhhcHBlbmluZyB0aGVyZS4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIGhvdyBgYnBmX2Nncm91cF9saW5rX2xvcHNgIGlzIGFjdHVhbGx5IHVzZWQuIEFoLCB5ZXMsIGl0JiMzOTtzIHRoZSBvcGVyYXRpb25zIHN0cnVjdHVyZSBmb3IgY2dyb3VwIEJQRiBsaW5rcywgY29uZmlybWluZyB0aGlzIGlzIHRoZSBjb3JyZWN0IGFyZWEuIFNvLCB0aGF0IG1lYW5zIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcyB3aG9sZSBwcm9jZXNzIHNob3VsZCBiZSBzb21ld2hlcmUgYXJvdW5kIGBicGZfbGlua191cGRhdGVgIG9yIHNvbWV0aGluZyBjb21wYXJhYmxlLCBwcm9iYWJseSBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBHb3QgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXBkYXRlX3Byb2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz01OTgxPXN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAyMS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMjI6XHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNldXBkYXRlX3Byb2cpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDIzOlx0XHRyZXQgPSBsaW5rLVx1MDAzZW9wcy1cdTAwM2V1cGRhdGVfcHJvZyhsaW5rLCBuZXdfcHJvZywgb2xkX3Byb2cpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAyNC1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDM4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipBbmFseXppbmcgdGhlIGBsaW5rX3VwZGF0ZWAgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIFRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBzZWN0aW9uIGlzIGNsZWFybHkgdGhlIGBsaW5rX3VwZGF0ZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgbW92ZSBpcyB0byBkZXRlcm1pbmUgaXRzIHNjb3BlLiBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIHN0YXRpYy4gS25vd2luZyBpdHMgbGlua2FnZSDigJMgd2hldGhlciBpdCYjMzk7cyBjb25maW5lZCB0byB0aGUgY3VycmVudCB0cmFuc2xhdGlvbiB1bml0IG9yIHZpc2libGUgZ2xvYmFsbHkg4oCTIHByb2ZvdW5kbHkgaW1wYWN0cyBob3cgSSYjMzk7bGwgYXBwcm9hY2ggdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGludGVybmFsIHV0aWxpdHksIG9yIHNvbWV0aGluZyB0aGF0JiMzOTtzIGludGVuZGVkIGZvciBicm9hZGVyIHVzZT8gVGhhdCYjMzk7cyB0aGUgZmlyc3QgcXVlc3Rpb24gSSBuZWVkIGFuc3dlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaW5rX3VwZGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTU4NDQ9c3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk0OS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5NTA6c3RhdGljIGludCBsaW5rX3VwZGF0ZV9tYXAoc3RydWN0IGJwZl9saW5rICpsaW5rLCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTEte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTQtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTU1Olx0bmV3X21hcCA9IGJwZl9tYXBfZ2V0KGF0dHItXHUwMDNlbGlua191cGRhdGUubmV3X21hcF9mZCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTU2LVx0aWYgKElTX0VSUihuZXdfbWFwKSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTU4LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk1OTpcdGlmIChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLmZsYWdzIFx1MDAyNiBCUEZfRl9SRVBMQUNFKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTYwOlx0XHRvbGRfbWFwID0gYnBmX21hcF9nZXQoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5vbGRfbWFwX2ZkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NjEtXHRcdGlmIChJU19FUlIob2xkX21hcCkpIHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTY0LVx0XHR9XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTY1Olx0fSBlbHNlIGlmIChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm9sZF9tYXBfZmQpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NjYtXHRcdHJldCA9IC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk3OC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5Nzk6I2RlZmluZSBCUEZfTElOS19VUERBVEVfTEFTVF9GSUVMRCBsaW5rX3VwZGF0ZS5vbGRfcHJvZ19mZFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk4MC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5ODE6c3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5ODIte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTAtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTkxOlx0ZmxhZ3MgPSBhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLmZsYWdzO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk5Mi1cdGlmIChmbGFncyBcdTAwMjYgfkJQRl9GX1JFUExBQ0UpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk5NC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5OTU6XHRsaW5rID0gYnBmX2xpbmtfZ2V0X2Zyb21fZmQoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5saW5rX2ZkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTYtXHRpZiAoSVNfRVJSKGxpbmspKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTktXHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNldXBkYXRlX21hcCkge1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAwMDpcdFx0cmV0ID0gbGlua191cGRhdGVfbWFwKGxpbmssIGF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAwMS1cdFx0Z290byBvdXRfcHV0X2xpbms7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAwMy1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMDQ6XHRuZXdfcHJvZyA9IGJwZl9wcm9nX2dldChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm5ld19wcm9nX2ZkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMDUtXHRpZiAoSVNfRVJSKG5ld19wcm9nKSkge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMTAtXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1JFUExBQ0UpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMTE6XHRcdG9sZF9wcm9nID0gYnBmX3Byb2dfZ2V0KGF0dHItXHUwMDNlbGlua191cGRhdGUub2xkX3Byb2dfZmQpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAxMi1cdFx0aWYgKElTX0VSUihvbGRfcHJvZykpIHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDE2LVx0XHR9XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDE3Olx0fSBlbHNlIGlmIChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDE4LVx0XHRyZXQgPSAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzNTQ9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0OTUtXHRjYXNlIEJQRl9MSU5LX1VQREFURTpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0OTY6XHRcdGVyciA9IGxpbmtfdXBkYXRlKFx1MDAyNmF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ5Ny1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NDgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBTeW1ib2wgVXNhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgX19zeXNfYnBmYCBjYWxsIHdpdGggYEJQRl9MSU5LX1VQREFURWAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGVzZSBzeW1ib2xzOiBgbGlua191cGRhdGVgLCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLCBhbmQgYGNncm91cF9icGZfcmVwbGFjZWAuIEhtbSwgd2FpdCBhIG1pbnV0ZSwgYGxpbmtfdXBkYXRlYCBpcyBzdGF0aWMuIFRoYXQmIzM5O3MgYSBzeXNjYWxsIGVudHJ5LiAgU28gaXMgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYC4gQW5kIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLiBOb3csIGFyZSBhbnkgb2YgdGhlbSAqbm90KiBzdGF0aWM/IExldCBtZSBkb3VibGUtY2hlY2suLi4gWWVzLCBgY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBpbmRlZWQgc3RhdGljLiBTbyBpcyBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLiBEYW1uLiBgbGlua191cGRhdGVgIGlzIHN0YXRpYyB0b28uIE9rYXksIGxldCBtZSBmaW5kIHNvbWV0aGluZyBub24tc3RhdGljLi4uIGBicGZfbGlua191cGRhdGVgPyBObywgdGhhdOKAmXMganVzdCBhIHBvaW50ZXIgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgZXNzZW50aWFsbHkgcG9pbnRpbmcgdG8gYGxpbmtfdXBkYXRlYC4KCkFscmlnaHQsIGxldCYjMzk7cyBjaXJjbGUgYmFjay4gSSB0aGluayBJIGhhdmUgdHdvIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCB3aWxsIHdvcms6IGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGFuZCBgbGlua191cGRhdGVgLiBUaGVuIHRoZSBpbnN0cnVjdGlvbnMgcG9wIHVwLiAmIzM0O1ByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyYjMzQ7LiBSaWdodC4gV2VsbCwgYGxpbmtfdXBkYXRlYCBpcyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBwcmV0dHkgc3Vic3RhbnRpYWw7IHRoZSBjb21waWxlciBpcyBwcm9iYWJseSAqbm90KiBpbmxpbmluZyB0aGF0LiBgY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBzdGF0aWMsIGJ1dCBiZWNhdXNlIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgdGhlIGNvbXBpbGVyICpjYW4mIzM5O3QqIGlubGluZSBpdCwgc28gdGhhdCYjMzk7cyBnb29kISBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIHN0YXRpYywgYW5kIHRoYXQgY291bGQgYmUgaW5saW5lZC4gT2ssIGxldCBtZSBkb3VibGUgY2hlY2sgdGhhdCBgX19zeXNfYnBmYCBpcyBub3Qgc3RhdGljLiBJdCBpc24mIzM5O3QsIGJ1dCB0aGF0IHRoaW5nIGlzIGEgaHVnZSBtdWx0aXBsZXhlci4KClNvLCBJJiMzOTtsbCBnbyB3aXRoIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGFuZCBgbGlua191cGRhdGVgLiBJIHRoaW5rIHRoYXQmIzM5O3MgdGhlIGJlc3Qgb3B0aW9uIGhlcmUuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhlIGNvbmZpZ3MgYXJlIHJpZ2h0LiBgQ09ORklHX0NHUk9VUF9CUEZgIGlzIGRlZmluaXRlbHkgbmVlZGVkLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBpbiBga2VybmVsL2JwZi9NYWtlZmlsZWAgYW5kIGBrZXJuZWwvYnBmL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MzU9ZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzY6b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICYjNDM7PSBjZ3JvdXAub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zNy1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzcxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBCUEYgd2l0aCBDR3JvdXBzKioKCkFscmlnaHQsIHRoZSBpbml0aWFsIGNsdWUgaXMgY2xlYXI6IEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgQ09ORklHX0NHUk9VUF9CUEZgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBOb3csIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYSBicm9hZGVyIGFzc2Vzc21lbnQuIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIGxhbmRzY2FwZS4gSSBjYW4mIzM5O3QganVzdCBzdG9wIGF0IHRoZSBvYnZpb3VzLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMsIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMsIGFuZCBicm9hZGVyIGltcGxpY2F0aW9ucyBmb3IgaG93IEkmIzM5O2xsIGRlc2lnbiBhbmQgaW1wbGVtZW50IHRoaXMgQlBGLWJhc2VkIHN5c3RlbSB3aXRoIENHcm91cHMuIFdoYXQgb3RoZXIgY29uZmlncyB3aWxsIGJlY29tZSBuZWNlc3NhcnksIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gY2hvaWNlcyBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cz8gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbmVlZCB0byBjaGVjayBmb3IgdGhpbmdzIGxpa2U6IGFyZSB0aGVyZSBhbnkgc2VjdXJpdHktcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IG5lZWQgYWRqdXN0bWVudCwgb3IgcGVyaGFwcyBzb21lIG5ldHdvcmsgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudD8gVGhpcyBpbml0aWFsIGNvbmZpZ3VyYXRpb24gY2hlY2sgaXMganVzdCBhIHN0YXJ0aW5nIHBvaW50LCBpdCBpcyBpbXBlcmF0aXZlIHRvIGlkZW50aWZ5IHRoZSBmdWxsIHNldCBvZiBkZXBlbmRlbmNpZXMuIFRoaXMgaXMganVzdCB0aGUgZmlyc3Qgc3RlcCBpbiBhIHByb3BlciBkZWVwLWRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3BhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDR1JPVVBfQlBGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMzQxPWNvbmZpZyBDR1JPVVBfUEVSRlxuLS1cbmluaXQvS2NvbmZpZy0xMzUxLVxuaW5pdC9LY29uZmlnOjEzNTI6Y29uZmlnIENHUk9VUF9CUEZcbmluaXQvS2NvbmZpZy0xMzUzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEzMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGBDR1JPVVBfQlBGYCBEZXBlbmRlbmNpZXMgaW4gYGluaXQvS2NvbmZpZ2AqKgoKT2theSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtaWdodCBiZSBjb250aW5nZW50IG9uIGBDR1JPVVBfQlBGYC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBhIGZlYXR1cmUgYXMgc2lnbmlmaWNhbnQgYXMgQlBGIHN1cHBvcnQgZm9yIGNncm91cHMuIGBpbml0L0tjb25maWdgIGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIFRoaXMgZmlsZSBvZnRlbiBkZWZpbmVzIHRoZSBjb3JlIG9wdGlvbnMsIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzLiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSBzY2FuIGl0LCBsb29raW5nIGZvciBhbnkgYGRlcGVuZHMgb25gIGNsYXVzZXMgdGhhdCBpbmNsdWRlIGBDR1JPVVBfQlBGYCBvciBhbnkgcmVmZXJlbmNlcyB0aGF0IG1pZ2h0IGluZGlyZWN0bHkgcmVsYXRlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGluZ3MgbGlrZSBuZXR3b3JrLCBzZWN1cml0eSwgb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBmZWF0dXJlcyB0aGF0IG1pZ2h0IGxldmVyYWdlIGNncm91cCBCUEYuIFRoaXMgYW5hbHlzaXMgaXMgY3JpdGljYWwgdG8gYXZvaWQgYW55IHVuZXhwZWN0ZWQgYnVpbGQgZXJyb3JzIG9yIHJ1bnRpbWUgaW5jb21wYXRpYmlsaXRpZXMgbGF0ZXIgb24uIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgc3lzdGVtIGlzIGhpZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENHUk9VUF9CUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEzNDE9Y29uZmlnIENHUk9VUF9QRVJGXG4tLVxuaW5pdC9LY29uZmlnLTEzNTEtXG5pbml0L0tjb25maWc6MTM1Mjpjb25maWcgQ0dST1VQX0JQRlxuaW5pdC9LY29uZmlnLTEzNTMtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDgwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlJiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHVudGFuZ2xpbmcgdGhpcyBjb25maWd1cmF0aW9uIHB1enpsZT8gR2l2ZW4gdGhlIGNvbnRleHQsIEkgc3VzcGVjdCB3ZSYjMzk7cmUgbG9va2luZyBhdCBzb21ldGhpbmcgY29yZSB0byB0aGUgaW5pdGlhbCBzZXR1cCwgbWF5YmUgcmVsYXRlZCB0byBkcml2ZXJzLCBvciBib290IHByb2Nlc3MgZmxhZ3MuIFRoZSBsaWtlbHkgbG9jYXRpb24gaXMgZ29pbmcgdG8gYmUgd2l0aGluIHRoZSBgaW5pdC9gIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IHRoZSBgS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbSwgdGhlIHBsYWNlIHdoZXJlIGFsbCB0aGUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkLiBUaGUgbGluZSBudW1iZXJzIGFyZSwgYnkgZGVmaW5pdGlvbiwgZmx1aWQgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbiwgc28gSSYjMzk7bSBhaW1pbmcgZm9yIHJvdWdobHkgbGluZSAxMzUyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHBhcnRpY3VsYXIgc2VjdGlvbiB0byBiZSBhYmxlIHRvIGZvbGxvdyB0aGUgbG9naWMgYW5kIGhvdyB0aGUgdmFyaWFibGVzIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGludGVyLXJlbGF0ZWQuIEkgbmVlZCB0byBiZSBhYmxlIHRvIGlkZW50aWZ5IHRoZSBpbXBvcnRhbnQgcGFyYW1ldGVycyBhbmQgZmlndXJlIG91dCBob3cgdGhleSBpbnRlcmFjdC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIHVuZWFydGggZnJvbSB0aGF0IHNwZWNpZmljIHNlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzUwOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEzNTE6XHRcbjEzNTI6XHRjb25maWcgQ0dST1VQX0JQRlxuMTM1MzpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcJiMzNDtcbjEzNTQ6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbjEzNTU6XHRcdHNlbGVjdCBTT0NLX0NHUk9VUF9EQVRBXG4xMzU2Olx0XHRoZWxwXG4xMzU3Olx0XHQgIEFsbG93IGF0dGFjaGluZyBlQlBGIHByb2dyYW1zIHRvIGEgY2dyb3VwIHVzaW5nIHRoZSBicGYoMilcbjEzNTg6XHRcdCAgc3lzY2FsbCBjb21tYW5kIEJQRl9QUk9HX0FUVEFDSC5cbjEzNTk6XHRcbjEzNjA6XHRcdCAgSW4gd2hpY2ggY29udGV4dCB0aGVzZSBwcm9ncmFtcyBhcmUgYWNjZXNzZWQgZGVwZW5kcyBvbiB0aGUgdHlwZVxuMTM2MTpcdFx0ICBvZiBhdHRhY2htZW50LiBGb3IgaW5zdGFuY2UsIHByb2dyYW1zIHRoYXQgYXJlIGF0dGFjaGVkIHVzaW5nXG4xMzYyOlx0XHQgIEJQRl9DR1JPVVBfSU5FVF9JTkdSRVNTIHdpbGwgYmUgZXhlY3V0ZWQgb24gdGhlIGluZ3Jlc3MgcGF0aCBvZlxuMTM2MzpcdFx0ICBpbmV0IHNvY2tldHMuXG4xMzY0Olx0XG4xMzY1Olx0Y29uZmlnIENHUk9VUF9NSVNDXG4xMzY2Olx0XHRib29sIFwmIzM0O01pc2MgcmVzb3VyY2UgY29udHJvbGxlclwmIzM0O1xuMTM2NzpcdFx0ZGVmYXVsdCBuXG4xMzY4Olx0XHRoZWxwXG4xMzY5Olx0XHQgIFByb3ZpZGVzIGEgY29udHJvbGxlciBmb3IgbWlzY2VsbGFuZW91cyByZXNvdXJjZXMgb24gYSBob3N0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQyCgkJCQkJCQlvdXRwdXQ6IDEzNQoJCQkJCQkJdGhvdWdodHM6IDQ5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIENncm91cCBMaW5rIFJlcGxhY2VtZW50IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNoYW5nZSBpbiBob3cgd2UgaGFuZGxlIEJQRiBwcm9ncmFtIHJlcGxhY2VtZW50IGluIGNncm91cCBsaW5rcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBgQ0dST1VQX0JQRmAgKmRlZmluaXRlbHkqIGRlcGVuZHMgb24gYEJQRl9TWVNDQUxMYCwgc28gd2UgbmVlZCB0byBlbnN1cmUgYm90aCBhcmUgaW5jbHVkZWQgaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0JiMzOTtzIGEgbm8tYnJhaW5lci4KCk5vdywgSSYjMzk7dmUgZ290IHRvIGNvbmZpcm0gd2hlcmUgdGhlIG5ldyBsb2dpYyBpcyBhY3R1YWxseSAqdXNlZCouIEkgcmVtZW1iZXIgc2VlaW5nIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGFuZCwgeWVzLCBhIHF1aWNrIGNoZWNrIGluIGBicGZfY2dyb3VwX2xpbmtfbG9wc2Agc2hvd3MgdGhhdCBpdCAqaXMqIGluZGVlZCBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIuIEdvb2QuCgpMZXQmIzM5O3MgZGlzc2VjdCB0aGUgZnVuY3Rpb25hbGl0eS4gVGhlIHBhdGNoIGFkZHMgYGNncm91cF9icGZfc3RvcmFnZXNfY29tcGF0aWJsZWAsIHdoaWNoIGNoZWNrcyBmb3IgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHRoZSBvbGQgYW5kIG5ldyBwcm9ncmFtcyYjMzk7IGBjZ3JvdXBfc3RvcmFnZWAgc3RydWN0dXJlcy4gSWYgdGhleSYjMzk7cmUgKm5vdCogY29tcGF0aWJsZSwgaXQgcmV0dXJucyBgLUVJTlZBTGAuIENsYXNzaWMuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgYWx0ZXJpbmcgdGhlIEJQRiBjZ3JvdXAgbGluayByZXBsYWNlbWVudCBwcm9jZWR1cmUuIFRoaXMgcGFydCBvZiB0aGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHRocm91Z2ggdGhlIGBicGYoKWAgc3lzY2FsbCwgc3BlY2lmaWNhbGx5IHRoZSBgQlBGX0xJTktfVVBEQVRFYCBjb21tYW5kLiBUaGF0JiMzOTtzIG91ciBhdHRhY2sgdmVjdG9yLgoKRm9yIGZ1enppbmcgcHVycG9zZXMsIHRoZSBtb3N0IHJlbGV2YW50IHN5bWJvbHMgd2lsbCBiZSBgY2dyb3VwX2JwZl9yZXBsYWNlYCBhbmQgYGxpbmtfdXBkYXRlYCwgd2hpY2ggaXMgbG9jYXRlZCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBBbHRob3VnaCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgYGNncm91cF9icGZfcmVwbGFjZWAgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldC4gV2UgZG9uJiMzOTt0IHdhbnQgdG8gZ2V0IHRvbyBnZW5lcmFsIHdpdGggdGhlIGZvY3VzLgoKU28sIHRoZSByZWFzb25pbmcgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBjaGFuZ2VzIGhvdyB3ZSByZXBsYWNlIEJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXAgbGlua3MuIEl0IGludHJvZHVjZXMgYSBuZXcgY29tcGF0aWJpbGl0eSBjaGVjaywgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdGhyb3VnaCBgQlBGX0xJTktfVVBEQVRFYC4gV2UgbmVlZCB0byBmdXp6IGl0IGV4dGVuc2l2ZWx5IHRvIGVuc3VyZSBpdCBoYW5kbGVzIGFsbCBraW5kcyBvZiB2YWxpZCBhbmQgaW52YWxpZCBwcm9ncmFtIGNvbmZpZ3VyYXRpb25zIGdyYWNlZnVsbHkuCgpJJiMzOTttIGNvbWZvcnRhYmxlIHdpdGggdGhlIHN5bWJvbCBzZWxlY3Rpb24uIE9rYXksIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nncm91cF9icGZfcmVwbGFjZSYjMzQ7LAogICAgJiMzNDtsaW5rX3VwZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY29tcGF0aWJpbGl0eSBjaGVjayBmb3IgY2dyb3VwIHN0b3JhZ2Ugd2hlbiByZXBsYWNpbmcgYSBCUEYgcHJvZ3JhbSBhdHRhY2hlZCB0byBhIGNncm91cCBsaW5rLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiB0aGUgQlBGX0xJTktfVVBEQVRFIHN5c2NhbGwgcGF0aC4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGhhbmRsZXMgdmFyaW91cyBCUEYgcHJvZ3JhbSBjb25maWd1cmF0aW9ucyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZ3JvdXBfYnBmX3JlcGxhY2UmIzM0OywKICAgICYjMzQ7bGlua191cGRhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNvbXBhdGliaWxpdHkgY2hlY2sgZm9yIGNncm91cCBzdG9yYWdlIHdoZW4gcmVwbGFjaW5nIGEgQlBGIHByb2dyYW0gYXR0YWNoZWQgdG8gYSBjZ3JvdXAgbGluay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gdGhlIEJQRl9MSU5LX1VQREFURSBzeXNjYWxsIHBhdGguIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBoYW5kbGVzIHZhcmlvdXMgQlBGIHByb2dyYW0gY29uZmlndXJhdGlvbnMgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDM6NTY6MDIuOTA3ODYwMzc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA1NTc3OTc4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZ3JvdXBfYnBmX3JlcGxhY2VcIixcbiAgICBcImxpbmtfdXBkYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNvbXBhdGliaWxpdHkgY2hlY2sgZm9yIGNncm91cCBzdG9yYWdlIHdoZW4gcmVwbGFjaW5nIGEgQlBGIHByb2dyYW0gYXR0YWNoZWQgdG8gYSBjZ3JvdXAgbGluay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gdGhlIEJQRl9MSU5LX1VQREFURSBzeXNjYWxsIHBhdGguIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBoYW5kbGVzIHZhcmlvdXMgQlBGIHByb2dyYW0gY29uZmlndXJhdGlvbnMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMzo1NjowMi45MDc4NjQ5NDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODc4NDUxNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMjFmYjEzYTM0N2EyOTQwOTBhZGQ3OGZmZTkzMTAxNjVhNjhmNDNlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMDM6NTY6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcXG5pbmRleCA0MzU1Y2NiNzhhOWM2Li41Y2M5YjJkOTJmZDU4IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvY2dyb3VwLmNcXG4rKysgYi9rZXJuZWwvYnBmL2Nncm91cC5jXFxuQEAgLTEwMTgsNiArMTAxOCwyMCBAQCBzdGF0aWMgdm9pZCByZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cpXFxuK3tcXG4rXFx0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTtcXG4rXFxuK1xcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpIHtcXG4rXFx0XFx0aWYgKG9sZF9wcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWNncm91cF9zdG9yYWdlW3N0eXBlXSAhPVxcbitcXHRcXHQgICAgbmV3X3Byb2ctXFx1MDAzZWF1eC1cXHUwMDNlY2dyb3VwX3N0b3JhZ2Vbc3R5cGVdKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiAvKipcXG4gICogX19jZ3JvdXBfYnBmX3JlcGxhY2UoKSAtIFJlcGxhY2UgbGluaydzIHByb2dyYW0gYW5kIHByb3BhZ2F0ZSB0aGUgY2hhbmdlXFxuICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkZXNjZW5kYW50c1xcbkBAIC0xMDU2LDYgKzEwNzAsOSBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuIFxcdGlmICghZm91bmQpXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG4rXFx0aWYgKCFjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUobGluay1cXHUwMDNlbGluay5wcm9nLCBuZXdfcHJvZykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0Y2dycC1cXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0gKz0gMTtcXG4gXFx0b2xkX3Byb2cgPSB4Y2hnKFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKTtcXG4gXFx0cmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMzo1NjowMy45OTY1MjkxNzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozOTQ2OTExODAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNncm91cF9icGZfcmVwbGFjZVwiLFxuICAgIFwibGlua191cGRhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY29tcGF0aWJpbGl0eSBjaGVjayBmb3IgY2dyb3VwIHN0b3JhZ2Ugd2hlbiByZXBsYWNpbmcgYSBCUEYgcHJvZ3JhbSBhdHRhY2hlZCB0byBhIGNncm91cCBsaW5rLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiB0aGUgQlBGX0xJTktfVVBEQVRFIHN5c2NhbGwgcGF0aC4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGhhbmRsZXMgdmFyaW91cyBCUEYgcHJvZ3JhbSBjb25maWd1cmF0aW9ucyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDEyMWZiMTNhMzQ3YTI5NDA5MGFkZDc4ZmZlOTMxMDE2NWE2OGY0M2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDAzOjU2OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbmluZGV4IDQzNTVjY2I3OGE5YzYuLjVjYzliMmQ5MmZkNTggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXG4rKysgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5AQCAtMTAxOCw2ICsxMDE4LDIwIEBAIHN0YXRpYyB2b2lkIHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coc3RydWN0IGNncm91cCAqY2dycCxcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cpXG4re1xuK1x0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTtcbitcbitcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpIHtcbitcdFx0aWYgKG9sZF9wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0gIT1cbitcdFx0ICAgIG5ld19wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0pXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIC8qKlxuICAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsncyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZVxuICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkZXNjZW5kYW50c1xuQEAgLTEwNTYsNiArMTA3MCw5IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCxcbiBcdGlmICghZm91bmQpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuK1x0aWYgKCFjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUobGluay1cdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRjZ3JwLVx1MDAzZWJwZi5yZXZpc2lvbnNbYXR5cGVdICs9IDE7XG4gXHRvbGRfcHJvZyA9IHhjaGcoXHUwMDI2bGluay1cdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKTtcbiBcdHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coY2dycCwgYXR5cGUsIHBsKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAzOjU2OjAzLjk5NjUzMTYxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODAyMjExMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIFBhdGNoIGZvciBDZ3JvdXAgQ29tcGF0aWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhZGRpbmcgYSBjb21wYXRpYmlsaXR5IGNoZWNrIHdpdGhpbiB0aGUgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCdzIGNhbGxpbmcgdGhpcyBuZXcgZnVuY3Rpb24sIGBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGVgLCByaWdodCBiZWZvcmUgdGhlIHJlcGxhY2VtZW50IGhhcHBlbnMuIFRoZSBsb2dpYyBpcyBzdHJhaWdodGZvcndhcmQ6IGl0J3MgY29tcGFyaW5nIHRoZSBgY2dyb3VwX3N0b3JhZ2VgIGVudHJpZXMgZm9yIHRoZSBvbGQgYW5kIG5ldyBCUEYgcHJvZ3JhbXMgKGBvbGRfcHJvZ2AgYW5kIGBuZXdfcHJvZ2AsIHJlc3BlY3RpdmVseSkgYXQgYSBzcGVjaWZpYyBgc3R5cGVgLiBJZiB0aG9zZSBzdG9yYWdlcyBhcmVuJ3QgY29tcGF0aWJsZSwgaXQgdGhyb3dzIGEgYC1FSU5WQUxgIGVycm9yLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB0aGF0IHNlZW1zIHNlbnNpYmxlLi4uIHdlIGRvbid0IHdhbnQgdG8gYnJlYWsgdGhpbmdzIGJ5IHJlcGxhY2luZyBhIEJQRiBwcm9ncmFtIHdpdGggb25lIHRoYXQgZXhwZWN0cyBhIGRpZmZlcmVudCBjZ3JvdXAgc3RvcmFnZSBzZXR1cC5cIlxuXG5Ob3csIG15IG5leHQgbW92ZSBpcyB0byBnbyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCogb2YgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYC4gV2hhdCdzIGhhcHBlbmluZyAqYXJvdW5kKiB0aGlzIGNoZWNrPyBXaGF0IGFyZSB0aGUgc2NlbmFyaW9zIHdoZXJlIGEgQlBGIHByb2dyYW0gaXMgYmVpbmcgcmVwbGFjZWQgd2l0aGluIGEgY2dyb3VwPyBJJ3ZlIGdvdCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoaXMgY29tcGF0aWJpbGl0eSBjaGVjay4gSXMgaXQgdG9vIHJlc3RyaWN0aXZlPyBEb2VzIGl0IGNhdGNoIGFsbCB0aGUgaW1wb3J0YW50IGNhc2VzPyBBcmUgdGhlcmUgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnM/IEknbGwgcHJvYmFibHkgYmUgZGl2aW5nIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGJpZ2dlciBwaWN0dXJlIGJlZm9yZSBJIGdpdmUgaXQgbXkgZmluYWwgc3RhbXAgb2YgYXBwcm92YWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMzo1NjowNy42NzY3NTUzNDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzNTk3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jZ3JvdXBfYnBmX3JlcGxhY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jPTEwMjE9c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMzUtLyoqXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDM2OiAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsncyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNy0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHNcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA0NC0gKi9cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwNDU6c3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA0Ni1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMDgzPXN0YXRpYyBpbnQgY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMC1cXHR9XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTAxOlxcdHJldCA9IF9fY2dyb3VwX2JwZl9yZXBsYWNlKGNnX2xpbmstXFx1MDAzZWNncm91cCwgY2dfbGluaywgbmV3X3Byb2cpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMi1vdXRfdW5sb2NrOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMzo1NjowNy43MjAxMjA3MDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTk3MzcxMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBgY2dyb3VwX2JwZl9yZXBsYWNlYCoqXG5cbkFscmlnaHQsIHNvIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIGNsZWFybHkgdGhlIGVudHJ5IHBvaW50LCB1bHRpbWF0ZWx5IGNhbGxpbmcgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYC4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyByZXBsYWNlbWVudCBvcGVyYXRpb24uIFRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byB0cmFjZSB0aGUgdXNhZ2VzIG9mIHRoYXQgZmlyc3QgZnVuY3Rpb24sIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyB0aGluZyBpcyBhY3R1YWxseSBpbnZva2VkLiBJcyBpdCBjYWxsZWQgZGlyZWN0bHksIG9yIGlzIGl0IGFzc2lnbmVkIHRvIHNvbWUgY2FsbGJhY2s/IEkgbmVlZCB0byBzZWUgdGhlIGRpZmZlcmVudCBzY2VuYXJpb3Mgd2hlcmUgdGhlIEJQRiBwcm9ncmFtIGZvciBhIGNncm91cCBpcyB1cGRhdGVkIG9yIGNoYW5nZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHJlcGxhY2VtZW50IHByb2Nlc3MgaXRzZWxmLiBTbywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRpZmZlcmVudCB3YXlzIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIGNhbGxlZCBvciB3aGF0IGl0IGlzIGFzc2lnbmVkIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDY2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDM6NTY6MTAuNzE3NDk0MzY3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzY3ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNncm91cF9icGZfcmVwbGFjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9MTAyMT1zdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUoc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNS0vKipcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMzY6ICogX19jZ3JvdXBfYnBmX3JlcGxhY2UoKSAtIFJlcGxhY2UgbGluaydzIHByb2dyYW0gYW5kIHByb3BhZ2F0ZSB0aGUgY2hhbmdlXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM3LSAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkZXNjZW5kYW50c1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ0LSAqL1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTA0NTpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ2LVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwODItXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDgzOnN0YXRpYyBpbnQgY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwODQtXFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMC1cXHR9XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTAxOlxcdHJldCA9IF9fY2dyb3VwX2JwZl9yZXBsYWNlKGNnX2xpbmstXFx1MDAzZWNncm91cCwgY2dfbGluaywgbmV3X3Byb2cpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMi1vdXRfdW5sb2NrOlxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNTE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9jZ3JvdXBfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTE5LVxcdC5kZXRhY2ggPSBicGZfY2dyb3VwX2xpbmtfZGV0YWNoLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTUyMDpcXHQudXBkYXRlX3Byb2cgPSBjZ3JvdXBfYnBmX3JlcGxhY2UsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTIxLVxcdC5zaG93X2ZkaW5mbyA9IGJwZl9jZ3JvdXBfbGlua19zaG93X2ZkaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDM6NTY6MTAuNzY0ODY0Njc0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxNjA2MTA5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCUEYgQ2dyb3VwIExpbmsgVXBkYXRlOiBBIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgQlBGIGNncm91cCBsaW5rcyBhcmUgdXBkYXRlZC4gVGhlIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGZ1bmN0aW9uIGlzIG5vdyBiZWluZyBhc3NpZ25lZCB0byB0aGUgYC51cGRhdGVfcHJvZ2AgZmllbGQgd2l0aGluIGBicGZfY2dyb3VwX2xpbmtfbG9wc2AuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGNsb3NlciBsb29rLCBhIHJlYWwgZnV6emluZyB0YXJnZXQgaW4gbXkgb3Bpbmlvbi5cblxuTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgb24gdGhlIGZ1bmN0aW9ucyBgY2dyb3VwX2JwZl9yZXBsYWNlYCBhbmQgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYC4gSG1tLCBgY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBidXQgaXQncyBzdGlsbCBiZWluZyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIg4oCTIHNvbWV0aGluZyBpcyBkZWZpbml0ZWx5IGhhcHBlbmluZyB0aGVyZS5cblxuTGV0J3MgcXVpY2tseSBjaGVjayBob3cgYGJwZl9jZ3JvdXBfbGlua19sb3BzYCBpcyBhY3R1YWxseSB1c2VkLiBBaCwgeWVzLCBpdCdzIHRoZSBvcGVyYXRpb25zIHN0cnVjdHVyZSBmb3IgY2dyb3VwIEJQRiBsaW5rcywgY29uZmlybWluZyB0aGlzIGlzIHRoZSBjb3JyZWN0IGFyZWEuIFNvLCB0aGF0IG1lYW5zIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcyB3aG9sZSBwcm9jZXNzIHNob3VsZCBiZSBzb21ld2hlcmUgYXJvdW5kIGBicGZfbGlua191cGRhdGVgIG9yIHNvbWV0aGluZyBjb21wYXJhYmxlLCBwcm9iYWJseSBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBHb3QgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NTYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDM6NTY6MTQuNTgwOTI3MjY2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDY4MjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVwZGF0ZV9wcm9nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTU5ODE9c3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMjEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAyMjpcXHRpZiAobGluay1cXHUwMDNlb3BzLVxcdTAwM2V1cGRhdGVfcHJvZylcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDIzOlxcdFxcdHJldCA9IGxpbmstXFx1MDAzZW9wcy1cXHUwMDNldXBkYXRlX3Byb2cobGluaywgbmV3X3Byb2csIG9sZF9wcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDI0LVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDM6NTY6MTQuNjI2Mzk5MzEyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc0MTc0NjMxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipBbmFseXppbmcgdGhlIGBsaW5rX3VwZGF0ZWAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBUaGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgc2VjdGlvbiBpcyBjbGVhcmx5IHRoZSBgbGlua191cGRhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIG1vdmUgaXMgdG8gZGV0ZXJtaW5lIGl0cyBzY29wZS4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBpcyBzdGF0aWMuIEtub3dpbmcgaXRzIGxpbmthZ2Ug4oCTIHdoZXRoZXIgaXQncyBjb25maW5lZCB0byB0aGUgY3VycmVudCB0cmFuc2xhdGlvbiB1bml0IG9yIHZpc2libGUgZ2xvYmFsbHkg4oCTIHByb2ZvdW5kbHkgaW1wYWN0cyBob3cgSSdsbCBhcHByb2FjaCB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgaW50ZXJuYWwgdXRpbGl0eSwgb3Igc29tZXRoaW5nIHRoYXQncyBpbnRlbmRlZCBmb3IgYnJvYWRlciB1c2U/IFRoYXQncyB0aGUgZmlyc3QgcXVlc3Rpb24gSSBuZWVkIGFuc3dlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDM4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDM6NTY6MTcuMzY4MTQ3OTE5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE2MjU1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsaW5rX3VwZGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz01ODQ0PXN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk0OS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTUwOnN0YXRpYyBpbnQgbGlua191cGRhdGVfbWFwKHN0cnVjdCBicGZfbGluayAqbGluaywgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk1MS17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTU0LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5NTU6XFx0bmV3X21hcCA9IGJwZl9tYXBfZ2V0KGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm5ld19tYXBfZmQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTYtXFx0aWYgKElTX0VSUihuZXdfbWFwKSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTgtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk1OTpcXHRpZiAoYXR0ci1cXHUwMDNlbGlua191cGRhdGUuZmxhZ3MgXFx1MDAyNiBCUEZfRl9SRVBMQUNFKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk2MDpcXHRcXHRvbGRfbWFwID0gYnBmX21hcF9nZXQoYXR0ci1cXHUwMDNlbGlua191cGRhdGUub2xkX21hcF9mZCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk2MS1cXHRcXHRpZiAoSVNfRVJSKG9sZF9tYXApKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTY0LVxcdFxcdH1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTY1OlxcdH0gZWxzZSBpZiAoYXR0ci1cXHUwMDNlbGlua191cGRhdGUub2xkX21hcF9mZCkge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NjYtXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NzgtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk3OTojZGVmaW5lIEJQRl9MSU5LX1VQREFURV9MQVNUX0ZJRUxEIGxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk4MC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTgxOnN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk4Mi17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTkwLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5OTE6XFx0ZmxhZ3MgPSBhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5mbGFncztcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTkyLVxcdGlmIChmbGFncyBcXHUwMDI2IH5CUEZfRl9SRVBMQUNFKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk5NC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTk1OlxcdGxpbmsgPSBicGZfbGlua19nZXRfZnJvbV9mZChhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5saW5rX2ZkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTk2LVxcdGlmIChJU19FUlIobGluaykpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTk5LVxcdGlmIChsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZXVwZGF0ZV9tYXApIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDAwOlxcdFxcdHJldCA9IGxpbmtfdXBkYXRlX21hcChsaW5rLCBhdHRyKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDAxLVxcdFxcdGdvdG8gb3V0X3B1dF9saW5rO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAwMy1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDA0OlxcdG5ld19wcm9nID0gYnBmX3Byb2dfZ2V0KGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm5ld19wcm9nX2ZkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDA1LVxcdGlmIChJU19FUlIobmV3X3Byb2cpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDEwLVxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GX1JFUExBQ0UpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDExOlxcdFxcdG9sZF9wcm9nID0gYnBmX3Byb2dfZ2V0KGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDEyLVxcdFxcdGlmIChJU19FUlIob2xkX3Byb2cpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDE2LVxcdFxcdH1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDE3OlxcdH0gZWxzZSBpZiAoYXR0ci1cXHUwMDNlbGlua191cGRhdGUub2xkX3Byb2dfZmQpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDE4LVxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzU0PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0OTUtXFx0Y2FzZSBCUEZfTElOS19VUERBVEU6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQ5NjpcXHRcXHRlcnIgPSBsaW5rX3VwZGF0ZShcXHUwMDI2YXR0cik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ5Ny1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDM6NTY6MTcuNDE0MzEzMTI2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMTQ2NzM2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBTeW1ib2wgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYF9fc3lzX2JwZmAgY2FsbCB3aXRoIGBCUEZfTElOS19VUERBVEVgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlc2Ugc3ltYm9sczogYGxpbmtfdXBkYXRlYCwgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCwgYW5kIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLiBIbW0sIHdhaXQgYSBtaW51dGUsIGBsaW5rX3VwZGF0ZWAgaXMgc3RhdGljLiBUaGF0J3MgYSBzeXNjYWxsIGVudHJ5LiAgU28gaXMgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYC4gQW5kIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLiBOb3csIGFyZSBhbnkgb2YgdGhlbSAqbm90KiBzdGF0aWM/IExldCBtZSBkb3VibGUtY2hlY2suLi4gWWVzLCBgY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBpbmRlZWQgc3RhdGljLiBTbyBpcyBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLiBEYW1uLiBgbGlua191cGRhdGVgIGlzIHN0YXRpYyB0b28uIE9rYXksIGxldCBtZSBmaW5kIHNvbWV0aGluZyBub24tc3RhdGljLi4uIGBicGZfbGlua191cGRhdGVgPyBObywgdGhhdOKAmXMganVzdCBhIHBvaW50ZXIgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgZXNzZW50aWFsbHkgcG9pbnRpbmcgdG8gYGxpbmtfdXBkYXRlYC5cblxuQWxyaWdodCwgbGV0J3MgY2lyY2xlIGJhY2suIEkgdGhpbmsgSSBoYXZlIHR3byBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgd2lsbCB3b3JrOiBgY2dyb3VwX2JwZl9yZXBsYWNlYCBhbmQgYGxpbmtfdXBkYXRlYC4gVGhlbiB0aGUgaW5zdHJ1Y3Rpb25zIHBvcCB1cC4gXCJQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcIi4gUmlnaHQuIFdlbGwsIGBsaW5rX3VwZGF0ZWAgaXMgc3RhdGljLCBidXQgaXQncyBwcmV0dHkgc3Vic3RhbnRpYWw7IHRoZSBjb21waWxlciBpcyBwcm9iYWJseSAqbm90KiBpbmxpbmluZyB0aGF0LiBgY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBzdGF0aWMsIGJ1dCBiZWNhdXNlIGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCB0aGUgY29tcGlsZXIgKmNhbid0KiBpbmxpbmUgaXQsIHNvIHRoYXQncyBnb29kISBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIHN0YXRpYywgYW5kIHRoYXQgY291bGQgYmUgaW5saW5lZC4gT2ssIGxldCBtZSBkb3VibGUgY2hlY2sgdGhhdCBgX19zeXNfYnBmYCBpcyBub3Qgc3RhdGljLiBJdCBpc24ndCwgYnV0IHRoYXQgdGhpbmcgaXMgYSBodWdlIG11bHRpcGxleGVyLlxuXG5TbywgSSdsbCBnbyB3aXRoIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGFuZCBgbGlua191cGRhdGVgLiBJIHRoaW5rIHRoYXQncyB0aGUgYmVzdCBvcHRpb24gaGVyZS5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgdGhlIGNvbmZpZ3MgYXJlIHJpZ2h0LiBgQ09ORklHX0NHUk9VUF9CUEZgIGlzIGRlZmluaXRlbHkgbmVlZGVkLiBJJ2xsIHRha2UgYSBxdWljayBsb29rIGluIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzQ4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAzOjU2OjIzLjYyODk4OTE0OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzMzc1MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2dyb3VwLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTM1PWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZTozNjpvYmotJChDT05GSUdfQ0dST1VQX0JQRikgKz0gY2dyb3VwLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM3LWlmZXEgKCQoQ09ORklHX0lORVQpLHkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAzOjU2OjIzLjY3NDMyODkyNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDc1MTEwOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgZm9yIEJQRiB3aXRoIENHcm91cHMqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBjbHVlIGlzIGNsZWFyOiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYENPTkZJR19DR1JPVVBfQlBGYCBpcyBlbmFibGVkLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBOb3csIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYSBicm9hZGVyIGFzc2Vzc21lbnQuIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIGxhbmRzY2FwZS4gSSBjYW4ndCBqdXN0IHN0b3AgYXQgdGhlIG9idmlvdXMsIEknbSB0aGlua2luZyBhYm91dCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLCBhbmQgYnJvYWRlciBpbXBsaWNhdGlvbnMgZm9yIGhvdyBJJ2xsIGRlc2lnbiBhbmQgaW1wbGVtZW50IHRoaXMgQlBGLWJhc2VkIHN5c3RlbSB3aXRoIENHcm91cHMuIFdoYXQgb3RoZXIgY29uZmlncyB3aWxsIGJlY29tZSBuZWNlc3NhcnksIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gY2hvaWNlcyBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cz8gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBuZWVkIHRvIGNoZWNrIGZvciB0aGluZ3MgbGlrZTogYXJlIHRoZXJlIGFueSBzZWN1cml0eS1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgbmVlZCBhZGp1c3RtZW50LCBvciBwZXJoYXBzIHNvbWUgbmV0d29yayBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50PyBUaGlzIGluaXRpYWwgY29uZmlndXJhdGlvbiBjaGVjayBpcyBqdXN0IGEgc3RhcnRpbmcgcG9pbnQsIGl0IGlzIGltcGVyYXRpdmUgdG8gaWRlbnRpZnkgdGhlIGZ1bGwgc2V0IG9mIGRlcGVuZGVuY2llcy4gVGhpcyBpcyBqdXN0IHRoZSBmaXJzdCBzdGVwIGluIGEgcHJvcGVyIGRlZXAtZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzcGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc3MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAzOjU2OjI3LjE0OTQ0MjM0MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzMjE4MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENHUk9VUF9CUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMzQxPWNvbmZpZyBDR1JPVVBfUEVSRlxcbi0tXFxuaW5pdC9LY29uZmlnLTEzNTEtXFxuaW5pdC9LY29uZmlnOjEzNTI6Y29uZmlnIENHUk9VUF9CUEZcXG5pbml0L0tjb25maWctMTM1My1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAzOjU2OjI3LjE5Mjc2OTA5OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDYzMjMzNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBgQ0dST1VQX0JQRmAgRGVwZW5kZW5jaWVzIGluIGBpbml0L0tjb25maWdgKipcblxuT2theSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtaWdodCBiZSBjb250aW5nZW50IG9uIGBDR1JPVVBfQlBGYC4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGEgZmVhdHVyZSBhcyBzaWduaWZpY2FudCBhcyBCUEYgc3VwcG9ydCBmb3IgY2dyb3Vwcy4gYGluaXQvS2NvbmZpZ2AgaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gVGhpcyBmaWxlIG9mdGVuIGRlZmluZXMgdGhlIGNvcmUgb3B0aW9ucywgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMuIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgc2NhbiBpdCwgbG9va2luZyBmb3IgYW55IGBkZXBlbmRzIG9uYCBjbGF1c2VzIHRoYXQgaW5jbHVkZSBgQ0dST1VQX0JQRmAgb3IgYW55IHJlZmVyZW5jZXMgdGhhdCBtaWdodCBpbmRpcmVjdGx5IHJlbGF0ZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGluZ3MgbGlrZSBuZXR3b3JrLCBzZWN1cml0eSwgb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBmZWF0dXJlcyB0aGF0IG1pZ2h0IGxldmVyYWdlIGNncm91cCBCUEYuIFRoaXMgYW5hbHlzaXMgaXMgY3JpdGljYWwgdG8gYXZvaWQgYW55IHVuZXhwZWN0ZWQgYnVpbGQgZXJyb3JzIG9yIHJ1bnRpbWUgaW5jb21wYXRpYmlsaXRpZXMgbGF0ZXIgb24uIEl0J3MgdGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gaXMgaGlkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTMxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDM6NTY6MzEuNjU2MDA1MzA0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc1MTAzNDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDR1JPVVBfQlBGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTM0MT1jb25maWcgQ0dST1VQX1BFUkZcXG4tLVxcbmluaXQvS2NvbmZpZy0xMzUxLVxcbmluaXQvS2NvbmZpZzoxMzUyOmNvbmZpZyBDR1JPVVBfQlBGXFxuaW5pdC9LY29uZmlnLTEzNTMtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMzo1NjozMy4zMzExMTM4MzZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0NDM5NjkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCB3aGVyZSdzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHVudGFuZ2xpbmcgdGhpcyBjb25maWd1cmF0aW9uIHB1enpsZT8gR2l2ZW4gdGhlIGNvbnRleHQsIEkgc3VzcGVjdCB3ZSdyZSBsb29raW5nIGF0IHNvbWV0aGluZyBjb3JlIHRvIHRoZSBpbml0aWFsIHNldHVwLCBtYXliZSByZWxhdGVkIHRvIGRyaXZlcnMsIG9yIGJvb3QgcHJvY2VzcyBmbGFncy4gVGhlIGxpa2VseSBsb2NhdGlvbiBpcyBnb2luZyB0byBiZSB3aXRoaW4gdGhlIGBpbml0L2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgdGhlIGBLY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0sIHRoZSBwbGFjZSB3aGVyZSBhbGwgdGhlIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZC4gVGhlIGxpbmUgbnVtYmVycyBhcmUsIGJ5IGRlZmluaXRpb24sIGZsdWlkIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWMga2VybmVsIHZlcnNpb24sIHNvIEknbSBhaW1pbmcgZm9yIHJvdWdobHkgbGluZSAxMzUyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHBhcnRpY3VsYXIgc2VjdGlvbiB0byBiZSBhYmxlIHRvIGZvbGxvdyB0aGUgbG9naWMgYW5kIGhvdyB0aGUgdmFyaWFibGVzIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGludGVyLXJlbGF0ZWQuIEkgbmVlZCB0byBiZSBhYmxlIHRvIGlkZW50aWZ5IHRoZSBpbXBvcnRhbnQgcGFyYW1ldGVycyBhbmQgZmlndXJlIG91dCBob3cgdGhleSBpbnRlcmFjdC4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gdW5lYXJ0aCBmcm9tIHRoYXQgc3BlY2lmaWMgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ4MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAzOjU2OjM2LjY3NTUxNDE1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTM1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM1MDpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMzUxOlxcdFxcbjEzNTI6XFx0Y29uZmlnIENHUk9VUF9CUEZcXG4xMzUzOlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1xcXCJcXG4xMzU0OlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4xMzU1OlxcdFxcdHNlbGVjdCBTT0NLX0NHUk9VUF9EQVRBXFxuMTM1NjpcXHRcXHRoZWxwXFxuMTM1NzpcXHRcXHQgIEFsbG93IGF0dGFjaGluZyBlQlBGIHByb2dyYW1zIHRvIGEgY2dyb3VwIHVzaW5nIHRoZSBicGYoMilcXG4xMzU4OlxcdFxcdCAgc3lzY2FsbCBjb21tYW5kIEJQRl9QUk9HX0FUVEFDSC5cXG4xMzU5OlxcdFxcbjEzNjA6XFx0XFx0ICBJbiB3aGljaCBjb250ZXh0IHRoZXNlIHByb2dyYW1zIGFyZSBhY2Nlc3NlZCBkZXBlbmRzIG9uIHRoZSB0eXBlXFxuMTM2MTpcXHRcXHQgIG9mIGF0dGFjaG1lbnQuIEZvciBpbnN0YW5jZSwgcHJvZ3JhbXMgdGhhdCBhcmUgYXR0YWNoZWQgdXNpbmdcXG4xMzYyOlxcdFxcdCAgQlBGX0NHUk9VUF9JTkVUX0lOR1JFU1Mgd2lsbCBiZSBleGVjdXRlZCBvbiB0aGUgaW5ncmVzcyBwYXRoIG9mXFxuMTM2MzpcXHRcXHQgIGluZXQgc29ja2V0cy5cXG4xMzY0OlxcdFxcbjEzNjU6XFx0Y29uZmlnIENHUk9VUF9NSVNDXFxuMTM2NjpcXHRcXHRib29sIFxcXCJNaXNjIHJlc291cmNlIGNvbnRyb2xsZXJcXFwiXFxuMTM2NzpcXHRcXHRkZWZhdWx0IG5cXG4xMzY4OlxcdFxcdGhlbHBcXG4xMzY5OlxcdFxcdCAgUHJvdmlkZXMgYSBjb250cm9sbGVyIGZvciBtaXNjZWxsYW5lb3VzIHJlc291cmNlcyBvbiBhIGhvc3QuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAzOjU2OjM2LjY3NTcxMzcyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MTAzMzQ0NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBDZ3JvdXAgTGluayBSZXBsYWNlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNoYW5nZSBpbiBob3cgd2UgaGFuZGxlIEJQRiBwcm9ncmFtIHJlcGxhY2VtZW50IGluIGNncm91cCBsaW5rcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBgQ0dST1VQX0JQRmAgKmRlZmluaXRlbHkqIGRlcGVuZHMgb24gYEJQRl9TWVNDQUxMYCwgc28gd2UgbmVlZCB0byBlbnN1cmUgYm90aCBhcmUgaW5jbHVkZWQgaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0J3MgYSBuby1icmFpbmVyLlxuXG5Ob3csIEkndmUgZ290IHRvIGNvbmZpcm0gd2hlcmUgdGhlIG5ldyBsb2dpYyBpcyBhY3R1YWxseSAqdXNlZCouIEkgcmVtZW1iZXIgc2VlaW5nIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGFuZCwgeWVzLCBhIHF1aWNrIGNoZWNrIGluIGBicGZfY2dyb3VwX2xpbmtfbG9wc2Agc2hvd3MgdGhhdCBpdCAqaXMqIGluZGVlZCBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIuIEdvb2QuXG5cbkxldCdzIGRpc3NlY3QgdGhlIGZ1bmN0aW9uYWxpdHkuIFRoZSBwYXRjaCBhZGRzIGBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGVgLCB3aGljaCBjaGVja3MgZm9yIGNvbXBhdGliaWxpdHkgYmV0d2VlbiB0aGUgb2xkIGFuZCBuZXcgcHJvZ3JhbXMnIGBjZ3JvdXBfc3RvcmFnZWAgc3RydWN0dXJlcy4gSWYgdGhleSdyZSAqbm90KiBjb21wYXRpYmxlLCBpdCByZXR1cm5zIGAtRUlOVkFMYC4gQ2xhc3NpYy4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbHRlcmluZyB0aGUgQlBGIGNncm91cCBsaW5rIHJlcGxhY2VtZW50IHByb2NlZHVyZS4gVGhpcyBwYXJ0IG9mIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdGhyb3VnaCB0aGUgYGJwZigpYCBzeXNjYWxsLCBzcGVjaWZpY2FsbHkgdGhlIGBCUEZfTElOS19VUERBVEVgIGNvbW1hbmQuIFRoYXQncyBvdXIgYXR0YWNrIHZlY3Rvci5cblxuRm9yIGZ1enppbmcgcHVycG9zZXMsIHRoZSBtb3N0IHJlbGV2YW50IHN5bWJvbHMgd2lsbCBiZSBgY2dyb3VwX2JwZl9yZXBsYWNlYCBhbmQgYGxpbmtfdXBkYXRlYCwgd2hpY2ggaXMgbG9jYXRlZCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBBbHRob3VnaCBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBgY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0LiBXZSBkb24ndCB3YW50IHRvIGdldCB0b28gZ2VuZXJhbCB3aXRoIHRoZSBmb2N1cy5cblxuU28sIHRoZSByZWFzb25pbmcgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBjaGFuZ2VzIGhvdyB3ZSByZXBsYWNlIEJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXAgbGlua3MuIEl0IGludHJvZHVjZXMgYSBuZXcgY29tcGF0aWJpbGl0eSBjaGVjaywgYW5kIGl0J3MgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB0aHJvdWdoIGBCUEZfTElOS19VUERBVEVgLiBXZSBuZWVkIHRvIGZ1enogaXQgZXh0ZW5zaXZlbHkgdG8gZW5zdXJlIGl0IGhhbmRsZXMgYWxsIGtpbmRzIG9mIHZhbGlkIGFuZCBpbnZhbGlkIHByb2dyYW0gY29uZmlndXJhdGlvbnMgZ3JhY2VmdWxseS5cblxuSSdtIGNvbWZvcnRhYmxlIHdpdGggdGhlIHN5bWJvbCBzZWxlY3Rpb24uIE9rYXksIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDQyLCJPdXRwdXRUb2tlbnMiOjEzNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAzOjU2OjQzLjM4NjA1MTU2OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NTkxNzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNncm91cF9icGZfcmVwbGFjZVwiLFxuICAgIFwibGlua191cGRhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY29tcGF0aWJpbGl0eSBjaGVjayBmb3IgY2dyb3VwIHN0b3JhZ2Ugd2hlbiByZXBsYWNpbmcgYSBCUEYgcHJvZ3JhbSBhdHRhY2hlZCB0byBhIGNncm91cCBsaW5rLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiB0aGUgQlBGX0xJTktfVVBEQVRFIHN5c2NhbGwgcGF0aC4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGhhbmRsZXMgdmFyaW91cyBCUEYgcHJvZ3JhbSBjb25maWd1cmF0aW9ucyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZ3JvdXBfYnBmX3JlcGxhY2VcIixcbiAgICBcImxpbmtfdXBkYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNvbXBhdGliaWxpdHkgY2hlY2sgZm9yIGNncm91cCBzdG9yYWdlIHdoZW4gcmVwbGFjaW5nIGEgQlBGIHByb2dyYW0gYXR0YWNoZWQgdG8gYSBjZ3JvdXAgbGluay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gdGhlIEJQRl9MSU5LX1VQREFURSBzeXNjYWxsIHBhdGguIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBoYW5kbGVzIHZhcmlvdXMgQlBGIHByb2dyYW0gY29uZmlndXJhdGlvbnMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmww58[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 03:54:44 +0000 UTC FinishedAt: 2026-08-05 03:56:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e5fd3f514e27db1f05fbd72ba615d74941e23c51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e5fd3f514e27db1f05fbd72ba615d74941e23c51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "BPF_SYSCALL" ], "series_id": "6a49a1c8-3231-4357-9a49-da25c822b5a2" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "cgroup_bpf_replace", "link_update" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA1IDAzOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZ3JvdXBfYnBmX3JlcGxhY2UmIzM0OywKICAgICYjMzQ7bGlua191cGRhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNvbXBhdGliaWxpdHkgY2hlY2sgZm9yIGNncm91cCBzdG9yYWdlIHdoZW4gcmVwbGFjaW5nIGEgQlBGIHByb2dyYW0gYXR0YWNoZWQgdG8gYSBjZ3JvdXAgbGluay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gdGhlIEJQRl9MSU5LX1VQREFURSBzeXNjYWxsIHBhdGguIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBoYW5kbGVzIHZhcmlvdXMgQlBGIHByb2dyYW0gY29uZmlndXJhdGlvbnMgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAzOjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTIxZmIxM2EzNDdhMjk0MDkwYWRkNzhmZmU5MzEwMTY1YTY4ZjQzZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMDM6NTY6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbmluZGV4IDQzNTVjY2I3OGE5YzYuLjVjYzliMmQ5MmZkNTggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5AQCAtMTAxOCw2ICYjNDM7MTAxOCwyMCBAQCBzdGF0aWMgdm9pZCByZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUoc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cpXG4mIzQzO3tcbiYjNDM7XHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKHN0eXBlKSB7XG4mIzQzO1x0XHRpZiAob2xkX3Byb2ctXHUwMDNlYXV4LVx1MDAzZWNncm91cF9zdG9yYWdlW3N0eXBlXSAhPVxuJiM0MztcdFx0ICAgIG5ld19wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0pXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsmIzM5O3MgcHJvZ3JhbSBhbmQgcHJvcGFnYXRlIHRoZSBjaGFuZ2VcbiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHNcbkBAIC0xMDU2LDYgJiM0MzsxMDcwLDkgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFx0aWYgKCFmb3VuZClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4mIzQzO1x0aWYgKCFjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUobGluay1cdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdGNncnAtXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0gJiM0Mzs9IDE7XG4gXHRvbGRfcHJvZyA9IHhjaGcoXHUwMDI2bGluay1cdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKTtcbiBcdHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coY2dycCwgYXR5cGUsIHBsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMzo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nncm91cF9icGZfcmVwbGFjZSYjMzQ7LAogICAgJiMzNDtsaW5rX3VwZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY29tcGF0aWJpbGl0eSBjaGVjayBmb3IgY2dyb3VwIHN0b3JhZ2Ugd2hlbiByZXBsYWNpbmcgYSBCUEYgcHJvZ3JhbSBhdHRhY2hlZCB0byBhIGNncm91cCBsaW5rLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiB0aGUgQlBGX0xJTktfVVBEQVRFIHN5c2NhbGwgcGF0aC4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGhhbmRsZXMgdmFyaW91cyBCUEYgcHJvZ3JhbSBjb25maWd1cmF0aW9ucyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMjFmYjEzYTM0N2EyOTQwOTBhZGQ3OGZmZTkzMTAxNjVhNjhmNDNlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgNSAwMzo1NjowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jCmluZGV4IDQzNTVjY2I3OGE5YzYuLjVjYzliMmQ5MmZkNTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY2dyb3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZ3JvdXAuYwpAQCAtMTAxOCw2ICYjNDM7MTAxOCwyMCBAQCBzdGF0aWMgdm9pZCByZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAJfQogfQogCiYjNDM7c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csCiYjNDM7CQkJCQkgICBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nKQomIzQzO3sKJiM0MzsJZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfY2dyb3VwX3N0b3JhZ2VfdHlwZShzdHlwZSkgewomIzQzOwkJaWYgKG9sZF9wcm9nLSZndDthdXgtJmd0O2Nncm91cF9zdG9yYWdlW3N0eXBlXSAhPQomIzQzOwkJICAgIG5ld19wcm9nLSZndDthdXgtJmd0O2Nncm91cF9zdG9yYWdlW3N0eXBlXSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBfX2Nncm91cF9icGZfcmVwbGFjZSgpIC0gUmVwbGFjZSBsaW5rJiMzOTtzIHByb2dyYW0gYW5kIHByb3BhZ2F0ZSB0aGUgY2hhbmdlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHMKQEAgLTEwNTYsNiAmIzQzOzEwNzAsOSBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAJaWYgKCFmb3VuZCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKJiM0MzsJaWYgKCFjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUobGluay0mZ3Q7bGluay5wcm9nLCBuZXdfcHJvZykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAljZ3JwLSZndDticGYucmV2aXNpb25zW2F0eXBlXSAmIzQzOz0gMTsKIAlvbGRfcHJvZyA9IHhjaGcoJmFtcDtsaW5rLSZndDtsaW5rLnByb2csIG5ld19wcm9nKTsKIAlyZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKGNncnAsIGF0eXBlLCBwbCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIFBhdGNoIGZvciBDZ3JvdXAgQ29tcGF0aWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBga2VybmVsL2JwZi9jZ3JvdXAuY2AuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFkZGluZyBhIGNvbXBhdGliaWxpdHkgY2hlY2sgd2l0aGluIHRoZSBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGNhbGxpbmcgdGhpcyBuZXcgZnVuY3Rpb24sIGBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGVgLCByaWdodCBiZWZvcmUgdGhlIHJlcGxhY2VtZW50IGhhcHBlbnMuIFRoZSBsb2dpYyBpcyBzdHJhaWdodGZvcndhcmQ6IGl0JiMzOTtzIGNvbXBhcmluZyB0aGUgYGNncm91cF9zdG9yYWdlYCBlbnRyaWVzIGZvciB0aGUgb2xkIGFuZCBuZXcgQlBGIHByb2dyYW1zIChgb2xkX3Byb2dgIGFuZCBgbmV3X3Byb2dgLCByZXNwZWN0aXZlbHkpIGF0IGEgc3BlY2lmaWMgYHN0eXBlYC4gSWYgdGhvc2Ugc3RvcmFnZXMgYXJlbiYjMzk7dCBjb21wYXRpYmxlLCBpdCB0aHJvd3MgYSBgLUVJTlZBTGAgZXJyb3IuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoYXQgc2VlbXMgc2Vuc2libGUuLi4gd2UgZG9uJiMzOTt0IHdhbnQgdG8gYnJlYWsgdGhpbmdzIGJ5IHJlcGxhY2luZyBhIEJQRiBwcm9ncmFtIHdpdGggb25lIHRoYXQgZXhwZWN0cyBhIGRpZmZlcmVudCBjZ3JvdXAgc3RvcmFnZSBzZXR1cC4mIzM0OwoKTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gZ28gZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKmNvbnRleHQqIG9mIGBfX2Nncm91cF9icGZfcmVwbGFjZWAuIFdoYXQmIzM5O3MgaGFwcGVuaW5nICphcm91bmQqIHRoaXMgY2hlY2s/IFdoYXQgYXJlIHRoZSBzY2VuYXJpb3Mgd2hlcmUgYSBCUEYgcHJvZ3JhbSBpcyBiZWluZyByZXBsYWNlZCB3aXRoaW4gYSBjZ3JvdXA/IEkmIzM5O3ZlIGdvdCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoaXMgY29tcGF0aWJpbGl0eSBjaGVjay4gSXMgaXQgdG9vIHJlc3RyaWN0aXZlPyBEb2VzIGl0IGNhdGNoIGFsbCB0aGUgaW1wb3J0YW50IGNhc2VzPyBBcmUgdGhlcmUgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnM/IEkmIzM5O2xsIHByb2JhYmx5IGJlIGRpdmluZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBiaWdnZXIgcGljdHVyZSBiZWZvcmUgSSBnaXZlIGl0IG15IGZpbmFsIHN0YW1wIG9mIGFwcHJvdmFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fY2dyb3VwX2JwZl9yZXBsYWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTEwMjE9c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM1LS8qKlxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDM2OiAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsmIzM5O3MgcHJvZ3JhbSBhbmQgcHJvcGFnYXRlIHRoZSBjaGFuZ2Vcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNy0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHNcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNDQtICovXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwNDU6c3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ2LVx0XHRcdFx0c3RydWN0IGJwZl9jZ3JvdXBfbGluayAqbGluayxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEwODM9c3RhdGljIGludCBjZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGJwZl9saW5rICpsaW5rLCBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMC1cdH1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTEwMTpcdHJldCA9IF9fY2dyb3VwX2JwZl9yZXBsYWNlKGNnX2xpbmstXHUwMDNlY2dyb3VwLCBjZ19saW5rLCBuZXdfcHJvZyk7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTExMDItb3V0X3VubG9jazpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDY2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gYGNncm91cF9icGZfcmVwbGFjZWAqKgoKQWxyaWdodCwgc28gYGNncm91cF9icGZfcmVwbGFjZWAgaXMgY2xlYXJseSB0aGUgZW50cnkgcG9pbnQsIHVsdGltYXRlbHkgY2FsbGluZyBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLiBNeSBmb2N1cyByaWdodCBub3cgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIHJlcGxhY2VtZW50IG9wZXJhdGlvbi4gVGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoZSB1c2FnZXMgb2YgdGhhdCBmaXJzdCBmdW5jdGlvbiwgYGNncm91cF9icGZfcmVwbGFjZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHRoaW5nIGlzIGFjdHVhbGx5IGludm9rZWQuIElzIGl0IGNhbGxlZCBkaXJlY3RseSwgb3IgaXMgaXQgYXNzaWduZWQgdG8gc29tZSBjYWxsYmFjaz8gSSBuZWVkIHRvIHNlZSB0aGUgZGlmZmVyZW50IHNjZW5hcmlvcyB3aGVyZSB0aGUgQlBGIHByb2dyYW0gZm9yIGEgY2dyb3VwIGlzIHVwZGF0ZWQgb3IgY2hhbmdlZC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcmVwbGFjZW1lbnQgcHJvY2VzcyBpdHNlbGYuIFNvLCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGlmZmVyZW50IHdheXMgYGNncm91cF9icGZfcmVwbGFjZWAgaXMgY2FsbGVkIG9yIHdoYXQgaXQgaXMgYXNzaWduZWQgdG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwX2JwZl9yZXBsYWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTEwMjE9c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM1LS8qKlxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDM2OiAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsmIzM5O3MgcHJvZ3JhbSBhbmQgcHJvcGFnYXRlIHRoZSBjaGFuZ2Vcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNy0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHNcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNDQtICovXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwNDU6c3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ2LVx0XHRcdFx0c3RydWN0IGJwZl9jZ3JvdXBfbGluayAqbGluayxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwODItXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwODM6c3RhdGljIGludCBjZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGJwZl9saW5rICpsaW5rLCBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDg0LVx0XHRcdCAgICAgIHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cpXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTAwLVx0fVxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTAxOlx0cmV0ID0gX19jZ3JvdXBfYnBmX3JlcGxhY2UoY2dfbGluay1cdTAwM2VjZ3JvdXAsIGNnX2xpbmssIG5ld19wcm9nKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMi1vdXRfdW5sb2NrOlxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTUxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfY2dyb3VwX2xpbmtfbG9wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1MTktXHQuZGV0YWNoID0gYnBmX2Nncm91cF9saW5rX2RldGFjaCxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTUyMDpcdC51cGRhdGVfcHJvZyA9IGNncm91cF9icGZfcmVwbGFjZSxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTUyMS1cdC5zaG93X2ZkaW5mbyA9IGJwZl9jZ3JvdXBfbGlua19zaG93X2ZkaW5mbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODU2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJQRiBDZ3JvdXAgTGluayBVcGRhdGU6IEEgRnV6emluZyBUYXJnZXQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IEJQRiBjZ3JvdXAgbGlua3MgYXJlIHVwZGF0ZWQuIFRoZSBgY2dyb3VwX2JwZl9yZXBsYWNlYCBmdW5jdGlvbiBpcyBub3cgYmVpbmcgYXNzaWduZWQgdG8gdGhlIGAudXBkYXRlX3Byb2dgIGZpZWxkIHdpdGhpbiBgYnBmX2Nncm91cF9saW5rX2xvcHNgLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgYSBjbG9zZXIgbG9vaywgYSByZWFsIGZ1enppbmcgdGFyZ2V0IGluIG15IG9waW5pb24uCgpNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGFuZCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLiBIbW0sIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBpdCYjMzk7cyBzdGlsbCBiZWluZyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIg4oCTIHNvbWV0aGluZyBpcyBkZWZpbml0ZWx5IGhhcHBlbmluZyB0aGVyZS4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIGhvdyBgYnBmX2Nncm91cF9saW5rX2xvcHNgIGlzIGFjdHVhbGx5IHVzZWQuIEFoLCB5ZXMsIGl0JiMzOTtzIHRoZSBvcGVyYXRpb25zIHN0cnVjdHVyZSBmb3IgY2dyb3VwIEJQRiBsaW5rcywgY29uZmlybWluZyB0aGlzIGlzIHRoZSBjb3JyZWN0IGFyZWEuIFNvLCB0aGF0IG1lYW5zIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcyB3aG9sZSBwcm9jZXNzIHNob3VsZCBiZSBzb21ld2hlcmUgYXJvdW5kIGBicGZfbGlua191cGRhdGVgIG9yIHNvbWV0aGluZyBjb21wYXJhYmxlLCBwcm9iYWJseSBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBHb3QgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXBkYXRlX3Byb2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz01OTgxPXN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAyMS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMjI6XHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNldXBkYXRlX3Byb2cpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDIzOlx0XHRyZXQgPSBsaW5rLVx1MDAzZW9wcy1cdTAwM2V1cGRhdGVfcHJvZyhsaW5rLCBuZXdfcHJvZywgb2xkX3Byb2cpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAyNC1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDM4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipBbmFseXppbmcgdGhlIGBsaW5rX3VwZGF0ZWAgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIFRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBzZWN0aW9uIGlzIGNsZWFybHkgdGhlIGBsaW5rX3VwZGF0ZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgbW92ZSBpcyB0byBkZXRlcm1pbmUgaXRzIHNjb3BlLiBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIHN0YXRpYy4gS25vd2luZyBpdHMgbGlua2FnZSDigJMgd2hldGhlciBpdCYjMzk7cyBjb25maW5lZCB0byB0aGUgY3VycmVudCB0cmFuc2xhdGlvbiB1bml0IG9yIHZpc2libGUgZ2xvYmFsbHkg4oCTIHByb2ZvdW5kbHkgaW1wYWN0cyBob3cgSSYjMzk7bGwgYXBwcm9hY2ggdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGludGVybmFsIHV0aWxpdHksIG9yIHNvbWV0aGluZyB0aGF0JiMzOTtzIGludGVuZGVkIGZvciBicm9hZGVyIHVzZT8gVGhhdCYjMzk7cyB0aGUgZmlyc3QgcXVlc3Rpb24gSSBuZWVkIGFuc3dlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaW5rX3VwZGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTU4NDQ9c3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk0OS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5NTA6c3RhdGljIGludCBsaW5rX3VwZGF0ZV9tYXAoc3RydWN0IGJwZl9saW5rICpsaW5rLCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTEte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTQtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTU1Olx0bmV3X21hcCA9IGJwZl9tYXBfZ2V0KGF0dHItXHUwMDNlbGlua191cGRhdGUubmV3X21hcF9mZCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTU2LVx0aWYgKElTX0VSUihuZXdfbWFwKSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTU4LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk1OTpcdGlmIChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLmZsYWdzIFx1MDAyNiBCUEZfRl9SRVBMQUNFKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTYwOlx0XHRvbGRfbWFwID0gYnBmX21hcF9nZXQoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5vbGRfbWFwX2ZkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NjEtXHRcdGlmIChJU19FUlIob2xkX21hcCkpIHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTY0LVx0XHR9XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTY1Olx0fSBlbHNlIGlmIChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm9sZF9tYXBfZmQpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NjYtXHRcdHJldCA9IC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk3OC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5Nzk6I2RlZmluZSBCUEZfTElOS19VUERBVEVfTEFTVF9GSUVMRCBsaW5rX3VwZGF0ZS5vbGRfcHJvZ19mZFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk4MC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5ODE6c3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5ODIte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTAtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTkxOlx0ZmxhZ3MgPSBhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLmZsYWdzO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk5Mi1cdGlmIChmbGFncyBcdTAwMjYgfkJQRl9GX1JFUExBQ0UpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk5NC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5OTU6XHRsaW5rID0gYnBmX2xpbmtfZ2V0X2Zyb21fZmQoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5saW5rX2ZkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTYtXHRpZiAoSVNfRVJSKGxpbmspKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTktXHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNldXBkYXRlX21hcCkge1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAwMDpcdFx0cmV0ID0gbGlua191cGRhdGVfbWFwKGxpbmssIGF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAwMS1cdFx0Z290byBvdXRfcHV0X2xpbms7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAwMy1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMDQ6XHRuZXdfcHJvZyA9IGJwZl9wcm9nX2dldChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm5ld19wcm9nX2ZkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMDUtXHRpZiAoSVNfRVJSKG5ld19wcm9nKSkge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMTAtXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1JFUExBQ0UpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMTE6XHRcdG9sZF9wcm9nID0gYnBmX3Byb2dfZ2V0KGF0dHItXHUwMDNlbGlua191cGRhdGUub2xkX3Byb2dfZmQpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAxMi1cdFx0aWYgKElTX0VSUihvbGRfcHJvZykpIHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDE2LVx0XHR9XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDE3Olx0fSBlbHNlIGlmIChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDE4LVx0XHRyZXQgPSAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzNTQ9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0OTUtXHRjYXNlIEJQRl9MSU5LX1VQREFURTpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0OTY6XHRcdGVyciA9IGxpbmtfdXBkYXRlKFx1MDAyNmF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ5Ny1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NDgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBTeW1ib2wgVXNhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgX19zeXNfYnBmYCBjYWxsIHdpdGggYEJQRl9MSU5LX1VQREFURWAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGVzZSBzeW1ib2xzOiBgbGlua191cGRhdGVgLCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLCBhbmQgYGNncm91cF9icGZfcmVwbGFjZWAuIEhtbSwgd2FpdCBhIG1pbnV0ZSwgYGxpbmtfdXBkYXRlYCBpcyBzdGF0aWMuIFRoYXQmIzM5O3MgYSBzeXNjYWxsIGVudHJ5LiAgU28gaXMgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYC4gQW5kIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLiBOb3csIGFyZSBhbnkgb2YgdGhlbSAqbm90KiBzdGF0aWM/IExldCBtZSBkb3VibGUtY2hlY2suLi4gWWVzLCBgY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBpbmRlZWQgc3RhdGljLiBTbyBpcyBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLiBEYW1uLiBgbGlua191cGRhdGVgIGlzIHN0YXRpYyB0b28uIE9rYXksIGxldCBtZSBmaW5kIHNvbWV0aGluZyBub24tc3RhdGljLi4uIGBicGZfbGlua191cGRhdGVgPyBObywgdGhhdOKAmXMganVzdCBhIHBvaW50ZXIgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgZXNzZW50aWFsbHkgcG9pbnRpbmcgdG8gYGxpbmtfdXBkYXRlYC4KCkFscmlnaHQsIGxldCYjMzk7cyBjaXJjbGUgYmFjay4gSSB0aGluayBJIGhhdmUgdHdvIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCB3aWxsIHdvcms6IGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGFuZCBgbGlua191cGRhdGVgLiBUaGVuIHRoZSBpbnN0cnVjdGlvbnMgcG9wIHVwLiAmIzM0O1ByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyYjMzQ7LiBSaWdodC4gV2VsbCwgYGxpbmtfdXBkYXRlYCBpcyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBwcmV0dHkgc3Vic3RhbnRpYWw7IHRoZSBjb21waWxlciBpcyBwcm9iYWJseSAqbm90KiBpbmxpbmluZyB0aGF0LiBgY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBzdGF0aWMsIGJ1dCBiZWNhdXNlIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgdGhlIGNvbXBpbGVyICpjYW4mIzM5O3QqIGlubGluZSBpdCwgc28gdGhhdCYjMzk7cyBnb29kISBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIHN0YXRpYywgYW5kIHRoYXQgY291bGQgYmUgaW5saW5lZC4gT2ssIGxldCBtZSBkb3VibGUgY2hlY2sgdGhhdCBgX19zeXNfYnBmYCBpcyBub3Qgc3RhdGljLiBJdCBpc24mIzM5O3QsIGJ1dCB0aGF0IHRoaW5nIGlzIGEgaHVnZSBtdWx0aXBsZXhlci4KClNvLCBJJiMzOTtsbCBnbyB3aXRoIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGFuZCBgbGlua191cGRhdGVgLiBJIHRoaW5rIHRoYXQmIzM5O3MgdGhlIGJlc3Qgb3B0aW9uIGhlcmUuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhlIGNvbmZpZ3MgYXJlIHJpZ2h0LiBgQ09ORklHX0NHUk9VUF9CUEZgIGlzIGRlZmluaXRlbHkgbmVlZGVkLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBpbiBga2VybmVsL2JwZi9NYWtlZmlsZWAgYW5kIGBrZXJuZWwvYnBmL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MzU9ZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzY6b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICYjNDM7PSBjZ3JvdXAub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zNy1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzcxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBCUEYgd2l0aCBDR3JvdXBzKioKCkFscmlnaHQsIHRoZSBpbml0aWFsIGNsdWUgaXMgY2xlYXI6IEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgQ09ORklHX0NHUk9VUF9CUEZgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBOb3csIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYSBicm9hZGVyIGFzc2Vzc21lbnQuIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIGxhbmRzY2FwZS4gSSBjYW4mIzM5O3QganVzdCBzdG9wIGF0IHRoZSBvYnZpb3VzLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMsIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMsIGFuZCBicm9hZGVyIGltcGxpY2F0aW9ucyBmb3IgaG93IEkmIzM5O2xsIGRlc2lnbiBhbmQgaW1wbGVtZW50IHRoaXMgQlBGLWJhc2VkIHN5c3RlbSB3aXRoIENHcm91cHMuIFdoYXQgb3RoZXIgY29uZmlncyB3aWxsIGJlY29tZSBuZWNlc3NhcnksIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gY2hvaWNlcyBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cz8gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbmVlZCB0byBjaGVjayBmb3IgdGhpbmdzIGxpa2U6IGFyZSB0aGVyZSBhbnkgc2VjdXJpdHktcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IG5lZWQgYWRqdXN0bWVudCwgb3IgcGVyaGFwcyBzb21lIG5ldHdvcmsgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudD8gVGhpcyBpbml0aWFsIGNvbmZpZ3VyYXRpb24gY2hlY2sgaXMganVzdCBhIHN0YXJ0aW5nIHBvaW50LCBpdCBpcyBpbXBlcmF0aXZlIHRvIGlkZW50aWZ5IHRoZSBmdWxsIHNldCBvZiBkZXBlbmRlbmNpZXMuIFRoaXMgaXMganVzdCB0aGUgZmlyc3Qgc3RlcCBpbiBhIHByb3BlciBkZWVwLWRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3BhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDR1JPVVBfQlBGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMzQxPWNvbmZpZyBDR1JPVVBfUEVSRlxuLS1cbmluaXQvS2NvbmZpZy0xMzUxLVxuaW5pdC9LY29uZmlnOjEzNTI6Y29uZmlnIENHUk9VUF9CUEZcbmluaXQvS2NvbmZpZy0xMzUzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEzMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGBDR1JPVVBfQlBGYCBEZXBlbmRlbmNpZXMgaW4gYGluaXQvS2NvbmZpZ2AqKgoKT2theSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtaWdodCBiZSBjb250aW5nZW50IG9uIGBDR1JPVVBfQlBGYC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBhIGZlYXR1cmUgYXMgc2lnbmlmaWNhbnQgYXMgQlBGIHN1cHBvcnQgZm9yIGNncm91cHMuIGBpbml0L0tjb25maWdgIGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIFRoaXMgZmlsZSBvZnRlbiBkZWZpbmVzIHRoZSBjb3JlIG9wdGlvbnMsIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzLiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSBzY2FuIGl0LCBsb29raW5nIGZvciBhbnkgYGRlcGVuZHMgb25gIGNsYXVzZXMgdGhhdCBpbmNsdWRlIGBDR1JPVVBfQlBGYCBvciBhbnkgcmVmZXJlbmNlcyB0aGF0IG1pZ2h0IGluZGlyZWN0bHkgcmVsYXRlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGluZ3MgbGlrZSBuZXR3b3JrLCBzZWN1cml0eSwgb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBmZWF0dXJlcyB0aGF0IG1pZ2h0IGxldmVyYWdlIGNncm91cCBCUEYuIFRoaXMgYW5hbHlzaXMgaXMgY3JpdGljYWwgdG8gYXZvaWQgYW55IHVuZXhwZWN0ZWQgYnVpbGQgZXJyb3JzIG9yIHJ1bnRpbWUgaW5jb21wYXRpYmlsaXRpZXMgbGF0ZXIgb24uIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgc3lzdGVtIGlzIGhpZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENHUk9VUF9CUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEzNDE9Y29uZmlnIENHUk9VUF9QRVJGXG4tLVxuaW5pdC9LY29uZmlnLTEzNTEtXG5pbml0L0tjb25maWc6MTM1Mjpjb25maWcgQ0dST1VQX0JQRlxuaW5pdC9LY29uZmlnLTEzNTMtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDgwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlJiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHVudGFuZ2xpbmcgdGhpcyBjb25maWd1cmF0aW9uIHB1enpsZT8gR2l2ZW4gdGhlIGNvbnRleHQsIEkgc3VzcGVjdCB3ZSYjMzk7cmUgbG9va2luZyBhdCBzb21ldGhpbmcgY29yZSB0byB0aGUgaW5pdGlhbCBzZXR1cCwgbWF5YmUgcmVsYXRlZCB0byBkcml2ZXJzLCBvciBib290IHByb2Nlc3MgZmxhZ3MuIFRoZSBsaWtlbHkgbG9jYXRpb24gaXMgZ29pbmcgdG8gYmUgd2l0aGluIHRoZSBgaW5pdC9gIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IHRoZSBgS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbSwgdGhlIHBsYWNlIHdoZXJlIGFsbCB0aGUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkLiBUaGUgbGluZSBudW1iZXJzIGFyZSwgYnkgZGVmaW5pdGlvbiwgZmx1aWQgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbiwgc28gSSYjMzk7bSBhaW1pbmcgZm9yIHJvdWdobHkgbGluZSAxMzUyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHBhcnRpY3VsYXIgc2VjdGlvbiB0byBiZSBhYmxlIHRvIGZvbGxvdyB0aGUgbG9naWMgYW5kIGhvdyB0aGUgdmFyaWFibGVzIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGludGVyLXJlbGF0ZWQuIEkgbmVlZCB0byBiZSBhYmxlIHRvIGlkZW50aWZ5IHRoZSBpbXBvcnRhbnQgcGFyYW1ldGVycyBhbmQgZmlndXJlIG91dCBob3cgdGhleSBpbnRlcmFjdC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIHVuZWFydGggZnJvbSB0aGF0IHNwZWNpZmljIHNlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzUwOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEzNTE6XHRcbjEzNTI6XHRjb25maWcgQ0dST1VQX0JQRlxuMTM1MzpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcJiMzNDtcbjEzNTQ6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbjEzNTU6XHRcdHNlbGVjdCBTT0NLX0NHUk9VUF9EQVRBXG4xMzU2Olx0XHRoZWxwXG4xMzU3Olx0XHQgIEFsbG93IGF0dGFjaGluZyBlQlBGIHByb2dyYW1zIHRvIGEgY2dyb3VwIHVzaW5nIHRoZSBicGYoMilcbjEzNTg6XHRcdCAgc3lzY2FsbCBjb21tYW5kIEJQRl9QUk9HX0FUVEFDSC5cbjEzNTk6XHRcbjEzNjA6XHRcdCAgSW4gd2hpY2ggY29udGV4dCB0aGVzZSBwcm9ncmFtcyBhcmUgYWNjZXNzZWQgZGVwZW5kcyBvbiB0aGUgdHlwZVxuMTM2MTpcdFx0ICBvZiBhdHRhY2htZW50LiBGb3IgaW5zdGFuY2UsIHByb2dyYW1zIHRoYXQgYXJlIGF0dGFjaGVkIHVzaW5nXG4xMzYyOlx0XHQgIEJQRl9DR1JPVVBfSU5FVF9JTkdSRVNTIHdpbGwgYmUgZXhlY3V0ZWQgb24gdGhlIGluZ3Jlc3MgcGF0aCBvZlxuMTM2MzpcdFx0ICBpbmV0IHNvY2tldHMuXG4xMzY0Olx0XG4xMzY1Olx0Y29uZmlnIENHUk9VUF9NSVNDXG4xMzY2Olx0XHRib29sIFwmIzM0O01pc2MgcmVzb3VyY2UgY29udHJvbGxlclwmIzM0O1xuMTM2NzpcdFx0ZGVmYXVsdCBuXG4xMzY4Olx0XHRoZWxwXG4xMzY5Olx0XHQgIFByb3ZpZGVzIGEgY29udHJvbGxlciBmb3IgbWlzY2VsbGFuZW91cyByZXNvdXJjZXMgb24gYSBob3N0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQyCgkJCQkJCQlvdXRwdXQ6IDEzNQoJCQkJCQkJdGhvdWdodHM6IDQ5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIENncm91cCBMaW5rIFJlcGxhY2VtZW50IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNoYW5nZSBpbiBob3cgd2UgaGFuZGxlIEJQRiBwcm9ncmFtIHJlcGxhY2VtZW50IGluIGNncm91cCBsaW5rcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBgQ0dST1VQX0JQRmAgKmRlZmluaXRlbHkqIGRlcGVuZHMgb24gYEJQRl9TWVNDQUxMYCwgc28gd2UgbmVlZCB0byBlbnN1cmUgYm90aCBhcmUgaW5jbHVkZWQgaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0JiMzOTtzIGEgbm8tYnJhaW5lci4KCk5vdywgSSYjMzk7dmUgZ290IHRvIGNvbmZpcm0gd2hlcmUgdGhlIG5ldyBsb2dpYyBpcyBhY3R1YWxseSAqdXNlZCouIEkgcmVtZW1iZXIgc2VlaW5nIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGFuZCwgeWVzLCBhIHF1aWNrIGNoZWNrIGluIGBicGZfY2dyb3VwX2xpbmtfbG9wc2Agc2hvd3MgdGhhdCBpdCAqaXMqIGluZGVlZCBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIuIEdvb2QuCgpMZXQmIzM5O3MgZGlzc2VjdCB0aGUgZnVuY3Rpb25hbGl0eS4gVGhlIHBhdGNoIGFkZHMgYGNncm91cF9icGZfc3RvcmFnZXNfY29tcGF0aWJsZWAsIHdoaWNoIGNoZWNrcyBmb3IgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHRoZSBvbGQgYW5kIG5ldyBwcm9ncmFtcyYjMzk7IGBjZ3JvdXBfc3RvcmFnZWAgc3RydWN0dXJlcy4gSWYgdGhleSYjMzk7cmUgKm5vdCogY29tcGF0aWJsZSwgaXQgcmV0dXJucyBgLUVJTlZBTGAuIENsYXNzaWMuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgYWx0ZXJpbmcgdGhlIEJQRiBjZ3JvdXAgbGluayByZXBsYWNlbWVudCBwcm9jZWR1cmUuIFRoaXMgcGFydCBvZiB0aGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHRocm91Z2ggdGhlIGBicGYoKWAgc3lzY2FsbCwgc3BlY2lmaWNhbGx5IHRoZSBgQlBGX0xJTktfVVBEQVRFYCBjb21tYW5kLiBUaGF0JiMzOTtzIG91ciBhdHRhY2sgdmVjdG9yLgoKRm9yIGZ1enppbmcgcHVycG9zZXMsIHRoZSBtb3N0IHJlbGV2YW50IHN5bWJvbHMgd2lsbCBiZSBgY2dyb3VwX2JwZl9yZXBsYWNlYCBhbmQgYGxpbmtfdXBkYXRlYCwgd2hpY2ggaXMgbG9jYXRlZCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBBbHRob3VnaCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgYGNncm91cF9icGZfcmVwbGFjZWAgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldC4gV2UgZG9uJiMzOTt0IHdhbnQgdG8gZ2V0IHRvbyBnZW5lcmFsIHdpdGggdGhlIGZvY3VzLgoKU28sIHRoZSByZWFzb25pbmcgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBjaGFuZ2VzIGhvdyB3ZSByZXBsYWNlIEJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXAgbGlua3MuIEl0IGludHJvZHVjZXMgYSBuZXcgY29tcGF0aWJpbGl0eSBjaGVjaywgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdGhyb3VnaCBgQlBGX0xJTktfVVBEQVRFYC4gV2UgbmVlZCB0byBmdXp6IGl0IGV4dGVuc2l2ZWx5IHRvIGVuc3VyZSBpdCBoYW5kbGVzIGFsbCBraW5kcyBvZiB2YWxpZCBhbmQgaW52YWxpZCBwcm9ncmFtIGNvbmZpZ3VyYXRpb25zIGdyYWNlZnVsbHkuCgpJJiMzOTttIGNvbWZvcnRhYmxlIHdpdGggdGhlIHN5bWJvbCBzZWxlY3Rpb24uIE9rYXksIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nncm91cF9icGZfcmVwbGFjZSYjMzQ7LAogICAgJiMzNDtsaW5rX3VwZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY29tcGF0aWJpbGl0eSBjaGVjayBmb3IgY2dyb3VwIHN0b3JhZ2Ugd2hlbiByZXBsYWNpbmcgYSBCUEYgcHJvZ3JhbSBhdHRhY2hlZCB0byBhIGNncm91cCBsaW5rLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiB0aGUgQlBGX0xJTktfVVBEQVRFIHN5c2NhbGwgcGF0aC4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGhhbmRsZXMgdmFyaW91cyBCUEYgcHJvZ3JhbSBjb25maWd1cmF0aW9ucyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZ3JvdXBfYnBmX3JlcGxhY2UmIzM0OywKICAgICYjMzQ7bGlua191cGRhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNvbXBhdGliaWxpdHkgY2hlY2sgZm9yIGNncm91cCBzdG9yYWdlIHdoZW4gcmVwbGFjaW5nIGEgQlBGIHByb2dyYW0gYXR0YWNoZWQgdG8gYSBjZ3JvdXAgbGluay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gdGhlIEJQRl9MSU5LX1VQREFURSBzeXNjYWxsIHBhdGguIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBoYW5kbGVzIHZhcmlvdXMgQlBGIHByb2dyYW0gY29uZmlndXJhdGlvbnMgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDM6NTY6MDIuOTA3ODYwMzc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA1NTc3OTc4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZ3JvdXBfYnBmX3JlcGxhY2VcIixcbiAgICBcImxpbmtfdXBkYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNvbXBhdGliaWxpdHkgY2hlY2sgZm9yIGNncm91cCBzdG9yYWdlIHdoZW4gcmVwbGFjaW5nIGEgQlBGIHByb2dyYW0gYXR0YWNoZWQgdG8gYSBjZ3JvdXAgbGluay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gdGhlIEJQRl9MSU5LX1VQREFURSBzeXNjYWxsIHBhdGguIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBoYW5kbGVzIHZhcmlvdXMgQlBGIHByb2dyYW0gY29uZmlndXJhdGlvbnMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMzo1NjowMi45MDc4NjQ5NDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODc4NDUxNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMjFmYjEzYTM0N2EyOTQwOTBhZGQ3OGZmZTkzMTAxNjVhNjhmNDNlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMDM6NTY6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcXG5pbmRleCA0MzU1Y2NiNzhhOWM2Li41Y2M5YjJkOTJmZDU4IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvY2dyb3VwLmNcXG4rKysgYi9rZXJuZWwvYnBmL2Nncm91cC5jXFxuQEAgLTEwMTgsNiArMTAxOCwyMCBAQCBzdGF0aWMgdm9pZCByZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cpXFxuK3tcXG4rXFx0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTtcXG4rXFxuK1xcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpIHtcXG4rXFx0XFx0aWYgKG9sZF9wcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWNncm91cF9zdG9yYWdlW3N0eXBlXSAhPVxcbitcXHRcXHQgICAgbmV3X3Byb2ctXFx1MDAzZWF1eC1cXHUwMDNlY2dyb3VwX3N0b3JhZ2Vbc3R5cGVdKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiAvKipcXG4gICogX19jZ3JvdXBfYnBmX3JlcGxhY2UoKSAtIFJlcGxhY2UgbGluaydzIHByb2dyYW0gYW5kIHByb3BhZ2F0ZSB0aGUgY2hhbmdlXFxuICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkZXNjZW5kYW50c1xcbkBAIC0xMDU2LDYgKzEwNzAsOSBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuIFxcdGlmICghZm91bmQpXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG4rXFx0aWYgKCFjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUobGluay1cXHUwMDNlbGluay5wcm9nLCBuZXdfcHJvZykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0Y2dycC1cXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0gKz0gMTtcXG4gXFx0b2xkX3Byb2cgPSB4Y2hnKFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKTtcXG4gXFx0cmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMzo1NjowMy45OTY1MjkxNzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozOTQ2OTExODAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNncm91cF9icGZfcmVwbGFjZVwiLFxuICAgIFwibGlua191cGRhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY29tcGF0aWJpbGl0eSBjaGVjayBmb3IgY2dyb3VwIHN0b3JhZ2Ugd2hlbiByZXBsYWNpbmcgYSBCUEYgcHJvZ3JhbSBhdHRhY2hlZCB0byBhIGNncm91cCBsaW5rLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiB0aGUgQlBGX0xJTktfVVBEQVRFIHN5c2NhbGwgcGF0aC4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGhhbmRsZXMgdmFyaW91cyBCUEYgcHJvZ3JhbSBjb25maWd1cmF0aW9ucyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDEyMWZiMTNhMzQ3YTI5NDA5MGFkZDc4ZmZlOTMxMDE2NWE2OGY0M2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDAzOjU2OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbmluZGV4IDQzNTVjY2I3OGE5YzYuLjVjYzliMmQ5MmZkNTggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXG4rKysgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5AQCAtMTAxOCw2ICsxMDE4LDIwIEBAIHN0YXRpYyB2b2lkIHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coc3RydWN0IGNncm91cCAqY2dycCxcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cpXG4re1xuK1x0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTtcbitcbitcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpIHtcbitcdFx0aWYgKG9sZF9wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0gIT1cbitcdFx0ICAgIG5ld19wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0pXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIC8qKlxuICAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsncyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZVxuICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkZXNjZW5kYW50c1xuQEAgLTEwNTYsNiArMTA3MCw5IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCxcbiBcdGlmICghZm91bmQpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuK1x0aWYgKCFjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUobGluay1cdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRjZ3JwLVx1MDAzZWJwZi5yZXZpc2lvbnNbYXR5cGVdICs9IDE7XG4gXHRvbGRfcHJvZyA9IHhjaGcoXHUwMDI2bGluay1cdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKTtcbiBcdHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coY2dycCwgYXR5cGUsIHBsKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAzOjU2OjAzLjk5NjUzMTYxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODAyMjExMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIFBhdGNoIGZvciBDZ3JvdXAgQ29tcGF0aWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhZGRpbmcgYSBjb21wYXRpYmlsaXR5IGNoZWNrIHdpdGhpbiB0aGUgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCdzIGNhbGxpbmcgdGhpcyBuZXcgZnVuY3Rpb24sIGBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGVgLCByaWdodCBiZWZvcmUgdGhlIHJlcGxhY2VtZW50IGhhcHBlbnMuIFRoZSBsb2dpYyBpcyBzdHJhaWdodGZvcndhcmQ6IGl0J3MgY29tcGFyaW5nIHRoZSBgY2dyb3VwX3N0b3JhZ2VgIGVudHJpZXMgZm9yIHRoZSBvbGQgYW5kIG5ldyBCUEYgcHJvZ3JhbXMgKGBvbGRfcHJvZ2AgYW5kIGBuZXdfcHJvZ2AsIHJlc3BlY3RpdmVseSkgYXQgYSBzcGVjaWZpYyBgc3R5cGVgLiBJZiB0aG9zZSBzdG9yYWdlcyBhcmVuJ3QgY29tcGF0aWJsZSwgaXQgdGhyb3dzIGEgYC1FSU5WQUxgIGVycm9yLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB0aGF0IHNlZW1zIHNlbnNpYmxlLi4uIHdlIGRvbid0IHdhbnQgdG8gYnJlYWsgdGhpbmdzIGJ5IHJlcGxhY2luZyBhIEJQRiBwcm9ncmFtIHdpdGggb25lIHRoYXQgZXhwZWN0cyBhIGRpZmZlcmVudCBjZ3JvdXAgc3RvcmFnZSBzZXR1cC5cIlxuXG5Ob3csIG15IG5leHQgbW92ZSBpcyB0byBnbyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCogb2YgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYC4gV2hhdCdzIGhhcHBlbmluZyAqYXJvdW5kKiB0aGlzIGNoZWNrPyBXaGF0IGFyZSB0aGUgc2NlbmFyaW9zIHdoZXJlIGEgQlBGIHByb2dyYW0gaXMgYmVpbmcgcmVwbGFjZWQgd2l0aGluIGEgY2dyb3VwPyBJJ3ZlIGdvdCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoaXMgY29tcGF0aWJpbGl0eSBjaGVjay4gSXMgaXQgdG9vIHJlc3RyaWN0aXZlPyBEb2VzIGl0IGNhdGNoIGFsbCB0aGUgaW1wb3J0YW50IGNhc2VzPyBBcmUgdGhlcmUgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnM/IEknbGwgcHJvYmFibHkgYmUgZGl2aW5nIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGJpZ2dlciBwaWN0dXJlIGJlZm9yZSBJIGdpdmUgaXQgbXkgZmluYWwgc3RhbXAgb2YgYXBwcm92YWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMzo1NjowNy42NzY3NTUzNDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzNTk3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jZ3JvdXBfYnBmX3JlcGxhY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jPTEwMjE9c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMzUtLyoqXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDM2OiAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsncyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNy0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHNcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA0NC0gKi9cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwNDU6c3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA0Ni1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMDgzPXN0YXRpYyBpbnQgY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMC1cXHR9XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTAxOlxcdHJldCA9IF9fY2dyb3VwX2JwZl9yZXBsYWNlKGNnX2xpbmstXFx1MDAzZWNncm91cCwgY2dfbGluaywgbmV3X3Byb2cpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMi1vdXRfdW5sb2NrOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMzo1NjowNy43MjAxMjA3MDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTk3MzcxMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBgY2dyb3VwX2JwZl9yZXBsYWNlYCoqXG5cbkFscmlnaHQsIHNvIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIGNsZWFybHkgdGhlIGVudHJ5IHBvaW50LCB1bHRpbWF0ZWx5IGNhbGxpbmcgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYC4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyByZXBsYWNlbWVudCBvcGVyYXRpb24uIFRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byB0cmFjZSB0aGUgdXNhZ2VzIG9mIHRoYXQgZmlyc3QgZnVuY3Rpb24sIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyB0aGluZyBpcyBhY3R1YWxseSBpbnZva2VkLiBJcyBpdCBjYWxsZWQgZGlyZWN0bHksIG9yIGlzIGl0IGFzc2lnbmVkIHRvIHNvbWUgY2FsbGJhY2s/IEkgbmVlZCB0byBzZWUgdGhlIGRpZmZlcmVudCBzY2VuYXJpb3Mgd2hlcmUgdGhlIEJQRiBwcm9ncmFtIGZvciBhIGNncm91cCBpcyB1cGRhdGVkIG9yIGNoYW5nZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHJlcGxhY2VtZW50IHByb2Nlc3MgaXRzZWxmLiBTbywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRpZmZlcmVudCB3YXlzIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIGNhbGxlZCBvciB3aGF0IGl0IGlzIGFzc2lnbmVkIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDY2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDM6NTY6MTAuNzE3NDk0MzY3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzY3ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNncm91cF9icGZfcmVwbGFjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9MTAyMT1zdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUoc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNS0vKipcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMzY6ICogX19jZ3JvdXBfYnBmX3JlcGxhY2UoKSAtIFJlcGxhY2UgbGluaydzIHByb2dyYW0gYW5kIHByb3BhZ2F0ZSB0aGUgY2hhbmdlXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM3LSAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkZXNjZW5kYW50c1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ0LSAqL1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTA0NTpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ2LVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwODItXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDgzOnN0YXRpYyBpbnQgY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwODQtXFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMC1cXHR9XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTAxOlxcdHJldCA9IF9fY2dyb3VwX2JwZl9yZXBsYWNlKGNnX2xpbmstXFx1MDAzZWNncm91cCwgY2dfbGluaywgbmV3X3Byb2cpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMi1vdXRfdW5sb2NrOlxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNTE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9jZ3JvdXBfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTE5LVxcdC5kZXRhY2ggPSBicGZfY2dyb3VwX2xpbmtfZGV0YWNoLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTUyMDpcXHQudXBkYXRlX3Byb2cgPSBjZ3JvdXBfYnBmX3JlcGxhY2UsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTIxLVxcdC5zaG93X2ZkaW5mbyA9IGJwZl9jZ3JvdXBfbGlua19zaG93X2ZkaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDM6NTY6MTAuNzY0ODY0Njc0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxNjA2MTA5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCUEYgQ2dyb3VwIExpbmsgVXBkYXRlOiBBIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgQlBGIGNncm91cCBsaW5rcyBhcmUgdXBkYXRlZC4gVGhlIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGZ1bmN0aW9uIGlzIG5vdyBiZWluZyBhc3NpZ25lZCB0byB0aGUgYC51cGRhdGVfcHJvZ2AgZmllbGQgd2l0aGluIGBicGZfY2dyb3VwX2xpbmtfbG9wc2AuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGNsb3NlciBsb29rLCBhIHJlYWwgZnV6emluZyB0YXJnZXQgaW4gbXkgb3Bpbmlvbi5cblxuTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgb24gdGhlIGZ1bmN0aW9ucyBgY2dyb3VwX2JwZl9yZXBsYWNlYCBhbmQgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYC4gSG1tLCBgY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBidXQgaXQncyBzdGlsbCBiZWluZyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIg4oCTIHNvbWV0aGluZyBpcyBkZWZpbml0ZWx5IGhhcHBlbmluZyB0aGVyZS5cblxuTGV0J3MgcXVpY2tseSBjaGVjayBob3cgYGJwZl9jZ3JvdXBfbGlua19sb3BzYCBpcyBhY3R1YWxseSB1c2VkLiBBaCwgeWVzLCBpdCdzIHRoZSBvcGVyYXRpb25zIHN0cnVjdHVyZSBmb3IgY2dyb3VwIEJQRiBsaW5rcywgY29uZmlybWluZyB0aGlzIGlzIHRoZSBjb3JyZWN0IGFyZWEuIFNvLCB0aGF0IG1lYW5zIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcyB3aG9sZSBwcm9jZXNzIHNob3VsZCBiZSBzb21ld2hlcmUgYXJvdW5kIGBicGZfbGlua191cGRhdGVgIG9yIHNvbWV0aGluZyBjb21wYXJhYmxlLCBwcm9iYWJseSBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBHb3QgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NTYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDM6NTY6MTQuNTgwOTI3MjY2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDY4MjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVwZGF0ZV9wcm9nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTU5ODE9c3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMjEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAyMjpcXHRpZiAobGluay1cXHUwMDNlb3BzLVxcdTAwM2V1cGRhdGVfcHJvZylcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDIzOlxcdFxcdHJldCA9IGxpbmstXFx1MDAzZW9wcy1cXHUwMDNldXBkYXRlX3Byb2cobGluaywgbmV3X3Byb2csIG9sZF9wcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDI0LVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDM6NTY6MTQuNjI2Mzk5MzEyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc0MTc0NjMxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipBbmFseXppbmcgdGhlIGBsaW5rX3VwZGF0ZWAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBUaGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgc2VjdGlvbiBpcyBjbGVhcmx5IHRoZSBgbGlua191cGRhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIG1vdmUgaXMgdG8gZGV0ZXJtaW5lIGl0cyBzY29wZS4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBpcyBzdGF0aWMuIEtub3dpbmcgaXRzIGxpbmthZ2Ug4oCTIHdoZXRoZXIgaXQncyBjb25maW5lZCB0byB0aGUgY3VycmVudCB0cmFuc2xhdGlvbiB1bml0IG9yIHZpc2libGUgZ2xvYmFsbHkg4oCTIHByb2ZvdW5kbHkgaW1wYWN0cyBob3cgSSdsbCBhcHByb2FjaCB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgaW50ZXJuYWwgdXRpbGl0eSwgb3Igc29tZXRoaW5nIHRoYXQncyBpbnRlbmRlZCBmb3IgYnJvYWRlciB1c2U/IFRoYXQncyB0aGUgZmlyc3QgcXVlc3Rpb24gSSBuZWVkIGFuc3dlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDM4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDM6NTY6MTcuMzY4MTQ3OTE5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE2MjU1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsaW5rX3VwZGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz01ODQ0PXN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk0OS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTUwOnN0YXRpYyBpbnQgbGlua191cGRhdGVfbWFwKHN0cnVjdCBicGZfbGluayAqbGluaywgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk1MS17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTU0LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5NTU6XFx0bmV3X21hcCA9IGJwZl9tYXBfZ2V0KGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm5ld19tYXBfZmQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTYtXFx0aWYgKElTX0VSUihuZXdfbWFwKSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTgtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk1OTpcXHRpZiAoYXR0ci1cXHUwMDNlbGlua191cGRhdGUuZmxhZ3MgXFx1MDAyNiBCUEZfRl9SRVBMQUNFKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk2MDpcXHRcXHRvbGRfbWFwID0gYnBmX21hcF9nZXQoYXR0ci1cXHUwMDNlbGlua191cGRhdGUub2xkX21hcF9mZCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk2MS1cXHRcXHRpZiAoSVNfRVJSKG9sZF9tYXApKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTY0LVxcdFxcdH1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTY1OlxcdH0gZWxzZSBpZiAoYXR0ci1cXHUwMDNlbGlua191cGRhdGUub2xkX21hcF9mZCkge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NjYtXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NzgtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk3OTojZGVmaW5lIEJQRl9MSU5LX1VQREFURV9MQVNUX0ZJRUxEIGxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk4MC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTgxOnN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk4Mi17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTkwLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5OTE6XFx0ZmxhZ3MgPSBhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5mbGFncztcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTkyLVxcdGlmIChmbGFncyBcXHUwMDI2IH5CUEZfRl9SRVBMQUNFKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk5NC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTk1OlxcdGxpbmsgPSBicGZfbGlua19nZXRfZnJvbV9mZChhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5saW5rX2ZkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTk2LVxcdGlmIChJU19FUlIobGluaykpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTk5LVxcdGlmIChsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZXVwZGF0ZV9tYXApIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDAwOlxcdFxcdHJldCA9IGxpbmtfdXBkYXRlX21hcChsaW5rLCBhdHRyKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDAxLVxcdFxcdGdvdG8gb3V0X3B1dF9saW5rO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAwMy1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDA0OlxcdG5ld19wcm9nID0gYnBmX3Byb2dfZ2V0KGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm5ld19wcm9nX2ZkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDA1LVxcdGlmIChJU19FUlIobmV3X3Byb2cpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDEwLVxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GX1JFUExBQ0UpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDExOlxcdFxcdG9sZF9wcm9nID0gYnBmX3Byb2dfZ2V0KGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDEyLVxcdFxcdGlmIChJU19FUlIob2xkX3Byb2cpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDE2LVxcdFxcdH1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDE3OlxcdH0gZWxzZSBpZiAoYXR0ci1cXHUwMDNlbGlua191cGRhdGUub2xkX3Byb2dfZmQpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDE4LVxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzU0PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0OTUtXFx0Y2FzZSBCUEZfTElOS19VUERBVEU6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQ5NjpcXHRcXHRlcnIgPSBsaW5rX3VwZGF0ZShcXHUwMDI2YXR0cik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ5Ny1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDM6NTY6MTcuNDE0MzEzMTI2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMTQ2NzM2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBTeW1ib2wgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYF9fc3lzX2JwZmAgY2FsbCB3aXRoIGBCUEZfTElOS19VUERBVEVgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlc2Ugc3ltYm9sczogYGxpbmtfdXBkYXRlYCwgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCwgYW5kIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLiBIbW0sIHdhaXQgYSBtaW51dGUsIGBsaW5rX3VwZGF0ZWAgaXMgc3RhdGljLiBUaGF0J3MgYSBzeXNjYWxsIGVudHJ5LiAgU28gaXMgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYC4gQW5kIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLiBOb3csIGFyZSBhbnkgb2YgdGhlbSAqbm90KiBzdGF0aWM/IExldCBtZSBkb3VibGUtY2hlY2suLi4gWWVzLCBgY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBpbmRlZWQgc3RhdGljLiBTbyBpcyBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLiBEYW1uLiBgbGlua191cGRhdGVgIGlzIHN0YXRpYyB0b28uIE9rYXksIGxldCBtZSBmaW5kIHNvbWV0aGluZyBub24tc3RhdGljLi4uIGBicGZfbGlua191cGRhdGVgPyBObywgdGhhdOKAmXMganVzdCBhIHBvaW50ZXIgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgZXNzZW50aWFsbHkgcG9pbnRpbmcgdG8gYGxpbmtfdXBkYXRlYC5cblxuQWxyaWdodCwgbGV0J3MgY2lyY2xlIGJhY2suIEkgdGhpbmsgSSBoYXZlIHR3byBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgd2lsbCB3b3JrOiBgY2dyb3VwX2JwZl9yZXBsYWNlYCBhbmQgYGxpbmtfdXBkYXRlYC4gVGhlbiB0aGUgaW5zdHJ1Y3Rpb25zIHBvcCB1cC4gXCJQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcIi4gUmlnaHQuIFdlbGwsIGBsaW5rX3VwZGF0ZWAgaXMgc3RhdGljLCBidXQgaXQncyBwcmV0dHkgc3Vic3RhbnRpYWw7IHRoZSBjb21waWxlciBpcyBwcm9iYWJseSAqbm90KiBpbmxpbmluZyB0aGF0LiBgY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBzdGF0aWMsIGJ1dCBiZWNhdXNlIGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCB0aGUgY29tcGlsZXIgKmNhbid0KiBpbmxpbmUgaXQsIHNvIHRoYXQncyBnb29kISBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIHN0YXRpYywgYW5kIHRoYXQgY291bGQgYmUgaW5saW5lZC4gT2ssIGxldCBtZSBkb3VibGUgY2hlY2sgdGhhdCBgX19zeXNfYnBmYCBpcyBub3Qgc3RhdGljLiBJdCBpc24ndCwgYnV0IHRoYXQgdGhpbmcgaXMgYSBodWdlIG11bHRpcGxleGVyLlxuXG5TbywgSSdsbCBnbyB3aXRoIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGFuZCBgbGlua191cGRhdGVgLiBJIHRoaW5rIHRoYXQncyB0aGUgYmVzdCBvcHRpb24gaGVyZS5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgdGhlIGNvbmZpZ3MgYXJlIHJpZ2h0LiBgQ09ORklHX0NHUk9VUF9CUEZgIGlzIGRlZmluaXRlbHkgbmVlZGVkLiBJJ2xsIHRha2UgYSBxdWljayBsb29rIGluIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzQ4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAzOjU2OjIzLjYyODk4OTE0OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzMzc1MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2dyb3VwLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTM1PWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZTozNjpvYmotJChDT05GSUdfQ0dST1VQX0JQRikgKz0gY2dyb3VwLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM3LWlmZXEgKCQoQ09ORklHX0lORVQpLHkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAzOjU2OjIzLjY3NDMyODkyNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDc1MTEwOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgZm9yIEJQRiB3aXRoIENHcm91cHMqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBjbHVlIGlzIGNsZWFyOiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYENPTkZJR19DR1JPVVBfQlBGYCBpcyBlbmFibGVkLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBOb3csIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYSBicm9hZGVyIGFzc2Vzc21lbnQuIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIGxhbmRzY2FwZS4gSSBjYW4ndCBqdXN0IHN0b3AgYXQgdGhlIG9idmlvdXMsIEknbSB0aGlua2luZyBhYm91dCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLCBhbmQgYnJvYWRlciBpbXBsaWNhdGlvbnMgZm9yIGhvdyBJJ2xsIGRlc2lnbiBhbmQgaW1wbGVtZW50IHRoaXMgQlBGLWJhc2VkIHN5c3RlbSB3aXRoIENHcm91cHMuIFdoYXQgb3RoZXIgY29uZmlncyB3aWxsIGJlY29tZSBuZWNlc3NhcnksIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gY2hvaWNlcyBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cz8gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBuZWVkIHRvIGNoZWNrIGZvciB0aGluZ3MgbGlrZTogYXJlIHRoZXJlIGFueSBzZWN1cml0eS1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgbmVlZCBhZGp1c3RtZW50LCBvciBwZXJoYXBzIHNvbWUgbmV0d29yayBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50PyBUaGlzIGluaXRpYWwgY29uZmlndXJhdGlvbiBjaGVjayBpcyBqdXN0IGEgc3RhcnRpbmcgcG9pbnQsIGl0IGlzIGltcGVyYXRpdmUgdG8gaWRlbnRpZnkgdGhlIGZ1bGwgc2V0IG9mIGRlcGVuZGVuY2llcy4gVGhpcyBpcyBqdXN0IHRoZSBmaXJzdCBzdGVwIGluIGEgcHJvcGVyIGRlZXAtZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzcGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc3MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAzOjU2OjI3LjE0OTQ0MjM0MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzMjE4MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENHUk9VUF9CUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMzQxPWNvbmZpZyBDR1JPVVBfUEVSRlxcbi0tXFxuaW5pdC9LY29uZmlnLTEzNTEtXFxuaW5pdC9LY29uZmlnOjEzNTI6Y29uZmlnIENHUk9VUF9CUEZcXG5pbml0L0tjb25maWctMTM1My1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAzOjU2OjI3LjE5Mjc2OTA5OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDYzMjMzNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBgQ0dST1VQX0JQRmAgRGVwZW5kZW5jaWVzIGluIGBpbml0L0tjb25maWdgKipcblxuT2theSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtaWdodCBiZSBjb250aW5nZW50IG9uIGBDR1JPVVBfQlBGYC4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGEgZmVhdHVyZSBhcyBzaWduaWZpY2FudCBhcyBCUEYgc3VwcG9ydCBmb3IgY2dyb3Vwcy4gYGluaXQvS2NvbmZpZ2AgaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gVGhpcyBmaWxlIG9mdGVuIGRlZmluZXMgdGhlIGNvcmUgb3B0aW9ucywgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMuIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgc2NhbiBpdCwgbG9va2luZyBmb3IgYW55IGBkZXBlbmRzIG9uYCBjbGF1c2VzIHRoYXQgaW5jbHVkZSBgQ0dST1VQX0JQRmAgb3IgYW55IHJlZmVyZW5jZXMgdGhhdCBtaWdodCBpbmRpcmVjdGx5IHJlbGF0ZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGluZ3MgbGlrZSBuZXR3b3JrLCBzZWN1cml0eSwgb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBmZWF0dXJlcyB0aGF0IG1pZ2h0IGxldmVyYWdlIGNncm91cCBCUEYuIFRoaXMgYW5hbHlzaXMgaXMgY3JpdGljYWwgdG8gYXZvaWQgYW55IHVuZXhwZWN0ZWQgYnVpbGQgZXJyb3JzIG9yIHJ1bnRpbWUgaW5jb21wYXRpYmlsaXRpZXMgbGF0ZXIgb24uIEl0J3MgdGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gaXMgaGlkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTMxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDM6NTY6MzEuNjU2MDA1MzA0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc1MTAzNDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDR1JPVVBfQlBGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTM0MT1jb25maWcgQ0dST1VQX1BFUkZcXG4tLVxcbmluaXQvS2NvbmZpZy0xMzUxLVxcbmluaXQvS2NvbmZpZzoxMzUyOmNvbmZpZyBDR1JPVVBfQlBGXFxuaW5pdC9LY29uZmlnLTEzNTMtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMzo1NjozMy4zMzExMTM4MzZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0NDM5NjkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCB3aGVyZSdzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHVudGFuZ2xpbmcgdGhpcyBjb25maWd1cmF0aW9uIHB1enpsZT8gR2l2ZW4gdGhlIGNvbnRleHQsIEkgc3VzcGVjdCB3ZSdyZSBsb29raW5nIGF0IHNvbWV0aGluZyBjb3JlIHRvIHRoZSBpbml0aWFsIHNldHVwLCBtYXliZSByZWxhdGVkIHRvIGRyaXZlcnMsIG9yIGJvb3QgcHJvY2VzcyBmbGFncy4gVGhlIGxpa2VseSBsb2NhdGlvbiBpcyBnb2luZyB0byBiZSB3aXRoaW4gdGhlIGBpbml0L2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgdGhlIGBLY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0sIHRoZSBwbGFjZSB3aGVyZSBhbGwgdGhlIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZC4gVGhlIGxpbmUgbnVtYmVycyBhcmUsIGJ5IGRlZmluaXRpb24sIGZsdWlkIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWMga2VybmVsIHZlcnNpb24sIHNvIEknbSBhaW1pbmcgZm9yIHJvdWdobHkgbGluZSAxMzUyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHBhcnRpY3VsYXIgc2VjdGlvbiB0byBiZSBhYmxlIHRvIGZvbGxvdyB0aGUgbG9naWMgYW5kIGhvdyB0aGUgdmFyaWFibGVzIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGludGVyLXJlbGF0ZWQuIEkgbmVlZCB0byBiZSBhYmxlIHRvIGlkZW50aWZ5IHRoZSBpbXBvcnRhbnQgcGFyYW1ldGVycyBhbmQgZmlndXJlIG91dCBob3cgdGhleSBpbnRlcmFjdC4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gdW5lYXJ0aCBmcm9tIHRoYXQgc3BlY2lmaWMgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ4MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAzOjU2OjM2LjY3NTUxNDE1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTM1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM1MDpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMzUxOlxcdFxcbjEzNTI6XFx0Y29uZmlnIENHUk9VUF9CUEZcXG4xMzUzOlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1xcXCJcXG4xMzU0OlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4xMzU1OlxcdFxcdHNlbGVjdCBTT0NLX0NHUk9VUF9EQVRBXFxuMTM1NjpcXHRcXHRoZWxwXFxuMTM1NzpcXHRcXHQgIEFsbG93IGF0dGFjaGluZyBlQlBGIHByb2dyYW1zIHRvIGEgY2dyb3VwIHVzaW5nIHRoZSBicGYoMilcXG4xMzU4OlxcdFxcdCAgc3lzY2FsbCBjb21tYW5kIEJQRl9QUk9HX0FUVEFDSC5cXG4xMzU5OlxcdFxcbjEzNjA6XFx0XFx0ICBJbiB3aGljaCBjb250ZXh0IHRoZXNlIHByb2dyYW1zIGFyZSBhY2Nlc3NlZCBkZXBlbmRzIG9uIHRoZSB0eXBlXFxuMTM2MTpcXHRcXHQgIG9mIGF0dGFjaG1lbnQuIEZvciBpbnN0YW5jZSwgcHJvZ3JhbXMgdGhhdCBhcmUgYXR0YWNoZWQgdXNpbmdcXG4xMzYyOlxcdFxcdCAgQlBGX0NHUk9VUF9JTkVUX0lOR1JFU1Mgd2lsbCBiZSBleGVjdXRlZCBvbiB0aGUgaW5ncmVzcyBwYXRoIG9mXFxuMTM2MzpcXHRcXHQgIGluZXQgc29ja2V0cy5cXG4xMzY0OlxcdFxcbjEzNjU6XFx0Y29uZmlnIENHUk9VUF9NSVNDXFxuMTM2NjpcXHRcXHRib29sIFxcXCJNaXNjIHJlc291cmNlIGNvbnRyb2xsZXJcXFwiXFxuMTM2NzpcXHRcXHRkZWZhdWx0IG5cXG4xMzY4OlxcdFxcdGhlbHBcXG4xMzY5OlxcdFxcdCAgUHJvdmlkZXMgYSBjb250cm9sbGVyIGZvciBtaXNjZWxsYW5lb3VzIHJlc291cmNlcyBvbiBhIGhvc3QuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAzOjU2OjM2LjY3NTcxMzcyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MTAzMzQ0NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBDZ3JvdXAgTGluayBSZXBsYWNlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNoYW5nZSBpbiBob3cgd2UgaGFuZGxlIEJQRiBwcm9ncmFtIHJlcGxhY2VtZW50IGluIGNncm91cCBsaW5rcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBgQ0dST1VQX0JQRmAgKmRlZmluaXRlbHkqIGRlcGVuZHMgb24gYEJQRl9TWVNDQUxMYCwgc28gd2UgbmVlZCB0byBlbnN1cmUgYm90aCBhcmUgaW5jbHVkZWQgaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0J3MgYSBuby1icmFpbmVyLlxuXG5Ob3csIEkndmUgZ290IHRvIGNvbmZpcm0gd2hlcmUgdGhlIG5ldyBsb2dpYyBpcyBhY3R1YWxseSAqdXNlZCouIEkgcmVtZW1iZXIgc2VlaW5nIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGFuZCwgeWVzLCBhIHF1aWNrIGNoZWNrIGluIGBicGZfY2dyb3VwX2xpbmtfbG9wc2Agc2hvd3MgdGhhdCBpdCAqaXMqIGluZGVlZCBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIuIEdvb2QuXG5cbkxldCdzIGRpc3NlY3QgdGhlIGZ1bmN0aW9uYWxpdHkuIFRoZSBwYXRjaCBhZGRzIGBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGVgLCB3aGljaCBjaGVja3MgZm9yIGNvbXBhdGliaWxpdHkgYmV0d2VlbiB0aGUgb2xkIGFuZCBuZXcgcHJvZ3JhbXMnIGBjZ3JvdXBfc3RvcmFnZWAgc3RydWN0dXJlcy4gSWYgdGhleSdyZSAqbm90KiBjb21wYXRpYmxlLCBpdCByZXR1cm5zIGAtRUlOVkFMYC4gQ2xhc3NpYy4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbHRlcmluZyB0aGUgQlBGIGNncm91cCBsaW5rIHJlcGxhY2VtZW50IHByb2NlZHVyZS4gVGhpcyBwYXJ0IG9mIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdGhyb3VnaCB0aGUgYGJwZigpYCBzeXNjYWxsLCBzcGVjaWZpY2FsbHkgdGhlIGBCUEZfTElOS19VUERBVEVgIGNvbW1hbmQuIFRoYXQncyBvdXIgYXR0YWNrIHZlY3Rvci5cblxuRm9yIGZ1enppbmcgcHVycG9zZXMsIHRoZSBtb3N0IHJlbGV2YW50IHN5bWJvbHMgd2lsbCBiZSBgY2dyb3VwX2JwZl9yZXBsYWNlYCBhbmQgYGxpbmtfdXBkYXRlYCwgd2hpY2ggaXMgbG9jYXRlZCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBBbHRob3VnaCBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBgY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0LiBXZSBkb24ndCB3YW50IHRvIGdldCB0b28gZ2VuZXJhbCB3aXRoIHRoZSBmb2N1cy5cblxuU28sIHRoZSByZWFzb25pbmcgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBjaGFuZ2VzIGhvdyB3ZSByZXBsYWNlIEJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXAgbGlua3MuIEl0IGludHJvZHVjZXMgYSBuZXcgY29tcGF0aWJpbGl0eSBjaGVjaywgYW5kIGl0J3MgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB0aHJvdWdoIGBCUEZfTElOS19VUERBVEVgLiBXZSBuZWVkIHRvIGZ1enogaXQgZXh0ZW5zaXZlbHkgdG8gZW5zdXJlIGl0IGhhbmRsZXMgYWxsIGtpbmRzIG9mIHZhbGlkIGFuZCBpbnZhbGlkIHByb2dyYW0gY29uZmlndXJhdGlvbnMgZ3JhY2VmdWxseS5cblxuSSdtIGNvbWZvcnRhYmxlIHdpdGggdGhlIHN5bWJvbCBzZWxlY3Rpb24uIE9rYXksIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDQyLCJPdXRwdXRUb2tlbnMiOjEzNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAzOjU2OjQzLjM4NjA1MTU2OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NTkxNzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNncm91cF9icGZfcmVwbGFjZVwiLFxuICAgIFwibGlua191cGRhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY29tcGF0aWJpbGl0eSBjaGVjayBmb3IgY2dyb3VwIHN0b3JhZ2Ugd2hlbiByZXBsYWNpbmcgYSBCUEYgcHJvZ3JhbSBhdHRhY2hlZCB0byBhIGNncm91cCBsaW5rLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiB0aGUgQlBGX0xJTktfVVBEQVRFIHN5c2NhbGwgcGF0aC4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGhhbmRsZXMgdmFyaW91cyBCUEYgcHJvZ3JhbSBjb25maWd1cmF0aW9ucyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZ3JvdXBfYnBmX3JlcGxhY2VcIixcbiAgICBcImxpbmtfdXBkYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNvbXBhdGliaWxpdHkgY2hlY2sgZm9yIGNncm91cCBzdG9yYWdlIHdoZW4gcmVwbGFjaW5nIGEgQlBGIHByb2dyYW0gYXR0YWNoZWQgdG8gYSBjZ3JvdXAgbGluay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gdGhlIEJQRl9MSU5LX1VQREFURSBzeXNjYWxsIHBhdGguIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBoYW5kbGVzIHZhcmlvdXMgQlBGIHByb2dyYW0gY29uZmlndXJhdGlvbnMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmww58[1] Phase: Succeeded StartedAt: 2026-08-05 03:56:54 +0000 UTC FinishedAt: 2026-08-05 03:56:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmww58[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 03:56:54 +0000 UTC FinishedAt: 2026-08-05 03:56:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmww58[2] Phase: Succeeded StartedAt: 2026-08-05 03:56:54 +0000 UTC FinishedAt: 2026-08-05 08:09:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-05 03:56:54 +0000 UTC FinishedAt: 2026-08-05 08:09:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-05 03:56:54 +0000 UTC FinishedAt: 2026-08-05 03:57:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-05 03:56:54 +0000 UTC FinishedAt: 2026-08-05 03:57:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowmww58/series-workflowmww58-convert-artifact-3561800588/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-05 03:57:15 +0000 UTC FinishedAt: 2026-08-05 04:13:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-05 03:57:15 +0000 UTC FinishedAt: 2026-08-05 04:13:47 +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:*dbc8b3d0-f5ce-4778-a1f0-efedac7499c9,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-workflowmww58/series-workflowmww58-convert-artifact-3561800588/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": "b4412c49-b40b-496b-abc4-6cd6325c4e19", "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-workflowmww58/series-workflowmww58-build-action-3941304762/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-05 03:57:15 +0000 UTC FinishedAt: 2026-08-05 04:13:37 +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:*dbc8b3d0-f5ce-4778-a1f0-efedac7499c9,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-workflowmww58/series-workflowmww58-convert-artifact-3561800588/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": "b4412c49-b40b-496b-abc4-6cd6325c4e19", "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-workflowmww58/series-workflowmww58-build-action-3941304762/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-05 04:13:47 +0000 UTC FinishedAt: 2026-08-05 04:13:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-05 04:13:47 +0000 UTC FinishedAt: 2026-08-05 04:13:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-05 04:13:47 +0000 UTC FinishedAt: 2026-08-05 04:13:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-05 04:13:47 +0000 UTC FinishedAt: 2026-08-05 04:13:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowmww58/series-workflowmww58-convert-artifact-1315020235/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-05 04:13:57 +0000 UTC FinishedAt: 2026-08-05 04:15:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-05 04:13:57 +0000 UTC FinishedAt: 2026-08-05 04:15:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b4412c49-b40b-496b-abc4-6cd6325c4e19,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-workflowmww58/series-workflowmww58-build-action-3941304762/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-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-05 04:15:55 +0000 UTC FinishedAt: 2026-08-05 04:15:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-05 04:15:55 +0000 UTC FinishedAt: 2026-08-05 04:15:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-05 04:15:55 +0000 UTC FinishedAt: 2026-08-05 04:33:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-05 04:15:55 +0000 UTC FinishedAt: 2026-08-05 04:33: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:*dbc8b3d0-f5ce-4778-a1f0-efedac7499c9,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-workflowmww58/series-workflowmww58-convert-artifact-1315020235/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": "14098653-a5af-461f-a629-a5fdf7149d1f", "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-workflowmww58/series-workflowmww58-build-action-4192191087/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-05 04:15:55 +0000 UTC FinishedAt: 2026-08-05 04:33: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:*dbc8b3d0-f5ce-4778-a1f0-efedac7499c9,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-workflowmww58/series-workflowmww58-convert-artifact-1315020235/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": "14098653-a5af-461f-a629-a5fdf7149d1f", "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-workflowmww58/series-workflowmww58-build-action-4192191087/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-05 04:33:43 +0000 UTC FinishedAt: 2026-08-05 04:33:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-05 04:33:43 +0000 UTC FinishedAt: 2026-08-05 04:33:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-05 04:33:43 +0000 UTC FinishedAt: 2026-08-05 04:35:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-05 04:33:43 +0000 UTC FinishedAt: 2026-08-05 04:35:36 +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:*14098653-a5af-461f-a629-a5fdf7149d1f,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-workflowmww58/series-workflowmww58-build-action-4192191087/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-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-05 04:35:47 +0000 UTC FinishedAt: 2026-08-05 08:09:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-05 04:35:47 +0000 UTC FinishedAt: 2026-08-05 08:09:31 +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":["cgroup_bpf_replace","link_update"],"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:*b4412c49-b40b-496b-abc4-6cd6325c4e19,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*14098653-a5af-461f-a629-a5fdf7149d1f,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-workflowmww58/series-workflowmww58-build-action-3941304762/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-workflowmww58/series-workflowmww58-build-action-4192191087/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-05 04:35:47 +0000 UTC FinishedAt: 2026-08-05 04:35:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-05 04:35:47 +0000 UTC FinishedAt: 2026-08-05 04:35:50 +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":["cgroup_bpf_replace","link_update"],"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-workflowmww58/series-workflowmww58-convert-artifact-4149941092/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-05 04:35:47 +0000 UTC FinishedAt: 2026-08-05 04:35:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-05 04:35:47 +0000 UTC FinishedAt: 2026-08-05 04:35:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-05 04:35:47 +0000 UTC FinishedAt: 2026-08-05 04:35:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-05 04:35:57 +0000 UTC FinishedAt: 2026-08-05 08:09:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmww58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"6a49a1c8-3231-4357-9a49-da25c822b5a2","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-05 04:35:57 +0000 UTC FinishedAt: 2026-08-05 08:09:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b4412c49-b40b-496b-abc4-6cd6325c4e19,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*14098653-a5af-461f-a629-a5fdf7149d1f,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-workflowmww58/series-workflowmww58-build-action-3941304762/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-workflowmww58/series-workflowmww58-build-action-4192191087/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-workflowmww58/series-workflowmww58-convert-artifact-4149941092/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,}