Name: series-workflowz98bm Phase: Succeeded StartedAt: 2026-07-14 14:15:18 +0000 UTC FinishedAt: 2026-07-14 16:36:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz98bm[0] Phase: Succeeded StartedAt: 2026-07-14 14:15:18 +0000 UTC FinishedAt: 2026-07-14 14:26:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz98bm[0].run-triage Phase: Succeeded StartedAt: 2026-07-14 14:15:18 +0000 UTC FinishedAt: 2026-07-14 14:26:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3b029c035b34bbc693405ddf759f0e9b920c27f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3b029c035b34bbc693405ddf759f0e9b920c27f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFFS_FS" ], "series_id": "374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "affs_extent_file_ofs", "affs_rename", "affs_xrename", "affs_write_begin_ofs" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE0OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZmZzX2V4dGVudF9maWxlX29mcyYjMzQ7LAogICAgJiMzNDthZmZzX3JlbmFtZSYjMzQ7LAogICAgJiMzNDthZmZzX3hyZW5hbWUmIzM0OywKICAgICYjMzQ7YWZmc193cml0ZV9iZWdpbl9vZnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHJvbGxiYWNrIGxvZ2ljIGluIEFGRlMgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgaW4gZmlsZSBleHRlbnNpb24gKGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKSwgcmVuYW1lIChhZmZzX3JlbmFtZSwgYWZmc194cmVuYW1lKSwgYW5kIGJsb2NrIGFsbG9jYXRpb24gKGFmZnNfZ2V0emVyb2JsaywgYWZmc19nZXRlbXB0eWJsaykuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGZpbGVzeXN0ZW0gY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIHN0YW5kYXJkIHN5c2NhbGxzIG9uIGFuIEFGRlMgbW91bnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTQ6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5ZTQxNThmMDRkMjAwOWJmMzJhZmYyNmRmMWRjNGIxMmU1ZGIyZjlkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMTQ6MjY6MDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9hZmZzLmggYi9mcy9hZmZzL2FmZnMuaFxuaW5kZXggNDRhM2Y2OWQyNzVmOTYuLjY1MWQ2MWIzMjEzYTE0IDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9hZmZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FmZnMvYWZmcy5oXG5AQCAtMjUwLDYgJiM0MzsyNTAsOCBAQCBhZmZzX2dldHplcm9ibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGJsb2NrKVxuIFx0cHJfZGVidWcoXCYjMzQ7JXM6ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYmxvY2spO1xuIFx0aWYgKGFmZnNfdmFsaWRibG9jayhzYiwgYmxvY2spKSB7XG4gXHRcdGJoID0gc2JfZ2V0YmxrKHNiLCBibG9jayk7XG4mIzQzO1x0XHRpZiAoIWJoKVxuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0bG9ja19idWZmZXIoYmgpO1xuIFx0XHRtZW1zZXQoYmgtXHUwMDNlYl9kYXRhLCAwICwgc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuIFx0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbkBAIC0yNjUsNiAmIzQzOzI2Nyw4IEBAIGFmZnNfZ2V0ZW1wdHlibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGJsb2NrKVxuIFx0cHJfZGVidWcoXCYjMzQ7JXM6ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYmxvY2spO1xuIFx0aWYgKGFmZnNfdmFsaWRibG9jayhzYiwgYmxvY2spKSB7XG4gXHRcdGJoID0gc2JfZ2V0YmxrKHNiLCBibG9jayk7XG4mIzQzO1x0XHRpZiAoIWJoKVxuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0d2FpdF9vbl9idWZmZXIoYmgpO1xuIFx0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbiBcdFx0cmV0dXJuIGJoO1xuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvZmlsZS5jIGIvZnMvYWZmcy9maWxlLmNcbmluZGV4IDE0NGIxNzQ4MmQxMmRhLi4zMjY1YjZiNmJmOWY4ZiAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL2ZpbGUuY1xuQEAgLTU2OSw2ICYjNDM7NTY5LDcgQEAgYWZmc19leHRlbnRfZmlsZV9vZnMoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIG5ld3NpemUpXG4gXHRwcl9kZWJ1ZyhcJiMzNDslcyglbGx1LCAlZClcXG5cJiMzNDssIF9fZnVuY19fLCBpbm9kZS1cdTAwM2VpX2lubywgbmV3c2l6ZSk7XG4gXHRic2l6ZSA9IEFGRlNfU0Ioc2IpLVx1MDAzZXNfZGF0YV9ibGtzaXplO1xuIFx0YmggPSBOVUxMO1xuJiM0MztcdHByZXZfYmggPSBOVUxMO1xuIFx0c2l6ZSA9IEFGRlNfSShpbm9kZSktXHUwMDNlbW11X3ByaXZhdGU7XG4gXHRiaWR4ID0gc2l6ZSAvIGJzaXplO1xuIFx0Ym9mZiA9IHNpemUgJSBic2l6ZTtcbkBAIC02MjUsNyAmIzQzOzYyNiw5IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxuIFx0cmV0dXJuIDA7XG4gXG4gb3V0OlxuLVx0aW5vZGUtXHUwMDNlaV9zaXplID0gQUZGU19JKGlub2RlKS1cdTAwM2VtbXVfcHJpdmF0ZSA9IG5ld3NpemU7XG4mIzQzO1x0YWZmc19icmVsc2UocHJldl9iaCk7XG4mIzQzO1x0LyogS2VlcCBpX3NpemUvbW11X3ByaXZhdGUgYXQgaG93IGZhciB3ZSBhY3R1YWxseSBleHRlbmRlZC4gKi9cbiYjNDM7XHRpbm9kZS1cdTAwM2VpX3NpemUgPSBBRkZTX0koaW5vZGUpLVx1MDAzZW1tdV9wcml2YXRlID0gc2l6ZTtcbiBcdHJldHVybiBQVFJfRVJSKGJoKTtcbiB9XG4gXG5AQCAtNjYyLDkgJiM0Mzs2NjUsNiBAQCBzdGF0aWMgaW50IGFmZnNfd3JpdGVfYmVnaW5fb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdHByX2RlYnVnKFwmIzM0OyVzKCVsbHUsICVsbHUsICVsbHUpXFxuXCYjMzQ7LCBfX2Z1bmNfXywgaW5vZGUtXHUwMDNlaV9pbm8sIHBvcyxcbiBcdFx0IHBvcyAmIzQzOyBsZW4pO1xuIFx0aWYgKHBvcyBcdTAwM2UgQUZGU19JKGlub2RlKS1cdTAwM2VtbXVfcHJpdmF0ZSkge1xuLVx0XHQvKiBYWFg6IHRoaXMgcHJvYmFibHkgbGVhdmVzIGEgdG9vLWJpZyBpX3NpemUgaW4gY2FzZSBvZlxuLVx0XHQgKiBmYWlsdXJlLiBTaG91bGQgcmVhbGx5IGJlIHVwZGF0aW5nIGlfc2l6ZSBhdCB3cml0ZV9lbmQgdGltZVxuLVx0XHQgKi9cbiBcdFx0ZXJyID0gYWZmc19leHRlbnRfZmlsZV9vZnMoaW5vZGUsIHBvcyk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbmRpZmYgLS1naXQgYS9mcy9hZmZzL25hbWVpLmMgYi9mcy9hZmZzL25hbWVpLmNcbmluZGV4IGMzYzY1MzJkYTRiMGRhLi4wOGVkZmRhZWVmYzM0YSAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvbmFtZWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZmcy9uYW1laS5jXG5AQCAtNDAxLDYgJiM0Mzs0MDEsMzggQEAgYWZmc19saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRyZXR1cm4gYWZmc19hZGRfZW50cnkoZGlyLCBpbm9kZSwgZGVudHJ5LCBTVF9MSU5LRklMRSk7XG4gfVxuIFxuJiM0MzsvKiBXcml0ZSBkZW50cnkgbmFtZSBpbnRvIGhlYWRlciBhbmQgaW5zZXJ0IGludG8gZGlyIChzdWNjZXNzIG9yIHJvbGxiYWNrKS4gKi9cbiYjNDM7c3RhdGljIGludCBhZmZzX3JlaW5zZXJ0X3dpdGhfbmFtZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLVx1MDAzZWlfc2I7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0YWZmc19jb3B5X25hbWUoQUZGU19UQUlMKHNiLCBiaCktXHUwMDNlbmFtZSwgZGVudHJ5KTtcbiYjNDM7XHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xuJiM0MztcdGFmZnNfbG9ja19kaXIoZGlyKTtcbiYjNDM7XHRlcnIgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpO1xuJiM0MztcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFB1dCBib3RoIGV4Y2hhbmdlIG9iamVjdHMgYmFjayB1bmRlciB0aGVpciBvcmlnaW5hbCBuYW1lcy9kaXJzLiAqL1xuJiM0MztzdGF0aWMgdm9pZCBhZmZzX3hyZW5hbWVfcmVzdG9yZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBpbm9kZSAqbmV3X2RpcixcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9vbGQsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfbmV3LFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGFmZnNfcmVpbnNlcnRfd2l0aF9uYW1lKG9sZF9kaXIsIGJoX29sZCwgb2xkX2RlbnRyeSkpXG4mIzQzO1x0XHRhZmZzX3dhcm5pbmcob2xkX2Rpci1cdTAwM2VpX3NiLCBcJiMzNDt4cmVuYW1lXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byByZXN0b3JlIGlub2RlICVsdVwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAodW5zaWduZWQgbG9uZyliaF9vbGQtXHUwMDNlYl9ibG9ja25yKTtcbiYjNDM7XHRpZiAoYWZmc19yZWluc2VydF93aXRoX25hbWUobmV3X2RpciwgYmhfbmV3LCBuZXdfZGVudHJ5KSlcbiYjNDM7XHRcdGFmZnNfd2FybmluZyhuZXdfZGlyLVx1MDAzZWlfc2IsIFwmIzM0O3hyZW5hbWVcJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIHJlc3RvcmUgaW5vZGUgJWx1XCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICh1bnNpZ25lZCBsb25nKWJoX25ldy1cdTAwM2ViX2Jsb2NrbnIpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnRcbiBhZmZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHQgICAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuQEAgLTQzNCwxMyAmIzQzOzQ2NiwxNSBAQCBhZmZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHRpZiAocmV0dmFsKVxuIFx0XHRnb3RvIGRvbmU7XG4gXG4tXHQvKiBBbmQgaW5zZXJ0IGl0IGludG8gdGhlIG5ldyBkaXJlY3Rvcnkgd2l0aCB0aGUgbmV3IG5hbWUuICovXG4tXHRhZmZzX2NvcHlfbmFtZShBRkZTX1RBSUwoc2IsIGJoKS1cdTAwM2VuYW1lLCBuZXdfZGVudHJ5KTtcbi1cdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRhZmZzX2xvY2tfZGlyKG5ld19kaXIpO1xuLVx0cmV0dmFsID0gYWZmc19pbnNlcnRfaGFzaChuZXdfZGlyLCBiaCk7XG4tXHRhZmZzX3VubG9ja19kaXIobmV3X2Rpcik7XG4tXHQvKiBUT0RPOiBtb3ZlIGl0IGJhY2sgdG8gb2xkX2RpciwgaWYgZXJyb3I/ICovXG4mIzQzO1x0LyogSW5zZXJ0IGludG8gdGhlIG5ldyBkaXJlY3Rvcnkgd2l0aCB0aGUgbmV3IG5hbWUuICovXG4mIzQzO1x0cmV0dmFsID0gYWZmc19yZWluc2VydF93aXRoX25hbWUobmV3X2RpciwgYmgsIG5ld19kZW50cnkpO1xuJiM0MztcdGlmIChyZXR2YWwpIHtcbiYjNDM7XHRcdC8qIG9sZF9kZW50cnkgc3RpbGwgaGFzIHRoZSBvcmlnaW5hbCBuYW1lOyBwdXQgdGhlIG9iamVjdCBiYWNrLiAqL1xuJiM0MztcdFx0aWYgKGFmZnNfcmVpbnNlcnRfd2l0aF9uYW1lKG9sZF9kaXIsIGJoLCBvbGRfZGVudHJ5KSlcbiYjNDM7XHRcdFx0YWZmc193YXJuaW5nKHNiLCBcJiMzNDtyZW5hbWVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gcmVzdG9yZSBpbm9kZSAlbHVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAodW5zaWduZWQgbG9uZyliaC1cdTAwM2ViX2Jsb2NrbnIpO1xuJiM0MztcdH1cbiBcbiBkb25lOlxuIFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLFxuQEAgLTQ1MywxMSAmIzQzOzQ4NywxMCBAQCBzdGF0aWMgaW50XG4gYWZmc194cmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdCAgICAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbi1cbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvbGRfZGlyLVx1MDAzZWlfc2I7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX29sZCA9IE5VTEw7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX25ldyA9IE5VTEw7XG4tXHRpbnQgcmV0dmFsO1xuJiM0MztcdGludCByZXR2YWwsIHJldHZhbDI7XG4gXG4gXHRiaF9vbGQgPSBhZmZzX2JyZWFkKHNiLCBkX2lub2RlKG9sZF9kZW50cnkpLVx1MDAzZWlfaW5vKTtcbiBcdGlmICghYmhfb2xkKVxuQEAgLTQ4MCwyNSAmIzQzOzUxMyw0MSBAQCBhZmZzX3hyZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuIFx0YWZmc19sb2NrX2RpcihuZXdfZGlyKTtcbiBcdHJldHZhbCA9IGFmZnNfcmVtb3ZlX2hhc2gobmV3X2RpciwgYmhfbmV3KTtcbiBcdGFmZnNfdW5sb2NrX2RpcihuZXdfZGlyKTtcbi1cdGlmIChyZXR2YWwpXG4mIzQzO1x0aWYgKHJldHZhbCkge1xuJiM0MztcdFx0LyogTmFtZXMgdW5jaGFuZ2VkOyBvbmx5IHB1dCBvbGQgYmFjayBpbnRvIG9sZF9kaXIuICovXG4mIzQzO1x0XHRpZiAoYWZmc19yZWluc2VydF93aXRoX25hbWUob2xkX2RpciwgYmhfb2xkLCBvbGRfZGVudHJ5KSlcbiYjNDM7XHRcdFx0YWZmc193YXJuaW5nKHNiLCBcJiMzNDt4cmVuYW1lXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIHJlc3RvcmUgaW5vZGUgJWx1XCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgKHVuc2lnbmVkIGxvbmcpYmhfb2xkLVx1MDAzZWJfYmxvY2tucik7XG4gXHRcdGdvdG8gZG9uZTtcbiYjNDM7XHR9XG4gXG4gXHQvKiBJbnNlcnQgb2xkIGludG8gdGhlIG5ldyBkaXJlY3Rvcnkgd2l0aCB0aGUgbmV3IG5hbWUuICovXG4tXHRhZmZzX2NvcHlfbmFtZShBRkZTX1RBSUwoc2IsIGJoX29sZCktXHUwMDNlbmFtZSwgbmV3X2RlbnRyeSk7XG4tXHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmhfb2xkKTtcbi1cdGFmZnNfbG9ja19kaXIobmV3X2Rpcik7XG4tXHRyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKG5ld19kaXIsIGJoX29sZCk7XG4tXHRhZmZzX3VubG9ja19kaXIobmV3X2Rpcik7XG4mIzQzO1x0cmV0dmFsID0gYWZmc19yZWluc2VydF93aXRoX25hbWUobmV3X2RpciwgYmhfb2xkLCBuZXdfZGVudHJ5KTtcbiYjNDM7XHRpZiAocmV0dmFsKSB7XG4mIzQzO1x0XHRhZmZzX3hyZW5hbWVfcmVzdG9yZShvbGRfZGlyLCBuZXdfZGlyLCBiaF9vbGQsIGJoX25ldyxcbiYjNDM7XHRcdFx0XHQgICAgIG9sZF9kZW50cnksIG5ld19kZW50cnkpO1xuJiM0MztcdFx0Z290byBkb25lO1xuJiM0MztcdH1cbiBcbiBcdC8qIEluc2VydCBuZXcgaW50byB0aGUgb2xkIGRpcmVjdG9yeSB3aXRoIHRoZSBvbGQgbmFtZS4gKi9cbi1cdGFmZnNfY29weV9uYW1lKEFGRlNfVEFJTChzYiwgYmhfbmV3KS1cdTAwM2VuYW1lLCBvbGRfZGVudHJ5KTtcbi1cdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaF9uZXcpO1xuLVx0YWZmc19sb2NrX2RpcihvbGRfZGlyKTtcbi1cdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2gob2xkX2RpciwgYmhfbmV3KTtcbi1cdGFmZnNfdW5sb2NrX2RpcihvbGRfZGlyKTtcbiYjNDM7XHRyZXR2YWwgPSBhZmZzX3JlaW5zZXJ0X3dpdGhfbmFtZShvbGRfZGlyLCBiaF9uZXcsIG9sZF9kZW50cnkpO1xuJiM0MztcdGlmIChyZXR2YWwpIHtcbiYjNDM7XHRcdC8qIFVuZG8gdGhlIGZpcnN0IGluc2VydCwgdGhlbiByZXN0b3JlIGJvdGggb3JpZ2luYWxzLiAqL1xuJiM0MztcdFx0YWZmc19sb2NrX2RpcihuZXdfZGlyKTtcbiYjNDM7XHRcdHJldHZhbDIgPSBhZmZzX3JlbW92ZV9oYXNoKG5ld19kaXIsIGJoX29sZCk7XG4mIzQzO1x0XHRhZmZzX3VubG9ja19kaXIobmV3X2Rpcik7XG4mIzQzO1x0XHRpZiAocmV0dmFsMilcbiYjNDM7XHRcdFx0YWZmc193YXJuaW5nKHNiLCBcJiMzNDt4cmVuYW1lXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7dW5kbyBpbnNlcnQgb2YgaW5vZGUgJWx1IGZhaWxlZCAoJWQpXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgKHVuc2lnbmVkIGxvbmcpYmhfb2xkLVx1MDAzZWJfYmxvY2tuciwgcmV0dmFsMik7XG4mIzQzO1x0XHRhZmZzX3hyZW5hbWVfcmVzdG9yZShvbGRfZGlyLCBuZXdfZGlyLCBiaF9vbGQsIGJoX25ldyxcbiYjNDM7XHRcdFx0XHQgICAgIG9sZF9kZW50cnksIG5ld19kZW50cnkpO1xuJiM0MztcdH1cbiYjNDM7XG4gZG9uZTpcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9vbGQsIFx1MDAyNkFGRlNfSShuZXdfZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmhfbmV3LCBcdTAwMjZBRkZTX0kob2xkX2RpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9vbGQsIFx1MDAyNkFGRlNfSShyZXR2YWwgPyBvbGRfZGlyIDogbmV3X2RpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcsIFx1MDAyNkFGRlNfSShyZXR2YWwgPyBuZXdfZGlyIDogb2xkX2RpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuIFx0YWZmc19icmVsc2UoYmhfb2xkKTtcbiBcdGFmZnNfYnJlbHNlKGJoX25ldyk7XG4gXHRyZXR1cm4gcmV0dmFsO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE0OjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZmZzX2V4dGVudF9maWxlX29mcyYjMzQ7LAogICAgJiMzNDthZmZzX3JlbmFtZSYjMzQ7LAogICAgJiMzNDthZmZzX3hyZW5hbWUmIzM0OywKICAgICYjMzQ7YWZmc193cml0ZV9iZWdpbl9vZnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHJvbGxiYWNrIGxvZ2ljIGluIEFGRlMgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgaW4gZmlsZSBleHRlbnNpb24gKGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKSwgcmVuYW1lIChhZmZzX3JlbmFtZSwgYWZmc194cmVuYW1lKSwgYW5kIGJsb2NrIGFsbG9jYXRpb24gKGFmZnNfZ2V0emVyb2JsaywgYWZmc19nZXRlbXB0eWJsaykuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGZpbGVzeXN0ZW0gY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIHN0YW5kYXJkIHN5c2NhbGxzIG9uIGFuIEFGRlMgbW91bnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDllNDE1OGYwNGQyMDA5YmYzMmFmZjI2ZGYxZGM0YjEyZTVkYjJmOWQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAxNCAxNDoyNjowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYWZmcy5oIGIvZnMvYWZmcy9hZmZzLmgKaW5kZXggNDRhM2Y2OWQyNzVmOTYuLjY1MWQ2MWIzMjEzYTE0IDEwMDY0NAotLS0gYS9mcy9hZmZzL2FmZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL2FmZnMuaApAQCAtMjUwLDYgJiM0MzsyNTAsOCBAQCBhZmZzX2dldHplcm9ibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGJsb2NrKQogCXByX2RlYnVnKCYjMzQ7JXM6ICVkXG4mIzM0OywgX19mdW5jX18sIGJsb2NrKTsKIAlpZiAoYWZmc192YWxpZGJsb2NrKHNiLCBibG9jaykpIHsKIAkJYmggPSBzYl9nZXRibGsoc2IsIGJsb2NrKTsKJiM0MzsJCWlmICghYmgpCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiAJCWxvY2tfYnVmZmVyKGJoKTsKIAkJbWVtc2V0KGJoLSZndDtiX2RhdGEsIDAgLCBzYi0mZ3Q7c19ibG9ja3NpemUpOwogCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKQEAgLTI2NSw2ICYjNDM7MjY3LDggQEAgYWZmc19nZXRlbXB0eWJsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgYmxvY2spCiAJcHJfZGVidWcoJiMzNDslczogJWRcbiYjMzQ7LCBfX2Z1bmNfXywgYmxvY2spOwogCWlmIChhZmZzX3ZhbGlkYmxvY2soc2IsIGJsb2NrKSkgewogCQliaCA9IHNiX2dldGJsayhzYiwgYmxvY2spOwomIzQzOwkJaWYgKCFiaCkKJiM0MzsJCQlyZXR1cm4gTlVMTDsKIAkJd2FpdF9vbl9idWZmZXIoYmgpOwogCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKIAkJcmV0dXJuIGJoOwpkaWZmIC0tZ2l0IGEvZnMvYWZmcy9maWxlLmMgYi9mcy9hZmZzL2ZpbGUuYwppbmRleCAxNDRiMTc0ODJkMTJkYS4uMzI2NWI2YjZiZjlmOGYgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FmZnMvZmlsZS5jCkBAIC01NjksNiAmIzQzOzU2OSw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKQogCXByX2RlYnVnKCYjMzQ7JXMoJWxsdSwgJWQpXG4mIzM0OywgX19mdW5jX18sIGlub2RlLSZndDtpX2lubywgbmV3c2l6ZSk7CiAJYnNpemUgPSBBRkZTX1NCKHNiKS0mZ3Q7c19kYXRhX2Jsa3NpemU7CiAJYmggPSBOVUxMOwomIzQzOwlwcmV2X2JoID0gTlVMTDsKIAlzaXplID0gQUZGU19JKGlub2RlKS0mZ3Q7bW11X3ByaXZhdGU7CiAJYmlkeCA9IHNpemUgLyBic2l6ZTsKIAlib2ZmID0gc2l6ZSAlIGJzaXplOwpAQCAtNjI1LDcgJiM0Mzs2MjYsOSBAQCBhZmZzX2V4dGVudF9maWxlX29mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbmV3c2l6ZSkKIAlyZXR1cm4gMDsKIAogb3V0OgotCWlub2RlLSZndDtpX3NpemUgPSBBRkZTX0koaW5vZGUpLSZndDttbXVfcHJpdmF0ZSA9IG5ld3NpemU7CiYjNDM7CWFmZnNfYnJlbHNlKHByZXZfYmgpOwomIzQzOwkvKiBLZWVwIGlfc2l6ZS9tbXVfcHJpdmF0ZSBhdCBob3cgZmFyIHdlIGFjdHVhbGx5IGV4dGVuZGVkLiAqLwomIzQzOwlpbm9kZS0mZ3Q7aV9zaXplID0gQUZGU19JKGlub2RlKS0mZ3Q7bW11X3ByaXZhdGUgPSBzaXplOwogCXJldHVybiBQVFJfRVJSKGJoKTsKIH0KIApAQCAtNjYyLDkgJiM0Mzs2NjUsNiBAQCBzdGF0aWMgaW50IGFmZnNfd3JpdGVfYmVnaW5fb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwKIAlwcl9kZWJ1ZygmIzM0OyVzKCVsbHUsICVsbHUsICVsbHUpXG4mIzM0OywgX19mdW5jX18sIGlub2RlLSZndDtpX2lubywgcG9zLAogCQkgcG9zICYjNDM7IGxlbik7CiAJaWYgKHBvcyAmZ3Q7IEFGRlNfSShpbm9kZSktJmd0O21tdV9wcml2YXRlKSB7Ci0JCS8qIFhYWDogdGhpcyBwcm9iYWJseSBsZWF2ZXMgYSB0b28tYmlnIGlfc2l6ZSBpbiBjYXNlIG9mCi0JCSAqIGZhaWx1cmUuIFNob3VsZCByZWFsbHkgYmUgdXBkYXRpbmcgaV9zaXplIGF0IHdyaXRlX2VuZCB0aW1lCi0JCSAqLwogCQllcnIgPSBhZmZzX2V4dGVudF9maWxlX29mcyhpbm9kZSwgcG9zKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9mcy9hZmZzL25hbWVpLmMgYi9mcy9hZmZzL25hbWVpLmMKaW5kZXggYzNjNjUzMmRhNGIwZGEuLjA4ZWRmZGFlZWZjMzRhIDEwMDY0NAotLS0gYS9mcy9hZmZzL25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZmcy9uYW1laS5jCkBAIC00MDEsNiAmIzQzOzQwMSwzOCBAQCBhZmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAlyZXR1cm4gYWZmc19hZGRfZW50cnkoZGlyLCBpbm9kZSwgZGVudHJ5LCBTVF9MSU5LRklMRSk7CiB9CiAKJiM0MzsvKiBXcml0ZSBkZW50cnkgbmFtZSBpbnRvIGhlYWRlciBhbmQgaW5zZXJ0IGludG8gZGlyIChzdWNjZXNzIG9yIHJvbGxiYWNrKS4gKi8KJiM0MztzdGF0aWMgaW50IGFmZnNfcmVpbnNlcnRfd2l0aF9uYW1lKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAomIzQzOwkJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLSZndDtpX3NiOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlhZmZzX2NvcHlfbmFtZShBRkZTX1RBSUwoc2IsIGJoKS0mZ3Q7bmFtZSwgZGVudHJ5KTsKJiM0MzsJYWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTsKJiM0MzsJYWZmc19sb2NrX2RpcihkaXIpOwomIzQzOwllcnIgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpOwomIzQzOwlhZmZzX3VubG9ja19kaXIoZGlyKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUHV0IGJvdGggZXhjaGFuZ2Ugb2JqZWN0cyBiYWNrIHVuZGVyIHRoZWlyIG9yaWdpbmFsIG5hbWVzL2RpcnMuICovCiYjNDM7c3RhdGljIHZvaWQgYWZmc194cmVuYW1lX3Jlc3RvcmUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsCiYjNDM7CQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX29sZCwKJiM0MzsJCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfbmV3LAomIzQzOwkJCQkgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQkJIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiYjNDM7ewomIzQzOwlpZiAoYWZmc19yZWluc2VydF93aXRoX25hbWUob2xkX2RpciwgYmhfb2xkLCBvbGRfZGVudHJ5KSkKJiM0MzsJCWFmZnNfd2FybmluZyhvbGRfZGlyLSZndDtpX3NiLCAmIzM0O3hyZW5hbWUmIzM0OywKJiM0MzsJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIHJlc3RvcmUgaW5vZGUgJWx1JiMzNDssCiYjNDM7CQkJICAgICAodW5zaWduZWQgbG9uZyliaF9vbGQtJmd0O2JfYmxvY2tucik7CiYjNDM7CWlmIChhZmZzX3JlaW5zZXJ0X3dpdGhfbmFtZShuZXdfZGlyLCBiaF9uZXcsIG5ld19kZW50cnkpKQomIzQzOwkJYWZmc193YXJuaW5nKG5ld19kaXItJmd0O2lfc2IsICYjMzQ7eHJlbmFtZSYjMzQ7LAomIzQzOwkJCSAgICAgJiMzNDtmYWlsZWQgdG8gcmVzdG9yZSBpbm9kZSAlbHUmIzM0OywKJiM0MzsJCQkgICAgICh1bnNpZ25lZCBsb25nKWJoX25ldy0mZ3Q7Yl9ibG9ja25yKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50CiBhZmZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJICAgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKQEAgLTQzNCwxMyAmIzQzOzQ2NiwxNSBAQCBhZmZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJaWYgKHJldHZhbCkKIAkJZ290byBkb25lOwogCi0JLyogQW5kIGluc2VydCBpdCBpbnRvIHRoZSBuZXcgZGlyZWN0b3J5IHdpdGggdGhlIG5ldyBuYW1lLiAqLwotCWFmZnNfY29weV9uYW1lKEFGRlNfVEFJTChzYiwgYmgpLSZndDtuYW1lLCBuZXdfZGVudHJ5KTsKLQlhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpOwotCWFmZnNfbG9ja19kaXIobmV3X2Rpcik7Ci0JcmV0dmFsID0gYWZmc19pbnNlcnRfaGFzaChuZXdfZGlyLCBiaCk7Ci0JYWZmc191bmxvY2tfZGlyKG5ld19kaXIpOwotCS8qIFRPRE86IG1vdmUgaXQgYmFjayB0byBvbGRfZGlyLCBpZiBlcnJvcj8gKi8KJiM0MzsJLyogSW5zZXJ0IGludG8gdGhlIG5ldyBkaXJlY3Rvcnkgd2l0aCB0aGUgbmV3IG5hbWUuICovCiYjNDM7CXJldHZhbCA9IGFmZnNfcmVpbnNlcnRfd2l0aF9uYW1lKG5ld19kaXIsIGJoLCBuZXdfZGVudHJ5KTsKJiM0MzsJaWYgKHJldHZhbCkgewomIzQzOwkJLyogb2xkX2RlbnRyeSBzdGlsbCBoYXMgdGhlIG9yaWdpbmFsIG5hbWU7IHB1dCB0aGUgb2JqZWN0IGJhY2suICovCiYjNDM7CQlpZiAoYWZmc19yZWluc2VydF93aXRoX25hbWUob2xkX2RpciwgYmgsIG9sZF9kZW50cnkpKQomIzQzOwkJCWFmZnNfd2FybmluZyhzYiwgJiMzNDtyZW5hbWUmIzM0OywKJiM0MzsJCQkJICAgICAmIzM0O2ZhaWxlZCB0byByZXN0b3JlIGlub2RlICVsdSYjMzQ7LAomIzQzOwkJCQkgICAgICh1bnNpZ25lZCBsb25nKWJoLSZndDtiX2Jsb2NrbnIpOwomIzQzOwl9CiAKIGRvbmU6CiAJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLApAQCAtNDUzLDExICYjNDM7NDg3LDEwIEBAIHN0YXRpYyBpbnQKIGFmZnNfeHJlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJICAgICBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiB7Ci0KIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gb2xkX2Rpci0mZ3Q7aV9zYjsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX29sZCA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9uZXcgPSBOVUxMOwotCWludCByZXR2YWw7CiYjNDM7CWludCByZXR2YWwsIHJldHZhbDI7CiAKIAliaF9vbGQgPSBhZmZzX2JyZWFkKHNiLCBkX2lub2RlKG9sZF9kZW50cnkpLSZndDtpX2lubyk7CiAJaWYgKCFiaF9vbGQpCkBAIC00ODAsMjUgJiM0Mzs1MTMsNDEgQEAgYWZmc194cmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKIAlhZmZzX2xvY2tfZGlyKG5ld19kaXIpOwogCXJldHZhbCA9IGFmZnNfcmVtb3ZlX2hhc2gobmV3X2RpciwgYmhfbmV3KTsKIAlhZmZzX3VubG9ja19kaXIobmV3X2Rpcik7Ci0JaWYgKHJldHZhbCkKJiM0MzsJaWYgKHJldHZhbCkgewomIzQzOwkJLyogTmFtZXMgdW5jaGFuZ2VkOyBvbmx5IHB1dCBvbGQgYmFjayBpbnRvIG9sZF9kaXIuICovCiYjNDM7CQlpZiAoYWZmc19yZWluc2VydF93aXRoX25hbWUob2xkX2RpciwgYmhfb2xkLCBvbGRfZGVudHJ5KSkKJiM0MzsJCQlhZmZzX3dhcm5pbmcoc2IsICYjMzQ7eHJlbmFtZSYjMzQ7LAomIzQzOwkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIHJlc3RvcmUgaW5vZGUgJWx1JiMzNDssCiYjNDM7CQkJCSAgICAgKHVuc2lnbmVkIGxvbmcpYmhfb2xkLSZndDtiX2Jsb2NrbnIpOwogCQlnb3RvIGRvbmU7CiYjNDM7CX0KIAogCS8qIEluc2VydCBvbGQgaW50byB0aGUgbmV3IGRpcmVjdG9yeSB3aXRoIHRoZSBuZXcgbmFtZS4gKi8KLQlhZmZzX2NvcHlfbmFtZShBRkZTX1RBSUwoc2IsIGJoX29sZCktJmd0O25hbWUsIG5ld19kZW50cnkpOwotCWFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaF9vbGQpOwotCWFmZnNfbG9ja19kaXIobmV3X2Rpcik7Ci0JcmV0dmFsID0gYWZmc19pbnNlcnRfaGFzaChuZXdfZGlyLCBiaF9vbGQpOwotCWFmZnNfdW5sb2NrX2RpcihuZXdfZGlyKTsKJiM0MzsJcmV0dmFsID0gYWZmc19yZWluc2VydF93aXRoX25hbWUobmV3X2RpciwgYmhfb2xkLCBuZXdfZGVudHJ5KTsKJiM0MzsJaWYgKHJldHZhbCkgewomIzQzOwkJYWZmc194cmVuYW1lX3Jlc3RvcmUob2xkX2RpciwgbmV3X2RpciwgYmhfb2xkLCBiaF9uZXcsCiYjNDM7CQkJCSAgICAgb2xkX2RlbnRyeSwgbmV3X2RlbnRyeSk7CiYjNDM7CQlnb3RvIGRvbmU7CiYjNDM7CX0KIAogCS8qIEluc2VydCBuZXcgaW50byB0aGUgb2xkIGRpcmVjdG9yeSB3aXRoIHRoZSBvbGQgbmFtZS4gKi8KLQlhZmZzX2NvcHlfbmFtZShBRkZTX1RBSUwoc2IsIGJoX25ldyktJmd0O25hbWUsIG9sZF9kZW50cnkpOwotCWFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaF9uZXcpOwotCWFmZnNfbG9ja19kaXIob2xkX2Rpcik7Ci0JcmV0dmFsID0gYWZmc19pbnNlcnRfaGFzaChvbGRfZGlyLCBiaF9uZXcpOwotCWFmZnNfdW5sb2NrX2RpcihvbGRfZGlyKTsKJiM0MzsJcmV0dmFsID0gYWZmc19yZWluc2VydF93aXRoX25hbWUob2xkX2RpciwgYmhfbmV3LCBvbGRfZGVudHJ5KTsKJiM0MzsJaWYgKHJldHZhbCkgewomIzQzOwkJLyogVW5kbyB0aGUgZmlyc3QgaW5zZXJ0LCB0aGVuIHJlc3RvcmUgYm90aCBvcmlnaW5hbHMuICovCiYjNDM7CQlhZmZzX2xvY2tfZGlyKG5ld19kaXIpOwomIzQzOwkJcmV0dmFsMiA9IGFmZnNfcmVtb3ZlX2hhc2gobmV3X2RpciwgYmhfb2xkKTsKJiM0MzsJCWFmZnNfdW5sb2NrX2RpcihuZXdfZGlyKTsKJiM0MzsJCWlmIChyZXR2YWwyKQomIzQzOwkJCWFmZnNfd2FybmluZyhzYiwgJiMzNDt4cmVuYW1lJiMzNDssCiYjNDM7CQkJCSAgICAgJiMzNDt1bmRvIGluc2VydCBvZiBpbm9kZSAlbHUgZmFpbGVkICglZCkmIzM0OywKJiM0MzsJCQkJICAgICAodW5zaWduZWQgbG9uZyliaF9vbGQtJmd0O2JfYmxvY2tuciwgcmV0dmFsMik7CiYjNDM7CQlhZmZzX3hyZW5hbWVfcmVzdG9yZShvbGRfZGlyLCBuZXdfZGlyLCBiaF9vbGQsIGJoX25ldywKJiM0MzsJCQkJICAgICBvbGRfZGVudHJ5LCBuZXdfZGVudHJ5KTsKJiM0MzsJfQomIzQzOwogZG9uZToKLQltbWJfbWFya19idWZmZXJfZGlydHkoYmhfb2xkLCAmYW1wO0FGRlNfSShuZXdfZGlyKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwotCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcsICZhbXA7QUZGU19JKG9sZF9kaXIpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9vbGQsICZhbXA7QUZGU19JKHJldHZhbCA/IG9sZF9kaXIgOiBuZXdfZGlyKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwltbWJfbWFya19idWZmZXJfZGlydHkoYmhfbmV3LCAmYW1wO0FGRlNfSShyZXR2YWwgPyBuZXdfZGlyIDogb2xkX2RpciktJmd0O2lfbWV0YWRhdGFfYmhzKTsKIAlhZmZzX2JyZWxzZShiaF9vbGQpOwogCWFmZnNfYnJlbHNlKGJoX25ldyk7CiAJcmV0dXJuIHJldHZhbDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUyMAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggZm9yIEFGRlMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgdGhlIEFGRlMgY29kZSDigJMgc3BlY2lmaWNhbGx5LCBgYWZmcy5oYCwgYGZpbGUuY2AsIGFuZCBgbmFtZWkuY2AuIFN0cmFpZ2h0IGF3YXksIEkgY2FuIHRlbGwgdGhpcyBpcyBkZWFsaW5nIHdpdGggc29tZSBsb3ctbGV2ZWwgZmlsZXN5c3RlbSBzdHVmZiB3aXRoaW4gdGhlIEFtaWdhIEZhc3QgRmlsZSBTeXN0ZW0uIFdlJiMzOTtyZSBsb29raW5nIGF0IGZ1bmN0aW9uYWwgY2hhbmdlcyBoZXJlLCB0aGUgbWVhdCBhbmQgcG90YXRvZXMgb2YgaG93IEFGRlMgb3BlcmF0ZXMuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgZmV3IGtleSBpc3N1ZXMuIEZpcnN0LCBpdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBoYXJkZW5pbmcgc29tZSBibG9jayBhbGxvY2F0aW9uIHJvdXRpbmVzLCBgYWZmc19nZXR6ZXJvYmxrYCBhbmQgYGFmZnNfZ2V0ZW1wdHlibGtgLiBUaGV5JiMzOTtyZSBub3cgY2hlY2tpbmcgZm9yIE5VTEwgcmV0dXJucyBmcm9tIGBzYl9nZXRibGtgLCB3aGljaCBpcyBnb29kIHByYWN0aWNlIHRvIHByZXZlbnQgY3Jhc2hlcyBkdWUgdG8gYmxvY2sgYWxsb2NhdGlvbiBmYWlsdXJlcy4gVGhhdCYjMzk7cyBjcml0aWNhbCBpbiBhIGZpbGVzeXN0ZW0uCgpUaGVuIHRoZXJlJiMzOTtzIHRoZSBgYWZmc19leHRlbnRfZmlsZV9vZnNgIGZpeC4gTG9va3MgbGlrZSBpdCYjMzk7cyBiZWVuIHVwZGF0ZWQgdG8gcmVsZWFzZSBgcHJldl9iaGAgY29ycmVjdGx5IGFuZCBtYWtlIHN1cmUgdGhlIGlub2RlJiMzOTtzIHNpemUgYW5kIGBtbXVfcHJpdmF0ZWAgYXJlIHByb3Blcmx5IHVwZGF0ZWQgdG8gdGhlIGV4dGVuZGVkIHNpemUsIGV2ZW4gb24gZmFpbHVyZS4gTWlzc2luZyB0aG9zZSB3b3VsZCBiZSBwcm9ibGVtYXRpYyAtIGRhdGEgY29ycnVwdGlvbiBvciBwb3RlbnRpYWxseSBldmVuIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4KCkZpbmFsbHksIHdlJiMzOTt2ZSBnb3Qgcm9sbGJhY2sgbWVjaGFuaXNtcyBpbnRyb2R1Y2VkIGZvciBgYWZmc19yZW5hbWVgIGFuZCBgYWZmc194cmVuYW1lYC4gSWYgYW4gaW5zZXJ0aW9uIGZhaWxzLCB0aGlzIGdpdmVzIHVzIGEgd2F5IHRvIG1haW50YWluIGRhdGEgaW50ZWdyaXR5IGR1cmluZyBmaWxlIHJlbmFtZXMuIFRoYXQmIzM5O3MgYSBtdXN0LWhhdmUgZm9yIGFueSByZWxpYWJsZSBmaWxlc3lzdGVtIG9wZXJhdGlvbi4KCkZyb20gbXkgcGVyc3BlY3RpdmUsIHRoaXMgaXMgYWxsIHZlcnkgc2Vuc2libGUgYW5kIGNvdWxkIGhhdmUgaW1wb3J0YW50IGltcGxpY2F0aW9ucyBmb3Igc3RhYmlsaXR5IGFuZCByZWxpYWJpbGl0eSB3aGVuIHNvbWVvbmUgaXMgdXNpbmcgYW4gQUZGUyBpbWFnZS4gVGhpcyBpcyBhbGwgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMsIHRoaW5ncyBsaWtlIHJlbmFtaW5nLCB3cml0aW5nLCBldGMuLCBhc3N1bWluZyB0aGV5IGhhdmUgYW4gQUZGUyBpbWFnZSBtb3VudGVkLiBUaGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IEFGRlMgaXMgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUga2VybmVsIGNvbmZpZy4gTGV0JiMzOTtzIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIGlmIEFGRlMgc3VwcG9ydCBpcyBhY3R1YWxseSBidWlsdCBpbnRvIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTQ6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFGRlNfRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9hZmZzL0tjb25maWc6Mjpjb25maWcgQUZGU19GU1xuZnMvYWZmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBbWlnYSBGRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE0OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEFGRlNfRlMgQ29uZmlndXJhdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGluIHF1ZXN0aW9uIGlzIGBBRkZTX0ZTYC4gTGV0IG1lIHF1aWNrbHkgcmV2aWV3IHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgd2l0aGluIHRoaXMgY29udGV4dC4gQmFzZWQgb24gdGhlIGxpc3QsIGl0IGxvb2tzIGxpa2UgdGhlcmUgaGF2ZSBiZWVuIHNvbWUgdXBkYXRlcyB0byB0aGUgZm9sbG93aW5nOiBgYWZmc19nZXR6ZXJvYmxrYCwgYGFmZnNfZ2V0ZW1wdHlibGtgLCBgYWZmc19leHRlbnRfZmlsZV9vZnNgLCBgYWZmc193cml0ZV9iZWdpbl9vZnNgLCBgYWZmc19saW5rYCwgYGFmZnNfcmVpbnNlcnRfd2l0aF9uYW1lYCwgYGFmZnNfeHJlbmFtZV9yZXN0b3JlYCwgYGFmZnNfcmVuYW1lYCwgYW5kIGBhZmZzX3hyZW5hbWVgLgoKTm93LCBjb25zaWRlcmluZyB0aGUgaW1wYWN0LCBJIHRoaW5rIGl0JiMzOTtzIGltcG9ydGFudCB0byBzcGVjaWZpY2FsbHkgZmxhZyB0aGVzZSBmdW5jdGlvbnMgZm9yIGZ1cnRoZXIgYW5hbHlzaXMgd2l0aGluIGBGb2N1c1N5bWJvbHNgLiBMZXQmIzM5O3MgZ2V0IHRoZW0gbGlzdGVkOiBgYWZmc19nZXR6ZXJvYmxrYCwgYGFmZnNfZ2V0ZW1wdHlibGtgLCBgYWZmc19leHRlbnRfZmlsZV9vZnNgLCBgYWZmc193cml0ZV9iZWdpbl9vZnNgLCBgYWZmc19yZW5hbWVgLCBhbmQgYGFmZnNfeHJlbmFtZWAuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgdXNhZ2Ugb2YgYGFmZnNfZ2V0emVyb2Jsa2AgYW5kIGBhZmZzX2dldGVtcHR5YmxrYCBub3cuIFRoZXNlIGFyZSBvZnRlbiBjcml0aWNhbCBmdW5jdGlvbnMgYW5kIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGVpciBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZmZzX2dldHplcm9ibGsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZmcy9hZmZzLmg9MjQ2PXN0YXRpYyBpbmxpbmUgc3RydWN0IGJ1ZmZlcl9oZWFkICpcbmZzL2FmZnMvYWZmcy5oOjI0NzphZmZzX2dldHplcm9ibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGJsb2NrKVxuZnMvYWZmcy9hZmZzLmgtMjQ4LXtcbi0tXG5mcy9hZmZzL2ZpbGUuYz0xMjE9YWZmc19hbGxvY19leHRibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCB1MzIgZXh0KVxuLS1cbmZzL2FmZnMvZmlsZS5jLTEzMC1cbmZzL2FmZnMvZmlsZS5jOjEzMTpcdG5ld19iaCA9IGFmZnNfZ2V0emVyb2JsayhzYiwgYmxvY2tucik7XG5mcy9hZmZzL2ZpbGUuYy0xMzItXHRpZiAoIW5ld19iaCkge1xuLS1cbmZzL2FmZnMvZmlsZS5jPTQ5MD1zdGF0aWMgaW5saW5lIHN0cnVjdCBidWZmZXJfaGVhZCAqXG5mcy9hZmZzL2ZpbGUuYzo0OTE6YWZmc19nZXR6ZXJvYmxrX2lubyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgYmxvY2spXG5mcy9hZmZzL2ZpbGUuYy00OTIte1xuLS1cbmZzL2FmZnMvZmlsZS5jLTQ5OC1cdGlmICghZXJyKSB7XG5mcy9hZmZzL2ZpbGUuYzo0OTk6XHRcdGJoID0gYWZmc19nZXR6ZXJvYmxrKGlub2RlLVx1MDAzZWlfc2IsIHRtcF9iaC5iX2Jsb2NrbnIpO1xuZnMvYWZmcy9maWxlLmMtNTAwLVx0XHRpZiAoYmgpIHtcbi0tXG5mcy9hZmZzL2ZpbGUuYz01NjE9YWZmc19leHRlbnRfZmlsZV9vZnMoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIG5ld3NpemUpXG4tLVxuZnMvYWZmcy9maWxlLmMtNTk1LVx0XHRwcmV2X2JoID0gYmg7XG5mcy9hZmZzL2ZpbGUuYzo1OTY6XHRcdGJoID0gYWZmc19nZXR6ZXJvYmxrX2lubyhpbm9kZSwgYmlkeCk7XG5mcy9hZmZzL2ZpbGUuYy01OTctXHRcdGlmIChJU19FUlIoYmgpKVxuLS1cbmZzL2FmZnMvaW5vZGUuYz0yOTI9YWZmc19uZXdfaW5vZGUoc3RydWN0IGlub2RlICpkaXIpXG4tLVxuZnMvYWZmcy9pbm9kZS5jLTMwNC1cbmZzL2FmZnMvaW5vZGUuYzozMDU6XHRiaCA9IGFmZnNfZ2V0emVyb2JsayhzYiwgYmxvY2spO1xuZnMvYWZmcy9pbm9kZS5jLTMwNi1cdGlmICghYmgpXG4tLVxuZnMvYWZmcy9pbm9kZS5jPTM0OT1hZmZzX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzMzIgdHlwZSlcbi0tXG5mcy9hZmZzL2lub2RlLmMtMzc0LVx0XHRpbm9kZV9iaCA9IGJoO1xuZnMvYWZmcy9pbm9kZS5jOjM3NTpcdFx0YmggPSBhZmZzX2dldHplcm9ibGsoc2IsIGJsb2NrKTtcbmZzL2FmZnMvaW5vZGUuYy0zNzYtXHRcdGlmICghYmgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQwMAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQUZGUyBGaWxlIFN5c3RlbSBTeW1ib2xzIGZvciBGb2N1c1N5bWJvbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIEFGRlMgZmlsZSBzeXN0ZW0gZnVuY3Rpb25zOiBgYWZmc19nZXR6ZXJvYmxrYCwgYGFmZnNfZ2V0ZW1wdHlibGtgLCBgYWZmc19leHRlbnRfZmlsZV9vZnNgLCBgYWZmc193cml0ZV9iZWdpbl9vZnNgLCBgYWZmc19yZW5hbWVgLCBhbmQgYGFmZnNfeHJlbmFtZWAuIFRoZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lcyBhcmUgZ29vZCBjYW5kaWRhdGVzIGZvciBgRm9jdXNTeW1ib2xzYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBhZmZzX2dldHplcm9ibGtgIGFuZCBgYWZmc19nZXRlbXB0eWJsa2AgYXJlIHByb2JhYmx5IGEgYml0IHRyaWNreS4gVGhleSYjMzk7cmUgZGVmaW5lZCBhcyBgc3RhdGljIGlubGluZWAgaW4gYGZzL2FmZnMvYWZmcy5oYC4gQmVjYXVzZSB0aGV5JiMzOTtyZSBpbmxpbmVkLCBpdCBtZWFucyB0aGUgY29tcGlsZXIgbWlnaHQgb3B0aW1pemUgdGhlbSBhd2F5IGR1cmluZyBjb21waWxhdGlvbiwgd2hpY2ggY291bGQgbWFrZSB0aGVtIGxlc3MgdXNlZnVsIGZvciB0aGUgYEZvY3VzU3ltYm9sc2AgYW5hbHlzaXMuIFdlJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBob3cgdGhlIGNvbXBpbGVyIGhhbmRsZXMgaW5saW5lcyBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuCgpPbiB0aGUgb3RoZXIgaGFuZCwgYGFmZnNfZXh0ZW50X2ZpbGVfb2ZzYCwgYGFmZnNfcmVuYW1lYCwgYW5kIGBhZmZzX3hyZW5hbWVgIHNlZW0gbGlrZSBzb2xpZCBiZXRzLiBUaGV5JiMzOTtyZSBub3QgaW5saW5lZCwgc28gdGhleSYjMzk7cmUgZGVmaW5pdGVseSBhdmFpbGFibGUgYXMgc2VwYXJhdGUgZnVuY3Rpb25zLiBUaG9zZSBzZWVtIGxpa2UgdGhleSYjMzk7cmUgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgaW5jbHVzaW9uIGluIHRoZSBzZXQuCgpSaWdodCBub3csIGxldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIHVzYWdlIG9mIGBhZmZzX2dldGVtcHR5YmxrYCB0byBnZXQgYSBzZW5zZSBvZiB3aGVyZSBpdCYjMzk7cyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGZpbGUgc3lzdGVtIGNvZGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgc2lnbmlmaWNhbmNlIGFuZCBhcHBsaWNhYmlsaXR5IHRvIGBGb2N1c1N5bWJvbHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FmZnNfZ2V0ZW1wdHlibGsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZmcy9hZmZzLmg9MjYzPXN0YXRpYyBpbmxpbmUgc3RydWN0IGJ1ZmZlcl9oZWFkICpcbmZzL2FmZnMvYWZmcy5oOjI2NDphZmZzX2dldGVtcHR5YmxrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBibG9jaylcbmZzL2FmZnMvYWZmcy5oLTI2NS17XG4tLVxuZnMvYWZmcy9maWxlLmM9NTA5PXN0YXRpYyBpbmxpbmUgc3RydWN0IGJ1ZmZlcl9oZWFkICpcbmZzL2FmZnMvZmlsZS5jOjUxMDphZmZzX2dldGVtcHR5YmxrX2lubyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgYmxvY2spXG5mcy9hZmZzL2ZpbGUuYy01MTEte1xuLS1cbmZzL2FmZnMvZmlsZS5jLTUxNy1cdGlmICghZXJyKSB7XG5mcy9hZmZzL2ZpbGUuYzo1MTg6XHRcdGJoID0gYWZmc19nZXRlbXB0eWJsayhpbm9kZS1cdTAwM2VpX3NiLCB0bXBfYmguYl9ibG9ja25yKTtcbmZzL2FmZnMvZmlsZS5jLTUxOS1cdFx0aWYgKGJoKSB7XG4tLVxuZnMvYWZmcy9maWxlLmM9NjkyPXN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbi0tXG5mcy9hZmZzL2ZpbGUuYy03NDgtXHRcdHByZXZfYmggPSBiaDtcbmZzL2FmZnMvZmlsZS5jOjc0OTpcdFx0YmggPSBhZmZzX2dldGVtcHR5YmxrX2lubyhpbm9kZSwgYmlkeCk7XG5mcy9hZmZzL2ZpbGUuYy03NTAtXHRcdGlmIChJU19FUlIoYmgpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE0OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNDYKCQkJCQkJCW91dHB1dDogMTU1CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEFGRlMgRmlsZSBTeXN0ZW0gT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSByZXZpZXdlZCB0aGUgcGF0Y2ggYW5kIEkgbmVlZCB0byBob25lIGluIG9uIGEgc3BlY2lmaWMgYXJlYSBmb3IgZnV6emluZy4gQmFzZWQgb24gdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBvdXRsaW5lZCwgSSYjMzk7bSBnb2luZyB0byBhZGQgYSBmZXcga2V5IHN5bWJvbHMgdG8gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3Q6IGBhZmZzX2V4dGVudF9maWxlX29mc2AsIGBhZmZzX3JlbmFtZWAsIGBhZmZzX3hyZW5hbWVgLCBhbmQgYGFmZnNfd3JpdGVfYmVnaW5fb2ZzYC4gVGhlc2UgYXJlIGFsbCByZWxhdGVkIHRvIGNydWNpYWwgQUZGUyBmaWxlc3lzdGVtIG9wZXJhdGlvbnMsIGNvdmVyaW5nIGZpbGUgZXh0ZW5zaW9uLCByZW5hbWluZyAoYm90aCBpbnRlcm5hbCBhbmQgZXh0ZW5kZWQpLCBhbmQgd3JpdGUgb3BlcmF0aW9uIHN0YXJ0aW5nIG9mZnNldC4KClRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGlzIGBBRkZTX0ZTYCwgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGNvbnRyb2xsaW5nIGZhY3RvciBoZXJlLiBCZWZvcmUgSSBtb3ZlIG9uLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBkZXBlbmRlbnQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgdGhlc2UgZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIGBBRkZTX0ZTYCBpcyB0aGUgb25seSBvbmUgSSBuZWVkIHRvIGNvbnNpZGVyOyB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LgoKVGhlIHBhdGNoJiMzOTtzIHJlYXNvbmluZyBlbXBoYXNpemVzIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBpbXByb3ZlbWVudHMgaW1wYWN0aW5nIGhvdyB0aGUgZmlsZXN5c3RlbSBiZWhhdmVzIHVuZGVyIHN0YW5kYXJkIHN5c2NhbGxzLiBTaW5jZSB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBmbGFnIGlzIHNldCB0byB0cnVlLCBpdCByZWluZm9yY2VzIHRoZSBuZWVkIGZvciByaWdvcm91cyB0ZXN0aW5nLiBXaXRoIHRoZSBgRW5hYmxlQ29uZmlnc2Agc2V0IHRvIGBBRkZTX0ZTYCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIHJlZmluZWQsIGl0JiMzOTtzIHRpbWUgdG8gc2V0IHRoZSByZXN1bHRzIGFuZCBtb3ZlIHRvIHRoZSBuZXh0IHBoYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FmZnNfZXh0ZW50X2ZpbGVfb2ZzJiMzNDssCiAgICAmIzM0O2FmZnNfcmVuYW1lJiMzNDssCiAgICAmIzM0O2FmZnNfeHJlbmFtZSYjMzQ7LAogICAgJiMzNDthZmZzX3dyaXRlX2JlZ2luX29mcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBhbmQgcm9sbGJhY2sgbG9naWMgaW4gQUZGUyBmaWxlc3lzdGVtIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBpbiBmaWxlIGV4dGVuc2lvbiAoYWZmc19leHRlbnRfZmlsZV9vZnMpLCByZW5hbWUgKGFmZnNfcmVuYW1lLCBhZmZzX3hyZW5hbWUpLCBhbmQgYmxvY2sgYWxsb2NhdGlvbiAoYWZmc19nZXR6ZXJvYmxrLCBhZmZzX2dldGVtcHR5YmxrKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgZmlsZXN5c3RlbSBjb2RlIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgc3RhbmRhcmQgc3lzY2FsbHMgb24gYW4gQUZGUyBtb3VudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FmZnNfZXh0ZW50X2ZpbGVfb2ZzJiMzNDssCiAgICAmIzM0O2FmZnNfcmVuYW1lJiMzNDssCiAgICAmIzM0O2FmZnNfeHJlbmFtZSYjMzQ7LAogICAgJiMzNDthZmZzX3dyaXRlX2JlZ2luX29mcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBhbmQgcm9sbGJhY2sgbG9naWMgaW4gQUZGUyBmaWxlc3lzdGVtIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBpbiBmaWxlIGV4dGVuc2lvbiAoYWZmc19leHRlbnRfZmlsZV9vZnMpLCByZW5hbWUgKGFmZnNfcmVuYW1lLCBhZmZzX3hyZW5hbWUpLCBhbmQgYmxvY2sgYWxsb2NhdGlvbiAoYWZmc19nZXR6ZXJvYmxrLCBhZmZzX2dldGVtcHR5YmxrKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgZmlsZXN5c3RlbSBjb2RlIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgc3RhbmRhcmQgc3lzY2FsbHMgb24gYW4gQUZGUyBtb3VudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE0OjI2OjAxLjM4NjEzODUxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjczNTAxOTIyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmZnNfZXh0ZW50X2ZpbGVfb2ZzXCIsXG4gICAgXCJhZmZzX3JlbmFtZVwiLFxuICAgIFwiYWZmc194cmVuYW1lXCIsXG4gICAgXCJhZmZzX3dyaXRlX2JlZ2luX29mc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIGFuZCByb2xsYmFjayBsb2dpYyBpbiBBRkZTIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IGluIGZpbGUgZXh0ZW5zaW9uIChhZmZzX2V4dGVudF9maWxlX29mcyksIHJlbmFtZSAoYWZmc19yZW5hbWUsIGFmZnNfeHJlbmFtZSksIGFuZCBibG9jayBhbGxvY2F0aW9uIChhZmZzX2dldHplcm9ibGssIGFmZnNfZ2V0ZW1wdHlibGspLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBmaWxlc3lzdGVtIGNvZGUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBzdGFuZGFyZCBzeXNjYWxscyBvbiBhbiBBRkZTIG1vdW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNDoyNjowMS4zODYxNDIyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE2MDI0NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWU0MTU4ZjA0ZDIwMDliZjMyYWZmMjZkZjFkYzRiMTJlNWRiMmY5ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAxNCAxNDoyNjowMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9hZmZzL2FmZnMuaCBiL2ZzL2FmZnMvYWZmcy5oXFxuaW5kZXggNDRhM2Y2OWQyNzVmOTYuLjY1MWQ2MWIzMjEzYTE0IDEwMDY0NFxcbi0tLSBhL2ZzL2FmZnMvYWZmcy5oXFxuKysrIGIvZnMvYWZmcy9hZmZzLmhcXG5AQCAtMjUwLDYgKzI1MCw4IEBAIGFmZnNfZ2V0emVyb2JsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgYmxvY2spXFxuIFxcdHByX2RlYnVnKFxcXCIlczogJWRcXFxcblxcXCIsIF9fZnVuY19fLCBibG9jayk7XFxuIFxcdGlmIChhZmZzX3ZhbGlkYmxvY2soc2IsIGJsb2NrKSkge1xcbiBcXHRcXHRiaCA9IHNiX2dldGJsayhzYiwgYmxvY2spO1xcbitcXHRcXHRpZiAoIWJoKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0XFx0bG9ja19idWZmZXIoYmgpO1xcbiBcXHRcXHRtZW1zZXQoYmgtXFx1MDAzZWJfZGF0YSwgMCAsIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSk7XFxuIFxcdFxcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xcbkBAIC0yNjUsNiArMjY3LDggQEAgYWZmc19nZXRlbXB0eWJsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgYmxvY2spXFxuIFxcdHByX2RlYnVnKFxcXCIlczogJWRcXFxcblxcXCIsIF9fZnVuY19fLCBibG9jayk7XFxuIFxcdGlmIChhZmZzX3ZhbGlkYmxvY2soc2IsIGJsb2NrKSkge1xcbiBcXHRcXHRiaCA9IHNiX2dldGJsayhzYiwgYmxvY2spO1xcbitcXHRcXHRpZiAoIWJoKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0XFx0d2FpdF9vbl9idWZmZXIoYmgpO1xcbiBcXHRcXHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcXG4gXFx0XFx0cmV0dXJuIGJoO1xcbmRpZmYgLS1naXQgYS9mcy9hZmZzL2ZpbGUuYyBiL2ZzL2FmZnMvZmlsZS5jXFxuaW5kZXggMTQ0YjE3NDgyZDEyZGEuLjMyNjViNmI2YmY5ZjhmIDEwMDY0NFxcbi0tLSBhL2ZzL2FmZnMvZmlsZS5jXFxuKysrIGIvZnMvYWZmcy9maWxlLmNcXG5AQCAtNTY5LDYgKzU2OSw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxcbiBcXHRwcl9kZWJ1ZyhcXFwiJXMoJWxsdSwgJWQpXFxcXG5cXFwiLCBfX2Z1bmNfXywgaW5vZGUtXFx1MDAzZWlfaW5vLCBuZXdzaXplKTtcXG4gXFx0YnNpemUgPSBBRkZTX1NCKHNiKS1cXHUwMDNlc19kYXRhX2Jsa3NpemU7XFxuIFxcdGJoID0gTlVMTDtcXG4rXFx0cHJldl9iaCA9IE5VTEw7XFxuIFxcdHNpemUgPSBBRkZTX0koaW5vZGUpLVxcdTAwM2VtbXVfcHJpdmF0ZTtcXG4gXFx0YmlkeCA9IHNpemUgLyBic2l6ZTtcXG4gXFx0Ym9mZiA9IHNpemUgJSBic2l6ZTtcXG5AQCAtNjI1LDcgKzYyNiw5IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIG91dDpcXG4tXFx0aW5vZGUtXFx1MDAzZWlfc2l6ZSA9IEFGRlNfSShpbm9kZSktXFx1MDAzZW1tdV9wcml2YXRlID0gbmV3c2l6ZTtcXG4rXFx0YWZmc19icmVsc2UocHJldl9iaCk7XFxuK1xcdC8qIEtlZXAgaV9zaXplL21tdV9wcml2YXRlIGF0IGhvdyBmYXIgd2UgYWN0dWFsbHkgZXh0ZW5kZWQuICovXFxuK1xcdGlub2RlLVxcdTAwM2VpX3NpemUgPSBBRkZTX0koaW5vZGUpLVxcdTAwM2VtbXVfcHJpdmF0ZSA9IHNpemU7XFxuIFxcdHJldHVybiBQVFJfRVJSKGJoKTtcXG4gfVxcbiBcXG5AQCAtNjYyLDkgKzY2NSw2IEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9iZWdpbl9vZnMoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbiBcXHRwcl9kZWJ1ZyhcXFwiJXMoJWxsdSwgJWxsdSwgJWxsdSlcXFxcblxcXCIsIF9fZnVuY19fLCBpbm9kZS1cXHUwMDNlaV9pbm8sIHBvcyxcXG4gXFx0XFx0IHBvcyArIGxlbik7XFxuIFxcdGlmIChwb3MgXFx1MDAzZSBBRkZTX0koaW5vZGUpLVxcdTAwM2VtbXVfcHJpdmF0ZSkge1xcbi1cXHRcXHQvKiBYWFg6IHRoaXMgcHJvYmFibHkgbGVhdmVzIGEgdG9vLWJpZyBpX3NpemUgaW4gY2FzZSBvZlxcbi1cXHRcXHQgKiBmYWlsdXJlLiBTaG91bGQgcmVhbGx5IGJlIHVwZGF0aW5nIGlfc2l6ZSBhdCB3cml0ZV9lbmQgdGltZVxcbi1cXHRcXHQgKi9cXG4gXFx0XFx0ZXJyID0gYWZmc19leHRlbnRfZmlsZV9vZnMoaW5vZGUsIHBvcyk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvbmFtZWkuYyBiL2ZzL2FmZnMvbmFtZWkuY1xcbmluZGV4IGMzYzY1MzJkYTRiMGRhLi4wOGVkZmRhZWVmYzM0YSAxMDA2NDRcXG4tLS0gYS9mcy9hZmZzL25hbWVpLmNcXG4rKysgYi9mcy9hZmZzL25hbWVpLmNcXG5AQCAtNDAxLDYgKzQwMSwzOCBAQCBhZmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gXFx0cmV0dXJuIGFmZnNfYWRkX2VudHJ5KGRpciwgaW5vZGUsIGRlbnRyeSwgU1RfTElOS0ZJTEUpO1xcbiB9XFxuIFxcbisvKiBXcml0ZSBkZW50cnkgbmFtZSBpbnRvIGhlYWRlciBhbmQgaW5zZXJ0IGludG8gZGlyIChzdWNjZXNzIG9yIHJvbGxiYWNrKS4gKi9cXG4rc3RhdGljIGludCBhZmZzX3JlaW5zZXJ0X3dpdGhfbmFtZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbit7XFxuK1xcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItXFx1MDAzZWlfc2I7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRhZmZzX2NvcHlfbmFtZShBRkZTX1RBSUwoc2IsIGJoKS1cXHUwMDNlbmFtZSwgZGVudHJ5KTtcXG4rXFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcXG4rXFx0YWZmc19sb2NrX2RpcihkaXIpO1xcbitcXHRlcnIgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpO1xcbitcXHRhZmZzX3VubG9ja19kaXIoZGlyKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rLyogUHV0IGJvdGggZXhjaGFuZ2Ugb2JqZWN0cyBiYWNrIHVuZGVyIHRoZWlyIG9yaWdpbmFsIG5hbWVzL2RpcnMuICovXFxuK3N0YXRpYyB2b2lkIGFmZnNfeHJlbmFtZV9yZXN0b3JlKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGlub2RlICpuZXdfZGlyLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9vbGQsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX25ldyxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbit7XFxuK1xcdGlmIChhZmZzX3JlaW5zZXJ0X3dpdGhfbmFtZShvbGRfZGlyLCBiaF9vbGQsIG9sZF9kZW50cnkpKVxcbitcXHRcXHRhZmZzX3dhcm5pbmcob2xkX2Rpci1cXHUwMDNlaV9zYiwgXFxcInhyZW5hbWVcXFwiLFxcbitcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gcmVzdG9yZSBpbm9kZSAlbHVcXFwiLFxcbitcXHRcXHRcXHQgICAgICh1bnNpZ25lZCBsb25nKWJoX29sZC1cXHUwMDNlYl9ibG9ja25yKTtcXG4rXFx0aWYgKGFmZnNfcmVpbnNlcnRfd2l0aF9uYW1lKG5ld19kaXIsIGJoX25ldywgbmV3X2RlbnRyeSkpXFxuK1xcdFxcdGFmZnNfd2FybmluZyhuZXdfZGlyLVxcdTAwM2VpX3NiLCBcXFwieHJlbmFtZVxcXCIsXFxuK1xcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byByZXN0b3JlIGlub2RlICVsdVxcXCIsXFxuK1xcdFxcdFxcdCAgICAgKHVuc2lnbmVkIGxvbmcpYmhfbmV3LVxcdTAwM2ViX2Jsb2NrbnIpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50XFxuIGFmZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4gXFx0ICAgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG5AQCAtNDM0LDEzICs0NjYsMTUgQEAgYWZmc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbiBcXHRpZiAocmV0dmFsKVxcbiBcXHRcXHRnb3RvIGRvbmU7XFxuIFxcbi1cXHQvKiBBbmQgaW5zZXJ0IGl0IGludG8gdGhlIG5ldyBkaXJlY3Rvcnkgd2l0aCB0aGUgbmV3IG5hbWUuICovXFxuLVxcdGFmZnNfY29weV9uYW1lKEFGRlNfVEFJTChzYiwgYmgpLVxcdTAwM2VuYW1lLCBuZXdfZGVudHJ5KTtcXG4tXFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcXG4tXFx0YWZmc19sb2NrX2RpcihuZXdfZGlyKTtcXG4tXFx0cmV0dmFsID0gYWZmc19pbnNlcnRfaGFzaChuZXdfZGlyLCBiaCk7XFxuLVxcdGFmZnNfdW5sb2NrX2RpcihuZXdfZGlyKTtcXG4tXFx0LyogVE9ETzogbW92ZSBpdCBiYWNrIHRvIG9sZF9kaXIsIGlmIGVycm9yPyAqL1xcbitcXHQvKiBJbnNlcnQgaW50byB0aGUgbmV3IGRpcmVjdG9yeSB3aXRoIHRoZSBuZXcgbmFtZS4gKi9cXG4rXFx0cmV0dmFsID0gYWZmc19yZWluc2VydF93aXRoX25hbWUobmV3X2RpciwgYmgsIG5ld19kZW50cnkpO1xcbitcXHRpZiAocmV0dmFsKSB7XFxuK1xcdFxcdC8qIG9sZF9kZW50cnkgc3RpbGwgaGFzIHRoZSBvcmlnaW5hbCBuYW1lOyBwdXQgdGhlIG9iamVjdCBiYWNrLiAqL1xcbitcXHRcXHRpZiAoYWZmc19yZWluc2VydF93aXRoX25hbWUob2xkX2RpciwgYmgsIG9sZF9kZW50cnkpKVxcbitcXHRcXHRcXHRhZmZzX3dhcm5pbmcoc2IsIFxcXCJyZW5hbWVcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gcmVzdG9yZSBpbm9kZSAlbHVcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICh1bnNpZ25lZCBsb25nKWJoLVxcdTAwM2ViX2Jsb2NrbnIpO1xcbitcXHR9XFxuIFxcbiBkb25lOlxcbiBcXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsXFxuQEAgLTQ1MywxMSArNDg3LDEwIEBAIHN0YXRpYyBpbnRcXG4gYWZmc194cmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4gXFx0ICAgICBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuIHtcXG4tXFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvbGRfZGlyLVxcdTAwM2VpX3NiO1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX29sZCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfbmV3ID0gTlVMTDtcXG4tXFx0aW50IHJldHZhbDtcXG4rXFx0aW50IHJldHZhbCwgcmV0dmFsMjtcXG4gXFxuIFxcdGJoX29sZCA9IGFmZnNfYnJlYWQoc2IsIGRfaW5vZGUob2xkX2RlbnRyeSktXFx1MDAzZWlfaW5vKTtcXG4gXFx0aWYgKCFiaF9vbGQpXFxuQEAgLTQ4MCwyNSArNTEzLDQxIEBAIGFmZnNfeHJlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuIFxcdGFmZnNfbG9ja19kaXIobmV3X2Rpcik7XFxuIFxcdHJldHZhbCA9IGFmZnNfcmVtb3ZlX2hhc2gobmV3X2RpciwgYmhfbmV3KTtcXG4gXFx0YWZmc191bmxvY2tfZGlyKG5ld19kaXIpO1xcbi1cXHRpZiAocmV0dmFsKVxcbitcXHRpZiAocmV0dmFsKSB7XFxuK1xcdFxcdC8qIE5hbWVzIHVuY2hhbmdlZDsgb25seSBwdXQgb2xkIGJhY2sgaW50byBvbGRfZGlyLiAqL1xcbitcXHRcXHRpZiAoYWZmc19yZWluc2VydF93aXRoX25hbWUob2xkX2RpciwgYmhfb2xkLCBvbGRfZGVudHJ5KSlcXG4rXFx0XFx0XFx0YWZmc193YXJuaW5nKHNiLCBcXFwieHJlbmFtZVxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byByZXN0b3JlIGlub2RlICVsdVxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgKHVuc2lnbmVkIGxvbmcpYmhfb2xkLVxcdTAwM2ViX2Jsb2NrbnIpO1xcbiBcXHRcXHRnb3RvIGRvbmU7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIEluc2VydCBvbGQgaW50byB0aGUgbmV3IGRpcmVjdG9yeSB3aXRoIHRoZSBuZXcgbmFtZS4gKi9cXG4tXFx0YWZmc19jb3B5X25hbWUoQUZGU19UQUlMKHNiLCBiaF9vbGQpLVxcdTAwM2VuYW1lLCBuZXdfZGVudHJ5KTtcXG4tXFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoX29sZCk7XFxuLVxcdGFmZnNfbG9ja19kaXIobmV3X2Rpcik7XFxuLVxcdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2gobmV3X2RpciwgYmhfb2xkKTtcXG4tXFx0YWZmc191bmxvY2tfZGlyKG5ld19kaXIpO1xcbitcXHRyZXR2YWwgPSBhZmZzX3JlaW5zZXJ0X3dpdGhfbmFtZShuZXdfZGlyLCBiaF9vbGQsIG5ld19kZW50cnkpO1xcbitcXHRpZiAocmV0dmFsKSB7XFxuK1xcdFxcdGFmZnNfeHJlbmFtZV9yZXN0b3JlKG9sZF9kaXIsIG5ld19kaXIsIGJoX29sZCwgYmhfbmV3LFxcbitcXHRcXHRcXHRcXHQgICAgIG9sZF9kZW50cnksIG5ld19kZW50cnkpO1xcbitcXHRcXHRnb3RvIGRvbmU7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIEluc2VydCBuZXcgaW50byB0aGUgb2xkIGRpcmVjdG9yeSB3aXRoIHRoZSBvbGQgbmFtZS4gKi9cXG4tXFx0YWZmc19jb3B5X25hbWUoQUZGU19UQUlMKHNiLCBiaF9uZXcpLVxcdTAwM2VuYW1lLCBvbGRfZGVudHJ5KTtcXG4tXFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoX25ldyk7XFxuLVxcdGFmZnNfbG9ja19kaXIob2xkX2Rpcik7XFxuLVxcdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2gob2xkX2RpciwgYmhfbmV3KTtcXG4tXFx0YWZmc191bmxvY2tfZGlyKG9sZF9kaXIpO1xcbitcXHRyZXR2YWwgPSBhZmZzX3JlaW5zZXJ0X3dpdGhfbmFtZShvbGRfZGlyLCBiaF9uZXcsIG9sZF9kZW50cnkpO1xcbitcXHRpZiAocmV0dmFsKSB7XFxuK1xcdFxcdC8qIFVuZG8gdGhlIGZpcnN0IGluc2VydCwgdGhlbiByZXN0b3JlIGJvdGggb3JpZ2luYWxzLiAqL1xcbitcXHRcXHRhZmZzX2xvY2tfZGlyKG5ld19kaXIpO1xcbitcXHRcXHRyZXR2YWwyID0gYWZmc19yZW1vdmVfaGFzaChuZXdfZGlyLCBiaF9vbGQpO1xcbitcXHRcXHRhZmZzX3VubG9ja19kaXIobmV3X2Rpcik7XFxuK1xcdFxcdGlmIChyZXR2YWwyKVxcbitcXHRcXHRcXHRhZmZzX3dhcm5pbmcoc2IsIFxcXCJ4cmVuYW1lXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwidW5kbyBpbnNlcnQgb2YgaW5vZGUgJWx1IGZhaWxlZCAoJWQpXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAodW5zaWduZWQgbG9uZyliaF9vbGQtXFx1MDAzZWJfYmxvY2tuciwgcmV0dmFsMik7XFxuK1xcdFxcdGFmZnNfeHJlbmFtZV9yZXN0b3JlKG9sZF9kaXIsIG5ld19kaXIsIGJoX29sZCwgYmhfbmV3LFxcbitcXHRcXHRcXHRcXHQgICAgIG9sZF9kZW50cnksIG5ld19kZW50cnkpO1xcbitcXHR9XFxuK1xcbiBkb25lOlxcbi1cXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmhfb2xkLCBcXHUwMDI2QUZGU19JKG5ld19kaXIpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuLVxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcsIFxcdTAwMjZBRkZTX0kob2xkX2RpciktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoX29sZCwgXFx1MDAyNkFGRlNfSShyZXR2YWwgPyBvbGRfZGlyIDogbmV3X2RpciktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoX25ldywgXFx1MDAyNkFGRlNfSShyZXR2YWwgPyBuZXdfZGlyIDogb2xkX2RpciktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4gXFx0YWZmc19icmVsc2UoYmhfb2xkKTtcXG4gXFx0YWZmc19icmVsc2UoYmhfbmV3KTtcXG4gXFx0cmV0dXJuIHJldHZhbDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTQ6MjY6MDEuODAyNzY3NzU4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjkzMzU1NDk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRkZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWZmc19leHRlbnRfZmlsZV9vZnNcIixcbiAgICBcImFmZnNfcmVuYW1lXCIsXG4gICAgXCJhZmZzX3hyZW5hbWVcIixcbiAgICBcImFmZnNfd3JpdGVfYmVnaW5fb2ZzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHJvbGxiYWNrIGxvZ2ljIGluIEFGRlMgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgaW4gZmlsZSBleHRlbnNpb24gKGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKSwgcmVuYW1lIChhZmZzX3JlbmFtZSwgYWZmc194cmVuYW1lKSwgYW5kIGJsb2NrIGFsbG9jYXRpb24gKGFmZnNfZ2V0emVyb2JsaywgYWZmc19nZXRlbXB0eWJsaykuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGZpbGVzeXN0ZW0gY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIHN0YW5kYXJkIHN5c2NhbGxzIG9uIGFuIEFGRlMgbW91bnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWU0MTU4ZjA0ZDIwMDliZjMyYWZmMjZkZjFkYzRiMTJlNWRiMmY5ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDE0IDE0OjI2OjAwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9hZmZzLmggYi9mcy9hZmZzL2FmZnMuaFxuaW5kZXggNDRhM2Y2OWQyNzVmOTYuLjY1MWQ2MWIzMjEzYTE0IDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9hZmZzLmhcbisrKyBiL2ZzL2FmZnMvYWZmcy5oXG5AQCAtMjUwLDYgKzI1MCw4IEBAIGFmZnNfZ2V0emVyb2JsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgYmxvY2spXG4gXHRwcl9kZWJ1ZyhcIiVzOiAlZFxcblwiLCBfX2Z1bmNfXywgYmxvY2spO1xuIFx0aWYgKGFmZnNfdmFsaWRibG9jayhzYiwgYmxvY2spKSB7XG4gXHRcdGJoID0gc2JfZ2V0YmxrKHNiLCBibG9jayk7XG4rXHRcdGlmICghYmgpXG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdGxvY2tfYnVmZmVyKGJoKTtcbiBcdFx0bWVtc2V0KGJoLVx1MDAzZWJfZGF0YSwgMCAsIHNiLVx1MDAzZXNfYmxvY2tzaXplKTtcbiBcdFx0c2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7XG5AQCAtMjY1LDYgKzI2Nyw4IEBAIGFmZnNfZ2V0ZW1wdHlibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGJsb2NrKVxuIFx0cHJfZGVidWcoXCIlczogJWRcXG5cIiwgX19mdW5jX18sIGJsb2NrKTtcbiBcdGlmIChhZmZzX3ZhbGlkYmxvY2soc2IsIGJsb2NrKSkge1xuIFx0XHRiaCA9IHNiX2dldGJsayhzYiwgYmxvY2spO1xuK1x0XHRpZiAoIWJoKVxuK1x0XHRcdHJldHVybiBOVUxMO1xuIFx0XHR3YWl0X29uX2J1ZmZlcihiaCk7XG4gXHRcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xuIFx0XHRyZXR1cm4gYmg7XG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9maWxlLmMgYi9mcy9hZmZzL2ZpbGUuY1xuaW5kZXggMTQ0YjE3NDgyZDEyZGEuLjMyNjViNmI2YmY5ZjhmIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9maWxlLmNcbisrKyBiL2ZzL2FmZnMvZmlsZS5jXG5AQCAtNTY5LDYgKzU2OSw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxuIFx0cHJfZGVidWcoXCIlcyglbGx1LCAlZClcXG5cIiwgX19mdW5jX18sIGlub2RlLVx1MDAzZWlfaW5vLCBuZXdzaXplKTtcbiBcdGJzaXplID0gQUZGU19TQihzYiktXHUwMDNlc19kYXRhX2Jsa3NpemU7XG4gXHRiaCA9IE5VTEw7XG4rXHRwcmV2X2JoID0gTlVMTDtcbiBcdHNpemUgPSBBRkZTX0koaW5vZGUpLVx1MDAzZW1tdV9wcml2YXRlO1xuIFx0YmlkeCA9IHNpemUgLyBic2l6ZTtcbiBcdGJvZmYgPSBzaXplICUgYnNpemU7XG5AQCAtNjI1LDcgKzYyNiw5IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxuIFx0cmV0dXJuIDA7XG4gXG4gb3V0OlxuLVx0aW5vZGUtXHUwMDNlaV9zaXplID0gQUZGU19JKGlub2RlKS1cdTAwM2VtbXVfcHJpdmF0ZSA9IG5ld3NpemU7XG4rXHRhZmZzX2JyZWxzZShwcmV2X2JoKTtcbitcdC8qIEtlZXAgaV9zaXplL21tdV9wcml2YXRlIGF0IGhvdyBmYXIgd2UgYWN0dWFsbHkgZXh0ZW5kZWQuICovXG4rXHRpbm9kZS1cdTAwM2VpX3NpemUgPSBBRkZTX0koaW5vZGUpLVx1MDAzZW1tdV9wcml2YXRlID0gc2l6ZTtcbiBcdHJldHVybiBQVFJfRVJSKGJoKTtcbiB9XG4gXG5AQCAtNjYyLDkgKzY2NSw2IEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9iZWdpbl9vZnMoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0cHJfZGVidWcoXCIlcyglbGx1LCAlbGx1LCAlbGx1KVxcblwiLCBfX2Z1bmNfXywgaW5vZGUtXHUwMDNlaV9pbm8sIHBvcyxcbiBcdFx0IHBvcyArIGxlbik7XG4gXHRpZiAocG9zIFx1MDAzZSBBRkZTX0koaW5vZGUpLVx1MDAzZW1tdV9wcml2YXRlKSB7XG4tXHRcdC8qIFhYWDogdGhpcyBwcm9iYWJseSBsZWF2ZXMgYSB0b28tYmlnIGlfc2l6ZSBpbiBjYXNlIG9mXG4tXHRcdCAqIGZhaWx1cmUuIFNob3VsZCByZWFsbHkgYmUgdXBkYXRpbmcgaV9zaXplIGF0IHdyaXRlX2VuZCB0aW1lXG4tXHRcdCAqL1xuIFx0XHRlcnIgPSBhZmZzX2V4dGVudF9maWxlX29mcyhpbm9kZSwgcG9zKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvbmFtZWkuYyBiL2ZzL2FmZnMvbmFtZWkuY1xuaW5kZXggYzNjNjUzMmRhNGIwZGEuLjA4ZWRmZGFlZWZjMzRhIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9uYW1laS5jXG4rKysgYi9mcy9hZmZzL25hbWVpLmNcbkBAIC00MDEsNiArNDAxLDM4IEBAIGFmZnNfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0cmV0dXJuIGFmZnNfYWRkX2VudHJ5KGRpciwgaW5vZGUsIGRlbnRyeSwgU1RfTElOS0ZJTEUpO1xuIH1cbiBcbisvKiBXcml0ZSBkZW50cnkgbmFtZSBpbnRvIGhlYWRlciBhbmQgaW5zZXJ0IGludG8gZGlyIChzdWNjZXNzIG9yIHJvbGxiYWNrKS4gKi9cbitzdGF0aWMgaW50IGFmZnNfcmVpbnNlcnRfd2l0aF9uYW1lKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuK1x0XHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuK3tcbitcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItXHUwMDNlaV9zYjtcbitcdGludCBlcnI7XG4rXG4rXHRhZmZzX2NvcHlfbmFtZShBRkZTX1RBSUwoc2IsIGJoKS1cdTAwM2VuYW1lLCBkZW50cnkpO1xuK1x0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcbitcdGFmZnNfbG9ja19kaXIoZGlyKTtcbitcdGVyciA9IGFmZnNfaW5zZXJ0X2hhc2goZGlyLCBiaCk7XG4rXHRhZmZzX3VubG9ja19kaXIoZGlyKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuKy8qIFB1dCBib3RoIGV4Y2hhbmdlIG9iamVjdHMgYmFjayB1bmRlciB0aGVpciBvcmlnaW5hbCBuYW1lcy9kaXJzLiAqL1xuK3N0YXRpYyB2b2lkIGFmZnNfeHJlbmFtZV9yZXN0b3JlKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGlub2RlICpuZXdfZGlyLFxuK1x0XHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfb2xkLFxuK1x0XHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfbmV3LFxuK1x0XHRcdFx0IHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4rXHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbit7XG4rXHRpZiAoYWZmc19yZWluc2VydF93aXRoX25hbWUob2xkX2RpciwgYmhfb2xkLCBvbGRfZGVudHJ5KSlcbitcdFx0YWZmc193YXJuaW5nKG9sZF9kaXItXHUwMDNlaV9zYiwgXCJ4cmVuYW1lXCIsXG4rXHRcdFx0ICAgICBcImZhaWxlZCB0byByZXN0b3JlIGlub2RlICVsdVwiLFxuK1x0XHRcdCAgICAgKHVuc2lnbmVkIGxvbmcpYmhfb2xkLVx1MDAzZWJfYmxvY2tucik7XG4rXHRpZiAoYWZmc19yZWluc2VydF93aXRoX25hbWUobmV3X2RpciwgYmhfbmV3LCBuZXdfZGVudHJ5KSlcbitcdFx0YWZmc193YXJuaW5nKG5ld19kaXItXHUwMDNlaV9zYiwgXCJ4cmVuYW1lXCIsXG4rXHRcdFx0ICAgICBcImZhaWxlZCB0byByZXN0b3JlIGlub2RlICVsdVwiLFxuK1x0XHRcdCAgICAgKHVuc2lnbmVkIGxvbmcpYmhfbmV3LVx1MDAzZWJfYmxvY2tucik7XG4rfVxuK1xuIHN0YXRpYyBpbnRcbiBhZmZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHQgICAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuQEAgLTQzNCwxMyArNDY2LDE1IEBAIGFmZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdGlmIChyZXR2YWwpXG4gXHRcdGdvdG8gZG9uZTtcbiBcbi1cdC8qIEFuZCBpbnNlcnQgaXQgaW50byB0aGUgbmV3IGRpcmVjdG9yeSB3aXRoIHRoZSBuZXcgbmFtZS4gKi9cbi1cdGFmZnNfY29weV9uYW1lKEFGRlNfVEFJTChzYiwgYmgpLVx1MDAzZW5hbWUsIG5ld19kZW50cnkpO1xuLVx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcbi1cdGFmZnNfbG9ja19kaXIobmV3X2Rpcik7XG4tXHRyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKG5ld19kaXIsIGJoKTtcbi1cdGFmZnNfdW5sb2NrX2RpcihuZXdfZGlyKTtcbi1cdC8qIFRPRE86IG1vdmUgaXQgYmFjayB0byBvbGRfZGlyLCBpZiBlcnJvcj8gKi9cbitcdC8qIEluc2VydCBpbnRvIHRoZSBuZXcgZGlyZWN0b3J5IHdpdGggdGhlIG5ldyBuYW1lLiAqL1xuK1x0cmV0dmFsID0gYWZmc19yZWluc2VydF93aXRoX25hbWUobmV3X2RpciwgYmgsIG5ld19kZW50cnkpO1xuK1x0aWYgKHJldHZhbCkge1xuK1x0XHQvKiBvbGRfZGVudHJ5IHN0aWxsIGhhcyB0aGUgb3JpZ2luYWwgbmFtZTsgcHV0IHRoZSBvYmplY3QgYmFjay4gKi9cbitcdFx0aWYgKGFmZnNfcmVpbnNlcnRfd2l0aF9uYW1lKG9sZF9kaXIsIGJoLCBvbGRfZGVudHJ5KSlcbitcdFx0XHRhZmZzX3dhcm5pbmcoc2IsIFwicmVuYW1lXCIsXG4rXHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIHJlc3RvcmUgaW5vZGUgJWx1XCIsXG4rXHRcdFx0XHQgICAgICh1bnNpZ25lZCBsb25nKWJoLVx1MDAzZWJfYmxvY2tucik7XG4rXHR9XG4gXG4gZG9uZTpcbiBcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCxcbkBAIC00NTMsMTEgKzQ4NywxMCBAQCBzdGF0aWMgaW50XG4gYWZmc194cmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdCAgICAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbi1cbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvbGRfZGlyLVx1MDAzZWlfc2I7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX29sZCA9IE5VTEw7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX25ldyA9IE5VTEw7XG4tXHRpbnQgcmV0dmFsO1xuK1x0aW50IHJldHZhbCwgcmV0dmFsMjtcbiBcbiBcdGJoX29sZCA9IGFmZnNfYnJlYWQoc2IsIGRfaW5vZGUob2xkX2RlbnRyeSktXHUwMDNlaV9pbm8pO1xuIFx0aWYgKCFiaF9vbGQpXG5AQCAtNDgwLDI1ICs1MTMsNDEgQEAgYWZmc194cmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdGFmZnNfbG9ja19kaXIobmV3X2Rpcik7XG4gXHRyZXR2YWwgPSBhZmZzX3JlbW92ZV9oYXNoKG5ld19kaXIsIGJoX25ldyk7XG4gXHRhZmZzX3VubG9ja19kaXIobmV3X2Rpcik7XG4tXHRpZiAocmV0dmFsKVxuK1x0aWYgKHJldHZhbCkge1xuK1x0XHQvKiBOYW1lcyB1bmNoYW5nZWQ7IG9ubHkgcHV0IG9sZCBiYWNrIGludG8gb2xkX2Rpci4gKi9cbitcdFx0aWYgKGFmZnNfcmVpbnNlcnRfd2l0aF9uYW1lKG9sZF9kaXIsIGJoX29sZCwgb2xkX2RlbnRyeSkpXG4rXHRcdFx0YWZmc193YXJuaW5nKHNiLCBcInhyZW5hbWVcIixcbitcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gcmVzdG9yZSBpbm9kZSAlbHVcIixcbitcdFx0XHRcdCAgICAgKHVuc2lnbmVkIGxvbmcpYmhfb2xkLVx1MDAzZWJfYmxvY2tucik7XG4gXHRcdGdvdG8gZG9uZTtcbitcdH1cbiBcbiBcdC8qIEluc2VydCBvbGQgaW50byB0aGUgbmV3IGRpcmVjdG9yeSB3aXRoIHRoZSBuZXcgbmFtZS4gKi9cbi1cdGFmZnNfY29weV9uYW1lKEFGRlNfVEFJTChzYiwgYmhfb2xkKS1cdTAwM2VuYW1lLCBuZXdfZGVudHJ5KTtcbi1cdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaF9vbGQpO1xuLVx0YWZmc19sb2NrX2RpcihuZXdfZGlyKTtcbi1cdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2gobmV3X2RpciwgYmhfb2xkKTtcbi1cdGFmZnNfdW5sb2NrX2RpcihuZXdfZGlyKTtcbitcdHJldHZhbCA9IGFmZnNfcmVpbnNlcnRfd2l0aF9uYW1lKG5ld19kaXIsIGJoX29sZCwgbmV3X2RlbnRyeSk7XG4rXHRpZiAocmV0dmFsKSB7XG4rXHRcdGFmZnNfeHJlbmFtZV9yZXN0b3JlKG9sZF9kaXIsIG5ld19kaXIsIGJoX29sZCwgYmhfbmV3LFxuK1x0XHRcdFx0ICAgICBvbGRfZGVudHJ5LCBuZXdfZGVudHJ5KTtcbitcdFx0Z290byBkb25lO1xuK1x0fVxuIFxuIFx0LyogSW5zZXJ0IG5ldyBpbnRvIHRoZSBvbGQgZGlyZWN0b3J5IHdpdGggdGhlIG9sZCBuYW1lLiAqL1xuLVx0YWZmc19jb3B5X25hbWUoQUZGU19UQUlMKHNiLCBiaF9uZXcpLVx1MDAzZW5hbWUsIG9sZF9kZW50cnkpO1xuLVx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoX25ldyk7XG4tXHRhZmZzX2xvY2tfZGlyKG9sZF9kaXIpO1xuLVx0cmV0dmFsID0gYWZmc19pbnNlcnRfaGFzaChvbGRfZGlyLCBiaF9uZXcpO1xuLVx0YWZmc191bmxvY2tfZGlyKG9sZF9kaXIpO1xuK1x0cmV0dmFsID0gYWZmc19yZWluc2VydF93aXRoX25hbWUob2xkX2RpciwgYmhfbmV3LCBvbGRfZGVudHJ5KTtcbitcdGlmIChyZXR2YWwpIHtcbitcdFx0LyogVW5kbyB0aGUgZmlyc3QgaW5zZXJ0LCB0aGVuIHJlc3RvcmUgYm90aCBvcmlnaW5hbHMuICovXG4rXHRcdGFmZnNfbG9ja19kaXIobmV3X2Rpcik7XG4rXHRcdHJldHZhbDIgPSBhZmZzX3JlbW92ZV9oYXNoKG5ld19kaXIsIGJoX29sZCk7XG4rXHRcdGFmZnNfdW5sb2NrX2RpcihuZXdfZGlyKTtcbitcdFx0aWYgKHJldHZhbDIpXG4rXHRcdFx0YWZmc193YXJuaW5nKHNiLCBcInhyZW5hbWVcIixcbitcdFx0XHRcdCAgICAgXCJ1bmRvIGluc2VydCBvZiBpbm9kZSAlbHUgZmFpbGVkICglZClcIixcbitcdFx0XHRcdCAgICAgKHVuc2lnbmVkIGxvbmcpYmhfb2xkLVx1MDAzZWJfYmxvY2tuciwgcmV0dmFsMik7XG4rXHRcdGFmZnNfeHJlbmFtZV9yZXN0b3JlKG9sZF9kaXIsIG5ld19kaXIsIGJoX29sZCwgYmhfbmV3LFxuK1x0XHRcdFx0ICAgICBvbGRfZGVudHJ5LCBuZXdfZGVudHJ5KTtcbitcdH1cbitcbiBkb25lOlxuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoX29sZCwgXHUwMDI2QUZGU19JKG5ld19kaXIpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcsIFx1MDAyNkFGRlNfSShvbGRfZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmhfb2xkLCBcdTAwMjZBRkZTX0kocmV0dmFsID8gb2xkX2RpciA6IG5ld19kaXIpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcsIFx1MDAyNkFGRlNfSShyZXR2YWwgPyBuZXdfZGlyIDogb2xkX2RpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuIFx0YWZmc19icmVsc2UoYmhfb2xkKTtcbiBcdGFmZnNfYnJlbHNlKGJoX25ldyk7XG4gXHRyZXR1cm4gcmV0dmFsO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTQ6MjY6MDEuODAyNzY5MTc4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUxNzg3NjE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggZm9yIEFGRlMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgdGhlIEFGRlMgY29kZSDigJMgc3BlY2lmaWNhbGx5LCBgYWZmcy5oYCwgYGZpbGUuY2AsIGFuZCBgbmFtZWkuY2AuIFN0cmFpZ2h0IGF3YXksIEkgY2FuIHRlbGwgdGhpcyBpcyBkZWFsaW5nIHdpdGggc29tZSBsb3ctbGV2ZWwgZmlsZXN5c3RlbSBzdHVmZiB3aXRoaW4gdGhlIEFtaWdhIEZhc3QgRmlsZSBTeXN0ZW0uIFdlJ3JlIGxvb2tpbmcgYXQgZnVuY3Rpb25hbCBjaGFuZ2VzIGhlcmUsIHRoZSBtZWF0IGFuZCBwb3RhdG9lcyBvZiBob3cgQUZGUyBvcGVyYXRlcy5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGFkZHJlc3NlcyBhIGZldyBrZXkgaXNzdWVzLiBGaXJzdCwgaXQgc2VlbXMgbGlrZSB3ZSdyZSBoYXJkZW5pbmcgc29tZSBibG9jayBhbGxvY2F0aW9uIHJvdXRpbmVzLCBgYWZmc19nZXR6ZXJvYmxrYCBhbmQgYGFmZnNfZ2V0ZW1wdHlibGtgLiBUaGV5J3JlIG5vdyBjaGVja2luZyBmb3IgTlVMTCByZXR1cm5zIGZyb20gYHNiX2dldGJsa2AsIHdoaWNoIGlzIGdvb2QgcHJhY3RpY2UgdG8gcHJldmVudCBjcmFzaGVzIGR1ZSB0byBibG9jayBhbGxvY2F0aW9uIGZhaWx1cmVzLiBUaGF0J3MgY3JpdGljYWwgaW4gYSBmaWxlc3lzdGVtLlxuXG5UaGVuIHRoZXJlJ3MgdGhlIGBhZmZzX2V4dGVudF9maWxlX29mc2AgZml4LiBMb29rcyBsaWtlIGl0J3MgYmVlbiB1cGRhdGVkIHRvIHJlbGVhc2UgYHByZXZfYmhgIGNvcnJlY3RseSBhbmQgbWFrZSBzdXJlIHRoZSBpbm9kZSdzIHNpemUgYW5kIGBtbXVfcHJpdmF0ZWAgYXJlIHByb3Blcmx5IHVwZGF0ZWQgdG8gdGhlIGV4dGVuZGVkIHNpemUsIGV2ZW4gb24gZmFpbHVyZS4gTWlzc2luZyB0aG9zZSB3b3VsZCBiZSBwcm9ibGVtYXRpYyAtIGRhdGEgY29ycnVwdGlvbiBvciBwb3RlbnRpYWxseSBldmVuIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy5cblxuRmluYWxseSwgd2UndmUgZ290IHJvbGxiYWNrIG1lY2hhbmlzbXMgaW50cm9kdWNlZCBmb3IgYGFmZnNfcmVuYW1lYCBhbmQgYGFmZnNfeHJlbmFtZWAuIElmIGFuIGluc2VydGlvbiBmYWlscywgdGhpcyBnaXZlcyB1cyBhIHdheSB0byBtYWludGFpbiBkYXRhIGludGVncml0eSBkdXJpbmcgZmlsZSByZW5hbWVzLiBUaGF0J3MgYSBtdXN0LWhhdmUgZm9yIGFueSByZWxpYWJsZSBmaWxlc3lzdGVtIG9wZXJhdGlvbi5cblxuRnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhpcyBpcyBhbGwgdmVyeSBzZW5zaWJsZSBhbmQgY291bGQgaGF2ZSBpbXBvcnRhbnQgaW1wbGljYXRpb25zIGZvciBzdGFiaWxpdHkgYW5kIHJlbGlhYmlsaXR5IHdoZW4gc29tZW9uZSBpcyB1c2luZyBhbiBBRkZTIGltYWdlLiBUaGlzIGlzIGFsbCByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucywgdGhpbmdzIGxpa2UgcmVuYW1pbmcsIHdyaXRpbmcsIGV0Yy4sIGFzc3VtaW5nIHRoZXkgaGF2ZSBhbiBBRkZTIGltYWdlIG1vdW50ZWQuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gbWFrZSBzdXJlIHRoYXQgQUZGUyBpcyBlbmFibGVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBjb25maWcuIExldCdzIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIGlmIEFGRlMgc3VwcG9ydCBpcyBhY3R1YWxseSBidWlsdCBpbnRvIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MjAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNDoyNjowOC4zMjA2NDY3NjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NzAzNzk2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQUZGU19GU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZmZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9hZmZzL0tjb25maWc6Mjpjb25maWcgQUZGU19GU1xcbmZzL2FmZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJBbWlnYSBGRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTQ6MjY6MDkuOTc3Njg5ODA1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ3Mzc1OTU4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQUZGU19GUyBDb25maWd1cmF0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBpbiBxdWVzdGlvbiBpcyBgQUZGU19GU2AuIExldCBtZSBxdWlja2x5IHJldmlldyB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIHdpdGhpbiB0aGlzIGNvbnRleHQuIEJhc2VkIG9uIHRoZSBsaXN0LCBpdCBsb29rcyBsaWtlIHRoZXJlIGhhdmUgYmVlbiBzb21lIHVwZGF0ZXMgdG8gdGhlIGZvbGxvd2luZzogYGFmZnNfZ2V0emVyb2Jsa2AsIGBhZmZzX2dldGVtcHR5YmxrYCwgYGFmZnNfZXh0ZW50X2ZpbGVfb2ZzYCwgYGFmZnNfd3JpdGVfYmVnaW5fb2ZzYCwgYGFmZnNfbGlua2AsIGBhZmZzX3JlaW5zZXJ0X3dpdGhfbmFtZWAsIGBhZmZzX3hyZW5hbWVfcmVzdG9yZWAsIGBhZmZzX3JlbmFtZWAsIGFuZCBgYWZmc194cmVuYW1lYC5cblxuTm93LCBjb25zaWRlcmluZyB0aGUgaW1wYWN0LCBJIHRoaW5rIGl0J3MgaW1wb3J0YW50IHRvIHNwZWNpZmljYWxseSBmbGFnIHRoZXNlIGZ1bmN0aW9ucyBmb3IgZnVydGhlciBhbmFseXNpcyB3aXRoaW4gYEZvY3VzU3ltYm9sc2AuIExldCdzIGdldCB0aGVtIGxpc3RlZDogYGFmZnNfZ2V0emVyb2Jsa2AsIGBhZmZzX2dldGVtcHR5YmxrYCwgYGFmZnNfZXh0ZW50X2ZpbGVfb2ZzYCwgYGFmZnNfd3JpdGVfYmVnaW5fb2ZzYCwgYGFmZnNfcmVuYW1lYCwgYW5kIGBhZmZzX3hyZW5hbWVgLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoZSB1c2FnZSBvZiBgYWZmc19nZXR6ZXJvYmxrYCBhbmQgYGFmZnNfZ2V0ZW1wdHlibGtgIG5vdy4gVGhlc2UgYXJlIG9mdGVuIGNyaXRpY2FsIGZ1bmN0aW9ucyBhbmQgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZWlyIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjU0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE0OjI2OjE0LjQ1MTQ1MDcwOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzExNTg0MzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmZnNfZ2V0emVyb2Jsa1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZmZzL2FmZnMuaD0yNDY9c3RhdGljIGlubGluZSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKlxcbmZzL2FmZnMvYWZmcy5oOjI0NzphZmZzX2dldHplcm9ibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGJsb2NrKVxcbmZzL2FmZnMvYWZmcy5oLTI0OC17XFxuLS1cXG5mcy9hZmZzL2ZpbGUuYz0xMjE9YWZmc19hbGxvY19leHRibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCB1MzIgZXh0KVxcbi0tXFxuZnMvYWZmcy9maWxlLmMtMTMwLVxcbmZzL2FmZnMvZmlsZS5jOjEzMTpcXHRuZXdfYmggPSBhZmZzX2dldHplcm9ibGsoc2IsIGJsb2NrbnIpO1xcbmZzL2FmZnMvZmlsZS5jLTEzMi1cXHRpZiAoIW5ld19iaCkge1xcbi0tXFxuZnMvYWZmcy9maWxlLmM9NDkwPXN0YXRpYyBpbmxpbmUgc3RydWN0IGJ1ZmZlcl9oZWFkICpcXG5mcy9hZmZzL2ZpbGUuYzo0OTE6YWZmc19nZXR6ZXJvYmxrX2lubyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgYmxvY2spXFxuZnMvYWZmcy9maWxlLmMtNDkyLXtcXG4tLVxcbmZzL2FmZnMvZmlsZS5jLTQ5OC1cXHRpZiAoIWVycikge1xcbmZzL2FmZnMvZmlsZS5jOjQ5OTpcXHRcXHRiaCA9IGFmZnNfZ2V0emVyb2Jsayhpbm9kZS1cXHUwMDNlaV9zYiwgdG1wX2JoLmJfYmxvY2tucik7XFxuZnMvYWZmcy9maWxlLmMtNTAwLVxcdFxcdGlmIChiaCkge1xcbi0tXFxuZnMvYWZmcy9maWxlLmM9NTYxPWFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxcbi0tXFxuZnMvYWZmcy9maWxlLmMtNTk1LVxcdFxcdHByZXZfYmggPSBiaDtcXG5mcy9hZmZzL2ZpbGUuYzo1OTY6XFx0XFx0YmggPSBhZmZzX2dldHplcm9ibGtfaW5vKGlub2RlLCBiaWR4KTtcXG5mcy9hZmZzL2ZpbGUuYy01OTctXFx0XFx0aWYgKElTX0VSUihiaCkpXFxuLS1cXG5mcy9hZmZzL2lub2RlLmM9MjkyPWFmZnNfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyKVxcbi0tXFxuZnMvYWZmcy9pbm9kZS5jLTMwNC1cXG5mcy9hZmZzL2lub2RlLmM6MzA1OlxcdGJoID0gYWZmc19nZXR6ZXJvYmxrKHNiLCBibG9jayk7XFxuZnMvYWZmcy9pbm9kZS5jLTMwNi1cXHRpZiAoIWJoKVxcbi0tXFxuZnMvYWZmcy9pbm9kZS5jPTM0OT1hZmZzX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzMzIgdHlwZSlcXG4tLVxcbmZzL2FmZnMvaW5vZGUuYy0zNzQtXFx0XFx0aW5vZGVfYmggPSBiaDtcXG5mcy9hZmZzL2lub2RlLmM6Mzc1OlxcdFxcdGJoID0gYWZmc19nZXR6ZXJvYmxrKHNiLCBibG9jayk7XFxuZnMvYWZmcy9pbm9kZS5jLTM3Ni1cXHRcXHRpZiAoIWJoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNDoyNjoxNi4xNjMwNDA1MjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODU0OTA2MjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBBRkZTIEZpbGUgU3lzdGVtIFN5bWJvbHMgZm9yIEZvY3VzU3ltYm9scyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIEFGRlMgZmlsZSBzeXN0ZW0gZnVuY3Rpb25zOiBgYWZmc19nZXR6ZXJvYmxrYCwgYGFmZnNfZ2V0ZW1wdHlibGtgLCBgYWZmc19leHRlbnRfZmlsZV9vZnNgLCBgYWZmc193cml0ZV9iZWdpbl9vZnNgLCBgYWZmc19yZW5hbWVgLCBhbmQgYGFmZnNfeHJlbmFtZWAuIFRoZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lcyBhcmUgZ29vZCBjYW5kaWRhdGVzIGZvciBgRm9jdXNTeW1ib2xzYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGFmZnNfZ2V0emVyb2Jsa2AgYW5kIGBhZmZzX2dldGVtcHR5YmxrYCBhcmUgcHJvYmFibHkgYSBiaXQgdHJpY2t5LiBUaGV5J3JlIGRlZmluZWQgYXMgYHN0YXRpYyBpbmxpbmVgIGluIGBmcy9hZmZzL2FmZnMuaGAuIEJlY2F1c2UgdGhleSdyZSBpbmxpbmVkLCBpdCBtZWFucyB0aGUgY29tcGlsZXIgbWlnaHQgb3B0aW1pemUgdGhlbSBhd2F5IGR1cmluZyBjb21waWxhdGlvbiwgd2hpY2ggY291bGQgbWFrZSB0aGVtIGxlc3MgdXNlZnVsIGZvciB0aGUgYEZvY3VzU3ltYm9sc2AgYW5hbHlzaXMuIFdlJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGhvdyB0aGUgY29tcGlsZXIgaGFuZGxlcyBpbmxpbmVzIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC5cblxuT24gdGhlIG90aGVyIGhhbmQsIGBhZmZzX2V4dGVudF9maWxlX29mc2AsIGBhZmZzX3JlbmFtZWAsIGFuZCBgYWZmc194cmVuYW1lYCBzZWVtIGxpa2Ugc29saWQgYmV0cy4gVGhleSdyZSBub3QgaW5saW5lZCwgc28gdGhleSdyZSBkZWZpbml0ZWx5IGF2YWlsYWJsZSBhcyBzZXBhcmF0ZSBmdW5jdGlvbnMuIFRob3NlIHNlZW0gbGlrZSB0aGV5J3JlIHdvcnRoIGEgY2xvc2VyIGxvb2sgZm9yIGluY2x1c2lvbiBpbiB0aGUgc2V0LlxuXG5SaWdodCBub3csIGxldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgdXNhZ2Ugb2YgYGFmZnNfZ2V0ZW1wdHlibGtgIHRvIGdldCBhIHNlbnNlIG9mIHdoZXJlIGl0J3MgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBmaWxlIHN5c3RlbSBjb2RlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHNpZ25pZmljYW5jZSBhbmQgYXBwbGljYWJpbGl0eSB0byBgRm9jdXNTeW1ib2xzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQwMCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNDoyNjoyMS4wMTc5NDgxNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU2NjA0NDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmZnNfZ2V0ZW1wdHlibGtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZmcy9hZmZzLmg9MjYzPXN0YXRpYyBpbmxpbmUgc3RydWN0IGJ1ZmZlcl9oZWFkICpcXG5mcy9hZmZzL2FmZnMuaDoyNjQ6YWZmc19nZXRlbXB0eWJsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgYmxvY2spXFxuZnMvYWZmcy9hZmZzLmgtMjY1LXtcXG4tLVxcbmZzL2FmZnMvZmlsZS5jPTUwOT1zdGF0aWMgaW5saW5lIHN0cnVjdCBidWZmZXJfaGVhZCAqXFxuZnMvYWZmcy9maWxlLmM6NTEwOmFmZnNfZ2V0ZW1wdHlibGtfaW5vKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBibG9jaylcXG5mcy9hZmZzL2ZpbGUuYy01MTEte1xcbi0tXFxuZnMvYWZmcy9maWxlLmMtNTE3LVxcdGlmICghZXJyKSB7XFxuZnMvYWZmcy9maWxlLmM6NTE4OlxcdFxcdGJoID0gYWZmc19nZXRlbXB0eWJsayhpbm9kZS1cXHUwMDNlaV9zYiwgdG1wX2JoLmJfYmxvY2tucik7XFxuZnMvYWZmcy9maWxlLmMtNTE5LVxcdFxcdGlmIChiaCkge1xcbi0tXFxuZnMvYWZmcy9maWxlLmM9NjkyPXN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4tLVxcbmZzL2FmZnMvZmlsZS5jLTc0OC1cXHRcXHRwcmV2X2JoID0gYmg7XFxuZnMvYWZmcy9maWxlLmM6NzQ5OlxcdFxcdGJoID0gYWZmc19nZXRlbXB0eWJsa19pbm8oaW5vZGUsIGJpZHgpO1xcbmZzL2FmZnMvZmlsZS5jLTc1MC1cXHRcXHRpZiAoSVNfRVJSKGJoKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTQ6MjY6MjIuNjc0NTU3MDMyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4Njc3MTAyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBBRkZTIEZpbGUgU3lzdGVtIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHJldmlld2VkIHRoZSBwYXRjaCBhbmQgSSBuZWVkIHRvIGhvbmUgaW4gb24gYSBzcGVjaWZpYyBhcmVhIGZvciBmdXp6aW5nLiBCYXNlZCBvbiB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIG91dGxpbmVkLCBJJ20gZ29pbmcgdG8gYWRkIGEgZmV3IGtleSBzeW1ib2xzIHRvIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0OiBgYWZmc19leHRlbnRfZmlsZV9vZnNgLCBgYWZmc19yZW5hbWVgLCBgYWZmc194cmVuYW1lYCwgYW5kIGBhZmZzX3dyaXRlX2JlZ2luX29mc2AuIFRoZXNlIGFyZSBhbGwgcmVsYXRlZCB0byBjcnVjaWFsIEFGRlMgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCBjb3ZlcmluZyBmaWxlIGV4dGVuc2lvbiwgcmVuYW1pbmcgKGJvdGggaW50ZXJuYWwgYW5kIGV4dGVuZGVkKSwgYW5kIHdyaXRlIG9wZXJhdGlvbiBzdGFydGluZyBvZmZzZXQuXG5cblRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGlzIGBBRkZTX0ZTYCwgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGNvbnRyb2xsaW5nIGZhY3RvciBoZXJlLiBCZWZvcmUgSSBtb3ZlIG9uLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGRlcGVuZGVudCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGVzZSBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgYEFGRlNfRlNgIGlzIHRoZSBvbmx5IG9uZSBJIG5lZWQgdG8gY29uc2lkZXI7IHRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQuXG5cblRoZSBwYXRjaCdzIHJlYXNvbmluZyBlbXBoYXNpemVzIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBpbXByb3ZlbWVudHMgaW1wYWN0aW5nIGhvdyB0aGUgZmlsZXN5c3RlbSBiZWhhdmVzIHVuZGVyIHN0YW5kYXJkIHN5c2NhbGxzLiBTaW5jZSB0aGUgXCJXb3J0aEZ1enppbmdcIiBmbGFnIGlzIHNldCB0byB0cnVlLCBpdCByZWluZm9yY2VzIHRoZSBuZWVkIGZvciByaWdvcm91cyB0ZXN0aW5nLiBXaXRoIHRoZSBgRW5hYmxlQ29uZmlnc2Agc2V0IHRvIGBBRkZTX0ZTYCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIHJlZmluZWQsIGl0J3MgdGltZSB0byBzZXQgdGhlIHJlc3VsdHMgYW5kIG1vdmUgdG8gdGhlIG5leHQgcGhhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNDYsIk91dHB1dFRva2VucyI6MTU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE0OjI2OjI4LjY2MTMyOTQ5OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0OTg5NDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRkZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWZmc19leHRlbnRfZmlsZV9vZnNcIixcbiAgICBcImFmZnNfcmVuYW1lXCIsXG4gICAgXCJhZmZzX3hyZW5hbWVcIixcbiAgICBcImFmZnNfd3JpdGVfYmVnaW5fb2ZzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHJvbGxiYWNrIGxvZ2ljIGluIEFGRlMgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgaW4gZmlsZSBleHRlbnNpb24gKGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKSwgcmVuYW1lIChhZmZzX3JlbmFtZSwgYWZmc194cmVuYW1lKSwgYW5kIGJsb2NrIGFsbG9jYXRpb24gKGFmZnNfZ2V0emVyb2JsaywgYWZmc19nZXRlbXB0eWJsaykuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGZpbGVzeXN0ZW0gY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIHN0YW5kYXJkIHN5c2NhbGxzIG9uIGFuIEFGRlMgbW91bnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmZnNfZXh0ZW50X2ZpbGVfb2ZzXCIsXG4gICAgXCJhZmZzX3JlbmFtZVwiLFxuICAgIFwiYWZmc194cmVuYW1lXCIsXG4gICAgXCJhZmZzX3dyaXRlX2JlZ2luX29mc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIGFuZCByb2xsYmFjayBsb2dpYyBpbiBBRkZTIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IGluIGZpbGUgZXh0ZW5zaW9uIChhZmZzX2V4dGVudF9maWxlX29mcyksIHJlbmFtZSAoYWZmc19yZW5hbWUsIGFmZnNfeHJlbmFtZSksIGFuZCBibG9jayBhbGxvY2F0aW9uIChhZmZzX2dldHplcm9ibGssIGFmZnNfZ2V0ZW1wdHlibGspLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBmaWxlc3lzdGVtIGNvZGUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBzdGFuZGFyZCBzeXNjYWxscyBvbiBhbiBBRkZTIG1vdW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowz98bm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-14 14:15:18 +0000 UTC FinishedAt: 2026-07-14 14:26:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3b029c035b34bbc693405ddf759f0e9b920c27f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3b029c035b34bbc693405ddf759f0e9b920c27f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFFS_FS" ], "series_id": "374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "affs_extent_file_ofs", "affs_rename", "affs_xrename", "affs_write_begin_ofs" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE0OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZmZzX2V4dGVudF9maWxlX29mcyYjMzQ7LAogICAgJiMzNDthZmZzX3JlbmFtZSYjMzQ7LAogICAgJiMzNDthZmZzX3hyZW5hbWUmIzM0OywKICAgICYjMzQ7YWZmc193cml0ZV9iZWdpbl9vZnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHJvbGxiYWNrIGxvZ2ljIGluIEFGRlMgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgaW4gZmlsZSBleHRlbnNpb24gKGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKSwgcmVuYW1lIChhZmZzX3JlbmFtZSwgYWZmc194cmVuYW1lKSwgYW5kIGJsb2NrIGFsbG9jYXRpb24gKGFmZnNfZ2V0emVyb2JsaywgYWZmc19nZXRlbXB0eWJsaykuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGZpbGVzeXN0ZW0gY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIHN0YW5kYXJkIHN5c2NhbGxzIG9uIGFuIEFGRlMgbW91bnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTQ6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5ZTQxNThmMDRkMjAwOWJmMzJhZmYyNmRmMWRjNGIxMmU1ZGIyZjlkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMTQ6MjY6MDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9hZmZzLmggYi9mcy9hZmZzL2FmZnMuaFxuaW5kZXggNDRhM2Y2OWQyNzVmOTYuLjY1MWQ2MWIzMjEzYTE0IDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9hZmZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FmZnMvYWZmcy5oXG5AQCAtMjUwLDYgJiM0MzsyNTAsOCBAQCBhZmZzX2dldHplcm9ibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGJsb2NrKVxuIFx0cHJfZGVidWcoXCYjMzQ7JXM6ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYmxvY2spO1xuIFx0aWYgKGFmZnNfdmFsaWRibG9jayhzYiwgYmxvY2spKSB7XG4gXHRcdGJoID0gc2JfZ2V0YmxrKHNiLCBibG9jayk7XG4mIzQzO1x0XHRpZiAoIWJoKVxuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0bG9ja19idWZmZXIoYmgpO1xuIFx0XHRtZW1zZXQoYmgtXHUwMDNlYl9kYXRhLCAwICwgc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuIFx0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbkBAIC0yNjUsNiAmIzQzOzI2Nyw4IEBAIGFmZnNfZ2V0ZW1wdHlibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGJsb2NrKVxuIFx0cHJfZGVidWcoXCYjMzQ7JXM6ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYmxvY2spO1xuIFx0aWYgKGFmZnNfdmFsaWRibG9jayhzYiwgYmxvY2spKSB7XG4gXHRcdGJoID0gc2JfZ2V0YmxrKHNiLCBibG9jayk7XG4mIzQzO1x0XHRpZiAoIWJoKVxuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0d2FpdF9vbl9idWZmZXIoYmgpO1xuIFx0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbiBcdFx0cmV0dXJuIGJoO1xuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvZmlsZS5jIGIvZnMvYWZmcy9maWxlLmNcbmluZGV4IDE0NGIxNzQ4MmQxMmRhLi4zMjY1YjZiNmJmOWY4ZiAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL2ZpbGUuY1xuQEAgLTU2OSw2ICYjNDM7NTY5LDcgQEAgYWZmc19leHRlbnRfZmlsZV9vZnMoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIG5ld3NpemUpXG4gXHRwcl9kZWJ1ZyhcJiMzNDslcyglbGx1LCAlZClcXG5cJiMzNDssIF9fZnVuY19fLCBpbm9kZS1cdTAwM2VpX2lubywgbmV3c2l6ZSk7XG4gXHRic2l6ZSA9IEFGRlNfU0Ioc2IpLVx1MDAzZXNfZGF0YV9ibGtzaXplO1xuIFx0YmggPSBOVUxMO1xuJiM0MztcdHByZXZfYmggPSBOVUxMO1xuIFx0c2l6ZSA9IEFGRlNfSShpbm9kZSktXHUwMDNlbW11X3ByaXZhdGU7XG4gXHRiaWR4ID0gc2l6ZSAvIGJzaXplO1xuIFx0Ym9mZiA9IHNpemUgJSBic2l6ZTtcbkBAIC02MjUsNyAmIzQzOzYyNiw5IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxuIFx0cmV0dXJuIDA7XG4gXG4gb3V0OlxuLVx0aW5vZGUtXHUwMDNlaV9zaXplID0gQUZGU19JKGlub2RlKS1cdTAwM2VtbXVfcHJpdmF0ZSA9IG5ld3NpemU7XG4mIzQzO1x0YWZmc19icmVsc2UocHJldl9iaCk7XG4mIzQzO1x0LyogS2VlcCBpX3NpemUvbW11X3ByaXZhdGUgYXQgaG93IGZhciB3ZSBhY3R1YWxseSBleHRlbmRlZC4gKi9cbiYjNDM7XHRpbm9kZS1cdTAwM2VpX3NpemUgPSBBRkZTX0koaW5vZGUpLVx1MDAzZW1tdV9wcml2YXRlID0gc2l6ZTtcbiBcdHJldHVybiBQVFJfRVJSKGJoKTtcbiB9XG4gXG5AQCAtNjYyLDkgJiM0Mzs2NjUsNiBAQCBzdGF0aWMgaW50IGFmZnNfd3JpdGVfYmVnaW5fb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdHByX2RlYnVnKFwmIzM0OyVzKCVsbHUsICVsbHUsICVsbHUpXFxuXCYjMzQ7LCBfX2Z1bmNfXywgaW5vZGUtXHUwMDNlaV9pbm8sIHBvcyxcbiBcdFx0IHBvcyAmIzQzOyBsZW4pO1xuIFx0aWYgKHBvcyBcdTAwM2UgQUZGU19JKGlub2RlKS1cdTAwM2VtbXVfcHJpdmF0ZSkge1xuLVx0XHQvKiBYWFg6IHRoaXMgcHJvYmFibHkgbGVhdmVzIGEgdG9vLWJpZyBpX3NpemUgaW4gY2FzZSBvZlxuLVx0XHQgKiBmYWlsdXJlLiBTaG91bGQgcmVhbGx5IGJlIHVwZGF0aW5nIGlfc2l6ZSBhdCB3cml0ZV9lbmQgdGltZVxuLVx0XHQgKi9cbiBcdFx0ZXJyID0gYWZmc19leHRlbnRfZmlsZV9vZnMoaW5vZGUsIHBvcyk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbmRpZmYgLS1naXQgYS9mcy9hZmZzL25hbWVpLmMgYi9mcy9hZmZzL25hbWVpLmNcbmluZGV4IGMzYzY1MzJkYTRiMGRhLi4wOGVkZmRhZWVmYzM0YSAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvbmFtZWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZmcy9uYW1laS5jXG5AQCAtNDAxLDYgJiM0Mzs0MDEsMzggQEAgYWZmc19saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRyZXR1cm4gYWZmc19hZGRfZW50cnkoZGlyLCBpbm9kZSwgZGVudHJ5LCBTVF9MSU5LRklMRSk7XG4gfVxuIFxuJiM0MzsvKiBXcml0ZSBkZW50cnkgbmFtZSBpbnRvIGhlYWRlciBhbmQgaW5zZXJ0IGludG8gZGlyIChzdWNjZXNzIG9yIHJvbGxiYWNrKS4gKi9cbiYjNDM7c3RhdGljIGludCBhZmZzX3JlaW5zZXJ0X3dpdGhfbmFtZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLVx1MDAzZWlfc2I7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0YWZmc19jb3B5X25hbWUoQUZGU19UQUlMKHNiLCBiaCktXHUwMDNlbmFtZSwgZGVudHJ5KTtcbiYjNDM7XHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xuJiM0MztcdGFmZnNfbG9ja19kaXIoZGlyKTtcbiYjNDM7XHRlcnIgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpO1xuJiM0MztcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFB1dCBib3RoIGV4Y2hhbmdlIG9iamVjdHMgYmFjayB1bmRlciB0aGVpciBvcmlnaW5hbCBuYW1lcy9kaXJzLiAqL1xuJiM0MztzdGF0aWMgdm9pZCBhZmZzX3hyZW5hbWVfcmVzdG9yZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBpbm9kZSAqbmV3X2RpcixcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9vbGQsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfbmV3LFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGFmZnNfcmVpbnNlcnRfd2l0aF9uYW1lKG9sZF9kaXIsIGJoX29sZCwgb2xkX2RlbnRyeSkpXG4mIzQzO1x0XHRhZmZzX3dhcm5pbmcob2xkX2Rpci1cdTAwM2VpX3NiLCBcJiMzNDt4cmVuYW1lXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byByZXN0b3JlIGlub2RlICVsdVwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAodW5zaWduZWQgbG9uZyliaF9vbGQtXHUwMDNlYl9ibG9ja25yKTtcbiYjNDM7XHRpZiAoYWZmc19yZWluc2VydF93aXRoX25hbWUobmV3X2RpciwgYmhfbmV3LCBuZXdfZGVudHJ5KSlcbiYjNDM7XHRcdGFmZnNfd2FybmluZyhuZXdfZGlyLVx1MDAzZWlfc2IsIFwmIzM0O3hyZW5hbWVcJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIHJlc3RvcmUgaW5vZGUgJWx1XCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICh1bnNpZ25lZCBsb25nKWJoX25ldy1cdTAwM2ViX2Jsb2NrbnIpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnRcbiBhZmZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHQgICAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuQEAgLTQzNCwxMyAmIzQzOzQ2NiwxNSBAQCBhZmZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHRpZiAocmV0dmFsKVxuIFx0XHRnb3RvIGRvbmU7XG4gXG4tXHQvKiBBbmQgaW5zZXJ0IGl0IGludG8gdGhlIG5ldyBkaXJlY3Rvcnkgd2l0aCB0aGUgbmV3IG5hbWUuICovXG4tXHRhZmZzX2NvcHlfbmFtZShBRkZTX1RBSUwoc2IsIGJoKS1cdTAwM2VuYW1lLCBuZXdfZGVudHJ5KTtcbi1cdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRhZmZzX2xvY2tfZGlyKG5ld19kaXIpO1xuLVx0cmV0dmFsID0gYWZmc19pbnNlcnRfaGFzaChuZXdfZGlyLCBiaCk7XG4tXHRhZmZzX3VubG9ja19kaXIobmV3X2Rpcik7XG4tXHQvKiBUT0RPOiBtb3ZlIGl0IGJhY2sgdG8gb2xkX2RpciwgaWYgZXJyb3I/ICovXG4mIzQzO1x0LyogSW5zZXJ0IGludG8gdGhlIG5ldyBkaXJlY3Rvcnkgd2l0aCB0aGUgbmV3IG5hbWUuICovXG4mIzQzO1x0cmV0dmFsID0gYWZmc19yZWluc2VydF93aXRoX25hbWUobmV3X2RpciwgYmgsIG5ld19kZW50cnkpO1xuJiM0MztcdGlmIChyZXR2YWwpIHtcbiYjNDM7XHRcdC8qIG9sZF9kZW50cnkgc3RpbGwgaGFzIHRoZSBvcmlnaW5hbCBuYW1lOyBwdXQgdGhlIG9iamVjdCBiYWNrLiAqL1xuJiM0MztcdFx0aWYgKGFmZnNfcmVpbnNlcnRfd2l0aF9uYW1lKG9sZF9kaXIsIGJoLCBvbGRfZGVudHJ5KSlcbiYjNDM7XHRcdFx0YWZmc193YXJuaW5nKHNiLCBcJiMzNDtyZW5hbWVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gcmVzdG9yZSBpbm9kZSAlbHVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAodW5zaWduZWQgbG9uZyliaC1cdTAwM2ViX2Jsb2NrbnIpO1xuJiM0MztcdH1cbiBcbiBkb25lOlxuIFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLFxuQEAgLTQ1MywxMSAmIzQzOzQ4NywxMCBAQCBzdGF0aWMgaW50XG4gYWZmc194cmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdCAgICAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbi1cbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvbGRfZGlyLVx1MDAzZWlfc2I7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX29sZCA9IE5VTEw7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX25ldyA9IE5VTEw7XG4tXHRpbnQgcmV0dmFsO1xuJiM0MztcdGludCByZXR2YWwsIHJldHZhbDI7XG4gXG4gXHRiaF9vbGQgPSBhZmZzX2JyZWFkKHNiLCBkX2lub2RlKG9sZF9kZW50cnkpLVx1MDAzZWlfaW5vKTtcbiBcdGlmICghYmhfb2xkKVxuQEAgLTQ4MCwyNSAmIzQzOzUxMyw0MSBAQCBhZmZzX3hyZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuIFx0YWZmc19sb2NrX2RpcihuZXdfZGlyKTtcbiBcdHJldHZhbCA9IGFmZnNfcmVtb3ZlX2hhc2gobmV3X2RpciwgYmhfbmV3KTtcbiBcdGFmZnNfdW5sb2NrX2RpcihuZXdfZGlyKTtcbi1cdGlmIChyZXR2YWwpXG4mIzQzO1x0aWYgKHJldHZhbCkge1xuJiM0MztcdFx0LyogTmFtZXMgdW5jaGFuZ2VkOyBvbmx5IHB1dCBvbGQgYmFjayBpbnRvIG9sZF9kaXIuICovXG4mIzQzO1x0XHRpZiAoYWZmc19yZWluc2VydF93aXRoX25hbWUob2xkX2RpciwgYmhfb2xkLCBvbGRfZGVudHJ5KSlcbiYjNDM7XHRcdFx0YWZmc193YXJuaW5nKHNiLCBcJiMzNDt4cmVuYW1lXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIHJlc3RvcmUgaW5vZGUgJWx1XCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgKHVuc2lnbmVkIGxvbmcpYmhfb2xkLVx1MDAzZWJfYmxvY2tucik7XG4gXHRcdGdvdG8gZG9uZTtcbiYjNDM7XHR9XG4gXG4gXHQvKiBJbnNlcnQgb2xkIGludG8gdGhlIG5ldyBkaXJlY3Rvcnkgd2l0aCB0aGUgbmV3IG5hbWUuICovXG4tXHRhZmZzX2NvcHlfbmFtZShBRkZTX1RBSUwoc2IsIGJoX29sZCktXHUwMDNlbmFtZSwgbmV3X2RlbnRyeSk7XG4tXHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmhfb2xkKTtcbi1cdGFmZnNfbG9ja19kaXIobmV3X2Rpcik7XG4tXHRyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKG5ld19kaXIsIGJoX29sZCk7XG4tXHRhZmZzX3VubG9ja19kaXIobmV3X2Rpcik7XG4mIzQzO1x0cmV0dmFsID0gYWZmc19yZWluc2VydF93aXRoX25hbWUobmV3X2RpciwgYmhfb2xkLCBuZXdfZGVudHJ5KTtcbiYjNDM7XHRpZiAocmV0dmFsKSB7XG4mIzQzO1x0XHRhZmZzX3hyZW5hbWVfcmVzdG9yZShvbGRfZGlyLCBuZXdfZGlyLCBiaF9vbGQsIGJoX25ldyxcbiYjNDM7XHRcdFx0XHQgICAgIG9sZF9kZW50cnksIG5ld19kZW50cnkpO1xuJiM0MztcdFx0Z290byBkb25lO1xuJiM0MztcdH1cbiBcbiBcdC8qIEluc2VydCBuZXcgaW50byB0aGUgb2xkIGRpcmVjdG9yeSB3aXRoIHRoZSBvbGQgbmFtZS4gKi9cbi1cdGFmZnNfY29weV9uYW1lKEFGRlNfVEFJTChzYiwgYmhfbmV3KS1cdTAwM2VuYW1lLCBvbGRfZGVudHJ5KTtcbi1cdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaF9uZXcpO1xuLVx0YWZmc19sb2NrX2RpcihvbGRfZGlyKTtcbi1cdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2gob2xkX2RpciwgYmhfbmV3KTtcbi1cdGFmZnNfdW5sb2NrX2RpcihvbGRfZGlyKTtcbiYjNDM7XHRyZXR2YWwgPSBhZmZzX3JlaW5zZXJ0X3dpdGhfbmFtZShvbGRfZGlyLCBiaF9uZXcsIG9sZF9kZW50cnkpO1xuJiM0MztcdGlmIChyZXR2YWwpIHtcbiYjNDM7XHRcdC8qIFVuZG8gdGhlIGZpcnN0IGluc2VydCwgdGhlbiByZXN0b3JlIGJvdGggb3JpZ2luYWxzLiAqL1xuJiM0MztcdFx0YWZmc19sb2NrX2RpcihuZXdfZGlyKTtcbiYjNDM7XHRcdHJldHZhbDIgPSBhZmZzX3JlbW92ZV9oYXNoKG5ld19kaXIsIGJoX29sZCk7XG4mIzQzO1x0XHRhZmZzX3VubG9ja19kaXIobmV3X2Rpcik7XG4mIzQzO1x0XHRpZiAocmV0dmFsMilcbiYjNDM7XHRcdFx0YWZmc193YXJuaW5nKHNiLCBcJiMzNDt4cmVuYW1lXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7dW5kbyBpbnNlcnQgb2YgaW5vZGUgJWx1IGZhaWxlZCAoJWQpXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgKHVuc2lnbmVkIGxvbmcpYmhfb2xkLVx1MDAzZWJfYmxvY2tuciwgcmV0dmFsMik7XG4mIzQzO1x0XHRhZmZzX3hyZW5hbWVfcmVzdG9yZShvbGRfZGlyLCBuZXdfZGlyLCBiaF9vbGQsIGJoX25ldyxcbiYjNDM7XHRcdFx0XHQgICAgIG9sZF9kZW50cnksIG5ld19kZW50cnkpO1xuJiM0MztcdH1cbiYjNDM7XG4gZG9uZTpcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9vbGQsIFx1MDAyNkFGRlNfSShuZXdfZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmhfbmV3LCBcdTAwMjZBRkZTX0kob2xkX2RpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9vbGQsIFx1MDAyNkFGRlNfSShyZXR2YWwgPyBvbGRfZGlyIDogbmV3X2RpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcsIFx1MDAyNkFGRlNfSShyZXR2YWwgPyBuZXdfZGlyIDogb2xkX2RpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuIFx0YWZmc19icmVsc2UoYmhfb2xkKTtcbiBcdGFmZnNfYnJlbHNlKGJoX25ldyk7XG4gXHRyZXR1cm4gcmV0dmFsO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE0OjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZmZzX2V4dGVudF9maWxlX29mcyYjMzQ7LAogICAgJiMzNDthZmZzX3JlbmFtZSYjMzQ7LAogICAgJiMzNDthZmZzX3hyZW5hbWUmIzM0OywKICAgICYjMzQ7YWZmc193cml0ZV9iZWdpbl9vZnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHJvbGxiYWNrIGxvZ2ljIGluIEFGRlMgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgaW4gZmlsZSBleHRlbnNpb24gKGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKSwgcmVuYW1lIChhZmZzX3JlbmFtZSwgYWZmc194cmVuYW1lKSwgYW5kIGJsb2NrIGFsbG9jYXRpb24gKGFmZnNfZ2V0emVyb2JsaywgYWZmc19nZXRlbXB0eWJsaykuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGZpbGVzeXN0ZW0gY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIHN0YW5kYXJkIHN5c2NhbGxzIG9uIGFuIEFGRlMgbW91bnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDllNDE1OGYwNGQyMDA5YmYzMmFmZjI2ZGYxZGM0YjEyZTVkYjJmOWQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAxNCAxNDoyNjowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYWZmcy5oIGIvZnMvYWZmcy9hZmZzLmgKaW5kZXggNDRhM2Y2OWQyNzVmOTYuLjY1MWQ2MWIzMjEzYTE0IDEwMDY0NAotLS0gYS9mcy9hZmZzL2FmZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL2FmZnMuaApAQCAtMjUwLDYgJiM0MzsyNTAsOCBAQCBhZmZzX2dldHplcm9ibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGJsb2NrKQogCXByX2RlYnVnKCYjMzQ7JXM6ICVkXG4mIzM0OywgX19mdW5jX18sIGJsb2NrKTsKIAlpZiAoYWZmc192YWxpZGJsb2NrKHNiLCBibG9jaykpIHsKIAkJYmggPSBzYl9nZXRibGsoc2IsIGJsb2NrKTsKJiM0MzsJCWlmICghYmgpCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiAJCWxvY2tfYnVmZmVyKGJoKTsKIAkJbWVtc2V0KGJoLSZndDtiX2RhdGEsIDAgLCBzYi0mZ3Q7c19ibG9ja3NpemUpOwogCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKQEAgLTI2NSw2ICYjNDM7MjY3LDggQEAgYWZmc19nZXRlbXB0eWJsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgYmxvY2spCiAJcHJfZGVidWcoJiMzNDslczogJWRcbiYjMzQ7LCBfX2Z1bmNfXywgYmxvY2spOwogCWlmIChhZmZzX3ZhbGlkYmxvY2soc2IsIGJsb2NrKSkgewogCQliaCA9IHNiX2dldGJsayhzYiwgYmxvY2spOwomIzQzOwkJaWYgKCFiaCkKJiM0MzsJCQlyZXR1cm4gTlVMTDsKIAkJd2FpdF9vbl9idWZmZXIoYmgpOwogCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKIAkJcmV0dXJuIGJoOwpkaWZmIC0tZ2l0IGEvZnMvYWZmcy9maWxlLmMgYi9mcy9hZmZzL2ZpbGUuYwppbmRleCAxNDRiMTc0ODJkMTJkYS4uMzI2NWI2YjZiZjlmOGYgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FmZnMvZmlsZS5jCkBAIC01NjksNiAmIzQzOzU2OSw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKQogCXByX2RlYnVnKCYjMzQ7JXMoJWxsdSwgJWQpXG4mIzM0OywgX19mdW5jX18sIGlub2RlLSZndDtpX2lubywgbmV3c2l6ZSk7CiAJYnNpemUgPSBBRkZTX1NCKHNiKS0mZ3Q7c19kYXRhX2Jsa3NpemU7CiAJYmggPSBOVUxMOwomIzQzOwlwcmV2X2JoID0gTlVMTDsKIAlzaXplID0gQUZGU19JKGlub2RlKS0mZ3Q7bW11X3ByaXZhdGU7CiAJYmlkeCA9IHNpemUgLyBic2l6ZTsKIAlib2ZmID0gc2l6ZSAlIGJzaXplOwpAQCAtNjI1LDcgJiM0Mzs2MjYsOSBAQCBhZmZzX2V4dGVudF9maWxlX29mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbmV3c2l6ZSkKIAlyZXR1cm4gMDsKIAogb3V0OgotCWlub2RlLSZndDtpX3NpemUgPSBBRkZTX0koaW5vZGUpLSZndDttbXVfcHJpdmF0ZSA9IG5ld3NpemU7CiYjNDM7CWFmZnNfYnJlbHNlKHByZXZfYmgpOwomIzQzOwkvKiBLZWVwIGlfc2l6ZS9tbXVfcHJpdmF0ZSBhdCBob3cgZmFyIHdlIGFjdHVhbGx5IGV4dGVuZGVkLiAqLwomIzQzOwlpbm9kZS0mZ3Q7aV9zaXplID0gQUZGU19JKGlub2RlKS0mZ3Q7bW11X3ByaXZhdGUgPSBzaXplOwogCXJldHVybiBQVFJfRVJSKGJoKTsKIH0KIApAQCAtNjYyLDkgJiM0Mzs2NjUsNiBAQCBzdGF0aWMgaW50IGFmZnNfd3JpdGVfYmVnaW5fb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwKIAlwcl9kZWJ1ZygmIzM0OyVzKCVsbHUsICVsbHUsICVsbHUpXG4mIzM0OywgX19mdW5jX18sIGlub2RlLSZndDtpX2lubywgcG9zLAogCQkgcG9zICYjNDM7IGxlbik7CiAJaWYgKHBvcyAmZ3Q7IEFGRlNfSShpbm9kZSktJmd0O21tdV9wcml2YXRlKSB7Ci0JCS8qIFhYWDogdGhpcyBwcm9iYWJseSBsZWF2ZXMgYSB0b28tYmlnIGlfc2l6ZSBpbiBjYXNlIG9mCi0JCSAqIGZhaWx1cmUuIFNob3VsZCByZWFsbHkgYmUgdXBkYXRpbmcgaV9zaXplIGF0IHdyaXRlX2VuZCB0aW1lCi0JCSAqLwogCQllcnIgPSBhZmZzX2V4dGVudF9maWxlX29mcyhpbm9kZSwgcG9zKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9mcy9hZmZzL25hbWVpLmMgYi9mcy9hZmZzL25hbWVpLmMKaW5kZXggYzNjNjUzMmRhNGIwZGEuLjA4ZWRmZGFlZWZjMzRhIDEwMDY0NAotLS0gYS9mcy9hZmZzL25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZmcy9uYW1laS5jCkBAIC00MDEsNiAmIzQzOzQwMSwzOCBAQCBhZmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAlyZXR1cm4gYWZmc19hZGRfZW50cnkoZGlyLCBpbm9kZSwgZGVudHJ5LCBTVF9MSU5LRklMRSk7CiB9CiAKJiM0MzsvKiBXcml0ZSBkZW50cnkgbmFtZSBpbnRvIGhlYWRlciBhbmQgaW5zZXJ0IGludG8gZGlyIChzdWNjZXNzIG9yIHJvbGxiYWNrKS4gKi8KJiM0MztzdGF0aWMgaW50IGFmZnNfcmVpbnNlcnRfd2l0aF9uYW1lKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAomIzQzOwkJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLSZndDtpX3NiOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlhZmZzX2NvcHlfbmFtZShBRkZTX1RBSUwoc2IsIGJoKS0mZ3Q7bmFtZSwgZGVudHJ5KTsKJiM0MzsJYWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTsKJiM0MzsJYWZmc19sb2NrX2RpcihkaXIpOwomIzQzOwllcnIgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpOwomIzQzOwlhZmZzX3VubG9ja19kaXIoZGlyKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUHV0IGJvdGggZXhjaGFuZ2Ugb2JqZWN0cyBiYWNrIHVuZGVyIHRoZWlyIG9yaWdpbmFsIG5hbWVzL2RpcnMuICovCiYjNDM7c3RhdGljIHZvaWQgYWZmc194cmVuYW1lX3Jlc3RvcmUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsCiYjNDM7CQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX29sZCwKJiM0MzsJCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfbmV3LAomIzQzOwkJCQkgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQkJIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiYjNDM7ewomIzQzOwlpZiAoYWZmc19yZWluc2VydF93aXRoX25hbWUob2xkX2RpciwgYmhfb2xkLCBvbGRfZGVudHJ5KSkKJiM0MzsJCWFmZnNfd2FybmluZyhvbGRfZGlyLSZndDtpX3NiLCAmIzM0O3hyZW5hbWUmIzM0OywKJiM0MzsJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIHJlc3RvcmUgaW5vZGUgJWx1JiMzNDssCiYjNDM7CQkJICAgICAodW5zaWduZWQgbG9uZyliaF9vbGQtJmd0O2JfYmxvY2tucik7CiYjNDM7CWlmIChhZmZzX3JlaW5zZXJ0X3dpdGhfbmFtZShuZXdfZGlyLCBiaF9uZXcsIG5ld19kZW50cnkpKQomIzQzOwkJYWZmc193YXJuaW5nKG5ld19kaXItJmd0O2lfc2IsICYjMzQ7eHJlbmFtZSYjMzQ7LAomIzQzOwkJCSAgICAgJiMzNDtmYWlsZWQgdG8gcmVzdG9yZSBpbm9kZSAlbHUmIzM0OywKJiM0MzsJCQkgICAgICh1bnNpZ25lZCBsb25nKWJoX25ldy0mZ3Q7Yl9ibG9ja25yKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50CiBhZmZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJICAgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKQEAgLTQzNCwxMyAmIzQzOzQ2NiwxNSBAQCBhZmZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJaWYgKHJldHZhbCkKIAkJZ290byBkb25lOwogCi0JLyogQW5kIGluc2VydCBpdCBpbnRvIHRoZSBuZXcgZGlyZWN0b3J5IHdpdGggdGhlIG5ldyBuYW1lLiAqLwotCWFmZnNfY29weV9uYW1lKEFGRlNfVEFJTChzYiwgYmgpLSZndDtuYW1lLCBuZXdfZGVudHJ5KTsKLQlhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpOwotCWFmZnNfbG9ja19kaXIobmV3X2Rpcik7Ci0JcmV0dmFsID0gYWZmc19pbnNlcnRfaGFzaChuZXdfZGlyLCBiaCk7Ci0JYWZmc191bmxvY2tfZGlyKG5ld19kaXIpOwotCS8qIFRPRE86IG1vdmUgaXQgYmFjayB0byBvbGRfZGlyLCBpZiBlcnJvcj8gKi8KJiM0MzsJLyogSW5zZXJ0IGludG8gdGhlIG5ldyBkaXJlY3Rvcnkgd2l0aCB0aGUgbmV3IG5hbWUuICovCiYjNDM7CXJldHZhbCA9IGFmZnNfcmVpbnNlcnRfd2l0aF9uYW1lKG5ld19kaXIsIGJoLCBuZXdfZGVudHJ5KTsKJiM0MzsJaWYgKHJldHZhbCkgewomIzQzOwkJLyogb2xkX2RlbnRyeSBzdGlsbCBoYXMgdGhlIG9yaWdpbmFsIG5hbWU7IHB1dCB0aGUgb2JqZWN0IGJhY2suICovCiYjNDM7CQlpZiAoYWZmc19yZWluc2VydF93aXRoX25hbWUob2xkX2RpciwgYmgsIG9sZF9kZW50cnkpKQomIzQzOwkJCWFmZnNfd2FybmluZyhzYiwgJiMzNDtyZW5hbWUmIzM0OywKJiM0MzsJCQkJICAgICAmIzM0O2ZhaWxlZCB0byByZXN0b3JlIGlub2RlICVsdSYjMzQ7LAomIzQzOwkJCQkgICAgICh1bnNpZ25lZCBsb25nKWJoLSZndDtiX2Jsb2NrbnIpOwomIzQzOwl9CiAKIGRvbmU6CiAJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLApAQCAtNDUzLDExICYjNDM7NDg3LDEwIEBAIHN0YXRpYyBpbnQKIGFmZnNfeHJlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJICAgICBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiB7Ci0KIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gb2xkX2Rpci0mZ3Q7aV9zYjsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX29sZCA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9uZXcgPSBOVUxMOwotCWludCByZXR2YWw7CiYjNDM7CWludCByZXR2YWwsIHJldHZhbDI7CiAKIAliaF9vbGQgPSBhZmZzX2JyZWFkKHNiLCBkX2lub2RlKG9sZF9kZW50cnkpLSZndDtpX2lubyk7CiAJaWYgKCFiaF9vbGQpCkBAIC00ODAsMjUgJiM0Mzs1MTMsNDEgQEAgYWZmc194cmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKIAlhZmZzX2xvY2tfZGlyKG5ld19kaXIpOwogCXJldHZhbCA9IGFmZnNfcmVtb3ZlX2hhc2gobmV3X2RpciwgYmhfbmV3KTsKIAlhZmZzX3VubG9ja19kaXIobmV3X2Rpcik7Ci0JaWYgKHJldHZhbCkKJiM0MzsJaWYgKHJldHZhbCkgewomIzQzOwkJLyogTmFtZXMgdW5jaGFuZ2VkOyBvbmx5IHB1dCBvbGQgYmFjayBpbnRvIG9sZF9kaXIuICovCiYjNDM7CQlpZiAoYWZmc19yZWluc2VydF93aXRoX25hbWUob2xkX2RpciwgYmhfb2xkLCBvbGRfZGVudHJ5KSkKJiM0MzsJCQlhZmZzX3dhcm5pbmcoc2IsICYjMzQ7eHJlbmFtZSYjMzQ7LAomIzQzOwkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIHJlc3RvcmUgaW5vZGUgJWx1JiMzNDssCiYjNDM7CQkJCSAgICAgKHVuc2lnbmVkIGxvbmcpYmhfb2xkLSZndDtiX2Jsb2NrbnIpOwogCQlnb3RvIGRvbmU7CiYjNDM7CX0KIAogCS8qIEluc2VydCBvbGQgaW50byB0aGUgbmV3IGRpcmVjdG9yeSB3aXRoIHRoZSBuZXcgbmFtZS4gKi8KLQlhZmZzX2NvcHlfbmFtZShBRkZTX1RBSUwoc2IsIGJoX29sZCktJmd0O25hbWUsIG5ld19kZW50cnkpOwotCWFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaF9vbGQpOwotCWFmZnNfbG9ja19kaXIobmV3X2Rpcik7Ci0JcmV0dmFsID0gYWZmc19pbnNlcnRfaGFzaChuZXdfZGlyLCBiaF9vbGQpOwotCWFmZnNfdW5sb2NrX2RpcihuZXdfZGlyKTsKJiM0MzsJcmV0dmFsID0gYWZmc19yZWluc2VydF93aXRoX25hbWUobmV3X2RpciwgYmhfb2xkLCBuZXdfZGVudHJ5KTsKJiM0MzsJaWYgKHJldHZhbCkgewomIzQzOwkJYWZmc194cmVuYW1lX3Jlc3RvcmUob2xkX2RpciwgbmV3X2RpciwgYmhfb2xkLCBiaF9uZXcsCiYjNDM7CQkJCSAgICAgb2xkX2RlbnRyeSwgbmV3X2RlbnRyeSk7CiYjNDM7CQlnb3RvIGRvbmU7CiYjNDM7CX0KIAogCS8qIEluc2VydCBuZXcgaW50byB0aGUgb2xkIGRpcmVjdG9yeSB3aXRoIHRoZSBvbGQgbmFtZS4gKi8KLQlhZmZzX2NvcHlfbmFtZShBRkZTX1RBSUwoc2IsIGJoX25ldyktJmd0O25hbWUsIG9sZF9kZW50cnkpOwotCWFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaF9uZXcpOwotCWFmZnNfbG9ja19kaXIob2xkX2Rpcik7Ci0JcmV0dmFsID0gYWZmc19pbnNlcnRfaGFzaChvbGRfZGlyLCBiaF9uZXcpOwotCWFmZnNfdW5sb2NrX2RpcihvbGRfZGlyKTsKJiM0MzsJcmV0dmFsID0gYWZmc19yZWluc2VydF93aXRoX25hbWUob2xkX2RpciwgYmhfbmV3LCBvbGRfZGVudHJ5KTsKJiM0MzsJaWYgKHJldHZhbCkgewomIzQzOwkJLyogVW5kbyB0aGUgZmlyc3QgaW5zZXJ0LCB0aGVuIHJlc3RvcmUgYm90aCBvcmlnaW5hbHMuICovCiYjNDM7CQlhZmZzX2xvY2tfZGlyKG5ld19kaXIpOwomIzQzOwkJcmV0dmFsMiA9IGFmZnNfcmVtb3ZlX2hhc2gobmV3X2RpciwgYmhfb2xkKTsKJiM0MzsJCWFmZnNfdW5sb2NrX2RpcihuZXdfZGlyKTsKJiM0MzsJCWlmIChyZXR2YWwyKQomIzQzOwkJCWFmZnNfd2FybmluZyhzYiwgJiMzNDt4cmVuYW1lJiMzNDssCiYjNDM7CQkJCSAgICAgJiMzNDt1bmRvIGluc2VydCBvZiBpbm9kZSAlbHUgZmFpbGVkICglZCkmIzM0OywKJiM0MzsJCQkJICAgICAodW5zaWduZWQgbG9uZyliaF9vbGQtJmd0O2JfYmxvY2tuciwgcmV0dmFsMik7CiYjNDM7CQlhZmZzX3hyZW5hbWVfcmVzdG9yZShvbGRfZGlyLCBuZXdfZGlyLCBiaF9vbGQsIGJoX25ldywKJiM0MzsJCQkJICAgICBvbGRfZGVudHJ5LCBuZXdfZGVudHJ5KTsKJiM0MzsJfQomIzQzOwogZG9uZToKLQltbWJfbWFya19idWZmZXJfZGlydHkoYmhfb2xkLCAmYW1wO0FGRlNfSShuZXdfZGlyKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwotCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcsICZhbXA7QUZGU19JKG9sZF9kaXIpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9vbGQsICZhbXA7QUZGU19JKHJldHZhbCA/IG9sZF9kaXIgOiBuZXdfZGlyKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwltbWJfbWFya19idWZmZXJfZGlydHkoYmhfbmV3LCAmYW1wO0FGRlNfSShyZXR2YWwgPyBuZXdfZGlyIDogb2xkX2RpciktJmd0O2lfbWV0YWRhdGFfYmhzKTsKIAlhZmZzX2JyZWxzZShiaF9vbGQpOwogCWFmZnNfYnJlbHNlKGJoX25ldyk7CiAJcmV0dXJuIHJldHZhbDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUyMAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggZm9yIEFGRlMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgdGhlIEFGRlMgY29kZSDigJMgc3BlY2lmaWNhbGx5LCBgYWZmcy5oYCwgYGZpbGUuY2AsIGFuZCBgbmFtZWkuY2AuIFN0cmFpZ2h0IGF3YXksIEkgY2FuIHRlbGwgdGhpcyBpcyBkZWFsaW5nIHdpdGggc29tZSBsb3ctbGV2ZWwgZmlsZXN5c3RlbSBzdHVmZiB3aXRoaW4gdGhlIEFtaWdhIEZhc3QgRmlsZSBTeXN0ZW0uIFdlJiMzOTtyZSBsb29raW5nIGF0IGZ1bmN0aW9uYWwgY2hhbmdlcyBoZXJlLCB0aGUgbWVhdCBhbmQgcG90YXRvZXMgb2YgaG93IEFGRlMgb3BlcmF0ZXMuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgZmV3IGtleSBpc3N1ZXMuIEZpcnN0LCBpdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBoYXJkZW5pbmcgc29tZSBibG9jayBhbGxvY2F0aW9uIHJvdXRpbmVzLCBgYWZmc19nZXR6ZXJvYmxrYCBhbmQgYGFmZnNfZ2V0ZW1wdHlibGtgLiBUaGV5JiMzOTtyZSBub3cgY2hlY2tpbmcgZm9yIE5VTEwgcmV0dXJucyBmcm9tIGBzYl9nZXRibGtgLCB3aGljaCBpcyBnb29kIHByYWN0aWNlIHRvIHByZXZlbnQgY3Jhc2hlcyBkdWUgdG8gYmxvY2sgYWxsb2NhdGlvbiBmYWlsdXJlcy4gVGhhdCYjMzk7cyBjcml0aWNhbCBpbiBhIGZpbGVzeXN0ZW0uCgpUaGVuIHRoZXJlJiMzOTtzIHRoZSBgYWZmc19leHRlbnRfZmlsZV9vZnNgIGZpeC4gTG9va3MgbGlrZSBpdCYjMzk7cyBiZWVuIHVwZGF0ZWQgdG8gcmVsZWFzZSBgcHJldl9iaGAgY29ycmVjdGx5IGFuZCBtYWtlIHN1cmUgdGhlIGlub2RlJiMzOTtzIHNpemUgYW5kIGBtbXVfcHJpdmF0ZWAgYXJlIHByb3Blcmx5IHVwZGF0ZWQgdG8gdGhlIGV4dGVuZGVkIHNpemUsIGV2ZW4gb24gZmFpbHVyZS4gTWlzc2luZyB0aG9zZSB3b3VsZCBiZSBwcm9ibGVtYXRpYyAtIGRhdGEgY29ycnVwdGlvbiBvciBwb3RlbnRpYWxseSBldmVuIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4KCkZpbmFsbHksIHdlJiMzOTt2ZSBnb3Qgcm9sbGJhY2sgbWVjaGFuaXNtcyBpbnRyb2R1Y2VkIGZvciBgYWZmc19yZW5hbWVgIGFuZCBgYWZmc194cmVuYW1lYC4gSWYgYW4gaW5zZXJ0aW9uIGZhaWxzLCB0aGlzIGdpdmVzIHVzIGEgd2F5IHRvIG1haW50YWluIGRhdGEgaW50ZWdyaXR5IGR1cmluZyBmaWxlIHJlbmFtZXMuIFRoYXQmIzM5O3MgYSBtdXN0LWhhdmUgZm9yIGFueSByZWxpYWJsZSBmaWxlc3lzdGVtIG9wZXJhdGlvbi4KCkZyb20gbXkgcGVyc3BlY3RpdmUsIHRoaXMgaXMgYWxsIHZlcnkgc2Vuc2libGUgYW5kIGNvdWxkIGhhdmUgaW1wb3J0YW50IGltcGxpY2F0aW9ucyBmb3Igc3RhYmlsaXR5IGFuZCByZWxpYWJpbGl0eSB3aGVuIHNvbWVvbmUgaXMgdXNpbmcgYW4gQUZGUyBpbWFnZS4gVGhpcyBpcyBhbGwgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMsIHRoaW5ncyBsaWtlIHJlbmFtaW5nLCB3cml0aW5nLCBldGMuLCBhc3N1bWluZyB0aGV5IGhhdmUgYW4gQUZGUyBpbWFnZSBtb3VudGVkLiBUaGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IEFGRlMgaXMgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUga2VybmVsIGNvbmZpZy4gTGV0JiMzOTtzIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIGlmIEFGRlMgc3VwcG9ydCBpcyBhY3R1YWxseSBidWlsdCBpbnRvIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTQ6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFGRlNfRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9hZmZzL0tjb25maWc6Mjpjb25maWcgQUZGU19GU1xuZnMvYWZmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBbWlnYSBGRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE0OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEFGRlNfRlMgQ29uZmlndXJhdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGluIHF1ZXN0aW9uIGlzIGBBRkZTX0ZTYC4gTGV0IG1lIHF1aWNrbHkgcmV2aWV3IHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgd2l0aGluIHRoaXMgY29udGV4dC4gQmFzZWQgb24gdGhlIGxpc3QsIGl0IGxvb2tzIGxpa2UgdGhlcmUgaGF2ZSBiZWVuIHNvbWUgdXBkYXRlcyB0byB0aGUgZm9sbG93aW5nOiBgYWZmc19nZXR6ZXJvYmxrYCwgYGFmZnNfZ2V0ZW1wdHlibGtgLCBgYWZmc19leHRlbnRfZmlsZV9vZnNgLCBgYWZmc193cml0ZV9iZWdpbl9vZnNgLCBgYWZmc19saW5rYCwgYGFmZnNfcmVpbnNlcnRfd2l0aF9uYW1lYCwgYGFmZnNfeHJlbmFtZV9yZXN0b3JlYCwgYGFmZnNfcmVuYW1lYCwgYW5kIGBhZmZzX3hyZW5hbWVgLgoKTm93LCBjb25zaWRlcmluZyB0aGUgaW1wYWN0LCBJIHRoaW5rIGl0JiMzOTtzIGltcG9ydGFudCB0byBzcGVjaWZpY2FsbHkgZmxhZyB0aGVzZSBmdW5jdGlvbnMgZm9yIGZ1cnRoZXIgYW5hbHlzaXMgd2l0aGluIGBGb2N1c1N5bWJvbHNgLiBMZXQmIzM5O3MgZ2V0IHRoZW0gbGlzdGVkOiBgYWZmc19nZXR6ZXJvYmxrYCwgYGFmZnNfZ2V0ZW1wdHlibGtgLCBgYWZmc19leHRlbnRfZmlsZV9vZnNgLCBgYWZmc193cml0ZV9iZWdpbl9vZnNgLCBgYWZmc19yZW5hbWVgLCBhbmQgYGFmZnNfeHJlbmFtZWAuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgdXNhZ2Ugb2YgYGFmZnNfZ2V0emVyb2Jsa2AgYW5kIGBhZmZzX2dldGVtcHR5YmxrYCBub3cuIFRoZXNlIGFyZSBvZnRlbiBjcml0aWNhbCBmdW5jdGlvbnMgYW5kIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGVpciBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZmZzX2dldHplcm9ibGsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZmcy9hZmZzLmg9MjQ2PXN0YXRpYyBpbmxpbmUgc3RydWN0IGJ1ZmZlcl9oZWFkICpcbmZzL2FmZnMvYWZmcy5oOjI0NzphZmZzX2dldHplcm9ibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGJsb2NrKVxuZnMvYWZmcy9hZmZzLmgtMjQ4LXtcbi0tXG5mcy9hZmZzL2ZpbGUuYz0xMjE9YWZmc19hbGxvY19leHRibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCB1MzIgZXh0KVxuLS1cbmZzL2FmZnMvZmlsZS5jLTEzMC1cbmZzL2FmZnMvZmlsZS5jOjEzMTpcdG5ld19iaCA9IGFmZnNfZ2V0emVyb2JsayhzYiwgYmxvY2tucik7XG5mcy9hZmZzL2ZpbGUuYy0xMzItXHRpZiAoIW5ld19iaCkge1xuLS1cbmZzL2FmZnMvZmlsZS5jPTQ5MD1zdGF0aWMgaW5saW5lIHN0cnVjdCBidWZmZXJfaGVhZCAqXG5mcy9hZmZzL2ZpbGUuYzo0OTE6YWZmc19nZXR6ZXJvYmxrX2lubyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgYmxvY2spXG5mcy9hZmZzL2ZpbGUuYy00OTIte1xuLS1cbmZzL2FmZnMvZmlsZS5jLTQ5OC1cdGlmICghZXJyKSB7XG5mcy9hZmZzL2ZpbGUuYzo0OTk6XHRcdGJoID0gYWZmc19nZXR6ZXJvYmxrKGlub2RlLVx1MDAzZWlfc2IsIHRtcF9iaC5iX2Jsb2NrbnIpO1xuZnMvYWZmcy9maWxlLmMtNTAwLVx0XHRpZiAoYmgpIHtcbi0tXG5mcy9hZmZzL2ZpbGUuYz01NjE9YWZmc19leHRlbnRfZmlsZV9vZnMoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIG5ld3NpemUpXG4tLVxuZnMvYWZmcy9maWxlLmMtNTk1LVx0XHRwcmV2X2JoID0gYmg7XG5mcy9hZmZzL2ZpbGUuYzo1OTY6XHRcdGJoID0gYWZmc19nZXR6ZXJvYmxrX2lubyhpbm9kZSwgYmlkeCk7XG5mcy9hZmZzL2ZpbGUuYy01OTctXHRcdGlmIChJU19FUlIoYmgpKVxuLS1cbmZzL2FmZnMvaW5vZGUuYz0yOTI9YWZmc19uZXdfaW5vZGUoc3RydWN0IGlub2RlICpkaXIpXG4tLVxuZnMvYWZmcy9pbm9kZS5jLTMwNC1cbmZzL2FmZnMvaW5vZGUuYzozMDU6XHRiaCA9IGFmZnNfZ2V0emVyb2JsayhzYiwgYmxvY2spO1xuZnMvYWZmcy9pbm9kZS5jLTMwNi1cdGlmICghYmgpXG4tLVxuZnMvYWZmcy9pbm9kZS5jPTM0OT1hZmZzX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzMzIgdHlwZSlcbi0tXG5mcy9hZmZzL2lub2RlLmMtMzc0LVx0XHRpbm9kZV9iaCA9IGJoO1xuZnMvYWZmcy9pbm9kZS5jOjM3NTpcdFx0YmggPSBhZmZzX2dldHplcm9ibGsoc2IsIGJsb2NrKTtcbmZzL2FmZnMvaW5vZGUuYy0zNzYtXHRcdGlmICghYmgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQwMAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQUZGUyBGaWxlIFN5c3RlbSBTeW1ib2xzIGZvciBGb2N1c1N5bWJvbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIEFGRlMgZmlsZSBzeXN0ZW0gZnVuY3Rpb25zOiBgYWZmc19nZXR6ZXJvYmxrYCwgYGFmZnNfZ2V0ZW1wdHlibGtgLCBgYWZmc19leHRlbnRfZmlsZV9vZnNgLCBgYWZmc193cml0ZV9iZWdpbl9vZnNgLCBgYWZmc19yZW5hbWVgLCBhbmQgYGFmZnNfeHJlbmFtZWAuIFRoZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lcyBhcmUgZ29vZCBjYW5kaWRhdGVzIGZvciBgRm9jdXNTeW1ib2xzYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBhZmZzX2dldHplcm9ibGtgIGFuZCBgYWZmc19nZXRlbXB0eWJsa2AgYXJlIHByb2JhYmx5IGEgYml0IHRyaWNreS4gVGhleSYjMzk7cmUgZGVmaW5lZCBhcyBgc3RhdGljIGlubGluZWAgaW4gYGZzL2FmZnMvYWZmcy5oYC4gQmVjYXVzZSB0aGV5JiMzOTtyZSBpbmxpbmVkLCBpdCBtZWFucyB0aGUgY29tcGlsZXIgbWlnaHQgb3B0aW1pemUgdGhlbSBhd2F5IGR1cmluZyBjb21waWxhdGlvbiwgd2hpY2ggY291bGQgbWFrZSB0aGVtIGxlc3MgdXNlZnVsIGZvciB0aGUgYEZvY3VzU3ltYm9sc2AgYW5hbHlzaXMuIFdlJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBob3cgdGhlIGNvbXBpbGVyIGhhbmRsZXMgaW5saW5lcyBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuCgpPbiB0aGUgb3RoZXIgaGFuZCwgYGFmZnNfZXh0ZW50X2ZpbGVfb2ZzYCwgYGFmZnNfcmVuYW1lYCwgYW5kIGBhZmZzX3hyZW5hbWVgIHNlZW0gbGlrZSBzb2xpZCBiZXRzLiBUaGV5JiMzOTtyZSBub3QgaW5saW5lZCwgc28gdGhleSYjMzk7cmUgZGVmaW5pdGVseSBhdmFpbGFibGUgYXMgc2VwYXJhdGUgZnVuY3Rpb25zLiBUaG9zZSBzZWVtIGxpa2UgdGhleSYjMzk7cmUgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgaW5jbHVzaW9uIGluIHRoZSBzZXQuCgpSaWdodCBub3csIGxldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIHVzYWdlIG9mIGBhZmZzX2dldGVtcHR5YmxrYCB0byBnZXQgYSBzZW5zZSBvZiB3aGVyZSBpdCYjMzk7cyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGZpbGUgc3lzdGVtIGNvZGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgc2lnbmlmaWNhbmNlIGFuZCBhcHBsaWNhYmlsaXR5IHRvIGBGb2N1c1N5bWJvbHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FmZnNfZ2V0ZW1wdHlibGsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZmcy9hZmZzLmg9MjYzPXN0YXRpYyBpbmxpbmUgc3RydWN0IGJ1ZmZlcl9oZWFkICpcbmZzL2FmZnMvYWZmcy5oOjI2NDphZmZzX2dldGVtcHR5YmxrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBibG9jaylcbmZzL2FmZnMvYWZmcy5oLTI2NS17XG4tLVxuZnMvYWZmcy9maWxlLmM9NTA5PXN0YXRpYyBpbmxpbmUgc3RydWN0IGJ1ZmZlcl9oZWFkICpcbmZzL2FmZnMvZmlsZS5jOjUxMDphZmZzX2dldGVtcHR5YmxrX2lubyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgYmxvY2spXG5mcy9hZmZzL2ZpbGUuYy01MTEte1xuLS1cbmZzL2FmZnMvZmlsZS5jLTUxNy1cdGlmICghZXJyKSB7XG5mcy9hZmZzL2ZpbGUuYzo1MTg6XHRcdGJoID0gYWZmc19nZXRlbXB0eWJsayhpbm9kZS1cdTAwM2VpX3NiLCB0bXBfYmguYl9ibG9ja25yKTtcbmZzL2FmZnMvZmlsZS5jLTUxOS1cdFx0aWYgKGJoKSB7XG4tLVxuZnMvYWZmcy9maWxlLmM9NjkyPXN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbi0tXG5mcy9hZmZzL2ZpbGUuYy03NDgtXHRcdHByZXZfYmggPSBiaDtcbmZzL2FmZnMvZmlsZS5jOjc0OTpcdFx0YmggPSBhZmZzX2dldGVtcHR5YmxrX2lubyhpbm9kZSwgYmlkeCk7XG5mcy9hZmZzL2ZpbGUuYy03NTAtXHRcdGlmIChJU19FUlIoYmgpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE0OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNDYKCQkJCQkJCW91dHB1dDogMTU1CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEFGRlMgRmlsZSBTeXN0ZW0gT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSByZXZpZXdlZCB0aGUgcGF0Y2ggYW5kIEkgbmVlZCB0byBob25lIGluIG9uIGEgc3BlY2lmaWMgYXJlYSBmb3IgZnV6emluZy4gQmFzZWQgb24gdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBvdXRsaW5lZCwgSSYjMzk7bSBnb2luZyB0byBhZGQgYSBmZXcga2V5IHN5bWJvbHMgdG8gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3Q6IGBhZmZzX2V4dGVudF9maWxlX29mc2AsIGBhZmZzX3JlbmFtZWAsIGBhZmZzX3hyZW5hbWVgLCBhbmQgYGFmZnNfd3JpdGVfYmVnaW5fb2ZzYC4gVGhlc2UgYXJlIGFsbCByZWxhdGVkIHRvIGNydWNpYWwgQUZGUyBmaWxlc3lzdGVtIG9wZXJhdGlvbnMsIGNvdmVyaW5nIGZpbGUgZXh0ZW5zaW9uLCByZW5hbWluZyAoYm90aCBpbnRlcm5hbCBhbmQgZXh0ZW5kZWQpLCBhbmQgd3JpdGUgb3BlcmF0aW9uIHN0YXJ0aW5nIG9mZnNldC4KClRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGlzIGBBRkZTX0ZTYCwgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGNvbnRyb2xsaW5nIGZhY3RvciBoZXJlLiBCZWZvcmUgSSBtb3ZlIG9uLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBkZXBlbmRlbnQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgdGhlc2UgZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIGBBRkZTX0ZTYCBpcyB0aGUgb25seSBvbmUgSSBuZWVkIHRvIGNvbnNpZGVyOyB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LgoKVGhlIHBhdGNoJiMzOTtzIHJlYXNvbmluZyBlbXBoYXNpemVzIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBpbXByb3ZlbWVudHMgaW1wYWN0aW5nIGhvdyB0aGUgZmlsZXN5c3RlbSBiZWhhdmVzIHVuZGVyIHN0YW5kYXJkIHN5c2NhbGxzLiBTaW5jZSB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBmbGFnIGlzIHNldCB0byB0cnVlLCBpdCByZWluZm9yY2VzIHRoZSBuZWVkIGZvciByaWdvcm91cyB0ZXN0aW5nLiBXaXRoIHRoZSBgRW5hYmxlQ29uZmlnc2Agc2V0IHRvIGBBRkZTX0ZTYCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIHJlZmluZWQsIGl0JiMzOTtzIHRpbWUgdG8gc2V0IHRoZSByZXN1bHRzIGFuZCBtb3ZlIHRvIHRoZSBuZXh0IHBoYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FmZnNfZXh0ZW50X2ZpbGVfb2ZzJiMzNDssCiAgICAmIzM0O2FmZnNfcmVuYW1lJiMzNDssCiAgICAmIzM0O2FmZnNfeHJlbmFtZSYjMzQ7LAogICAgJiMzNDthZmZzX3dyaXRlX2JlZ2luX29mcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBhbmQgcm9sbGJhY2sgbG9naWMgaW4gQUZGUyBmaWxlc3lzdGVtIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBpbiBmaWxlIGV4dGVuc2lvbiAoYWZmc19leHRlbnRfZmlsZV9vZnMpLCByZW5hbWUgKGFmZnNfcmVuYW1lLCBhZmZzX3hyZW5hbWUpLCBhbmQgYmxvY2sgYWxsb2NhdGlvbiAoYWZmc19nZXR6ZXJvYmxrLCBhZmZzX2dldGVtcHR5YmxrKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgZmlsZXN5c3RlbSBjb2RlIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgc3RhbmRhcmQgc3lzY2FsbHMgb24gYW4gQUZGUyBtb3VudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FmZnNfZXh0ZW50X2ZpbGVfb2ZzJiMzNDssCiAgICAmIzM0O2FmZnNfcmVuYW1lJiMzNDssCiAgICAmIzM0O2FmZnNfeHJlbmFtZSYjMzQ7LAogICAgJiMzNDthZmZzX3dyaXRlX2JlZ2luX29mcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBhbmQgcm9sbGJhY2sgbG9naWMgaW4gQUZGUyBmaWxlc3lzdGVtIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBpbiBmaWxlIGV4dGVuc2lvbiAoYWZmc19leHRlbnRfZmlsZV9vZnMpLCByZW5hbWUgKGFmZnNfcmVuYW1lLCBhZmZzX3hyZW5hbWUpLCBhbmQgYmxvY2sgYWxsb2NhdGlvbiAoYWZmc19nZXR6ZXJvYmxrLCBhZmZzX2dldGVtcHR5YmxrKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgZmlsZXN5c3RlbSBjb2RlIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgc3RhbmRhcmQgc3lzY2FsbHMgb24gYW4gQUZGUyBtb3VudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE0OjI2OjAxLjM4NjEzODUxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjczNTAxOTIyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmZnNfZXh0ZW50X2ZpbGVfb2ZzXCIsXG4gICAgXCJhZmZzX3JlbmFtZVwiLFxuICAgIFwiYWZmc194cmVuYW1lXCIsXG4gICAgXCJhZmZzX3dyaXRlX2JlZ2luX29mc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIGFuZCByb2xsYmFjayBsb2dpYyBpbiBBRkZTIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IGluIGZpbGUgZXh0ZW5zaW9uIChhZmZzX2V4dGVudF9maWxlX29mcyksIHJlbmFtZSAoYWZmc19yZW5hbWUsIGFmZnNfeHJlbmFtZSksIGFuZCBibG9jayBhbGxvY2F0aW9uIChhZmZzX2dldHplcm9ibGssIGFmZnNfZ2V0ZW1wdHlibGspLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBmaWxlc3lzdGVtIGNvZGUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBzdGFuZGFyZCBzeXNjYWxscyBvbiBhbiBBRkZTIG1vdW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNDoyNjowMS4zODYxNDIyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE2MDI0NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWU0MTU4ZjA0ZDIwMDliZjMyYWZmMjZkZjFkYzRiMTJlNWRiMmY5ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAxNCAxNDoyNjowMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9hZmZzL2FmZnMuaCBiL2ZzL2FmZnMvYWZmcy5oXFxuaW5kZXggNDRhM2Y2OWQyNzVmOTYuLjY1MWQ2MWIzMjEzYTE0IDEwMDY0NFxcbi0tLSBhL2ZzL2FmZnMvYWZmcy5oXFxuKysrIGIvZnMvYWZmcy9hZmZzLmhcXG5AQCAtMjUwLDYgKzI1MCw4IEBAIGFmZnNfZ2V0emVyb2JsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgYmxvY2spXFxuIFxcdHByX2RlYnVnKFxcXCIlczogJWRcXFxcblxcXCIsIF9fZnVuY19fLCBibG9jayk7XFxuIFxcdGlmIChhZmZzX3ZhbGlkYmxvY2soc2IsIGJsb2NrKSkge1xcbiBcXHRcXHRiaCA9IHNiX2dldGJsayhzYiwgYmxvY2spO1xcbitcXHRcXHRpZiAoIWJoKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0XFx0bG9ja19idWZmZXIoYmgpO1xcbiBcXHRcXHRtZW1zZXQoYmgtXFx1MDAzZWJfZGF0YSwgMCAsIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSk7XFxuIFxcdFxcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xcbkBAIC0yNjUsNiArMjY3LDggQEAgYWZmc19nZXRlbXB0eWJsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgYmxvY2spXFxuIFxcdHByX2RlYnVnKFxcXCIlczogJWRcXFxcblxcXCIsIF9fZnVuY19fLCBibG9jayk7XFxuIFxcdGlmIChhZmZzX3ZhbGlkYmxvY2soc2IsIGJsb2NrKSkge1xcbiBcXHRcXHRiaCA9IHNiX2dldGJsayhzYiwgYmxvY2spO1xcbitcXHRcXHRpZiAoIWJoKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0XFx0d2FpdF9vbl9idWZmZXIoYmgpO1xcbiBcXHRcXHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcXG4gXFx0XFx0cmV0dXJuIGJoO1xcbmRpZmYgLS1naXQgYS9mcy9hZmZzL2ZpbGUuYyBiL2ZzL2FmZnMvZmlsZS5jXFxuaW5kZXggMTQ0YjE3NDgyZDEyZGEuLjMyNjViNmI2YmY5ZjhmIDEwMDY0NFxcbi0tLSBhL2ZzL2FmZnMvZmlsZS5jXFxuKysrIGIvZnMvYWZmcy9maWxlLmNcXG5AQCAtNTY5LDYgKzU2OSw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxcbiBcXHRwcl9kZWJ1ZyhcXFwiJXMoJWxsdSwgJWQpXFxcXG5cXFwiLCBfX2Z1bmNfXywgaW5vZGUtXFx1MDAzZWlfaW5vLCBuZXdzaXplKTtcXG4gXFx0YnNpemUgPSBBRkZTX1NCKHNiKS1cXHUwMDNlc19kYXRhX2Jsa3NpemU7XFxuIFxcdGJoID0gTlVMTDtcXG4rXFx0cHJldl9iaCA9IE5VTEw7XFxuIFxcdHNpemUgPSBBRkZTX0koaW5vZGUpLVxcdTAwM2VtbXVfcHJpdmF0ZTtcXG4gXFx0YmlkeCA9IHNpemUgLyBic2l6ZTtcXG4gXFx0Ym9mZiA9IHNpemUgJSBic2l6ZTtcXG5AQCAtNjI1LDcgKzYyNiw5IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIG91dDpcXG4tXFx0aW5vZGUtXFx1MDAzZWlfc2l6ZSA9IEFGRlNfSShpbm9kZSktXFx1MDAzZW1tdV9wcml2YXRlID0gbmV3c2l6ZTtcXG4rXFx0YWZmc19icmVsc2UocHJldl9iaCk7XFxuK1xcdC8qIEtlZXAgaV9zaXplL21tdV9wcml2YXRlIGF0IGhvdyBmYXIgd2UgYWN0dWFsbHkgZXh0ZW5kZWQuICovXFxuK1xcdGlub2RlLVxcdTAwM2VpX3NpemUgPSBBRkZTX0koaW5vZGUpLVxcdTAwM2VtbXVfcHJpdmF0ZSA9IHNpemU7XFxuIFxcdHJldHVybiBQVFJfRVJSKGJoKTtcXG4gfVxcbiBcXG5AQCAtNjYyLDkgKzY2NSw2IEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9iZWdpbl9vZnMoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbiBcXHRwcl9kZWJ1ZyhcXFwiJXMoJWxsdSwgJWxsdSwgJWxsdSlcXFxcblxcXCIsIF9fZnVuY19fLCBpbm9kZS1cXHUwMDNlaV9pbm8sIHBvcyxcXG4gXFx0XFx0IHBvcyArIGxlbik7XFxuIFxcdGlmIChwb3MgXFx1MDAzZSBBRkZTX0koaW5vZGUpLVxcdTAwM2VtbXVfcHJpdmF0ZSkge1xcbi1cXHRcXHQvKiBYWFg6IHRoaXMgcHJvYmFibHkgbGVhdmVzIGEgdG9vLWJpZyBpX3NpemUgaW4gY2FzZSBvZlxcbi1cXHRcXHQgKiBmYWlsdXJlLiBTaG91bGQgcmVhbGx5IGJlIHVwZGF0aW5nIGlfc2l6ZSBhdCB3cml0ZV9lbmQgdGltZVxcbi1cXHRcXHQgKi9cXG4gXFx0XFx0ZXJyID0gYWZmc19leHRlbnRfZmlsZV9vZnMoaW5vZGUsIHBvcyk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvbmFtZWkuYyBiL2ZzL2FmZnMvbmFtZWkuY1xcbmluZGV4IGMzYzY1MzJkYTRiMGRhLi4wOGVkZmRhZWVmYzM0YSAxMDA2NDRcXG4tLS0gYS9mcy9hZmZzL25hbWVpLmNcXG4rKysgYi9mcy9hZmZzL25hbWVpLmNcXG5AQCAtNDAxLDYgKzQwMSwzOCBAQCBhZmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gXFx0cmV0dXJuIGFmZnNfYWRkX2VudHJ5KGRpciwgaW5vZGUsIGRlbnRyeSwgU1RfTElOS0ZJTEUpO1xcbiB9XFxuIFxcbisvKiBXcml0ZSBkZW50cnkgbmFtZSBpbnRvIGhlYWRlciBhbmQgaW5zZXJ0IGludG8gZGlyIChzdWNjZXNzIG9yIHJvbGxiYWNrKS4gKi9cXG4rc3RhdGljIGludCBhZmZzX3JlaW5zZXJ0X3dpdGhfbmFtZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbit7XFxuK1xcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItXFx1MDAzZWlfc2I7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRhZmZzX2NvcHlfbmFtZShBRkZTX1RBSUwoc2IsIGJoKS1cXHUwMDNlbmFtZSwgZGVudHJ5KTtcXG4rXFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcXG4rXFx0YWZmc19sb2NrX2RpcihkaXIpO1xcbitcXHRlcnIgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpO1xcbitcXHRhZmZzX3VubG9ja19kaXIoZGlyKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rLyogUHV0IGJvdGggZXhjaGFuZ2Ugb2JqZWN0cyBiYWNrIHVuZGVyIHRoZWlyIG9yaWdpbmFsIG5hbWVzL2RpcnMuICovXFxuK3N0YXRpYyB2b2lkIGFmZnNfeHJlbmFtZV9yZXN0b3JlKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGlub2RlICpuZXdfZGlyLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9vbGQsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX25ldyxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbit7XFxuK1xcdGlmIChhZmZzX3JlaW5zZXJ0X3dpdGhfbmFtZShvbGRfZGlyLCBiaF9vbGQsIG9sZF9kZW50cnkpKVxcbitcXHRcXHRhZmZzX3dhcm5pbmcob2xkX2Rpci1cXHUwMDNlaV9zYiwgXFxcInhyZW5hbWVcXFwiLFxcbitcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gcmVzdG9yZSBpbm9kZSAlbHVcXFwiLFxcbitcXHRcXHRcXHQgICAgICh1bnNpZ25lZCBsb25nKWJoX29sZC1cXHUwMDNlYl9ibG9ja25yKTtcXG4rXFx0aWYgKGFmZnNfcmVpbnNlcnRfd2l0aF9uYW1lKG5ld19kaXIsIGJoX25ldywgbmV3X2RlbnRyeSkpXFxuK1xcdFxcdGFmZnNfd2FybmluZyhuZXdfZGlyLVxcdTAwM2VpX3NiLCBcXFwieHJlbmFtZVxcXCIsXFxuK1xcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byByZXN0b3JlIGlub2RlICVsdVxcXCIsXFxuK1xcdFxcdFxcdCAgICAgKHVuc2lnbmVkIGxvbmcpYmhfbmV3LVxcdTAwM2ViX2Jsb2NrbnIpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50XFxuIGFmZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4gXFx0ICAgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG5AQCAtNDM0LDEzICs0NjYsMTUgQEAgYWZmc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbiBcXHRpZiAocmV0dmFsKVxcbiBcXHRcXHRnb3RvIGRvbmU7XFxuIFxcbi1cXHQvKiBBbmQgaW5zZXJ0IGl0IGludG8gdGhlIG5ldyBkaXJlY3Rvcnkgd2l0aCB0aGUgbmV3IG5hbWUuICovXFxuLVxcdGFmZnNfY29weV9uYW1lKEFGRlNfVEFJTChzYiwgYmgpLVxcdTAwM2VuYW1lLCBuZXdfZGVudHJ5KTtcXG4tXFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcXG4tXFx0YWZmc19sb2NrX2RpcihuZXdfZGlyKTtcXG4tXFx0cmV0dmFsID0gYWZmc19pbnNlcnRfaGFzaChuZXdfZGlyLCBiaCk7XFxuLVxcdGFmZnNfdW5sb2NrX2RpcihuZXdfZGlyKTtcXG4tXFx0LyogVE9ETzogbW92ZSBpdCBiYWNrIHRvIG9sZF9kaXIsIGlmIGVycm9yPyAqL1xcbitcXHQvKiBJbnNlcnQgaW50byB0aGUgbmV3IGRpcmVjdG9yeSB3aXRoIHRoZSBuZXcgbmFtZS4gKi9cXG4rXFx0cmV0dmFsID0gYWZmc19yZWluc2VydF93aXRoX25hbWUobmV3X2RpciwgYmgsIG5ld19kZW50cnkpO1xcbitcXHRpZiAocmV0dmFsKSB7XFxuK1xcdFxcdC8qIG9sZF9kZW50cnkgc3RpbGwgaGFzIHRoZSBvcmlnaW5hbCBuYW1lOyBwdXQgdGhlIG9iamVjdCBiYWNrLiAqL1xcbitcXHRcXHRpZiAoYWZmc19yZWluc2VydF93aXRoX25hbWUob2xkX2RpciwgYmgsIG9sZF9kZW50cnkpKVxcbitcXHRcXHRcXHRhZmZzX3dhcm5pbmcoc2IsIFxcXCJyZW5hbWVcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gcmVzdG9yZSBpbm9kZSAlbHVcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICh1bnNpZ25lZCBsb25nKWJoLVxcdTAwM2ViX2Jsb2NrbnIpO1xcbitcXHR9XFxuIFxcbiBkb25lOlxcbiBcXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsXFxuQEAgLTQ1MywxMSArNDg3LDEwIEBAIHN0YXRpYyBpbnRcXG4gYWZmc194cmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4gXFx0ICAgICBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuIHtcXG4tXFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvbGRfZGlyLVxcdTAwM2VpX3NiO1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX29sZCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfbmV3ID0gTlVMTDtcXG4tXFx0aW50IHJldHZhbDtcXG4rXFx0aW50IHJldHZhbCwgcmV0dmFsMjtcXG4gXFxuIFxcdGJoX29sZCA9IGFmZnNfYnJlYWQoc2IsIGRfaW5vZGUob2xkX2RlbnRyeSktXFx1MDAzZWlfaW5vKTtcXG4gXFx0aWYgKCFiaF9vbGQpXFxuQEAgLTQ4MCwyNSArNTEzLDQxIEBAIGFmZnNfeHJlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuIFxcdGFmZnNfbG9ja19kaXIobmV3X2Rpcik7XFxuIFxcdHJldHZhbCA9IGFmZnNfcmVtb3ZlX2hhc2gobmV3X2RpciwgYmhfbmV3KTtcXG4gXFx0YWZmc191bmxvY2tfZGlyKG5ld19kaXIpO1xcbi1cXHRpZiAocmV0dmFsKVxcbitcXHRpZiAocmV0dmFsKSB7XFxuK1xcdFxcdC8qIE5hbWVzIHVuY2hhbmdlZDsgb25seSBwdXQgb2xkIGJhY2sgaW50byBvbGRfZGlyLiAqL1xcbitcXHRcXHRpZiAoYWZmc19yZWluc2VydF93aXRoX25hbWUob2xkX2RpciwgYmhfb2xkLCBvbGRfZGVudHJ5KSlcXG4rXFx0XFx0XFx0YWZmc193YXJuaW5nKHNiLCBcXFwieHJlbmFtZVxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byByZXN0b3JlIGlub2RlICVsdVxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgKHVuc2lnbmVkIGxvbmcpYmhfb2xkLVxcdTAwM2ViX2Jsb2NrbnIpO1xcbiBcXHRcXHRnb3RvIGRvbmU7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIEluc2VydCBvbGQgaW50byB0aGUgbmV3IGRpcmVjdG9yeSB3aXRoIHRoZSBuZXcgbmFtZS4gKi9cXG4tXFx0YWZmc19jb3B5X25hbWUoQUZGU19UQUlMKHNiLCBiaF9vbGQpLVxcdTAwM2VuYW1lLCBuZXdfZGVudHJ5KTtcXG4tXFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoX29sZCk7XFxuLVxcdGFmZnNfbG9ja19kaXIobmV3X2Rpcik7XFxuLVxcdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2gobmV3X2RpciwgYmhfb2xkKTtcXG4tXFx0YWZmc191bmxvY2tfZGlyKG5ld19kaXIpO1xcbitcXHRyZXR2YWwgPSBhZmZzX3JlaW5zZXJ0X3dpdGhfbmFtZShuZXdfZGlyLCBiaF9vbGQsIG5ld19kZW50cnkpO1xcbitcXHRpZiAocmV0dmFsKSB7XFxuK1xcdFxcdGFmZnNfeHJlbmFtZV9yZXN0b3JlKG9sZF9kaXIsIG5ld19kaXIsIGJoX29sZCwgYmhfbmV3LFxcbitcXHRcXHRcXHRcXHQgICAgIG9sZF9kZW50cnksIG5ld19kZW50cnkpO1xcbitcXHRcXHRnb3RvIGRvbmU7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIEluc2VydCBuZXcgaW50byB0aGUgb2xkIGRpcmVjdG9yeSB3aXRoIHRoZSBvbGQgbmFtZS4gKi9cXG4tXFx0YWZmc19jb3B5X25hbWUoQUZGU19UQUlMKHNiLCBiaF9uZXcpLVxcdTAwM2VuYW1lLCBvbGRfZGVudHJ5KTtcXG4tXFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoX25ldyk7XFxuLVxcdGFmZnNfbG9ja19kaXIob2xkX2Rpcik7XFxuLVxcdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2gob2xkX2RpciwgYmhfbmV3KTtcXG4tXFx0YWZmc191bmxvY2tfZGlyKG9sZF9kaXIpO1xcbitcXHRyZXR2YWwgPSBhZmZzX3JlaW5zZXJ0X3dpdGhfbmFtZShvbGRfZGlyLCBiaF9uZXcsIG9sZF9kZW50cnkpO1xcbitcXHRpZiAocmV0dmFsKSB7XFxuK1xcdFxcdC8qIFVuZG8gdGhlIGZpcnN0IGluc2VydCwgdGhlbiByZXN0b3JlIGJvdGggb3JpZ2luYWxzLiAqL1xcbitcXHRcXHRhZmZzX2xvY2tfZGlyKG5ld19kaXIpO1xcbitcXHRcXHRyZXR2YWwyID0gYWZmc19yZW1vdmVfaGFzaChuZXdfZGlyLCBiaF9vbGQpO1xcbitcXHRcXHRhZmZzX3VubG9ja19kaXIobmV3X2Rpcik7XFxuK1xcdFxcdGlmIChyZXR2YWwyKVxcbitcXHRcXHRcXHRhZmZzX3dhcm5pbmcoc2IsIFxcXCJ4cmVuYW1lXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwidW5kbyBpbnNlcnQgb2YgaW5vZGUgJWx1IGZhaWxlZCAoJWQpXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAodW5zaWduZWQgbG9uZyliaF9vbGQtXFx1MDAzZWJfYmxvY2tuciwgcmV0dmFsMik7XFxuK1xcdFxcdGFmZnNfeHJlbmFtZV9yZXN0b3JlKG9sZF9kaXIsIG5ld19kaXIsIGJoX29sZCwgYmhfbmV3LFxcbitcXHRcXHRcXHRcXHQgICAgIG9sZF9kZW50cnksIG5ld19kZW50cnkpO1xcbitcXHR9XFxuK1xcbiBkb25lOlxcbi1cXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmhfb2xkLCBcXHUwMDI2QUZGU19JKG5ld19kaXIpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuLVxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcsIFxcdTAwMjZBRkZTX0kob2xkX2RpciktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoX29sZCwgXFx1MDAyNkFGRlNfSShyZXR2YWwgPyBvbGRfZGlyIDogbmV3X2RpciktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoX25ldywgXFx1MDAyNkFGRlNfSShyZXR2YWwgPyBuZXdfZGlyIDogb2xkX2RpciktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4gXFx0YWZmc19icmVsc2UoYmhfb2xkKTtcXG4gXFx0YWZmc19icmVsc2UoYmhfbmV3KTtcXG4gXFx0cmV0dXJuIHJldHZhbDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTQ6MjY6MDEuODAyNzY3NzU4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjkzMzU1NDk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRkZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWZmc19leHRlbnRfZmlsZV9vZnNcIixcbiAgICBcImFmZnNfcmVuYW1lXCIsXG4gICAgXCJhZmZzX3hyZW5hbWVcIixcbiAgICBcImFmZnNfd3JpdGVfYmVnaW5fb2ZzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHJvbGxiYWNrIGxvZ2ljIGluIEFGRlMgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgaW4gZmlsZSBleHRlbnNpb24gKGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKSwgcmVuYW1lIChhZmZzX3JlbmFtZSwgYWZmc194cmVuYW1lKSwgYW5kIGJsb2NrIGFsbG9jYXRpb24gKGFmZnNfZ2V0emVyb2JsaywgYWZmc19nZXRlbXB0eWJsaykuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGZpbGVzeXN0ZW0gY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIHN0YW5kYXJkIHN5c2NhbGxzIG9uIGFuIEFGRlMgbW91bnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWU0MTU4ZjA0ZDIwMDliZjMyYWZmMjZkZjFkYzRiMTJlNWRiMmY5ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDE0IDE0OjI2OjAwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9hZmZzLmggYi9mcy9hZmZzL2FmZnMuaFxuaW5kZXggNDRhM2Y2OWQyNzVmOTYuLjY1MWQ2MWIzMjEzYTE0IDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9hZmZzLmhcbisrKyBiL2ZzL2FmZnMvYWZmcy5oXG5AQCAtMjUwLDYgKzI1MCw4IEBAIGFmZnNfZ2V0emVyb2JsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgYmxvY2spXG4gXHRwcl9kZWJ1ZyhcIiVzOiAlZFxcblwiLCBfX2Z1bmNfXywgYmxvY2spO1xuIFx0aWYgKGFmZnNfdmFsaWRibG9jayhzYiwgYmxvY2spKSB7XG4gXHRcdGJoID0gc2JfZ2V0YmxrKHNiLCBibG9jayk7XG4rXHRcdGlmICghYmgpXG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdGxvY2tfYnVmZmVyKGJoKTtcbiBcdFx0bWVtc2V0KGJoLVx1MDAzZWJfZGF0YSwgMCAsIHNiLVx1MDAzZXNfYmxvY2tzaXplKTtcbiBcdFx0c2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7XG5AQCAtMjY1LDYgKzI2Nyw4IEBAIGFmZnNfZ2V0ZW1wdHlibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGJsb2NrKVxuIFx0cHJfZGVidWcoXCIlczogJWRcXG5cIiwgX19mdW5jX18sIGJsb2NrKTtcbiBcdGlmIChhZmZzX3ZhbGlkYmxvY2soc2IsIGJsb2NrKSkge1xuIFx0XHRiaCA9IHNiX2dldGJsayhzYiwgYmxvY2spO1xuK1x0XHRpZiAoIWJoKVxuK1x0XHRcdHJldHVybiBOVUxMO1xuIFx0XHR3YWl0X29uX2J1ZmZlcihiaCk7XG4gXHRcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xuIFx0XHRyZXR1cm4gYmg7XG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9maWxlLmMgYi9mcy9hZmZzL2ZpbGUuY1xuaW5kZXggMTQ0YjE3NDgyZDEyZGEuLjMyNjViNmI2YmY5ZjhmIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9maWxlLmNcbisrKyBiL2ZzL2FmZnMvZmlsZS5jXG5AQCAtNTY5LDYgKzU2OSw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxuIFx0cHJfZGVidWcoXCIlcyglbGx1LCAlZClcXG5cIiwgX19mdW5jX18sIGlub2RlLVx1MDAzZWlfaW5vLCBuZXdzaXplKTtcbiBcdGJzaXplID0gQUZGU19TQihzYiktXHUwMDNlc19kYXRhX2Jsa3NpemU7XG4gXHRiaCA9IE5VTEw7XG4rXHRwcmV2X2JoID0gTlVMTDtcbiBcdHNpemUgPSBBRkZTX0koaW5vZGUpLVx1MDAzZW1tdV9wcml2YXRlO1xuIFx0YmlkeCA9IHNpemUgLyBic2l6ZTtcbiBcdGJvZmYgPSBzaXplICUgYnNpemU7XG5AQCAtNjI1LDcgKzYyNiw5IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxuIFx0cmV0dXJuIDA7XG4gXG4gb3V0OlxuLVx0aW5vZGUtXHUwMDNlaV9zaXplID0gQUZGU19JKGlub2RlKS1cdTAwM2VtbXVfcHJpdmF0ZSA9IG5ld3NpemU7XG4rXHRhZmZzX2JyZWxzZShwcmV2X2JoKTtcbitcdC8qIEtlZXAgaV9zaXplL21tdV9wcml2YXRlIGF0IGhvdyBmYXIgd2UgYWN0dWFsbHkgZXh0ZW5kZWQuICovXG4rXHRpbm9kZS1cdTAwM2VpX3NpemUgPSBBRkZTX0koaW5vZGUpLVx1MDAzZW1tdV9wcml2YXRlID0gc2l6ZTtcbiBcdHJldHVybiBQVFJfRVJSKGJoKTtcbiB9XG4gXG5AQCAtNjYyLDkgKzY2NSw2IEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9iZWdpbl9vZnMoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0cHJfZGVidWcoXCIlcyglbGx1LCAlbGx1LCAlbGx1KVxcblwiLCBfX2Z1bmNfXywgaW5vZGUtXHUwMDNlaV9pbm8sIHBvcyxcbiBcdFx0IHBvcyArIGxlbik7XG4gXHRpZiAocG9zIFx1MDAzZSBBRkZTX0koaW5vZGUpLVx1MDAzZW1tdV9wcml2YXRlKSB7XG4tXHRcdC8qIFhYWDogdGhpcyBwcm9iYWJseSBsZWF2ZXMgYSB0b28tYmlnIGlfc2l6ZSBpbiBjYXNlIG9mXG4tXHRcdCAqIGZhaWx1cmUuIFNob3VsZCByZWFsbHkgYmUgdXBkYXRpbmcgaV9zaXplIGF0IHdyaXRlX2VuZCB0aW1lXG4tXHRcdCAqL1xuIFx0XHRlcnIgPSBhZmZzX2V4dGVudF9maWxlX29mcyhpbm9kZSwgcG9zKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvbmFtZWkuYyBiL2ZzL2FmZnMvbmFtZWkuY1xuaW5kZXggYzNjNjUzMmRhNGIwZGEuLjA4ZWRmZGFlZWZjMzRhIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9uYW1laS5jXG4rKysgYi9mcy9hZmZzL25hbWVpLmNcbkBAIC00MDEsNiArNDAxLDM4IEBAIGFmZnNfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0cmV0dXJuIGFmZnNfYWRkX2VudHJ5KGRpciwgaW5vZGUsIGRlbnRyeSwgU1RfTElOS0ZJTEUpO1xuIH1cbiBcbisvKiBXcml0ZSBkZW50cnkgbmFtZSBpbnRvIGhlYWRlciBhbmQgaW5zZXJ0IGludG8gZGlyIChzdWNjZXNzIG9yIHJvbGxiYWNrKS4gKi9cbitzdGF0aWMgaW50IGFmZnNfcmVpbnNlcnRfd2l0aF9uYW1lKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuK1x0XHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuK3tcbitcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItXHUwMDNlaV9zYjtcbitcdGludCBlcnI7XG4rXG4rXHRhZmZzX2NvcHlfbmFtZShBRkZTX1RBSUwoc2IsIGJoKS1cdTAwM2VuYW1lLCBkZW50cnkpO1xuK1x0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcbitcdGFmZnNfbG9ja19kaXIoZGlyKTtcbitcdGVyciA9IGFmZnNfaW5zZXJ0X2hhc2goZGlyLCBiaCk7XG4rXHRhZmZzX3VubG9ja19kaXIoZGlyKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuKy8qIFB1dCBib3RoIGV4Y2hhbmdlIG9iamVjdHMgYmFjayB1bmRlciB0aGVpciBvcmlnaW5hbCBuYW1lcy9kaXJzLiAqL1xuK3N0YXRpYyB2b2lkIGFmZnNfeHJlbmFtZV9yZXN0b3JlKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGlub2RlICpuZXdfZGlyLFxuK1x0XHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfb2xkLFxuK1x0XHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfbmV3LFxuK1x0XHRcdFx0IHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4rXHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbit7XG4rXHRpZiAoYWZmc19yZWluc2VydF93aXRoX25hbWUob2xkX2RpciwgYmhfb2xkLCBvbGRfZGVudHJ5KSlcbitcdFx0YWZmc193YXJuaW5nKG9sZF9kaXItXHUwMDNlaV9zYiwgXCJ4cmVuYW1lXCIsXG4rXHRcdFx0ICAgICBcImZhaWxlZCB0byByZXN0b3JlIGlub2RlICVsdVwiLFxuK1x0XHRcdCAgICAgKHVuc2lnbmVkIGxvbmcpYmhfb2xkLVx1MDAzZWJfYmxvY2tucik7XG4rXHRpZiAoYWZmc19yZWluc2VydF93aXRoX25hbWUobmV3X2RpciwgYmhfbmV3LCBuZXdfZGVudHJ5KSlcbitcdFx0YWZmc193YXJuaW5nKG5ld19kaXItXHUwMDNlaV9zYiwgXCJ4cmVuYW1lXCIsXG4rXHRcdFx0ICAgICBcImZhaWxlZCB0byByZXN0b3JlIGlub2RlICVsdVwiLFxuK1x0XHRcdCAgICAgKHVuc2lnbmVkIGxvbmcpYmhfbmV3LVx1MDAzZWJfYmxvY2tucik7XG4rfVxuK1xuIHN0YXRpYyBpbnRcbiBhZmZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHQgICAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuQEAgLTQzNCwxMyArNDY2LDE1IEBAIGFmZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdGlmIChyZXR2YWwpXG4gXHRcdGdvdG8gZG9uZTtcbiBcbi1cdC8qIEFuZCBpbnNlcnQgaXQgaW50byB0aGUgbmV3IGRpcmVjdG9yeSB3aXRoIHRoZSBuZXcgbmFtZS4gKi9cbi1cdGFmZnNfY29weV9uYW1lKEFGRlNfVEFJTChzYiwgYmgpLVx1MDAzZW5hbWUsIG5ld19kZW50cnkpO1xuLVx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcbi1cdGFmZnNfbG9ja19kaXIobmV3X2Rpcik7XG4tXHRyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKG5ld19kaXIsIGJoKTtcbi1cdGFmZnNfdW5sb2NrX2RpcihuZXdfZGlyKTtcbi1cdC8qIFRPRE86IG1vdmUgaXQgYmFjayB0byBvbGRfZGlyLCBpZiBlcnJvcj8gKi9cbitcdC8qIEluc2VydCBpbnRvIHRoZSBuZXcgZGlyZWN0b3J5IHdpdGggdGhlIG5ldyBuYW1lLiAqL1xuK1x0cmV0dmFsID0gYWZmc19yZWluc2VydF93aXRoX25hbWUobmV3X2RpciwgYmgsIG5ld19kZW50cnkpO1xuK1x0aWYgKHJldHZhbCkge1xuK1x0XHQvKiBvbGRfZGVudHJ5IHN0aWxsIGhhcyB0aGUgb3JpZ2luYWwgbmFtZTsgcHV0IHRoZSBvYmplY3QgYmFjay4gKi9cbitcdFx0aWYgKGFmZnNfcmVpbnNlcnRfd2l0aF9uYW1lKG9sZF9kaXIsIGJoLCBvbGRfZGVudHJ5KSlcbitcdFx0XHRhZmZzX3dhcm5pbmcoc2IsIFwicmVuYW1lXCIsXG4rXHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIHJlc3RvcmUgaW5vZGUgJWx1XCIsXG4rXHRcdFx0XHQgICAgICh1bnNpZ25lZCBsb25nKWJoLVx1MDAzZWJfYmxvY2tucik7XG4rXHR9XG4gXG4gZG9uZTpcbiBcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCxcbkBAIC00NTMsMTEgKzQ4NywxMCBAQCBzdGF0aWMgaW50XG4gYWZmc194cmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdCAgICAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbi1cbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvbGRfZGlyLVx1MDAzZWlfc2I7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX29sZCA9IE5VTEw7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX25ldyA9IE5VTEw7XG4tXHRpbnQgcmV0dmFsO1xuK1x0aW50IHJldHZhbCwgcmV0dmFsMjtcbiBcbiBcdGJoX29sZCA9IGFmZnNfYnJlYWQoc2IsIGRfaW5vZGUob2xkX2RlbnRyeSktXHUwMDNlaV9pbm8pO1xuIFx0aWYgKCFiaF9vbGQpXG5AQCAtNDgwLDI1ICs1MTMsNDEgQEAgYWZmc194cmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdGFmZnNfbG9ja19kaXIobmV3X2Rpcik7XG4gXHRyZXR2YWwgPSBhZmZzX3JlbW92ZV9oYXNoKG5ld19kaXIsIGJoX25ldyk7XG4gXHRhZmZzX3VubG9ja19kaXIobmV3X2Rpcik7XG4tXHRpZiAocmV0dmFsKVxuK1x0aWYgKHJldHZhbCkge1xuK1x0XHQvKiBOYW1lcyB1bmNoYW5nZWQ7IG9ubHkgcHV0IG9sZCBiYWNrIGludG8gb2xkX2Rpci4gKi9cbitcdFx0aWYgKGFmZnNfcmVpbnNlcnRfd2l0aF9uYW1lKG9sZF9kaXIsIGJoX29sZCwgb2xkX2RlbnRyeSkpXG4rXHRcdFx0YWZmc193YXJuaW5nKHNiLCBcInhyZW5hbWVcIixcbitcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gcmVzdG9yZSBpbm9kZSAlbHVcIixcbitcdFx0XHRcdCAgICAgKHVuc2lnbmVkIGxvbmcpYmhfb2xkLVx1MDAzZWJfYmxvY2tucik7XG4gXHRcdGdvdG8gZG9uZTtcbitcdH1cbiBcbiBcdC8qIEluc2VydCBvbGQgaW50byB0aGUgbmV3IGRpcmVjdG9yeSB3aXRoIHRoZSBuZXcgbmFtZS4gKi9cbi1cdGFmZnNfY29weV9uYW1lKEFGRlNfVEFJTChzYiwgYmhfb2xkKS1cdTAwM2VuYW1lLCBuZXdfZGVudHJ5KTtcbi1cdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaF9vbGQpO1xuLVx0YWZmc19sb2NrX2RpcihuZXdfZGlyKTtcbi1cdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2gobmV3X2RpciwgYmhfb2xkKTtcbi1cdGFmZnNfdW5sb2NrX2RpcihuZXdfZGlyKTtcbitcdHJldHZhbCA9IGFmZnNfcmVpbnNlcnRfd2l0aF9uYW1lKG5ld19kaXIsIGJoX29sZCwgbmV3X2RlbnRyeSk7XG4rXHRpZiAocmV0dmFsKSB7XG4rXHRcdGFmZnNfeHJlbmFtZV9yZXN0b3JlKG9sZF9kaXIsIG5ld19kaXIsIGJoX29sZCwgYmhfbmV3LFxuK1x0XHRcdFx0ICAgICBvbGRfZGVudHJ5LCBuZXdfZGVudHJ5KTtcbitcdFx0Z290byBkb25lO1xuK1x0fVxuIFxuIFx0LyogSW5zZXJ0IG5ldyBpbnRvIHRoZSBvbGQgZGlyZWN0b3J5IHdpdGggdGhlIG9sZCBuYW1lLiAqL1xuLVx0YWZmc19jb3B5X25hbWUoQUZGU19UQUlMKHNiLCBiaF9uZXcpLVx1MDAzZW5hbWUsIG9sZF9kZW50cnkpO1xuLVx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoX25ldyk7XG4tXHRhZmZzX2xvY2tfZGlyKG9sZF9kaXIpO1xuLVx0cmV0dmFsID0gYWZmc19pbnNlcnRfaGFzaChvbGRfZGlyLCBiaF9uZXcpO1xuLVx0YWZmc191bmxvY2tfZGlyKG9sZF9kaXIpO1xuK1x0cmV0dmFsID0gYWZmc19yZWluc2VydF93aXRoX25hbWUob2xkX2RpciwgYmhfbmV3LCBvbGRfZGVudHJ5KTtcbitcdGlmIChyZXR2YWwpIHtcbitcdFx0LyogVW5kbyB0aGUgZmlyc3QgaW5zZXJ0LCB0aGVuIHJlc3RvcmUgYm90aCBvcmlnaW5hbHMuICovXG4rXHRcdGFmZnNfbG9ja19kaXIobmV3X2Rpcik7XG4rXHRcdHJldHZhbDIgPSBhZmZzX3JlbW92ZV9oYXNoKG5ld19kaXIsIGJoX29sZCk7XG4rXHRcdGFmZnNfdW5sb2NrX2RpcihuZXdfZGlyKTtcbitcdFx0aWYgKHJldHZhbDIpXG4rXHRcdFx0YWZmc193YXJuaW5nKHNiLCBcInhyZW5hbWVcIixcbitcdFx0XHRcdCAgICAgXCJ1bmRvIGluc2VydCBvZiBpbm9kZSAlbHUgZmFpbGVkICglZClcIixcbitcdFx0XHRcdCAgICAgKHVuc2lnbmVkIGxvbmcpYmhfb2xkLVx1MDAzZWJfYmxvY2tuciwgcmV0dmFsMik7XG4rXHRcdGFmZnNfeHJlbmFtZV9yZXN0b3JlKG9sZF9kaXIsIG5ld19kaXIsIGJoX29sZCwgYmhfbmV3LFxuK1x0XHRcdFx0ICAgICBvbGRfZGVudHJ5LCBuZXdfZGVudHJ5KTtcbitcdH1cbitcbiBkb25lOlxuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoX29sZCwgXHUwMDI2QUZGU19JKG5ld19kaXIpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcsIFx1MDAyNkFGRlNfSShvbGRfZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmhfb2xkLCBcdTAwMjZBRkZTX0kocmV0dmFsID8gb2xkX2RpciA6IG5ld19kaXIpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcsIFx1MDAyNkFGRlNfSShyZXR2YWwgPyBuZXdfZGlyIDogb2xkX2RpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuIFx0YWZmc19icmVsc2UoYmhfb2xkKTtcbiBcdGFmZnNfYnJlbHNlKGJoX25ldyk7XG4gXHRyZXR1cm4gcmV0dmFsO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTQ6MjY6MDEuODAyNzY5MTc4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUxNzg3NjE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggZm9yIEFGRlMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgdGhlIEFGRlMgY29kZSDigJMgc3BlY2lmaWNhbGx5LCBgYWZmcy5oYCwgYGZpbGUuY2AsIGFuZCBgbmFtZWkuY2AuIFN0cmFpZ2h0IGF3YXksIEkgY2FuIHRlbGwgdGhpcyBpcyBkZWFsaW5nIHdpdGggc29tZSBsb3ctbGV2ZWwgZmlsZXN5c3RlbSBzdHVmZiB3aXRoaW4gdGhlIEFtaWdhIEZhc3QgRmlsZSBTeXN0ZW0uIFdlJ3JlIGxvb2tpbmcgYXQgZnVuY3Rpb25hbCBjaGFuZ2VzIGhlcmUsIHRoZSBtZWF0IGFuZCBwb3RhdG9lcyBvZiBob3cgQUZGUyBvcGVyYXRlcy5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGFkZHJlc3NlcyBhIGZldyBrZXkgaXNzdWVzLiBGaXJzdCwgaXQgc2VlbXMgbGlrZSB3ZSdyZSBoYXJkZW5pbmcgc29tZSBibG9jayBhbGxvY2F0aW9uIHJvdXRpbmVzLCBgYWZmc19nZXR6ZXJvYmxrYCBhbmQgYGFmZnNfZ2V0ZW1wdHlibGtgLiBUaGV5J3JlIG5vdyBjaGVja2luZyBmb3IgTlVMTCByZXR1cm5zIGZyb20gYHNiX2dldGJsa2AsIHdoaWNoIGlzIGdvb2QgcHJhY3RpY2UgdG8gcHJldmVudCBjcmFzaGVzIGR1ZSB0byBibG9jayBhbGxvY2F0aW9uIGZhaWx1cmVzLiBUaGF0J3MgY3JpdGljYWwgaW4gYSBmaWxlc3lzdGVtLlxuXG5UaGVuIHRoZXJlJ3MgdGhlIGBhZmZzX2V4dGVudF9maWxlX29mc2AgZml4LiBMb29rcyBsaWtlIGl0J3MgYmVlbiB1cGRhdGVkIHRvIHJlbGVhc2UgYHByZXZfYmhgIGNvcnJlY3RseSBhbmQgbWFrZSBzdXJlIHRoZSBpbm9kZSdzIHNpemUgYW5kIGBtbXVfcHJpdmF0ZWAgYXJlIHByb3Blcmx5IHVwZGF0ZWQgdG8gdGhlIGV4dGVuZGVkIHNpemUsIGV2ZW4gb24gZmFpbHVyZS4gTWlzc2luZyB0aG9zZSB3b3VsZCBiZSBwcm9ibGVtYXRpYyAtIGRhdGEgY29ycnVwdGlvbiBvciBwb3RlbnRpYWxseSBldmVuIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy5cblxuRmluYWxseSwgd2UndmUgZ290IHJvbGxiYWNrIG1lY2hhbmlzbXMgaW50cm9kdWNlZCBmb3IgYGFmZnNfcmVuYW1lYCBhbmQgYGFmZnNfeHJlbmFtZWAuIElmIGFuIGluc2VydGlvbiBmYWlscywgdGhpcyBnaXZlcyB1cyBhIHdheSB0byBtYWludGFpbiBkYXRhIGludGVncml0eSBkdXJpbmcgZmlsZSByZW5hbWVzLiBUaGF0J3MgYSBtdXN0LWhhdmUgZm9yIGFueSByZWxpYWJsZSBmaWxlc3lzdGVtIG9wZXJhdGlvbi5cblxuRnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhpcyBpcyBhbGwgdmVyeSBzZW5zaWJsZSBhbmQgY291bGQgaGF2ZSBpbXBvcnRhbnQgaW1wbGljYXRpb25zIGZvciBzdGFiaWxpdHkgYW5kIHJlbGlhYmlsaXR5IHdoZW4gc29tZW9uZSBpcyB1c2luZyBhbiBBRkZTIGltYWdlLiBUaGlzIGlzIGFsbCByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucywgdGhpbmdzIGxpa2UgcmVuYW1pbmcsIHdyaXRpbmcsIGV0Yy4sIGFzc3VtaW5nIHRoZXkgaGF2ZSBhbiBBRkZTIGltYWdlIG1vdW50ZWQuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gbWFrZSBzdXJlIHRoYXQgQUZGUyBpcyBlbmFibGVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBjb25maWcuIExldCdzIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIGlmIEFGRlMgc3VwcG9ydCBpcyBhY3R1YWxseSBidWlsdCBpbnRvIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MjAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNDoyNjowOC4zMjA2NDY3NjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NzAzNzk2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQUZGU19GU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZmZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9hZmZzL0tjb25maWc6Mjpjb25maWcgQUZGU19GU1xcbmZzL2FmZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJBbWlnYSBGRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTQ6MjY6MDkuOTc3Njg5ODA1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ3Mzc1OTU4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQUZGU19GUyBDb25maWd1cmF0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBpbiBxdWVzdGlvbiBpcyBgQUZGU19GU2AuIExldCBtZSBxdWlja2x5IHJldmlldyB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIHdpdGhpbiB0aGlzIGNvbnRleHQuIEJhc2VkIG9uIHRoZSBsaXN0LCBpdCBsb29rcyBsaWtlIHRoZXJlIGhhdmUgYmVlbiBzb21lIHVwZGF0ZXMgdG8gdGhlIGZvbGxvd2luZzogYGFmZnNfZ2V0emVyb2Jsa2AsIGBhZmZzX2dldGVtcHR5YmxrYCwgYGFmZnNfZXh0ZW50X2ZpbGVfb2ZzYCwgYGFmZnNfd3JpdGVfYmVnaW5fb2ZzYCwgYGFmZnNfbGlua2AsIGBhZmZzX3JlaW5zZXJ0X3dpdGhfbmFtZWAsIGBhZmZzX3hyZW5hbWVfcmVzdG9yZWAsIGBhZmZzX3JlbmFtZWAsIGFuZCBgYWZmc194cmVuYW1lYC5cblxuTm93LCBjb25zaWRlcmluZyB0aGUgaW1wYWN0LCBJIHRoaW5rIGl0J3MgaW1wb3J0YW50IHRvIHNwZWNpZmljYWxseSBmbGFnIHRoZXNlIGZ1bmN0aW9ucyBmb3IgZnVydGhlciBhbmFseXNpcyB3aXRoaW4gYEZvY3VzU3ltYm9sc2AuIExldCdzIGdldCB0aGVtIGxpc3RlZDogYGFmZnNfZ2V0emVyb2Jsa2AsIGBhZmZzX2dldGVtcHR5YmxrYCwgYGFmZnNfZXh0ZW50X2ZpbGVfb2ZzYCwgYGFmZnNfd3JpdGVfYmVnaW5fb2ZzYCwgYGFmZnNfcmVuYW1lYCwgYW5kIGBhZmZzX3hyZW5hbWVgLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoZSB1c2FnZSBvZiBgYWZmc19nZXR6ZXJvYmxrYCBhbmQgYGFmZnNfZ2V0ZW1wdHlibGtgIG5vdy4gVGhlc2UgYXJlIG9mdGVuIGNyaXRpY2FsIGZ1bmN0aW9ucyBhbmQgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZWlyIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjU0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE0OjI2OjE0LjQ1MTQ1MDcwOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzExNTg0MzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmZnNfZ2V0emVyb2Jsa1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZmZzL2FmZnMuaD0yNDY9c3RhdGljIGlubGluZSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKlxcbmZzL2FmZnMvYWZmcy5oOjI0NzphZmZzX2dldHplcm9ibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGJsb2NrKVxcbmZzL2FmZnMvYWZmcy5oLTI0OC17XFxuLS1cXG5mcy9hZmZzL2ZpbGUuYz0xMjE9YWZmc19hbGxvY19leHRibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCB1MzIgZXh0KVxcbi0tXFxuZnMvYWZmcy9maWxlLmMtMTMwLVxcbmZzL2FmZnMvZmlsZS5jOjEzMTpcXHRuZXdfYmggPSBhZmZzX2dldHplcm9ibGsoc2IsIGJsb2NrbnIpO1xcbmZzL2FmZnMvZmlsZS5jLTEzMi1cXHRpZiAoIW5ld19iaCkge1xcbi0tXFxuZnMvYWZmcy9maWxlLmM9NDkwPXN0YXRpYyBpbmxpbmUgc3RydWN0IGJ1ZmZlcl9oZWFkICpcXG5mcy9hZmZzL2ZpbGUuYzo0OTE6YWZmc19nZXR6ZXJvYmxrX2lubyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgYmxvY2spXFxuZnMvYWZmcy9maWxlLmMtNDkyLXtcXG4tLVxcbmZzL2FmZnMvZmlsZS5jLTQ5OC1cXHRpZiAoIWVycikge1xcbmZzL2FmZnMvZmlsZS5jOjQ5OTpcXHRcXHRiaCA9IGFmZnNfZ2V0emVyb2Jsayhpbm9kZS1cXHUwMDNlaV9zYiwgdG1wX2JoLmJfYmxvY2tucik7XFxuZnMvYWZmcy9maWxlLmMtNTAwLVxcdFxcdGlmIChiaCkge1xcbi0tXFxuZnMvYWZmcy9maWxlLmM9NTYxPWFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxcbi0tXFxuZnMvYWZmcy9maWxlLmMtNTk1LVxcdFxcdHByZXZfYmggPSBiaDtcXG5mcy9hZmZzL2ZpbGUuYzo1OTY6XFx0XFx0YmggPSBhZmZzX2dldHplcm9ibGtfaW5vKGlub2RlLCBiaWR4KTtcXG5mcy9hZmZzL2ZpbGUuYy01OTctXFx0XFx0aWYgKElTX0VSUihiaCkpXFxuLS1cXG5mcy9hZmZzL2lub2RlLmM9MjkyPWFmZnNfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyKVxcbi0tXFxuZnMvYWZmcy9pbm9kZS5jLTMwNC1cXG5mcy9hZmZzL2lub2RlLmM6MzA1OlxcdGJoID0gYWZmc19nZXR6ZXJvYmxrKHNiLCBibG9jayk7XFxuZnMvYWZmcy9pbm9kZS5jLTMwNi1cXHRpZiAoIWJoKVxcbi0tXFxuZnMvYWZmcy9pbm9kZS5jPTM0OT1hZmZzX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzMzIgdHlwZSlcXG4tLVxcbmZzL2FmZnMvaW5vZGUuYy0zNzQtXFx0XFx0aW5vZGVfYmggPSBiaDtcXG5mcy9hZmZzL2lub2RlLmM6Mzc1OlxcdFxcdGJoID0gYWZmc19nZXR6ZXJvYmxrKHNiLCBibG9jayk7XFxuZnMvYWZmcy9pbm9kZS5jLTM3Ni1cXHRcXHRpZiAoIWJoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNDoyNjoxNi4xNjMwNDA1MjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODU0OTA2MjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBBRkZTIEZpbGUgU3lzdGVtIFN5bWJvbHMgZm9yIEZvY3VzU3ltYm9scyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIEFGRlMgZmlsZSBzeXN0ZW0gZnVuY3Rpb25zOiBgYWZmc19nZXR6ZXJvYmxrYCwgYGFmZnNfZ2V0ZW1wdHlibGtgLCBgYWZmc19leHRlbnRfZmlsZV9vZnNgLCBgYWZmc193cml0ZV9iZWdpbl9vZnNgLCBgYWZmc19yZW5hbWVgLCBhbmQgYGFmZnNfeHJlbmFtZWAuIFRoZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lcyBhcmUgZ29vZCBjYW5kaWRhdGVzIGZvciBgRm9jdXNTeW1ib2xzYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGFmZnNfZ2V0emVyb2Jsa2AgYW5kIGBhZmZzX2dldGVtcHR5YmxrYCBhcmUgcHJvYmFibHkgYSBiaXQgdHJpY2t5LiBUaGV5J3JlIGRlZmluZWQgYXMgYHN0YXRpYyBpbmxpbmVgIGluIGBmcy9hZmZzL2FmZnMuaGAuIEJlY2F1c2UgdGhleSdyZSBpbmxpbmVkLCBpdCBtZWFucyB0aGUgY29tcGlsZXIgbWlnaHQgb3B0aW1pemUgdGhlbSBhd2F5IGR1cmluZyBjb21waWxhdGlvbiwgd2hpY2ggY291bGQgbWFrZSB0aGVtIGxlc3MgdXNlZnVsIGZvciB0aGUgYEZvY3VzU3ltYm9sc2AgYW5hbHlzaXMuIFdlJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGhvdyB0aGUgY29tcGlsZXIgaGFuZGxlcyBpbmxpbmVzIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC5cblxuT24gdGhlIG90aGVyIGhhbmQsIGBhZmZzX2V4dGVudF9maWxlX29mc2AsIGBhZmZzX3JlbmFtZWAsIGFuZCBgYWZmc194cmVuYW1lYCBzZWVtIGxpa2Ugc29saWQgYmV0cy4gVGhleSdyZSBub3QgaW5saW5lZCwgc28gdGhleSdyZSBkZWZpbml0ZWx5IGF2YWlsYWJsZSBhcyBzZXBhcmF0ZSBmdW5jdGlvbnMuIFRob3NlIHNlZW0gbGlrZSB0aGV5J3JlIHdvcnRoIGEgY2xvc2VyIGxvb2sgZm9yIGluY2x1c2lvbiBpbiB0aGUgc2V0LlxuXG5SaWdodCBub3csIGxldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgdXNhZ2Ugb2YgYGFmZnNfZ2V0ZW1wdHlibGtgIHRvIGdldCBhIHNlbnNlIG9mIHdoZXJlIGl0J3MgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBmaWxlIHN5c3RlbSBjb2RlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHNpZ25pZmljYW5jZSBhbmQgYXBwbGljYWJpbGl0eSB0byBgRm9jdXNTeW1ib2xzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQwMCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNDoyNjoyMS4wMTc5NDgxNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU2NjA0NDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmZnNfZ2V0ZW1wdHlibGtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZmcy9hZmZzLmg9MjYzPXN0YXRpYyBpbmxpbmUgc3RydWN0IGJ1ZmZlcl9oZWFkICpcXG5mcy9hZmZzL2FmZnMuaDoyNjQ6YWZmc19nZXRlbXB0eWJsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgYmxvY2spXFxuZnMvYWZmcy9hZmZzLmgtMjY1LXtcXG4tLVxcbmZzL2FmZnMvZmlsZS5jPTUwOT1zdGF0aWMgaW5saW5lIHN0cnVjdCBidWZmZXJfaGVhZCAqXFxuZnMvYWZmcy9maWxlLmM6NTEwOmFmZnNfZ2V0ZW1wdHlibGtfaW5vKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBibG9jaylcXG5mcy9hZmZzL2ZpbGUuYy01MTEte1xcbi0tXFxuZnMvYWZmcy9maWxlLmMtNTE3LVxcdGlmICghZXJyKSB7XFxuZnMvYWZmcy9maWxlLmM6NTE4OlxcdFxcdGJoID0gYWZmc19nZXRlbXB0eWJsayhpbm9kZS1cXHUwMDNlaV9zYiwgdG1wX2JoLmJfYmxvY2tucik7XFxuZnMvYWZmcy9maWxlLmMtNTE5LVxcdFxcdGlmIChiaCkge1xcbi0tXFxuZnMvYWZmcy9maWxlLmM9NjkyPXN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4tLVxcbmZzL2FmZnMvZmlsZS5jLTc0OC1cXHRcXHRwcmV2X2JoID0gYmg7XFxuZnMvYWZmcy9maWxlLmM6NzQ5OlxcdFxcdGJoID0gYWZmc19nZXRlbXB0eWJsa19pbm8oaW5vZGUsIGJpZHgpO1xcbmZzL2FmZnMvZmlsZS5jLTc1MC1cXHRcXHRpZiAoSVNfRVJSKGJoKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTQ6MjY6MjIuNjc0NTU3MDMyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4Njc3MTAyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBBRkZTIEZpbGUgU3lzdGVtIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHJldmlld2VkIHRoZSBwYXRjaCBhbmQgSSBuZWVkIHRvIGhvbmUgaW4gb24gYSBzcGVjaWZpYyBhcmVhIGZvciBmdXp6aW5nLiBCYXNlZCBvbiB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIG91dGxpbmVkLCBJJ20gZ29pbmcgdG8gYWRkIGEgZmV3IGtleSBzeW1ib2xzIHRvIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0OiBgYWZmc19leHRlbnRfZmlsZV9vZnNgLCBgYWZmc19yZW5hbWVgLCBgYWZmc194cmVuYW1lYCwgYW5kIGBhZmZzX3dyaXRlX2JlZ2luX29mc2AuIFRoZXNlIGFyZSBhbGwgcmVsYXRlZCB0byBjcnVjaWFsIEFGRlMgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCBjb3ZlcmluZyBmaWxlIGV4dGVuc2lvbiwgcmVuYW1pbmcgKGJvdGggaW50ZXJuYWwgYW5kIGV4dGVuZGVkKSwgYW5kIHdyaXRlIG9wZXJhdGlvbiBzdGFydGluZyBvZmZzZXQuXG5cblRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGlzIGBBRkZTX0ZTYCwgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGNvbnRyb2xsaW5nIGZhY3RvciBoZXJlLiBCZWZvcmUgSSBtb3ZlIG9uLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGRlcGVuZGVudCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGVzZSBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgYEFGRlNfRlNgIGlzIHRoZSBvbmx5IG9uZSBJIG5lZWQgdG8gY29uc2lkZXI7IHRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQuXG5cblRoZSBwYXRjaCdzIHJlYXNvbmluZyBlbXBoYXNpemVzIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBpbXByb3ZlbWVudHMgaW1wYWN0aW5nIGhvdyB0aGUgZmlsZXN5c3RlbSBiZWhhdmVzIHVuZGVyIHN0YW5kYXJkIHN5c2NhbGxzLiBTaW5jZSB0aGUgXCJXb3J0aEZ1enppbmdcIiBmbGFnIGlzIHNldCB0byB0cnVlLCBpdCByZWluZm9yY2VzIHRoZSBuZWVkIGZvciByaWdvcm91cyB0ZXN0aW5nLiBXaXRoIHRoZSBgRW5hYmxlQ29uZmlnc2Agc2V0IHRvIGBBRkZTX0ZTYCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIHJlZmluZWQsIGl0J3MgdGltZSB0byBzZXQgdGhlIHJlc3VsdHMgYW5kIG1vdmUgdG8gdGhlIG5leHQgcGhhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNDYsIk91dHB1dFRva2VucyI6MTU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE0OjI2OjI4LjY2MTMyOTQ5OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0OTg5NDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRkZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWZmc19leHRlbnRfZmlsZV9vZnNcIixcbiAgICBcImFmZnNfcmVuYW1lXCIsXG4gICAgXCJhZmZzX3hyZW5hbWVcIixcbiAgICBcImFmZnNfd3JpdGVfYmVnaW5fb2ZzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHJvbGxiYWNrIGxvZ2ljIGluIEFGRlMgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgaW4gZmlsZSBleHRlbnNpb24gKGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKSwgcmVuYW1lIChhZmZzX3JlbmFtZSwgYWZmc194cmVuYW1lKSwgYW5kIGJsb2NrIGFsbG9jYXRpb24gKGFmZnNfZ2V0emVyb2JsaywgYWZmc19nZXRlbXB0eWJsaykuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGZpbGVzeXN0ZW0gY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIHN0YW5kYXJkIHN5c2NhbGxzIG9uIGFuIEFGRlMgbW91bnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmZnNfZXh0ZW50X2ZpbGVfb2ZzXCIsXG4gICAgXCJhZmZzX3JlbmFtZVwiLFxuICAgIFwiYWZmc194cmVuYW1lXCIsXG4gICAgXCJhZmZzX3dyaXRlX2JlZ2luX29mc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIGFuZCByb2xsYmFjayBsb2dpYyBpbiBBRkZTIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IGluIGZpbGUgZXh0ZW5zaW9uIChhZmZzX2V4dGVudF9maWxlX29mcyksIHJlbmFtZSAoYWZmc19yZW5hbWUsIGFmZnNfeHJlbmFtZSksIGFuZCBibG9jayBhbGxvY2F0aW9uIChhZmZzX2dldHplcm9ibGssIGFmZnNfZ2V0ZW1wdHlibGspLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBmaWxlc3lzdGVtIGNvZGUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBzdGFuZGFyZCBzeXNjYWxscyBvbiBhbiBBRkZTIG1vdW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowz98bm[1] Phase: Succeeded StartedAt: 2026-07-14 14:26:40 +0000 UTC FinishedAt: 2026-07-14 14:26:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz98bm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-14 14:26:40 +0000 UTC FinishedAt: 2026-07-14 14:26:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz98bm[2] Phase: Succeeded StartedAt: 2026-07-14 14:26:40 +0000 UTC FinishedAt: 2026-07-14 16:36:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-14 14:26:40 +0000 UTC FinishedAt: 2026-07-14 16:36:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-14 14:26:40 +0000 UTC FinishedAt: 2026-07-14 14:26:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-14 14:26:40 +0000 UTC FinishedAt: 2026-07-14 14:26:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowz98bm/series-workflowz98bm-convert-artifact-1243300817/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-14 14:26:50 +0000 UTC FinishedAt: 2026-07-14 15:10:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-14 14:26:50 +0000 UTC FinishedAt: 2026-07-14 15:10:20 +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:*df379426-75e5-4b48-9dc1-6335ff1155b3,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-workflowz98bm/series-workflowz98bm-convert-artifact-1243300817/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": "5846b24d-fe0b-4fdb-9607-612f05f54344", "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-workflowz98bm/series-workflowz98bm-build-action-4112244095/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-14 14:26:50 +0000 UTC FinishedAt: 2026-07-14 15:09:14 +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:*df379426-75e5-4b48-9dc1-6335ff1155b3,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-workflowz98bm/series-workflowz98bm-convert-artifact-1243300817/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": "5846b24d-fe0b-4fdb-9607-612f05f54344", "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-workflowz98bm/series-workflowz98bm-build-action-4112244095/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-14 15:10:20 +0000 UTC FinishedAt: 2026-07-14 15:10:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-14 15:10:20 +0000 UTC FinishedAt: 2026-07-14 15:10:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-14 15:10:20 +0000 UTC FinishedAt: 2026-07-14 15:10:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-14 15:10:20 +0000 UTC FinishedAt: 2026-07-14 15:10:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowz98bm/series-workflowz98bm-convert-artifact-508109476/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-14 15:10:41 +0000 UTC FinishedAt: 2026-07-14 15:12:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-14 15:10:41 +0000 UTC FinishedAt: 2026-07-14 15:12:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5846b24d-fe0b-4fdb-9607-612f05f54344,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-workflowz98bm/series-workflowz98bm-build-action-4112244095/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-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-14 15:12:41 +0000 UTC FinishedAt: 2026-07-14 15:12:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-14 15:12:41 +0000 UTC FinishedAt: 2026-07-14 15:12:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-14 15:12:41 +0000 UTC FinishedAt: 2026-07-14 15:47:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-14 15:12:41 +0000 UTC FinishedAt: 2026-07-14 15:47:51 +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:*df379426-75e5-4b48-9dc1-6335ff1155b3,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-workflowz98bm/series-workflowz98bm-convert-artifact-508109476/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": "b6b36922-3cef-43f9-a150-39c4b3a182f6", "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-workflowz98bm/series-workflowz98bm-build-action-1955043632/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-14 15:12:41 +0000 UTC FinishedAt: 2026-07-14 15:46:44 +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:*df379426-75e5-4b48-9dc1-6335ff1155b3,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-workflowz98bm/series-workflowz98bm-convert-artifact-508109476/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": "b6b36922-3cef-43f9-a150-39c4b3a182f6", "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-workflowz98bm/series-workflowz98bm-build-action-1955043632/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-14 15:47:51 +0000 UTC FinishedAt: 2026-07-14 15:47:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-14 15:47:51 +0000 UTC FinishedAt: 2026-07-14 15:47:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-14 15:47:51 +0000 UTC FinishedAt: 2026-07-14 15:49:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-14 15:47:51 +0000 UTC FinishedAt: 2026-07-14 15:49:47 +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:*b6b36922-3cef-43f9-a150-39c4b3a182f6,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-workflowz98bm/series-workflowz98bm-build-action-1955043632/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-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-14 15:49:56 +0000 UTC FinishedAt: 2026-07-14 16:36:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-14 15:49:56 +0000 UTC FinishedAt: 2026-07-14 16:36:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"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:*5846b24d-fe0b-4fdb-9607-612f05f54344,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b6b36922-3cef-43f9-a150-39c4b3a182f6,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-workflowz98bm/series-workflowz98bm-build-action-4112244095/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-workflowz98bm/series-workflowz98bm-build-action-1955043632/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-14 15:49:56 +0000 UTC FinishedAt: 2026-07-14 15:50:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-14 15:49:56 +0000 UTC FinishedAt: 2026-07-14 15:50:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"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-workflowz98bm/series-workflowz98bm-convert-artifact-997764909/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-14 15:49:56 +0000 UTC FinishedAt: 2026-07-14 15:49:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-14 15:49:56 +0000 UTC FinishedAt: 2026-07-14 15:49:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-14 15:49:56 +0000 UTC FinishedAt: 2026-07-14 15:49:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-14 15:50:33 +0000 UTC FinishedAt: 2026-07-14 16:36:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz98bm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["affs_extent_file_ofs","affs_rename","affs_xrename","affs_write_begin_ofs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFFS_FS"],"series_id":"374bf0ea-37b0-4a7d-8f8a-fa1f35e99f29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-14 15:50:33 +0000 UTC FinishedAt: 2026-07-14 16:36:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5846b24d-fe0b-4fdb-9607-612f05f54344,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b6b36922-3cef-43f9-a150-39c4b3a182f6,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-workflowz98bm/series-workflowz98bm-build-action-4112244095/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-workflowz98bm/series-workflowz98bm-build-action-1955043632/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-workflowz98bm/series-workflowz98bm-convert-artifact-997764909/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,}