Name: series-workflowtrh8t Phase: Succeeded StartedAt: 2026-08-02 06:27:17 +0000 UTC FinishedAt: 2026-08-02 10:57:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[0] Phase: Succeeded StartedAt: 2026-08-02 06:27:17 +0000 UTC FinishedAt: 2026-08-02 07:00:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 06:27:17 +0000 UTC FinishedAt: 2026-08-02 07:00:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "d0be43f25d0dd778b0185d67b8b9f4ab70e68154", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "XFS_FS", "BTRFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "d0be43f25d0dd778b0185d67b8b9f4ab70e68154", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "XFS_FS", "BTRFS_FS" ], "series_id": "aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__iomap_dio_rw", "iomap_dio_rw", "__iomap_dio_read_simple" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "c9f79a18-3316-44ec-b805-b805b1c49325", "8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDssCiAgICAmIzM0O0JUUkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19pb21hcF9kaW9fcncmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3J3JiMzNDssCiAgICAmIzM0O19faW9tYXBfZGlvX3JlYWRfc2ltcGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpb21hcF9kaW9fYWxpZ25tZW50YCB0byBoYW5kbGUgTlVMTCBgYmRldmAgZm9yIGhvbGUgY2FzZXMgYW5kIGBpb21hcF9kaW9faG9sZV9pdGVyYCB0byBhbGlnbiB0aGUgY29waWVkIGxlbmd0aCB0byB0aGUgYmxvY2sgc2l6ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJTyBwYXRoLiBJdCBjYW4gYmUgcmVhY2hlZCB2aWEgZGlyZWN0IElPIG9wZXJhdGlvbnMgb24gZmlsZXN5c3RlbXMgdGhhdCBzdXBwb3J0IGhvbGVzIGFuZCB1c2UgaW9tYXAgKGUuZy4sIGV4dDQsIHhmcywgYnRyZnMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTFlOGM2YTZjZWJmMzY4N2Y2NjMzYzg3Y2JjNWVjZjRkN2FkNmE1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMDY6NTk6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvZGlyZWN0LWlvLmMgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuaW5kZXggYjMzNjhkNjRlODFiYi4uMTBmMDAyMGRlNDc3MCAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuQEAgLTQwOSw3ICYjNDM7NDA5LDEwIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvbWFwX2Rpb19hbGlnbm1lbnQoc3RydWN0IGlub2RlICppbm9kZSxcbiB7XG4gXHRpZiAoZGlvX2ZsYWdzIFx1MDAyNiBJT01BUF9ESU9fRlNCTE9DS19BTElHTkVEKVxuIFx0XHRyZXR1cm4gaV9ibG9ja3NpemUoaW5vZGUpO1xuLVx0cmV0dXJuIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpO1xuJiM0MztcdC8qIEBiZGV2IGNhbiBiZSBOVUxMIGZvciBob2xlIGNhc2VzLiAqL1xuJiM0MztcdGlmIChiZGV2KVxuJiM0MztcdFx0cmV0dXJuIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpO1xuJiM0MztcdHJldHVybiBTRUNUT1JfU0laRTtcbiB9XG4gXG4gc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbkBAIC01OTQsMTIgJiM0Mzs1OTcsMjAgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiBcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiB7XG4tXHRsb2ZmX3QgbGVuZ3RoID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cdTAwM2VzdWJtaXQuaXRlcik7XG4mIzQzO1x0bG9mZl90IGNvcGllZCA9IGlvdl9pdGVyX3plcm8oaW9tYXBfbGVuZ3RoKGl0ZXIpLCBkaW8tXHUwMDNlc3VibWl0Lml0ZXIpO1xuJiM0MztcdHVuc2lnbmVkIGludCBicyA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaXRlci1cdTAwM2Vpbm9kZSwgaXRlci1cdTAwM2Vpb21hcC5iZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgZGlvLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRsb2ZmX3QgYWxpZ25lZF9jb3BpZWQgPSByb3VuZF9kb3duKGNvcGllZCwgYnMpO1xuIFxuLVx0ZGlvLVx1MDAzZXNpemUgJiM0Mzs9IGxlbmd0aDtcbi1cdGlmICghbGVuZ3RoKVxuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgZnMgYmxvY2sgc2l6ZSBpcyBsYXJnZXIgdGhhbiBwYWdlIHNpemUsIHBhZ2UgZmF1bHQgZmFpbHVyZVxuJiM0MztcdCAqIGNhbiBjYXVzZSBAY29waWVkIHRvIGJlIHBhZ2UgYWxpZ25lZCBidXQgbm90IGZzIGJsb2NrIGFsaWduZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW92X2l0ZXJfcmV2ZXJ0KGRpby1cdTAwM2VzdWJtaXQuaXRlciwgY29waWVkIC0gYWxpZ25lZF9jb3BpZWQpO1xuJiM0MztcdGRpby1cdTAwM2VzaXplICYjNDM7PSBhbGlnbmVkX2NvcGllZDtcbiYjNDM7XHRpZiAoIWFsaWduZWRfY29waWVkKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdHJldHVybiBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgbGVuZ3RoKTtcbiYjNDM7XHRyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGFsaWduZWRfY29waWVkKTtcbiB9XG4gXG4gc3RhdGljIGludCBpb21hcF9kaW9faW5saW5lX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKmlvbWksIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtYRlNfRlMmIzM0OywKICAgICYjMzQ7QlRSRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2lvbWFwX2Rpb19ydyYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fcncmIzM0OywKICAgICYjMzQ7X19pb21hcF9kaW9fcmVhZF9zaW1wbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGlvbWFwX2Rpb19hbGlnbm1lbnRgIHRvIGhhbmRsZSBOVUxMIGBiZGV2YCBmb3IgaG9sZSBjYXNlcyBhbmQgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIHRvIGFsaWduIHRoZSBjb3BpZWQgbGVuZ3RoIHRvIHRoZSBibG9jayBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9tYXAgZGlyZWN0IElPIHBhdGguIEl0IGNhbiBiZSByZWFjaGVkIHZpYSBkaXJlY3QgSU8gb3BlcmF0aW9ucyBvbiBmaWxlc3lzdGVtcyB0aGF0IHN1cHBvcnQgaG9sZXMgYW5kIHVzZSBpb21hcCAoZS5nLiwgZXh0NCwgeGZzLCBidHJmcykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhMWU4YzZhNmNlYmYzNjg3ZjY2MzNjODdjYmM1ZWNmNGQ3YWQ2YTU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMiAwNjo1OToxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmMKaW5kZXggYjMzNjhkNjRlODFiYi4uMTBmMDAyMGRlNDc3MCAxMDA2NDQKLS0tIGEvZnMvaW9tYXAvZGlyZWN0LWlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW9tYXAvZGlyZWN0LWlvLmMKQEAgLTQwOSw3ICYjNDM7NDA5LDEwIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvbWFwX2Rpb19hbGlnbm1lbnQoc3RydWN0IGlub2RlICppbm9kZSwKIHsKIAlpZiAoZGlvX2ZsYWdzICZhbXA7IElPTUFQX0RJT19GU0JMT0NLX0FMSUdORUQpCiAJCXJldHVybiBpX2Jsb2Nrc2l6ZShpbm9kZSk7Ci0JcmV0dXJuIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpOwomIzQzOwkvKiBAYmRldiBjYW4gYmUgTlVMTCBmb3IgaG9sZSBjYXNlcy4gKi8KJiM0MzsJaWYgKGJkZXYpCiYjNDM7CQlyZXR1cm4gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoYmRldik7CiYjNDM7CXJldHVybiBTRUNUT1JfU0laRTsKIH0KIAogc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbykKQEAgLTU5NCwxMiAmIzQzOzU5NywyMCBAQCBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKQogCiBzdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbykKIHsKLQlsb2ZmX3QgbGVuZ3RoID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby0mZ3Q7c3VibWl0Lml0ZXIpOwomIzQzOwlsb2ZmX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby0mZ3Q7c3VibWl0Lml0ZXIpOwomIzQzOwl1bnNpZ25lZCBpbnQgYnMgPSBpb21hcF9kaW9fYWxpZ25tZW50KGl0ZXItJmd0O2lub2RlLCBpdGVyLSZndDtpb21hcC5iZGV2LAomIzQzOwkJCQkJICAgICAgZGlvLSZndDtmbGFncyk7CiYjNDM7CWxvZmZfdCBhbGlnbmVkX2NvcGllZCA9IHJvdW5kX2Rvd24oY29waWVkLCBicyk7CiAKLQlkaW8tJmd0O3NpemUgJiM0Mzs9IGxlbmd0aDsKLQlpZiAoIWxlbmd0aCkKJiM0MzsJLyoKJiM0MzsJICogSWYgZnMgYmxvY2sgc2l6ZSBpcyBsYXJnZXIgdGhhbiBwYWdlIHNpemUsIHBhZ2UgZmF1bHQgZmFpbHVyZQomIzQzOwkgKiBjYW4gY2F1c2UgQGNvcGllZCB0byBiZSBwYWdlIGFsaWduZWQgYnV0IG5vdCBmcyBibG9jayBhbGlnbmVkLgomIzQzOwkgKi8KJiM0MzsJaW92X2l0ZXJfcmV2ZXJ0KGRpby0mZ3Q7c3VibWl0Lml0ZXIsIGNvcGllZCAtIGFsaWduZWRfY29waWVkKTsKJiM0MzsJZGlvLSZndDtzaXplICYjNDM7PSBhbGlnbmVkX2NvcGllZDsKJiM0MzsJaWYgKCFhbGlnbmVkX2NvcGllZCkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBsZW5ndGgpOwomIzQzOwlyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGFsaWduZWRfY29waWVkKTsKIH0KIAogc3RhdGljIGludCBpb21hcF9kaW9faW5saW5lX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKmlvbWksIHN0cnVjdCBpb21hcF9kaW8gKmRpbykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ3NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERpcmVjdCBJL08gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGZzL2lvbWFwL2RpcmVjdC1pby5jYC4gVGhlIGtleSBjaGFuZ2VzIHNlZW0gdG8gcmV2b2x2ZSBhcm91bmQgaGFuZGxpbmcgbnVsbCBibG9jayBkZXZpY2VzIGluIGBpb21hcF9kaW9fYWxpZ25tZW50YCBhbmQgYWxpZ25pbmcgdGhlIGNvcGllZCBsZW5ndGggd2l0aGluIGBpb21hcF9kaW9faG9sZV9pdGVyYC4gU3BlY2lmaWNhbGx5LCB3aXRoIHRoZSBudWxsIGBiZGV2YCwgaXQmIzM5O3Mgbm93IHJldHVybmluZyBgU0VDVE9SX1NJWkVgLCBhbmQgaW4gdGhlIGhvbGUgaXRlcmF0b3IsIGl0JiMzOTtzIGFsaWduaW5nIHRoZSBgaW92X2l0ZXJfemVyb2AgbGVuZ3RoIHRvIHRoZSBibG9jayBzaXplLCBlZmZlY3RpdmVseSByZW1vdmluZyBhbnkgdW5hbGlnbmVkIGRhdGEuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGhlcmUuIExldCYjMzk7cyBkaWcgaW50byB0aGUgY29kZSBpdHNlbGYuIEkmIzM5O2xsIG9wZW4gdXAgYGZzL2lvbWFwL2RpcmVjdC1pby5jYCBhbmQgbG9jYXRlIHRoZXNlIGZ1bmN0aW9ucywgYGlvbWFwX2Rpb19hbGlnbm1lbnRgIGFuZCBgaW9tYXBfZGlvX2hvbGVfaXRlcmAuIEFoLCBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgaXMgc3RhdGljLCB3aGljaCBtZWFucyBpdCYjMzk7cyBsaWtlbHkgY2FsbGVkIHdpdGhpbiB0aGUgc2FtZSBmaWxlLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGxlcnMgdG8gZnVsbHkgZ3Jhc3AgaG93IHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIG92ZXJhbGwgRGlyZWN0IEkvTyBmbG93LiBNeSBpbnR1aXRpb24gc2F5cyBgaW9tYXBfZGlvX2l0ZXJgIG9yIGEgc2ltaWxhciBmdW5jdGlvbiBpcyB0aGUgb2J2aW91cyBjYW5kaWRhdGUuIFRpbWUgdG8gY29uZmlybSBteSBoeXBvdGhlc2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvbWFwX2Rpb19ob2xlX2l0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYz00MTg9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01OTctXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo1OTg6c3RhdGljIGludCBpb21hcF9kaW9faG9sZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01OTkte1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY0OD1zdGF0aWMgaW50IGlvbWFwX2Rpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjUzLVx0XHRcdHJldHVybiAtRUlPO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjU0Olx0XHRyZXR1cm4gaW9tYXBfZGlvX2hvbGVfaXRlcihpdGVyLCBkaW8pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjU1LVx0Y2FzZSBJT01BUF9VTldSSVRURU46XG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTYtXHRcdGlmICghKGRpby1cdTAwM2VmbGFncyBcdTAwMjYgSU9NQVBfRElPX1dSSVRFKSlcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY1NzpcdFx0XHRyZXR1cm4gaW9tYXBfZGlvX2hvbGVfaXRlcihpdGVyLCBkaW8pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjU4LVx0XHRyZXR1cm4gaW9tYXBfZGlvX2Jpb19pdGVyKGl0ZXIsIGRpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMwMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gRGlyZWN0IEkvTyBJdGVyYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIERpcmVjdCBJL08gaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB0aGUgcGFydHMgdGhhdCBoYW5kbGUgdGhlIGFjdHVhbCBkYXRhIHRyYW5zZmVycy4gTXkgbWluZCBpcyBpbW1lZGlhdGVseSBkcmF3biB0byBgaW9tYXBfZGlvX2l0ZXJgLiBUaGF0IGZ1bmN0aW9uIGlzIGtleSwgYmVjYXVzZSBpdCYjMzk7cyB3aGVyZSB0aGUgaXRlcmF0aXZlIGxvZ2ljIGZvciBEaXJlY3QgSS9PIHJlYWRzIGFuZCB3cml0ZXMgcmVhbGx5IGtpY2tzIGluLiBJdCYjMzk7cyB0aGUgZW5naW5lLgoKQW5kIHdoZXJlIGRvZXMgdGhpcyBlbmdpbmUgZ2V0IHN0YXJ0ZWQ/ICBBaCwgeWVzLCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgX19pb21hcF9kaW9fcndgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIERpcmVjdCBJL08gcmVhZC93cml0ZSBmdW5jdGlvbiwgdGhlIG9uZSB0aGF0IG9yY2hlc3RyYXRlcyB0aGUgb3ZlcmFsbCBwcm9jZXNzLCBzZXRzIHVwIHRoZSBpbml0aWFsIGNvbmRpdGlvbnMsIGFuZCB0aGVuIHByZXN1bWFibHkgaGFuZHMgb2ZmIHRoZSBpdGVyYXRpdmUgd29ya2xvYWQgdG8gYGlvbWFwX2Rpb19pdGVyYC4gU28sIGBfX2lvbWFwX2Rpb19yd2Agc2V0cyB0aGUgc3RhZ2UgYW5kIGBpb21hcF9kaW9faXRlcmAgZG9lcyB0aGUgaGVhdnkgbGlmdGluZywgYmxvY2sgYnkgYmxvY2ssIGJ5dGUgYnkgYnl0ZS4gIFVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRob3NlIHR3byBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwZXJmb3JtYW5jZSBhbmQgZWZmaWNpZW5jeSBvZiBEaXJlY3QgSS9PLiBOZWVkIHRvIGRpZyBpbnRvIHRoYXQgY29udHJvbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvbWFwX2Rpb19pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjE2PXN0YXRpYyBpbnQgaW9tYXBfZGlvX2lubGluZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjQ3LVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjQ4OnN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY0OS17XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NzAwPV9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTgyNS1cdHdoaWxlICgocmV0ID0gaW9tYXBfaXRlcihcdTAwMjZpb21pLCBvcHMpKSBcdTAwM2UgMCkge1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODI2Olx0XHRpb21pLnN0YXR1cyA9IGlvbWFwX2Rpb19pdGVyKFx1MDAyNmlvbWksIGRpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy04MjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg4NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBzdW1tYXJ5IGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3ZWxsLXZlcnNlZCBpbiBJL08gb3BlcmF0aW9ucyBhbmQgdGhlIGlvbWFwIHN1YnN5c3RlbToKCioqRGlyZWN0IEkvTyBpbiB0aGUgaW9tYXAgY29udGV4dCoqCgpSaWdodCwgc28gYF9faW9tYXBfZGlvX3J3YCBpcyB0aGUgbHluY2hwaW4gZnVuY3Rpb24gZm9yIGRpcmVjdCBJL08gd2l0aGluIHRoZSBpb21hcCBmcmFtZXdvcmsuIFRoYXQmIzM5O3MgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIgd2hlbiBkZWFsaW5nIHdpdGggYnlwYXNzaW5nIHRoZSBwYWdlIGNhY2hlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYmVmb3JlIGRpdmluZyB0b28gZGVlcCwgaXQmIzM5O3MgYWx3YXlzIHBydWRlbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgKnNwZWNpZmljKiBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGtub2JzLCBvciB0dW5hYmxlcyB0aGF0IGluZmx1ZW5jZSB0aGUgaW9tYXAgYmVoYXZpb3IuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGluIG15IGV4cGVydCB1bmRlcnN0YW5kaW5nLCB0aGF0IHRoZXNlIGtpbmRzIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjb3VsZCBzdWJ0bHkgY2hhbmdlIGhvdyBgX19pb21hcF9kaW9fcndgIHdvcmtzLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIGNvbnRleHQsIGFuZCBhbnkgc3BlY2lmaWMgYWRhcHRhdGlvbnMgaW4gdGhlIGNvbmZpZ3VyYXRpb24sIGJlZm9yZSBhbnkgZnVydGhlciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlNfSU9NQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0xMj1jb25maWcgVkFMSURBVEVfRlNfUEFSU0VSXG4tLVxuZnMvS2NvbmZpZy0xNy1cbmZzL0tjb25maWc6MTg6Y29uZmlnIEZTX0lPTUFQXG5mcy9LY29uZmlnLTE5LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMTIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipFeGFtaW5pbmcgdGhlIERlcGVuZGVuY3kgb2YgRlNfSU9NQVAqKgoKUmlnaHQsIHNvIGBGU19JT01BUGAgaXMgYSBib29sZWFuIGZsYWcsIGNvbW1vbmx5IHVzZWQgYnkgYSBudW1iZXIgb2YgZmlsZXN5c3RlbXMg4oCTIFhGUywgZXh0NCwgYnRyZnMsIHRoYXQgc29ydCBvZiB0aGluZy4gSXQmIzM5O3MgdXN1YWxseSBzb21ldGhpbmcgdGhhdCBnZXRzIGVuYWJsZWQgYXQgdGhlIGZpbGVzeXN0ZW0gbGV2ZWwsIGFuZCBJIGNhbiB0ZWNobmljYWxseSBjb25maWd1cmUgaXQgYXMgYSBoaWRkZW4gYm9vbGVhbiwgYnV0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcHJlY2lzZWx5IGRldGVybWluZXMgd2hldGhlciBgRlNfSU9NQVBgIGlzIGFjdHVhbGx5IHNlbGVjdGVkLiBJdCYjMzk7cyBhIGtleSBkZXRhaWwgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmlsZXN5c3RlbXMgYXJlIGJlaGF2aW5nLiBUaW1lIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgdGhlIHNlbGVjdGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgRlNfSU9NQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz01OD1jb25maWcgRlNfREFYXG4tLVxuZnMvS2NvbmZpZy02MS1cdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmZzL0tjb25maWc6NjI6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL0tjb25maWctNjMtXHRzZWxlY3QgREFYXG4tLVxuZnMvYnRyZnMvS2NvbmZpZz0zPWNvbmZpZyBCVFJGU19GU1xuLS1cbmZzL2J0cmZzL0tjb25maWctMTQtXHRzZWxlY3QgWlNURF9ERUNPTVBSRVNTXG5mcy9idHJmcy9LY29uZmlnOjE1Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9idHJmcy9LY29uZmlnLTE2LVx0c2VsZWN0IFJBSUQ2X1BRXG4tLVxuZnMvZXJvZnMvS2NvbmZpZz0zPWNvbmZpZyBFUk9GU19GU1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctOC1cdHNlbGVjdCBDUllQVE9fREVGTEFURSBpZiBFUk9GU19GU19aSVBfQUNDRUxcbmZzL2Vyb2ZzL0tjb25maWc6OTpcdHNlbGVjdCBGU19JT01BUFxuZnMvZXJvZnMvS2NvbmZpZy0xMC1cdHNlbGVjdCBMWjRfREVDT01QUkVTUyBpZiBFUk9GU19GU19aSVBcbi0tXG5mcy9leGZhdC9LY29uZmlnPTM9Y29uZmlnIEVYRkFUX0ZTXG4tLVxuZnMvZXhmYXQvS2NvbmZpZy02LVx0c2VsZWN0IE5MU1xuZnMvZXhmYXQvS2NvbmZpZzo3Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9leGZhdC9LY29uZmlnLTgtXHRoZWxwXG4tLVxuZnMvZXh0Mi9LY29uZmlnPTI9Y29uZmlnIEVYVDJfRlNcbi0tXG5mcy9leHQyL0tjb25maWctNC1cdHNlbGVjdCBCVUZGRVJfSEVBRFxuZnMvZXh0Mi9LY29uZmlnOjU6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2V4dDIvS2NvbmZpZy02LVx0aGVscFxuLS1cbmZzL2V4dDQvS2NvbmZpZz0yPWNvbmZpZyBFWFQ0X0ZTXG4tLVxuZnMvZXh0NC9LY29uZmlnLTctXHRzZWxlY3QgQ1JDMzJcbmZzL2V4dDQvS2NvbmZpZzo4Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9leHQ0L0tjb25maWctOS1cdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxuLS1cbmZzL2YyZnMvS2NvbmZpZz0yPWNvbmZpZyBGMkZTX0ZTXG4tLVxuZnMvZjJmcy9LY29uZmlnLTktXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbmZzL2YyZnMvS2NvbmZpZzoxMDpcdHNlbGVjdCBGU19JT01BUFxuZnMvZjJmcy9LY29uZmlnLTExLVx0c2VsZWN0IExaNF9DT01QUkVTUyBpZiBGMkZTX0ZTX0xaNFxuLS1cbmZzL2Z1c2UvS2NvbmZpZz0yPWNvbmZpZyBGVVNFX0ZTXG4tLVxuZnMvZnVzZS9LY29uZmlnLTQtXHRzZWxlY3QgRlNfUE9TSVhfQUNMXG5mcy9mdXNlL0tjb25maWc6NTpcdHNlbGVjdCBGU19JT01BUFxuZnMvZnVzZS9LY29uZmlnLTYtXHRoZWxwXG4tLVxuZnMvZ2ZzMi9LY29uZmlnPTI9Y29uZmlnIEdGUzJfRlNcbi0tXG5mcy9nZnMyL0tjb25maWctNy1cdHNlbGVjdCBRVU9UQUNUTFxuZnMvZ2ZzMi9LY29uZmlnOjg6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2dmczIvS2NvbmZpZy05LVx0aGVscFxuLS1cbmZzL2hwZnMvS2NvbmZpZz0yPWNvbmZpZyBIUEZTX0ZTXG4tLVxuZnMvaHBmcy9LY29uZmlnLTUtXHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL2hwZnMvS2NvbmZpZzo2Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9ocGZzL0tjb25maWctNy1cdGhlbHBcbi0tXG5mcy9uaWxmczIvS2NvbmZpZz0yPWNvbmZpZyBOSUxGUzJfRlNcbi0tXG5mcy9uaWxmczIvS2NvbmZpZy01LVx0c2VsZWN0IENSQzMyXG5mcy9uaWxmczIvS2NvbmZpZzo2Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9uaWxmczIvS2NvbmZpZy03LVx0aGVscFxuLS1cbmZzL250ZnMvS2NvbmZpZz0yPWNvbmZpZyBOVEZTX0ZTXG4tLVxuZnMvbnRmcy9LY29uZmlnLTQtXHRzZWxlY3QgTkxTXG5mcy9udGZzL0tjb25maWc6NTpcdHNlbGVjdCBGU19JT01BUFxuZnMvbnRmcy9LY29uZmlnLTYtXHRoZWxwXG4tLVxuZnMveGZzL0tjb25maWc9Mj1jb25maWcgWEZTX0ZTXG4tLVxuZnMveGZzL0tjb25maWctNi1cdHNlbGVjdCBDUkMzMlxuZnMveGZzL0tjb25maWc6NzpcdHNlbGVjdCBGU19JT01BUFxuZnMveGZzL0tjb25maWctOC1cdGhlbHBcbi0tXG5mcy96b25lZnMvS2NvbmZpZz0xPWNvbmZpZyBaT05FRlNfRlNcbi0tXG5mcy96b25lZnMvS2NvbmZpZy00LVx0ZGVwZW5kcyBvbiBCTEtfREVWX1pPTkVEXG5mcy96b25lZnMvS2NvbmZpZzo1Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy96b25lZnMvS2NvbmZpZy02LVx0c2VsZWN0IENSQzMyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0OTkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBGU19JT01BUGAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IHRoZSBgRlNfSU9NQVBgIG9wdGlvbiBpcyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIHdoZW4geW91IGVuYWJsZSBhIGxvdCBvZiBkaWZmZXJlbnQgZmlsZXN5c3RlbXMuIEkgZG9uJiMzOTt0IG5lZWQgdG8gd29ycnkgYWJvdXQgZXhwbGljaXRseSBzZXR0aW5nIGBGU19JT01BUGAgaXRzZWxmIGlmIEkmIzM5O20gZW5hYmxpbmcgc29tZXRoaW5nIGxpa2UgYEVYVDRfRlNgLCBgWEZTX0ZTYCwgb3IgYEJUUkZTX0ZTYCwgYmVjYXVzZSB0aGUgZGVwZW5kZW5jaWVzIHNob3VsZCB0YWtlIGNhcmUgb2YgdGhhdCBmb3IgbWUuIEkgY2FuIGp1c3QgY29uZmlndXJlIHRoZSBoaWdoZXItbGV2ZWwgZmlsZXN5c3RlbSBvcHRpb25zIGRpcmVjdGx5LiBBY3R1YWxseSwgc2luY2UgYEZTX0lPTUFQYCBpcyBoaWRkZW4sIEkgY291bGRuJiMzOTt0IGV2ZW4gZW5hYmxlIGl0IGRpcmVjdGx5LCB3aGljaCBtYWtlcyB0aGlzIGV2ZW4gc2ltcGxlciAtIEkmIzM5O2xsIGZvY3VzIG9uIGVuYWJsaW5nIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGBCVFJGU19GU2AsIG9yIGBGMkZTX0ZTYCBkaXJlY3RseS4KCk5vdywgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBpb21hcF9kaW9faG9sZV9pdGVyYCBhbmQgYGlvbWFwX2Rpb19hbGlnbm1lbnRgLiBIbW0sIGBpb21hcF9kaW9faG9sZV9pdGVyYCBzZWVtcyBsaWtlIGEga2V5IHN5bWJvbCBoZXJlLCBhc3N1bWluZyBpdCYjMzk7cyBub3QgaW5saW5lZC4gSXQmIzM5O3MgbWFya2VkIGFzIGBzdGF0aWNgLCBzbyBpdCBtaWdodCBiZSBpbmxpbmVkLiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2sgaWYgdGhhdCBpcyBhY3R1YWxseSB0aGUgY2FzZS4gT2theSwgaXQmIzM5O3MgZGVmaW5pdGVseSBgc3RhdGljYC4KClRoZSBjb3JlIGZ1bmN0aW9uIGlzIGBfX2lvbWFwX2Rpb19yd2AsIHdoaWNoIGhhbmRsZXMgZGlyZWN0IEkvTyBvcGVyYXRpb25zIHVzaW5nIGlvbWFwLiBJdCYjMzk7cyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCwgc28gSSYjMzk7bGwgdmVyaWZ5IGlmIGl0JiMzOTtzIGV4cG9ydGVkIG9yIG5vdCBzdGF0aWMuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19pb21hcF9kaW9fcncmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYz00MTg9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01MTMtXHRcdCAqIFdyaXRlcyB0aGF0IGV4dGVuZCBpX3NpemUgYXJlIGFsc28gbm90IHN1cHBvcnRlZCwgYnV0IHRoaXMgaXNcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjUxNDpcdFx0ICogaGFuZGxlZCBpbiBfX2lvbWFwX2Rpb19ydygpLlxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTE1LVx0XHQgKi9cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02NDg9c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY4OC0gKiBXaGVuIHBhZ2UgZmF1bHRzIGFyZSBkaXNhYmxlZCBhbmQgQGRpb19mbGFncyBpbmNsdWRlcyBJT01BUF9ESU9fUEFSVElBTCxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY4OTogKiBfX2lvbWFwX2Rpb19ydyBjYW4gcmV0dXJuIGEgcGFydGlhbCByZXN1bHQgaWYgaXQgZW5jb3VudGVycyBhIG5vbi1yZXNpZGVudFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjkwLSAqIHBhZ2UgaW4gQGl0ZXIgYWZ0ZXIgcHJlcGFyaW5nIGEgdHJhbnNmZXIuICBJbiB0aGF0IGNhc2UsIHRoZSBub24tcmVzaWRlbnRcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02OTk9c3RydWN0IGlvbWFwX2RpbyAqXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo3MDA6X19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5mcy9pb21hcC9kaXJlY3QtaW8uYy03MDEtXHRcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTEwLX1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkxMTpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19ydyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTItXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTE0PWlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTktXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MjA6XHRkaW8gPSBfX2lvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLCBvcHMsIGRvcHMsIGRpb19mbGFncywgcHJpdmF0ZSxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyMS1cdFx0XHQgICAgIGRvbmVfYmVmb3JlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjczNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIEkvTyBNYXBwaW5nIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJIHNlZSBgX19pb21hcF9kaW9fcndgIGlzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCB1c3VhbGx5IGZ1bmN0aW9ucyB3aXRoIGEgZG91YmxlIHVuZGVyc2NvcmUgYXJlIGZvciBpbnRlcm5hbCB1c2UsIGJ1dCB0aGlzIG9uZSBpcyBhcHBhcmVudGx5IG1hZGUgYXZhaWxhYmxlLiBUaGVuLCBvbiB0b3Agb2YgdGhhdCwgdGhlcmUmIzM5O3MgYGlvbWFwX2Rpb19yd2AsIHdoaWNoIGlzIGFsc28gZXhwb3J0ZWQuIEkgd29uZGVyIHdoYXQgdGhlIHJlbGF0aW9uc2hpcCBpcz8gR2l2ZW4gdGhhdCBJIHNlZSBib3RoLCBteSBpbnN0aW5jdCBpcyB0byBkaWcgaW50byBgaW9tYXBfZGlvX3J3YCBmaXJzdCwgYXMgdGhhdCBtaWdodCBiZSB0aGUgaGlnaGVyLWxldmVsIGludGVyZmFjZS4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZ2xlYW4uIEl0JiMzOTtsbCBwcm9iYWJseSBjYWxsIHRoZSBvdGhlciBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF9kaW9fcncmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYz00MTg9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01MTMtXHRcdCAqIFdyaXRlcyB0aGF0IGV4dGVuZCBpX3NpemUgYXJlIGFsc28gbm90IHN1cHBvcnRlZCwgYnV0IHRoaXMgaXNcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjUxNDpcdFx0ICogaGFuZGxlZCBpbiBfX2lvbWFwX2Rpb19ydygpLlxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTE1LVx0XHQgKi9cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02NDg9c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY3OS0vKlxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjgwOiAqIGlvbWFwX2Rpb19ydygpIGFsd2F5cyBjb21wbGV0ZXMgT19bRF1TWU5DIHdyaXRlcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIElPXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02ODEtICogaXMgYmVpbmcgaXNzdWVkIGFzIEFJTyBvciBub3QuICBUaGlzIGFsbG93cyB1cyB0byBvcHRpbWlzZSBwdXJlIGRhdGEgd3JpdGVzXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjg4LSAqIFdoZW4gcGFnZSBmYXVsdHMgYXJlIGRpc2FibGVkIGFuZCBAZGlvX2ZsYWdzIGluY2x1ZGVzIElPTUFQX0RJT19QQVJUSUFMLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6Njg5OiAqIF9faW9tYXBfZGlvX3J3IGNhbiByZXR1cm4gYSBwYXJ0aWFsIHJlc3VsdCBpZiBpdCBlbmNvdW50ZXJzIGEgbm9uLXJlc2lkZW50XG5mcy9pb21hcC9kaXJlY3QtaW8uYy02OTAtICogcGFnZSBpbiBAaXRlciBhZnRlciBwcmVwYXJpbmcgYSB0cmFuc2Zlci4gIEluIHRoYXQgY2FzZSwgdGhlIG5vbi1yZXNpZGVudFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY5OT1zdHJ1Y3QgaW9tYXBfZGlvICpcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjcwMDpfX2lvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTcwMS1cdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLCBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyAqZG9wcyxcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy03MTctXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo3MTg6XHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgZGlvX2ZsYWdzLCBkb25lX2JlZm9yZSk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy03MTktXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODg4LVx0XHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb24pIHtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjg4OTpcdFx0XHR0cmFjZV9pb21hcF9kaW9fcndfcXVldWVkKGlub2RlLCBpb21pLnBvcywgaW9taS5sZW4pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODkwLVx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU9DQlFVRVVFRCk7XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTEwLX1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkxMTpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19ydyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTItXG5mcy9pb21hcC9kaXJlY3QtaW8uYz05MTM9c3NpemVfdFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTE0OmlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxNS1cdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLCBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyAqZG9wcyxcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTktXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MjA6XHRkaW8gPSBfX2lvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLCBvcHMsIGRvcHMsIGRpb19mbGFncywgcHJpdmF0ZSxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyMS1cdFx0XHQgICAgIGRvbmVfYmVmb3JlKTtcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MjUtfVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTI2OkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2Rpb19ydyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MjctXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTAwMj1zc2l6ZV90IF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMzAtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDMxOlx0dHJhY2VfaW9tYXBfZGlvX3J3X2JlZ2luKGlvY2IsIGl0ZXIsIDAsIDApO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAzMi1cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDc2LVx0c3VibWl0X2JpbyhiaW8pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA3NzpcdHRyYWNlX2lvbWFwX2Rpb19yd19xdWV1ZWQoaW9taS1cdTAwM2Vpbm9kZSwgaW9jYi1cdTAwM2VraV9wb3MsIGlvbWktXHUwMDNlbGVuKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwNzgtXHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjI0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEaXJlY3QgSU8gSG9sZSBJdGVyYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgaW9tYXBfZGlvX2hvbGVfaXRlcmAsIHdoaWNoLCBpZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5LCBoYW5kbGVzIGhvbGVzIGR1cmluZyBkaXJlY3QgSS9PLiBJdCYjMzk7cyBhbHNvIG1ha2luZyBjaGFuZ2VzIHRvIGBpb21hcF9kaW9fYWxpZ25tZW50YC4gTm93LCB0aGUgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBmb2N1cyBvbiBgX19pb21hcF9kaW9fcndgIGFuZCBgaW9tYXBfZGlvX3J3YCBhcyB0aGUga2V5IHN5bWJvbHMgc2luY2UgdGhleSByZXByZXNlbnQgdGhlIGhvdCBwYXRocyBmb3IgZGlyZWN0IEkvTy4gSG93ZXZlciwgSSB3YW50IHRvIGJlIGNlcnRhaW4gdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgKnNwZWNpZmljKiBub24taW5saW5lZCBmdW5jdGlvbnMgdG8gdGFyZ2V0LgoKSG9sZCBvbiBhIHNlY29uZCwgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIGlzIG1hcmtlZCBhcyBzdGF0aWMuIFRoYXQgc3VnZ2VzdHMgaW5saW5pbmcsIHdoaWNoIG1ha2VzIGl0IGEgcG9vciBjYW5kaWRhdGUgdG8gYmUgdGhlIGNlbnRyYWwgc3ltYm9sLiBMZXQmIzM5O3MgY29uZmlybSB3aGV0aGVyIGl04oCZcyBpbmxpbmVkIG9yIG5vdC4gSXQgbG9va3MgbGlrZSBpdCBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gYGlvbWFwX2Rpb19pdGVyYCwgd2hpY2ggaXMgYSBzd2l0Y2ggc3RhdGVtZW50LiBBaGEhIGBpb21hcF9kaW9faXRlcmAgaXMgY2FsbGVkIGZyb20gYF9faW9tYXBfZGlvX3J3YC4gU28sIGFzIGBpb21hcF9kaW9faG9sZV9pdGVyYCBpcyBzdGF0aWMsIG15IGluaXRpYWwgdGhvdWdodCBvZiBmb2N1c2luZyBvbiBgX19pb21hcF9kaW9fcndgIGFuZCBgaW9tYXBfZGlvX3J3YCBpcyBjb3JyZWN0LCBzaW5jZSB0aGVzZSBhcmUgdGhlIGVudHJ5IHBvaW50cywgZXZlbiB0aG91Z2ggdGhleSBhcmUgaG90LXBhdGggZGlyZWN0IElPIGZ1bmN0aW9ucy4KCkhvd2V2ZXIsIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGlvbWFwX2Rpb19hbGlnbm1lbnRgIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcml0aWNhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfZGlvX2FsaWdubWVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2RpcmVjdC1pby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2RpcmVjdC1pby5jPTMzNT1zdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTQwNi1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjQwNzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb21hcF9kaW9fYWxpZ25tZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9pb21hcC9kaXJlY3QtaW8uYy00MDgtXHRcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHVuc2lnbmVkIGludCBkaW9fZmxhZ3MpXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NDE4PXN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNDM1LVx0ICovXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo0MzY6XHRhbGlnbm1lbnQgPSBpb21hcF9kaW9fYWxpZ25tZW50KGlub2RlLCBpb21hcC1cdTAwM2ViZGV2LCBkaW8tXHUwMDNlZmxhZ3MpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNDM3LVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTU5OD1zdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02MDAtXHRsb2ZmX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cdTAwM2VzdWJtaXQuaXRlcik7XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2MDE6XHR1bnNpZ25lZCBpbnQgYnMgPSBpb21hcF9kaW9fYWxpZ25tZW50KGl0ZXItXHUwMDNlaW5vZGUsIGl0ZXItXHUwMDNlaW9tYXAuYmRldixcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTYwMi1cdFx0XHRcdFx0ICAgICAgZGlvLVx1MDAzZWZsYWdzKTtcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz0xMDAyPXNzaXplX3QgX19pb21hcF9kaW9fcmVhZF9zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAxNy1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMTg6XHRhbGlnbm1lbnQgPSBpb21hcF9kaW9fYWxpZ25tZW50KGlvbWktXHUwMDNlaW5vZGUsIGlvbWktXHUwMDNlaW9tYXAuYmRldiwgMCk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDE5LVx0aWYgKChpb21pLVx1MDAzZXBvcyB8IGlvbWktXHUwMDNlbGVuKSBcdTAwMjYgKGFsaWdubWVudCAtIDEpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0OTIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipJbnRlcm5hbCBDb2RlIEV4cGxvcmF0aW9uIC0gaW9tYXBfZGlvX3JlYWRfc2ltcGxlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyB0aHJvdWdoIHRoaXMgY29kZSwgYW5kIEkgc2VlIGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWAuIE15IGZpcnN0IGluc3RpbmN0IGlzLCAmIzM0O0lzIHRoaXMgb25lIG9mIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgd2UmIzM5O3JlIHVzaW5nPyYjMzQ7IEkgaGF2ZSB0byBxdWlja2x5IHJlbWluZCBteXNlbGYgdG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuIEJ1dCBpcyBpdD8gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIHJlYWwgcXVpY2sgdG8gbWFrZSBzdXJlLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGxvb2sgdGhyb3VnaCB0aGUgZXhwb3J0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19pb21hcF9kaW9fcmVhZF9zaW1wbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYz05ODQ9c3RhdGljIHZvaWQgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW8oc3RydWN0IGJpbyAqYmlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMDEtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDAyOnNzaXplX3QgX19pb21hcF9kaW9fcmVhZF9zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDAzLVx0XHRzdHJ1Y3QgaW9tYXBfaXRlciAqaW9taSlcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDg3LX1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwODg6RVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcmVhZF9zaW1wbGUpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA4OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg5MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgc28gYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCBpcyBkZWZpbml0ZWx5IGV4cG9ydGVkLCB0aGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTG9va2luZyBhdCB0aGUgY2FsbCBncmFwaCwgaXQgc2VlbXMgbGlrZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgYF9faW9tYXBfZGlvX3J3YCwgYGlvbWFwX2Rpb19yd2AsIGFuZCBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgLiBJIGluaXRpYWxseSBjb25zaWRlcmVkIGBpb21hcF9kaW9faG9sZV9pdGVyYCwgYnV0IHNpbmNlIHRoYXQmIzM5O3Mgc3RhdGljLCBpdCYjMzk7cyBub3QgaWRlYWwgZm9yIG91ciBwdXJwb3Nlcy4gSG1tLCBidXQgaGFuZyBvbi4uLiBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgKmlzKiBjYWxsZWQgYnkgYGlvbWFwX2Rpb19pdGVyYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgX19pb21hcF9kaW9fcndgLiBOb3csIGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWAgaXRzZWxmIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGNhbGwgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgLCBidXQgaXQgKmRvZXMqIGNhbGwgYGlvbWFwX2Rpb19hbGlnbm1lbnRgLiBBbmQgdGhlIHBhdGNoIG1vZGlmaWVzIGJvdGggYGlvbWFwX2Rpb19hbGlnbm1lbnRgIGFuZCBgaW9tYXBfZGlvX2hvbGVfaXRlcmAuIFNvIGFsbCB0aHJlZSDigJMgYF9faW9tYXBfZGlvX3J3YCwgYGlvbWFwX2Rpb19yd2AsIGFuZCBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgIOKAkyBhcmUgZGVmaW5pdGVseSByZWxldmFudCBmb2N1cyBzeW1ib2xzLiBXYWl0IGEgbWludXRlLi4uIGBpb21hcF9kaW9fcndgIGlzIGp1c3QgYSB3cmFwcGVyIGFyb3VuZCBgX19pb21hcF9kaW9fcndgLiBUaGVyZWZvcmUsIGBfX2lvbWFwX2Rpb19yd2AgaXMgdGhlIG1vcmUgY2VudHJhbCBzeW1ib2wgdG8gZm9jdXMgb24uIEFscmlnaHQsIGxldCYjMzk7cyBqdXN0IGRvIGEgcXVpY2sgc2NhbiB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgaW1wb3J0YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTA1PXNzaXplX3QgaW9tYXBfZGlvX2NvbXBsZXRlKHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xNjAtfVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTYxOkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2Rpb19jb21wbGV0ZSk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xNjItXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MjcyPXZvaWQgaW9tYXBfZGlvX2Jpb19lbmRfaW8oc3RydWN0IGJpbyAqYmlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTI3OS19XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoyODA6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX2Jpb19lbmRfaW8pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMjgxLVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTcwMD1fX2lvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTAtfVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTExOkVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3J3KTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxMi1cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz05MTQ9aW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyNS19XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MjY6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX3J3KTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyNy1cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz0xMDAyPXNzaXplX3QgX19pb21hcF9kaW9fcmVhZF9zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA4Ny19XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDg4OkVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwODktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTI1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEaXJlY3QgSS9PIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBEaXJlY3QgSS9PIGVudHJ5IHBvaW50cy4gSXQgbG9va3MgbGlrZSBgX19pb21hcF9kaW9fcndgLCBgaW9tYXBfZGlvX3J3YCwgYW5kIGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWAgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0byBiZSBjb25zaWRlcmVkIGhlcmUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBjZW50ZXIgbXkgaW52ZXN0aWdhdGlvbiBvbiBgX19pb21hcF9kaW9fcndgIGFuZCBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgLiBIb3dldmVyLCB3YWl0IGEgbWludXRlLCBgaW9tYXBfZGlvX3J3YCBpcyBhbHNvIGFuIGVudHJ5IHBvaW50IGFuZCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgZmlsZXN5c3RlbXMgbWlnaHQgZGlyZWN0bHkgY2FsbCBpdC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIGNhbGxlcnMgb2YgYGlvbWFwX2Rpb19yd2AgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfZGlvX3J3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2J0cmZzL2RpcmVjdC1pby5jPTM2ND1zdGF0aWMgaW50IGJ0cmZzX2Rpb19pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc3RhcnQsXG4tLVxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtNDA0LVx0LypcbmZzL2J0cmZzL2RpcmVjdC1pby5jOjQwNTpcdCAqIGlvbWFwX2Rpb19ydygpIG9ubHkgZG9lcyBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKCksIHdoaWNoIGlzbiYjMzk7dFxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtNDA2LVx0ICogZW5vdWdoIGlmIHdlJiMzOTt2ZSB3cml0dGVuIGNvbXByZXNzZWQgcGFnZXMgdG8gdGhpcyBhcmVhLCBzbyB3ZSBuZWVkIHRvXG4tLVxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtNDE2LVx0ICogZGlydHkgb3IgdW5kZXIgd3JpdGViYWNrIChzYW1lIGFzIGZvciB0aGUgbm9uLWNvbXByZXNzaW9uIGNhc2UpLlxuZnMvYnRyZnMvZGlyZWN0LWlvLmM6NDE3Olx0ICogaW9tYXBfZGlvX3J3KCkgZGlkIHRoZSBzYW1lIGNoZWNrLCBidXQgYWZ0ZXIgdGhhdCBhbmQgYmVmb3JlIHdlIGdvdFxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtNDE4LVx0ICogaGVyZSwgbW1hcCYjMzk7ZWQgd3JpdGVzIG1heSBoYXZlIGhhcHBlbmVkIG9yIGJ1ZmZlcmVkIHJlYWRzIHN0YXJ0ZWRcbi0tXG5mcy9idHJmcy9kaXJlY3QtaW8uYy01MTUtXHQgKiBXaGVuIGRvaW5nIGEgcmVhZCwgYmVjYXVzZSB3ZSB1c2UgSU9NQVBfRElPX1BBUlRJQUwgd2hlbiBjYWxsaW5nXG5mcy9idHJmcy9kaXJlY3QtaW8uYzo1MTY6XHQgKiBpb21hcF9kaW9fcncoKSwgd2UgY2FuIGVuZCB1cCByZXR1cm5pbmcgbGVzcyBkYXRhIHRoZW4gd2hhdCB0aGUgY2FsbGVyXG5mcy9idHJmcy9kaXJlY3QtaW8uYy01MTctXHQgKiBhc2tlZCBmb3IsIHJlc3VsdGluZyBpbiBhbiB1bmV4cGVjdGVkLCBhbmQgaW5jb3JyZWN0LCBzaG9ydCByZWFkLlxuLS1cbmZzL2J0cmZzL2RpcmVjdC1pby5jLTUyMC1cdCAqIHBhZ2UgZmF1bHQgZXJyb3Igd2hlbiB0cnlpbmcgdG8gZmF1bHQgaW4gcGFnZXMgZm9yIHRoZSBidWZmZXIgdGhhdCBpc1xuZnMvYnRyZnMvZGlyZWN0LWlvLmM6NTIxOlx0ICogYXNzb2NpYXRlZCB0byB0aGUgc3RydWN0IGlvdl9pdGVyIHBhc3NlZCB0byBpb21hcF9kaW9fcncoKSwgYW5kIHdlXG5mcy9idHJmcy9kaXJlY3QtaW8uYy01MjItXHQgKiBoYXZlIHByZXZpb3VzbHkgc3VibWl0dGVkIGJpb3MgZm9yIG90aGVyIGV4dGVudHMgaW4gdGhlIHJhbmdlLCBpblxuZnMvYnRyZnMvZGlyZWN0LWlvLmM6NTIzOlx0ICogd2hpY2ggY2FzZSBpb21hcF9kaW9fcncoKSBtYXkgcmV0dXJuIHVzIEVJT0NCUVVFVUVEIGlmIG5vdCBhbGwgb2ZcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTUyNC1cdCAqIHRob3NlIGJpb3MgaGF2ZSBjb21wbGV0ZWQgYnkgdGhlIHRpbWUgd2UgZ2V0IHRoZSBwYWdlIGZhdWx0IGVycm9yLFxuLS1cbmZzL2J0cmZzL2RpcmVjdC1pby5jPTgxMz1zdGF0aWMgc3NpemVfdCBidHJmc19kaW9fcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9idHJmcy9kaXJlY3QtaW8uYy04MTctXG5mcy9idHJmcy9kaXJlY3QtaW8uYzo4MTg6XHRyZXR1cm4gaW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIFx1MDAyNmJ0cmZzX2Rpb19pb21hcF9vcHMsIFx1MDAyNmJ0cmZzX2Rpb19vcHMsXG5mcy9idHJmcy9kaXJlY3QtaW8uYy04MTktXHRcdFx0ICAgIElPTUFQX0RJT19QQVJUSUFMIHwgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRCwgXHUwMDI2ZGF0YSwgZG9uZV9iZWZvcmUpO1xuLS1cbmZzL2J0cmZzL2RpcmVjdC1pby5jPTgyMj1zdGF0aWMgc3RydWN0IGlvbWFwX2RpbyAqYnRyZnNfZGlvX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2J0cmZzL2RpcmVjdC1pby5jLTgyNi1cbmZzL2J0cmZzL2RpcmVjdC1pby5jOjgyNzpcdHJldHVybiBfX2lvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLCBcdTAwMjZidHJmc19kaW9faW9tYXBfb3BzLCBcdTAwMjZidHJmc19kaW9fb3BzLFxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtODI4LVx0XHRcdCAgICBJT01BUF9ESU9fUEFSVElBTCB8IElPTUFQX0RJT19GU0JMT0NLX0FMSUdORUQsIFx1MDAyNmRhdGEsIGRvbmVfYmVmb3JlKTtcbi0tXG5mcy9lcm9mcy9kYXRhLmM9NDQ3PXN0YXRpYyBzc2l6ZV90IGVyb2ZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5mcy9lcm9mcy9kYXRhLmMtNDYyLVxuZnMvZXJvZnMvZGF0YS5jOjQ2MzpcdFx0cmV0dXJuIGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXHUwMDI2ZXJvZnNfaW9tYXBfb3BzLFxuZnMvZXJvZnMvZGF0YS5jLTQ2NC1cdFx0XHRcdCAgICBOVUxMLCAwLCBcdTAwMjZpdGVyX2N0eCwgMCk7XG4tLVxuZnMvZXhmYXQvZmlsZS5jPTcwOD1zdGF0aWMgc3NpemVfdCBleGZhdF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9leGZhdC9maWxlLmMtNzExLVxuZnMvZXhmYXQvZmlsZS5jOjcxMjpcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcdTAwMjZleGZhdF93cml0ZV9pb21hcF9vcHMsXG5mcy9leGZhdC9maWxlLmMtNzEzLVx0XHRcdFx1MDAyNmV4ZmF0X3dyaXRlX2Rpb19vcHMsIDAsIE5VTEwsIDApO1xuLS1cbmZzL2V4ZmF0L2ZpbGUuYz04MDA9c3RhdGljIHNzaXplX3QgZXhmYXRfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4tLVxuZnMvZXhmYXQvZmlsZS5jLTgxMS1cdFx0ZmlsZV9hY2Nlc3NlZChpb2NiLVx1MDAzZWtpX2ZpbHApO1xuZnMvZXhmYXQvZmlsZS5jOjgxMjpcdFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIFx1MDAyNmV4ZmF0X2lvbWFwX29wcywgTlVMTCwgMCxcbmZzL2V4ZmF0L2ZpbGUuYy04MTMtXHRcdFx0XHROVUxMLCAwKTtcbi0tXG5mcy9leHQyL2ZpbGUuYz01MD1zdGF0aWMgc3NpemVfdCBleHQyX2Rpb19yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLS1cbmZzL2V4dDIvZmlsZS5jLTU3LVx0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xuZnMvZXh0Mi9maWxlLmM6NTg6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFx1MDAyNmV4dDJfaW9tYXBfb3BzLCBOVUxMLCAwLCBOVUxMLCAwKTtcbmZzL2V4dDIvZmlsZS5jLTU5LVx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XG4tLVxuZnMvZXh0Mi9maWxlLmM9NjU9c3RhdGljIGludCBleHQyX2Rpb193cml0ZV9lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXG4tLVxuZnMvZXh0Mi9maWxlLmMtNzUtXHQgKiBJZiB3ZSBhcmUgZXh0ZW5kaW5nIHRoZSBmaWxlLCB3ZSBoYXZlIHRvIHVwZGF0ZSBpX3NpemUgaGVyZSBiZWZvcmVcbmZzL2V4dDIvZmlsZS5jOjc2Olx0ICogcGFnZSBjYWNoZSBnZXRzIGludmFsaWRhdGVkIGluIGlvbWFwX2Rpb19ydygpLiBUaGlzIHByZXZlbnRzIHJhY2luZ1xuZnMvZXh0Mi9maWxlLmMtNzctXHQgKiBidWZmZXJlZCByZWFkcyBmcm9tIHplcm9pbmcgb3V0IHRvbyBtdWNoIGZyb20gcGFnZSBjYWNoZSBwYWdlcy5cbi0tXG5mcy9leHQyL2ZpbGUuYz05Nj1zdGF0aWMgc3NpemVfdCBleHQyX2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL2V4dDIvZmlsZS5jLTEyMS1cbmZzL2V4dDIvZmlsZS5jOjEyMjpcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcdTAwMjZleHQyX2lvbWFwX29wcywgXHUwMDI2ZXh0Ml9kaW9fd3JpdGVfb3BzLFxuZnMvZXh0Mi9maWxlLmMtMTIzLVx0XHRcdCAgIGZsYWdzLCBOVUxMLCAwKTtcbi0tXG5mcy9leHQ0L2ZpbGUuYy00Ni0gKiBhbnkgc3BlY2lhbCBmZWF0dXJlcyBsaWtlIGVuY3J5cHRpb24gb3IgdmVyaXR5LCBleHQ0IGhhcyB0cmFkaXRpb25hbGx5XG5mcy9leHQ0L2ZpbGUuYzo0NzogKiByZXR1cm5lZCBFSU5WQUwgZm9yIG1pc2FsaWduZWQgRElPLiAgaW9tYXBfZGlvX3J3KCkgdXNlcyB0aGlzIGNvbnZlbnRpb24gdG9vLlxuZnMvZXh0NC9maWxlLmMtNDgtICogSW4gdGhpcyBjYXNlLCB3ZSBzaG91bGQgYXR0ZW1wdCB0aGUgRElPLCAqbm90KiBmYWxsIGJhY2sgdG8gYnVmZmVyZWQgSS9PLlxuLS1cbmZzL2V4dDQvZmlsZS5jPTY5PXN0YXRpYyBzc2l6ZV90IGV4dDRfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4tLVxuZnMvZXh0NC9maWxlLmMtOTUtXHRpZiAocmV0ID09IC1FTk9UQkxLKVxuZnMvZXh0NC9maWxlLmM6OTY6XHRcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXHUwMDI2ZXh0NF9pb21hcF9vcHMsIE5VTEwsIDAsIE5VTEwsIDApO1xuZnMvZXh0NC9maWxlLmMtOTctXHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcbi0tXG5mcy9leHQ0L2ZpbGUuYz01MjE9c3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9leHQ0L2ZpbGUuYy01OTMtXG5mcy9leHQ0L2ZpbGUuYzo1OTQ6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXHUwMDI2ZXh0NF9pb21hcF9vcHMsIFx1MDAyNmV4dDRfZGlvX3dyaXRlX29wcyxcbmZzL2V4dDQvZmlsZS5jLTU5NS1cdFx0XHQgICBkaW9fZmxhZ3MsIE5VTEwsIDApO1xuLS1cbmZzL2YyZnMvZmlsZS5jPTQ4NDk9c3RhdGljIHNzaXplX3QgZjJmc19kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5mcy9mMmZzL2ZpbGUuYy00ODgxLVx0LypcbmZzL2YyZnMvZmlsZS5jOjQ4ODI6XHQgKiBXZSBoYXZlIHRvIHVzZSBfX2lvbWFwX2Rpb19ydygpIGFuZCBpb21hcF9kaW9fY29tcGxldGUoKSBpbnN0ZWFkIG9mXG5mcy9mMmZzL2ZpbGUuYzo0ODgzOlx0ICogdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbiBpb21hcF9kaW9fcncoKSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCB0aGVcbmZzL2YyZnMvZmlsZS5jLTQ4ODQtXHQgKiBGMkZTX0RJT19SRUFEIGNvdW50ZXIgd2lsbCBiZSBkZWNyZW1lbnRlZCBjb3JyZWN0bHkgaW4gYWxsIGNhc2VzLlxuLS1cbmZzL2YyZnMvZmlsZS5jLTQ4ODYtXHRpbmNfcGFnZV9jb3VudChzYmksIEYyRlNfRElPX1JFQUQpO1xuZnMvZjJmcy9maWxlLmM6NDg4NzpcdGRpbyA9IF9faW9tYXBfZGlvX3J3KGlvY2IsIHRvLCBcdTAwMjZmMmZzX2lvbWFwX29wcyxcbmZzL2YyZnMvZmlsZS5jLTQ4ODgtXHRcdFx0ICAgICBcdTAwMjZmMmZzX2lvbWFwX2Rpb19yZWFkX29wcywgMCwgTlVMTCwgMCk7XG4tLVxuZnMvZjJmcy9maWxlLmM9NTE2Nj1zdGF0aWMgc3NpemVfdCBmMmZzX2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbmZzL2YyZnMvZmlsZS5jLTUyMTQtXHQvKlxuZnMvZjJmcy9maWxlLmM6NTIxNTpcdCAqIFdlIGhhdmUgdG8gdXNlIF9faW9tYXBfZGlvX3J3KCkgYW5kIGlvbWFwX2Rpb19jb21wbGV0ZSgpIGluc3RlYWQgb2ZcbmZzL2YyZnMvZmlsZS5jOjUyMTY6XHQgKiB0aGUgaGlnaGVyLWxldmVsIGZ1bmN0aW9uIGlvbWFwX2Rpb19ydygpIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHRoZVxuZnMvZjJmcy9maWxlLmMtNTIxNy1cdCAqIEYyRlNfRElPX1dSSVRFIGNvdW50ZXIgd2lsbCBiZSBkZWNyZW1lbnRlZCBjb3JyZWN0bHkgaW4gYWxsIGNhc2VzLlxuLS1cbmZzL2YyZnMvZmlsZS5jLTUyMjItXHRcdGRpb19mbGFncyB8PSBJT01BUF9ESU9fRk9SQ0VfV0FJVDtcbmZzL2YyZnMvZmlsZS5jOjUyMjM6XHRkaW8gPSBfX2lvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcdTAwMjZmMmZzX2lvbWFwX29wcyxcbmZzL2YyZnMvZmlsZS5jLTUyMjQtXHRcdFx0ICAgICBcdTAwMjZmMmZzX2lvbWFwX2Rpb193cml0ZV9vcHMsIGRpb19mbGFncywgaW9jYiwgMCk7XG4tLVxuZnMvZjJmcy9maWxlLmMtNTI3NC1cdH0gZWxzZSB7XG5mcy9mMmZzL2ZpbGUuYzo1Mjc1Olx0XHQvKiBpb21hcF9kaW9fcncoKSBhbHJlYWR5IGhhbmRsZWQgdGhlIGdlbmVyaWNfd3JpdGVfc3luYygpLiAqL1xuZnMvZjJmcy9maWxlLmMtNTI3Ni1cdFx0Km1heV9uZWVkX3N5bmMgPSBmYWxzZTtcbi0tXG5mcy9nZnMyL2ZpbGUuYz04MTE9c3RhdGljIHNzaXplX3QgZ2ZzMl9maWxlX2RpcmVjdF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0byxcbi0tXG5mcy9nZnMyL2ZpbGUuYy04MjUtXHQgKlxuZnMvZ2ZzMi9maWxlLmM6ODI2Olx0ICogVW5saWtlIGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsIGZvciByZWFkcywgaW9tYXBfZGlvX3J3IGNhbiB0cmlnZ2VyXG5mcy9nZnMyL2ZpbGUuYy04MjctXHQgKiBwaHlzaWNhbCBhcyB3ZWxsIGFzIG1hbnVhbCBwYWdlIGZhdWx0cywgYW5kIHdlIG5lZWQgdG8gZGlzYWJsZSBib3RoXG4tLVxuZnMvZ2ZzMi9maWxlLmMtODQ2LVx0dG8tXHUwMDNlbm9mYXVsdCA9IHRydWU7XG5mcy9nZnMyL2ZpbGUuYzo4NDc6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFx1MDAyNmdmczJfaW9tYXBfb3BzLCBOVUxMLFxuZnMvZ2ZzMi9maWxlLmMtODQ4LVx0XHRcdCAgIElPTUFQX0RJT19QQVJUSUFMLCBOVUxMLCByZWFkKTtcbi0tXG5mcy9nZnMyL2ZpbGUuYy04NTItXHRcdGdvdG8gb3V0X3VubG9jaztcbmZzL2dmczIvZmlsZS5jOjg1MzpcdC8qIE5vIGluY3JlbWVudCAoJiM0Mzs9KSBiZWNhdXNlIGlvbWFwX2Rpb19ydyByZXR1cm5zIGEgY3VtdWxhdGl2ZSB2YWx1ZS4gKi9cbmZzL2dmczIvZmlsZS5jLTg1NC1cdGlmIChyZXQgXHUwMDNlIDApXG4tLVxuZnMvZ2ZzMi9maWxlLmM9ODc0PXN0YXRpYyBzc2l6ZV90IGdmczJfZmlsZV9kaXJlY3Rfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxuZnMvZ2ZzMi9maWxlLmMtODkwLVx0ICpcbmZzL2dmczIvZmlsZS5jOjg5MTpcdCAqIEZvciB3cml0ZXMsIGlvbWFwX2Rpb19ydyBvbmx5IHRyaWdnZXJzIG1hbnVhbCBwYWdlIGZhdWx0cywgc28gd2VcbmZzL2dmczIvZmlsZS5jLTg5Mi1cdCAqIGRvbiYjMzk7dCBuZWVkIHRvIGRpc2FibGUgcGh5c2ljYWwgb25lcy5cbi0tXG5mcy9nZnMyL2ZpbGUuYy05MTItXHRmcm9tLVx1MDAzZW5vZmF1bHQgPSB0cnVlO1xuZnMvZ2ZzMi9maWxlLmM6OTEzOlx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIFx1MDAyNmdmczJfaW9tYXBfb3BzLCBOVUxMLFxuZnMvZ2ZzMi9maWxlLmMtOTE0LVx0XHRcdCAgIElPTUFQX0RJT19QQVJUSUFMLCBOVUxMLCB3cml0dGVuKTtcbi0tXG5mcy9nZnMyL2ZpbGUuYy05MjEtXHR9XG5mcy9nZnMyL2ZpbGUuYzo5MjI6XHQvKiBObyBpbmNyZW1lbnQgKCYjNDM7PSkgYmVjYXVzZSBpb21hcF9kaW9fcncgcmV0dXJucyBhIGN1bXVsYXRpdmUgdmFsdWUuICovXG5mcy9nZnMyL2ZpbGUuYy05MjMtXHRpZiAocmV0IFx1MDAzZSAwKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTQxOD1zdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTUxMy1cdFx0ICogV3JpdGVzIHRoYXQgZXh0ZW5kIGlfc2l6ZSBhcmUgYWxzbyBub3Qgc3VwcG9ydGVkLCBidXQgdGhpcyBpc1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NTE0Olx0XHQgKiBoYW5kbGVkIGluIF9faW9tYXBfZGlvX3J3KCkuXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01MTUtXHRcdCAqL1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY0OD1zdGF0aWMgaW50IGlvbWFwX2Rpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjc5LS8qXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2ODA6ICogaW9tYXBfZGlvX3J3KCkgYWx3YXlzIGNvbXBsZXRlcyBPX1tEXVNZTkMgd3JpdGVzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgSU9cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY4MS0gKiBpcyBiZWluZyBpc3N1ZWQgYXMgQUlPIG9yIG5vdC4gIFRoaXMgYWxsb3dzIHVzIHRvIG9wdGltaXNlIHB1cmUgZGF0YSB3cml0ZXNcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02ODgtICogV2hlbiBwYWdlIGZhdWx0cyBhcmUgZGlzYWJsZWQgYW5kIEBkaW9fZmxhZ3MgaW5jbHVkZXMgSU9NQVBfRElPX1BBUlRJQUwsXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2ODk6ICogX19pb21hcF9kaW9fcncgY2FuIHJldHVybiBhIHBhcnRpYWwgcmVzdWx0IGlmIGl0IGVuY291bnRlcnMgYSBub24tcmVzaWRlbnRcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY5MC0gKiBwYWdlIGluIEBpdGVyIGFmdGVyIHByZXBhcmluZyBhIHRyYW5zZmVyLiAgSW4gdGhhdCBjYXNlLCB0aGUgbm9uLXJlc2lkZW50XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9Njk5PXN0cnVjdCBpb21hcF9kaW8gKlxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NzAwOl9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNzAxLVx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTcxNy1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjcxODpcdHRyYWNlX2lvbWFwX2Rpb19yd19iZWdpbihpb2NiLCBpdGVyLCBkaW9fZmxhZ3MsIGRvbmVfYmVmb3JlKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTcxOS1cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04ODgtXHRcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbikge1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODg5Olx0XHRcdHRyYWNlX2lvbWFwX2Rpb19yd19xdWV1ZWQoaW5vZGUsIGlvbWkucG9zLCBpb21pLmxlbik7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy04OTAtXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJT0NCUVVFVUVEKTtcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTAtfVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTExOkVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3J3KTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxMi1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTkxMz1zc2l6ZV90XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MTQ6aW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTE1LVx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxOS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkyMDpcdGRpbyA9IF9faW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIG9wcywgZG9wcywgZGlvX2ZsYWdzLCBwcml2YXRlLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTIxLVx0XHRcdCAgICAgZG9uZV9iZWZvcmUpO1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyNS19XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MjY6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX3J3KTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyNy1cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz0xMDAyPXNzaXplX3QgX19pb21hcF9kaW9fcmVhZF9zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAzMC1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMzE6XHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgMCwgMCk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDMyLVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwNzYtXHRzdWJtaXRfYmlvKGJpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDc3Olx0dHJhY2VfaW9tYXBfZGlvX3J3X3F1ZXVlZChpb21pLVx1MDAzZWlub2RlLCBpb2NiLVx1MDAzZWtpX3BvcywgaW9taS1cdTAwM2VsZW4pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA3OC1cdHJldHVybiAtRUlPQ0JRVUVVRUQ7XG4tLVxuZnMvaW9tYXAvdHJhY2UuaD04NT1ERUZJTkVfUkFOR0VfRVZFTlQoaW9tYXBfZGlvX2ludmFsaWRhdGVfZmFpbCk7XG5mcy9pb21hcC90cmFjZS5oOjg2OkRFRklORV9SQU5HRV9FVkVOVChpb21hcF9kaW9fcndfcXVldWVkKTtcbmZzL2lvbWFwL3RyYWNlLmgtODctREVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX3plcm9faXRlcik7XG4tLVxuZnMvaW9tYXAvdHJhY2UuaD0yMjA9VFJBQ0VfRVZFTlQoaW9tYXBfaXRlcixcbi0tXG5mcy9pb21hcC90cmFjZS5oLTI1NS1cbmZzL2lvbWFwL3RyYWNlLmg6MjU2OlRSQUNFX0VWRU5UKGlvbWFwX2Rpb19yd19iZWdpbixcbmZzL2lvbWFwL3RyYWNlLmgtMjU3LVx0VFBfUFJPVE8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvbmlsZnMyL2ZpbGUuYz0xNDU9c3RhdGljIHNzaXplX3QgbmlsZnNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLS1cbmZzL25pbGZzMi9maWxlLmMtMTQ3LVx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKSB7XG5mcy9uaWxmczIvZmlsZS5jOjE0ODpcdFx0cmV0dXJuIGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXHUwMDI2bmlsZnNfaW9tYXBfb3BzLFxuZnMvbmlsZnMyL2ZpbGUuYy0xNDktXHRcdFx0XHQgICAgTlVMTCwgMCwgTlVMTCwgMCk7XG4tLVxuZnMvbnRmcy9maWxlLmM9NDM4PXN0YXRpYyBzc2l6ZV90IG50ZnNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLS1cbmZzL250ZnMvZmlsZS5jLTQ2MC1cdFx0ZmlsZV9hY2Nlc3NlZChpb2NiLVx1MDAzZWtpX2ZpbHApO1xuZnMvbnRmcy9maWxlLmM6NDYxOlx0XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFx1MDAyNm50ZnNfcmVhZF9pb21hcF9vcHMsIE5VTEwsIDAsXG5mcy9udGZzL2ZpbGUuYy00NjItXHRcdFx0XHROVUxMLCAwKTtcbi0tXG5mcy9udGZzL2ZpbGUuYz00OTU9c3RhdGljIHNzaXplX3QgbnRmc19kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9udGZzL2ZpbGUuYy00OTgtXG5mcy9udGZzL2ZpbGUuYzo0OTk6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXHUwMDI2bnRmc19kaW9faW9tYXBfb3BzLFxuZnMvbnRmcy9maWxlLmMtNTAwLVx0XHRcdFx1MDAyNm50ZnNfd3JpdGVfZGlvX29wcywgMCwgTlVMTCwgMCk7XG4tLVxuZnMvbnRmczMvZmlsZS5jPTgxNT1zdGF0aWMgc3NpemVfdCBudGZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuLS1cbmZzL250ZnMzL2ZpbGUuYy04NzQtXG5mcy9udGZzMy9maWxlLmM6ODc1Olx0XHRlcnIgPSBpb21hcF9kaW9fcncoaW9jYiwgaXRlciwgXHUwMDI2bnRmc19pb21hcF9vcHMsIE5VTEwsIGRpb19mbGFncyxcbmZzL250ZnMzL2ZpbGUuYy04NzYtXHRcdFx0XHQgICBOVUxMLCAwKTtcbi0tXG5mcy9udGZzMy9maWxlLmM9MTIyMD1zdGF0aWMgc3NpemVfdCBudGZzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9udGZzMy9maWxlLmMtMTMwNS1cbmZzL250ZnMzL2ZpbGUuYzoxMzA2Olx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIFx1MDAyNm50ZnNfaW9tYXBfb3BzLCBOVUxMLFxuZnMvbnRmczMvZmlsZS5jLTEzMDctXHRcdFx0ICAgSU9NQVBfRElPX0ZPUkNFX1dBSVQsIE5VTEwsIDApO1xuLS1cbmZzL250ZnMzL2lub2RlLmM9Njc2PWludCBudGZzX3NldF9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBuZXdfc2l6ZSlcbi0tXG5mcy9udGZzMy9pbm9kZS5jLTcxOC0gKiAtIGlvbWFwX3RydW5jYXRlX3BhZ2VcbmZzL250ZnMzL2lub2RlLmM6NzE5OiAqIC0gaW9tYXBfZGlvX3J3XG5mcy9udGZzMy9pbm9kZS5jLTcyMC0gKiAtIGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGVcbi0tXG5mcy94ZnMveGZzX2ZpbGUuYz0yNDk9eGZzX2ZpbGVfZGlvX3JlYWQoXG4tLVxuZnMveGZzL3hmc19maWxlLmMtMjY2LVx0aWYgKG1hcHBpbmdfc3RhYmxlX3dyaXRlcyhpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nKSkge1xuZnMveGZzL3hmc19maWxlLmM6MjY3Olx0XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFx1MDAyNnhmc19yZWFkX2lvbWFwX29wcyxcbmZzL3hmcy94ZnNfZmlsZS5jLTI2OC1cdFx0XHRcdFx1MDAyNnhmc19kaW9fcmVhZF9ib3VuY2Vfb3BzLCBJT01BUF9ESU9fQk9VTkNFLFxuLS1cbmZzL3hmcy94ZnNfZmlsZS5jLTI3Mi1cdFx0aWYgKHJldCA9PSAtRU5PVEJMSylcbmZzL3hmcy94ZnNfZmlsZS5jOjI3MzpcdFx0XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFx1MDAyNnhmc19yZWFkX2lvbWFwX29wcywgTlVMTCxcbmZzL3hmcy94ZnNfZmlsZS5jLTI3NC1cdFx0XHRcdFx0MCwgTlVMTCwgMCk7XG4tLVxuZnMveGZzL3hmc19maWxlLmM9NzQzPXhmc19maWxlX2Rpb193cml0ZV9hbGlnbmVkKFxuLS1cbmZzL3hmcy94ZnNfZmlsZS5jLTc4MS1cdHRyYWNlX3hmc19maWxlX2RpcmVjdF93cml0ZShpb2NiLCBmcm9tKTtcbmZzL3hmcy94ZnNfZmlsZS5jOjc4MjpcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBvcHMsIGRvcHMsIGRpb19mbGFncywgYWMsIDApO1xuZnMveGZzL3hmc19maWxlLmMtNzgzLW91dF91bmxvY2s6XG4tLVxuZnMveGZzL3hmc19maWxlLmM9ODIxPXhmc19maWxlX2Rpb193cml0ZV9hdG9taWMoXG4tLVxuZnMveGZzL3hmc19maWxlLmMtODU3LVx0XHRkaW9fZmxhZ3MgfD0gSU9NQVBfRElPX0JPVU5DRTtcbmZzL3hmcy94ZnNfZmlsZS5jOjg1ODpcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBkb3BzLCBcdTAwMjZ4ZnNfZGlvX3dyaXRlX29wcywgZGlvX2ZsYWdzLFxuZnMveGZzL3hmc19maWxlLmMtODU5LVx0XHRcdE5VTEwsIDApO1xuLS1cbmZzL3hmcy94ZnNfZmlsZS5jPTg5Nz14ZnNfZmlsZV9kaW9fd3JpdGVfdW5hbGlnbmVkKFxuLS1cbmZzL3hmcy94ZnNfZmlsZS5jLTk1MS1cdHRyYWNlX3hmc19maWxlX2RpcmVjdF93cml0ZShpb2NiLCBmcm9tKTtcbmZzL3hmcy94ZnNfZmlsZS5jOjk1MjpcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcdTAwMjZ4ZnNfZGlyZWN0X3dyaXRlX2lvbWFwX29wcyxcbmZzL3hmcy94ZnNfZmlsZS5jLTk1My1cdFx0XHQgICBcdTAwMjZ4ZnNfZGlvX3dyaXRlX29wcywgZmxhZ3MsIE5VTEwsIDApO1xuLS1cbmZzL3pvbmVmcy9maWxlLmM9NDc0PXN0YXRpYyBzc2l6ZV90IHpvbmVmc19maWxlX2Rpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy96b25lZnMvZmlsZS5jLTUyOC1cdC8qXG5mcy96b25lZnMvZmlsZS5jOjUyOTpcdCAqIGlvbWFwX2Rpb19ydygpIG1heSByZXR1cm4gRU5PVEJMSyBpZiB0aGVyZSB3YXMgYW4gaXNzdWUgd2l0aFxuZnMvem9uZWZzL2ZpbGUuYy01MzAtXHQgKiBwYWdlIGludmFsaWRhdGlvbi4gT3ZlcndyaXRlIHRoYXQgZXJyb3IgY29kZSB3aXRoIEVCVVNZIHNvIHRoYXRcbi0tXG5mcy96b25lZnMvZmlsZS5jLTUzMi1cdCAqL1xuZnMvem9uZWZzL2ZpbGUuYzo1MzM6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXHUwMDI2em9uZWZzX3dyaXRlX2lvbWFwX29wcyxcbmZzL3pvbmVmcy9maWxlLmMtNTM0LVx0XHRcdCAgIFx1MDAyNnpvbmVmc193cml0ZV9kaW9fb3BzLCAwLCBOVUxMLCAwKTtcbi0tXG5mcy96b25lZnMvZmlsZS5jPTYzNj1zdGF0aWMgc3NpemVfdCB6b25lZnNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLS1cbmZzL3pvbmVmcy9maWxlLmMtNjc3LVx0XHRmaWxlX2FjY2Vzc2VkKGlvY2ItXHUwMDNla2lfZmlscCk7XG5mcy96b25lZnMvZmlsZS5jOjY3ODpcdFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIHRvLCBcdTAwMjZ6b25lZnNfcmVhZF9pb21hcF9vcHMsXG5mcy96b25lZnMvZmlsZS5jLTY3OS1cdFx0XHRcdCAgIFx1MDAyNnpvbmVmc19yZWFkX2Rpb19vcHMsIDAsIE5VTEwsIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODEyMAoJCQkJCQkJb3V0cHV0OiAxNzgKCQkJCQkJCXRob3VnaHRzOiA0OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpb21hcCBEaXJlY3QgSS9PIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gdGhlIGluaXRpYWwgcmV2aWV3LCBpdCYjMzk7cyBjbGVhciB0aGUgcmVsZXZhbnQgY29kZSBjZW50ZXJzIGFyb3VuZCB0aGUgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIGZ1bmN0aW9uIGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggZGlyZWN0IEkvTy4gSSYjMzk7dmUgZ290IHRvIGZvY3VzIG9uIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJL08gcGF0aC4gYGlvbWFwX2Rpb19yd2AgaXMgYSBrZXkgZW50cnkgcG9pbnQsIHVzZWQgYnkgbnVtZXJvdXMgZmlsZXN5c3RlbXMuIGBfX2lvbWFwX2Rpb19yd2AgaXMgbW9yZSBzcGVjaWZpYywgZGlyZWN0bHkgY2FsbGVkIGJ5IGBidHJmc2AgYW5kIGBmMmZzYCwgc28gdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgc3ltYm9sIHRvIHdhdGNoLiBJJiMzOTtsbCBkcm9wIGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWAsIHNpbmNlIGl0IHNlZW1zIGxpa2UgdGhlIHBhdGNoIGZvY3VzZXMgb24gaG9sZSBoYW5kbGluZywgYW5kIG5vdCBiYXNpYyByZWFkIG9wZXJhdGlvbnMuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBUbyBwcm9wZXJseSB0ZXN0IHRoaXMsIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIGZpbGVzeXN0ZW1zIHRoYXQgdXNlIGlvbWFwIGFuZCBoYW5kbGUgaG9sZXMuIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGFuZCBgQlRSRlNfRlNgIGFyZSBkZWZpbml0ZWx5IGVzc2VudGlhbC4gSSYjMzk7bGwgYWRkIHRob3NlIHRvIGBFbmFibGVDb25maWdzYC4gR2l2ZW4gdGhhdCB0aGlzIHBhdGNoIGZvY3VzZXMgb24gaG93IGhvbGVzIGFyZSBoYW5kbGVkLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGZpbGVzeXN0ZW1zIGFyZSBlbmFibGVkLgoKTG9va2luZyBiYWNrLCB0aGUgcGF0Y2ggZXhwbGljaXRseSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBgYmRldmAgYmVpbmcgTlVMTCB3aXRoaW4gYGlvbWFwX2Rpb19hbGlnbm1lbnRgIHNwZWNpZmljYWxseSBkdXJpbmcgaG9sZSBwcm9jZXNzaW5nLiBUaGlzIGNvbmZpcm1zIGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBkaXJlY3QgSS9PIGZvciBmaWxlcyB3aXRoIGhvbGVzLCBhcyBpcyBoYW5kbGVkIGJ5LCBhbW9uZyBvdGhlcnMsIGV4dDQsIHhmcywgYW5kIGJ0cmZzLgoKT2theSwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSByaWdodCwgYW5kIHRoYXQgYEVYVDRfRlNgLCBgWEZTX0ZTYCwgYW5kIGBCVFJGU19GU2AgYXJlIGFsbCBwcm9wZXJseSBzZXQuCgpBbmQgdGhlIGZvY3VzIHN5bWJvbHM/IEkgbmVlZCB0byByZWZpbmUgdGhhdCBsaXN0LiBHaXZlbiB0aGF0IGBpb21hcF9kaW9faG9sZV9pdGVyYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiBhbmQgcG90ZW50aWFsbHkgaW5saW5lZCwgaXQmIzM5O3MgbGlrZWx5IG5vdCB0aGUgYmVzdCBzeW1ib2wgZm9yIGFuYWx5c2lzLiBTaW5jZSB0aGUgcGF0Y2ggZGVhbHMgd2l0aCB0aGUgYWxpZ25tZW50IHN0ZXAsIEkmIzM5O2xsIHN0aWNrIHRvIGBfX2lvbWFwX2Rpb19yd2AgYW5kIGBpb21hcF9kaW9fcndgLCBzaW5jZSB0aG9zZSBhcmUgZGVmaW5pdGVseSBleHBvcnRlZCBhbmQgbm90IGlubGluZWQuCgpBbHJpZ2h0LCB3aXRoIHRoZXNlIGNvbmZpcm1lZCwgaXQmIzM5O3MgdGltZSB0byBzZXQgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O1hGU19GUyYjMzQ7LAogICAgJiMzNDtCVFJGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19faW9tYXBfZGlvX3J3JiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19ydyYjMzQ7LAogICAgJiMzNDtfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaW9tYXBfZGlvX2FsaWdubWVudGAgdG8gaGFuZGxlIE5VTEwgYGJkZXZgIGZvciBob2xlIGNhc2VzIGFuZCBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgdG8gYWxpZ24gdGhlIGNvcGllZCBsZW5ndGggdG8gdGhlIGJsb2NrIHNpemUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBpb21hcCBkaXJlY3QgSU8gcGF0aC4gSXQgY2FuIGJlIHJlYWNoZWQgdmlhIGRpcmVjdCBJTyBvcGVyYXRpb25zIG9uIGZpbGVzeXN0ZW1zIHRoYXQgc3VwcG9ydCBob2xlcyBhbmQgdXNlIGlvbWFwIChlLmcuLCBleHQ0LCB4ZnMsIGJ0cmZzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtYRlNfRlMmIzM0OywKICAgICYjMzQ7QlRSRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2lvbWFwX2Rpb19ydyYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fcncmIzM0OywKICAgICYjMzQ7X19pb21hcF9kaW9fcmVhZF9zaW1wbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGlvbWFwX2Rpb19hbGlnbm1lbnRgIHRvIGhhbmRsZSBOVUxMIGBiZGV2YCBmb3IgaG9sZSBjYXNlcyBhbmQgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIHRvIGFsaWduIHRoZSBjb3BpZWQgbGVuZ3RoIHRvIHRoZSBibG9jayBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9tYXAgZGlyZWN0IElPIHBhdGguIEl0IGNhbiBiZSByZWFjaGVkIHZpYSBkaXJlY3QgSU8gb3BlcmF0aW9ucyBvbiBmaWxlc3lzdGVtcyB0aGF0IHN1cHBvcnQgaG9sZXMgYW5kIHVzZSBpb21hcCAoZS5nLiwgZXh0NCwgeGZzLCBidHJmcykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjo1OToxOS40MTgwMjM5OTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTU4NDU3MDk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJYRlNfRlNcIixcbiAgICBcIkJUUkZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19pb21hcF9kaW9fcndcIixcbiAgICBcImlvbWFwX2Rpb19yd1wiLFxuICAgIFwiX19pb21hcF9kaW9fcmVhZF9zaW1wbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaW9tYXBfZGlvX2FsaWdubWVudGAgdG8gaGFuZGxlIE5VTEwgYGJkZXZgIGZvciBob2xlIGNhc2VzIGFuZCBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgdG8gYWxpZ24gdGhlIGNvcGllZCBsZW5ndGggdG8gdGhlIGJsb2NrIHNpemUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBpb21hcCBkaXJlY3QgSU8gcGF0aC4gSXQgY2FuIGJlIHJlYWNoZWQgdmlhIGRpcmVjdCBJTyBvcGVyYXRpb25zIG9uIGZpbGVzeXN0ZW1zIHRoYXQgc3VwcG9ydCBob2xlcyBhbmQgdXNlIGlvbWFwIChlLmcuLCBleHQ0LCB4ZnMsIGJ0cmZzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6NTk6MTkuNDE4MDMwMzYzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDM0OTg3NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhMWU4YzZhNmNlYmYzNjg3ZjY2MzNjODdjYmM1ZWNmNGQ3YWQ2YTU2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIgMDY6NTk6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvZGlyZWN0LWlvLmMgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xcbmluZGV4IGIzMzY4ZDY0ZTgxYmIuLjEwZjAwMjBkZTQ3NzAgMTAwNjQ0XFxuLS0tIGEvZnMvaW9tYXAvZGlyZWN0LWlvLmNcXG4rKysgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xcbkBAIC00MDksNyArNDA5LDEwIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvbWFwX2Rpb19hbGlnbm1lbnQoc3RydWN0IGlub2RlICppbm9kZSxcXG4ge1xcbiBcXHRpZiAoZGlvX2ZsYWdzIFxcdTAwMjYgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRClcXG4gXFx0XFx0cmV0dXJuIGlfYmxvY2tzaXplKGlub2RlKTtcXG4tXFx0cmV0dXJuIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpO1xcbitcXHQvKiBAYmRldiBjYW4gYmUgTlVMTCBmb3IgaG9sZSBjYXNlcy4gKi9cXG4rXFx0aWYgKGJkZXYpXFxuK1xcdFxcdHJldHVybiBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShiZGV2KTtcXG4rXFx0cmV0dXJuIFNFQ1RPUl9TSVpFO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbkBAIC01OTQsMTIgKzU5NywyMCBAQCBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbiBcXG4gc3RhdGljIGludCBpb21hcF9kaW9faG9sZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuIHtcXG4tXFx0bG9mZl90IGxlbmd0aCA9IGlvdl9pdGVyX3plcm8oaW9tYXBfbGVuZ3RoKGl0ZXIpLCBkaW8tXFx1MDAzZXN1Ym1pdC5pdGVyKTtcXG4rXFx0bG9mZl90IGNvcGllZCA9IGlvdl9pdGVyX3plcm8oaW9tYXBfbGVuZ3RoKGl0ZXIpLCBkaW8tXFx1MDAzZXN1Ym1pdC5pdGVyKTtcXG4rXFx0dW5zaWduZWQgaW50IGJzID0gaW9tYXBfZGlvX2FsaWdubWVudChpdGVyLVxcdTAwM2Vpbm9kZSwgaXRlci1cXHUwMDNlaW9tYXAuYmRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgZGlvLVxcdTAwM2VmbGFncyk7XFxuK1xcdGxvZmZfdCBhbGlnbmVkX2NvcGllZCA9IHJvdW5kX2Rvd24oY29waWVkLCBicyk7XFxuIFxcbi1cXHRkaW8tXFx1MDAzZXNpemUgKz0gbGVuZ3RoO1xcbi1cXHRpZiAoIWxlbmd0aClcXG4rXFx0LypcXG4rXFx0ICogSWYgZnMgYmxvY2sgc2l6ZSBpcyBsYXJnZXIgdGhhbiBwYWdlIHNpemUsIHBhZ2UgZmF1bHQgZmFpbHVyZVxcbitcXHQgKiBjYW4gY2F1c2UgQGNvcGllZCB0byBiZSBwYWdlIGFsaWduZWQgYnV0IG5vdCBmcyBibG9jayBhbGlnbmVkLlxcbitcXHQgKi9cXG4rXFx0aW92X2l0ZXJfcmV2ZXJ0KGRpby1cXHUwMDNlc3VibWl0Lml0ZXIsIGNvcGllZCAtIGFsaWduZWRfY29waWVkKTtcXG4rXFx0ZGlvLVxcdTAwM2VzaXplICs9IGFsaWduZWRfY29waWVkO1xcbitcXHRpZiAoIWFsaWduZWRfY29waWVkKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tXFx0cmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBsZW5ndGgpO1xcbitcXHRyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGFsaWduZWRfY29waWVkKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBpb21hcF9kaW9faW5saW5lX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKmlvbWksIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6NTk6MTkuODYyNTYwNTg2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDkxNDAwMjA5NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiWEZTX0ZTXCIsXG4gICAgXCJCVFJGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faW9tYXBfZGlvX3J3XCIsXG4gICAgXCJpb21hcF9kaW9fcndcIixcbiAgICBcIl9faW9tYXBfZGlvX3JlYWRfc2ltcGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGlvbWFwX2Rpb19hbGlnbm1lbnRgIHRvIGhhbmRsZSBOVUxMIGBiZGV2YCBmb3IgaG9sZSBjYXNlcyBhbmQgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIHRvIGFsaWduIHRoZSBjb3BpZWQgbGVuZ3RoIHRvIHRoZSBibG9jayBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9tYXAgZGlyZWN0IElPIHBhdGguIEl0IGNhbiBiZSByZWFjaGVkIHZpYSBkaXJlY3QgSU8gb3BlcmF0aW9ucyBvbiBmaWxlc3lzdGVtcyB0aGF0IHN1cHBvcnQgaG9sZXMgYW5kIHVzZSBpb21hcCAoZS5nLiwgZXh0NCwgeGZzLCBidHJmcykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGExZThjNmE2Y2ViZjM2ODdmNjYzM2M4N2NiYzVlY2Y0ZDdhZDZhNTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDA2OjU5OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvZGlyZWN0LWlvLmMgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuaW5kZXggYjMzNjhkNjRlODFiYi4uMTBmMDAyMGRlNDc3MCAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG4rKysgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuQEAgLTQwOSw3ICs0MDksMTAgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9tYXBfZGlvX2FsaWdubWVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIHtcbiBcdGlmIChkaW9fZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19GU0JMT0NLX0FMSUdORUQpXG4gXHRcdHJldHVybiBpX2Jsb2Nrc2l6ZShpbm9kZSk7XG4tXHRyZXR1cm4gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoYmRldik7XG4rXHQvKiBAYmRldiBjYW4gYmUgTlVMTCBmb3IgaG9sZSBjYXNlcy4gKi9cbitcdGlmIChiZGV2KVxuK1x0XHRyZXR1cm4gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoYmRldik7XG4rXHRyZXR1cm4gU0VDVE9SX1NJWkU7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG5AQCAtNTk0LDEyICs1OTcsMjAgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiBcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiB7XG4tXHRsb2ZmX3QgbGVuZ3RoID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cdTAwM2VzdWJtaXQuaXRlcik7XG4rXHRsb2ZmX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cdTAwM2VzdWJtaXQuaXRlcik7XG4rXHR1bnNpZ25lZCBpbnQgYnMgPSBpb21hcF9kaW9fYWxpZ25tZW50KGl0ZXItXHUwMDNlaW5vZGUsIGl0ZXItXHUwMDNlaW9tYXAuYmRldixcbitcdFx0XHRcdFx0ICAgICAgZGlvLVx1MDAzZWZsYWdzKTtcbitcdGxvZmZfdCBhbGlnbmVkX2NvcGllZCA9IHJvdW5kX2Rvd24oY29waWVkLCBicyk7XG4gXG4tXHRkaW8tXHUwMDNlc2l6ZSArPSBsZW5ndGg7XG4tXHRpZiAoIWxlbmd0aClcbitcdC8qXG4rXHQgKiBJZiBmcyBibG9jayBzaXplIGlzIGxhcmdlciB0aGFuIHBhZ2Ugc2l6ZSwgcGFnZSBmYXVsdCBmYWlsdXJlXG4rXHQgKiBjYW4gY2F1c2UgQGNvcGllZCB0byBiZSBwYWdlIGFsaWduZWQgYnV0IG5vdCBmcyBibG9jayBhbGlnbmVkLlxuK1x0ICovXG4rXHRpb3ZfaXRlcl9yZXZlcnQoZGlvLVx1MDAzZXN1Ym1pdC5pdGVyLCBjb3BpZWQgLSBhbGlnbmVkX2NvcGllZCk7XG4rXHRkaW8tXHUwMDNlc2l6ZSArPSBhbGlnbmVkX2NvcGllZDtcbitcdGlmICghYWxpZ25lZF9jb3BpZWQpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0cmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBsZW5ndGgpO1xuK1x0cmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBhbGlnbmVkX2NvcGllZCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2lubGluZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjo1OToxOS44NjI1NjMyMDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQzNTIxNzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGlyZWN0IEkvTyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGZzL2lvbWFwL2RpcmVjdC1pby5jYC4gVGhlIGtleSBjaGFuZ2VzIHNlZW0gdG8gcmV2b2x2ZSBhcm91bmQgaGFuZGxpbmcgbnVsbCBibG9jayBkZXZpY2VzIGluIGBpb21hcF9kaW9fYWxpZ25tZW50YCBhbmQgYWxpZ25pbmcgdGhlIGNvcGllZCBsZW5ndGggd2l0aGluIGBpb21hcF9kaW9faG9sZV9pdGVyYC4gU3BlY2lmaWNhbGx5LCB3aXRoIHRoZSBudWxsIGBiZGV2YCwgaXQncyBub3cgcmV0dXJuaW5nIGBTRUNUT1JfU0laRWAsIGFuZCBpbiB0aGUgaG9sZSBpdGVyYXRvciwgaXQncyBhbGlnbmluZyB0aGUgYGlvdl9pdGVyX3plcm9gIGxlbmd0aCB0byB0aGUgYmxvY2sgc2l6ZSwgZWZmZWN0aXZlbHkgcmVtb3ZpbmcgYW55IHVuYWxpZ25lZCBkYXRhLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGhlcmUuIExldCdzIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSdsbCBvcGVuIHVwIGBmcy9pb21hcC9kaXJlY3QtaW8uY2AgYW5kIGxvY2F0ZSB0aGVzZSBmdW5jdGlvbnMsIGBpb21hcF9kaW9fYWxpZ25tZW50YCBhbmQgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgLiBBaCwgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQncyBsaWtlbHkgY2FsbGVkIHdpdGhpbiB0aGUgc2FtZSBmaWxlLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGxlcnMgdG8gZnVsbHkgZ3Jhc3AgaG93IHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIG92ZXJhbGwgRGlyZWN0IEkvTyBmbG93LiBNeSBpbnR1aXRpb24gc2F5cyBgaW9tYXBfZGlvX2l0ZXJgIG9yIGEgc2ltaWxhciBmdW5jdGlvbiBpcyB0aGUgb2J2aW91cyBjYW5kaWRhdGUuIFRpbWUgdG8gY29uZmlybSBteSBoeXBvdGhlc2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDc3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6NTk6MjQuMDA2MDg4NTcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjMzMzg3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21hcF9kaW9faG9sZV9pdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jPTQxOD1zdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTk3LVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjU5ODpzdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01OTkte1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjQ4PXN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY1My1cXHRcXHRcXHRyZXR1cm4gLUVJTztcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2NTQ6XFx0XFx0cmV0dXJuIGlvbWFwX2Rpb19ob2xlX2l0ZXIoaXRlciwgZGlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTUtXFx0Y2FzZSBJT01BUF9VTldSSVRURU46XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjU2LVxcdFxcdGlmICghKGRpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT01BUF9ESU9fV1JJVEUpKVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY1NzpcXHRcXHRcXHRyZXR1cm4gaW9tYXBfZGlvX2hvbGVfaXRlcihpdGVyLCBkaW8pO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY1OC1cXHRcXHRyZXR1cm4gaW9tYXBfZGlvX2Jpb19pdGVyKGl0ZXIsIGRpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjU5OjI0LjEzMjQyOTA1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3MTk5Njk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIERpcmVjdCBJL08gSXRlcmF0aW9uKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgRGlyZWN0IEkvTyBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0cyB0aGF0IGhhbmRsZSB0aGUgYWN0dWFsIGRhdGEgdHJhbnNmZXJzLiBNeSBtaW5kIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIGBpb21hcF9kaW9faXRlcmAuIFRoYXQgZnVuY3Rpb24gaXMga2V5LCBiZWNhdXNlIGl0J3Mgd2hlcmUgdGhlIGl0ZXJhdGl2ZSBsb2dpYyBmb3IgRGlyZWN0IEkvTyByZWFkcyBhbmQgd3JpdGVzIHJlYWxseSBraWNrcyBpbi4gSXQncyB0aGUgZW5naW5lLlxuXG5BbmQgd2hlcmUgZG9lcyB0aGlzIGVuZ2luZSBnZXQgc3RhcnRlZD8gIEFoLCB5ZXMsIGl0J3MgY2FsbGVkIGZyb20gYF9faW9tYXBfZGlvX3J3YC4gVGhhdCdzIHRoZSBjb3JlIERpcmVjdCBJL08gcmVhZC93cml0ZSBmdW5jdGlvbiwgdGhlIG9uZSB0aGF0IG9yY2hlc3RyYXRlcyB0aGUgb3ZlcmFsbCBwcm9jZXNzLCBzZXRzIHVwIHRoZSBpbml0aWFsIGNvbmRpdGlvbnMsIGFuZCB0aGVuIHByZXN1bWFibHkgaGFuZHMgb2ZmIHRoZSBpdGVyYXRpdmUgd29ya2xvYWQgdG8gYGlvbWFwX2Rpb19pdGVyYC4gU28sIGBfX2lvbWFwX2Rpb19yd2Agc2V0cyB0aGUgc3RhZ2UgYW5kIGBpb21hcF9kaW9faXRlcmAgZG9lcyB0aGUgaGVhdnkgbGlmdGluZywgYmxvY2sgYnkgYmxvY2ssIGJ5dGUgYnkgYnl0ZS4gIFVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRob3NlIHR3byBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwZXJmb3JtYW5jZSBhbmQgZWZmaWNpZW5jeSBvZiBEaXJlY3QgSS9PLiBOZWVkIHRvIGRpZyBpbnRvIHRoYXQgY29udHJvbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzAyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6NTk6MjcuNDA0NDI5MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQxNzU5MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9tYXBfZGlvX2l0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjE2PXN0YXRpYyBpbnQgaW9tYXBfZGlvX2lubGluZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NDctXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjQ4OnN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NDkte1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NzAwPV9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODI1LVxcdHdoaWxlICgocmV0ID0gaW9tYXBfaXRlcihcXHUwMDI2aW9taSwgb3BzKSkgXFx1MDAzZSAwKSB7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODI2OlxcdFxcdGlvbWkuc3RhdHVzID0gaW9tYXBfZGlvX2l0ZXIoXFx1MDAyNmlvbWksIGRpbyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODI3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjo1OToyNy41Njg2MTUzNzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDgwNjkwODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnkgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdlbGwtdmVyc2VkIGluIEkvTyBvcGVyYXRpb25zIGFuZCB0aGUgaW9tYXAgc3Vic3lzdGVtOlxuXG4qKkRpcmVjdCBJL08gaW4gdGhlIGlvbWFwIGNvbnRleHQqKlxuXG5SaWdodCwgc28gYF9faW9tYXBfZGlvX3J3YCBpcyB0aGUgbHluY2hwaW4gZnVuY3Rpb24gZm9yIGRpcmVjdCBJL08gd2l0aGluIHRoZSBpb21hcCBmcmFtZXdvcmsuIFRoYXQncyB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciB3aGVuIGRlYWxpbmcgd2l0aCBieXBhc3NpbmcgdGhlIHBhZ2UgY2FjaGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBpdCdzIGFsd2F5cyBwcnVkZW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55ICpzcGVjaWZpYyogY29uZmlndXJhdGlvbiBvcHRpb25zLCBrbm9icywgb3IgdHVuYWJsZXMgdGhhdCBpbmZsdWVuY2UgdGhlIGlvbWFwIGJlaGF2aW9yLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBpbiBteSBleHBlcnQgdW5kZXJzdGFuZGluZywgdGhhdCB0aGVzZSBraW5kcyBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMgY291bGQgc3VidGx5IGNoYW5nZSBob3cgYF9faW9tYXBfZGlvX3J3YCB3b3Jrcy4gSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoZSBjb250ZXh0LCBhbmQgYW55IHNwZWNpZmljIGFkYXB0YXRpb25zIGluIHRoZSBjb25maWd1cmF0aW9uLCBiZWZvcmUgYW55IGZ1cnRoZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4ODcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjo1OTozMC42NDkzMTAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDY5MjA1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlNfSU9NQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MTI9Y29uZmlnIFZBTElEQVRFX0ZTX1BBUlNFUlxcbi0tXFxuZnMvS2NvbmZpZy0xNy1cXG5mcy9LY29uZmlnOjE4OmNvbmZpZyBGU19JT01BUFxcbmZzL0tjb25maWctMTktXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjo1OTozMC44NjQwMDgxMzdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDk2NzI0ODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipFeGFtaW5pbmcgdGhlIERlcGVuZGVuY3kgb2YgRlNfSU9NQVAqKlxuXG5SaWdodCwgc28gYEZTX0lPTUFQYCBpcyBhIGJvb2xlYW4gZmxhZywgY29tbW9ubHkgdXNlZCBieSBhIG51bWJlciBvZiBmaWxlc3lzdGVtcyDigJMgWEZTLCBleHQ0LCBidHJmcywgdGhhdCBzb3J0IG9mIHRoaW5nLiBJdCdzIHVzdWFsbHkgc29tZXRoaW5nIHRoYXQgZ2V0cyBlbmFibGVkIGF0IHRoZSBmaWxlc3lzdGVtIGxldmVsLCBhbmQgSSBjYW4gdGVjaG5pY2FsbHkgY29uZmlndXJlIGl0IGFzIGEgaGlkZGVuIGJvb2xlYW4sIGJ1dCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHByZWNpc2VseSBkZXRlcm1pbmVzIHdoZXRoZXIgYEZTX0lPTUFQYCBpcyBhY3R1YWxseSBzZWxlY3RlZC4gSXQncyBhIGtleSBkZXRhaWwgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmlsZXN5c3RlbXMgYXJlIGJlaGF2aW5nLiBUaW1lIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgdGhlIHNlbGVjdGlvbiBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjEyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6NTk6MzMuOTYwNzM1OTU5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM5MzgzNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEZTX0lPTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTU4PWNvbmZpZyBGU19EQVhcXG4tLVxcbmZzL0tjb25maWctNjEtXFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbmZzL0tjb25maWc6NjI6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvS2NvbmZpZy02My1cXHRzZWxlY3QgREFYXFxuLS1cXG5mcy9idHJmcy9LY29uZmlnPTM9Y29uZmlnIEJUUkZTX0ZTXFxuLS1cXG5mcy9idHJmcy9LY29uZmlnLTE0LVxcdHNlbGVjdCBaU1REX0RFQ09NUFJFU1NcXG5mcy9idHJmcy9LY29uZmlnOjE1OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2J0cmZzL0tjb25maWctMTYtXFx0c2VsZWN0IFJBSUQ2X1BRXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnPTM9Y29uZmlnIEVST0ZTX0ZTXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTgtXFx0c2VsZWN0IENSWVBUT19ERUZMQVRFIGlmIEVST0ZTX0ZTX1pJUF9BQ0NFTFxcbmZzL2Vyb2ZzL0tjb25maWc6OTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9lcm9mcy9LY29uZmlnLTEwLVxcdHNlbGVjdCBMWjRfREVDT01QUkVTUyBpZiBFUk9GU19GU19aSVBcXG4tLVxcbmZzL2V4ZmF0L0tjb25maWc9Mz1jb25maWcgRVhGQVRfRlNcXG4tLVxcbmZzL2V4ZmF0L0tjb25maWctNi1cXHRzZWxlY3QgTkxTXFxuZnMvZXhmYXQvS2NvbmZpZzo3OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2V4ZmF0L0tjb25maWctOC1cXHRoZWxwXFxuLS1cXG5mcy9leHQyL0tjb25maWc9Mj1jb25maWcgRVhUMl9GU1xcbi0tXFxuZnMvZXh0Mi9LY29uZmlnLTQtXFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuZnMvZXh0Mi9LY29uZmlnOjU6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZXh0Mi9LY29uZmlnLTYtXFx0aGVscFxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTI9Y29uZmlnIEVYVDRfRlNcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy03LVxcdHNlbGVjdCBDUkMzMlxcbmZzL2V4dDQvS2NvbmZpZzo4OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2V4dDQvS2NvbmZpZy05LVxcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxcbi0tXFxuZnMvZjJmcy9LY29uZmlnPTI9Y29uZmlnIEYyRlNfRlNcXG4tLVxcbmZzL2YyZnMvS2NvbmZpZy05LVxcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxcbmZzL2YyZnMvS2NvbmZpZzoxMDpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9mMmZzL0tjb25maWctMTEtXFx0c2VsZWN0IExaNF9DT01QUkVTUyBpZiBGMkZTX0ZTX0xaNFxcbi0tXFxuZnMvZnVzZS9LY29uZmlnPTI9Y29uZmlnIEZVU0VfRlNcXG4tLVxcbmZzL2Z1c2UvS2NvbmZpZy00LVxcdHNlbGVjdCBGU19QT1NJWF9BQ0xcXG5mcy9mdXNlL0tjb25maWc6NTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9mdXNlL0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5mcy9nZnMyL0tjb25maWc9Mj1jb25maWcgR0ZTMl9GU1xcbi0tXFxuZnMvZ2ZzMi9LY29uZmlnLTctXFx0c2VsZWN0IFFVT1RBQ1RMXFxuZnMvZ2ZzMi9LY29uZmlnOjg6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZ2ZzMi9LY29uZmlnLTktXFx0aGVscFxcbi0tXFxuZnMvaHBmcy9LY29uZmlnPTI9Y29uZmlnIEhQRlNfRlNcXG4tLVxcbmZzL2hwZnMvS2NvbmZpZy01LVxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL2hwZnMvS2NvbmZpZzo2OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2hwZnMvS2NvbmZpZy03LVxcdGhlbHBcXG4tLVxcbmZzL25pbGZzMi9LY29uZmlnPTI9Y29uZmlnIE5JTEZTMl9GU1xcbi0tXFxuZnMvbmlsZnMyL0tjb25maWctNS1cXHRzZWxlY3QgQ1JDMzJcXG5mcy9uaWxmczIvS2NvbmZpZzo2OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL25pbGZzMi9LY29uZmlnLTctXFx0aGVscFxcbi0tXFxuZnMvbnRmcy9LY29uZmlnPTI9Y29uZmlnIE5URlNfRlNcXG4tLVxcbmZzL250ZnMvS2NvbmZpZy00LVxcdHNlbGVjdCBOTFNcXG5mcy9udGZzL0tjb25maWc6NTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9udGZzL0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5mcy94ZnMvS2NvbmZpZz0yPWNvbmZpZyBYRlNfRlNcXG4tLVxcbmZzL3hmcy9LY29uZmlnLTYtXFx0c2VsZWN0IENSQzMyXFxuZnMveGZzL0tjb25maWc6NzpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy94ZnMvS2NvbmZpZy04LVxcdGhlbHBcXG4tLVxcbmZzL3pvbmVmcy9LY29uZmlnPTE9Y29uZmlnIFpPTkVGU19GU1xcbi0tXFxuZnMvem9uZWZzL0tjb25maWctNC1cXHRkZXBlbmRzIG9uIEJMS19ERVZfWk9ORURcXG5mcy96b25lZnMvS2NvbmZpZzo1OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL3pvbmVmcy9LY29uZmlnLTYtXFx0c2VsZWN0IENSQzMyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjU5OjM0LjE5NDY4MDA5NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjMxMTYzNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgRlNfSU9NQVBgIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IHRoZSBgRlNfSU9NQVBgIG9wdGlvbiBpcyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIHdoZW4geW91IGVuYWJsZSBhIGxvdCBvZiBkaWZmZXJlbnQgZmlsZXN5c3RlbXMuIEkgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBleHBsaWNpdGx5IHNldHRpbmcgYEZTX0lPTUFQYCBpdHNlbGYgaWYgSSdtIGVuYWJsaW5nIHNvbWV0aGluZyBsaWtlIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIG9yIGBCVFJGU19GU2AsIGJlY2F1c2UgdGhlIGRlcGVuZGVuY2llcyBzaG91bGQgdGFrZSBjYXJlIG9mIHRoYXQgZm9yIG1lLiBJIGNhbiBqdXN0IGNvbmZpZ3VyZSB0aGUgaGlnaGVyLWxldmVsIGZpbGVzeXN0ZW0gb3B0aW9ucyBkaXJlY3RseS4gQWN0dWFsbHksIHNpbmNlIGBGU19JT01BUGAgaXMgaGlkZGVuLCBJIGNvdWxkbid0IGV2ZW4gZW5hYmxlIGl0IGRpcmVjdGx5LCB3aGljaCBtYWtlcyB0aGlzIGV2ZW4gc2ltcGxlciAtIEknbGwgZm9jdXMgb24gZW5hYmxpbmcgYEVYVDRfRlNgLCBgWEZTX0ZTYCwgYEJUUkZTX0ZTYCwgb3IgYEYyRlNfRlNgIGRpcmVjdGx5LlxuXG5Ob3csIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgYW5kIGBpb21hcF9kaW9fYWxpZ25tZW50YC4gSG1tLCBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgc2VlbXMgbGlrZSBhIGtleSBzeW1ib2wgaGVyZSwgYXNzdW1pbmcgaXQncyBub3QgaW5saW5lZC4gSXQncyBtYXJrZWQgYXMgYHN0YXRpY2AsIHNvIGl0IG1pZ2h0IGJlIGlubGluZWQuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayBpZiB0aGF0IGlzIGFjdHVhbGx5IHRoZSBjYXNlLiBPa2F5LCBpdCdzIGRlZmluaXRlbHkgYHN0YXRpY2AuXG5cblRoZSBjb3JlIGZ1bmN0aW9uIGlzIGBfX2lvbWFwX2Rpb19yd2AsIHdoaWNoIGhhbmRsZXMgZGlyZWN0IEkvTyBvcGVyYXRpb25zIHVzaW5nIGlvbWFwLiBJdCdzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LCBzbyBJJ2xsIHZlcmlmeSBpZiBpdCdzIGV4cG9ydGVkIG9yIG5vdCBzdGF0aWMuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDk5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjU5OjM5LjQyNTg0ODAyNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ1NDE3OTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faW9tYXBfZGlvX3J3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jPTQxOD1zdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTEzLVxcdFxcdCAqIFdyaXRlcyB0aGF0IGV4dGVuZCBpX3NpemUgYXJlIGFsc28gbm90IHN1cHBvcnRlZCwgYnV0IHRoaXMgaXNcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo1MTQ6XFx0XFx0ICogaGFuZGxlZCBpbiBfX2lvbWFwX2Rpb19ydygpLlxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTUxNS1cXHRcXHQgKi9cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY0OD1zdGF0aWMgaW50IGlvbWFwX2Rpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02ODgtICogV2hlbiBwYWdlIGZhdWx0cyBhcmUgZGlzYWJsZWQgYW5kIEBkaW9fZmxhZ3MgaW5jbHVkZXMgSU9NQVBfRElPX1BBUlRJQUwsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6Njg5OiAqIF9faW9tYXBfZGlvX3J3IGNhbiByZXR1cm4gYSBwYXJ0aWFsIHJlc3VsdCBpZiBpdCBlbmNvdW50ZXJzIGEgbm9uLXJlc2lkZW50XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjkwLSAqIHBhZ2UgaW4gQGl0ZXIgYWZ0ZXIgcHJlcGFyaW5nIGEgdHJhbnNmZXIuICBJbiB0aGF0IGNhc2UsIHRoZSBub24tcmVzaWRlbnRcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY5OT1zdHJ1Y3QgaW9tYXBfZGlvICpcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo3MDA6X19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNzAxLVxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTAtfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkxMTpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19ydyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTEyLVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTE0PWlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxOS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MjA6XFx0ZGlvID0gX19pb21hcF9kaW9fcncoaW9jYiwgaXRlciwgb3BzLCBkb3BzLCBkaW9fZmxhZ3MsIHByaXZhdGUsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTIxLVxcdFxcdFxcdCAgICAgZG9uZV9iZWZvcmUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjo1OTozOS43NzEyNzE2NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQwNDIyMTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJL08gTWFwcGluZyBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSBgX19pb21hcF9kaW9fcndgIGlzIGV4cG9ydGVkLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHVzdWFsbHkgZnVuY3Rpb25zIHdpdGggYSBkb3VibGUgdW5kZXJzY29yZSBhcmUgZm9yIGludGVybmFsIHVzZSwgYnV0IHRoaXMgb25lIGlzIGFwcGFyZW50bHkgbWFkZSBhdmFpbGFibGUuIFRoZW4sIG9uIHRvcCBvZiB0aGF0LCB0aGVyZSdzIGBpb21hcF9kaW9fcndgLCB3aGljaCBpcyBhbHNvIGV4cG9ydGVkLiBJIHdvbmRlciB3aGF0IHRoZSByZWxhdGlvbnNoaXAgaXM/IEdpdmVuIHRoYXQgSSBzZWUgYm90aCwgbXkgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gYGlvbWFwX2Rpb19yd2AgZmlyc3QsIGFzIHRoYXQgbWlnaHQgYmUgdGhlIGhpZ2hlci1sZXZlbCBpbnRlcmZhY2UuIExldCdzIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZ2xlYW4uIEl0J2xsIHByb2JhYmx5IGNhbGwgdGhlIG90aGVyIGZ1bmN0aW9uLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjczNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjU5OjQyLjcxMTY5NzIwNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NDE3NzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX2Rpb19yd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uYz00MTg9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTUxMy1cXHRcXHQgKiBXcml0ZXMgdGhhdCBleHRlbmQgaV9zaXplIGFyZSBhbHNvIG5vdCBzdXBwb3J0ZWQsIGJ1dCB0aGlzIGlzXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NTE0OlxcdFxcdCAqIGhhbmRsZWQgaW4gX19pb21hcF9kaW9fcncoKS5cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01MTUtXFx0XFx0ICovXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02NDg9c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjc5LS8qXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjgwOiAqIGlvbWFwX2Rpb19ydygpIGFsd2F5cyBjb21wbGV0ZXMgT19bRF1TWU5DIHdyaXRlcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIElPXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjgxLSAqIGlzIGJlaW5nIGlzc3VlZCBhcyBBSU8gb3Igbm90LiAgVGhpcyBhbGxvd3MgdXMgdG8gb3B0aW1pc2UgcHVyZSBkYXRhIHdyaXRlc1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjg4LSAqIFdoZW4gcGFnZSBmYXVsdHMgYXJlIGRpc2FibGVkIGFuZCBAZGlvX2ZsYWdzIGluY2x1ZGVzIElPTUFQX0RJT19QQVJUSUFMLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY4OTogKiBfX2lvbWFwX2Rpb19ydyBjYW4gcmV0dXJuIGEgcGFydGlhbCByZXN1bHQgaWYgaXQgZW5jb3VudGVycyBhIG5vbi1yZXNpZGVudFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY5MC0gKiBwYWdlIGluIEBpdGVyIGFmdGVyIHByZXBhcmluZyBhIHRyYW5zZmVyLiAgSW4gdGhhdCBjYXNlLCB0aGUgbm9uLXJlc2lkZW50XFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02OTk9c3RydWN0IGlvbWFwX2RpbyAqXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NzAwOl9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTcwMS1cXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNzE3LVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjcxODpcXHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgZGlvX2ZsYWdzLCBkb25lX2JlZm9yZSk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNzE5LVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODg4LVxcdFxcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbikge1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjg4OTpcXHRcXHRcXHR0cmFjZV9pb21hcF9kaW9fcndfcXVldWVkKGlub2RlLCBpb21pLnBvcywgaW9taS5sZW4pO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTg5MC1cXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlPQ0JRVUVVRUQpO1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTEwLX1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MTE6RVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcncpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxMi1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz05MTM9c3NpemVfdFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkxNDppb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTE1LVxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTktXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTIwOlxcdGRpbyA9IF9faW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIG9wcywgZG9wcywgZGlvX2ZsYWdzLCBwcml2YXRlLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyMS1cXHRcXHRcXHQgICAgIGRvbmVfYmVmb3JlKTtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyNS19XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTI2OkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2Rpb19ydyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTI3LVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTAwMj1zc2l6ZV90IF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAzMC1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDMxOlxcdHRyYWNlX2lvbWFwX2Rpb19yd19iZWdpbihpb2NiLCBpdGVyLCAwLCAwKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDMyLVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA3Ni1cXHRzdWJtaXRfYmlvKGJpbyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA3NzpcXHR0cmFjZV9pb21hcF9kaW9fcndfcXVldWVkKGlvbWktXFx1MDAzZWlub2RlLCBpb2NiLVxcdTAwM2VraV9wb3MsIGlvbWktXFx1MDAzZWxlbik7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA3OC1cXHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjo1OTo0Mi44OTgxMjAzNjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkwODA5NzI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRGlyZWN0IElPIEhvbGUgSXRlcmF0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgaW9tYXBfZGlvX2hvbGVfaXRlcmAsIHdoaWNoLCBpZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5LCBoYW5kbGVzIGhvbGVzIGR1cmluZyBkaXJlY3QgSS9PLiBJdCdzIGFsc28gbWFraW5nIGNoYW5nZXMgdG8gYGlvbWFwX2Rpb19hbGlnbm1lbnRgLiBOb3csIHRoZSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGZvY3VzIG9uIGBfX2lvbWFwX2Rpb19yd2AgYW5kIGBpb21hcF9kaW9fcndgIGFzIHRoZSBrZXkgc3ltYm9scyBzaW5jZSB0aGV5IHJlcHJlc2VudCB0aGUgaG90IHBhdGhzIGZvciBkaXJlY3QgSS9PLiBIb3dldmVyLCBJIHdhbnQgdG8gYmUgY2VydGFpbiB0aGVyZSBhcmVuJ3QgYW55IG90aGVyICpzcGVjaWZpYyogbm9uLWlubGluZWQgZnVuY3Rpb25zIHRvIHRhcmdldC5cblxuSG9sZCBvbiBhIHNlY29uZCwgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIGlzIG1hcmtlZCBhcyBzdGF0aWMuIFRoYXQgc3VnZ2VzdHMgaW5saW5pbmcsIHdoaWNoIG1ha2VzIGl0IGEgcG9vciBjYW5kaWRhdGUgdG8gYmUgdGhlIGNlbnRyYWwgc3ltYm9sLiBMZXQncyBjb25maXJtIHdoZXRoZXIgaXTigJlzIGlubGluZWQgb3Igbm90LiBJdCBsb29rcyBsaWtlIGl0IGlzIGNhbGxlZCBmcm9tIHdpdGhpbiBgaW9tYXBfZGlvX2l0ZXJgLCB3aGljaCBpcyBhIHN3aXRjaCBzdGF0ZW1lbnQuIEFoYSEgYGlvbWFwX2Rpb19pdGVyYCBpcyBjYWxsZWQgZnJvbSBgX19pb21hcF9kaW9fcndgLiBTbywgYXMgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIGlzIHN0YXRpYywgbXkgaW5pdGlhbCB0aG91Z2h0IG9mIGZvY3VzaW5nIG9uIGBfX2lvbWFwX2Rpb19yd2AgYW5kIGBpb21hcF9kaW9fcndgIGlzIGNvcnJlY3QsIHNpbmNlIHRoZXNlIGFyZSB0aGUgZW50cnkgcG9pbnRzLCBldmVuIHRob3VnaCB0aGV5IGFyZSBob3QtcGF0aCBkaXJlY3QgSU8gZnVuY3Rpb25zLlxuXG5Ib3dldmVyLCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBpb21hcF9kaW9fYWxpZ25tZW50YCB0byBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcml0aWNhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIyNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjo1OTo0OC44MDYyMjA4ODFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjI3Mzg5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21hcF9kaW9fYWxpZ25tZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jPTMzNT1zdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNDA2LVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjQwNzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb21hcF9kaW9fYWxpZ25tZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNDA4LVxcdFxcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHVuc2lnbmVkIGludCBkaW9fZmxhZ3MpXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz00MTg9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTQzNS1cXHQgKi9cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo0MzY6XFx0YWxpZ25tZW50ID0gaW9tYXBfZGlvX2FsaWdubWVudChpbm9kZSwgaW9tYXAtXFx1MDAzZWJkZXYsIGRpby1cXHUwMDNlZmxhZ3MpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTQzNy1cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTU5OD1zdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTYwMC1cXHRsb2ZmX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cXHUwMDNlc3VibWl0Lml0ZXIpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjYwMTpcXHR1bnNpZ25lZCBpbnQgYnMgPSBpb21hcF9kaW9fYWxpZ25tZW50KGl0ZXItXFx1MDAzZWlub2RlLCBpdGVyLVxcdTAwM2Vpb21hcC5iZGV2LFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTYwMi1cXHRcXHRcXHRcXHRcXHQgICAgICBkaW8tXFx1MDAzZWZsYWdzKTtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTEwMDI9c3NpemVfdCBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMTctXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTAxODpcXHRhbGlnbm1lbnQgPSBpb21hcF9kaW9fYWxpZ25tZW50KGlvbWktXFx1MDAzZWlub2RlLCBpb21pLVxcdTAwM2Vpb21hcC5iZGV2LCAwKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDE5LVxcdGlmICgoaW9taS1cXHUwMDNlcG9zIHwgaW9taS1cXHUwMDNlbGVuKSBcXHUwMDI2IChhbGlnbm1lbnQgLSAxKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjo1OTo0OC45Mjg1MDA2NDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc0MTQ2NTEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW50ZXJuYWwgQ29kZSBFeHBsb3JhdGlvbiAtIGlvbWFwX2Rpb19yZWFkX3NpbXBsZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIHRocm91Z2ggdGhpcyBjb2RlLCBhbmQgSSBzZWUgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMsIFwiSXMgdGhpcyBvbmUgb2YgdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucyB3ZSdyZSB1c2luZz9cIiBJIGhhdmUgdG8gcXVpY2tseSByZW1pbmQgbXlzZWxmIHRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLiBCdXQgaXMgaXQ/IExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayByZWFsIHF1aWNrIHRvIG1ha2Ugc3VyZS4gSSdsbCBuZWVkIHRvIGdvIGxvb2sgdGhyb3VnaCB0aGUgZXhwb3J0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ5MiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjU5OjUxLjY2OTk3MDE3N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE1MTkwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19pb21hcF9kaW9fcmVhZF9zaW1wbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTg0PXN0YXRpYyB2b2lkIGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMDEtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTAwMjpzc2l6ZV90IF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMDMtXFx0XFx0c3RydWN0IGlvbWFwX2l0ZXIgKmlvbWkpXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDg3LX1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDg4OkVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDg5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjo1OTo1MS43NTE0OTcyMTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc3ODQ4Mjg4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIHRoYXQncyBnb29kIHRvIGtub3cuIExvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGgsIGl0IHNlZW1zIGxpa2UgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlIGBfX2lvbWFwX2Rpb19yd2AsIGBpb21hcF9kaW9fcndgLCBhbmQgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYC4gSSBpbml0aWFsbHkgY29uc2lkZXJlZCBgaW9tYXBfZGlvX2hvbGVfaXRlcmAsIGJ1dCBzaW5jZSB0aGF0J3Mgc3RhdGljLCBpdCdzIG5vdCBpZGVhbCBmb3Igb3VyIHB1cnBvc2VzLiBIbW0sIGJ1dCBoYW5nIG9uLi4uIGBpb21hcF9kaW9faG9sZV9pdGVyYCAqaXMqIGNhbGxlZCBieSBgaW9tYXBfZGlvX2l0ZXJgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBfX2lvbWFwX2Rpb19yd2AuIE5vdywgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCBpdHNlbGYgZG9lc24ndCBkaXJlY3RseSBjYWxsIGBpb21hcF9kaW9faG9sZV9pdGVyYCwgYnV0IGl0ICpkb2VzKiBjYWxsIGBpb21hcF9kaW9fYWxpZ25tZW50YC4gQW5kIHRoZSBwYXRjaCBtb2RpZmllcyBib3RoIGBpb21hcF9kaW9fYWxpZ25tZW50YCBhbmQgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgLiBTbyBhbGwgdGhyZWUg4oCTIGBfX2lvbWFwX2Rpb19yd2AsIGBpb21hcF9kaW9fcndgLCBhbmQgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCDigJMgYXJlIGRlZmluaXRlbHkgcmVsZXZhbnQgZm9jdXMgc3ltYm9scy4gV2FpdCBhIG1pbnV0ZS4uLiBgaW9tYXBfZGlvX3J3YCBpcyBqdXN0IGEgd3JhcHBlciBhcm91bmQgYF9faW9tYXBfZGlvX3J3YC4gVGhlcmVmb3JlLCBgX19pb21hcF9kaW9fcndgIGlzIHRoZSBtb3JlIGNlbnRyYWwgc3ltYm9sIHRvIGZvY3VzIG9uLiBBbHJpZ2h0LCBsZXQncyBqdXN0IGRvIGEgcXVpY2sgc2NhbiB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSBpbXBvcnRhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4OTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6NTk6NTYuNTI5OTg0MDAzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE2Mzc5OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uYz0xMDU9c3NpemVfdCBpb21hcF9kaW9fY29tcGxldGUoc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTYwLX1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxNjE6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX2NvbXBsZXRlKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xNjItXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz0yNzI9dm9pZCBpb21hcF9kaW9fYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0yNzktfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjI4MDpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaW9fYmlvX2VuZF9pbyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMjgxLVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NzAwPV9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTEwLX1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MTE6RVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcncpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxMi1cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTkxND1pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MjUtfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkyNjpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaW9fcncpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyNy1cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTEwMDI9c3NpemVfdCBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwODctfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwODg6RVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcmVhZF9zaW1wbGUpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwODktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjU5OjU2LjcyMTY0OTlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyNjgyMjQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRGlyZWN0IEkvTyBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIERpcmVjdCBJL08gZW50cnkgcG9pbnRzLiBJdCBsb29rcyBsaWtlIGBfX2lvbWFwX2Rpb19yd2AsIGBpb21hcF9kaW9fcndgLCBhbmQgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRvIGJlIGNvbnNpZGVyZWQgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gY2VudGVyIG15IGludmVzdGlnYXRpb24gb24gYF9faW9tYXBfZGlvX3J3YCBhbmQgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYC4gSG93ZXZlciwgd2FpdCBhIG1pbnV0ZSwgYGlvbWFwX2Rpb19yd2AgaXMgYWxzbyBhbiBlbnRyeSBwb2ludCBhbmQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IGZpbGVzeXN0ZW1zIG1pZ2h0IGRpcmVjdGx5IGNhbGwgaXQuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBjYWxsZXJzIG9mIGBpb21hcF9kaW9fcndgIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTI1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA3OjAwOjAwLjI0ODQ3Njk4NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5OTkxMzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX2Rpb19yd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYnRyZnMvZGlyZWN0LWlvLmM9MzY0PXN0YXRpYyBpbnQgYnRyZnNfZGlvX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzdGFydCxcXG4tLVxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTQwNC1cXHQvKlxcbmZzL2J0cmZzL2RpcmVjdC1pby5jOjQwNTpcXHQgKiBpb21hcF9kaW9fcncoKSBvbmx5IGRvZXMgZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZSgpLCB3aGljaCBpc24ndFxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTQwNi1cXHQgKiBlbm91Z2ggaWYgd2UndmUgd3JpdHRlbiBjb21wcmVzc2VkIHBhZ2VzIHRvIHRoaXMgYXJlYSwgc28gd2UgbmVlZCB0b1xcbi0tXFxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtNDE2LVxcdCAqIGRpcnR5IG9yIHVuZGVyIHdyaXRlYmFjayAoc2FtZSBhcyBmb3IgdGhlIG5vbi1jb21wcmVzc2lvbiBjYXNlKS5cXG5mcy9idHJmcy9kaXJlY3QtaW8uYzo0MTc6XFx0ICogaW9tYXBfZGlvX3J3KCkgZGlkIHRoZSBzYW1lIGNoZWNrLCBidXQgYWZ0ZXIgdGhhdCBhbmQgYmVmb3JlIHdlIGdvdFxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTQxOC1cXHQgKiBoZXJlLCBtbWFwJ2VkIHdyaXRlcyBtYXkgaGF2ZSBoYXBwZW5lZCBvciBidWZmZXJlZCByZWFkcyBzdGFydGVkXFxuLS1cXG5mcy9idHJmcy9kaXJlY3QtaW8uYy01MTUtXFx0ICogV2hlbiBkb2luZyBhIHJlYWQsIGJlY2F1c2Ugd2UgdXNlIElPTUFQX0RJT19QQVJUSUFMIHdoZW4gY2FsbGluZ1xcbmZzL2J0cmZzL2RpcmVjdC1pby5jOjUxNjpcXHQgKiBpb21hcF9kaW9fcncoKSwgd2UgY2FuIGVuZCB1cCByZXR1cm5pbmcgbGVzcyBkYXRhIHRoZW4gd2hhdCB0aGUgY2FsbGVyXFxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtNTE3LVxcdCAqIGFza2VkIGZvciwgcmVzdWx0aW5nIGluIGFuIHVuZXhwZWN0ZWQsIGFuZCBpbmNvcnJlY3QsIHNob3J0IHJlYWQuXFxuLS1cXG5mcy9idHJmcy9kaXJlY3QtaW8uYy01MjAtXFx0ICogcGFnZSBmYXVsdCBlcnJvciB3aGVuIHRyeWluZyB0byBmYXVsdCBpbiBwYWdlcyBmb3IgdGhlIGJ1ZmZlciB0aGF0IGlzXFxuZnMvYnRyZnMvZGlyZWN0LWlvLmM6NTIxOlxcdCAqIGFzc29jaWF0ZWQgdG8gdGhlIHN0cnVjdCBpb3ZfaXRlciBwYXNzZWQgdG8gaW9tYXBfZGlvX3J3KCksIGFuZCB3ZVxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTUyMi1cXHQgKiBoYXZlIHByZXZpb3VzbHkgc3VibWl0dGVkIGJpb3MgZm9yIG90aGVyIGV4dGVudHMgaW4gdGhlIHJhbmdlLCBpblxcbmZzL2J0cmZzL2RpcmVjdC1pby5jOjUyMzpcXHQgKiB3aGljaCBjYXNlIGlvbWFwX2Rpb19ydygpIG1heSByZXR1cm4gdXMgRUlPQ0JRVUVVRUQgaWYgbm90IGFsbCBvZlxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTUyNC1cXHQgKiB0aG9zZSBiaW9zIGhhdmUgY29tcGxldGVkIGJ5IHRoZSB0aW1lIHdlIGdldCB0aGUgcGFnZSBmYXVsdCBlcnJvcixcXG4tLVxcbmZzL2J0cmZzL2RpcmVjdC1pby5jPTgxMz1zdGF0aWMgc3NpemVfdCBidHJmc19kaW9fcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTgxNy1cXG5mcy9idHJmcy9kaXJlY3QtaW8uYzo4MTg6XFx0cmV0dXJuIGlvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLCBcXHUwMDI2YnRyZnNfZGlvX2lvbWFwX29wcywgXFx1MDAyNmJ0cmZzX2Rpb19vcHMsXFxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtODE5LVxcdFxcdFxcdCAgICBJT01BUF9ESU9fUEFSVElBTCB8IElPTUFQX0RJT19GU0JMT0NLX0FMSUdORUQsIFxcdTAwMjZkYXRhLCBkb25lX2JlZm9yZSk7XFxuLS1cXG5mcy9idHJmcy9kaXJlY3QtaW8uYz04MjI9c3RhdGljIHN0cnVjdCBpb21hcF9kaW8gKmJ0cmZzX2Rpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTgyNi1cXG5mcy9idHJmcy9kaXJlY3QtaW8uYzo4Mjc6XFx0cmV0dXJuIF9faW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIFxcdTAwMjZidHJmc19kaW9faW9tYXBfb3BzLCBcXHUwMDI2YnRyZnNfZGlvX29wcyxcXG5mcy9idHJmcy9kaXJlY3QtaW8uYy04MjgtXFx0XFx0XFx0ICAgIElPTUFQX0RJT19QQVJUSUFMIHwgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRCwgXFx1MDAyNmRhdGEsIGRvbmVfYmVmb3JlKTtcXG4tLVxcbmZzL2Vyb2ZzL2RhdGEuYz00NDc9c3RhdGljIHNzaXplX3QgZXJvZnNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbi0tXFxuZnMvZXJvZnMvZGF0YS5jLTQ2Mi1cXG5mcy9lcm9mcy9kYXRhLmM6NDYzOlxcdFxcdHJldHVybiBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFxcdTAwMjZlcm9mc19pb21hcF9vcHMsXFxuZnMvZXJvZnMvZGF0YS5jLTQ2NC1cXHRcXHRcXHRcXHQgICAgTlVMTCwgMCwgXFx1MDAyNml0ZXJfY3R4LCAwKTtcXG4tLVxcbmZzL2V4ZmF0L2ZpbGUuYz03MDg9c3RhdGljIHNzaXplX3QgZXhmYXRfZGlvX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9leGZhdC9maWxlLmMtNzExLVxcbmZzL2V4ZmF0L2ZpbGUuYzo3MTI6XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIFxcdTAwMjZleGZhdF93cml0ZV9pb21hcF9vcHMsXFxuZnMvZXhmYXQvZmlsZS5jLTcxMy1cXHRcXHRcXHRcXHUwMDI2ZXhmYXRfd3JpdGVfZGlvX29wcywgMCwgTlVMTCwgMCk7XFxuLS1cXG5mcy9leGZhdC9maWxlLmM9ODAwPXN0YXRpYyBzc2l6ZV90IGV4ZmF0X2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxcbi0tXFxuZnMvZXhmYXQvZmlsZS5jLTgxMS1cXHRcXHRmaWxlX2FjY2Vzc2VkKGlvY2ItXFx1MDAzZWtpX2ZpbHApO1xcbmZzL2V4ZmF0L2ZpbGUuYzo4MTI6XFx0XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIFxcdTAwMjZleGZhdF9pb21hcF9vcHMsIE5VTEwsIDAsXFxuZnMvZXhmYXQvZmlsZS5jLTgxMy1cXHRcXHRcXHRcXHROVUxMLCAwKTtcXG4tLVxcbmZzL2V4dDIvZmlsZS5jPTUwPXN0YXRpYyBzc2l6ZV90IGV4dDJfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9leHQyL2ZpbGUuYy01Ny1cXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XFxuZnMvZXh0Mi9maWxlLmM6NTg6XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIHRvLCBcXHUwMDI2ZXh0Ml9pb21hcF9vcHMsIE5VTEwsIDAsIE5VTEwsIDApO1xcbmZzL2V4dDIvZmlsZS5jLTU5LVxcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xcbi0tXFxuZnMvZXh0Mi9maWxlLmM9NjU9c3RhdGljIGludCBleHQyX2Rpb193cml0ZV9lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXFxuLS1cXG5mcy9leHQyL2ZpbGUuYy03NS1cXHQgKiBJZiB3ZSBhcmUgZXh0ZW5kaW5nIHRoZSBmaWxlLCB3ZSBoYXZlIHRvIHVwZGF0ZSBpX3NpemUgaGVyZSBiZWZvcmVcXG5mcy9leHQyL2ZpbGUuYzo3NjpcXHQgKiBwYWdlIGNhY2hlIGdldHMgaW52YWxpZGF0ZWQgaW4gaW9tYXBfZGlvX3J3KCkuIFRoaXMgcHJldmVudHMgcmFjaW5nXFxuZnMvZXh0Mi9maWxlLmMtNzctXFx0ICogYnVmZmVyZWQgcmVhZHMgZnJvbSB6ZXJvaW5nIG91dCB0b28gbXVjaCBmcm9tIHBhZ2UgY2FjaGUgcGFnZXMuXFxuLS1cXG5mcy9leHQyL2ZpbGUuYz05Nj1zdGF0aWMgc3NpemVfdCBleHQyX2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZnMvZXh0Mi9maWxlLmMtMTIxLVxcbmZzL2V4dDIvZmlsZS5jOjEyMjpcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXFx1MDAyNmV4dDJfaW9tYXBfb3BzLCBcXHUwMDI2ZXh0Ml9kaW9fd3JpdGVfb3BzLFxcbmZzL2V4dDIvZmlsZS5jLTEyMy1cXHRcXHRcXHQgICBmbGFncywgTlVMTCwgMCk7XFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy00Ni0gKiBhbnkgc3BlY2lhbCBmZWF0dXJlcyBsaWtlIGVuY3J5cHRpb24gb3IgdmVyaXR5LCBleHQ0IGhhcyB0cmFkaXRpb25hbGx5XFxuZnMvZXh0NC9maWxlLmM6NDc6ICogcmV0dXJuZWQgRUlOVkFMIGZvciBtaXNhbGlnbmVkIERJTy4gIGlvbWFwX2Rpb19ydygpIHVzZXMgdGhpcyBjb252ZW50aW9uIHRvby5cXG5mcy9leHQ0L2ZpbGUuYy00OC0gKiBJbiB0aGlzIGNhc2UsIHdlIHNob3VsZCBhdHRlbXB0IHRoZSBESU8sICpub3QqIGZhbGwgYmFjayB0byBidWZmZXJlZCBJL08uXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz02OT1zdGF0aWMgc3NpemVfdCBleHQ0X2Rpb19yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbi0tXFxuZnMvZXh0NC9maWxlLmMtOTUtXFx0aWYgKHJldCA9PSAtRU5PVEJMSylcXG5mcy9leHQ0L2ZpbGUuYzo5NjpcXHRcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFxcdTAwMjZleHQ0X2lvbWFwX29wcywgTlVMTCwgMCwgTlVMTCwgMCk7XFxuZnMvZXh0NC9maWxlLmMtOTctXFx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz01MjE9c3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL2V4dDQvZmlsZS5jLTU5My1cXG5mcy9leHQ0L2ZpbGUuYzo1OTQ6XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIFxcdTAwMjZleHQ0X2lvbWFwX29wcywgXFx1MDAyNmV4dDRfZGlvX3dyaXRlX29wcyxcXG5mcy9leHQ0L2ZpbGUuYy01OTUtXFx0XFx0XFx0ICAgZGlvX2ZsYWdzLCBOVUxMLCAwKTtcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTQ4NDk9c3RhdGljIHNzaXplX3QgZjJmc19kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTQ4ODEtXFx0LypcXG5mcy9mMmZzL2ZpbGUuYzo0ODgyOlxcdCAqIFdlIGhhdmUgdG8gdXNlIF9faW9tYXBfZGlvX3J3KCkgYW5kIGlvbWFwX2Rpb19jb21wbGV0ZSgpIGluc3RlYWQgb2ZcXG5mcy9mMmZzL2ZpbGUuYzo0ODgzOlxcdCAqIHRoZSBoaWdoZXItbGV2ZWwgZnVuY3Rpb24gaW9tYXBfZGlvX3J3KCkgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgdGhlXFxuZnMvZjJmcy9maWxlLmMtNDg4NC1cXHQgKiBGMkZTX0RJT19SRUFEIGNvdW50ZXIgd2lsbCBiZSBkZWNyZW1lbnRlZCBjb3JyZWN0bHkgaW4gYWxsIGNhc2VzLlxcbi0tXFxuZnMvZjJmcy9maWxlLmMtNDg4Ni1cXHRpbmNfcGFnZV9jb3VudChzYmksIEYyRlNfRElPX1JFQUQpO1xcbmZzL2YyZnMvZmlsZS5jOjQ4ODc6XFx0ZGlvID0gX19pb21hcF9kaW9fcncoaW9jYiwgdG8sIFxcdTAwMjZmMmZzX2lvbWFwX29wcyxcXG5mcy9mMmZzL2ZpbGUuYy00ODg4LVxcdFxcdFxcdCAgICAgXFx1MDAyNmYyZnNfaW9tYXBfZGlvX3JlYWRfb3BzLCAwLCBOVUxMLCAwKTtcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTUxNjY9c3RhdGljIHNzaXplX3QgZjJmc19kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTUyMTQtXFx0LypcXG5mcy9mMmZzL2ZpbGUuYzo1MjE1OlxcdCAqIFdlIGhhdmUgdG8gdXNlIF9faW9tYXBfZGlvX3J3KCkgYW5kIGlvbWFwX2Rpb19jb21wbGV0ZSgpIGluc3RlYWQgb2ZcXG5mcy9mMmZzL2ZpbGUuYzo1MjE2OlxcdCAqIHRoZSBoaWdoZXItbGV2ZWwgZnVuY3Rpb24gaW9tYXBfZGlvX3J3KCkgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgdGhlXFxuZnMvZjJmcy9maWxlLmMtNTIxNy1cXHQgKiBGMkZTX0RJT19XUklURSBjb3VudGVyIHdpbGwgYmUgZGVjcmVtZW50ZWQgY29ycmVjdGx5IGluIGFsbCBjYXNlcy5cXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTUyMjItXFx0XFx0ZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19GT1JDRV9XQUlUO1xcbmZzL2YyZnMvZmlsZS5jOjUyMjM6XFx0ZGlvID0gX19pb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXFx1MDAyNmYyZnNfaW9tYXBfb3BzLFxcbmZzL2YyZnMvZmlsZS5jLTUyMjQtXFx0XFx0XFx0ICAgICBcXHUwMDI2ZjJmc19pb21hcF9kaW9fd3JpdGVfb3BzLCBkaW9fZmxhZ3MsIGlvY2IsIDApO1xcbi0tXFxuZnMvZjJmcy9maWxlLmMtNTI3NC1cXHR9IGVsc2Uge1xcbmZzL2YyZnMvZmlsZS5jOjUyNzU6XFx0XFx0LyogaW9tYXBfZGlvX3J3KCkgYWxyZWFkeSBoYW5kbGVkIHRoZSBnZW5lcmljX3dyaXRlX3N5bmMoKS4gKi9cXG5mcy9mMmZzL2ZpbGUuYy01Mjc2LVxcdFxcdCptYXlfbmVlZF9zeW5jID0gZmFsc2U7XFxuLS1cXG5mcy9nZnMyL2ZpbGUuYz04MTE9c3RhdGljIHNzaXplX3QgZ2ZzMl9maWxlX2RpcmVjdF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0byxcXG4tLVxcbmZzL2dmczIvZmlsZS5jLTgyNS1cXHQgKlxcbmZzL2dmczIvZmlsZS5jOjgyNjpcXHQgKiBVbmxpa2UgZ2VuZXJpY19maWxlX3JlYWRfaXRlciwgZm9yIHJlYWRzLCBpb21hcF9kaW9fcncgY2FuIHRyaWdnZXJcXG5mcy9nZnMyL2ZpbGUuYy04MjctXFx0ICogcGh5c2ljYWwgYXMgd2VsbCBhcyBtYW51YWwgcGFnZSBmYXVsdHMsIGFuZCB3ZSBuZWVkIHRvIGRpc2FibGUgYm90aFxcbi0tXFxuZnMvZ2ZzMi9maWxlLmMtODQ2LVxcdHRvLVxcdTAwM2Vub2ZhdWx0ID0gdHJ1ZTtcXG5mcy9nZnMyL2ZpbGUuYzo4NDc6XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIHRvLCBcXHUwMDI2Z2ZzMl9pb21hcF9vcHMsIE5VTEwsXFxuZnMvZ2ZzMi9maWxlLmMtODQ4LVxcdFxcdFxcdCAgIElPTUFQX0RJT19QQVJUSUFMLCBOVUxMLCByZWFkKTtcXG4tLVxcbmZzL2dmczIvZmlsZS5jLTg1Mi1cXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuZnMvZ2ZzMi9maWxlLmM6ODUzOlxcdC8qIE5vIGluY3JlbWVudCAoKz0pIGJlY2F1c2UgaW9tYXBfZGlvX3J3IHJldHVybnMgYSBjdW11bGF0aXZlIHZhbHVlLiAqL1xcbmZzL2dmczIvZmlsZS5jLTg1NC1cXHRpZiAocmV0IFxcdTAwM2UgMClcXG4tLVxcbmZzL2dmczIvZmlsZS5jPTg3ND1zdGF0aWMgc3NpemVfdCBnZnMyX2ZpbGVfZGlyZWN0X3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbi0tXFxuZnMvZ2ZzMi9maWxlLmMtODkwLVxcdCAqXFxuZnMvZ2ZzMi9maWxlLmM6ODkxOlxcdCAqIEZvciB3cml0ZXMsIGlvbWFwX2Rpb19ydyBvbmx5IHRyaWdnZXJzIG1hbnVhbCBwYWdlIGZhdWx0cywgc28gd2VcXG5mcy9nZnMyL2ZpbGUuYy04OTItXFx0ICogZG9uJ3QgbmVlZCB0byBkaXNhYmxlIHBoeXNpY2FsIG9uZXMuXFxuLS1cXG5mcy9nZnMyL2ZpbGUuYy05MTItXFx0ZnJvbS1cXHUwMDNlbm9mYXVsdCA9IHRydWU7XFxuZnMvZ2ZzMi9maWxlLmM6OTEzOlxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcXHUwMDI2Z2ZzMl9pb21hcF9vcHMsIE5VTEwsXFxuZnMvZ2ZzMi9maWxlLmMtOTE0LVxcdFxcdFxcdCAgIElPTUFQX0RJT19QQVJUSUFMLCBOVUxMLCB3cml0dGVuKTtcXG4tLVxcbmZzL2dmczIvZmlsZS5jLTkyMS1cXHR9XFxuZnMvZ2ZzMi9maWxlLmM6OTIyOlxcdC8qIE5vIGluY3JlbWVudCAoKz0pIGJlY2F1c2UgaW9tYXBfZGlvX3J3IHJldHVybnMgYSBjdW11bGF0aXZlIHZhbHVlLiAqL1xcbmZzL2dmczIvZmlsZS5jLTkyMy1cXHRpZiAocmV0IFxcdTAwM2UgMClcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTQxOD1zdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTEzLVxcdFxcdCAqIFdyaXRlcyB0aGF0IGV4dGVuZCBpX3NpemUgYXJlIGFsc28gbm90IHN1cHBvcnRlZCwgYnV0IHRoaXMgaXNcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo1MTQ6XFx0XFx0ICogaGFuZGxlZCBpbiBfX2lvbWFwX2Rpb19ydygpLlxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTUxNS1cXHRcXHQgKi9cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY0OD1zdGF0aWMgaW50IGlvbWFwX2Rpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NzktLypcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2ODA6ICogaW9tYXBfZGlvX3J3KCkgYWx3YXlzIGNvbXBsZXRlcyBPX1tEXVNZTkMgd3JpdGVzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgSU9cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02ODEtICogaXMgYmVpbmcgaXNzdWVkIGFzIEFJTyBvciBub3QuICBUaGlzIGFsbG93cyB1cyB0byBvcHRpbWlzZSBwdXJlIGRhdGEgd3JpdGVzXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02ODgtICogV2hlbiBwYWdlIGZhdWx0cyBhcmUgZGlzYWJsZWQgYW5kIEBkaW9fZmxhZ3MgaW5jbHVkZXMgSU9NQVBfRElPX1BBUlRJQUwsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6Njg5OiAqIF9faW9tYXBfZGlvX3J3IGNhbiByZXR1cm4gYSBwYXJ0aWFsIHJlc3VsdCBpZiBpdCBlbmNvdW50ZXJzIGEgbm9uLXJlc2lkZW50XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjkwLSAqIHBhZ2UgaW4gQGl0ZXIgYWZ0ZXIgcHJlcGFyaW5nIGEgdHJhbnNmZXIuICBJbiB0aGF0IGNhc2UsIHRoZSBub24tcmVzaWRlbnRcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY5OT1zdHJ1Y3QgaW9tYXBfZGlvICpcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo3MDA6X19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNzAxLVxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy03MTctXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NzE4OlxcdHRyYWNlX2lvbWFwX2Rpb19yd19iZWdpbihpb2NiLCBpdGVyLCBkaW9fZmxhZ3MsIGRvbmVfYmVmb3JlKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy03MTktXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04ODgtXFx0XFx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uKSB7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODg5OlxcdFxcdFxcdHRyYWNlX2lvbWFwX2Rpb19yd19xdWV1ZWQoaW5vZGUsIGlvbWkucG9zLCBpb21pLmxlbik7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODkwLVxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU9DQlFVRVVFRCk7XFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTAtfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkxMTpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19ydyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTEyLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTkxMz1zc2l6ZV90XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTE0OmlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTUtXFx0XFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLCBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyAqZG9wcyxcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxOS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MjA6XFx0ZGlvID0gX19pb21hcF9kaW9fcncoaW9jYiwgaXRlciwgb3BzLCBkb3BzLCBkaW9fZmxhZ3MsIHByaXZhdGUsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTIxLVxcdFxcdFxcdCAgICAgZG9uZV9iZWZvcmUpO1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTI1LX1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MjY6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX3J3KTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MjctXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz0xMDAyPXNzaXplX3QgX19pb21hcF9kaW9fcmVhZF9zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDMwLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMzE6XFx0dHJhY2VfaW9tYXBfZGlvX3J3X2JlZ2luKGlvY2IsIGl0ZXIsIDAsIDApO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMzItXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDc2LVxcdHN1Ym1pdF9iaW8oYmlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDc3OlxcdHRyYWNlX2lvbWFwX2Rpb19yd19xdWV1ZWQoaW9taS1cXHUwMDNlaW5vZGUsIGlvY2ItXFx1MDAzZWtpX3BvcywgaW9taS1cXHUwMDNlbGVuKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDc4LVxcdHJldHVybiAtRUlPQ0JRVUVVRUQ7XFxuLS1cXG5mcy9pb21hcC90cmFjZS5oPTg1PURFRklORV9SQU5HRV9FVkVOVChpb21hcF9kaW9faW52YWxpZGF0ZV9mYWlsKTtcXG5mcy9pb21hcC90cmFjZS5oOjg2OkRFRklORV9SQU5HRV9FVkVOVChpb21hcF9kaW9fcndfcXVldWVkKTtcXG5mcy9pb21hcC90cmFjZS5oLTg3LURFRklORV9SQU5HRV9FVkVOVChpb21hcF96ZXJvX2l0ZXIpO1xcbi0tXFxuZnMvaW9tYXAvdHJhY2UuaD0yMjA9VFJBQ0VfRVZFTlQoaW9tYXBfaXRlcixcXG4tLVxcbmZzL2lvbWFwL3RyYWNlLmgtMjU1LVxcbmZzL2lvbWFwL3RyYWNlLmg6MjU2OlRSQUNFX0VWRU5UKGlvbWFwX2Rpb19yd19iZWdpbixcXG5mcy9pb21hcC90cmFjZS5oLTI1Ny1cXHRUUF9QUk9UTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL25pbGZzMi9maWxlLmM9MTQ1PXN0YXRpYyBzc2l6ZV90IG5pbGZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG4tLVxcbmZzL25pbGZzMi9maWxlLmMtMTQ3LVxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRElSRUNUKSB7XFxuZnMvbmlsZnMyL2ZpbGUuYzoxNDg6XFx0XFx0cmV0dXJuIGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXFx1MDAyNm5pbGZzX2lvbWFwX29wcyxcXG5mcy9uaWxmczIvZmlsZS5jLTE0OS1cXHRcXHRcXHRcXHQgICAgTlVMTCwgMCwgTlVMTCwgMCk7XFxuLS1cXG5mcy9udGZzL2ZpbGUuYz00Mzg9c3RhdGljIHNzaXplX3QgbnRmc19maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9udGZzL2ZpbGUuYy00NjAtXFx0XFx0ZmlsZV9hY2Nlc3NlZChpb2NiLVxcdTAwM2VraV9maWxwKTtcXG5mcy9udGZzL2ZpbGUuYzo0NjE6XFx0XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIHRvLCBcXHUwMDI2bnRmc19yZWFkX2lvbWFwX29wcywgTlVMTCwgMCxcXG5mcy9udGZzL2ZpbGUuYy00NjItXFx0XFx0XFx0XFx0TlVMTCwgMCk7XFxuLS1cXG5mcy9udGZzL2ZpbGUuYz00OTU9c3RhdGljIHNzaXplX3QgbnRmc19kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTQ5OC1cXG5mcy9udGZzL2ZpbGUuYzo0OTk6XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIFxcdTAwMjZudGZzX2Rpb19pb21hcF9vcHMsXFxuZnMvbnRmcy9maWxlLmMtNTAwLVxcdFxcdFxcdFxcdTAwMjZudGZzX3dyaXRlX2Rpb19vcHMsIDAsIE5VTEwsIDApO1xcbi0tXFxuZnMvbnRmczMvZmlsZS5jPTgxNT1zdGF0aWMgc3NpemVfdCBudGZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxcbi0tXFxuZnMvbnRmczMvZmlsZS5jLTg3NC1cXG5mcy9udGZzMy9maWxlLmM6ODc1OlxcdFxcdGVyciA9IGlvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLCBcXHUwMDI2bnRmc19pb21hcF9vcHMsIE5VTEwsIGRpb19mbGFncyxcXG5mcy9udGZzMy9maWxlLmMtODc2LVxcdFxcdFxcdFxcdCAgIE5VTEwsIDApO1xcbi0tXFxuZnMvbnRmczMvZmlsZS5jPTEyMjA9c3RhdGljIHNzaXplX3QgbnRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9udGZzMy9maWxlLmMtMTMwNS1cXG5mcy9udGZzMy9maWxlLmM6MTMwNjpcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXFx1MDAyNm50ZnNfaW9tYXBfb3BzLCBOVUxMLFxcbmZzL250ZnMzL2ZpbGUuYy0xMzA3LVxcdFxcdFxcdCAgIElPTUFQX0RJT19GT1JDRV9XQUlULCBOVUxMLCAwKTtcXG4tLVxcbmZzL250ZnMzL2lub2RlLmM9Njc2PWludCBudGZzX3NldF9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBuZXdfc2l6ZSlcXG4tLVxcbmZzL250ZnMzL2lub2RlLmMtNzE4LSAqIC0gaW9tYXBfdHJ1bmNhdGVfcGFnZVxcbmZzL250ZnMzL2lub2RlLmM6NzE5OiAqIC0gaW9tYXBfZGlvX3J3XFxuZnMvbnRmczMvaW5vZGUuYy03MjAtICogLSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlXFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYz0yNDk9eGZzX2ZpbGVfZGlvX3JlYWQoXFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYy0yNjYtXFx0aWYgKG1hcHBpbmdfc3RhYmxlX3dyaXRlcyhpb2NiLVxcdTAwM2VraV9maWxwLVxcdTAwM2VmX21hcHBpbmcpKSB7XFxuZnMveGZzL3hmc19maWxlLmM6MjY3OlxcdFxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXFx1MDAyNnhmc19yZWFkX2lvbWFwX29wcyxcXG5mcy94ZnMveGZzX2ZpbGUuYy0yNjgtXFx0XFx0XFx0XFx0XFx1MDAyNnhmc19kaW9fcmVhZF9ib3VuY2Vfb3BzLCBJT01BUF9ESU9fQk9VTkNFLFxcbi0tXFxuZnMveGZzL3hmc19maWxlLmMtMjcyLVxcdFxcdGlmIChyZXQgPT0gLUVOT1RCTEspXFxuZnMveGZzL3hmc19maWxlLmM6MjczOlxcdFxcdFxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXFx1MDAyNnhmc19yZWFkX2lvbWFwX29wcywgTlVMTCxcXG5mcy94ZnMveGZzX2ZpbGUuYy0yNzQtXFx0XFx0XFx0XFx0XFx0MCwgTlVMTCwgMCk7XFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYz03NDM9eGZzX2ZpbGVfZGlvX3dyaXRlX2FsaWduZWQoXFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYy03ODEtXFx0dHJhY2VfeGZzX2ZpbGVfZGlyZWN0X3dyaXRlKGlvY2IsIGZyb20pO1xcbmZzL3hmcy94ZnNfZmlsZS5jOjc4MjpcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgb3BzLCBkb3BzLCBkaW9fZmxhZ3MsIGFjLCAwKTtcXG5mcy94ZnMveGZzX2ZpbGUuYy03ODMtb3V0X3VubG9jazpcXG4tLVxcbmZzL3hmcy94ZnNfZmlsZS5jPTgyMT14ZnNfZmlsZV9kaW9fd3JpdGVfYXRvbWljKFxcbi0tXFxuZnMveGZzL3hmc19maWxlLmMtODU3LVxcdFxcdGRpb19mbGFncyB8PSBJT01BUF9ESU9fQk9VTkNFO1xcbmZzL3hmcy94ZnNfZmlsZS5jOjg1ODpcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgZG9wcywgXFx1MDAyNnhmc19kaW9fd3JpdGVfb3BzLCBkaW9fZmxhZ3MsXFxuZnMveGZzL3hmc19maWxlLmMtODU5LVxcdFxcdFxcdE5VTEwsIDApO1xcbi0tXFxuZnMveGZzL3hmc19maWxlLmM9ODk3PXhmc19maWxlX2Rpb193cml0ZV91bmFsaWduZWQoXFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYy05NTEtXFx0dHJhY2VfeGZzX2ZpbGVfZGlyZWN0X3dyaXRlKGlvY2IsIGZyb20pO1xcbmZzL3hmcy94ZnNfZmlsZS5jOjk1MjpcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXFx1MDAyNnhmc19kaXJlY3Rfd3JpdGVfaW9tYXBfb3BzLFxcbmZzL3hmcy94ZnNfZmlsZS5jLTk1My1cXHRcXHRcXHQgICBcXHUwMDI2eGZzX2Rpb193cml0ZV9vcHMsIGZsYWdzLCBOVUxMLCAwKTtcXG4tLVxcbmZzL3pvbmVmcy9maWxlLmM9NDc0PXN0YXRpYyBzc2l6ZV90IHpvbmVmc19maWxlX2Rpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL3pvbmVmcy9maWxlLmMtNTI4LVxcdC8qXFxuZnMvem9uZWZzL2ZpbGUuYzo1Mjk6XFx0ICogaW9tYXBfZGlvX3J3KCkgbWF5IHJldHVybiBFTk9UQkxLIGlmIHRoZXJlIHdhcyBhbiBpc3N1ZSB3aXRoXFxuZnMvem9uZWZzL2ZpbGUuYy01MzAtXFx0ICogcGFnZSBpbnZhbGlkYXRpb24uIE92ZXJ3cml0ZSB0aGF0IGVycm9yIGNvZGUgd2l0aCBFQlVTWSBzbyB0aGF0XFxuLS1cXG5mcy96b25lZnMvZmlsZS5jLTUzMi1cXHQgKi9cXG5mcy96b25lZnMvZmlsZS5jOjUzMzpcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXFx1MDAyNnpvbmVmc193cml0ZV9pb21hcF9vcHMsXFxuZnMvem9uZWZzL2ZpbGUuYy01MzQtXFx0XFx0XFx0ICAgXFx1MDAyNnpvbmVmc193cml0ZV9kaW9fb3BzLCAwLCBOVUxMLCAwKTtcXG4tLVxcbmZzL3pvbmVmcy9maWxlLmM9NjM2PXN0YXRpYyBzc2l6ZV90IHpvbmVmc19maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy96b25lZnMvZmlsZS5jLTY3Ny1cXHRcXHRmaWxlX2FjY2Vzc2VkKGlvY2ItXFx1MDAzZWtpX2ZpbHApO1xcbmZzL3pvbmVmcy9maWxlLmM6Njc4OlxcdFxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXFx1MDAyNnpvbmVmc19yZWFkX2lvbWFwX29wcyxcXG5mcy96b25lZnMvZmlsZS5jLTY3OS1cXHRcXHRcXHRcXHQgICBcXHUwMDI2em9uZWZzX3JlYWRfZGlvX29wcywgMCwgTlVMTCwgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA3OjAwOjAwLjUwODQ3MzUxMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjkyMjI5MjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9tYXAgRGlyZWN0IEkvTyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgaW5pdGlhbCByZXZpZXcsIGl0J3MgY2xlYXIgdGhlIHJlbGV2YW50IGNvZGUgY2VudGVycyBhcm91bmQgdGhlIGBpb21hcF9kaW9faG9sZV9pdGVyYCBmdW5jdGlvbiBhbmQgaXRzIGludGVyYWN0aW9ucyB3aXRoIGRpcmVjdCBJL08uIEkndmUgZ290IHRvIGZvY3VzIG9uIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJL08gcGF0aC4gYGlvbWFwX2Rpb19yd2AgaXMgYSBrZXkgZW50cnkgcG9pbnQsIHVzZWQgYnkgbnVtZXJvdXMgZmlsZXN5c3RlbXMuIGBfX2lvbWFwX2Rpb19yd2AgaXMgbW9yZSBzcGVjaWZpYywgZGlyZWN0bHkgY2FsbGVkIGJ5IGBidHJmc2AgYW5kIGBmMmZzYCwgc28gdGhhdCdzIGRlZmluaXRlbHkgYSBzeW1ib2wgdG8gd2F0Y2guIEknbGwgZHJvcCBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgLCBzaW5jZSBpdCBzZWVtcyBsaWtlIHRoZSBwYXRjaCBmb2N1c2VzIG9uIGhvbGUgaGFuZGxpbmcsIGFuZCBub3QgYmFzaWMgcmVhZCBvcGVyYXRpb25zLlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMuIFRvIHByb3Blcmx5IHRlc3QgdGhpcywgSSdsbCBuZWVkIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBmaWxlc3lzdGVtcyB0aGF0IHVzZSBpb21hcCBhbmQgaGFuZGxlIGhvbGVzLiBgRVhUNF9GU2AsIGBYRlNfRlNgLCBhbmQgYEJUUkZTX0ZTYCBhcmUgZGVmaW5pdGVseSBlc3NlbnRpYWwuIEknbGwgYWRkIHRob3NlIHRvIGBFbmFibGVDb25maWdzYC4gR2l2ZW4gdGhhdCB0aGlzIHBhdGNoIGZvY3VzZXMgb24gaG93IGhvbGVzIGFyZSBoYW5kbGVkLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGZpbGVzeXN0ZW1zIGFyZSBlbmFibGVkLlxuXG5Mb29raW5nIGJhY2ssIHRoZSBwYXRjaCBleHBsaWNpdGx5IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIGBiZGV2YCBiZWluZyBOVUxMIHdpdGhpbiBgaW9tYXBfZGlvX2FsaWdubWVudGAgc3BlY2lmaWNhbGx5IGR1cmluZyBob2xlIHByb2Nlc3NpbmcuIFRoaXMgY29uZmlybXMgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gZGlyZWN0IEkvTyBmb3IgZmlsZXMgd2l0aCBob2xlcywgYXMgaXMgaGFuZGxlZCBieSwgYW1vbmcgb3RoZXJzLCBleHQ0LCB4ZnMsIGFuZCBidHJmcy5cblxuT2theSwgbGV0J3MgbWFrZSBzdXJlIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIHJpZ2h0LCBhbmQgdGhhdCBgRVhUNF9GU2AsIGBYRlNfRlNgLCBhbmQgYEJUUkZTX0ZTYCBhcmUgYWxsIHByb3Blcmx5IHNldC5cblxuQW5kIHRoZSBmb2N1cyBzeW1ib2xzPyBJIG5lZWQgdG8gcmVmaW5lIHRoYXQgbGlzdC4gR2l2ZW4gdGhhdCBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24gYW5kIHBvdGVudGlhbGx5IGlubGluZWQsIGl0J3MgbGlrZWx5IG5vdCB0aGUgYmVzdCBzeW1ib2wgZm9yIGFuYWx5c2lzLiBTaW5jZSB0aGUgcGF0Y2ggZGVhbHMgd2l0aCB0aGUgYWxpZ25tZW50IHN0ZXAsIEknbGwgc3RpY2sgdG8gYF9faW9tYXBfZGlvX3J3YCBhbmQgYGlvbWFwX2Rpb19yd2AsIHNpbmNlIHRob3NlIGFyZSBkZWZpbml0ZWx5IGV4cG9ydGVkIGFuZCBub3QgaW5saW5lZC5cblxuQWxyaWdodCwgd2l0aCB0aGVzZSBjb25maXJtZWQsIGl0J3MgdGltZSB0byBzZXQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTIwLCJPdXRwdXRUb2tlbnMiOjE3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNzowMDowOC44MDA3MDYyMjRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDE4NzA3MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiQlRSRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2lvbWFwX2Rpb19yd1wiLFxuICAgIFwiaW9tYXBfZGlvX3J3XCIsXG4gICAgXCJfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpb21hcF9kaW9fYWxpZ25tZW50YCB0byBoYW5kbGUgTlVMTCBgYmRldmAgZm9yIGhvbGUgY2FzZXMgYW5kIGBpb21hcF9kaW9faG9sZV9pdGVyYCB0byBhbGlnbiB0aGUgY29waWVkIGxlbmd0aCB0byB0aGUgYmxvY2sgc2l6ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJTyBwYXRoLiBJdCBjYW4gYmUgcmVhY2hlZCB2aWEgZGlyZWN0IElPIG9wZXJhdGlvbnMgb24gZmlsZXN5c3RlbXMgdGhhdCBzdXBwb3J0IGhvbGVzIGFuZCB1c2UgaW9tYXAgKGUuZy4sIGV4dDQsIHhmcywgYnRyZnMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiQlRSRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2lvbWFwX2Rpb19yd1wiLFxuICAgIFwiaW9tYXBfZGlvX3J3XCIsXG4gICAgXCJfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpb21hcF9kaW9fYWxpZ25tZW50YCB0byBoYW5kbGUgTlVMTCBgYmRldmAgZm9yIGhvbGUgY2FzZXMgYW5kIGBpb21hcF9kaW9faG9sZV9pdGVyYCB0byBhbGlnbiB0aGUgY29waWVkIGxlbmd0aCB0byB0aGUgYmxvY2sgc2l6ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJTyBwYXRoLiBJdCBjYW4gYmUgcmVhY2hlZCB2aWEgZGlyZWN0IElPIG9wZXJhdGlvbnMgb24gZmlsZXN5c3RlbXMgdGhhdCBzdXBwb3J0IGhvbGVzIGFuZCB1c2UgaW9tYXAgKGUuZy4sIGV4dDQsIHhmcywgYnRyZnMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowtrh8t[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 06:27:17 +0000 UTC FinishedAt: 2026-08-02 07:00:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "d0be43f25d0dd778b0185d67b8b9f4ab70e68154", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "XFS_FS", "BTRFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "d0be43f25d0dd778b0185d67b8b9f4ab70e68154", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "XFS_FS", "BTRFS_FS" ], "series_id": "aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__iomap_dio_rw", "iomap_dio_rw", "__iomap_dio_read_simple" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "c9f79a18-3316-44ec-b805-b805b1c49325", "8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDssCiAgICAmIzM0O0JUUkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19pb21hcF9kaW9fcncmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3J3JiMzNDssCiAgICAmIzM0O19faW9tYXBfZGlvX3JlYWRfc2ltcGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpb21hcF9kaW9fYWxpZ25tZW50YCB0byBoYW5kbGUgTlVMTCBgYmRldmAgZm9yIGhvbGUgY2FzZXMgYW5kIGBpb21hcF9kaW9faG9sZV9pdGVyYCB0byBhbGlnbiB0aGUgY29waWVkIGxlbmd0aCB0byB0aGUgYmxvY2sgc2l6ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJTyBwYXRoLiBJdCBjYW4gYmUgcmVhY2hlZCB2aWEgZGlyZWN0IElPIG9wZXJhdGlvbnMgb24gZmlsZXN5c3RlbXMgdGhhdCBzdXBwb3J0IGhvbGVzIGFuZCB1c2UgaW9tYXAgKGUuZy4sIGV4dDQsIHhmcywgYnRyZnMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTFlOGM2YTZjZWJmMzY4N2Y2NjMzYzg3Y2JjNWVjZjRkN2FkNmE1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMDY6NTk6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvZGlyZWN0LWlvLmMgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuaW5kZXggYjMzNjhkNjRlODFiYi4uMTBmMDAyMGRlNDc3MCAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuQEAgLTQwOSw3ICYjNDM7NDA5LDEwIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvbWFwX2Rpb19hbGlnbm1lbnQoc3RydWN0IGlub2RlICppbm9kZSxcbiB7XG4gXHRpZiAoZGlvX2ZsYWdzIFx1MDAyNiBJT01BUF9ESU9fRlNCTE9DS19BTElHTkVEKVxuIFx0XHRyZXR1cm4gaV9ibG9ja3NpemUoaW5vZGUpO1xuLVx0cmV0dXJuIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpO1xuJiM0MztcdC8qIEBiZGV2IGNhbiBiZSBOVUxMIGZvciBob2xlIGNhc2VzLiAqL1xuJiM0MztcdGlmIChiZGV2KVxuJiM0MztcdFx0cmV0dXJuIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpO1xuJiM0MztcdHJldHVybiBTRUNUT1JfU0laRTtcbiB9XG4gXG4gc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbkBAIC01OTQsMTIgJiM0Mzs1OTcsMjAgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiBcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiB7XG4tXHRsb2ZmX3QgbGVuZ3RoID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cdTAwM2VzdWJtaXQuaXRlcik7XG4mIzQzO1x0bG9mZl90IGNvcGllZCA9IGlvdl9pdGVyX3plcm8oaW9tYXBfbGVuZ3RoKGl0ZXIpLCBkaW8tXHUwMDNlc3VibWl0Lml0ZXIpO1xuJiM0MztcdHVuc2lnbmVkIGludCBicyA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaXRlci1cdTAwM2Vpbm9kZSwgaXRlci1cdTAwM2Vpb21hcC5iZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgZGlvLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRsb2ZmX3QgYWxpZ25lZF9jb3BpZWQgPSByb3VuZF9kb3duKGNvcGllZCwgYnMpO1xuIFxuLVx0ZGlvLVx1MDAzZXNpemUgJiM0Mzs9IGxlbmd0aDtcbi1cdGlmICghbGVuZ3RoKVxuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgZnMgYmxvY2sgc2l6ZSBpcyBsYXJnZXIgdGhhbiBwYWdlIHNpemUsIHBhZ2UgZmF1bHQgZmFpbHVyZVxuJiM0MztcdCAqIGNhbiBjYXVzZSBAY29waWVkIHRvIGJlIHBhZ2UgYWxpZ25lZCBidXQgbm90IGZzIGJsb2NrIGFsaWduZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW92X2l0ZXJfcmV2ZXJ0KGRpby1cdTAwM2VzdWJtaXQuaXRlciwgY29waWVkIC0gYWxpZ25lZF9jb3BpZWQpO1xuJiM0MztcdGRpby1cdTAwM2VzaXplICYjNDM7PSBhbGlnbmVkX2NvcGllZDtcbiYjNDM7XHRpZiAoIWFsaWduZWRfY29waWVkKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdHJldHVybiBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgbGVuZ3RoKTtcbiYjNDM7XHRyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGFsaWduZWRfY29waWVkKTtcbiB9XG4gXG4gc3RhdGljIGludCBpb21hcF9kaW9faW5saW5lX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKmlvbWksIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtYRlNfRlMmIzM0OywKICAgICYjMzQ7QlRSRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2lvbWFwX2Rpb19ydyYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fcncmIzM0OywKICAgICYjMzQ7X19pb21hcF9kaW9fcmVhZF9zaW1wbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGlvbWFwX2Rpb19hbGlnbm1lbnRgIHRvIGhhbmRsZSBOVUxMIGBiZGV2YCBmb3IgaG9sZSBjYXNlcyBhbmQgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIHRvIGFsaWduIHRoZSBjb3BpZWQgbGVuZ3RoIHRvIHRoZSBibG9jayBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9tYXAgZGlyZWN0IElPIHBhdGguIEl0IGNhbiBiZSByZWFjaGVkIHZpYSBkaXJlY3QgSU8gb3BlcmF0aW9ucyBvbiBmaWxlc3lzdGVtcyB0aGF0IHN1cHBvcnQgaG9sZXMgYW5kIHVzZSBpb21hcCAoZS5nLiwgZXh0NCwgeGZzLCBidHJmcykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhMWU4YzZhNmNlYmYzNjg3ZjY2MzNjODdjYmM1ZWNmNGQ3YWQ2YTU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMiAwNjo1OToxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmMKaW5kZXggYjMzNjhkNjRlODFiYi4uMTBmMDAyMGRlNDc3MCAxMDA2NDQKLS0tIGEvZnMvaW9tYXAvZGlyZWN0LWlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW9tYXAvZGlyZWN0LWlvLmMKQEAgLTQwOSw3ICYjNDM7NDA5LDEwIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvbWFwX2Rpb19hbGlnbm1lbnQoc3RydWN0IGlub2RlICppbm9kZSwKIHsKIAlpZiAoZGlvX2ZsYWdzICZhbXA7IElPTUFQX0RJT19GU0JMT0NLX0FMSUdORUQpCiAJCXJldHVybiBpX2Jsb2Nrc2l6ZShpbm9kZSk7Ci0JcmV0dXJuIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpOwomIzQzOwkvKiBAYmRldiBjYW4gYmUgTlVMTCBmb3IgaG9sZSBjYXNlcy4gKi8KJiM0MzsJaWYgKGJkZXYpCiYjNDM7CQlyZXR1cm4gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoYmRldik7CiYjNDM7CXJldHVybiBTRUNUT1JfU0laRTsKIH0KIAogc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbykKQEAgLTU5NCwxMiAmIzQzOzU5NywyMCBAQCBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKQogCiBzdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbykKIHsKLQlsb2ZmX3QgbGVuZ3RoID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby0mZ3Q7c3VibWl0Lml0ZXIpOwomIzQzOwlsb2ZmX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby0mZ3Q7c3VibWl0Lml0ZXIpOwomIzQzOwl1bnNpZ25lZCBpbnQgYnMgPSBpb21hcF9kaW9fYWxpZ25tZW50KGl0ZXItJmd0O2lub2RlLCBpdGVyLSZndDtpb21hcC5iZGV2LAomIzQzOwkJCQkJICAgICAgZGlvLSZndDtmbGFncyk7CiYjNDM7CWxvZmZfdCBhbGlnbmVkX2NvcGllZCA9IHJvdW5kX2Rvd24oY29waWVkLCBicyk7CiAKLQlkaW8tJmd0O3NpemUgJiM0Mzs9IGxlbmd0aDsKLQlpZiAoIWxlbmd0aCkKJiM0MzsJLyoKJiM0MzsJICogSWYgZnMgYmxvY2sgc2l6ZSBpcyBsYXJnZXIgdGhhbiBwYWdlIHNpemUsIHBhZ2UgZmF1bHQgZmFpbHVyZQomIzQzOwkgKiBjYW4gY2F1c2UgQGNvcGllZCB0byBiZSBwYWdlIGFsaWduZWQgYnV0IG5vdCBmcyBibG9jayBhbGlnbmVkLgomIzQzOwkgKi8KJiM0MzsJaW92X2l0ZXJfcmV2ZXJ0KGRpby0mZ3Q7c3VibWl0Lml0ZXIsIGNvcGllZCAtIGFsaWduZWRfY29waWVkKTsKJiM0MzsJZGlvLSZndDtzaXplICYjNDM7PSBhbGlnbmVkX2NvcGllZDsKJiM0MzsJaWYgKCFhbGlnbmVkX2NvcGllZCkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBsZW5ndGgpOwomIzQzOwlyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGFsaWduZWRfY29waWVkKTsKIH0KIAogc3RhdGljIGludCBpb21hcF9kaW9faW5saW5lX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKmlvbWksIHN0cnVjdCBpb21hcF9kaW8gKmRpbykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ3NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERpcmVjdCBJL08gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGZzL2lvbWFwL2RpcmVjdC1pby5jYC4gVGhlIGtleSBjaGFuZ2VzIHNlZW0gdG8gcmV2b2x2ZSBhcm91bmQgaGFuZGxpbmcgbnVsbCBibG9jayBkZXZpY2VzIGluIGBpb21hcF9kaW9fYWxpZ25tZW50YCBhbmQgYWxpZ25pbmcgdGhlIGNvcGllZCBsZW5ndGggd2l0aGluIGBpb21hcF9kaW9faG9sZV9pdGVyYC4gU3BlY2lmaWNhbGx5LCB3aXRoIHRoZSBudWxsIGBiZGV2YCwgaXQmIzM5O3Mgbm93IHJldHVybmluZyBgU0VDVE9SX1NJWkVgLCBhbmQgaW4gdGhlIGhvbGUgaXRlcmF0b3IsIGl0JiMzOTtzIGFsaWduaW5nIHRoZSBgaW92X2l0ZXJfemVyb2AgbGVuZ3RoIHRvIHRoZSBibG9jayBzaXplLCBlZmZlY3RpdmVseSByZW1vdmluZyBhbnkgdW5hbGlnbmVkIGRhdGEuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGhlcmUuIExldCYjMzk7cyBkaWcgaW50byB0aGUgY29kZSBpdHNlbGYuIEkmIzM5O2xsIG9wZW4gdXAgYGZzL2lvbWFwL2RpcmVjdC1pby5jYCBhbmQgbG9jYXRlIHRoZXNlIGZ1bmN0aW9ucywgYGlvbWFwX2Rpb19hbGlnbm1lbnRgIGFuZCBgaW9tYXBfZGlvX2hvbGVfaXRlcmAuIEFoLCBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgaXMgc3RhdGljLCB3aGljaCBtZWFucyBpdCYjMzk7cyBsaWtlbHkgY2FsbGVkIHdpdGhpbiB0aGUgc2FtZSBmaWxlLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGxlcnMgdG8gZnVsbHkgZ3Jhc3AgaG93IHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIG92ZXJhbGwgRGlyZWN0IEkvTyBmbG93LiBNeSBpbnR1aXRpb24gc2F5cyBgaW9tYXBfZGlvX2l0ZXJgIG9yIGEgc2ltaWxhciBmdW5jdGlvbiBpcyB0aGUgb2J2aW91cyBjYW5kaWRhdGUuIFRpbWUgdG8gY29uZmlybSBteSBoeXBvdGhlc2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvbWFwX2Rpb19ob2xlX2l0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYz00MTg9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01OTctXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo1OTg6c3RhdGljIGludCBpb21hcF9kaW9faG9sZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01OTkte1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY0OD1zdGF0aWMgaW50IGlvbWFwX2Rpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjUzLVx0XHRcdHJldHVybiAtRUlPO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjU0Olx0XHRyZXR1cm4gaW9tYXBfZGlvX2hvbGVfaXRlcihpdGVyLCBkaW8pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjU1LVx0Y2FzZSBJT01BUF9VTldSSVRURU46XG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTYtXHRcdGlmICghKGRpby1cdTAwM2VmbGFncyBcdTAwMjYgSU9NQVBfRElPX1dSSVRFKSlcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY1NzpcdFx0XHRyZXR1cm4gaW9tYXBfZGlvX2hvbGVfaXRlcihpdGVyLCBkaW8pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjU4LVx0XHRyZXR1cm4gaW9tYXBfZGlvX2Jpb19pdGVyKGl0ZXIsIGRpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMwMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gRGlyZWN0IEkvTyBJdGVyYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIERpcmVjdCBJL08gaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB0aGUgcGFydHMgdGhhdCBoYW5kbGUgdGhlIGFjdHVhbCBkYXRhIHRyYW5zZmVycy4gTXkgbWluZCBpcyBpbW1lZGlhdGVseSBkcmF3biB0byBgaW9tYXBfZGlvX2l0ZXJgLiBUaGF0IGZ1bmN0aW9uIGlzIGtleSwgYmVjYXVzZSBpdCYjMzk7cyB3aGVyZSB0aGUgaXRlcmF0aXZlIGxvZ2ljIGZvciBEaXJlY3QgSS9PIHJlYWRzIGFuZCB3cml0ZXMgcmVhbGx5IGtpY2tzIGluLiBJdCYjMzk7cyB0aGUgZW5naW5lLgoKQW5kIHdoZXJlIGRvZXMgdGhpcyBlbmdpbmUgZ2V0IHN0YXJ0ZWQ/ICBBaCwgeWVzLCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgX19pb21hcF9kaW9fcndgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIERpcmVjdCBJL08gcmVhZC93cml0ZSBmdW5jdGlvbiwgdGhlIG9uZSB0aGF0IG9yY2hlc3RyYXRlcyB0aGUgb3ZlcmFsbCBwcm9jZXNzLCBzZXRzIHVwIHRoZSBpbml0aWFsIGNvbmRpdGlvbnMsIGFuZCB0aGVuIHByZXN1bWFibHkgaGFuZHMgb2ZmIHRoZSBpdGVyYXRpdmUgd29ya2xvYWQgdG8gYGlvbWFwX2Rpb19pdGVyYC4gU28sIGBfX2lvbWFwX2Rpb19yd2Agc2V0cyB0aGUgc3RhZ2UgYW5kIGBpb21hcF9kaW9faXRlcmAgZG9lcyB0aGUgaGVhdnkgbGlmdGluZywgYmxvY2sgYnkgYmxvY2ssIGJ5dGUgYnkgYnl0ZS4gIFVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRob3NlIHR3byBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwZXJmb3JtYW5jZSBhbmQgZWZmaWNpZW5jeSBvZiBEaXJlY3QgSS9PLiBOZWVkIHRvIGRpZyBpbnRvIHRoYXQgY29udHJvbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvbWFwX2Rpb19pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjE2PXN0YXRpYyBpbnQgaW9tYXBfZGlvX2lubGluZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjQ3LVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjQ4OnN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY0OS17XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NzAwPV9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTgyNS1cdHdoaWxlICgocmV0ID0gaW9tYXBfaXRlcihcdTAwMjZpb21pLCBvcHMpKSBcdTAwM2UgMCkge1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODI2Olx0XHRpb21pLnN0YXR1cyA9IGlvbWFwX2Rpb19pdGVyKFx1MDAyNmlvbWksIGRpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy04MjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg4NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBzdW1tYXJ5IGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3ZWxsLXZlcnNlZCBpbiBJL08gb3BlcmF0aW9ucyBhbmQgdGhlIGlvbWFwIHN1YnN5c3RlbToKCioqRGlyZWN0IEkvTyBpbiB0aGUgaW9tYXAgY29udGV4dCoqCgpSaWdodCwgc28gYF9faW9tYXBfZGlvX3J3YCBpcyB0aGUgbHluY2hwaW4gZnVuY3Rpb24gZm9yIGRpcmVjdCBJL08gd2l0aGluIHRoZSBpb21hcCBmcmFtZXdvcmsuIFRoYXQmIzM5O3MgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIgd2hlbiBkZWFsaW5nIHdpdGggYnlwYXNzaW5nIHRoZSBwYWdlIGNhY2hlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYmVmb3JlIGRpdmluZyB0b28gZGVlcCwgaXQmIzM5O3MgYWx3YXlzIHBydWRlbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgKnNwZWNpZmljKiBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGtub2JzLCBvciB0dW5hYmxlcyB0aGF0IGluZmx1ZW5jZSB0aGUgaW9tYXAgYmVoYXZpb3IuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGluIG15IGV4cGVydCB1bmRlcnN0YW5kaW5nLCB0aGF0IHRoZXNlIGtpbmRzIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjb3VsZCBzdWJ0bHkgY2hhbmdlIGhvdyBgX19pb21hcF9kaW9fcndgIHdvcmtzLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIGNvbnRleHQsIGFuZCBhbnkgc3BlY2lmaWMgYWRhcHRhdGlvbnMgaW4gdGhlIGNvbmZpZ3VyYXRpb24sIGJlZm9yZSBhbnkgZnVydGhlciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlNfSU9NQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0xMj1jb25maWcgVkFMSURBVEVfRlNfUEFSU0VSXG4tLVxuZnMvS2NvbmZpZy0xNy1cbmZzL0tjb25maWc6MTg6Y29uZmlnIEZTX0lPTUFQXG5mcy9LY29uZmlnLTE5LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMTIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipFeGFtaW5pbmcgdGhlIERlcGVuZGVuY3kgb2YgRlNfSU9NQVAqKgoKUmlnaHQsIHNvIGBGU19JT01BUGAgaXMgYSBib29sZWFuIGZsYWcsIGNvbW1vbmx5IHVzZWQgYnkgYSBudW1iZXIgb2YgZmlsZXN5c3RlbXMg4oCTIFhGUywgZXh0NCwgYnRyZnMsIHRoYXQgc29ydCBvZiB0aGluZy4gSXQmIzM5O3MgdXN1YWxseSBzb21ldGhpbmcgdGhhdCBnZXRzIGVuYWJsZWQgYXQgdGhlIGZpbGVzeXN0ZW0gbGV2ZWwsIGFuZCBJIGNhbiB0ZWNobmljYWxseSBjb25maWd1cmUgaXQgYXMgYSBoaWRkZW4gYm9vbGVhbiwgYnV0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcHJlY2lzZWx5IGRldGVybWluZXMgd2hldGhlciBgRlNfSU9NQVBgIGlzIGFjdHVhbGx5IHNlbGVjdGVkLiBJdCYjMzk7cyBhIGtleSBkZXRhaWwgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmlsZXN5c3RlbXMgYXJlIGJlaGF2aW5nLiBUaW1lIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgdGhlIHNlbGVjdGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgRlNfSU9NQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz01OD1jb25maWcgRlNfREFYXG4tLVxuZnMvS2NvbmZpZy02MS1cdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmZzL0tjb25maWc6NjI6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL0tjb25maWctNjMtXHRzZWxlY3QgREFYXG4tLVxuZnMvYnRyZnMvS2NvbmZpZz0zPWNvbmZpZyBCVFJGU19GU1xuLS1cbmZzL2J0cmZzL0tjb25maWctMTQtXHRzZWxlY3QgWlNURF9ERUNPTVBSRVNTXG5mcy9idHJmcy9LY29uZmlnOjE1Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9idHJmcy9LY29uZmlnLTE2LVx0c2VsZWN0IFJBSUQ2X1BRXG4tLVxuZnMvZXJvZnMvS2NvbmZpZz0zPWNvbmZpZyBFUk9GU19GU1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctOC1cdHNlbGVjdCBDUllQVE9fREVGTEFURSBpZiBFUk9GU19GU19aSVBfQUNDRUxcbmZzL2Vyb2ZzL0tjb25maWc6OTpcdHNlbGVjdCBGU19JT01BUFxuZnMvZXJvZnMvS2NvbmZpZy0xMC1cdHNlbGVjdCBMWjRfREVDT01QUkVTUyBpZiBFUk9GU19GU19aSVBcbi0tXG5mcy9leGZhdC9LY29uZmlnPTM9Y29uZmlnIEVYRkFUX0ZTXG4tLVxuZnMvZXhmYXQvS2NvbmZpZy02LVx0c2VsZWN0IE5MU1xuZnMvZXhmYXQvS2NvbmZpZzo3Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9leGZhdC9LY29uZmlnLTgtXHRoZWxwXG4tLVxuZnMvZXh0Mi9LY29uZmlnPTI9Y29uZmlnIEVYVDJfRlNcbi0tXG5mcy9leHQyL0tjb25maWctNC1cdHNlbGVjdCBCVUZGRVJfSEVBRFxuZnMvZXh0Mi9LY29uZmlnOjU6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2V4dDIvS2NvbmZpZy02LVx0aGVscFxuLS1cbmZzL2V4dDQvS2NvbmZpZz0yPWNvbmZpZyBFWFQ0X0ZTXG4tLVxuZnMvZXh0NC9LY29uZmlnLTctXHRzZWxlY3QgQ1JDMzJcbmZzL2V4dDQvS2NvbmZpZzo4Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9leHQ0L0tjb25maWctOS1cdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxuLS1cbmZzL2YyZnMvS2NvbmZpZz0yPWNvbmZpZyBGMkZTX0ZTXG4tLVxuZnMvZjJmcy9LY29uZmlnLTktXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbmZzL2YyZnMvS2NvbmZpZzoxMDpcdHNlbGVjdCBGU19JT01BUFxuZnMvZjJmcy9LY29uZmlnLTExLVx0c2VsZWN0IExaNF9DT01QUkVTUyBpZiBGMkZTX0ZTX0xaNFxuLS1cbmZzL2Z1c2UvS2NvbmZpZz0yPWNvbmZpZyBGVVNFX0ZTXG4tLVxuZnMvZnVzZS9LY29uZmlnLTQtXHRzZWxlY3QgRlNfUE9TSVhfQUNMXG5mcy9mdXNlL0tjb25maWc6NTpcdHNlbGVjdCBGU19JT01BUFxuZnMvZnVzZS9LY29uZmlnLTYtXHRoZWxwXG4tLVxuZnMvZ2ZzMi9LY29uZmlnPTI9Y29uZmlnIEdGUzJfRlNcbi0tXG5mcy9nZnMyL0tjb25maWctNy1cdHNlbGVjdCBRVU9UQUNUTFxuZnMvZ2ZzMi9LY29uZmlnOjg6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2dmczIvS2NvbmZpZy05LVx0aGVscFxuLS1cbmZzL2hwZnMvS2NvbmZpZz0yPWNvbmZpZyBIUEZTX0ZTXG4tLVxuZnMvaHBmcy9LY29uZmlnLTUtXHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL2hwZnMvS2NvbmZpZzo2Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9ocGZzL0tjb25maWctNy1cdGhlbHBcbi0tXG5mcy9uaWxmczIvS2NvbmZpZz0yPWNvbmZpZyBOSUxGUzJfRlNcbi0tXG5mcy9uaWxmczIvS2NvbmZpZy01LVx0c2VsZWN0IENSQzMyXG5mcy9uaWxmczIvS2NvbmZpZzo2Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9uaWxmczIvS2NvbmZpZy03LVx0aGVscFxuLS1cbmZzL250ZnMvS2NvbmZpZz0yPWNvbmZpZyBOVEZTX0ZTXG4tLVxuZnMvbnRmcy9LY29uZmlnLTQtXHRzZWxlY3QgTkxTXG5mcy9udGZzL0tjb25maWc6NTpcdHNlbGVjdCBGU19JT01BUFxuZnMvbnRmcy9LY29uZmlnLTYtXHRoZWxwXG4tLVxuZnMveGZzL0tjb25maWc9Mj1jb25maWcgWEZTX0ZTXG4tLVxuZnMveGZzL0tjb25maWctNi1cdHNlbGVjdCBDUkMzMlxuZnMveGZzL0tjb25maWc6NzpcdHNlbGVjdCBGU19JT01BUFxuZnMveGZzL0tjb25maWctOC1cdGhlbHBcbi0tXG5mcy96b25lZnMvS2NvbmZpZz0xPWNvbmZpZyBaT05FRlNfRlNcbi0tXG5mcy96b25lZnMvS2NvbmZpZy00LVx0ZGVwZW5kcyBvbiBCTEtfREVWX1pPTkVEXG5mcy96b25lZnMvS2NvbmZpZzo1Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy96b25lZnMvS2NvbmZpZy02LVx0c2VsZWN0IENSQzMyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0OTkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBGU19JT01BUGAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IHRoZSBgRlNfSU9NQVBgIG9wdGlvbiBpcyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIHdoZW4geW91IGVuYWJsZSBhIGxvdCBvZiBkaWZmZXJlbnQgZmlsZXN5c3RlbXMuIEkgZG9uJiMzOTt0IG5lZWQgdG8gd29ycnkgYWJvdXQgZXhwbGljaXRseSBzZXR0aW5nIGBGU19JT01BUGAgaXRzZWxmIGlmIEkmIzM5O20gZW5hYmxpbmcgc29tZXRoaW5nIGxpa2UgYEVYVDRfRlNgLCBgWEZTX0ZTYCwgb3IgYEJUUkZTX0ZTYCwgYmVjYXVzZSB0aGUgZGVwZW5kZW5jaWVzIHNob3VsZCB0YWtlIGNhcmUgb2YgdGhhdCBmb3IgbWUuIEkgY2FuIGp1c3QgY29uZmlndXJlIHRoZSBoaWdoZXItbGV2ZWwgZmlsZXN5c3RlbSBvcHRpb25zIGRpcmVjdGx5LiBBY3R1YWxseSwgc2luY2UgYEZTX0lPTUFQYCBpcyBoaWRkZW4sIEkgY291bGRuJiMzOTt0IGV2ZW4gZW5hYmxlIGl0IGRpcmVjdGx5LCB3aGljaCBtYWtlcyB0aGlzIGV2ZW4gc2ltcGxlciAtIEkmIzM5O2xsIGZvY3VzIG9uIGVuYWJsaW5nIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGBCVFJGU19GU2AsIG9yIGBGMkZTX0ZTYCBkaXJlY3RseS4KCk5vdywgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBpb21hcF9kaW9faG9sZV9pdGVyYCBhbmQgYGlvbWFwX2Rpb19hbGlnbm1lbnRgLiBIbW0sIGBpb21hcF9kaW9faG9sZV9pdGVyYCBzZWVtcyBsaWtlIGEga2V5IHN5bWJvbCBoZXJlLCBhc3N1bWluZyBpdCYjMzk7cyBub3QgaW5saW5lZC4gSXQmIzM5O3MgbWFya2VkIGFzIGBzdGF0aWNgLCBzbyBpdCBtaWdodCBiZSBpbmxpbmVkLiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2sgaWYgdGhhdCBpcyBhY3R1YWxseSB0aGUgY2FzZS4gT2theSwgaXQmIzM5O3MgZGVmaW5pdGVseSBgc3RhdGljYC4KClRoZSBjb3JlIGZ1bmN0aW9uIGlzIGBfX2lvbWFwX2Rpb19yd2AsIHdoaWNoIGhhbmRsZXMgZGlyZWN0IEkvTyBvcGVyYXRpb25zIHVzaW5nIGlvbWFwLiBJdCYjMzk7cyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCwgc28gSSYjMzk7bGwgdmVyaWZ5IGlmIGl0JiMzOTtzIGV4cG9ydGVkIG9yIG5vdCBzdGF0aWMuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19pb21hcF9kaW9fcncmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYz00MTg9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01MTMtXHRcdCAqIFdyaXRlcyB0aGF0IGV4dGVuZCBpX3NpemUgYXJlIGFsc28gbm90IHN1cHBvcnRlZCwgYnV0IHRoaXMgaXNcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjUxNDpcdFx0ICogaGFuZGxlZCBpbiBfX2lvbWFwX2Rpb19ydygpLlxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTE1LVx0XHQgKi9cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02NDg9c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY4OC0gKiBXaGVuIHBhZ2UgZmF1bHRzIGFyZSBkaXNhYmxlZCBhbmQgQGRpb19mbGFncyBpbmNsdWRlcyBJT01BUF9ESU9fUEFSVElBTCxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY4OTogKiBfX2lvbWFwX2Rpb19ydyBjYW4gcmV0dXJuIGEgcGFydGlhbCByZXN1bHQgaWYgaXQgZW5jb3VudGVycyBhIG5vbi1yZXNpZGVudFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjkwLSAqIHBhZ2UgaW4gQGl0ZXIgYWZ0ZXIgcHJlcGFyaW5nIGEgdHJhbnNmZXIuICBJbiB0aGF0IGNhc2UsIHRoZSBub24tcmVzaWRlbnRcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02OTk9c3RydWN0IGlvbWFwX2RpbyAqXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo3MDA6X19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5mcy9pb21hcC9kaXJlY3QtaW8uYy03MDEtXHRcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTEwLX1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkxMTpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19ydyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTItXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTE0PWlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTktXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MjA6XHRkaW8gPSBfX2lvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLCBvcHMsIGRvcHMsIGRpb19mbGFncywgcHJpdmF0ZSxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyMS1cdFx0XHQgICAgIGRvbmVfYmVmb3JlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjczNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIEkvTyBNYXBwaW5nIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJIHNlZSBgX19pb21hcF9kaW9fcndgIGlzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCB1c3VhbGx5IGZ1bmN0aW9ucyB3aXRoIGEgZG91YmxlIHVuZGVyc2NvcmUgYXJlIGZvciBpbnRlcm5hbCB1c2UsIGJ1dCB0aGlzIG9uZSBpcyBhcHBhcmVudGx5IG1hZGUgYXZhaWxhYmxlLiBUaGVuLCBvbiB0b3Agb2YgdGhhdCwgdGhlcmUmIzM5O3MgYGlvbWFwX2Rpb19yd2AsIHdoaWNoIGlzIGFsc28gZXhwb3J0ZWQuIEkgd29uZGVyIHdoYXQgdGhlIHJlbGF0aW9uc2hpcCBpcz8gR2l2ZW4gdGhhdCBJIHNlZSBib3RoLCBteSBpbnN0aW5jdCBpcyB0byBkaWcgaW50byBgaW9tYXBfZGlvX3J3YCBmaXJzdCwgYXMgdGhhdCBtaWdodCBiZSB0aGUgaGlnaGVyLWxldmVsIGludGVyZmFjZS4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZ2xlYW4uIEl0JiMzOTtsbCBwcm9iYWJseSBjYWxsIHRoZSBvdGhlciBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF9kaW9fcncmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYz00MTg9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01MTMtXHRcdCAqIFdyaXRlcyB0aGF0IGV4dGVuZCBpX3NpemUgYXJlIGFsc28gbm90IHN1cHBvcnRlZCwgYnV0IHRoaXMgaXNcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjUxNDpcdFx0ICogaGFuZGxlZCBpbiBfX2lvbWFwX2Rpb19ydygpLlxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTE1LVx0XHQgKi9cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02NDg9c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY3OS0vKlxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjgwOiAqIGlvbWFwX2Rpb19ydygpIGFsd2F5cyBjb21wbGV0ZXMgT19bRF1TWU5DIHdyaXRlcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIElPXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02ODEtICogaXMgYmVpbmcgaXNzdWVkIGFzIEFJTyBvciBub3QuICBUaGlzIGFsbG93cyB1cyB0byBvcHRpbWlzZSBwdXJlIGRhdGEgd3JpdGVzXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjg4LSAqIFdoZW4gcGFnZSBmYXVsdHMgYXJlIGRpc2FibGVkIGFuZCBAZGlvX2ZsYWdzIGluY2x1ZGVzIElPTUFQX0RJT19QQVJUSUFMLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6Njg5OiAqIF9faW9tYXBfZGlvX3J3IGNhbiByZXR1cm4gYSBwYXJ0aWFsIHJlc3VsdCBpZiBpdCBlbmNvdW50ZXJzIGEgbm9uLXJlc2lkZW50XG5mcy9pb21hcC9kaXJlY3QtaW8uYy02OTAtICogcGFnZSBpbiBAaXRlciBhZnRlciBwcmVwYXJpbmcgYSB0cmFuc2Zlci4gIEluIHRoYXQgY2FzZSwgdGhlIG5vbi1yZXNpZGVudFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY5OT1zdHJ1Y3QgaW9tYXBfZGlvICpcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjcwMDpfX2lvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTcwMS1cdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLCBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyAqZG9wcyxcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy03MTctXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo3MTg6XHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgZGlvX2ZsYWdzLCBkb25lX2JlZm9yZSk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy03MTktXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODg4LVx0XHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb24pIHtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjg4OTpcdFx0XHR0cmFjZV9pb21hcF9kaW9fcndfcXVldWVkKGlub2RlLCBpb21pLnBvcywgaW9taS5sZW4pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODkwLVx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU9DQlFVRVVFRCk7XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTEwLX1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkxMTpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19ydyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTItXG5mcy9pb21hcC9kaXJlY3QtaW8uYz05MTM9c3NpemVfdFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTE0OmlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxNS1cdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLCBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyAqZG9wcyxcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTktXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MjA6XHRkaW8gPSBfX2lvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLCBvcHMsIGRvcHMsIGRpb19mbGFncywgcHJpdmF0ZSxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyMS1cdFx0XHQgICAgIGRvbmVfYmVmb3JlKTtcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MjUtfVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTI2OkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2Rpb19ydyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MjctXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTAwMj1zc2l6ZV90IF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMzAtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDMxOlx0dHJhY2VfaW9tYXBfZGlvX3J3X2JlZ2luKGlvY2IsIGl0ZXIsIDAsIDApO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAzMi1cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDc2LVx0c3VibWl0X2JpbyhiaW8pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA3NzpcdHRyYWNlX2lvbWFwX2Rpb19yd19xdWV1ZWQoaW9taS1cdTAwM2Vpbm9kZSwgaW9jYi1cdTAwM2VraV9wb3MsIGlvbWktXHUwMDNlbGVuKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwNzgtXHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjI0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEaXJlY3QgSU8gSG9sZSBJdGVyYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgaW9tYXBfZGlvX2hvbGVfaXRlcmAsIHdoaWNoLCBpZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5LCBoYW5kbGVzIGhvbGVzIGR1cmluZyBkaXJlY3QgSS9PLiBJdCYjMzk7cyBhbHNvIG1ha2luZyBjaGFuZ2VzIHRvIGBpb21hcF9kaW9fYWxpZ25tZW50YC4gTm93LCB0aGUgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBmb2N1cyBvbiBgX19pb21hcF9kaW9fcndgIGFuZCBgaW9tYXBfZGlvX3J3YCBhcyB0aGUga2V5IHN5bWJvbHMgc2luY2UgdGhleSByZXByZXNlbnQgdGhlIGhvdCBwYXRocyBmb3IgZGlyZWN0IEkvTy4gSG93ZXZlciwgSSB3YW50IHRvIGJlIGNlcnRhaW4gdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgKnNwZWNpZmljKiBub24taW5saW5lZCBmdW5jdGlvbnMgdG8gdGFyZ2V0LgoKSG9sZCBvbiBhIHNlY29uZCwgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIGlzIG1hcmtlZCBhcyBzdGF0aWMuIFRoYXQgc3VnZ2VzdHMgaW5saW5pbmcsIHdoaWNoIG1ha2VzIGl0IGEgcG9vciBjYW5kaWRhdGUgdG8gYmUgdGhlIGNlbnRyYWwgc3ltYm9sLiBMZXQmIzM5O3MgY29uZmlybSB3aGV0aGVyIGl04oCZcyBpbmxpbmVkIG9yIG5vdC4gSXQgbG9va3MgbGlrZSBpdCBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gYGlvbWFwX2Rpb19pdGVyYCwgd2hpY2ggaXMgYSBzd2l0Y2ggc3RhdGVtZW50LiBBaGEhIGBpb21hcF9kaW9faXRlcmAgaXMgY2FsbGVkIGZyb20gYF9faW9tYXBfZGlvX3J3YC4gU28sIGFzIGBpb21hcF9kaW9faG9sZV9pdGVyYCBpcyBzdGF0aWMsIG15IGluaXRpYWwgdGhvdWdodCBvZiBmb2N1c2luZyBvbiBgX19pb21hcF9kaW9fcndgIGFuZCBgaW9tYXBfZGlvX3J3YCBpcyBjb3JyZWN0LCBzaW5jZSB0aGVzZSBhcmUgdGhlIGVudHJ5IHBvaW50cywgZXZlbiB0aG91Z2ggdGhleSBhcmUgaG90LXBhdGggZGlyZWN0IElPIGZ1bmN0aW9ucy4KCkhvd2V2ZXIsIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGlvbWFwX2Rpb19hbGlnbm1lbnRgIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcml0aWNhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfZGlvX2FsaWdubWVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2RpcmVjdC1pby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2RpcmVjdC1pby5jPTMzNT1zdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTQwNi1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjQwNzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb21hcF9kaW9fYWxpZ25tZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9pb21hcC9kaXJlY3QtaW8uYy00MDgtXHRcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHVuc2lnbmVkIGludCBkaW9fZmxhZ3MpXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NDE4PXN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNDM1LVx0ICovXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo0MzY6XHRhbGlnbm1lbnQgPSBpb21hcF9kaW9fYWxpZ25tZW50KGlub2RlLCBpb21hcC1cdTAwM2ViZGV2LCBkaW8tXHUwMDNlZmxhZ3MpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNDM3LVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTU5OD1zdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02MDAtXHRsb2ZmX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cdTAwM2VzdWJtaXQuaXRlcik7XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2MDE6XHR1bnNpZ25lZCBpbnQgYnMgPSBpb21hcF9kaW9fYWxpZ25tZW50KGl0ZXItXHUwMDNlaW5vZGUsIGl0ZXItXHUwMDNlaW9tYXAuYmRldixcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTYwMi1cdFx0XHRcdFx0ICAgICAgZGlvLVx1MDAzZWZsYWdzKTtcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz0xMDAyPXNzaXplX3QgX19pb21hcF9kaW9fcmVhZF9zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAxNy1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMTg6XHRhbGlnbm1lbnQgPSBpb21hcF9kaW9fYWxpZ25tZW50KGlvbWktXHUwMDNlaW5vZGUsIGlvbWktXHUwMDNlaW9tYXAuYmRldiwgMCk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDE5LVx0aWYgKChpb21pLVx1MDAzZXBvcyB8IGlvbWktXHUwMDNlbGVuKSBcdTAwMjYgKGFsaWdubWVudCAtIDEpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0OTIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipJbnRlcm5hbCBDb2RlIEV4cGxvcmF0aW9uIC0gaW9tYXBfZGlvX3JlYWRfc2ltcGxlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyB0aHJvdWdoIHRoaXMgY29kZSwgYW5kIEkgc2VlIGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWAuIE15IGZpcnN0IGluc3RpbmN0IGlzLCAmIzM0O0lzIHRoaXMgb25lIG9mIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgd2UmIzM5O3JlIHVzaW5nPyYjMzQ7IEkgaGF2ZSB0byBxdWlja2x5IHJlbWluZCBteXNlbGYgdG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuIEJ1dCBpcyBpdD8gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIHJlYWwgcXVpY2sgdG8gbWFrZSBzdXJlLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGxvb2sgdGhyb3VnaCB0aGUgZXhwb3J0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19pb21hcF9kaW9fcmVhZF9zaW1wbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYz05ODQ9c3RhdGljIHZvaWQgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW8oc3RydWN0IGJpbyAqYmlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMDEtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDAyOnNzaXplX3QgX19pb21hcF9kaW9fcmVhZF9zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDAzLVx0XHRzdHJ1Y3QgaW9tYXBfaXRlciAqaW9taSlcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDg3LX1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwODg6RVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcmVhZF9zaW1wbGUpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA4OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg5MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgc28gYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCBpcyBkZWZpbml0ZWx5IGV4cG9ydGVkLCB0aGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTG9va2luZyBhdCB0aGUgY2FsbCBncmFwaCwgaXQgc2VlbXMgbGlrZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgYF9faW9tYXBfZGlvX3J3YCwgYGlvbWFwX2Rpb19yd2AsIGFuZCBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgLiBJIGluaXRpYWxseSBjb25zaWRlcmVkIGBpb21hcF9kaW9faG9sZV9pdGVyYCwgYnV0IHNpbmNlIHRoYXQmIzM5O3Mgc3RhdGljLCBpdCYjMzk7cyBub3QgaWRlYWwgZm9yIG91ciBwdXJwb3Nlcy4gSG1tLCBidXQgaGFuZyBvbi4uLiBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgKmlzKiBjYWxsZWQgYnkgYGlvbWFwX2Rpb19pdGVyYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgX19pb21hcF9kaW9fcndgLiBOb3csIGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWAgaXRzZWxmIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGNhbGwgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgLCBidXQgaXQgKmRvZXMqIGNhbGwgYGlvbWFwX2Rpb19hbGlnbm1lbnRgLiBBbmQgdGhlIHBhdGNoIG1vZGlmaWVzIGJvdGggYGlvbWFwX2Rpb19hbGlnbm1lbnRgIGFuZCBgaW9tYXBfZGlvX2hvbGVfaXRlcmAuIFNvIGFsbCB0aHJlZSDigJMgYF9faW9tYXBfZGlvX3J3YCwgYGlvbWFwX2Rpb19yd2AsIGFuZCBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgIOKAkyBhcmUgZGVmaW5pdGVseSByZWxldmFudCBmb2N1cyBzeW1ib2xzLiBXYWl0IGEgbWludXRlLi4uIGBpb21hcF9kaW9fcndgIGlzIGp1c3QgYSB3cmFwcGVyIGFyb3VuZCBgX19pb21hcF9kaW9fcndgLiBUaGVyZWZvcmUsIGBfX2lvbWFwX2Rpb19yd2AgaXMgdGhlIG1vcmUgY2VudHJhbCBzeW1ib2wgdG8gZm9jdXMgb24uIEFscmlnaHQsIGxldCYjMzk7cyBqdXN0IGRvIGEgcXVpY2sgc2NhbiB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgaW1wb3J0YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTA1PXNzaXplX3QgaW9tYXBfZGlvX2NvbXBsZXRlKHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xNjAtfVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTYxOkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2Rpb19jb21wbGV0ZSk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xNjItXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MjcyPXZvaWQgaW9tYXBfZGlvX2Jpb19lbmRfaW8oc3RydWN0IGJpbyAqYmlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTI3OS19XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoyODA6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX2Jpb19lbmRfaW8pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMjgxLVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTcwMD1fX2lvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTAtfVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTExOkVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3J3KTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxMi1cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz05MTQ9aW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyNS19XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MjY6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX3J3KTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyNy1cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz0xMDAyPXNzaXplX3QgX19pb21hcF9kaW9fcmVhZF9zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA4Ny19XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDg4OkVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwODktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTI1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEaXJlY3QgSS9PIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBEaXJlY3QgSS9PIGVudHJ5IHBvaW50cy4gSXQgbG9va3MgbGlrZSBgX19pb21hcF9kaW9fcndgLCBgaW9tYXBfZGlvX3J3YCwgYW5kIGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWAgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0byBiZSBjb25zaWRlcmVkIGhlcmUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBjZW50ZXIgbXkgaW52ZXN0aWdhdGlvbiBvbiBgX19pb21hcF9kaW9fcndgIGFuZCBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgLiBIb3dldmVyLCB3YWl0IGEgbWludXRlLCBgaW9tYXBfZGlvX3J3YCBpcyBhbHNvIGFuIGVudHJ5IHBvaW50IGFuZCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgZmlsZXN5c3RlbXMgbWlnaHQgZGlyZWN0bHkgY2FsbCBpdC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIGNhbGxlcnMgb2YgYGlvbWFwX2Rpb19yd2AgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfZGlvX3J3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2J0cmZzL2RpcmVjdC1pby5jPTM2ND1zdGF0aWMgaW50IGJ0cmZzX2Rpb19pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc3RhcnQsXG4tLVxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtNDA0LVx0LypcbmZzL2J0cmZzL2RpcmVjdC1pby5jOjQwNTpcdCAqIGlvbWFwX2Rpb19ydygpIG9ubHkgZG9lcyBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKCksIHdoaWNoIGlzbiYjMzk7dFxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtNDA2LVx0ICogZW5vdWdoIGlmIHdlJiMzOTt2ZSB3cml0dGVuIGNvbXByZXNzZWQgcGFnZXMgdG8gdGhpcyBhcmVhLCBzbyB3ZSBuZWVkIHRvXG4tLVxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtNDE2LVx0ICogZGlydHkgb3IgdW5kZXIgd3JpdGViYWNrIChzYW1lIGFzIGZvciB0aGUgbm9uLWNvbXByZXNzaW9uIGNhc2UpLlxuZnMvYnRyZnMvZGlyZWN0LWlvLmM6NDE3Olx0ICogaW9tYXBfZGlvX3J3KCkgZGlkIHRoZSBzYW1lIGNoZWNrLCBidXQgYWZ0ZXIgdGhhdCBhbmQgYmVmb3JlIHdlIGdvdFxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtNDE4LVx0ICogaGVyZSwgbW1hcCYjMzk7ZWQgd3JpdGVzIG1heSBoYXZlIGhhcHBlbmVkIG9yIGJ1ZmZlcmVkIHJlYWRzIHN0YXJ0ZWRcbi0tXG5mcy9idHJmcy9kaXJlY3QtaW8uYy01MTUtXHQgKiBXaGVuIGRvaW5nIGEgcmVhZCwgYmVjYXVzZSB3ZSB1c2UgSU9NQVBfRElPX1BBUlRJQUwgd2hlbiBjYWxsaW5nXG5mcy9idHJmcy9kaXJlY3QtaW8uYzo1MTY6XHQgKiBpb21hcF9kaW9fcncoKSwgd2UgY2FuIGVuZCB1cCByZXR1cm5pbmcgbGVzcyBkYXRhIHRoZW4gd2hhdCB0aGUgY2FsbGVyXG5mcy9idHJmcy9kaXJlY3QtaW8uYy01MTctXHQgKiBhc2tlZCBmb3IsIHJlc3VsdGluZyBpbiBhbiB1bmV4cGVjdGVkLCBhbmQgaW5jb3JyZWN0LCBzaG9ydCByZWFkLlxuLS1cbmZzL2J0cmZzL2RpcmVjdC1pby5jLTUyMC1cdCAqIHBhZ2UgZmF1bHQgZXJyb3Igd2hlbiB0cnlpbmcgdG8gZmF1bHQgaW4gcGFnZXMgZm9yIHRoZSBidWZmZXIgdGhhdCBpc1xuZnMvYnRyZnMvZGlyZWN0LWlvLmM6NTIxOlx0ICogYXNzb2NpYXRlZCB0byB0aGUgc3RydWN0IGlvdl9pdGVyIHBhc3NlZCB0byBpb21hcF9kaW9fcncoKSwgYW5kIHdlXG5mcy9idHJmcy9kaXJlY3QtaW8uYy01MjItXHQgKiBoYXZlIHByZXZpb3VzbHkgc3VibWl0dGVkIGJpb3MgZm9yIG90aGVyIGV4dGVudHMgaW4gdGhlIHJhbmdlLCBpblxuZnMvYnRyZnMvZGlyZWN0LWlvLmM6NTIzOlx0ICogd2hpY2ggY2FzZSBpb21hcF9kaW9fcncoKSBtYXkgcmV0dXJuIHVzIEVJT0NCUVVFVUVEIGlmIG5vdCBhbGwgb2ZcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTUyNC1cdCAqIHRob3NlIGJpb3MgaGF2ZSBjb21wbGV0ZWQgYnkgdGhlIHRpbWUgd2UgZ2V0IHRoZSBwYWdlIGZhdWx0IGVycm9yLFxuLS1cbmZzL2J0cmZzL2RpcmVjdC1pby5jPTgxMz1zdGF0aWMgc3NpemVfdCBidHJmc19kaW9fcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9idHJmcy9kaXJlY3QtaW8uYy04MTctXG5mcy9idHJmcy9kaXJlY3QtaW8uYzo4MTg6XHRyZXR1cm4gaW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIFx1MDAyNmJ0cmZzX2Rpb19pb21hcF9vcHMsIFx1MDAyNmJ0cmZzX2Rpb19vcHMsXG5mcy9idHJmcy9kaXJlY3QtaW8uYy04MTktXHRcdFx0ICAgIElPTUFQX0RJT19QQVJUSUFMIHwgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRCwgXHUwMDI2ZGF0YSwgZG9uZV9iZWZvcmUpO1xuLS1cbmZzL2J0cmZzL2RpcmVjdC1pby5jPTgyMj1zdGF0aWMgc3RydWN0IGlvbWFwX2RpbyAqYnRyZnNfZGlvX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2J0cmZzL2RpcmVjdC1pby5jLTgyNi1cbmZzL2J0cmZzL2RpcmVjdC1pby5jOjgyNzpcdHJldHVybiBfX2lvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLCBcdTAwMjZidHJmc19kaW9faW9tYXBfb3BzLCBcdTAwMjZidHJmc19kaW9fb3BzLFxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtODI4LVx0XHRcdCAgICBJT01BUF9ESU9fUEFSVElBTCB8IElPTUFQX0RJT19GU0JMT0NLX0FMSUdORUQsIFx1MDAyNmRhdGEsIGRvbmVfYmVmb3JlKTtcbi0tXG5mcy9lcm9mcy9kYXRhLmM9NDQ3PXN0YXRpYyBzc2l6ZV90IGVyb2ZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5mcy9lcm9mcy9kYXRhLmMtNDYyLVxuZnMvZXJvZnMvZGF0YS5jOjQ2MzpcdFx0cmV0dXJuIGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXHUwMDI2ZXJvZnNfaW9tYXBfb3BzLFxuZnMvZXJvZnMvZGF0YS5jLTQ2NC1cdFx0XHRcdCAgICBOVUxMLCAwLCBcdTAwMjZpdGVyX2N0eCwgMCk7XG4tLVxuZnMvZXhmYXQvZmlsZS5jPTcwOD1zdGF0aWMgc3NpemVfdCBleGZhdF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9leGZhdC9maWxlLmMtNzExLVxuZnMvZXhmYXQvZmlsZS5jOjcxMjpcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcdTAwMjZleGZhdF93cml0ZV9pb21hcF9vcHMsXG5mcy9leGZhdC9maWxlLmMtNzEzLVx0XHRcdFx1MDAyNmV4ZmF0X3dyaXRlX2Rpb19vcHMsIDAsIE5VTEwsIDApO1xuLS1cbmZzL2V4ZmF0L2ZpbGUuYz04MDA9c3RhdGljIHNzaXplX3QgZXhmYXRfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4tLVxuZnMvZXhmYXQvZmlsZS5jLTgxMS1cdFx0ZmlsZV9hY2Nlc3NlZChpb2NiLVx1MDAzZWtpX2ZpbHApO1xuZnMvZXhmYXQvZmlsZS5jOjgxMjpcdFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIFx1MDAyNmV4ZmF0X2lvbWFwX29wcywgTlVMTCwgMCxcbmZzL2V4ZmF0L2ZpbGUuYy04MTMtXHRcdFx0XHROVUxMLCAwKTtcbi0tXG5mcy9leHQyL2ZpbGUuYz01MD1zdGF0aWMgc3NpemVfdCBleHQyX2Rpb19yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLS1cbmZzL2V4dDIvZmlsZS5jLTU3LVx0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xuZnMvZXh0Mi9maWxlLmM6NTg6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFx1MDAyNmV4dDJfaW9tYXBfb3BzLCBOVUxMLCAwLCBOVUxMLCAwKTtcbmZzL2V4dDIvZmlsZS5jLTU5LVx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XG4tLVxuZnMvZXh0Mi9maWxlLmM9NjU9c3RhdGljIGludCBleHQyX2Rpb193cml0ZV9lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXG4tLVxuZnMvZXh0Mi9maWxlLmMtNzUtXHQgKiBJZiB3ZSBhcmUgZXh0ZW5kaW5nIHRoZSBmaWxlLCB3ZSBoYXZlIHRvIHVwZGF0ZSBpX3NpemUgaGVyZSBiZWZvcmVcbmZzL2V4dDIvZmlsZS5jOjc2Olx0ICogcGFnZSBjYWNoZSBnZXRzIGludmFsaWRhdGVkIGluIGlvbWFwX2Rpb19ydygpLiBUaGlzIHByZXZlbnRzIHJhY2luZ1xuZnMvZXh0Mi9maWxlLmMtNzctXHQgKiBidWZmZXJlZCByZWFkcyBmcm9tIHplcm9pbmcgb3V0IHRvbyBtdWNoIGZyb20gcGFnZSBjYWNoZSBwYWdlcy5cbi0tXG5mcy9leHQyL2ZpbGUuYz05Nj1zdGF0aWMgc3NpemVfdCBleHQyX2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL2V4dDIvZmlsZS5jLTEyMS1cbmZzL2V4dDIvZmlsZS5jOjEyMjpcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcdTAwMjZleHQyX2lvbWFwX29wcywgXHUwMDI2ZXh0Ml9kaW9fd3JpdGVfb3BzLFxuZnMvZXh0Mi9maWxlLmMtMTIzLVx0XHRcdCAgIGZsYWdzLCBOVUxMLCAwKTtcbi0tXG5mcy9leHQ0L2ZpbGUuYy00Ni0gKiBhbnkgc3BlY2lhbCBmZWF0dXJlcyBsaWtlIGVuY3J5cHRpb24gb3IgdmVyaXR5LCBleHQ0IGhhcyB0cmFkaXRpb25hbGx5XG5mcy9leHQ0L2ZpbGUuYzo0NzogKiByZXR1cm5lZCBFSU5WQUwgZm9yIG1pc2FsaWduZWQgRElPLiAgaW9tYXBfZGlvX3J3KCkgdXNlcyB0aGlzIGNvbnZlbnRpb24gdG9vLlxuZnMvZXh0NC9maWxlLmMtNDgtICogSW4gdGhpcyBjYXNlLCB3ZSBzaG91bGQgYXR0ZW1wdCB0aGUgRElPLCAqbm90KiBmYWxsIGJhY2sgdG8gYnVmZmVyZWQgSS9PLlxuLS1cbmZzL2V4dDQvZmlsZS5jPTY5PXN0YXRpYyBzc2l6ZV90IGV4dDRfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4tLVxuZnMvZXh0NC9maWxlLmMtOTUtXHRpZiAocmV0ID09IC1FTk9UQkxLKVxuZnMvZXh0NC9maWxlLmM6OTY6XHRcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXHUwMDI2ZXh0NF9pb21hcF9vcHMsIE5VTEwsIDAsIE5VTEwsIDApO1xuZnMvZXh0NC9maWxlLmMtOTctXHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcbi0tXG5mcy9leHQ0L2ZpbGUuYz01MjE9c3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9leHQ0L2ZpbGUuYy01OTMtXG5mcy9leHQ0L2ZpbGUuYzo1OTQ6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXHUwMDI2ZXh0NF9pb21hcF9vcHMsIFx1MDAyNmV4dDRfZGlvX3dyaXRlX29wcyxcbmZzL2V4dDQvZmlsZS5jLTU5NS1cdFx0XHQgICBkaW9fZmxhZ3MsIE5VTEwsIDApO1xuLS1cbmZzL2YyZnMvZmlsZS5jPTQ4NDk9c3RhdGljIHNzaXplX3QgZjJmc19kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5mcy9mMmZzL2ZpbGUuYy00ODgxLVx0LypcbmZzL2YyZnMvZmlsZS5jOjQ4ODI6XHQgKiBXZSBoYXZlIHRvIHVzZSBfX2lvbWFwX2Rpb19ydygpIGFuZCBpb21hcF9kaW9fY29tcGxldGUoKSBpbnN0ZWFkIG9mXG5mcy9mMmZzL2ZpbGUuYzo0ODgzOlx0ICogdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbiBpb21hcF9kaW9fcncoKSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCB0aGVcbmZzL2YyZnMvZmlsZS5jLTQ4ODQtXHQgKiBGMkZTX0RJT19SRUFEIGNvdW50ZXIgd2lsbCBiZSBkZWNyZW1lbnRlZCBjb3JyZWN0bHkgaW4gYWxsIGNhc2VzLlxuLS1cbmZzL2YyZnMvZmlsZS5jLTQ4ODYtXHRpbmNfcGFnZV9jb3VudChzYmksIEYyRlNfRElPX1JFQUQpO1xuZnMvZjJmcy9maWxlLmM6NDg4NzpcdGRpbyA9IF9faW9tYXBfZGlvX3J3KGlvY2IsIHRvLCBcdTAwMjZmMmZzX2lvbWFwX29wcyxcbmZzL2YyZnMvZmlsZS5jLTQ4ODgtXHRcdFx0ICAgICBcdTAwMjZmMmZzX2lvbWFwX2Rpb19yZWFkX29wcywgMCwgTlVMTCwgMCk7XG4tLVxuZnMvZjJmcy9maWxlLmM9NTE2Nj1zdGF0aWMgc3NpemVfdCBmMmZzX2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbmZzL2YyZnMvZmlsZS5jLTUyMTQtXHQvKlxuZnMvZjJmcy9maWxlLmM6NTIxNTpcdCAqIFdlIGhhdmUgdG8gdXNlIF9faW9tYXBfZGlvX3J3KCkgYW5kIGlvbWFwX2Rpb19jb21wbGV0ZSgpIGluc3RlYWQgb2ZcbmZzL2YyZnMvZmlsZS5jOjUyMTY6XHQgKiB0aGUgaGlnaGVyLWxldmVsIGZ1bmN0aW9uIGlvbWFwX2Rpb19ydygpIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHRoZVxuZnMvZjJmcy9maWxlLmMtNTIxNy1cdCAqIEYyRlNfRElPX1dSSVRFIGNvdW50ZXIgd2lsbCBiZSBkZWNyZW1lbnRlZCBjb3JyZWN0bHkgaW4gYWxsIGNhc2VzLlxuLS1cbmZzL2YyZnMvZmlsZS5jLTUyMjItXHRcdGRpb19mbGFncyB8PSBJT01BUF9ESU9fRk9SQ0VfV0FJVDtcbmZzL2YyZnMvZmlsZS5jOjUyMjM6XHRkaW8gPSBfX2lvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcdTAwMjZmMmZzX2lvbWFwX29wcyxcbmZzL2YyZnMvZmlsZS5jLTUyMjQtXHRcdFx0ICAgICBcdTAwMjZmMmZzX2lvbWFwX2Rpb193cml0ZV9vcHMsIGRpb19mbGFncywgaW9jYiwgMCk7XG4tLVxuZnMvZjJmcy9maWxlLmMtNTI3NC1cdH0gZWxzZSB7XG5mcy9mMmZzL2ZpbGUuYzo1Mjc1Olx0XHQvKiBpb21hcF9kaW9fcncoKSBhbHJlYWR5IGhhbmRsZWQgdGhlIGdlbmVyaWNfd3JpdGVfc3luYygpLiAqL1xuZnMvZjJmcy9maWxlLmMtNTI3Ni1cdFx0Km1heV9uZWVkX3N5bmMgPSBmYWxzZTtcbi0tXG5mcy9nZnMyL2ZpbGUuYz04MTE9c3RhdGljIHNzaXplX3QgZ2ZzMl9maWxlX2RpcmVjdF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0byxcbi0tXG5mcy9nZnMyL2ZpbGUuYy04MjUtXHQgKlxuZnMvZ2ZzMi9maWxlLmM6ODI2Olx0ICogVW5saWtlIGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsIGZvciByZWFkcywgaW9tYXBfZGlvX3J3IGNhbiB0cmlnZ2VyXG5mcy9nZnMyL2ZpbGUuYy04MjctXHQgKiBwaHlzaWNhbCBhcyB3ZWxsIGFzIG1hbnVhbCBwYWdlIGZhdWx0cywgYW5kIHdlIG5lZWQgdG8gZGlzYWJsZSBib3RoXG4tLVxuZnMvZ2ZzMi9maWxlLmMtODQ2LVx0dG8tXHUwMDNlbm9mYXVsdCA9IHRydWU7XG5mcy9nZnMyL2ZpbGUuYzo4NDc6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFx1MDAyNmdmczJfaW9tYXBfb3BzLCBOVUxMLFxuZnMvZ2ZzMi9maWxlLmMtODQ4LVx0XHRcdCAgIElPTUFQX0RJT19QQVJUSUFMLCBOVUxMLCByZWFkKTtcbi0tXG5mcy9nZnMyL2ZpbGUuYy04NTItXHRcdGdvdG8gb3V0X3VubG9jaztcbmZzL2dmczIvZmlsZS5jOjg1MzpcdC8qIE5vIGluY3JlbWVudCAoJiM0Mzs9KSBiZWNhdXNlIGlvbWFwX2Rpb19ydyByZXR1cm5zIGEgY3VtdWxhdGl2ZSB2YWx1ZS4gKi9cbmZzL2dmczIvZmlsZS5jLTg1NC1cdGlmIChyZXQgXHUwMDNlIDApXG4tLVxuZnMvZ2ZzMi9maWxlLmM9ODc0PXN0YXRpYyBzc2l6ZV90IGdmczJfZmlsZV9kaXJlY3Rfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxuZnMvZ2ZzMi9maWxlLmMtODkwLVx0ICpcbmZzL2dmczIvZmlsZS5jOjg5MTpcdCAqIEZvciB3cml0ZXMsIGlvbWFwX2Rpb19ydyBvbmx5IHRyaWdnZXJzIG1hbnVhbCBwYWdlIGZhdWx0cywgc28gd2VcbmZzL2dmczIvZmlsZS5jLTg5Mi1cdCAqIGRvbiYjMzk7dCBuZWVkIHRvIGRpc2FibGUgcGh5c2ljYWwgb25lcy5cbi0tXG5mcy9nZnMyL2ZpbGUuYy05MTItXHRmcm9tLVx1MDAzZW5vZmF1bHQgPSB0cnVlO1xuZnMvZ2ZzMi9maWxlLmM6OTEzOlx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIFx1MDAyNmdmczJfaW9tYXBfb3BzLCBOVUxMLFxuZnMvZ2ZzMi9maWxlLmMtOTE0LVx0XHRcdCAgIElPTUFQX0RJT19QQVJUSUFMLCBOVUxMLCB3cml0dGVuKTtcbi0tXG5mcy9nZnMyL2ZpbGUuYy05MjEtXHR9XG5mcy9nZnMyL2ZpbGUuYzo5MjI6XHQvKiBObyBpbmNyZW1lbnQgKCYjNDM7PSkgYmVjYXVzZSBpb21hcF9kaW9fcncgcmV0dXJucyBhIGN1bXVsYXRpdmUgdmFsdWUuICovXG5mcy9nZnMyL2ZpbGUuYy05MjMtXHRpZiAocmV0IFx1MDAzZSAwKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTQxOD1zdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTUxMy1cdFx0ICogV3JpdGVzIHRoYXQgZXh0ZW5kIGlfc2l6ZSBhcmUgYWxzbyBub3Qgc3VwcG9ydGVkLCBidXQgdGhpcyBpc1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NTE0Olx0XHQgKiBoYW5kbGVkIGluIF9faW9tYXBfZGlvX3J3KCkuXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01MTUtXHRcdCAqL1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY0OD1zdGF0aWMgaW50IGlvbWFwX2Rpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjc5LS8qXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2ODA6ICogaW9tYXBfZGlvX3J3KCkgYWx3YXlzIGNvbXBsZXRlcyBPX1tEXVNZTkMgd3JpdGVzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgSU9cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY4MS0gKiBpcyBiZWluZyBpc3N1ZWQgYXMgQUlPIG9yIG5vdC4gIFRoaXMgYWxsb3dzIHVzIHRvIG9wdGltaXNlIHB1cmUgZGF0YSB3cml0ZXNcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02ODgtICogV2hlbiBwYWdlIGZhdWx0cyBhcmUgZGlzYWJsZWQgYW5kIEBkaW9fZmxhZ3MgaW5jbHVkZXMgSU9NQVBfRElPX1BBUlRJQUwsXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2ODk6ICogX19pb21hcF9kaW9fcncgY2FuIHJldHVybiBhIHBhcnRpYWwgcmVzdWx0IGlmIGl0IGVuY291bnRlcnMgYSBub24tcmVzaWRlbnRcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY5MC0gKiBwYWdlIGluIEBpdGVyIGFmdGVyIHByZXBhcmluZyBhIHRyYW5zZmVyLiAgSW4gdGhhdCBjYXNlLCB0aGUgbm9uLXJlc2lkZW50XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9Njk5PXN0cnVjdCBpb21hcF9kaW8gKlxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NzAwOl9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNzAxLVx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTcxNy1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjcxODpcdHRyYWNlX2lvbWFwX2Rpb19yd19iZWdpbihpb2NiLCBpdGVyLCBkaW9fZmxhZ3MsIGRvbmVfYmVmb3JlKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTcxOS1cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04ODgtXHRcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbikge1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODg5Olx0XHRcdHRyYWNlX2lvbWFwX2Rpb19yd19xdWV1ZWQoaW5vZGUsIGlvbWkucG9zLCBpb21pLmxlbik7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy04OTAtXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJT0NCUVVFVUVEKTtcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTAtfVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTExOkVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3J3KTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxMi1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTkxMz1zc2l6ZV90XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MTQ6aW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTE1LVx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxOS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkyMDpcdGRpbyA9IF9faW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIG9wcywgZG9wcywgZGlvX2ZsYWdzLCBwcml2YXRlLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTIxLVx0XHRcdCAgICAgZG9uZV9iZWZvcmUpO1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyNS19XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MjY6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX3J3KTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyNy1cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz0xMDAyPXNzaXplX3QgX19pb21hcF9kaW9fcmVhZF9zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAzMC1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMzE6XHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgMCwgMCk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDMyLVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwNzYtXHRzdWJtaXRfYmlvKGJpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDc3Olx0dHJhY2VfaW9tYXBfZGlvX3J3X3F1ZXVlZChpb21pLVx1MDAzZWlub2RlLCBpb2NiLVx1MDAzZWtpX3BvcywgaW9taS1cdTAwM2VsZW4pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA3OC1cdHJldHVybiAtRUlPQ0JRVUVVRUQ7XG4tLVxuZnMvaW9tYXAvdHJhY2UuaD04NT1ERUZJTkVfUkFOR0VfRVZFTlQoaW9tYXBfZGlvX2ludmFsaWRhdGVfZmFpbCk7XG5mcy9pb21hcC90cmFjZS5oOjg2OkRFRklORV9SQU5HRV9FVkVOVChpb21hcF9kaW9fcndfcXVldWVkKTtcbmZzL2lvbWFwL3RyYWNlLmgtODctREVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX3plcm9faXRlcik7XG4tLVxuZnMvaW9tYXAvdHJhY2UuaD0yMjA9VFJBQ0VfRVZFTlQoaW9tYXBfaXRlcixcbi0tXG5mcy9pb21hcC90cmFjZS5oLTI1NS1cbmZzL2lvbWFwL3RyYWNlLmg6MjU2OlRSQUNFX0VWRU5UKGlvbWFwX2Rpb19yd19iZWdpbixcbmZzL2lvbWFwL3RyYWNlLmgtMjU3LVx0VFBfUFJPVE8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvbmlsZnMyL2ZpbGUuYz0xNDU9c3RhdGljIHNzaXplX3QgbmlsZnNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLS1cbmZzL25pbGZzMi9maWxlLmMtMTQ3LVx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKSB7XG5mcy9uaWxmczIvZmlsZS5jOjE0ODpcdFx0cmV0dXJuIGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXHUwMDI2bmlsZnNfaW9tYXBfb3BzLFxuZnMvbmlsZnMyL2ZpbGUuYy0xNDktXHRcdFx0XHQgICAgTlVMTCwgMCwgTlVMTCwgMCk7XG4tLVxuZnMvbnRmcy9maWxlLmM9NDM4PXN0YXRpYyBzc2l6ZV90IG50ZnNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLS1cbmZzL250ZnMvZmlsZS5jLTQ2MC1cdFx0ZmlsZV9hY2Nlc3NlZChpb2NiLVx1MDAzZWtpX2ZpbHApO1xuZnMvbnRmcy9maWxlLmM6NDYxOlx0XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFx1MDAyNm50ZnNfcmVhZF9pb21hcF9vcHMsIE5VTEwsIDAsXG5mcy9udGZzL2ZpbGUuYy00NjItXHRcdFx0XHROVUxMLCAwKTtcbi0tXG5mcy9udGZzL2ZpbGUuYz00OTU9c3RhdGljIHNzaXplX3QgbnRmc19kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9udGZzL2ZpbGUuYy00OTgtXG5mcy9udGZzL2ZpbGUuYzo0OTk6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXHUwMDI2bnRmc19kaW9faW9tYXBfb3BzLFxuZnMvbnRmcy9maWxlLmMtNTAwLVx0XHRcdFx1MDAyNm50ZnNfd3JpdGVfZGlvX29wcywgMCwgTlVMTCwgMCk7XG4tLVxuZnMvbnRmczMvZmlsZS5jPTgxNT1zdGF0aWMgc3NpemVfdCBudGZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuLS1cbmZzL250ZnMzL2ZpbGUuYy04NzQtXG5mcy9udGZzMy9maWxlLmM6ODc1Olx0XHRlcnIgPSBpb21hcF9kaW9fcncoaW9jYiwgaXRlciwgXHUwMDI2bnRmc19pb21hcF9vcHMsIE5VTEwsIGRpb19mbGFncyxcbmZzL250ZnMzL2ZpbGUuYy04NzYtXHRcdFx0XHQgICBOVUxMLCAwKTtcbi0tXG5mcy9udGZzMy9maWxlLmM9MTIyMD1zdGF0aWMgc3NpemVfdCBudGZzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9udGZzMy9maWxlLmMtMTMwNS1cbmZzL250ZnMzL2ZpbGUuYzoxMzA2Olx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIFx1MDAyNm50ZnNfaW9tYXBfb3BzLCBOVUxMLFxuZnMvbnRmczMvZmlsZS5jLTEzMDctXHRcdFx0ICAgSU9NQVBfRElPX0ZPUkNFX1dBSVQsIE5VTEwsIDApO1xuLS1cbmZzL250ZnMzL2lub2RlLmM9Njc2PWludCBudGZzX3NldF9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBuZXdfc2l6ZSlcbi0tXG5mcy9udGZzMy9pbm9kZS5jLTcxOC0gKiAtIGlvbWFwX3RydW5jYXRlX3BhZ2VcbmZzL250ZnMzL2lub2RlLmM6NzE5OiAqIC0gaW9tYXBfZGlvX3J3XG5mcy9udGZzMy9pbm9kZS5jLTcyMC0gKiAtIGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGVcbi0tXG5mcy94ZnMveGZzX2ZpbGUuYz0yNDk9eGZzX2ZpbGVfZGlvX3JlYWQoXG4tLVxuZnMveGZzL3hmc19maWxlLmMtMjY2LVx0aWYgKG1hcHBpbmdfc3RhYmxlX3dyaXRlcyhpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nKSkge1xuZnMveGZzL3hmc19maWxlLmM6MjY3Olx0XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFx1MDAyNnhmc19yZWFkX2lvbWFwX29wcyxcbmZzL3hmcy94ZnNfZmlsZS5jLTI2OC1cdFx0XHRcdFx1MDAyNnhmc19kaW9fcmVhZF9ib3VuY2Vfb3BzLCBJT01BUF9ESU9fQk9VTkNFLFxuLS1cbmZzL3hmcy94ZnNfZmlsZS5jLTI3Mi1cdFx0aWYgKHJldCA9PSAtRU5PVEJMSylcbmZzL3hmcy94ZnNfZmlsZS5jOjI3MzpcdFx0XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFx1MDAyNnhmc19yZWFkX2lvbWFwX29wcywgTlVMTCxcbmZzL3hmcy94ZnNfZmlsZS5jLTI3NC1cdFx0XHRcdFx0MCwgTlVMTCwgMCk7XG4tLVxuZnMveGZzL3hmc19maWxlLmM9NzQzPXhmc19maWxlX2Rpb193cml0ZV9hbGlnbmVkKFxuLS1cbmZzL3hmcy94ZnNfZmlsZS5jLTc4MS1cdHRyYWNlX3hmc19maWxlX2RpcmVjdF93cml0ZShpb2NiLCBmcm9tKTtcbmZzL3hmcy94ZnNfZmlsZS5jOjc4MjpcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBvcHMsIGRvcHMsIGRpb19mbGFncywgYWMsIDApO1xuZnMveGZzL3hmc19maWxlLmMtNzgzLW91dF91bmxvY2s6XG4tLVxuZnMveGZzL3hmc19maWxlLmM9ODIxPXhmc19maWxlX2Rpb193cml0ZV9hdG9taWMoXG4tLVxuZnMveGZzL3hmc19maWxlLmMtODU3LVx0XHRkaW9fZmxhZ3MgfD0gSU9NQVBfRElPX0JPVU5DRTtcbmZzL3hmcy94ZnNfZmlsZS5jOjg1ODpcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBkb3BzLCBcdTAwMjZ4ZnNfZGlvX3dyaXRlX29wcywgZGlvX2ZsYWdzLFxuZnMveGZzL3hmc19maWxlLmMtODU5LVx0XHRcdE5VTEwsIDApO1xuLS1cbmZzL3hmcy94ZnNfZmlsZS5jPTg5Nz14ZnNfZmlsZV9kaW9fd3JpdGVfdW5hbGlnbmVkKFxuLS1cbmZzL3hmcy94ZnNfZmlsZS5jLTk1MS1cdHRyYWNlX3hmc19maWxlX2RpcmVjdF93cml0ZShpb2NiLCBmcm9tKTtcbmZzL3hmcy94ZnNfZmlsZS5jOjk1MjpcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcdTAwMjZ4ZnNfZGlyZWN0X3dyaXRlX2lvbWFwX29wcyxcbmZzL3hmcy94ZnNfZmlsZS5jLTk1My1cdFx0XHQgICBcdTAwMjZ4ZnNfZGlvX3dyaXRlX29wcywgZmxhZ3MsIE5VTEwsIDApO1xuLS1cbmZzL3pvbmVmcy9maWxlLmM9NDc0PXN0YXRpYyBzc2l6ZV90IHpvbmVmc19maWxlX2Rpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy96b25lZnMvZmlsZS5jLTUyOC1cdC8qXG5mcy96b25lZnMvZmlsZS5jOjUyOTpcdCAqIGlvbWFwX2Rpb19ydygpIG1heSByZXR1cm4gRU5PVEJMSyBpZiB0aGVyZSB3YXMgYW4gaXNzdWUgd2l0aFxuZnMvem9uZWZzL2ZpbGUuYy01MzAtXHQgKiBwYWdlIGludmFsaWRhdGlvbi4gT3ZlcndyaXRlIHRoYXQgZXJyb3IgY29kZSB3aXRoIEVCVVNZIHNvIHRoYXRcbi0tXG5mcy96b25lZnMvZmlsZS5jLTUzMi1cdCAqL1xuZnMvem9uZWZzL2ZpbGUuYzo1MzM6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXHUwMDI2em9uZWZzX3dyaXRlX2lvbWFwX29wcyxcbmZzL3pvbmVmcy9maWxlLmMtNTM0LVx0XHRcdCAgIFx1MDAyNnpvbmVmc193cml0ZV9kaW9fb3BzLCAwLCBOVUxMLCAwKTtcbi0tXG5mcy96b25lZnMvZmlsZS5jPTYzNj1zdGF0aWMgc3NpemVfdCB6b25lZnNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLS1cbmZzL3pvbmVmcy9maWxlLmMtNjc3LVx0XHRmaWxlX2FjY2Vzc2VkKGlvY2ItXHUwMDNla2lfZmlscCk7XG5mcy96b25lZnMvZmlsZS5jOjY3ODpcdFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIHRvLCBcdTAwMjZ6b25lZnNfcmVhZF9pb21hcF9vcHMsXG5mcy96b25lZnMvZmlsZS5jLTY3OS1cdFx0XHRcdCAgIFx1MDAyNnpvbmVmc19yZWFkX2Rpb19vcHMsIDAsIE5VTEwsIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODEyMAoJCQkJCQkJb3V0cHV0OiAxNzgKCQkJCQkJCXRob3VnaHRzOiA0OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpb21hcCBEaXJlY3QgSS9PIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gdGhlIGluaXRpYWwgcmV2aWV3LCBpdCYjMzk7cyBjbGVhciB0aGUgcmVsZXZhbnQgY29kZSBjZW50ZXJzIGFyb3VuZCB0aGUgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIGZ1bmN0aW9uIGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggZGlyZWN0IEkvTy4gSSYjMzk7dmUgZ290IHRvIGZvY3VzIG9uIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJL08gcGF0aC4gYGlvbWFwX2Rpb19yd2AgaXMgYSBrZXkgZW50cnkgcG9pbnQsIHVzZWQgYnkgbnVtZXJvdXMgZmlsZXN5c3RlbXMuIGBfX2lvbWFwX2Rpb19yd2AgaXMgbW9yZSBzcGVjaWZpYywgZGlyZWN0bHkgY2FsbGVkIGJ5IGBidHJmc2AgYW5kIGBmMmZzYCwgc28gdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgc3ltYm9sIHRvIHdhdGNoLiBJJiMzOTtsbCBkcm9wIGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWAsIHNpbmNlIGl0IHNlZW1zIGxpa2UgdGhlIHBhdGNoIGZvY3VzZXMgb24gaG9sZSBoYW5kbGluZywgYW5kIG5vdCBiYXNpYyByZWFkIG9wZXJhdGlvbnMuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBUbyBwcm9wZXJseSB0ZXN0IHRoaXMsIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIGZpbGVzeXN0ZW1zIHRoYXQgdXNlIGlvbWFwIGFuZCBoYW5kbGUgaG9sZXMuIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGFuZCBgQlRSRlNfRlNgIGFyZSBkZWZpbml0ZWx5IGVzc2VudGlhbC4gSSYjMzk7bGwgYWRkIHRob3NlIHRvIGBFbmFibGVDb25maWdzYC4gR2l2ZW4gdGhhdCB0aGlzIHBhdGNoIGZvY3VzZXMgb24gaG93IGhvbGVzIGFyZSBoYW5kbGVkLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGZpbGVzeXN0ZW1zIGFyZSBlbmFibGVkLgoKTG9va2luZyBiYWNrLCB0aGUgcGF0Y2ggZXhwbGljaXRseSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBgYmRldmAgYmVpbmcgTlVMTCB3aXRoaW4gYGlvbWFwX2Rpb19hbGlnbm1lbnRgIHNwZWNpZmljYWxseSBkdXJpbmcgaG9sZSBwcm9jZXNzaW5nLiBUaGlzIGNvbmZpcm1zIGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBkaXJlY3QgSS9PIGZvciBmaWxlcyB3aXRoIGhvbGVzLCBhcyBpcyBoYW5kbGVkIGJ5LCBhbW9uZyBvdGhlcnMsIGV4dDQsIHhmcywgYW5kIGJ0cmZzLgoKT2theSwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSByaWdodCwgYW5kIHRoYXQgYEVYVDRfRlNgLCBgWEZTX0ZTYCwgYW5kIGBCVFJGU19GU2AgYXJlIGFsbCBwcm9wZXJseSBzZXQuCgpBbmQgdGhlIGZvY3VzIHN5bWJvbHM/IEkgbmVlZCB0byByZWZpbmUgdGhhdCBsaXN0LiBHaXZlbiB0aGF0IGBpb21hcF9kaW9faG9sZV9pdGVyYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiBhbmQgcG90ZW50aWFsbHkgaW5saW5lZCwgaXQmIzM5O3MgbGlrZWx5IG5vdCB0aGUgYmVzdCBzeW1ib2wgZm9yIGFuYWx5c2lzLiBTaW5jZSB0aGUgcGF0Y2ggZGVhbHMgd2l0aCB0aGUgYWxpZ25tZW50IHN0ZXAsIEkmIzM5O2xsIHN0aWNrIHRvIGBfX2lvbWFwX2Rpb19yd2AgYW5kIGBpb21hcF9kaW9fcndgLCBzaW5jZSB0aG9zZSBhcmUgZGVmaW5pdGVseSBleHBvcnRlZCBhbmQgbm90IGlubGluZWQuCgpBbHJpZ2h0LCB3aXRoIHRoZXNlIGNvbmZpcm1lZCwgaXQmIzM5O3MgdGltZSB0byBzZXQgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O1hGU19GUyYjMzQ7LAogICAgJiMzNDtCVFJGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19faW9tYXBfZGlvX3J3JiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19ydyYjMzQ7LAogICAgJiMzNDtfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaW9tYXBfZGlvX2FsaWdubWVudGAgdG8gaGFuZGxlIE5VTEwgYGJkZXZgIGZvciBob2xlIGNhc2VzIGFuZCBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgdG8gYWxpZ24gdGhlIGNvcGllZCBsZW5ndGggdG8gdGhlIGJsb2NrIHNpemUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBpb21hcCBkaXJlY3QgSU8gcGF0aC4gSXQgY2FuIGJlIHJlYWNoZWQgdmlhIGRpcmVjdCBJTyBvcGVyYXRpb25zIG9uIGZpbGVzeXN0ZW1zIHRoYXQgc3VwcG9ydCBob2xlcyBhbmQgdXNlIGlvbWFwIChlLmcuLCBleHQ0LCB4ZnMsIGJ0cmZzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtYRlNfRlMmIzM0OywKICAgICYjMzQ7QlRSRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2lvbWFwX2Rpb19ydyYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fcncmIzM0OywKICAgICYjMzQ7X19pb21hcF9kaW9fcmVhZF9zaW1wbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGlvbWFwX2Rpb19hbGlnbm1lbnRgIHRvIGhhbmRsZSBOVUxMIGBiZGV2YCBmb3IgaG9sZSBjYXNlcyBhbmQgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIHRvIGFsaWduIHRoZSBjb3BpZWQgbGVuZ3RoIHRvIHRoZSBibG9jayBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9tYXAgZGlyZWN0IElPIHBhdGguIEl0IGNhbiBiZSByZWFjaGVkIHZpYSBkaXJlY3QgSU8gb3BlcmF0aW9ucyBvbiBmaWxlc3lzdGVtcyB0aGF0IHN1cHBvcnQgaG9sZXMgYW5kIHVzZSBpb21hcCAoZS5nLiwgZXh0NCwgeGZzLCBidHJmcykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjo1OToxOS40MTgwMjM5OTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTU4NDU3MDk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJYRlNfRlNcIixcbiAgICBcIkJUUkZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19pb21hcF9kaW9fcndcIixcbiAgICBcImlvbWFwX2Rpb19yd1wiLFxuICAgIFwiX19pb21hcF9kaW9fcmVhZF9zaW1wbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaW9tYXBfZGlvX2FsaWdubWVudGAgdG8gaGFuZGxlIE5VTEwgYGJkZXZgIGZvciBob2xlIGNhc2VzIGFuZCBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgdG8gYWxpZ24gdGhlIGNvcGllZCBsZW5ndGggdG8gdGhlIGJsb2NrIHNpemUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBpb21hcCBkaXJlY3QgSU8gcGF0aC4gSXQgY2FuIGJlIHJlYWNoZWQgdmlhIGRpcmVjdCBJTyBvcGVyYXRpb25zIG9uIGZpbGVzeXN0ZW1zIHRoYXQgc3VwcG9ydCBob2xlcyBhbmQgdXNlIGlvbWFwIChlLmcuLCBleHQ0LCB4ZnMsIGJ0cmZzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6NTk6MTkuNDE4MDMwMzYzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDM0OTg3NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhMWU4YzZhNmNlYmYzNjg3ZjY2MzNjODdjYmM1ZWNmNGQ3YWQ2YTU2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIgMDY6NTk6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvZGlyZWN0LWlvLmMgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xcbmluZGV4IGIzMzY4ZDY0ZTgxYmIuLjEwZjAwMjBkZTQ3NzAgMTAwNjQ0XFxuLS0tIGEvZnMvaW9tYXAvZGlyZWN0LWlvLmNcXG4rKysgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xcbkBAIC00MDksNyArNDA5LDEwIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvbWFwX2Rpb19hbGlnbm1lbnQoc3RydWN0IGlub2RlICppbm9kZSxcXG4ge1xcbiBcXHRpZiAoZGlvX2ZsYWdzIFxcdTAwMjYgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRClcXG4gXFx0XFx0cmV0dXJuIGlfYmxvY2tzaXplKGlub2RlKTtcXG4tXFx0cmV0dXJuIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpO1xcbitcXHQvKiBAYmRldiBjYW4gYmUgTlVMTCBmb3IgaG9sZSBjYXNlcy4gKi9cXG4rXFx0aWYgKGJkZXYpXFxuK1xcdFxcdHJldHVybiBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShiZGV2KTtcXG4rXFx0cmV0dXJuIFNFQ1RPUl9TSVpFO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbkBAIC01OTQsMTIgKzU5NywyMCBAQCBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbiBcXG4gc3RhdGljIGludCBpb21hcF9kaW9faG9sZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuIHtcXG4tXFx0bG9mZl90IGxlbmd0aCA9IGlvdl9pdGVyX3plcm8oaW9tYXBfbGVuZ3RoKGl0ZXIpLCBkaW8tXFx1MDAzZXN1Ym1pdC5pdGVyKTtcXG4rXFx0bG9mZl90IGNvcGllZCA9IGlvdl9pdGVyX3plcm8oaW9tYXBfbGVuZ3RoKGl0ZXIpLCBkaW8tXFx1MDAzZXN1Ym1pdC5pdGVyKTtcXG4rXFx0dW5zaWduZWQgaW50IGJzID0gaW9tYXBfZGlvX2FsaWdubWVudChpdGVyLVxcdTAwM2Vpbm9kZSwgaXRlci1cXHUwMDNlaW9tYXAuYmRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgZGlvLVxcdTAwM2VmbGFncyk7XFxuK1xcdGxvZmZfdCBhbGlnbmVkX2NvcGllZCA9IHJvdW5kX2Rvd24oY29waWVkLCBicyk7XFxuIFxcbi1cXHRkaW8tXFx1MDAzZXNpemUgKz0gbGVuZ3RoO1xcbi1cXHRpZiAoIWxlbmd0aClcXG4rXFx0LypcXG4rXFx0ICogSWYgZnMgYmxvY2sgc2l6ZSBpcyBsYXJnZXIgdGhhbiBwYWdlIHNpemUsIHBhZ2UgZmF1bHQgZmFpbHVyZVxcbitcXHQgKiBjYW4gY2F1c2UgQGNvcGllZCB0byBiZSBwYWdlIGFsaWduZWQgYnV0IG5vdCBmcyBibG9jayBhbGlnbmVkLlxcbitcXHQgKi9cXG4rXFx0aW92X2l0ZXJfcmV2ZXJ0KGRpby1cXHUwMDNlc3VibWl0Lml0ZXIsIGNvcGllZCAtIGFsaWduZWRfY29waWVkKTtcXG4rXFx0ZGlvLVxcdTAwM2VzaXplICs9IGFsaWduZWRfY29waWVkO1xcbitcXHRpZiAoIWFsaWduZWRfY29waWVkKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tXFx0cmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBsZW5ndGgpO1xcbitcXHRyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGFsaWduZWRfY29waWVkKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBpb21hcF9kaW9faW5saW5lX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKmlvbWksIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6NTk6MTkuODYyNTYwNTg2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDkxNDAwMjA5NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiWEZTX0ZTXCIsXG4gICAgXCJCVFJGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faW9tYXBfZGlvX3J3XCIsXG4gICAgXCJpb21hcF9kaW9fcndcIixcbiAgICBcIl9faW9tYXBfZGlvX3JlYWRfc2ltcGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGlvbWFwX2Rpb19hbGlnbm1lbnRgIHRvIGhhbmRsZSBOVUxMIGBiZGV2YCBmb3IgaG9sZSBjYXNlcyBhbmQgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIHRvIGFsaWduIHRoZSBjb3BpZWQgbGVuZ3RoIHRvIHRoZSBibG9jayBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9tYXAgZGlyZWN0IElPIHBhdGguIEl0IGNhbiBiZSByZWFjaGVkIHZpYSBkaXJlY3QgSU8gb3BlcmF0aW9ucyBvbiBmaWxlc3lzdGVtcyB0aGF0IHN1cHBvcnQgaG9sZXMgYW5kIHVzZSBpb21hcCAoZS5nLiwgZXh0NCwgeGZzLCBidHJmcykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGExZThjNmE2Y2ViZjM2ODdmNjYzM2M4N2NiYzVlY2Y0ZDdhZDZhNTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDA2OjU5OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvZGlyZWN0LWlvLmMgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuaW5kZXggYjMzNjhkNjRlODFiYi4uMTBmMDAyMGRlNDc3MCAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG4rKysgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuQEAgLTQwOSw3ICs0MDksMTAgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9tYXBfZGlvX2FsaWdubWVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIHtcbiBcdGlmIChkaW9fZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19GU0JMT0NLX0FMSUdORUQpXG4gXHRcdHJldHVybiBpX2Jsb2Nrc2l6ZShpbm9kZSk7XG4tXHRyZXR1cm4gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoYmRldik7XG4rXHQvKiBAYmRldiBjYW4gYmUgTlVMTCBmb3IgaG9sZSBjYXNlcy4gKi9cbitcdGlmIChiZGV2KVxuK1x0XHRyZXR1cm4gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoYmRldik7XG4rXHRyZXR1cm4gU0VDVE9SX1NJWkU7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG5AQCAtNTk0LDEyICs1OTcsMjAgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiBcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiB7XG4tXHRsb2ZmX3QgbGVuZ3RoID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cdTAwM2VzdWJtaXQuaXRlcik7XG4rXHRsb2ZmX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cdTAwM2VzdWJtaXQuaXRlcik7XG4rXHR1bnNpZ25lZCBpbnQgYnMgPSBpb21hcF9kaW9fYWxpZ25tZW50KGl0ZXItXHUwMDNlaW5vZGUsIGl0ZXItXHUwMDNlaW9tYXAuYmRldixcbitcdFx0XHRcdFx0ICAgICAgZGlvLVx1MDAzZWZsYWdzKTtcbitcdGxvZmZfdCBhbGlnbmVkX2NvcGllZCA9IHJvdW5kX2Rvd24oY29waWVkLCBicyk7XG4gXG4tXHRkaW8tXHUwMDNlc2l6ZSArPSBsZW5ndGg7XG4tXHRpZiAoIWxlbmd0aClcbitcdC8qXG4rXHQgKiBJZiBmcyBibG9jayBzaXplIGlzIGxhcmdlciB0aGFuIHBhZ2Ugc2l6ZSwgcGFnZSBmYXVsdCBmYWlsdXJlXG4rXHQgKiBjYW4gY2F1c2UgQGNvcGllZCB0byBiZSBwYWdlIGFsaWduZWQgYnV0IG5vdCBmcyBibG9jayBhbGlnbmVkLlxuK1x0ICovXG4rXHRpb3ZfaXRlcl9yZXZlcnQoZGlvLVx1MDAzZXN1Ym1pdC5pdGVyLCBjb3BpZWQgLSBhbGlnbmVkX2NvcGllZCk7XG4rXHRkaW8tXHUwMDNlc2l6ZSArPSBhbGlnbmVkX2NvcGllZDtcbitcdGlmICghYWxpZ25lZF9jb3BpZWQpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0cmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBsZW5ndGgpO1xuK1x0cmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBhbGlnbmVkX2NvcGllZCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2lubGluZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjo1OToxOS44NjI1NjMyMDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQzNTIxNzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGlyZWN0IEkvTyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGZzL2lvbWFwL2RpcmVjdC1pby5jYC4gVGhlIGtleSBjaGFuZ2VzIHNlZW0gdG8gcmV2b2x2ZSBhcm91bmQgaGFuZGxpbmcgbnVsbCBibG9jayBkZXZpY2VzIGluIGBpb21hcF9kaW9fYWxpZ25tZW50YCBhbmQgYWxpZ25pbmcgdGhlIGNvcGllZCBsZW5ndGggd2l0aGluIGBpb21hcF9kaW9faG9sZV9pdGVyYC4gU3BlY2lmaWNhbGx5LCB3aXRoIHRoZSBudWxsIGBiZGV2YCwgaXQncyBub3cgcmV0dXJuaW5nIGBTRUNUT1JfU0laRWAsIGFuZCBpbiB0aGUgaG9sZSBpdGVyYXRvciwgaXQncyBhbGlnbmluZyB0aGUgYGlvdl9pdGVyX3plcm9gIGxlbmd0aCB0byB0aGUgYmxvY2sgc2l6ZSwgZWZmZWN0aXZlbHkgcmVtb3ZpbmcgYW55IHVuYWxpZ25lZCBkYXRhLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGhlcmUuIExldCdzIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSdsbCBvcGVuIHVwIGBmcy9pb21hcC9kaXJlY3QtaW8uY2AgYW5kIGxvY2F0ZSB0aGVzZSBmdW5jdGlvbnMsIGBpb21hcF9kaW9fYWxpZ25tZW50YCBhbmQgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgLiBBaCwgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQncyBsaWtlbHkgY2FsbGVkIHdpdGhpbiB0aGUgc2FtZSBmaWxlLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGxlcnMgdG8gZnVsbHkgZ3Jhc3AgaG93IHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIG92ZXJhbGwgRGlyZWN0IEkvTyBmbG93LiBNeSBpbnR1aXRpb24gc2F5cyBgaW9tYXBfZGlvX2l0ZXJgIG9yIGEgc2ltaWxhciBmdW5jdGlvbiBpcyB0aGUgb2J2aW91cyBjYW5kaWRhdGUuIFRpbWUgdG8gY29uZmlybSBteSBoeXBvdGhlc2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDc3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6NTk6MjQuMDA2MDg4NTcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjMzMzg3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21hcF9kaW9faG9sZV9pdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jPTQxOD1zdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTk3LVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjU5ODpzdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01OTkte1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjQ4PXN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY1My1cXHRcXHRcXHRyZXR1cm4gLUVJTztcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2NTQ6XFx0XFx0cmV0dXJuIGlvbWFwX2Rpb19ob2xlX2l0ZXIoaXRlciwgZGlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTUtXFx0Y2FzZSBJT01BUF9VTldSSVRURU46XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjU2LVxcdFxcdGlmICghKGRpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT01BUF9ESU9fV1JJVEUpKVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY1NzpcXHRcXHRcXHRyZXR1cm4gaW9tYXBfZGlvX2hvbGVfaXRlcihpdGVyLCBkaW8pO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY1OC1cXHRcXHRyZXR1cm4gaW9tYXBfZGlvX2Jpb19pdGVyKGl0ZXIsIGRpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjU5OjI0LjEzMjQyOTA1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3MTk5Njk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIERpcmVjdCBJL08gSXRlcmF0aW9uKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgRGlyZWN0IEkvTyBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0cyB0aGF0IGhhbmRsZSB0aGUgYWN0dWFsIGRhdGEgdHJhbnNmZXJzLiBNeSBtaW5kIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIGBpb21hcF9kaW9faXRlcmAuIFRoYXQgZnVuY3Rpb24gaXMga2V5LCBiZWNhdXNlIGl0J3Mgd2hlcmUgdGhlIGl0ZXJhdGl2ZSBsb2dpYyBmb3IgRGlyZWN0IEkvTyByZWFkcyBhbmQgd3JpdGVzIHJlYWxseSBraWNrcyBpbi4gSXQncyB0aGUgZW5naW5lLlxuXG5BbmQgd2hlcmUgZG9lcyB0aGlzIGVuZ2luZSBnZXQgc3RhcnRlZD8gIEFoLCB5ZXMsIGl0J3MgY2FsbGVkIGZyb20gYF9faW9tYXBfZGlvX3J3YC4gVGhhdCdzIHRoZSBjb3JlIERpcmVjdCBJL08gcmVhZC93cml0ZSBmdW5jdGlvbiwgdGhlIG9uZSB0aGF0IG9yY2hlc3RyYXRlcyB0aGUgb3ZlcmFsbCBwcm9jZXNzLCBzZXRzIHVwIHRoZSBpbml0aWFsIGNvbmRpdGlvbnMsIGFuZCB0aGVuIHByZXN1bWFibHkgaGFuZHMgb2ZmIHRoZSBpdGVyYXRpdmUgd29ya2xvYWQgdG8gYGlvbWFwX2Rpb19pdGVyYC4gU28sIGBfX2lvbWFwX2Rpb19yd2Agc2V0cyB0aGUgc3RhZ2UgYW5kIGBpb21hcF9kaW9faXRlcmAgZG9lcyB0aGUgaGVhdnkgbGlmdGluZywgYmxvY2sgYnkgYmxvY2ssIGJ5dGUgYnkgYnl0ZS4gIFVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRob3NlIHR3byBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwZXJmb3JtYW5jZSBhbmQgZWZmaWNpZW5jeSBvZiBEaXJlY3QgSS9PLiBOZWVkIHRvIGRpZyBpbnRvIHRoYXQgY29udHJvbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzAyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6NTk6MjcuNDA0NDI5MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQxNzU5MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9tYXBfZGlvX2l0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjE2PXN0YXRpYyBpbnQgaW9tYXBfZGlvX2lubGluZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NDctXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjQ4OnN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NDkte1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NzAwPV9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODI1LVxcdHdoaWxlICgocmV0ID0gaW9tYXBfaXRlcihcXHUwMDI2aW9taSwgb3BzKSkgXFx1MDAzZSAwKSB7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODI2OlxcdFxcdGlvbWkuc3RhdHVzID0gaW9tYXBfZGlvX2l0ZXIoXFx1MDAyNmlvbWksIGRpbyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODI3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjo1OToyNy41Njg2MTUzNzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDgwNjkwODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnkgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdlbGwtdmVyc2VkIGluIEkvTyBvcGVyYXRpb25zIGFuZCB0aGUgaW9tYXAgc3Vic3lzdGVtOlxuXG4qKkRpcmVjdCBJL08gaW4gdGhlIGlvbWFwIGNvbnRleHQqKlxuXG5SaWdodCwgc28gYF9faW9tYXBfZGlvX3J3YCBpcyB0aGUgbHluY2hwaW4gZnVuY3Rpb24gZm9yIGRpcmVjdCBJL08gd2l0aGluIHRoZSBpb21hcCBmcmFtZXdvcmsuIFRoYXQncyB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciB3aGVuIGRlYWxpbmcgd2l0aCBieXBhc3NpbmcgdGhlIHBhZ2UgY2FjaGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBpdCdzIGFsd2F5cyBwcnVkZW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55ICpzcGVjaWZpYyogY29uZmlndXJhdGlvbiBvcHRpb25zLCBrbm9icywgb3IgdHVuYWJsZXMgdGhhdCBpbmZsdWVuY2UgdGhlIGlvbWFwIGJlaGF2aW9yLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBpbiBteSBleHBlcnQgdW5kZXJzdGFuZGluZywgdGhhdCB0aGVzZSBraW5kcyBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMgY291bGQgc3VidGx5IGNoYW5nZSBob3cgYF9faW9tYXBfZGlvX3J3YCB3b3Jrcy4gSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoZSBjb250ZXh0LCBhbmQgYW55IHNwZWNpZmljIGFkYXB0YXRpb25zIGluIHRoZSBjb25maWd1cmF0aW9uLCBiZWZvcmUgYW55IGZ1cnRoZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4ODcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjo1OTozMC42NDkzMTAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDY5MjA1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlNfSU9NQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MTI9Y29uZmlnIFZBTElEQVRFX0ZTX1BBUlNFUlxcbi0tXFxuZnMvS2NvbmZpZy0xNy1cXG5mcy9LY29uZmlnOjE4OmNvbmZpZyBGU19JT01BUFxcbmZzL0tjb25maWctMTktXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjo1OTozMC44NjQwMDgxMzdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDk2NzI0ODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipFeGFtaW5pbmcgdGhlIERlcGVuZGVuY3kgb2YgRlNfSU9NQVAqKlxuXG5SaWdodCwgc28gYEZTX0lPTUFQYCBpcyBhIGJvb2xlYW4gZmxhZywgY29tbW9ubHkgdXNlZCBieSBhIG51bWJlciBvZiBmaWxlc3lzdGVtcyDigJMgWEZTLCBleHQ0LCBidHJmcywgdGhhdCBzb3J0IG9mIHRoaW5nLiBJdCdzIHVzdWFsbHkgc29tZXRoaW5nIHRoYXQgZ2V0cyBlbmFibGVkIGF0IHRoZSBmaWxlc3lzdGVtIGxldmVsLCBhbmQgSSBjYW4gdGVjaG5pY2FsbHkgY29uZmlndXJlIGl0IGFzIGEgaGlkZGVuIGJvb2xlYW4sIGJ1dCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHByZWNpc2VseSBkZXRlcm1pbmVzIHdoZXRoZXIgYEZTX0lPTUFQYCBpcyBhY3R1YWxseSBzZWxlY3RlZC4gSXQncyBhIGtleSBkZXRhaWwgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmlsZXN5c3RlbXMgYXJlIGJlaGF2aW5nLiBUaW1lIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgdGhlIHNlbGVjdGlvbiBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjEyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6NTk6MzMuOTYwNzM1OTU5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM5MzgzNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEZTX0lPTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTU4PWNvbmZpZyBGU19EQVhcXG4tLVxcbmZzL0tjb25maWctNjEtXFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbmZzL0tjb25maWc6NjI6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvS2NvbmZpZy02My1cXHRzZWxlY3QgREFYXFxuLS1cXG5mcy9idHJmcy9LY29uZmlnPTM9Y29uZmlnIEJUUkZTX0ZTXFxuLS1cXG5mcy9idHJmcy9LY29uZmlnLTE0LVxcdHNlbGVjdCBaU1REX0RFQ09NUFJFU1NcXG5mcy9idHJmcy9LY29uZmlnOjE1OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2J0cmZzL0tjb25maWctMTYtXFx0c2VsZWN0IFJBSUQ2X1BRXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnPTM9Y29uZmlnIEVST0ZTX0ZTXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTgtXFx0c2VsZWN0IENSWVBUT19ERUZMQVRFIGlmIEVST0ZTX0ZTX1pJUF9BQ0NFTFxcbmZzL2Vyb2ZzL0tjb25maWc6OTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9lcm9mcy9LY29uZmlnLTEwLVxcdHNlbGVjdCBMWjRfREVDT01QUkVTUyBpZiBFUk9GU19GU19aSVBcXG4tLVxcbmZzL2V4ZmF0L0tjb25maWc9Mz1jb25maWcgRVhGQVRfRlNcXG4tLVxcbmZzL2V4ZmF0L0tjb25maWctNi1cXHRzZWxlY3QgTkxTXFxuZnMvZXhmYXQvS2NvbmZpZzo3OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2V4ZmF0L0tjb25maWctOC1cXHRoZWxwXFxuLS1cXG5mcy9leHQyL0tjb25maWc9Mj1jb25maWcgRVhUMl9GU1xcbi0tXFxuZnMvZXh0Mi9LY29uZmlnLTQtXFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuZnMvZXh0Mi9LY29uZmlnOjU6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZXh0Mi9LY29uZmlnLTYtXFx0aGVscFxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTI9Y29uZmlnIEVYVDRfRlNcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy03LVxcdHNlbGVjdCBDUkMzMlxcbmZzL2V4dDQvS2NvbmZpZzo4OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2V4dDQvS2NvbmZpZy05LVxcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxcbi0tXFxuZnMvZjJmcy9LY29uZmlnPTI9Y29uZmlnIEYyRlNfRlNcXG4tLVxcbmZzL2YyZnMvS2NvbmZpZy05LVxcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxcbmZzL2YyZnMvS2NvbmZpZzoxMDpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9mMmZzL0tjb25maWctMTEtXFx0c2VsZWN0IExaNF9DT01QUkVTUyBpZiBGMkZTX0ZTX0xaNFxcbi0tXFxuZnMvZnVzZS9LY29uZmlnPTI9Y29uZmlnIEZVU0VfRlNcXG4tLVxcbmZzL2Z1c2UvS2NvbmZpZy00LVxcdHNlbGVjdCBGU19QT1NJWF9BQ0xcXG5mcy9mdXNlL0tjb25maWc6NTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9mdXNlL0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5mcy9nZnMyL0tjb25maWc9Mj1jb25maWcgR0ZTMl9GU1xcbi0tXFxuZnMvZ2ZzMi9LY29uZmlnLTctXFx0c2VsZWN0IFFVT1RBQ1RMXFxuZnMvZ2ZzMi9LY29uZmlnOjg6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZ2ZzMi9LY29uZmlnLTktXFx0aGVscFxcbi0tXFxuZnMvaHBmcy9LY29uZmlnPTI9Y29uZmlnIEhQRlNfRlNcXG4tLVxcbmZzL2hwZnMvS2NvbmZpZy01LVxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL2hwZnMvS2NvbmZpZzo2OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2hwZnMvS2NvbmZpZy03LVxcdGhlbHBcXG4tLVxcbmZzL25pbGZzMi9LY29uZmlnPTI9Y29uZmlnIE5JTEZTMl9GU1xcbi0tXFxuZnMvbmlsZnMyL0tjb25maWctNS1cXHRzZWxlY3QgQ1JDMzJcXG5mcy9uaWxmczIvS2NvbmZpZzo2OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL25pbGZzMi9LY29uZmlnLTctXFx0aGVscFxcbi0tXFxuZnMvbnRmcy9LY29uZmlnPTI9Y29uZmlnIE5URlNfRlNcXG4tLVxcbmZzL250ZnMvS2NvbmZpZy00LVxcdHNlbGVjdCBOTFNcXG5mcy9udGZzL0tjb25maWc6NTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9udGZzL0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5mcy94ZnMvS2NvbmZpZz0yPWNvbmZpZyBYRlNfRlNcXG4tLVxcbmZzL3hmcy9LY29uZmlnLTYtXFx0c2VsZWN0IENSQzMyXFxuZnMveGZzL0tjb25maWc6NzpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy94ZnMvS2NvbmZpZy04LVxcdGhlbHBcXG4tLVxcbmZzL3pvbmVmcy9LY29uZmlnPTE9Y29uZmlnIFpPTkVGU19GU1xcbi0tXFxuZnMvem9uZWZzL0tjb25maWctNC1cXHRkZXBlbmRzIG9uIEJMS19ERVZfWk9ORURcXG5mcy96b25lZnMvS2NvbmZpZzo1OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL3pvbmVmcy9LY29uZmlnLTYtXFx0c2VsZWN0IENSQzMyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjU5OjM0LjE5NDY4MDA5NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjMxMTYzNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgRlNfSU9NQVBgIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IHRoZSBgRlNfSU9NQVBgIG9wdGlvbiBpcyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIHdoZW4geW91IGVuYWJsZSBhIGxvdCBvZiBkaWZmZXJlbnQgZmlsZXN5c3RlbXMuIEkgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBleHBsaWNpdGx5IHNldHRpbmcgYEZTX0lPTUFQYCBpdHNlbGYgaWYgSSdtIGVuYWJsaW5nIHNvbWV0aGluZyBsaWtlIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIG9yIGBCVFJGU19GU2AsIGJlY2F1c2UgdGhlIGRlcGVuZGVuY2llcyBzaG91bGQgdGFrZSBjYXJlIG9mIHRoYXQgZm9yIG1lLiBJIGNhbiBqdXN0IGNvbmZpZ3VyZSB0aGUgaGlnaGVyLWxldmVsIGZpbGVzeXN0ZW0gb3B0aW9ucyBkaXJlY3RseS4gQWN0dWFsbHksIHNpbmNlIGBGU19JT01BUGAgaXMgaGlkZGVuLCBJIGNvdWxkbid0IGV2ZW4gZW5hYmxlIGl0IGRpcmVjdGx5LCB3aGljaCBtYWtlcyB0aGlzIGV2ZW4gc2ltcGxlciAtIEknbGwgZm9jdXMgb24gZW5hYmxpbmcgYEVYVDRfRlNgLCBgWEZTX0ZTYCwgYEJUUkZTX0ZTYCwgb3IgYEYyRlNfRlNgIGRpcmVjdGx5LlxuXG5Ob3csIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgYW5kIGBpb21hcF9kaW9fYWxpZ25tZW50YC4gSG1tLCBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgc2VlbXMgbGlrZSBhIGtleSBzeW1ib2wgaGVyZSwgYXNzdW1pbmcgaXQncyBub3QgaW5saW5lZC4gSXQncyBtYXJrZWQgYXMgYHN0YXRpY2AsIHNvIGl0IG1pZ2h0IGJlIGlubGluZWQuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayBpZiB0aGF0IGlzIGFjdHVhbGx5IHRoZSBjYXNlLiBPa2F5LCBpdCdzIGRlZmluaXRlbHkgYHN0YXRpY2AuXG5cblRoZSBjb3JlIGZ1bmN0aW9uIGlzIGBfX2lvbWFwX2Rpb19yd2AsIHdoaWNoIGhhbmRsZXMgZGlyZWN0IEkvTyBvcGVyYXRpb25zIHVzaW5nIGlvbWFwLiBJdCdzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LCBzbyBJJ2xsIHZlcmlmeSBpZiBpdCdzIGV4cG9ydGVkIG9yIG5vdCBzdGF0aWMuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDk5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjU5OjM5LjQyNTg0ODAyNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ1NDE3OTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faW9tYXBfZGlvX3J3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jPTQxOD1zdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTEzLVxcdFxcdCAqIFdyaXRlcyB0aGF0IGV4dGVuZCBpX3NpemUgYXJlIGFsc28gbm90IHN1cHBvcnRlZCwgYnV0IHRoaXMgaXNcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo1MTQ6XFx0XFx0ICogaGFuZGxlZCBpbiBfX2lvbWFwX2Rpb19ydygpLlxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTUxNS1cXHRcXHQgKi9cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY0OD1zdGF0aWMgaW50IGlvbWFwX2Rpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02ODgtICogV2hlbiBwYWdlIGZhdWx0cyBhcmUgZGlzYWJsZWQgYW5kIEBkaW9fZmxhZ3MgaW5jbHVkZXMgSU9NQVBfRElPX1BBUlRJQUwsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6Njg5OiAqIF9faW9tYXBfZGlvX3J3IGNhbiByZXR1cm4gYSBwYXJ0aWFsIHJlc3VsdCBpZiBpdCBlbmNvdW50ZXJzIGEgbm9uLXJlc2lkZW50XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjkwLSAqIHBhZ2UgaW4gQGl0ZXIgYWZ0ZXIgcHJlcGFyaW5nIGEgdHJhbnNmZXIuICBJbiB0aGF0IGNhc2UsIHRoZSBub24tcmVzaWRlbnRcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY5OT1zdHJ1Y3QgaW9tYXBfZGlvICpcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo3MDA6X19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNzAxLVxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTAtfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkxMTpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19ydyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTEyLVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTE0PWlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxOS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MjA6XFx0ZGlvID0gX19pb21hcF9kaW9fcncoaW9jYiwgaXRlciwgb3BzLCBkb3BzLCBkaW9fZmxhZ3MsIHByaXZhdGUsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTIxLVxcdFxcdFxcdCAgICAgZG9uZV9iZWZvcmUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjo1OTozOS43NzEyNzE2NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQwNDIyMTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJL08gTWFwcGluZyBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSBgX19pb21hcF9kaW9fcndgIGlzIGV4cG9ydGVkLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHVzdWFsbHkgZnVuY3Rpb25zIHdpdGggYSBkb3VibGUgdW5kZXJzY29yZSBhcmUgZm9yIGludGVybmFsIHVzZSwgYnV0IHRoaXMgb25lIGlzIGFwcGFyZW50bHkgbWFkZSBhdmFpbGFibGUuIFRoZW4sIG9uIHRvcCBvZiB0aGF0LCB0aGVyZSdzIGBpb21hcF9kaW9fcndgLCB3aGljaCBpcyBhbHNvIGV4cG9ydGVkLiBJIHdvbmRlciB3aGF0IHRoZSByZWxhdGlvbnNoaXAgaXM/IEdpdmVuIHRoYXQgSSBzZWUgYm90aCwgbXkgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gYGlvbWFwX2Rpb19yd2AgZmlyc3QsIGFzIHRoYXQgbWlnaHQgYmUgdGhlIGhpZ2hlci1sZXZlbCBpbnRlcmZhY2UuIExldCdzIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZ2xlYW4uIEl0J2xsIHByb2JhYmx5IGNhbGwgdGhlIG90aGVyIGZ1bmN0aW9uLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjczNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjU5OjQyLjcxMTY5NzIwNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NDE3NzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX2Rpb19yd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uYz00MTg9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTUxMy1cXHRcXHQgKiBXcml0ZXMgdGhhdCBleHRlbmQgaV9zaXplIGFyZSBhbHNvIG5vdCBzdXBwb3J0ZWQsIGJ1dCB0aGlzIGlzXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NTE0OlxcdFxcdCAqIGhhbmRsZWQgaW4gX19pb21hcF9kaW9fcncoKS5cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01MTUtXFx0XFx0ICovXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02NDg9c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjc5LS8qXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjgwOiAqIGlvbWFwX2Rpb19ydygpIGFsd2F5cyBjb21wbGV0ZXMgT19bRF1TWU5DIHdyaXRlcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIElPXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjgxLSAqIGlzIGJlaW5nIGlzc3VlZCBhcyBBSU8gb3Igbm90LiAgVGhpcyBhbGxvd3MgdXMgdG8gb3B0aW1pc2UgcHVyZSBkYXRhIHdyaXRlc1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjg4LSAqIFdoZW4gcGFnZSBmYXVsdHMgYXJlIGRpc2FibGVkIGFuZCBAZGlvX2ZsYWdzIGluY2x1ZGVzIElPTUFQX0RJT19QQVJUSUFMLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY4OTogKiBfX2lvbWFwX2Rpb19ydyBjYW4gcmV0dXJuIGEgcGFydGlhbCByZXN1bHQgaWYgaXQgZW5jb3VudGVycyBhIG5vbi1yZXNpZGVudFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY5MC0gKiBwYWdlIGluIEBpdGVyIGFmdGVyIHByZXBhcmluZyBhIHRyYW5zZmVyLiAgSW4gdGhhdCBjYXNlLCB0aGUgbm9uLXJlc2lkZW50XFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02OTk9c3RydWN0IGlvbWFwX2RpbyAqXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NzAwOl9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTcwMS1cXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNzE3LVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjcxODpcXHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgZGlvX2ZsYWdzLCBkb25lX2JlZm9yZSk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNzE5LVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODg4LVxcdFxcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbikge1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjg4OTpcXHRcXHRcXHR0cmFjZV9pb21hcF9kaW9fcndfcXVldWVkKGlub2RlLCBpb21pLnBvcywgaW9taS5sZW4pO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTg5MC1cXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlPQ0JRVUVVRUQpO1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTEwLX1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MTE6RVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcncpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxMi1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz05MTM9c3NpemVfdFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkxNDppb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTE1LVxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTktXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTIwOlxcdGRpbyA9IF9faW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIG9wcywgZG9wcywgZGlvX2ZsYWdzLCBwcml2YXRlLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyMS1cXHRcXHRcXHQgICAgIGRvbmVfYmVmb3JlKTtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyNS19XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTI2OkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2Rpb19ydyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTI3LVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTAwMj1zc2l6ZV90IF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAzMC1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDMxOlxcdHRyYWNlX2lvbWFwX2Rpb19yd19iZWdpbihpb2NiLCBpdGVyLCAwLCAwKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDMyLVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA3Ni1cXHRzdWJtaXRfYmlvKGJpbyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA3NzpcXHR0cmFjZV9pb21hcF9kaW9fcndfcXVldWVkKGlvbWktXFx1MDAzZWlub2RlLCBpb2NiLVxcdTAwM2VraV9wb3MsIGlvbWktXFx1MDAzZWxlbik7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA3OC1cXHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjo1OTo0Mi44OTgxMjAzNjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkwODA5NzI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRGlyZWN0IElPIEhvbGUgSXRlcmF0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgaW9tYXBfZGlvX2hvbGVfaXRlcmAsIHdoaWNoLCBpZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5LCBoYW5kbGVzIGhvbGVzIGR1cmluZyBkaXJlY3QgSS9PLiBJdCdzIGFsc28gbWFraW5nIGNoYW5nZXMgdG8gYGlvbWFwX2Rpb19hbGlnbm1lbnRgLiBOb3csIHRoZSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGZvY3VzIG9uIGBfX2lvbWFwX2Rpb19yd2AgYW5kIGBpb21hcF9kaW9fcndgIGFzIHRoZSBrZXkgc3ltYm9scyBzaW5jZSB0aGV5IHJlcHJlc2VudCB0aGUgaG90IHBhdGhzIGZvciBkaXJlY3QgSS9PLiBIb3dldmVyLCBJIHdhbnQgdG8gYmUgY2VydGFpbiB0aGVyZSBhcmVuJ3QgYW55IG90aGVyICpzcGVjaWZpYyogbm9uLWlubGluZWQgZnVuY3Rpb25zIHRvIHRhcmdldC5cblxuSG9sZCBvbiBhIHNlY29uZCwgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIGlzIG1hcmtlZCBhcyBzdGF0aWMuIFRoYXQgc3VnZ2VzdHMgaW5saW5pbmcsIHdoaWNoIG1ha2VzIGl0IGEgcG9vciBjYW5kaWRhdGUgdG8gYmUgdGhlIGNlbnRyYWwgc3ltYm9sLiBMZXQncyBjb25maXJtIHdoZXRoZXIgaXTigJlzIGlubGluZWQgb3Igbm90LiBJdCBsb29rcyBsaWtlIGl0IGlzIGNhbGxlZCBmcm9tIHdpdGhpbiBgaW9tYXBfZGlvX2l0ZXJgLCB3aGljaCBpcyBhIHN3aXRjaCBzdGF0ZW1lbnQuIEFoYSEgYGlvbWFwX2Rpb19pdGVyYCBpcyBjYWxsZWQgZnJvbSBgX19pb21hcF9kaW9fcndgLiBTbywgYXMgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIGlzIHN0YXRpYywgbXkgaW5pdGlhbCB0aG91Z2h0IG9mIGZvY3VzaW5nIG9uIGBfX2lvbWFwX2Rpb19yd2AgYW5kIGBpb21hcF9kaW9fcndgIGlzIGNvcnJlY3QsIHNpbmNlIHRoZXNlIGFyZSB0aGUgZW50cnkgcG9pbnRzLCBldmVuIHRob3VnaCB0aGV5IGFyZSBob3QtcGF0aCBkaXJlY3QgSU8gZnVuY3Rpb25zLlxuXG5Ib3dldmVyLCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBpb21hcF9kaW9fYWxpZ25tZW50YCB0byBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcml0aWNhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIyNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjo1OTo0OC44MDYyMjA4ODFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjI3Mzg5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21hcF9kaW9fYWxpZ25tZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jPTMzNT1zdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNDA2LVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjQwNzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb21hcF9kaW9fYWxpZ25tZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNDA4LVxcdFxcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHVuc2lnbmVkIGludCBkaW9fZmxhZ3MpXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz00MTg9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTQzNS1cXHQgKi9cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo0MzY6XFx0YWxpZ25tZW50ID0gaW9tYXBfZGlvX2FsaWdubWVudChpbm9kZSwgaW9tYXAtXFx1MDAzZWJkZXYsIGRpby1cXHUwMDNlZmxhZ3MpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTQzNy1cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTU5OD1zdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTYwMC1cXHRsb2ZmX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cXHUwMDNlc3VibWl0Lml0ZXIpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjYwMTpcXHR1bnNpZ25lZCBpbnQgYnMgPSBpb21hcF9kaW9fYWxpZ25tZW50KGl0ZXItXFx1MDAzZWlub2RlLCBpdGVyLVxcdTAwM2Vpb21hcC5iZGV2LFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTYwMi1cXHRcXHRcXHRcXHRcXHQgICAgICBkaW8tXFx1MDAzZWZsYWdzKTtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTEwMDI9c3NpemVfdCBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMTctXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTAxODpcXHRhbGlnbm1lbnQgPSBpb21hcF9kaW9fYWxpZ25tZW50KGlvbWktXFx1MDAzZWlub2RlLCBpb21pLVxcdTAwM2Vpb21hcC5iZGV2LCAwKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDE5LVxcdGlmICgoaW9taS1cXHUwMDNlcG9zIHwgaW9taS1cXHUwMDNlbGVuKSBcXHUwMDI2IChhbGlnbm1lbnQgLSAxKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjo1OTo0OC45Mjg1MDA2NDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc0MTQ2NTEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW50ZXJuYWwgQ29kZSBFeHBsb3JhdGlvbiAtIGlvbWFwX2Rpb19yZWFkX3NpbXBsZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIHRocm91Z2ggdGhpcyBjb2RlLCBhbmQgSSBzZWUgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMsIFwiSXMgdGhpcyBvbmUgb2YgdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucyB3ZSdyZSB1c2luZz9cIiBJIGhhdmUgdG8gcXVpY2tseSByZW1pbmQgbXlzZWxmIHRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLiBCdXQgaXMgaXQ/IExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayByZWFsIHF1aWNrIHRvIG1ha2Ugc3VyZS4gSSdsbCBuZWVkIHRvIGdvIGxvb2sgdGhyb3VnaCB0aGUgZXhwb3J0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ5MiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjU5OjUxLjY2OTk3MDE3N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE1MTkwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19pb21hcF9kaW9fcmVhZF9zaW1wbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTg0PXN0YXRpYyB2b2lkIGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMDEtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTAwMjpzc2l6ZV90IF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMDMtXFx0XFx0c3RydWN0IGlvbWFwX2l0ZXIgKmlvbWkpXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDg3LX1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDg4OkVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDg5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjo1OTo1MS43NTE0OTcyMTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc3ODQ4Mjg4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIHRoYXQncyBnb29kIHRvIGtub3cuIExvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGgsIGl0IHNlZW1zIGxpa2UgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlIGBfX2lvbWFwX2Rpb19yd2AsIGBpb21hcF9kaW9fcndgLCBhbmQgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYC4gSSBpbml0aWFsbHkgY29uc2lkZXJlZCBgaW9tYXBfZGlvX2hvbGVfaXRlcmAsIGJ1dCBzaW5jZSB0aGF0J3Mgc3RhdGljLCBpdCdzIG5vdCBpZGVhbCBmb3Igb3VyIHB1cnBvc2VzLiBIbW0sIGJ1dCBoYW5nIG9uLi4uIGBpb21hcF9kaW9faG9sZV9pdGVyYCAqaXMqIGNhbGxlZCBieSBgaW9tYXBfZGlvX2l0ZXJgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBfX2lvbWFwX2Rpb19yd2AuIE5vdywgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCBpdHNlbGYgZG9lc24ndCBkaXJlY3RseSBjYWxsIGBpb21hcF9kaW9faG9sZV9pdGVyYCwgYnV0IGl0ICpkb2VzKiBjYWxsIGBpb21hcF9kaW9fYWxpZ25tZW50YC4gQW5kIHRoZSBwYXRjaCBtb2RpZmllcyBib3RoIGBpb21hcF9kaW9fYWxpZ25tZW50YCBhbmQgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgLiBTbyBhbGwgdGhyZWUg4oCTIGBfX2lvbWFwX2Rpb19yd2AsIGBpb21hcF9kaW9fcndgLCBhbmQgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCDigJMgYXJlIGRlZmluaXRlbHkgcmVsZXZhbnQgZm9jdXMgc3ltYm9scy4gV2FpdCBhIG1pbnV0ZS4uLiBgaW9tYXBfZGlvX3J3YCBpcyBqdXN0IGEgd3JhcHBlciBhcm91bmQgYF9faW9tYXBfZGlvX3J3YC4gVGhlcmVmb3JlLCBgX19pb21hcF9kaW9fcndgIGlzIHRoZSBtb3JlIGNlbnRyYWwgc3ltYm9sIHRvIGZvY3VzIG9uLiBBbHJpZ2h0LCBsZXQncyBqdXN0IGRvIGEgcXVpY2sgc2NhbiB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSBpbXBvcnRhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4OTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6NTk6NTYuNTI5OTg0MDAzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE2Mzc5OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uYz0xMDU9c3NpemVfdCBpb21hcF9kaW9fY29tcGxldGUoc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTYwLX1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxNjE6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX2NvbXBsZXRlKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xNjItXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz0yNzI9dm9pZCBpb21hcF9kaW9fYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0yNzktfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjI4MDpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaW9fYmlvX2VuZF9pbyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMjgxLVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NzAwPV9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTEwLX1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MTE6RVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcncpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxMi1cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTkxND1pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MjUtfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkyNjpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaW9fcncpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyNy1cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTEwMDI9c3NpemVfdCBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwODctfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwODg6RVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcmVhZF9zaW1wbGUpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwODktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjU5OjU2LjcyMTY0OTlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyNjgyMjQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRGlyZWN0IEkvTyBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIERpcmVjdCBJL08gZW50cnkgcG9pbnRzLiBJdCBsb29rcyBsaWtlIGBfX2lvbWFwX2Rpb19yd2AsIGBpb21hcF9kaW9fcndgLCBhbmQgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRvIGJlIGNvbnNpZGVyZWQgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gY2VudGVyIG15IGludmVzdGlnYXRpb24gb24gYF9faW9tYXBfZGlvX3J3YCBhbmQgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYC4gSG93ZXZlciwgd2FpdCBhIG1pbnV0ZSwgYGlvbWFwX2Rpb19yd2AgaXMgYWxzbyBhbiBlbnRyeSBwb2ludCBhbmQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IGZpbGVzeXN0ZW1zIG1pZ2h0IGRpcmVjdGx5IGNhbGwgaXQuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBjYWxsZXJzIG9mIGBpb21hcF9kaW9fcndgIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTI1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA3OjAwOjAwLjI0ODQ3Njk4NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5OTkxMzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX2Rpb19yd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYnRyZnMvZGlyZWN0LWlvLmM9MzY0PXN0YXRpYyBpbnQgYnRyZnNfZGlvX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzdGFydCxcXG4tLVxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTQwNC1cXHQvKlxcbmZzL2J0cmZzL2RpcmVjdC1pby5jOjQwNTpcXHQgKiBpb21hcF9kaW9fcncoKSBvbmx5IGRvZXMgZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZSgpLCB3aGljaCBpc24ndFxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTQwNi1cXHQgKiBlbm91Z2ggaWYgd2UndmUgd3JpdHRlbiBjb21wcmVzc2VkIHBhZ2VzIHRvIHRoaXMgYXJlYSwgc28gd2UgbmVlZCB0b1xcbi0tXFxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtNDE2LVxcdCAqIGRpcnR5IG9yIHVuZGVyIHdyaXRlYmFjayAoc2FtZSBhcyBmb3IgdGhlIG5vbi1jb21wcmVzc2lvbiBjYXNlKS5cXG5mcy9idHJmcy9kaXJlY3QtaW8uYzo0MTc6XFx0ICogaW9tYXBfZGlvX3J3KCkgZGlkIHRoZSBzYW1lIGNoZWNrLCBidXQgYWZ0ZXIgdGhhdCBhbmQgYmVmb3JlIHdlIGdvdFxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTQxOC1cXHQgKiBoZXJlLCBtbWFwJ2VkIHdyaXRlcyBtYXkgaGF2ZSBoYXBwZW5lZCBvciBidWZmZXJlZCByZWFkcyBzdGFydGVkXFxuLS1cXG5mcy9idHJmcy9kaXJlY3QtaW8uYy01MTUtXFx0ICogV2hlbiBkb2luZyBhIHJlYWQsIGJlY2F1c2Ugd2UgdXNlIElPTUFQX0RJT19QQVJUSUFMIHdoZW4gY2FsbGluZ1xcbmZzL2J0cmZzL2RpcmVjdC1pby5jOjUxNjpcXHQgKiBpb21hcF9kaW9fcncoKSwgd2UgY2FuIGVuZCB1cCByZXR1cm5pbmcgbGVzcyBkYXRhIHRoZW4gd2hhdCB0aGUgY2FsbGVyXFxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtNTE3LVxcdCAqIGFza2VkIGZvciwgcmVzdWx0aW5nIGluIGFuIHVuZXhwZWN0ZWQsIGFuZCBpbmNvcnJlY3QsIHNob3J0IHJlYWQuXFxuLS1cXG5mcy9idHJmcy9kaXJlY3QtaW8uYy01MjAtXFx0ICogcGFnZSBmYXVsdCBlcnJvciB3aGVuIHRyeWluZyB0byBmYXVsdCBpbiBwYWdlcyBmb3IgdGhlIGJ1ZmZlciB0aGF0IGlzXFxuZnMvYnRyZnMvZGlyZWN0LWlvLmM6NTIxOlxcdCAqIGFzc29jaWF0ZWQgdG8gdGhlIHN0cnVjdCBpb3ZfaXRlciBwYXNzZWQgdG8gaW9tYXBfZGlvX3J3KCksIGFuZCB3ZVxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTUyMi1cXHQgKiBoYXZlIHByZXZpb3VzbHkgc3VibWl0dGVkIGJpb3MgZm9yIG90aGVyIGV4dGVudHMgaW4gdGhlIHJhbmdlLCBpblxcbmZzL2J0cmZzL2RpcmVjdC1pby5jOjUyMzpcXHQgKiB3aGljaCBjYXNlIGlvbWFwX2Rpb19ydygpIG1heSByZXR1cm4gdXMgRUlPQ0JRVUVVRUQgaWYgbm90IGFsbCBvZlxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTUyNC1cXHQgKiB0aG9zZSBiaW9zIGhhdmUgY29tcGxldGVkIGJ5IHRoZSB0aW1lIHdlIGdldCB0aGUgcGFnZSBmYXVsdCBlcnJvcixcXG4tLVxcbmZzL2J0cmZzL2RpcmVjdC1pby5jPTgxMz1zdGF0aWMgc3NpemVfdCBidHJmc19kaW9fcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTgxNy1cXG5mcy9idHJmcy9kaXJlY3QtaW8uYzo4MTg6XFx0cmV0dXJuIGlvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLCBcXHUwMDI2YnRyZnNfZGlvX2lvbWFwX29wcywgXFx1MDAyNmJ0cmZzX2Rpb19vcHMsXFxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtODE5LVxcdFxcdFxcdCAgICBJT01BUF9ESU9fUEFSVElBTCB8IElPTUFQX0RJT19GU0JMT0NLX0FMSUdORUQsIFxcdTAwMjZkYXRhLCBkb25lX2JlZm9yZSk7XFxuLS1cXG5mcy9idHJmcy9kaXJlY3QtaW8uYz04MjI9c3RhdGljIHN0cnVjdCBpb21hcF9kaW8gKmJ0cmZzX2Rpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTgyNi1cXG5mcy9idHJmcy9kaXJlY3QtaW8uYzo4Mjc6XFx0cmV0dXJuIF9faW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIFxcdTAwMjZidHJmc19kaW9faW9tYXBfb3BzLCBcXHUwMDI2YnRyZnNfZGlvX29wcyxcXG5mcy9idHJmcy9kaXJlY3QtaW8uYy04MjgtXFx0XFx0XFx0ICAgIElPTUFQX0RJT19QQVJUSUFMIHwgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRCwgXFx1MDAyNmRhdGEsIGRvbmVfYmVmb3JlKTtcXG4tLVxcbmZzL2Vyb2ZzL2RhdGEuYz00NDc9c3RhdGljIHNzaXplX3QgZXJvZnNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbi0tXFxuZnMvZXJvZnMvZGF0YS5jLTQ2Mi1cXG5mcy9lcm9mcy9kYXRhLmM6NDYzOlxcdFxcdHJldHVybiBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFxcdTAwMjZlcm9mc19pb21hcF9vcHMsXFxuZnMvZXJvZnMvZGF0YS5jLTQ2NC1cXHRcXHRcXHRcXHQgICAgTlVMTCwgMCwgXFx1MDAyNml0ZXJfY3R4LCAwKTtcXG4tLVxcbmZzL2V4ZmF0L2ZpbGUuYz03MDg9c3RhdGljIHNzaXplX3QgZXhmYXRfZGlvX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9leGZhdC9maWxlLmMtNzExLVxcbmZzL2V4ZmF0L2ZpbGUuYzo3MTI6XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIFxcdTAwMjZleGZhdF93cml0ZV9pb21hcF9vcHMsXFxuZnMvZXhmYXQvZmlsZS5jLTcxMy1cXHRcXHRcXHRcXHUwMDI2ZXhmYXRfd3JpdGVfZGlvX29wcywgMCwgTlVMTCwgMCk7XFxuLS1cXG5mcy9leGZhdC9maWxlLmM9ODAwPXN0YXRpYyBzc2l6ZV90IGV4ZmF0X2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxcbi0tXFxuZnMvZXhmYXQvZmlsZS5jLTgxMS1cXHRcXHRmaWxlX2FjY2Vzc2VkKGlvY2ItXFx1MDAzZWtpX2ZpbHApO1xcbmZzL2V4ZmF0L2ZpbGUuYzo4MTI6XFx0XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIFxcdTAwMjZleGZhdF9pb21hcF9vcHMsIE5VTEwsIDAsXFxuZnMvZXhmYXQvZmlsZS5jLTgxMy1cXHRcXHRcXHRcXHROVUxMLCAwKTtcXG4tLVxcbmZzL2V4dDIvZmlsZS5jPTUwPXN0YXRpYyBzc2l6ZV90IGV4dDJfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9leHQyL2ZpbGUuYy01Ny1cXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XFxuZnMvZXh0Mi9maWxlLmM6NTg6XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIHRvLCBcXHUwMDI2ZXh0Ml9pb21hcF9vcHMsIE5VTEwsIDAsIE5VTEwsIDApO1xcbmZzL2V4dDIvZmlsZS5jLTU5LVxcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xcbi0tXFxuZnMvZXh0Mi9maWxlLmM9NjU9c3RhdGljIGludCBleHQyX2Rpb193cml0ZV9lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXFxuLS1cXG5mcy9leHQyL2ZpbGUuYy03NS1cXHQgKiBJZiB3ZSBhcmUgZXh0ZW5kaW5nIHRoZSBmaWxlLCB3ZSBoYXZlIHRvIHVwZGF0ZSBpX3NpemUgaGVyZSBiZWZvcmVcXG5mcy9leHQyL2ZpbGUuYzo3NjpcXHQgKiBwYWdlIGNhY2hlIGdldHMgaW52YWxpZGF0ZWQgaW4gaW9tYXBfZGlvX3J3KCkuIFRoaXMgcHJldmVudHMgcmFjaW5nXFxuZnMvZXh0Mi9maWxlLmMtNzctXFx0ICogYnVmZmVyZWQgcmVhZHMgZnJvbSB6ZXJvaW5nIG91dCB0b28gbXVjaCBmcm9tIHBhZ2UgY2FjaGUgcGFnZXMuXFxuLS1cXG5mcy9leHQyL2ZpbGUuYz05Nj1zdGF0aWMgc3NpemVfdCBleHQyX2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZnMvZXh0Mi9maWxlLmMtMTIxLVxcbmZzL2V4dDIvZmlsZS5jOjEyMjpcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXFx1MDAyNmV4dDJfaW9tYXBfb3BzLCBcXHUwMDI2ZXh0Ml9kaW9fd3JpdGVfb3BzLFxcbmZzL2V4dDIvZmlsZS5jLTEyMy1cXHRcXHRcXHQgICBmbGFncywgTlVMTCwgMCk7XFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy00Ni0gKiBhbnkgc3BlY2lhbCBmZWF0dXJlcyBsaWtlIGVuY3J5cHRpb24gb3IgdmVyaXR5LCBleHQ0IGhhcyB0cmFkaXRpb25hbGx5XFxuZnMvZXh0NC9maWxlLmM6NDc6ICogcmV0dXJuZWQgRUlOVkFMIGZvciBtaXNhbGlnbmVkIERJTy4gIGlvbWFwX2Rpb19ydygpIHVzZXMgdGhpcyBjb252ZW50aW9uIHRvby5cXG5mcy9leHQ0L2ZpbGUuYy00OC0gKiBJbiB0aGlzIGNhc2UsIHdlIHNob3VsZCBhdHRlbXB0IHRoZSBESU8sICpub3QqIGZhbGwgYmFjayB0byBidWZmZXJlZCBJL08uXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz02OT1zdGF0aWMgc3NpemVfdCBleHQ0X2Rpb19yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbi0tXFxuZnMvZXh0NC9maWxlLmMtOTUtXFx0aWYgKHJldCA9PSAtRU5PVEJMSylcXG5mcy9leHQ0L2ZpbGUuYzo5NjpcXHRcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFxcdTAwMjZleHQ0X2lvbWFwX29wcywgTlVMTCwgMCwgTlVMTCwgMCk7XFxuZnMvZXh0NC9maWxlLmMtOTctXFx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz01MjE9c3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL2V4dDQvZmlsZS5jLTU5My1cXG5mcy9leHQ0L2ZpbGUuYzo1OTQ6XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIFxcdTAwMjZleHQ0X2lvbWFwX29wcywgXFx1MDAyNmV4dDRfZGlvX3dyaXRlX29wcyxcXG5mcy9leHQ0L2ZpbGUuYy01OTUtXFx0XFx0XFx0ICAgZGlvX2ZsYWdzLCBOVUxMLCAwKTtcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTQ4NDk9c3RhdGljIHNzaXplX3QgZjJmc19kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTQ4ODEtXFx0LypcXG5mcy9mMmZzL2ZpbGUuYzo0ODgyOlxcdCAqIFdlIGhhdmUgdG8gdXNlIF9faW9tYXBfZGlvX3J3KCkgYW5kIGlvbWFwX2Rpb19jb21wbGV0ZSgpIGluc3RlYWQgb2ZcXG5mcy9mMmZzL2ZpbGUuYzo0ODgzOlxcdCAqIHRoZSBoaWdoZXItbGV2ZWwgZnVuY3Rpb24gaW9tYXBfZGlvX3J3KCkgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgdGhlXFxuZnMvZjJmcy9maWxlLmMtNDg4NC1cXHQgKiBGMkZTX0RJT19SRUFEIGNvdW50ZXIgd2lsbCBiZSBkZWNyZW1lbnRlZCBjb3JyZWN0bHkgaW4gYWxsIGNhc2VzLlxcbi0tXFxuZnMvZjJmcy9maWxlLmMtNDg4Ni1cXHRpbmNfcGFnZV9jb3VudChzYmksIEYyRlNfRElPX1JFQUQpO1xcbmZzL2YyZnMvZmlsZS5jOjQ4ODc6XFx0ZGlvID0gX19pb21hcF9kaW9fcncoaW9jYiwgdG8sIFxcdTAwMjZmMmZzX2lvbWFwX29wcyxcXG5mcy9mMmZzL2ZpbGUuYy00ODg4LVxcdFxcdFxcdCAgICAgXFx1MDAyNmYyZnNfaW9tYXBfZGlvX3JlYWRfb3BzLCAwLCBOVUxMLCAwKTtcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTUxNjY9c3RhdGljIHNzaXplX3QgZjJmc19kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTUyMTQtXFx0LypcXG5mcy9mMmZzL2ZpbGUuYzo1MjE1OlxcdCAqIFdlIGhhdmUgdG8gdXNlIF9faW9tYXBfZGlvX3J3KCkgYW5kIGlvbWFwX2Rpb19jb21wbGV0ZSgpIGluc3RlYWQgb2ZcXG5mcy9mMmZzL2ZpbGUuYzo1MjE2OlxcdCAqIHRoZSBoaWdoZXItbGV2ZWwgZnVuY3Rpb24gaW9tYXBfZGlvX3J3KCkgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgdGhlXFxuZnMvZjJmcy9maWxlLmMtNTIxNy1cXHQgKiBGMkZTX0RJT19XUklURSBjb3VudGVyIHdpbGwgYmUgZGVjcmVtZW50ZWQgY29ycmVjdGx5IGluIGFsbCBjYXNlcy5cXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTUyMjItXFx0XFx0ZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19GT1JDRV9XQUlUO1xcbmZzL2YyZnMvZmlsZS5jOjUyMjM6XFx0ZGlvID0gX19pb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXFx1MDAyNmYyZnNfaW9tYXBfb3BzLFxcbmZzL2YyZnMvZmlsZS5jLTUyMjQtXFx0XFx0XFx0ICAgICBcXHUwMDI2ZjJmc19pb21hcF9kaW9fd3JpdGVfb3BzLCBkaW9fZmxhZ3MsIGlvY2IsIDApO1xcbi0tXFxuZnMvZjJmcy9maWxlLmMtNTI3NC1cXHR9IGVsc2Uge1xcbmZzL2YyZnMvZmlsZS5jOjUyNzU6XFx0XFx0LyogaW9tYXBfZGlvX3J3KCkgYWxyZWFkeSBoYW5kbGVkIHRoZSBnZW5lcmljX3dyaXRlX3N5bmMoKS4gKi9cXG5mcy9mMmZzL2ZpbGUuYy01Mjc2LVxcdFxcdCptYXlfbmVlZF9zeW5jID0gZmFsc2U7XFxuLS1cXG5mcy9nZnMyL2ZpbGUuYz04MTE9c3RhdGljIHNzaXplX3QgZ2ZzMl9maWxlX2RpcmVjdF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0byxcXG4tLVxcbmZzL2dmczIvZmlsZS5jLTgyNS1cXHQgKlxcbmZzL2dmczIvZmlsZS5jOjgyNjpcXHQgKiBVbmxpa2UgZ2VuZXJpY19maWxlX3JlYWRfaXRlciwgZm9yIHJlYWRzLCBpb21hcF9kaW9fcncgY2FuIHRyaWdnZXJcXG5mcy9nZnMyL2ZpbGUuYy04MjctXFx0ICogcGh5c2ljYWwgYXMgd2VsbCBhcyBtYW51YWwgcGFnZSBmYXVsdHMsIGFuZCB3ZSBuZWVkIHRvIGRpc2FibGUgYm90aFxcbi0tXFxuZnMvZ2ZzMi9maWxlLmMtODQ2LVxcdHRvLVxcdTAwM2Vub2ZhdWx0ID0gdHJ1ZTtcXG5mcy9nZnMyL2ZpbGUuYzo4NDc6XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIHRvLCBcXHUwMDI2Z2ZzMl9pb21hcF9vcHMsIE5VTEwsXFxuZnMvZ2ZzMi9maWxlLmMtODQ4LVxcdFxcdFxcdCAgIElPTUFQX0RJT19QQVJUSUFMLCBOVUxMLCByZWFkKTtcXG4tLVxcbmZzL2dmczIvZmlsZS5jLTg1Mi1cXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuZnMvZ2ZzMi9maWxlLmM6ODUzOlxcdC8qIE5vIGluY3JlbWVudCAoKz0pIGJlY2F1c2UgaW9tYXBfZGlvX3J3IHJldHVybnMgYSBjdW11bGF0aXZlIHZhbHVlLiAqL1xcbmZzL2dmczIvZmlsZS5jLTg1NC1cXHRpZiAocmV0IFxcdTAwM2UgMClcXG4tLVxcbmZzL2dmczIvZmlsZS5jPTg3ND1zdGF0aWMgc3NpemVfdCBnZnMyX2ZpbGVfZGlyZWN0X3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbi0tXFxuZnMvZ2ZzMi9maWxlLmMtODkwLVxcdCAqXFxuZnMvZ2ZzMi9maWxlLmM6ODkxOlxcdCAqIEZvciB3cml0ZXMsIGlvbWFwX2Rpb19ydyBvbmx5IHRyaWdnZXJzIG1hbnVhbCBwYWdlIGZhdWx0cywgc28gd2VcXG5mcy9nZnMyL2ZpbGUuYy04OTItXFx0ICogZG9uJ3QgbmVlZCB0byBkaXNhYmxlIHBoeXNpY2FsIG9uZXMuXFxuLS1cXG5mcy9nZnMyL2ZpbGUuYy05MTItXFx0ZnJvbS1cXHUwMDNlbm9mYXVsdCA9IHRydWU7XFxuZnMvZ2ZzMi9maWxlLmM6OTEzOlxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcXHUwMDI2Z2ZzMl9pb21hcF9vcHMsIE5VTEwsXFxuZnMvZ2ZzMi9maWxlLmMtOTE0LVxcdFxcdFxcdCAgIElPTUFQX0RJT19QQVJUSUFMLCBOVUxMLCB3cml0dGVuKTtcXG4tLVxcbmZzL2dmczIvZmlsZS5jLTkyMS1cXHR9XFxuZnMvZ2ZzMi9maWxlLmM6OTIyOlxcdC8qIE5vIGluY3JlbWVudCAoKz0pIGJlY2F1c2UgaW9tYXBfZGlvX3J3IHJldHVybnMgYSBjdW11bGF0aXZlIHZhbHVlLiAqL1xcbmZzL2dmczIvZmlsZS5jLTkyMy1cXHRpZiAocmV0IFxcdTAwM2UgMClcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTQxOD1zdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTEzLVxcdFxcdCAqIFdyaXRlcyB0aGF0IGV4dGVuZCBpX3NpemUgYXJlIGFsc28gbm90IHN1cHBvcnRlZCwgYnV0IHRoaXMgaXNcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo1MTQ6XFx0XFx0ICogaGFuZGxlZCBpbiBfX2lvbWFwX2Rpb19ydygpLlxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTUxNS1cXHRcXHQgKi9cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY0OD1zdGF0aWMgaW50IGlvbWFwX2Rpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NzktLypcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2ODA6ICogaW9tYXBfZGlvX3J3KCkgYWx3YXlzIGNvbXBsZXRlcyBPX1tEXVNZTkMgd3JpdGVzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgSU9cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02ODEtICogaXMgYmVpbmcgaXNzdWVkIGFzIEFJTyBvciBub3QuICBUaGlzIGFsbG93cyB1cyB0byBvcHRpbWlzZSBwdXJlIGRhdGEgd3JpdGVzXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02ODgtICogV2hlbiBwYWdlIGZhdWx0cyBhcmUgZGlzYWJsZWQgYW5kIEBkaW9fZmxhZ3MgaW5jbHVkZXMgSU9NQVBfRElPX1BBUlRJQUwsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6Njg5OiAqIF9faW9tYXBfZGlvX3J3IGNhbiByZXR1cm4gYSBwYXJ0aWFsIHJlc3VsdCBpZiBpdCBlbmNvdW50ZXJzIGEgbm9uLXJlc2lkZW50XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjkwLSAqIHBhZ2UgaW4gQGl0ZXIgYWZ0ZXIgcHJlcGFyaW5nIGEgdHJhbnNmZXIuICBJbiB0aGF0IGNhc2UsIHRoZSBub24tcmVzaWRlbnRcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY5OT1zdHJ1Y3QgaW9tYXBfZGlvICpcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo3MDA6X19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNzAxLVxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy03MTctXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NzE4OlxcdHRyYWNlX2lvbWFwX2Rpb19yd19iZWdpbihpb2NiLCBpdGVyLCBkaW9fZmxhZ3MsIGRvbmVfYmVmb3JlKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy03MTktXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04ODgtXFx0XFx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uKSB7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODg5OlxcdFxcdFxcdHRyYWNlX2lvbWFwX2Rpb19yd19xdWV1ZWQoaW5vZGUsIGlvbWkucG9zLCBpb21pLmxlbik7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODkwLVxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU9DQlFVRVVFRCk7XFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTAtfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkxMTpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19ydyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTEyLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTkxMz1zc2l6ZV90XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTE0OmlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTUtXFx0XFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLCBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyAqZG9wcyxcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxOS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MjA6XFx0ZGlvID0gX19pb21hcF9kaW9fcncoaW9jYiwgaXRlciwgb3BzLCBkb3BzLCBkaW9fZmxhZ3MsIHByaXZhdGUsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTIxLVxcdFxcdFxcdCAgICAgZG9uZV9iZWZvcmUpO1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTI1LX1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MjY6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX3J3KTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MjctXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz0xMDAyPXNzaXplX3QgX19pb21hcF9kaW9fcmVhZF9zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDMwLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMzE6XFx0dHJhY2VfaW9tYXBfZGlvX3J3X2JlZ2luKGlvY2IsIGl0ZXIsIDAsIDApO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMzItXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDc2LVxcdHN1Ym1pdF9iaW8oYmlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDc3OlxcdHRyYWNlX2lvbWFwX2Rpb19yd19xdWV1ZWQoaW9taS1cXHUwMDNlaW5vZGUsIGlvY2ItXFx1MDAzZWtpX3BvcywgaW9taS1cXHUwMDNlbGVuKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDc4LVxcdHJldHVybiAtRUlPQ0JRVUVVRUQ7XFxuLS1cXG5mcy9pb21hcC90cmFjZS5oPTg1PURFRklORV9SQU5HRV9FVkVOVChpb21hcF9kaW9faW52YWxpZGF0ZV9mYWlsKTtcXG5mcy9pb21hcC90cmFjZS5oOjg2OkRFRklORV9SQU5HRV9FVkVOVChpb21hcF9kaW9fcndfcXVldWVkKTtcXG5mcy9pb21hcC90cmFjZS5oLTg3LURFRklORV9SQU5HRV9FVkVOVChpb21hcF96ZXJvX2l0ZXIpO1xcbi0tXFxuZnMvaW9tYXAvdHJhY2UuaD0yMjA9VFJBQ0VfRVZFTlQoaW9tYXBfaXRlcixcXG4tLVxcbmZzL2lvbWFwL3RyYWNlLmgtMjU1LVxcbmZzL2lvbWFwL3RyYWNlLmg6MjU2OlRSQUNFX0VWRU5UKGlvbWFwX2Rpb19yd19iZWdpbixcXG5mcy9pb21hcC90cmFjZS5oLTI1Ny1cXHRUUF9QUk9UTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL25pbGZzMi9maWxlLmM9MTQ1PXN0YXRpYyBzc2l6ZV90IG5pbGZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG4tLVxcbmZzL25pbGZzMi9maWxlLmMtMTQ3LVxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRElSRUNUKSB7XFxuZnMvbmlsZnMyL2ZpbGUuYzoxNDg6XFx0XFx0cmV0dXJuIGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXFx1MDAyNm5pbGZzX2lvbWFwX29wcyxcXG5mcy9uaWxmczIvZmlsZS5jLTE0OS1cXHRcXHRcXHRcXHQgICAgTlVMTCwgMCwgTlVMTCwgMCk7XFxuLS1cXG5mcy9udGZzL2ZpbGUuYz00Mzg9c3RhdGljIHNzaXplX3QgbnRmc19maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9udGZzL2ZpbGUuYy00NjAtXFx0XFx0ZmlsZV9hY2Nlc3NlZChpb2NiLVxcdTAwM2VraV9maWxwKTtcXG5mcy9udGZzL2ZpbGUuYzo0NjE6XFx0XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIHRvLCBcXHUwMDI2bnRmc19yZWFkX2lvbWFwX29wcywgTlVMTCwgMCxcXG5mcy9udGZzL2ZpbGUuYy00NjItXFx0XFx0XFx0XFx0TlVMTCwgMCk7XFxuLS1cXG5mcy9udGZzL2ZpbGUuYz00OTU9c3RhdGljIHNzaXplX3QgbnRmc19kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTQ5OC1cXG5mcy9udGZzL2ZpbGUuYzo0OTk6XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIFxcdTAwMjZudGZzX2Rpb19pb21hcF9vcHMsXFxuZnMvbnRmcy9maWxlLmMtNTAwLVxcdFxcdFxcdFxcdTAwMjZudGZzX3dyaXRlX2Rpb19vcHMsIDAsIE5VTEwsIDApO1xcbi0tXFxuZnMvbnRmczMvZmlsZS5jPTgxNT1zdGF0aWMgc3NpemVfdCBudGZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxcbi0tXFxuZnMvbnRmczMvZmlsZS5jLTg3NC1cXG5mcy9udGZzMy9maWxlLmM6ODc1OlxcdFxcdGVyciA9IGlvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLCBcXHUwMDI2bnRmc19pb21hcF9vcHMsIE5VTEwsIGRpb19mbGFncyxcXG5mcy9udGZzMy9maWxlLmMtODc2LVxcdFxcdFxcdFxcdCAgIE5VTEwsIDApO1xcbi0tXFxuZnMvbnRmczMvZmlsZS5jPTEyMjA9c3RhdGljIHNzaXplX3QgbnRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9udGZzMy9maWxlLmMtMTMwNS1cXG5mcy9udGZzMy9maWxlLmM6MTMwNjpcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXFx1MDAyNm50ZnNfaW9tYXBfb3BzLCBOVUxMLFxcbmZzL250ZnMzL2ZpbGUuYy0xMzA3LVxcdFxcdFxcdCAgIElPTUFQX0RJT19GT1JDRV9XQUlULCBOVUxMLCAwKTtcXG4tLVxcbmZzL250ZnMzL2lub2RlLmM9Njc2PWludCBudGZzX3NldF9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBuZXdfc2l6ZSlcXG4tLVxcbmZzL250ZnMzL2lub2RlLmMtNzE4LSAqIC0gaW9tYXBfdHJ1bmNhdGVfcGFnZVxcbmZzL250ZnMzL2lub2RlLmM6NzE5OiAqIC0gaW9tYXBfZGlvX3J3XFxuZnMvbnRmczMvaW5vZGUuYy03MjAtICogLSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlXFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYz0yNDk9eGZzX2ZpbGVfZGlvX3JlYWQoXFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYy0yNjYtXFx0aWYgKG1hcHBpbmdfc3RhYmxlX3dyaXRlcyhpb2NiLVxcdTAwM2VraV9maWxwLVxcdTAwM2VmX21hcHBpbmcpKSB7XFxuZnMveGZzL3hmc19maWxlLmM6MjY3OlxcdFxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXFx1MDAyNnhmc19yZWFkX2lvbWFwX29wcyxcXG5mcy94ZnMveGZzX2ZpbGUuYy0yNjgtXFx0XFx0XFx0XFx0XFx1MDAyNnhmc19kaW9fcmVhZF9ib3VuY2Vfb3BzLCBJT01BUF9ESU9fQk9VTkNFLFxcbi0tXFxuZnMveGZzL3hmc19maWxlLmMtMjcyLVxcdFxcdGlmIChyZXQgPT0gLUVOT1RCTEspXFxuZnMveGZzL3hmc19maWxlLmM6MjczOlxcdFxcdFxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXFx1MDAyNnhmc19yZWFkX2lvbWFwX29wcywgTlVMTCxcXG5mcy94ZnMveGZzX2ZpbGUuYy0yNzQtXFx0XFx0XFx0XFx0XFx0MCwgTlVMTCwgMCk7XFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYz03NDM9eGZzX2ZpbGVfZGlvX3dyaXRlX2FsaWduZWQoXFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYy03ODEtXFx0dHJhY2VfeGZzX2ZpbGVfZGlyZWN0X3dyaXRlKGlvY2IsIGZyb20pO1xcbmZzL3hmcy94ZnNfZmlsZS5jOjc4MjpcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgb3BzLCBkb3BzLCBkaW9fZmxhZ3MsIGFjLCAwKTtcXG5mcy94ZnMveGZzX2ZpbGUuYy03ODMtb3V0X3VubG9jazpcXG4tLVxcbmZzL3hmcy94ZnNfZmlsZS5jPTgyMT14ZnNfZmlsZV9kaW9fd3JpdGVfYXRvbWljKFxcbi0tXFxuZnMveGZzL3hmc19maWxlLmMtODU3LVxcdFxcdGRpb19mbGFncyB8PSBJT01BUF9ESU9fQk9VTkNFO1xcbmZzL3hmcy94ZnNfZmlsZS5jOjg1ODpcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgZG9wcywgXFx1MDAyNnhmc19kaW9fd3JpdGVfb3BzLCBkaW9fZmxhZ3MsXFxuZnMveGZzL3hmc19maWxlLmMtODU5LVxcdFxcdFxcdE5VTEwsIDApO1xcbi0tXFxuZnMveGZzL3hmc19maWxlLmM9ODk3PXhmc19maWxlX2Rpb193cml0ZV91bmFsaWduZWQoXFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYy05NTEtXFx0dHJhY2VfeGZzX2ZpbGVfZGlyZWN0X3dyaXRlKGlvY2IsIGZyb20pO1xcbmZzL3hmcy94ZnNfZmlsZS5jOjk1MjpcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXFx1MDAyNnhmc19kaXJlY3Rfd3JpdGVfaW9tYXBfb3BzLFxcbmZzL3hmcy94ZnNfZmlsZS5jLTk1My1cXHRcXHRcXHQgICBcXHUwMDI2eGZzX2Rpb193cml0ZV9vcHMsIGZsYWdzLCBOVUxMLCAwKTtcXG4tLVxcbmZzL3pvbmVmcy9maWxlLmM9NDc0PXN0YXRpYyBzc2l6ZV90IHpvbmVmc19maWxlX2Rpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL3pvbmVmcy9maWxlLmMtNTI4LVxcdC8qXFxuZnMvem9uZWZzL2ZpbGUuYzo1Mjk6XFx0ICogaW9tYXBfZGlvX3J3KCkgbWF5IHJldHVybiBFTk9UQkxLIGlmIHRoZXJlIHdhcyBhbiBpc3N1ZSB3aXRoXFxuZnMvem9uZWZzL2ZpbGUuYy01MzAtXFx0ICogcGFnZSBpbnZhbGlkYXRpb24uIE92ZXJ3cml0ZSB0aGF0IGVycm9yIGNvZGUgd2l0aCBFQlVTWSBzbyB0aGF0XFxuLS1cXG5mcy96b25lZnMvZmlsZS5jLTUzMi1cXHQgKi9cXG5mcy96b25lZnMvZmlsZS5jOjUzMzpcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXFx1MDAyNnpvbmVmc193cml0ZV9pb21hcF9vcHMsXFxuZnMvem9uZWZzL2ZpbGUuYy01MzQtXFx0XFx0XFx0ICAgXFx1MDAyNnpvbmVmc193cml0ZV9kaW9fb3BzLCAwLCBOVUxMLCAwKTtcXG4tLVxcbmZzL3pvbmVmcy9maWxlLmM9NjM2PXN0YXRpYyBzc2l6ZV90IHpvbmVmc19maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy96b25lZnMvZmlsZS5jLTY3Ny1cXHRcXHRmaWxlX2FjY2Vzc2VkKGlvY2ItXFx1MDAzZWtpX2ZpbHApO1xcbmZzL3pvbmVmcy9maWxlLmM6Njc4OlxcdFxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXFx1MDAyNnpvbmVmc19yZWFkX2lvbWFwX29wcyxcXG5mcy96b25lZnMvZmlsZS5jLTY3OS1cXHRcXHRcXHRcXHQgICBcXHUwMDI2em9uZWZzX3JlYWRfZGlvX29wcywgMCwgTlVMTCwgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA3OjAwOjAwLjUwODQ3MzUxMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjkyMjI5MjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9tYXAgRGlyZWN0IEkvTyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgaW5pdGlhbCByZXZpZXcsIGl0J3MgY2xlYXIgdGhlIHJlbGV2YW50IGNvZGUgY2VudGVycyBhcm91bmQgdGhlIGBpb21hcF9kaW9faG9sZV9pdGVyYCBmdW5jdGlvbiBhbmQgaXRzIGludGVyYWN0aW9ucyB3aXRoIGRpcmVjdCBJL08uIEkndmUgZ290IHRvIGZvY3VzIG9uIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJL08gcGF0aC4gYGlvbWFwX2Rpb19yd2AgaXMgYSBrZXkgZW50cnkgcG9pbnQsIHVzZWQgYnkgbnVtZXJvdXMgZmlsZXN5c3RlbXMuIGBfX2lvbWFwX2Rpb19yd2AgaXMgbW9yZSBzcGVjaWZpYywgZGlyZWN0bHkgY2FsbGVkIGJ5IGBidHJmc2AgYW5kIGBmMmZzYCwgc28gdGhhdCdzIGRlZmluaXRlbHkgYSBzeW1ib2wgdG8gd2F0Y2guIEknbGwgZHJvcCBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgLCBzaW5jZSBpdCBzZWVtcyBsaWtlIHRoZSBwYXRjaCBmb2N1c2VzIG9uIGhvbGUgaGFuZGxpbmcsIGFuZCBub3QgYmFzaWMgcmVhZCBvcGVyYXRpb25zLlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMuIFRvIHByb3Blcmx5IHRlc3QgdGhpcywgSSdsbCBuZWVkIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBmaWxlc3lzdGVtcyB0aGF0IHVzZSBpb21hcCBhbmQgaGFuZGxlIGhvbGVzLiBgRVhUNF9GU2AsIGBYRlNfRlNgLCBhbmQgYEJUUkZTX0ZTYCBhcmUgZGVmaW5pdGVseSBlc3NlbnRpYWwuIEknbGwgYWRkIHRob3NlIHRvIGBFbmFibGVDb25maWdzYC4gR2l2ZW4gdGhhdCB0aGlzIHBhdGNoIGZvY3VzZXMgb24gaG93IGhvbGVzIGFyZSBoYW5kbGVkLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGZpbGVzeXN0ZW1zIGFyZSBlbmFibGVkLlxuXG5Mb29raW5nIGJhY2ssIHRoZSBwYXRjaCBleHBsaWNpdGx5IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIGBiZGV2YCBiZWluZyBOVUxMIHdpdGhpbiBgaW9tYXBfZGlvX2FsaWdubWVudGAgc3BlY2lmaWNhbGx5IGR1cmluZyBob2xlIHByb2Nlc3NpbmcuIFRoaXMgY29uZmlybXMgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gZGlyZWN0IEkvTyBmb3IgZmlsZXMgd2l0aCBob2xlcywgYXMgaXMgaGFuZGxlZCBieSwgYW1vbmcgb3RoZXJzLCBleHQ0LCB4ZnMsIGFuZCBidHJmcy5cblxuT2theSwgbGV0J3MgbWFrZSBzdXJlIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIHJpZ2h0LCBhbmQgdGhhdCBgRVhUNF9GU2AsIGBYRlNfRlNgLCBhbmQgYEJUUkZTX0ZTYCBhcmUgYWxsIHByb3Blcmx5IHNldC5cblxuQW5kIHRoZSBmb2N1cyBzeW1ib2xzPyBJIG5lZWQgdG8gcmVmaW5lIHRoYXQgbGlzdC4gR2l2ZW4gdGhhdCBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24gYW5kIHBvdGVudGlhbGx5IGlubGluZWQsIGl0J3MgbGlrZWx5IG5vdCB0aGUgYmVzdCBzeW1ib2wgZm9yIGFuYWx5c2lzLiBTaW5jZSB0aGUgcGF0Y2ggZGVhbHMgd2l0aCB0aGUgYWxpZ25tZW50IHN0ZXAsIEknbGwgc3RpY2sgdG8gYF9faW9tYXBfZGlvX3J3YCBhbmQgYGlvbWFwX2Rpb19yd2AsIHNpbmNlIHRob3NlIGFyZSBkZWZpbml0ZWx5IGV4cG9ydGVkIGFuZCBub3QgaW5saW5lZC5cblxuQWxyaWdodCwgd2l0aCB0aGVzZSBjb25maXJtZWQsIGl0J3MgdGltZSB0byBzZXQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTIwLCJPdXRwdXRUb2tlbnMiOjE3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNzowMDowOC44MDA3MDYyMjRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDE4NzA3MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiQlRSRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2lvbWFwX2Rpb19yd1wiLFxuICAgIFwiaW9tYXBfZGlvX3J3XCIsXG4gICAgXCJfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpb21hcF9kaW9fYWxpZ25tZW50YCB0byBoYW5kbGUgTlVMTCBgYmRldmAgZm9yIGhvbGUgY2FzZXMgYW5kIGBpb21hcF9kaW9faG9sZV9pdGVyYCB0byBhbGlnbiB0aGUgY29waWVkIGxlbmd0aCB0byB0aGUgYmxvY2sgc2l6ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJTyBwYXRoLiBJdCBjYW4gYmUgcmVhY2hlZCB2aWEgZGlyZWN0IElPIG9wZXJhdGlvbnMgb24gZmlsZXN5c3RlbXMgdGhhdCBzdXBwb3J0IGhvbGVzIGFuZCB1c2UgaW9tYXAgKGUuZy4sIGV4dDQsIHhmcywgYnRyZnMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiQlRSRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2lvbWFwX2Rpb19yd1wiLFxuICAgIFwiaW9tYXBfZGlvX3J3XCIsXG4gICAgXCJfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpb21hcF9kaW9fYWxpZ25tZW50YCB0byBoYW5kbGUgTlVMTCBgYmRldmAgZm9yIGhvbGUgY2FzZXMgYW5kIGBpb21hcF9kaW9faG9sZV9pdGVyYCB0byBhbGlnbiB0aGUgY29waWVkIGxlbmd0aCB0byB0aGUgYmxvY2sgc2l6ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJTyBwYXRoLiBJdCBjYW4gYmUgcmVhY2hlZCB2aWEgZGlyZWN0IElPIG9wZXJhdGlvbnMgb24gZmlsZXN5c3RlbXMgdGhhdCBzdXBwb3J0IGhvbGVzIGFuZCB1c2UgaW9tYXAgKGUuZy4sIGV4dDQsIHhmcywgYnRyZnMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowtrh8t[1] Phase: Succeeded StartedAt: 2026-08-02 07:00:21 +0000 UTC FinishedAt: 2026-08-02 07:00:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-02 07:00:21 +0000 UTC FinishedAt: 2026-08-02 07:00:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[2] Phase: Succeeded StartedAt: 2026-08-02 07:00:21 +0000 UTC FinishedAt: 2026-08-02 10:57:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN) Phase: Succeeded StartedAt: 2026-08-02 07:00:21 +0000 UTC FinishedAt: 2026-08-02 10:57:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-02 07:00:22 +0000 UTC FinishedAt: 2026-08-02 07:00:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-02 07:00:22 +0000 UTC FinishedAt: 2026-08-02 07:00:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtrh8t/series-workflowtrh8t-convert-artifact-451607889/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-02 07:00:57 +0000 UTC FinishedAt: 2026-08-02 07:25:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-02 07:00:57 +0000 UTC FinishedAt: 2026-08-02 07:25:04 +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:*bbca2379-486b-4f5c-8c23-3fa9686f0de0,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-workflowtrh8t/series-workflowtrh8t-convert-artifact-451607889/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": "b216fe91-cf45-448a-b3fb-94750cf7a754", "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-workflowtrh8t/series-workflowtrh8t-build-action-3320551167/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-02 07:00:57 +0000 UTC FinishedAt: 2026-08-02 07:24:54 +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:*bbca2379-486b-4f5c-8c23-3fa9686f0de0,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-workflowtrh8t/series-workflowtrh8t-convert-artifact-451607889/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": "b216fe91-cf45-448a-b3fb-94750cf7a754", "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-workflowtrh8t/series-workflowtrh8t-build-action-3320551167/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-02 07:25:04 +0000 UTC FinishedAt: 2026-08-02 07:25:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-02 07:25:04 +0000 UTC FinishedAt: 2026-08-02 07:25:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-02 07:25:04 +0000 UTC FinishedAt: 2026-08-02 07:25:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-02 07:25:04 +0000 UTC FinishedAt: 2026-08-02 07:25:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtrh8t/series-workflowtrh8t-convert-artifact-853080868/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-02 07:25:14 +0000 UTC FinishedAt: 2026-08-02 07:27:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-02 07:25:14 +0000 UTC FinishedAt: 2026-08-02 07:27:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b216fe91-cf45-448a-b3fb-94750cf7a754,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-workflowtrh8t/series-workflowtrh8t-build-action-3320551167/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-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-02 07:27:35 +0000 UTC FinishedAt: 2026-08-02 07:27:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-02 07:27:35 +0000 UTC FinishedAt: 2026-08-02 07:27:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-02 07:27:35 +0000 UTC FinishedAt: 2026-08-02 07:48:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-02 07:27:35 +0000 UTC FinishedAt: 2026-08-02 07:48:28 +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:*bbca2379-486b-4f5c-8c23-3fa9686f0de0,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-workflowtrh8t/series-workflowtrh8t-convert-artifact-853080868/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": "d426947a-4111-4285-b4f9-e6ae7d609753", "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-workflowtrh8t/series-workflowtrh8t-build-action-2300015024/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-02 07:27:35 +0000 UTC FinishedAt: 2026-08-02 07:48:18 +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:*bbca2379-486b-4f5c-8c23-3fa9686f0de0,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-workflowtrh8t/series-workflowtrh8t-convert-artifact-853080868/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": "d426947a-4111-4285-b4f9-e6ae7d609753", "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-workflowtrh8t/series-workflowtrh8t-build-action-2300015024/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-02 07:48:28 +0000 UTC FinishedAt: 2026-08-02 07:48:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-02 07:48:28 +0000 UTC FinishedAt: 2026-08-02 07:48:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-02 07:48:28 +0000 UTC FinishedAt: 2026-08-02 07:50:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-02 07:48:28 +0000 UTC FinishedAt: 2026-08-02 07:50:20 +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:*d426947a-4111-4285-b4f9-e6ae7d609753,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-workflowtrh8t/series-workflowtrh8t-build-action-2300015024/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-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-02 07:50:29 +0000 UTC FinishedAt: 2026-08-02 10:57:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-02 07:50:29 +0000 UTC FinishedAt: 2026-08-02 10:57:50 +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":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"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:*b216fe91-cf45-448a-b3fb-94750cf7a754,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d426947a-4111-4285-b4f9-e6ae7d609753,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-workflowtrh8t/series-workflowtrh8t-build-action-3320551167/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-workflowtrh8t/series-workflowtrh8t-build-action-2300015024/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-02 07:50:29 +0000 UTC FinishedAt: 2026-08-02 07:50:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-02 07:50:29 +0000 UTC FinishedAt: 2026-08-02 07:50:36 +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":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"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-workflowtrh8t/series-workflowtrh8t-convert-artifact-2901002413/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[10].run-retest Phase: Succeeded StartedAt: 2026-08-02 07:50:29 +0000 UTC FinishedAt: 2026-08-02 08:22:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:retest-data,Default:nil,Value:*{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*b216fe91-cf45-448a-b3fb-94750cf7a754,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d426947a-4111-4285-b4f9-e6ae7d609753,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,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-workflowtrh8t/series-workflowtrh8t-build-action-3320551167/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-workflowtrh8t/series-workflowtrh8t-build-action-2300015024/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[10].run-retest[0] Phase: Succeeded StartedAt: 2026-08-02 07:50:29 +0000 UTC FinishedAt: 2026-08-02 07:50:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[10].run-retest[0].save-retest-task Phase: Succeeded StartedAt: 2026-08-02 07:50:29 +0000 UTC FinishedAt: 2026-08-02 07:50:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},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-workflowtrh8t/series-workflowtrh8t-convert-artifact-1042902722/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-02 07:50:29 +0000 UTC FinishedAt: 2026-08-02 07:50:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-02 07:50:29 +0000 UTC FinishedAt: 2026-08-02 07:50:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-02 07:50:39 +0000 UTC FinishedAt: 2026-08-02 10:57:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-02 07:50:39 +0000 UTC FinishedAt: 2026-08-02 10:57:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b216fe91-cf45-448a-b3fb-94750cf7a754,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d426947a-4111-4285-b4f9-e6ae7d609753,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-workflowtrh8t/series-workflowtrh8t-build-action-3320551167/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-workflowtrh8t/series-workflowtrh8t-build-action-2300015024/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-workflowtrh8t/series-workflowtrh8t-convert-artifact-2901002413/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,} --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[10].run-retest[1] Phase: Succeeded StartedAt: 2026-08-02 07:50:39 +0000 UTC FinishedAt: 2026-08-02 08:22:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrh8t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw","__iomap_dio_read_simple"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0be43f25d0dd778b0185d67b8b9f4ab70e68154","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"aa0baf08-6c0f-4bd0-903b-5e0fbcd5172a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[10].run-retest[1].retest Phase: Succeeded StartedAt: 2026-08-02 07:50:39 +0000 UTC FinishedAt: 2026-08-02 08:22:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b216fe91-cf45-448a-b3fb-94750cf7a754,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d426947a-4111-4285-b4f9-e6ae7d609753,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Previous reproducers,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-workflowtrh8t/series-workflowtrh8t-build-action-3320551167/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-workflowtrh8t/series-workflowtrh8t-build-action-2300015024/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:retest-task,Path:/data/retest.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-workflowtrh8t/series-workflowtrh8t-convert-artifact-1042902722/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,}