Name: series-workflow8d2pj Phase: Succeeded StartedAt: 2026-08-17 12:18:29 +0000 UTC FinishedAt: 2026-08-17 16:34:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8d2pj[0] Phase: Succeeded StartedAt: 2026-08-17 12:18:29 +0000 UTC FinishedAt: 2026-08-17 12:51:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8d2pj[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 12:18:29 +0000 UTC FinishedAt: 2026-08-17 12:51:15 +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": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "series_id": "b93ec397-2207-4575-992c-647324ed16c8" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "vfs_dedupe_file_range" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19kZWR1cGVfZmlsZV9yYW5nZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCBmdW5jdGlvbiBhbmQgdGhlIGBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VgIHVzZXItc3BhY2UgQVBJIHRvIGFkZCBhIG5ldyBmbGFnIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgLiBUaGUgc3RydWN0dXJlIGBzYW1lYCBpcyBhbGxvY2F0ZWQgYW5kIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGF0YSBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBgbWVtZHVwX3VzZXJgIGluIGBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZWAuIEFueSBmaWVsZHMgbm90IGV4cGxpY2l0bHkgdXBkYXRlZCBieSB0aGUga2VybmVsIHdpbGwgc2ltcGx5IHJldGFpbiB0aGUgdmFsdWVzIHByb3ZpZGVkIGJ5IHVzZXIgc3BhY2Ugd2hlbiBjb3BpZWQgYmFjayB2aWEgYGNvcHlfdG9fdXNlcmAuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgbm9yIGRvZXMgaXQgbW9kaWZ5IGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIGluIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBVQVBJIGZsYWcgYEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTU2AgdG8gdGhlIGBGSURFRFVQRVJBTkdFYCBpb2N0bCwgbW9kaWZ5aW5nIHRoZSBjb3JlIFZGUyBkZWR1cGxpY2F0aW9uIGxvZ2ljIGluIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZhNDg0YjNiZjdlMDc1NjNlMTg0MzQwZmMyZWM2Y2UyN2IyNTczOGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxMjozNjowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9yZW1hcF9yYW5nZS5jIGIvZnMvcmVtYXBfcmFuZ2UuY1xuaW5kZXggMjZhZmJiYmZiMTBjMi4uYWM4OGE4MWMxMjczOSAxMDA2NDRcbi0tLSBhL2ZzL3JlbWFwX3JhbmdlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3JlbWFwX3JhbmdlLmNcbkBAIC01MDMsNyAmIzQzOzUwMyw3IEBAIGludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSlcbiBcdGlmICghKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9SRUFEKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoc2FtZS1cdTAwM2VyZXNlcnZlZDEgfHwgc2FtZS1cdTAwM2VyZXNlcnZlZDIpXG4mIzQzO1x0aWYgKHNhbWUtXHUwMDNlcmVzZXJ2ZWQxIHx8IChzYW1lLVx1MDAzZWZsYWdzIFx1MDAyNiB+RklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRvZmYgPSBzYW1lLVx1MDAzZXNyY19vZmZzZXQ7XG5AQCAtNTUxLDEyICYjNDM7NTUxLDI5IEBAIGludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSlcbiBcdFx0ZGVkdXBlZCA9IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoZmlsZSwgb2ZmLCBmZF9maWxlKGRzdF9mZCksXG4gXHRcdFx0XHRcdFx0ICAgIGluZm8tXHUwMDNlZGVzdF9vZmZzZXQsIGxlbixcbiBcdFx0XHRcdFx0XHQgICAgUkVNQVBfRklMRV9DQU5fU0hPUlRFTik7XG4tXHRcdGlmIChkZWR1cGVkID09IC1FQkFERSlcbiYjNDM7XHRcdGlmIChkZWR1cGVkID09IC1FQkFERSkge1xuIFx0XHRcdGluZm8tXHUwMDNlc3RhdHVzID0gRklMRV9ERURVUEVfUkFOR0VfRElGRkVSUztcbi1cdFx0ZWxzZSBpZiAoZGVkdXBlZCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0aWYgKHNhbWUtXHUwMDNlZmxhZ3MgXHUwMDI2IEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykge1xuJiM0MztcdFx0XHRcdHU2NCBzdGVwID0gaV9ibG9ja3NpemUoc3JjKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0LypcbiYjNDM7XHRcdFx0XHQgKiBTdGFja2VkIGZpbGVzeXN0ZW1zIChlLmcuIG92ZXJsYXlmcykgY2FuXG4mIzQzO1x0XHRcdFx0ICogcmVwb3J0IGEgZGVnZW5lcmF0ZSBibG9jayBzaXplIGhlcmU7IGFcbiYjNDM7XHRcdFx0XHQgKiBvbmUtYnl0ZSBzdGVwIHdvdWxkIG9ubHkgbWlzYWxpZ24gdGhlXG4mIzQzO1x0XHRcdFx0ICogbmV4dCBjYWxsLCBzbyBhZHZhbmNlIHBhc3QgdGhlIHdob2xlXG4mIzQzO1x0XHRcdFx0ICogcmVxdWVzdCBpbnN0ZWFkLlxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdGlmIChzdGVwIFx1MDAzYz0gMSlcbiYjNDM7XHRcdFx0XHRcdHN0ZXAgPSBsZW47XG4mIzQzO1x0XHRcdFx0aW5mby1cdTAwM2VieXRlc19kZWR1cGVkID0gbWluX3QodTY0LCBzdGVwLCBsZW4pO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGRlZHVwZWQgXHUwMDNjIDApIHtcbiBcdFx0XHRpbmZvLVx1MDAzZXN0YXR1cyA9IGRlZHVwZWQ7XG4tXHRcdGVsc2VcbiYjNDM7XHRcdH0gZWxzZSBpZiAoc2FtZS1cdTAwM2VmbGFncyBcdTAwMjYgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTKSB7XG4mIzQzO1x0XHRcdGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZCA9IGRlZHVwZWQ7XG4mIzQzO1x0XHR9IGVsc2Uge1xuIFx0XHRcdGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZCA9IGxlbjtcbiYjNDM7XHRcdH1cbiBcbiBuZXh0X2xvb3A6XG4gXHRcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oXG5pbmRleCBiZDg3MjYyZjJlMzQ5Li40NzFmNjk4YmVhYTkzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oXG5AQCAtMTc4LDEzICYjNDM7MTc4LDE2IEBAIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZV9pbmZvIHtcbiBcdF9fdTMyIHJlc2VydmVkO1x0XHQvKiBtdXN0IGJlIHplcm8gKi9cbiB9O1xuIFxuJiM0MzsvKiBmbGFncyBmb3Igc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICovXG4mIzQzOyNkZWZpbmUgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTICgxVSBcdTAwM2NcdTAwM2MgMClcbiYjNDM7XG4gLyogZnJvbSBzdHJ1Y3QgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzICovXG4gc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlIHtcbiBcdF9fdTY0IHNyY19vZmZzZXQ7XHQvKiBpbiAtIHN0YXJ0IG9mIGV4dGVudCBpbiBzb3VyY2UgKi9cbiBcdF9fdTY0IHNyY19sZW5ndGg7XHQvKiBpbiAtIGxlbmd0aCBvZiBleHRlbnQgKi9cbiBcdF9fdTE2IGRlc3RfY291bnQ7XHQvKiBpbiAtIHRvdGFsIGVsZW1lbnRzIGluIGluZm8gYXJyYXkgKi9cbiBcdF9fdTE2IHJlc2VydmVkMTtcdC8qIG11c3QgYmUgemVybyAqL1xuLVx0X191MzIgcmVzZXJ2ZWQyO1x0LyogbXVzdCBiZSB6ZXJvICovXG4mIzQzO1x0X191MzIgZmxhZ3M7XHRcdC8qIGluIC0gRklMRV9ERURVUEVfUkFOR0VfKiBmbGFncyAqL1xuIFx0c3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlX2luZm8gaW5mb1tdO1xuIH07XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZzX2RlZHVwZV9maWxlX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgVUFQSSBmbGFnIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgIHRvIHRoZSBgRklERURVUEVSQU5HRWAgaW9jdGwsIG1vZGlmeWluZyB0aGUgY29yZSBWRlMgZGVkdXBsaWNhdGlvbiBsb2dpYyBpbiBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YTQ4NGIzYmY3ZTA3NTYzZTE4NDM0MGZjMmVjNmNlMjdiMjU3MzhhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMTI6MzY6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9yZW1hcF9yYW5nZS5jIGIvZnMvcmVtYXBfcmFuZ2UuYwppbmRleCAyNmFmYmJiZmIxMGMyLi5hYzg4YTgxYzEyNzM5IDEwMDY0NAotLS0gYS9mcy9yZW1hcF9yYW5nZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3JlbWFwX3JhbmdlLmMKQEAgLTUwMyw3ICYjNDM7NTAzLDcgQEAgaW50IHZmc19kZWR1cGVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICpzYW1lKQogCWlmICghKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9SRUFEKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoc2FtZS0mZ3Q7cmVzZXJ2ZWQxIHx8IHNhbWUtJmd0O3Jlc2VydmVkMikKJiM0MzsJaWYgKHNhbWUtJmd0O3Jlc2VydmVkMSB8fCAoc2FtZS0mZ3Q7ZmxhZ3MgJmFtcDsgfkZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJb2ZmID0gc2FtZS0mZ3Q7c3JjX29mZnNldDsKQEAgLTU1MSwxMiAmIzQzOzU1MSwyOSBAQCBpbnQgdmZzX2RlZHVwZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKnNhbWUpCiAJCWRlZHVwZWQgPSB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKGZpbGUsIG9mZiwgZmRfZmlsZShkc3RfZmQpLAogCQkJCQkJICAgIGluZm8tJmd0O2Rlc3Rfb2Zmc2V0LCBsZW4sCiAJCQkJCQkgICAgUkVNQVBfRklMRV9DQU5fU0hPUlRFTik7Ci0JCWlmIChkZWR1cGVkID09IC1FQkFERSkKJiM0MzsJCWlmIChkZWR1cGVkID09IC1FQkFERSkgewogCQkJaW5mby0mZ3Q7c3RhdHVzID0gRklMRV9ERURVUEVfUkFOR0VfRElGRkVSUzsKLQkJZWxzZSBpZiAoZGVkdXBlZCAmbHQ7IDApCiYjNDM7CQkJaWYgKHNhbWUtJmd0O2ZsYWdzICZhbXA7IEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykgewomIzQzOwkJCQl1NjQgc3RlcCA9IGlfYmxvY2tzaXplKHNyYyk7CiYjNDM7CiYjNDM7CQkJCS8qCiYjNDM7CQkJCSAqIFN0YWNrZWQgZmlsZXN5c3RlbXMgKGUuZy4gb3ZlcmxheWZzKSBjYW4KJiM0MzsJCQkJICogcmVwb3J0IGEgZGVnZW5lcmF0ZSBibG9jayBzaXplIGhlcmU7IGEKJiM0MzsJCQkJICogb25lLWJ5dGUgc3RlcCB3b3VsZCBvbmx5IG1pc2FsaWduIHRoZQomIzQzOwkJCQkgKiBuZXh0IGNhbGwsIHNvIGFkdmFuY2UgcGFzdCB0aGUgd2hvbGUKJiM0MzsJCQkJICogcmVxdWVzdCBpbnN0ZWFkLgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJaWYgKHN0ZXAgJmx0Oz0gMSkKJiM0MzsJCQkJCXN0ZXAgPSBsZW47CiYjNDM7CQkJCWluZm8tJmd0O2J5dGVzX2RlZHVwZWQgPSBtaW5fdCh1NjQsIHN0ZXAsIGxlbik7CiYjNDM7CQkJfQomIzQzOwkJfSBlbHNlIGlmIChkZWR1cGVkICZsdDsgMCkgewogCQkJaW5mby0mZ3Q7c3RhdHVzID0gZGVkdXBlZDsKLQkJZWxzZQomIzQzOwkJfSBlbHNlIGlmIChzYW1lLSZndDtmbGFncyAmYW1wOyBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1MpIHsKJiM0MzsJCQlpbmZvLSZndDtieXRlc19kZWR1cGVkID0gZGVkdXBlZDsKJiM0MzsJCX0gZWxzZSB7CiAJCQlpbmZvLSZndDtieXRlc19kZWR1cGVkID0gbGVuOwomIzQzOwkJfQogCiBuZXh0X2xvb3A6CiAJCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgKaW5kZXggYmQ4NzI2MmYyZTM0OS4uNDcxZjY5OGJlYWE5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgKQEAgLTE3OCwxMyAmIzQzOzE3OCwxNiBAQCBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VfaW5mbyB7CiAJX191MzIgcmVzZXJ2ZWQ7CQkvKiBtdXN0IGJlIHplcm8gKi8KIH07CiAKJiM0MzsvKiBmbGFncyBmb3Igc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICovCiYjNDM7I2RlZmluZSBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1MgKDFVICZsdDsmbHQ7IDApCiYjNDM7CiAvKiBmcm9tIHN0cnVjdCBidHJmc19pb2N0bF9maWxlX2V4dGVudF9zYW1lX2FyZ3MgKi8KIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSB7CiAJX191NjQgc3JjX29mZnNldDsJLyogaW4gLSBzdGFydCBvZiBleHRlbnQgaW4gc291cmNlICovCiAJX191NjQgc3JjX2xlbmd0aDsJLyogaW4gLSBsZW5ndGggb2YgZXh0ZW50ICovCiAJX191MTYgZGVzdF9jb3VudDsJLyogaW4gLSB0b3RhbCBlbGVtZW50cyBpbiBpbmZvIGFycmF5ICovCiAJX191MTYgcmVzZXJ2ZWQxOwkvKiBtdXN0IGJlIHplcm8gKi8KLQlfX3UzMiByZXNlcnZlZDI7CS8qIG11c3QgYmUgemVybyAqLwomIzQzOwlfX3UzMiBmbGFnczsJCS8qIGluIC0gRklMRV9ERURVUEVfUkFOR0VfKiBmbGFncyAqLwogCXN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZV9pbmZvIGluZm9bXTsKIH07CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERlZHVwbGljYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBmcy9yZW1hcF9yYW5nZS5jYCBhbmQgYGluY2x1ZGUvdWFwaS9saW51eC9mcy5oYC4gSXQgc2VlbXMgd2UmIzM5O3JlIG1vZGlmeWluZyBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCB0byBpbmNvcnBvcmF0ZSBhIG5ldyBmZWF0dXJlLiBUaGV5JiMzOTtyZSBhZGRpbmcgc3VwcG9ydCBmb3IgdGhpcyBgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTYCBmbGFnIGluIHRoZSBgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDsgcmVwbGFjaW5nIGBzYW1lLSZndDtyZXNlcnZlZDJgIHdpdGggYHNhbWUtJmd0O2ZsYWdzYCBpcyBhIHR5cGljYWwgcmVmYWN0b3IgdG8gbWFrZSByb29tLCBhbmQgbm93IHdlIGNoZWNrIGZvciB0aGlzIHByb2dyZXNzIHJlcG9ydGluZyBmbGFnLgoKVGhlIGNvcmUgb2YgdGhlIGxvZ2ljIGlzIHRoaXM6IGlmIGBkZWR1cGVkYCByZXR1cm5zIGAtRUJBREVgICh3aGljaCBJIGtub3cgc2lnbmlmaWVzIGFuIGVycm9yKSBhbmQgdGhhdCBmbGFnIGlzIHNldCwgd2UmIzM5O3JlIG5vdyBzZXR0aW5nIGBpbmZvLSZndDtieXRlc19kZWR1cGVkYCB0byB0aGUgbWluaW11bSBvZiBzb21lIGBzdGVwYCB2YWx1ZSBhbmQgdGhlIHJlcXVlc3RlZCBsZW5ndGguIFRoZSBgc3RlcGAgbG9va3MgbGlrZSBpdCYjMzk7cyB0aGUgYmxvY2sgc2l6ZSBvZiB0aGUgc291cmNlIGZpbGUsIHdoaWNoIG1ha2VzIHNlbnNlLiBXZSB3YW50IHRvIHVwZGF0ZSBwcm9ncmVzcywgYXNzdW1pbmcgYEVCQURFYCBpbmRpY2F0ZXMgYW4gaW5jb21wbGV0ZSBvcGVyYXRpb24sIGFuZCBwcm92aWRlIGluY3JlbWVudGFsIGZlZWRiYWNrLiBJZiB0aGUgYGRlZHVwZWRgIHZhbHVlIGlzIG5vbi1uZWdhdGl2ZSBhbmQgdGhlIGZsYWcgaXMgc2V0LCBpdCB1cGRhdGVzIGBpbmZvLSZndDtieXRlc19kZWR1cGVkYCBkaXJlY3RseS4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBpbXBsZW1lbnRhdGlvbiB0byByZXBvcnQgcHJvZ3Jlc3MgYmFjayB0byB0aGUgdXNlciBzcGFjZS4KClNpbmNlIHRoaXMgdG91Y2hlcyBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCwgSSBpbW1lZGlhdGVseSBrbm93IHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgYGlvY3RsKEZJREVEVVBFUkFOR0UpYCBzeXN0ZW0gY2FsbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGNvbmZsaWN0IHdpdGggYW55IGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIGlmIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBJJiMzOTtsbCBjaGVjayBgZnMvcmVtYXBfcmFuZ2UuY2AgZGlyZWN0bHksIGFuZCB0aGVuIGp1bXAgdG8gYGZzL01ha2VmaWxlYCB0byBzZWUgaWYgYHJlbWFwX3JhbmdlLmNgIGl0c2VsZiBkZXBlbmRzIG9uIGFueSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgYG9iai0kKENPTkZJR19TT01FVEhJTkcpICYjNDM7PSByZW1hcF9yYW5nZS5vYCB0eXBlIG9mIGRpcmVjdGl2ZS4gSWYgdGhlcmUmIzM5O3MgYSBjb25maWcgZGVwZW5kZW5jeSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2gga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjb3VsZCBhZmZlY3QgdGhpcy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoaWNoIGtlcm5lbCBjb25maWd1cmF0aW9ucyBtdXN0IGJlIHNldCB0byBjb3JyZWN0bHkgdXRpbGl6ZSB0aGUgZmVhdHVyZSB0byBhcHByb3ByaWF0ZWx5IGFzc2VzcyB0aGUgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlbWFwX3JhbmdlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9NYWtlZmlsZT0xMD1vYmoteSA6PVx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxuLS1cbmZzL01ha2VmaWxlLTE3LVx0XHRmc19kaXJlbnQubyBmc19jb250ZXh0Lm8gZnNfcGFyc2VyLm8gZnNvcGVuLm8gaW5pdC5vIFxcXG5mcy9NYWtlZmlsZToxODpcdFx0a2VybmVsX3JlYWRfZmlsZS5vIG1udF9pZG1hcHBpbmcubyByZW1hcF9yYW5nZS5vIHBpZGZzLm8gXFxcbmZzL01ha2VmaWxlLTE5LVx0XHRmaWxlX2F0dHIubyBmc2Vycm9yLm8gbnVsbGZzLm8gZmFpbGZzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjU2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCBGdW5jdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYHZmc19kZWR1cGVfZmlsZV9yYW5nZWAuIEl0JiMzOTtzIGRlZmluaXRlbHkgY29tcGlsZWQgaW47IHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIHNvbWUgZHluYW1pY2FsbHkgbG9hZGVkIG1vZHVsZSBoZXJlLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gRmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHF1aWNrbHkgdmVyaWZ5IGlmIHRoaXMgZnVuY3Rpb24sIHRoaXMgYHZmc19kZWR1cGVfZmlsZV9yYW5nZWAsIGlzIGVpdGhlciBzdGF0aWMgb3IgZXhwb3J0ZWQuIFRoYXQmIzM5O2xsIGluZm9ybSBteSBmdXp6aW5nIHN0cmF0ZWd5LiBJZiBpdCYjMzk7cyBzdGF0aWMsIHRoZW4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBjYWxsIGl0LiBJdCBhbHNvIGRldGVybWluZXMgaWYgdGhpcyBjYWxsIGlzIHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiBmdXp6aW5nLCBvciBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlYmFzZSB0byBmdXp6IGl0IGNvcnJlY3RseS4gSSBuZWVkIHRvIGtub3cgaG93IGFjY2Vzc2libGUgaXQgaXMgYmVmb3JlIEkgY2FuIGRlY2lkZSB0aGUgYmVzdCB3YXkgdG8gYXBwcm9hY2ggdGFyZ2V0aW5nIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnZmc19kZWR1cGVfZmlsZV9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3JlbWFwX3JhbmdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcmVtYXBfcmFuZ2UuYz00MzI9bG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3Bvcyxcbi0tXG5mcy9yZW1hcF9yYW5nZS5jLTQ4OS19XG5mcy9yZW1hcF9yYW5nZS5jOjQ5MDpFWFBPUlRfU1lNQk9MKHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUpO1xuZnMvcmVtYXBfcmFuZ2UuYy00OTEtXG5mcy9yZW1hcF9yYW5nZS5jPTQ5Mj1pbnQgdmZzX2RlZHVwZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKnNhbWUpXG4tLVxuZnMvcmVtYXBfcmFuZ2UuYy01ODMtfVxuZnMvcmVtYXBfcmFuZ2UuYzo1ODQ6RVhQT1JUX1NZTUJPTCh2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMzQKCQkJCQkJCW91dHB1dDogMTE0CgkJCQkJCQl0aG91Z2h0czogMzY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYHZmc19kZWR1cGVfZmlsZV9yYW5nZWAsIHRoYXQmIzM5O3MgYSBnb29kIGluaXRpYWwgZm9jdXMuIExldCBtZSBzZWUuLi4gQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdG91Y2hlZCBoZXJlPyBOb3BlLCBpdCYjMzk7cyBqdXN0IHRoaXMgb25lLiBBaCwgdGhlIHBhdGNoIGlzIGluIGBmcy9yZW1hcF9yYW5nZS5jYCwgd2hpY2ggaXMgcmlnaHQgaW4gdGhlIGNvcmUgVkZTLCBzbyB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGl0IGludHJvZHVjZXMgYSBuZXcgVUFQSSBmbGFnLCBgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTYC4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluaywgJiMzNDtXb3J0aCBmdXp6aW5nISYjMzQ7IE5vIHNwZWNpZmljIGtlcm5lbCBjb25maWdzIHNlZW0gdG8gYmUgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSwgc2luY2UgaXQmIzM5O3MgY29yZSBWRlMsIHdoaWNoIGlzIGV2ZW4gYmV0dGVyLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHBhdGNoIGl0c2VsZi4uLiBBaCwgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgbG9va3MgbGlrZSB0aGV5IGFyZSBqdXN0IGNoZWNraW5nIHRoZSBmbGFncyBmaWVsZCBpbiB0aGUgc2FtZSBzdHJ1Y3QgYGZpbGVfZGVkdXBlX3JhbmdlYCB0byBzZWUgaWYgdGhlIG5ldyBgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTYCBpcyBzZXQuIFNpbXBsZSBjaGFuZ2UsIGJ1dCBzaWduaWZpY2FudC4KClNvLCBzdW1taW5nIGl0IHVwOiBUaGUgY29yZSBmdW5jdGlvbiBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCBpcyBtb2RpZmllZCwgYWRkaW5nIGEgVUFQSSBmbGFnLCBhbmQgdGhpcyBzaG91bGQgYmUgZnV6emVkLCBnaXZlbiBpdHMgcG90ZW50aWFsIGZvciB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGFuZCB0aGUgY2hhbmdlIGluIFZGUyBsb2dpYy4gSSYjMzk7bSBnb2luZyB0byBhZGQgdGhhdCBmdW5jdGlvbiB0byBteSBGb2N1c1N5bWJvbHMgbGlzdCwgc2V0ICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgdG8gdHJ1ZSwgYW5kIG5vdGUgdGhhdCB0aGUgcGF0Y2ggYWRkcyB0aGUgYEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTU2AgZmxhZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZzX2RlZHVwZV9maWxlX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgVUFQSSBmbGFnIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgIHRvIHRoZSBgRklERURVUEVSQU5HRWAgaW9jdGwsIG1vZGlmeWluZyB0aGUgY29yZSBWRlMgZGVkdXBsaWNhdGlvbiBsb2dpYyBpbiBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZzX2RlZHVwZV9maWxlX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgVUFQSSBmbGFnIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgIHRvIHRoZSBgRklERURVUEVSQU5HRWAgaW9jdGwsIG1vZGlmeWluZyB0aGUgY29yZSBWRlMgZGVkdXBsaWNhdGlvbiBsb2dpYyBpbiBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCBmdW5jdGlvbiBhbmQgdGhlIGBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VgIHVzZXItc3BhY2UgQVBJIHRvIGFkZCBhIG5ldyBmbGFnIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgLiBUaGUgc3RydWN0dXJlIGBzYW1lYCBpcyBhbGxvY2F0ZWQgYW5kIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGF0YSBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBgbWVtZHVwX3VzZXJgIGluIGBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZWAuIEFueSBmaWVsZHMgbm90IGV4cGxpY2l0bHkgdXBkYXRlZCBieSB0aGUga2VybmVsIHdpbGwgc2ltcGx5IHJldGFpbiB0aGUgdmFsdWVzIHByb3ZpZGVkIGJ5IHVzZXIgc3BhY2Ugd2hlbiBjb3BpZWQgYmFjayB2aWEgYGNvcHlfdG9fdXNlcmAuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgbm9yIGRvZXMgaXQgbW9kaWZ5IGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIGluIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmE0ODRiM2JmN2UwNzU2M2UxODQzNDBmYzJlYzZjZTI3YjI1NzM4YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDEyOjM2OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvcmVtYXBfcmFuZ2UuYyBiL2ZzL3JlbWFwX3JhbmdlLmMKaW5kZXggMjZhZmJiYmZiMTBjMi4uYWM4OGE4MWMxMjczOSAxMDA2NDQKLS0tIGEvZnMvcmVtYXBfcmFuZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9yZW1hcF9yYW5nZS5jCkBAIC01MDMsNyAmIzQzOzUwMyw3IEBAIGludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSkKIAlpZiAoIShmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfUkVBRCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHNhbWUtJmd0O3Jlc2VydmVkMSB8fCBzYW1lLSZndDtyZXNlcnZlZDIpCiYjNDM7CWlmIChzYW1lLSZndDtyZXNlcnZlZDEgfHwgKHNhbWUtJmd0O2ZsYWdzICZhbXA7IH5GSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1MpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW9mZiA9IHNhbWUtJmd0O3NyY19vZmZzZXQ7CkBAIC01NTEsMTIgJiM0Mzs1NTEsMjkgQEAgaW50IHZmc19kZWR1cGVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICpzYW1lKQogCQlkZWR1cGVkID0gdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShmaWxlLCBvZmYsIGZkX2ZpbGUoZHN0X2ZkKSwKIAkJCQkJCSAgICBpbmZvLSZndDtkZXN0X29mZnNldCwgbGVuLAogCQkJCQkJICAgIFJFTUFQX0ZJTEVfQ0FOX1NIT1JURU4pOwotCQlpZiAoZGVkdXBlZCA9PSAtRUJBREUpCiYjNDM7CQlpZiAoZGVkdXBlZCA9PSAtRUJBREUpIHsKIAkJCWluZm8tJmd0O3N0YXR1cyA9IEZJTEVfREVEVVBFX1JBTkdFX0RJRkZFUlM7Ci0JCWVsc2UgaWYgKGRlZHVwZWQgJmx0OyAwKQomIzQzOwkJCWlmIChzYW1lLSZndDtmbGFncyAmYW1wOyBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1MpIHsKJiM0MzsJCQkJdTY0IHN0ZXAgPSBpX2Jsb2Nrc2l6ZShzcmMpOwomIzQzOwomIzQzOwkJCQkvKgomIzQzOwkJCQkgKiBTdGFja2VkIGZpbGVzeXN0ZW1zIChlLmcuIG92ZXJsYXlmcykgY2FuCiYjNDM7CQkJCSAqIHJlcG9ydCBhIGRlZ2VuZXJhdGUgYmxvY2sgc2l6ZSBoZXJlOyBhCiYjNDM7CQkJCSAqIG9uZS1ieXRlIHN0ZXAgd291bGQgb25seSBtaXNhbGlnbiB0aGUKJiM0MzsJCQkJICogbmV4dCBjYWxsLCBzbyBhZHZhbmNlIHBhc3QgdGhlIHdob2xlCiYjNDM7CQkJCSAqIHJlcXVlc3QgaW5zdGVhZC4KJiM0MzsJCQkJICovCiYjNDM7CQkJCWlmIChzdGVwICZsdDs9IDEpCiYjNDM7CQkJCQlzdGVwID0gbGVuOwomIzQzOwkJCQlpbmZvLSZndDtieXRlc19kZWR1cGVkID0gbWluX3QodTY0LCBzdGVwLCBsZW4pOwomIzQzOwkJCX0KJiM0MzsJCX0gZWxzZSBpZiAoZGVkdXBlZCAmbHQ7IDApIHsKIAkJCWluZm8tJmd0O3N0YXR1cyA9IGRlZHVwZWQ7Ci0JCWVsc2UKJiM0MzsJCX0gZWxzZSBpZiAoc2FtZS0mZ3Q7ZmxhZ3MgJmFtcDsgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTKSB7CiYjNDM7CQkJaW5mby0mZ3Q7Ynl0ZXNfZGVkdXBlZCA9IGRlZHVwZWQ7CiYjNDM7CQl9IGVsc2UgewogCQkJaW5mby0mZ3Q7Ynl0ZXNfZGVkdXBlZCA9IGxlbjsKJiM0MzsJCX0KIAogbmV4dF9sb29wOgogCQlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oCmluZGV4IGJkODcyNjJmMmUzNDkuLjQ3MWY2OThiZWFhOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oCkBAIC0xNzgsMTMgJiM0MzsxNzgsMTYgQEAgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlX2luZm8gewogCV9fdTMyIHJlc2VydmVkOwkJLyogbXVzdCBiZSB6ZXJvICovCiB9OwogCiYjNDM7LyogZmxhZ3MgZm9yIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqLwomIzQzOyNkZWZpbmUgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTICgxVSAmbHQ7Jmx0OyAwKQomIzQzOwogLyogZnJvbSBzdHJ1Y3QgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzICovCiBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgewogCV9fdTY0IHNyY19vZmZzZXQ7CS8qIGluIC0gc3RhcnQgb2YgZXh0ZW50IGluIHNvdXJjZSAqLwogCV9fdTY0IHNyY19sZW5ndGg7CS8qIGluIC0gbGVuZ3RoIG9mIGV4dGVudCAqLwogCV9fdTE2IGRlc3RfY291bnQ7CS8qIGluIC0gdG90YWwgZWxlbWVudHMgaW4gaW5mbyBhcnJheSAqLwogCV9fdTE2IHJlc2VydmVkMTsJLyogbXVzdCBiZSB6ZXJvICovCi0JX191MzIgcmVzZXJ2ZWQyOwkvKiBtdXN0IGJlIHplcm8gKi8KJiM0MzsJX191MzIgZmxhZ3M7CQkvKiBpbiAtIEZJTEVfREVEVVBFX1JBTkdFXyogZmxhZ3MgKi8KIAlzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VfaW5mbyBpbmZvW107CiB9OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzQzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGZpbGVfZGVkdXBlX3JhbmdlYCBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBmb2N1c2luZyBvbiBlbmhhbmNpbmcgdGhlIHJlcG9ydGluZyB3aXRoaW4gdGhlIGRlZHVwbGljYXRpb24gcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgIGZ1bmN0aW9uIGluIGBmcy9yZW1hcF9yYW5nZS5jYCBhbmQgdGhlIGFzc29jaWF0ZWQgdXNlci1zcGFjZSBBUEkgc3RydWN0dXJlIGBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VgIGluIGBpbmNsdWRlL3VhcGkvbGludXgvZnMuaGAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHJlbmFtaW5nIGByZXNlcnZlZDJgIHRvIGBmbGFnc2AgaW4gYHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZWAsIHdoaWNoIGltbWVkaWF0ZWx5IHNpZ25hbHMgYSBzZW1hbnRpYyBzaGlmdCDigJMgd2UmIzM5O3JlIG1vdmluZyBmcm9tIGEgcmVzZXJ2ZWQgZmllbGQgdG8gc29tZXRoaW5nIG1vcmUgYWN0aXZlbHkgdXNlZCBmb3IgY29udHJvbC4gVGhlIGludHJvZHVjdGlvbiBvZiB0aGUgYEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTU2AgZmxhZyBpcyB0aGUga2V5IHRha2Vhd2F5LCBJIHN1c3BlY3QuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgZ29hbCBvZiB0aGlzIGlzIHRvIG1ha2UgaXQgbXVjaCBjbGVhcmVyIHRvIHRoZSB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uIGFib3V0IHRoZSBwcm9ncmVzcyBvZiBhIGRlZHVwZSBvcGVyYXRpb24sIGFsbG93aW5nIGZvciBiZXR0ZXIgZmVlZGJhY2sgYW5kIGhhbmRsaW5nIG9mIHBvdGVudGlhbGx5IGxvbmctcnVubmluZyBvcGVyYXRpb25zLgoKTm93LCBsb29raW5nIGF0IHRoZSBjb2RlLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgaG93IHRoaXMgbmV3IGZsYWcgaXMgYmVpbmcgdXRpbGl6ZWQuIEluc3RlYWQgb2YgY2hlY2tpbmcgYHNhbWUtJmd0O3Jlc2VydmVkMmAsIHRoZSBwYXRjaCBub3cgY2hlY2tzIGBzYW1lLSZndDtmbGFncyAmYW1wOyB+RklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTYCBpbnNpZGUgdGhlIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgIGZ1bmN0aW9uLCBhbmQgdGhlIGBpbmZvLSZndDtieXRlc19kZWR1cGVkYCB2YWx1ZSBpcyBiZWluZyB1cGRhdGVkIGJhc2VkIG9uIHRoZSBzdGF0ZSBvZiB0aGF0IGZsYWcuCgpUaGUgY29kZSBzbmlwcGV0IGNhdWdodCBteSBhdHRlbnRpb24uIEl0IHNob3dzIHRoZSBjb25kaXRpb25hbCB1cGRhdGUgb2YgYGluZm8tJmd0O2J5dGVzX2RlZHVwZWRgLiBIZXJlJiMzOTtzIHdoZXJlIHRoZSBsb2dpYyBiZWNvbWVzIGltcG9ydGFudDoKYGBgYwoJCWlmIChkZWR1cGVkID09IC1FQkFERSkgewoJCQlpbmZvLSZndDtzdGF0dXMgPSBGSUxFX0RFRFVQRV9SQU5HRV9ESUZGRVJTOwoJCQlpZiAoc2FtZS0mZ3Q7ZmxhZ3MgJmFtcDsgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTKSB7CgkJCQl1NjQgc3RlcCA9IGlfYmxvY2tzaXplKHNyYyk7Ci4uLgoJCQkJaWYgKHN0ZXAgJmx0Oz0gMSkKCQkJCQlzdGVwID0gbGVuOwoJCQkJaW5mby0mZ3Q7Ynl0ZXNfZGVkdXBlZCA9IG1pbl90KHU2NCwgc3RlcCwgbGVuKTsKCQkJfQoJCX0gZWxzZSBpZiAoZGVkdXBlZCAmbHQ7IDApIHsKCQkJaW5mby0mZ3Q7c3RhdHVzID0gZGVkdXBlZDsKCQl9IGVsc2UgaWYgKHNhbWUtJmd0O2ZsYWdzICZhbXA7IEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykgewoJCQlpbmZvLSZndDtieXRlc19kZWR1cGVkID0gZGVkdXBlZDsKCQl9IGVsc2UgewoJCQlpbmZvLSZndDtieXRlc19kZWR1cGVkID0gbGVuOwoJCX0KYGBgCklmIGBkZWR1cGVkID09IC1FQkFERWAgKHdoaWNoIEkgYXNzdW1lIGlzIGFuIGVycm9yIGNvZGUpLCB0aGVuIGBpbmZvLSZndDtieXRlc19kZWR1cGVkYCBpcyBOT1QgdXBkYXRlZCwgdW5sZXNzIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgIGlzIHNldC4gVGhlbiBpdCBjYWxjdWxhdGVzIHRoZSBhbW91bnQgb2YgcHJvZ3Jlc3MgdGhhdCB3YXMgbWFkZSBiZWZvcmUgdGhlIGVycm9yIGFuZCBwb3B1bGF0ZXMgaXQgaW4gYGluZm8tJmd0O2J5dGVzX2RlZHVwZWRgLiBJZiB0aGUgZmxhZyBpc24mIzM5O3Qgc2V0LCBpdCBkb2VzbiYjMzk7dC4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgb3JpZ2luYWwgY29kZSwgYW5kIEkmIzM5O20gYXNraW5nIG15c2VsZiwgJiMzOTtXYWl0LCBob3cgd2FzIHRoaXMgaGFuZGxlZCBiZWZvcmU/JiMzOTsgSSBhbSBhIGxpdHRsZSBjb25jZXJuZWQuIENoZWNraW5nIHRoZSBwcmlvciBjb2RlIHNlZ21lbnQsIG15IGNvbmNlcm5zIGFyZSB2aW5kaWNhdGVkLCBgaW5mby0mZ3Q7Ynl0ZXNfZGVkdXBlZGAgd2FzICpub3QqIHVwZGF0ZWQgaW4gdGhlIGVycm9yIHBhdGggYmVmb3JlLiBTbywgdGhpcyBwYXRjaCBpc24mIzM5O3QganVzdCBhIHNpbXBsZSBmZWF0dXJlIGFkZGl0aW9uOyBpdCBpcyBjaGFuZ2luZyBiZWhhdmlvciwgdG8gcmVwb3J0IHByb2dyZXNzIGV2ZW4gaWYgdGhlcmUgaXMgYW4gZXJyb3IuIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhpcyBpc24mIzM5O3QgZ29pbmcgdG8gYnJlYWsgYW55IGV4aXN0aW5nIHVzZXIgc3BhY2UgYXBwbGljYXRpb25zLgoKVGhlIGBpbmZvYCB2YXJpYWJsZSwgZnJvbSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlLCBpcyBwYXJ0IG9mIGBzYW1lYCwgd2hpY2ggb3JpZ2luYXRlcyBmcm9tIHVzZXItc3BhY2UuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGhvdyBpcyB0aGUgc3RydWN0dXJlICphY3R1YWxseSogdXNlZD8gSXMgaXQgY29waWVkIGZyb20gdXNlci1zcGFjZSwgbW9kaWZpZWQgaW4ga2VybmVsLXNwYWNlLCBhbmQgdGhlbiBjb3BpZWQgYmFjaz8gSSBuZWVkIHRvIGxvb2sgYXQgaG93IHRoaXMgYHNhbWVgIHN0cnVjdCBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHJlc3VsdHMgYXJlIHJldHVybmVkIHRvIHVzZXIgc3BhY2UuIEkgYW0gZ29pbmcgdG8gc2VlIGhvdyBgc2FtZWAgZ2V0cyBpdHMgaW5pdGlhbCB2YWx1ZXMsIHNvIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZWAgZnVuY3Rpb24gb3Igc29tZXRoaW5nIHNpbWlsYXIgdXNpbmcgdGhlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB1dGlsaXR5LiBUaGF0IHdpbGwgc2hvdyBtZSB0aGUgZGF0YSBmbG93IGFuZCBpZiB0aGUga2VybmVsIGlzIGV4cG9zaW5nIGFueSBzdGF0ZSB0aGF0IG5lZWRzIHByb3RlY3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zmc19kZWR1cGVfZmlsZV9yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb2N0bC5jPTQxNT1zdGF0aWMgaW50IGlvY3RsX2ZpbGVfZGVkdXBlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmZzL2lvY3RsLmMtNDQxLVx0c2FtZS1cdTAwM2VkZXN0X2NvdW50ID0gY291bnQ7XG5mcy9pb2N0bC5jOjQ0MjpcdHJldCA9IHZmc19kZWR1cGVfZmlsZV9yYW5nZShmaWxlLCBzYW1lKTtcbmZzL2lvY3RsLmMtNDQzLVx0aWYgKHJldClcbi0tXG5mcy9vdmVybGF5ZnMvZmlsZS5jPTUyNz1zdGF0aWMgbG9mZl90IG92bF9jb3B5ZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZV9pbiwgbG9mZl90IHBvc19pbixcbi0tXG5mcy9vdmVybGF5ZnMvZmlsZS5jLTU4MC1cdFx0Y2FzZSBPVkxfREVEVVBFOlxuZnMvb3ZlcmxheWZzL2ZpbGUuYzo1ODE6XHRcdFx0cmV0ID0gdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShyZWFsZmlsZV9pbiwgcG9zX2luLFxuZnMvb3ZlcmxheWZzL2ZpbGUuYy01ODItXHRcdFx0XHRcdFx0XHRyZWFsZmlsZV9vdXQsIHBvc19vdXQsIGxlbixcbi0tXG5mcy9yZW1hcF9yYW5nZS5jPTE4MT1zdGF0aWMgdm9pZCB2ZnNfdW5sb2NrX3R3b19mb2xpb3Moc3RydWN0IGZvbGlvICpmb2xpbzEsIHN0cnVjdCBmb2xpbyAqZm9saW8yKVxuLS1cbmZzL3JlbWFwX3JhbmdlLmMtMTkxLSAqL1xuZnMvcmVtYXBfcmFuZ2UuYzoxOTI6c3RhdGljIGludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VfY29tcGFyZShzdHJ1Y3QgZmlsZSAqc3JjLCBsb2ZmX3Qgc3Jjb2ZmLFxuZnMvcmVtYXBfcmFuZ2UuYy0xOTMtXHRcdFx0XHRcdCBzdHJ1Y3QgZmlsZSAqZGVzdCwgbG9mZl90IGRzdG9mZixcbi0tXG5mcy9yZW1hcF9yYW5nZS5jPTI3Nz1fX2dlbmVyaWNfcmVtYXBfZmlsZV9yYW5nZV9wcmVwKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxuLS1cbmZzL3JlbWFwX3JhbmdlLmMtMzQwLVx0XHRpZiAoIUlTX0RBWChpbm9kZV9pbikpXG5mcy9yZW1hcF9yYW5nZS5jOjM0MTpcdFx0XHRyZXQgPSB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VfY29tcGFyZShmaWxlX2luLCBwb3NfaW4sXG5mcy9yZW1hcF9yYW5nZS5jLTM0Mi1cdFx0XHRcdFx0ZmlsZV9vdXQsIHBvc19vdXQsICpsZW4sIFx1MDAyNmlzX3NhbWUpO1xuLS1cbmZzL3JlbWFwX3JhbmdlLmM9NDE2PXN0YXRpYyBib29sIG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5mcy9yZW1hcF9yYW5nZS5jLTQzMS1cbmZzL3JlbWFwX3JhbmdlLmM6NDMyOmxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXG5mcy9yZW1hcF9yYW5nZS5jLTQzMy1cdFx0XHRcdCBzdHJ1Y3QgZmlsZSAqZHN0X2ZpbGUsIGxvZmZfdCBkc3RfcG9zLFxuLS1cbmZzL3JlbWFwX3JhbmdlLmMtNDQxLVx0LypcbmZzL3JlbWFwX3JhbmdlLmM6NDQyOlx0ICogVGhpcyBpcyByZWR1bmRhbnQgaWYgY2FsbGVkIGZyb20gdmZzX2RlZHVwZV9maWxlX3JhbmdlKCksIGJ1dCBvdGhlclxuZnMvcmVtYXBfcmFuZ2UuYy00NDMtXHQgKiBjYWxsZXJzIG5lZWQgaXQgYW5kIGl0JiMzOTtzIG5vdCBwZXJmb3JtYW5jZSBzZXNpdGl2ZS4uLlxuLS1cbmZzL3JlbWFwX3JhbmdlLmMtNDg5LX1cbmZzL3JlbWFwX3JhbmdlLmM6NDkwOkVYUE9SVF9TWU1CT0wodmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZSk7XG5mcy9yZW1hcF9yYW5nZS5jLTQ5MS1cbmZzL3JlbWFwX3JhbmdlLmM6NDkyOmludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSlcbmZzL3JlbWFwX3JhbmdlLmMtNDkzLXtcbi0tXG5mcy9yZW1hcF9yYW5nZS5jLTU1MC1cbmZzL3JlbWFwX3JhbmdlLmM6NTUxOlx0XHRkZWR1cGVkID0gdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShmaWxlLCBvZmYsIGZkX2ZpbGUoZHN0X2ZkKSxcbmZzL3JlbWFwX3JhbmdlLmMtNTUyLVx0XHRcdFx0XHRcdCAgICBpbmZvLVx1MDAzZWRlc3Rfb2Zmc2V0LCBsZW4sXG4tLVxuZnMvcmVtYXBfcmFuZ2UuYy01ODMtfVxuZnMvcmVtYXBfcmFuZ2UuYzo1ODQ6RVhQT1JUX1NZTUJPTCh2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2UpO1xuLS1cbmluY2x1ZGUvbGludXgvZnMuaD0yMDg1PWV4dGVybiBsb2ZmX3QgdmZzX2Nsb25lX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXG4tLVxuaW5jbHVkZS9saW51eC9mcy5oLTIwODctXHRcdFx0XHQgICBsb2ZmX3QgbGVuLCB1bnNpZ25lZCBpbnQgcmVtYXBfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9mcy5oOjIwODg6ZXh0ZXJuIGludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjA4OS1cdFx0XHRcdCBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKnNhbWUpO1xuaW5jbHVkZS9saW51eC9mcy5oOjIwOTA6ZXh0ZXJuIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjA5MS1cdFx0XHRcdFx0c3RydWN0IGZpbGUgKmRzdF9maWxlLCBsb2ZmX3QgZHN0X3BvcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ4MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIG9mIHRoZSB0aG91Z2h0IHByb2Nlc3MgZGVzY3JpYmVkOgoKKipEaXZpbmcgaW50byBgaW9jdGxfZmlsZV9kZWR1cGVfcmFuZ2VgKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGVkdXBsaWNhdGlvbiBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gY29kZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgYGlvY3RsX2ZpbGVfZGVkdXBlX3JhbmdlYCBjYWxsIGlzIGltcGxlbWVudGVkLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyB3aXRoIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBoZWFkIHN0cmFpZ2h0IG92ZXIgdG8gYGZzL2lvY3RsLmNgLiBUaGF0IHNob3VsZCBjb250YWluIHRoZSBwcmltYXJ5IGxvZ2ljIGZvciBoYW5kbGluZyB0aGUgZmlsZSBzeXN0ZW0gY29udHJvbCBvcGVyYXRpb25zLCBpbmNsdWRpbmcgdGhlIGRlZHVwZSBpb2N0bC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQgaW4gdGhlcmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMsIGVycm9yIGhhbmRsaW5nLCBhbmQgdGhlIGNvcmUgYWxnb3JpdGhtIGZvciBmaW5kaW5nIGFuZCBtZXJnaW5nIHRoZSBkdXBsaWNhdGUgZXh0ZW50cy4gRnJvbSB0aGVyZSwgSSBjYW4gZmlndXJlIG91dCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UgYW5kIGFueSBmaWxlIHN5c3RlbSBzcGVjaWZpYyBudWFuY2VzLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9pb2N0bC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAwOlx0fVxuIDQwMTpcdFxuIDQwMjpcdHN0YXRpYyBpbnQgaW9jdGxfZnN0aGF3KHN0cnVjdCBmaWxlICpmaWxwKVxuIDQwMzpcdHtcbiA0MDQ6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBmaWxlX2lub2RlKGZpbHApLVx1MDAzZWlfc2I7XG4gNDA1Olx0XG4gNDA2Olx0XHRpZiAoIW5zX2NhcGFibGUoc2ItXHUwMDNlc191c2VyX25zLCBDQVBfU1lTX0FETUlOKSlcbiA0MDc6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiA0MDg6XHRcbiA0MDk6XHRcdC8qIFRoYXcgKi9cbiA0MTA6XHRcdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZXRoYXdfc3VwZXIpXG4gNDExOlx0XHRcdHJldHVybiBzYi1cdTAwM2VzX29wLVx1MDAzZXRoYXdfc3VwZXIoc2IsIEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLCBOVUxMKTtcbiA0MTI6XHRcdHJldHVybiB0aGF3X3N1cGVyKHNiLCBGUkVFWkVfSE9MREVSX1VTRVJTUEFDRSwgTlVMTCk7XG4gNDEzOlx0fVxuIDQxNDpcdFxuIDQxNTpcdHN0YXRpYyBpbnQgaW9jdGxfZmlsZV9kZWR1cGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsXG4gNDE2Olx0XHRcdFx0XHQgICBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgX191c2VyICphcmdwKVxuIDQxNzpcdHtcbiA0MTg6XHRcdHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSA9IE5VTEw7XG4gNDE5Olx0XHRpbnQgcmV0O1xuIDQyMDpcdFx0dW5zaWduZWQgbG9uZyBzaXplO1xuIDQyMTpcdFx0dTE2IGNvdW50O1xuIDQyMjpcdFxuIDQyMzpcdFx0aWYgKGdldF91c2VyKGNvdW50LCBcdTAwMjZhcmdwLVx1MDAzZWRlc3RfY291bnQpKSB7XG4gNDI0Olx0XHRcdHJldCA9IC1FRkFVTFQ7XG4gNDI1Olx0XHRcdGdvdG8gb3V0O1xuIDQyNjpcdFx0fVxuIDQyNzpcdFxuIDQyODpcdFx0c2l6ZSA9IHN0cnVjdF9zaXplKHNhbWUsIGluZm8sIGNvdW50KTtcbiA0Mjk6XHRcdGlmIChzaXplIFx1MDAzZSBQQUdFX1NJWkUpIHtcbiA0MzA6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiA0MzE6XHRcdFx0Z290byBvdXQ7XG4gNDMyOlx0XHR9XG4gNDMzOlx0XG4gNDM0Olx0XHRzYW1lID0gbWVtZHVwX3VzZXIoYXJncCwgc2l6ZSk7XG4gNDM1Olx0XHRpZiAoSVNfRVJSKHNhbWUpKSB7XG4gNDM2Olx0XHRcdHJldCA9IFBUUl9FUlIoc2FtZSk7XG4gNDM3Olx0XHRcdHNhbWUgPSBOVUxMO1xuIDQzODpcdFx0XHRnb3RvIG91dDtcbiA0Mzk6XHRcdH1cbiA0NDA6XHRcbiA0NDE6XHRcdHNhbWUtXHUwMDNlZGVzdF9jb3VudCA9IGNvdW50O1xuIDQ0MjpcdFx0cmV0ID0gdmZzX2RlZHVwZV9maWxlX3JhbmdlKGZpbGUsIHNhbWUpO1xuIDQ0MzpcdFx0aWYgKHJldClcbiA0NDQ6XHRcdFx0Z290byBvdXQ7XG4gNDQ1Olx0XG4gNDQ2Olx0XHRyZXQgPSBjb3B5X3RvX3VzZXIoYXJncCwgc2FtZSwgc2l6ZSk7XG4gNDQ3Olx0XHRpZiAocmV0KVxuIDQ0ODpcdFx0XHRyZXQgPSAtRUZBVUxUO1xuIDQ0OTpcdFxuIDQ1MDpcdG91dDpcbiA0NTE6XHRcdGtmcmVlKHNhbWUpO1xuIDQ1MjpcdFx0cmV0dXJuIHJldDtcbiA0NTM6XHR9XG4gNDU0Olx0XG4gNDU1Olx0c3RhdGljIGludCBpb2N0bF9nZXRmc3V1aWQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmdwKVxuIDQ1NjpcdHtcbiA0NTc6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBmaWxlX2lub2RlKGZpbGUpLVx1MDAzZWlfc2I7XG4gNDU4Olx0XHRzdHJ1Y3QgZnN1dWlkMiB1ID0geyAubGVuID0gc2ItXHUwMDNlc191dWlkX2xlbiwgfTtcbiA0NTk6XHRcbiA0NjA6XHRcdGlmICghc2ItXHUwMDNlc191dWlkX2xlbilcbiA0NjE6XHRcdFx0cmV0dXJuIC1FTk9UVFk7XG4gNDYyOlx0XG4gNDYzOlx0XHRtZW1jcHkoXHUwMDI2dS51dWlkWzBdLCBcdTAwMjZzYi1cdTAwM2VzX3V1aWQsIHNiLVx1MDAzZXNfdXVpZF9sZW4pO1xuIDQ2NDpcdFxuIDQ2NTpcdFx0cmV0dXJuIGNvcHlfdG9fdXNlcihhcmdwLCBcdTAwMjZ1LCBzaXplb2YodSkpID8gLUVGQVVMVCA6IDA7XG4gNDY2Olx0fVxuIDQ2NzpcdFxuIDQ2ODpcdHN0YXRpYyBpbnQgaW9jdGxfZ2V0X2ZzX3N5c2ZzX3BhdGgoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmdwKVxuIDQ2OTpcdHtcbiA0NzA6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBmaWxlX2lub2RlKGZpbGUpLVx1MDAzZWlfc2I7XG4gNDcxOlx0XG4gNDcyOlx0XHRpZiAoIXN0cmxlbihzYi1cdTAwM2VzX3N5c2ZzX25hbWUpKVxuIDQ3MzpcdFx0XHRyZXR1cm4gLUVOT1RUWTtcbiA0NzQ6XHRcbiA0NzU6XHRcdHN0cnVjdCBmc19zeXNmc19wYXRoIHUgPSB7fTtcbiA0NzY6XHRcbiA0Nzc6XHRcdHUubGVuID0gc2NucHJpbnRmKHUubmFtZSwgc2l6ZW9mKHUubmFtZSksIFwmIzM0OyVzLyVzXCYjMzQ7LCBzYi1cdTAwM2VzX3R5cGUtXHUwMDNlbmFtZSwgc2ItXHUwMDNlc19zeXNmc19uYW1lKTtcbiA0Nzg6XHRcbiA0Nzk6XHRcdHJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgXHUwMDI2dSwgc2l6ZW9mKHUpKSA/IC1FRkFVTFQgOiAwO1xuIDQ4MDpcdH1cbiA0ODE6XHRcbiA0ODI6XHQvKlxuIDQ4MzpcdCAqIGRvX3Zmc19pb2N0bCgpIGlzIG5vdCBmb3IgZHJpdmVycyBhbmQgbm90IGludGVuZGVkIHRvIGJlIEVYUE9SVF9TWU1CT0woKSYjMzk7ZC5cbiA0ODQ6XHQgKiBJdCYjMzk7cyBqdXN0IGEgc2ltcGxlIGhlbHBlciBmb3Igc3lzX2lvY3RsIGFuZCBjb21wYXRfc3lzX2lvY3RsLlxuIDQ4NTpcdCAqXG4gNDg2Olx0ICogV2hlbiB5b3UgYWRkIGFueSBuZXcgY29tbW9uIGlvY3RscyB0byB0aGUgc3dpdGNoZXMgYWJvdmUgYW5kIGJlbG93LFxuIDQ4NzpcdCAqIHBsZWFzZSBlbnN1cmUgdGhleSBoYXZlIGNvbXBhdGlibGUgYXJndW1lbnRzIGluIGNvbXBhdCBtb2RlLlxuIDQ4ODpcdCAqXG4gNDg5Olx0ICogVGhlIExTTSBtYWlsaW5nIGxpc3Qgc2hvdWxkIGFsc28gYmUgbm90aWZpZWQgb2YgYW55IGNvbW1hbmQgYWRkaXRpb25zIG9yXG4gNDkwOlx0ICogY2hhbmdlcywgYXMgc3BlY2lmaWMgTFNNcyBtYXkgYmUgYWZmZWN0ZWQuXG4gNDkxOlx0ICovXG4gNDkyOlx0c3RhdGljIGludCBkb192ZnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBmZCxcbiA0OTM6XHRcdFx0XHR1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiA0OTQ6XHR7XG4gNDk1Olx0XHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcbiA0OTY6XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApO1xuIDQ5NzpcdFxuIDQ5ODpcdFx0c3dpdGNoIChjbWQpIHtcbiA0OTk6XHRcdGNhc2UgRklPQ0xFWDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIxNwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDg2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBTYWZldHkgb2YgYHZmc19kZWR1cGVfZmlsZV9yYW5nZWAgYW5kIGl0cyBJbnRlcmFjdGlvbiB3aXRoIFVzZXItU3BhY2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYG1lbWR1cF91c2VyYCBiZWluZyB1c2VkLiBUaGF0JiMzOTtzIG15IGZpcnN0IHNpZ25hbCB0byBzdGFydCB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBXZSYjMzk7cmUgYWxsb2NhdGluZyBhbmQgY29weWluZyBhIHN0cnVjdHVyZSwgYHNhbWVgLCBkaXJlY3RseSBmcm9tIHVzZXItc3BhY2UgdXNpbmcgYG1lbWR1cF91c2VyKGFyZ3AsIHNpemUpYC4gVGhlbiB3ZSBjYWxsIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2UoZmlsZSwgc2FtZSlgLiBJZiBldmVyeXRoaW5nIGdvZXMgd2VsbCAocmV0dXJucyAwKSwgd2UgY29weSBpdCAqYmFjayogdG8gdXNlci1zcGFjZSB3aXRoIGBjb3B5X3RvX3VzZXIoYXJncCwgc2FtZSwgc2l6ZSlgLgoKUmlnaHQgYXdheSwgYWxhcm0gYmVsbHMgc3RhcnQgZ29pbmcgb2ZmLiBgbWVtZHVwX3VzZXJgIGNvcGllcyB0aGUgKmVudGlyZSogc3RydWN0dXJlIGZyb20gdXNlci1zcGFjZS4gU28gYW55IHVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIGBzYW1lYCBhcmUgZXNzZW50aWFsbHkgd2hhdGV2ZXIgZ2FyYmFnZSB0aGUgdXNlciBwcm9jZXNzIGhhcHBlbmVkIHRvIGhhdmUgaW4gdGhhdCBtZW1vcnkgcmVnaW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJiMzOTt0IG9wZW5pbmcgYSB2dWxuZXJhYmlsaXR5LgoKV2FpdCwgaWYgdGhlIHVzZXIgcHJvdmlkZXMgdW5pbml0aWFsaXplZCBtZW1vcnksIGBtZW1kdXBfdXNlcmAgY29waWVzIGl0LCBhbmQgdGhlbiBpdCBnZXRzIGNvcGllZCAqYmFjayogdG8gdXNlci1zcGFjZS4gIFRoZXJlJiMzOTtzIG5vIGtlcm5lbCBtZW1vcnkgbGVhayBoZXJlLCBpcyB0aGVyZT8gVGhlIG1lbW9yeSBvcmlnaW5hdGVkIGluIHVzZXItc3BhY2UsIHNvIGV2ZW4gaWYgaXQmIzM5O3MgZ2FyYmFnZSwgdGhlIGtlcm5lbCBpcyBqdXN0IGFjdGluZyBhcyBhIHBhc3MtdGhyb3VnaC4gT2theSwgc28gZmFyIHNvIGdvb2QuIEl0JiMzOTtzIGVzc2VudGlhbGx5IHJldHVybmluZyB0aGUgc2FtZSBnYXJiYWdlIHRoZSB1c2VyIHByb3ZpZGVkLgoKQnV0IHdoYXQgaWYgYHNpemVgIGlzIGxhcmdlciB0aGFuIHdoYXQgdGhlIHVzZXIgKmFjdHVhbGx5KiBpbml0aWFsaXplZD8gU2FtZSBkZWFsLiBgbWVtZHVwX3VzZXJgIGNvcGllcyBgc2l6ZWAgYnl0ZXMsIGV2ZW4gaWYgdGhlIHVzZXItc3BhY2UgcHJvZ3JhbSBvbmx5IGluaXRpYWxpemVkIGEgc21hbGxlciBjaHVuay4gIFRoYXQmIzM5O3MgYSB1c2VyLXNwYWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLCBub3QgYSBrZXJuZWwgbWVtb3J5IGxlYWsuIEkgbmVlZCB0byBub3RlIHRoYXQgaW4gbXkgY29tbWVudHMuCgpOb3csIHdoYXQgaWYgYGluZm8tJmd0O2J5dGVzX2RlZHVwZWRgICppc24mIzM5O3QqIHVwZGF0ZWQgYnkgdGhlIGtlcm5lbCBhbmQgdGhlbiBnZXRzIGNvcGllZCBiYWNrIHRvIHVzZXItc3BhY2U/ICBTaW5jZSB0aGUgZGF0YSB3YXMgY29waWVkIEZST00gdXNlci1zcGFjZSwgaXQganVzdCByZXR1cm5zIHRoZSBzYW1lIHVuaW5pdGlhbGl6ZWQgZ2FyYmFnZSB0byB1c2VyLXNwYWNlLCBzbyB0aGVyZSYjMzk7cyAqc3RpbGwqIG5vIGtlcm5lbCBtZW1vcnkgbGVhay4gSSBmZWVsIGdvb2QgYWJvdXQgdGhhdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLCB0aG91Z2guCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbiBhbmQgbG9vayBhdCB0aGUgbG9naWMgYXJvdW5kIGBpbmZvLSZndDtieXRlc19kZWR1cGVkYC4gSSBuZWVkIHRvIGVuc3VyZSBpdCYjMzk7cyBpbml0aWFsaXplZCBjb3JyZWN0bHkgaW4gKmFsbCogY2FzZXMuIExldCYjMzk7cyBzZWUuLi4gQWgsIHRoZXJlJiMzOTtzIGEgcGF0Y2ggdGhhdCBjb25kaXRpb25hbGx5IHVwZGF0ZXMgYGluZm8tJmd0O2J5dGVzX2RlZHVwZWRgIGJhc2VkIG9uIGBzYW1lLSZndDtmbGFncyAmYW1wOyBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgLgoKSWYgdGhlIGZsYWcgaXMgKm5vdCogc2V0LCBgaW5mby0mZ3Q7Ynl0ZXNfZGVkdXBlZGAgaXNuJiMzOTt0IHVwZGF0ZWQgd2hlbiBgZGVkdXBlZCA9PSAtRUJBREVgIG9yIHdoZW4gYGRlZHVwZWQgJmx0OyAwYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHRoZSAqb2xkKiBsb2dpYzoKCmBgYGMKCQlpZiAoZGVkdXBlZCA9PSAtRUJBREUpCgkJCWluZm8tJmd0O3N0YXR1cyA9IEZJTEVfREVEVVBFX1JBTkdFX0RJRkZFUlM7CgkJZWxzZSBpZiAoZGVkdXBlZCAmbHQ7IDApCgkJCWluZm8tJmd0O3N0YXR1cyA9IGRlZHVwZWQ7CgkJZWxzZQoJCQlpbmZvLSZndDtieXRlc19kZWR1cGVkID0gbGVuOwpgYGAKClByZXZpb3VzbHksIGlmIGBkZWR1cGVkID09IC1FQkFERWAsIHRoZW4gYGluZm8tJmd0O2J5dGVzX2RlZHVwZWRgIHdhcyAqbm90KiB1cGRhdGVkLiBTYW1lIGZvciBgZGVkdXBlZCAmbHQ7IDBgLiBJZiBgZGVkdXBlZCAmZ3Q7PSAwYCwgYGluZm8tJmd0O2J5dGVzX2RlZHVwZWRgIHdhcyBhbHdheXMgdXBkYXRlZCB0byBgbGVuYC4KCk5vdyB3aXRoIHRoZSBwYXRjaCwgdGhlIGNvZGUgbG9va3MgbGlrZToKCmBgYGMKCQlpZiAoZGVkdXBlZCA9PSAtRUJBREUpIHsKCQkJaW5mby0mZ3Q7c3RhdHVzID0gRklMRV9ERURVUEVfUkFOR0VfRElGRkVSUzsKCQkJaWYgKHNhbWUtJmd0O2ZsYWdzICZhbXA7IEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykgewoJCQkJLi4uCgkJCQlpbmZvLSZndDtieXRlc19kZWR1cGVkID0gbWluX3QodTY0LCBzdGVwLCBsZW4pOwoJCQl9CgkJfSBlbHNlIGlmIChkZWR1cGVkICZsdDsgMCkgewoJCQlpbmZvLSZndDtzdGF0dXMgPSBkZWR1cGVkOwoJCX0gZWxzZSBpZiAoc2FtZS0mZ3Q7ZmxhZ3MgJmFtcDsgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTKSB7CgkJCWluZm8tJmd0O2J5dGVzX2RlZHVwZWQgPSBkZWR1cGVkOwoJCX0gZWxzZSB7CgkJCWluZm8tJmd0O2J5dGVzX2RlZHVwZWQgPSBsZW47CgkJfQpgYGAKCk5vdywgaWYgYGRlZHVwZWQgJmd0Oz0gMGAgKmFuZCogdGhlIGZsYWcgaXMgKm5vdCogc2V0LCBgaW5mby0mZ3Q7Ynl0ZXNfZGVkdXBlZCA9IGxlbmAgaXMgZXhlY3V0ZWQgKHRoZSBgZWxzZWAgYnJhbmNoKS4gSWYgdGhlIGZsYWcgKmlzKiBzZXQsIGBpbmZvLSZndDtieXRlc19kZWR1cGVkID0gZGVkdXBlZGAuCgpTbywgYGluZm8tJmd0O2J5dGVzX2RlZHVwZWRgIGlzIG5vdyB1cGRhdGVkIGluIHRoZSAqc2FtZSogY2FzZXMgYXMgYmVmb3JlICpwbHVzKiBhZGRpdGlvbmFsbHkgd2hlbiBgZGVkdXAKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9jdGwuYz00MTU9c3RhdGljIGludCBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5mcy9pb2N0bC5jLTQ0MS1cdHNhbWUtXHUwMDNlZGVzdF9jb3VudCA9IGNvdW50O1xuZnMvaW9jdGwuYzo0NDI6XHRyZXQgPSB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2UoZmlsZSwgc2FtZSk7XG5mcy9pb2N0bC5jLTQ0My1cdGlmIChyZXQpXG4tLVxuZnMvcmVtYXBfcmFuZ2UuYz00MzI9bG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3Bvcyxcbi0tXG5mcy9yZW1hcF9yYW5nZS5jLTQ0MS1cdC8qXG5mcy9yZW1hcF9yYW5nZS5jOjQ0MjpcdCAqIFRoaXMgaXMgcmVkdW5kYW50IGlmIGNhbGxlZCBmcm9tIHZmc19kZWR1cGVfZmlsZV9yYW5nZSgpLCBidXQgb3RoZXJcbmZzL3JlbWFwX3JhbmdlLmMtNDQzLVx0ICogY2FsbGVycyBuZWVkIGl0IGFuZCBpdCYjMzk7cyBub3QgcGVyZm9ybWFuY2Ugc2VzaXRpdmUuLi5cbi0tXG5mcy9yZW1hcF9yYW5nZS5jPTQ5MD1FWFBPUlRfU1lNQk9MKHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUpO1xuZnMvcmVtYXBfcmFuZ2UuYy00OTEtXG5mcy9yZW1hcF9yYW5nZS5jOjQ5MjppbnQgdmZzX2RlZHVwZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKnNhbWUpXG5mcy9yZW1hcF9yYW5nZS5jLTQ5My17XG4tLVxuaW5jbHVkZS9saW51eC9mcy5oPTIwODU9ZXh0ZXJuIGxvZmZfdCB2ZnNfY2xvbmVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZV9pbiwgbG9mZl90IHBvc19pbixcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjA4Ny1cdFx0XHRcdCAgIGxvZmZfdCBsZW4sIHVuc2lnbmVkIGludCByZW1hcF9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjA4ODpleHRlcm4gaW50IHZmc19kZWR1cGVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbmluY2x1ZGUvbGludXgvZnMuaC0yMDg5LVx0XHRcdFx0IHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1OTcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIHRoZSBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCBDYWxsZXJzIGFuZCBTdHJ1Y3R1cmVzKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYC4gVGhlIGNvZGUgdHJhY2VzIHNob3cgdGhhdCB0aGUgb25seSBkaXJlY3QgY2FsbGVyIEkgc2VlIGlzIGBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZWAgd2l0aGluIGBmcy9pb2N0bC5jYC4gVGhhdCBmdW5jdGlvbiBzZWVtcyB0byBiZSByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIGlvY3RsIGNhbGwsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSBpdCBhbGxvY2F0aW5nIHRoZSBgc2FtZWAgYXJyYXkgdXNpbmcgYG1lbWR1cF91c2VyYCwgd2hpY2ggaXNuJiMzOTt0IGVudGlyZWx5IHN1cnByaXNpbmcgaW4gdGhpcyBjb250ZXh0LiBJdCBzdWdnZXN0cyB0aGV5JiMzOTtyZSBsaWtlbHkgZHVwbGljYXRpbmcgZGF0YSBwcm92aWRlZCBieSB1c2Vyc3BhY2UuCgpCdXQgaGFuZyBvbi4uLiBJIG5lZWQgdG8gY29uc2lkZXIgYHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZWAuIFRoaXMgc3RydWN0IGhhcyB0byBiZSB1c2VkIHNvbWV3aGVyZSBiZXNpZGVzIGp1c3QgdGhlIGlvY3RsIHBhdGguIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgb3RoZXIgcG90ZW50aWFsIGNvbnN1bWVycyBvciB1c2VycyBvZiB0aGF0IGRhdGEgc3RydWN0dXJlIGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb2N0bC5jPTQxNT1zdGF0aWMgaW50IGlvY3RsX2ZpbGVfZGVkdXBlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLFxuZnMvaW9jdGwuYzo0MTY6XHRcdFx0XHQgICBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgX191c2VyICphcmdwKVxuZnMvaW9jdGwuYy00MTcte1xuZnMvaW9jdGwuYzo0MTg6XHRzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKnNhbWUgPSBOVUxMO1xuZnMvaW9jdGwuYy00MTktXHRpbnQgcmV0O1xuLS1cbmZzL3JlbWFwX3JhbmdlLmM9NDkwPUVYUE9SVF9TWU1CT0wodmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZSk7XG5mcy9yZW1hcF9yYW5nZS5jLTQ5MS1cbmZzL3JlbWFwX3JhbmdlLmM6NDkyOmludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSlcbmZzL3JlbWFwX3JhbmdlLmMtNDkzLXtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MjA4OD1leHRlcm4gaW50IHZmc19kZWR1cGVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbmluY2x1ZGUvbGludXgvZnMuaDoyMDg5Olx0XHRcdFx0IHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSk7XG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjA5MC1leHRlcm4gbG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3Bvcyxcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaD0xNjc9c3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlX2luZm8ge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oLTE4MC1cbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oOjE4MTovKiBmbGFncyBmb3Igc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICovXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0xODItI2RlZmluZSBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1MgKDFVIFx1MDAzY1x1MDAzYyAwKVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oLTE4NC0vKiBmcm9tIHN0cnVjdCBidHJmc19pb2N0bF9maWxlX2V4dGVudF9zYW1lX2FyZ3MgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oOjE4NTpzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2Uge1xuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMTg2LVx0X191NjQgc3JjX29mZnNldDtcdC8qIGluIC0gc3RhcnQgb2YgZXh0ZW50IGluIHNvdXJjZSAqL1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oPTk5PXN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZV9pbmZvIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0xMTMtLyogZnJvbSBzdHJ1Y3QgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzICovXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaDoxMTQ6c3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlIHtcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTExNS1cdF9fdTY0IHNyY19vZmZzZXQ7XHQvKiBpbiAtIHN0YXJ0IG9mIGV4dGVudCBpbiBzb3VyY2UgKi9cbi0tXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaD0xNjc9c3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlX2luZm8ge1xuLS1cbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTE4MS0vKiBmcm9tIHN0cnVjdCBidHJmc19pb2N0bF9maWxlX2V4dGVudF9zYW1lX2FyZ3MgKi9cbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oOjE4MjpzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2Uge1xudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMTgzLVx0X191NjQgc3JjX29mZnNldDtcdC8qIGluIC0gc3RhcnQgb2YgZXh0ZW50IGluIHNvdXJjZSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY5MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE4MzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQW5hbHlzaXMgb2YgaW9jdGxfZmlsZV9kZWR1cGVfcmFuZ2UgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZWAgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgbWVtZHVwX3VzZXJgIHVzYWdlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7cG90ZW50aWFsIGtlcm5lbCBtZW1vcnkgbGVhaz8mIzM0OyBUaGUgcHJvY2VzcyBpczogIGBtZW1kdXBfdXNlcmAgYWxsb2NhdGVzIG1lbW9yeSwgY29waWVzIHVzZXIgc3BhY2UgZGF0YSwgdGhlIGtlcm5lbCBtb2RpZmllcyBzb21lIGZpZWxkcywgYW5kIHRoZW4gYGNvcHlfdG9fdXNlcmAgc2VuZHMgaXQgYmFjay4gIEJ1dCBob2xkIG9uLiAgVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBgbWVtZHVwX3VzZXJgIGNvcGllcyAqZnJvbSogdXNlciBzcGFjZS4gQW55IHVuaW5pdGlhbGl6ZWQgYnl0ZXMgaW4gdGhlIGBzYW1lYCBzdHJ1Y3QgKHBhZGRpbmcsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHByb3ZpZGVkIGJ5IHVzZXIgc3BhY2UpIGFyZSAqYWxyZWFkeSogdXNlci1wcm92aWRlZCBkYXRhLiBJdCYjMzk7cyBqdXN0IGJlaW5nIGNvcGllZCBiYWNrLiBObyBrZXJuZWwgbWVtb3J5IGxlYWsgdGhlcmUuCgpOb3csIGFtIEkgbWlzc2luZyBzb21lIHBhZGRpbmc/IEkgcXVpY2tseSBjaGVja2VkIHRoZSBgZmlsZV9kZWR1cGVfcmFuZ2VfaW5mb2Agc3RydWN0IGFuZCB0aGVuIHRoZSBgZmlsZV9kZWR1cGVfcmFuZ2VgIHN0cnVjdC4gVGhlIHNpemVzIGFkZCB1cCBwZXJmZWN0bHk7IG5vIHBhZGRpbmcuIEV2ZW4gaWYgdGhlcmUgd2FzIHBhZGRpbmcsIGBtZW1kdXBfdXNlcmAgY29waWVzIHRoZSBleGFjdCBzaXplIGdpdmVuIHRvIGl0IGJ5IHRoZSBgc2l6ZSA9IHN0cnVjdF9zaXplKHNhbWUsIGluZm8sIGNvdW50KTtgIGNhbGwsIHNvIG5vIGlzc3VlcyB0aGVyZS4KClRoZSBuZXh0IHRob3VnaHQgaXMgYHNhbWUtJmd0O2ZsYWdzYC4gSXQmIzM5O3MgdXNlZCBpbiBhIGNvbmRpdGlvbmFsIGNoZWNrOiBgaWYgKHNhbWUtJmd0O3Jlc2VydmVkMSB8fCAoc2FtZS0mZ3Q7ZmxhZ3MgJmFtcDsgfkZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykpYC4gIElmIHVzZXIgc3BhY2UgcHJvdmlkZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgZm9yIGBmbGFnc2AsIGl0IG1pZ2h0IGhhdmUgcmFuZG9tIGJpdHMgc2V0LCBidXQgdGhpcyB3b3VsZCBqdXN0IGxlYWQgdG8gYW4gYC1FSU5WQUxgIHJldHVybi4gVGhpcyBpcyBhIHVzZXIgc3BhY2UgYnVnLCBub3QgYSBzZWN1cml0eSBpc3N1ZSAoYW5kIEtNU0FOIHdvdWxkIHBpY2sgaXQgdXApLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgS01TQU4mIzM5O3MgYmVoYXZpb3VyLiBEb2VzIEtNU0FOIGRldGVjdCB1bmluaXRpYWxpemVkIHVzZXIgc3BhY2UgZGF0YT8gTm8sIG5vdCByZWFsbHkuIEtNU0FOIHRyYWNrcyBrZXJuZWwgbWVtb3J5LiBXaGVuIGRhdGEgaXMgY29waWVkIGZyb20gdXNlciBzcGFjZSB0byB0aGUga2VybmVsLCBLTVNBTiBhc3N1bWVzIGl0JiMzOTtzIHZhbGlkLiBIb3dldmVyLCBLTVNBTiBkb2VzIGNoZWNrIGlmIG1lbW9yeSAqdG8qIHVzZXIgc3BhY2UgaXMgdW5pbml0aWFsaXplZCAocG90ZW50aWFsIGluZm8gbGVhaykuIEJ1dCBoZXJlLCBzaW5jZSB0aGUgbWVtb3J5IGlzIGFsbG9jYXRlZCBieSBga21hbGxvY2AgdmlhIGBtZW1kdXBfdXNlcmAsIGBtZW1kdXBfdXNlcmAgZG9lcyBhIGBjb3B5X2Zyb21fdXNlcmAgY2FsbCwgd2hpY2ggJiMzNDt1bnBvaXNvbnMmIzM0OyB0aGUgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIHdpbGwgY29uc2lkZXIgYHNhbWVgIGZ1bGx5IGluaXRpYWxpemVkLgoKVGhlbiBJIGNvbnNpZGVyZWQgb3RoZXIgY2hhbmdlcyBpbiB0aGUgcGF0Y2gsIHNwZWNpZmljYWxseSB0aGUgY29kZSB1cGRhdGluZyBgaW5mby0mZ3Q7Ynl0ZXNfZGVkdXBlZGAuIFRoaXMgc2VjdGlvbiB1c2VzIGBpX2Jsb2Nrc2l6ZShzcmMpYC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW52b2x2ZWQgaGVyZTsgYWxsIHNhZmUuCgpMZXQmIzM5O3MgYXBwbHkgdGhlIEtNU0FOIHJ1bGVzIGFuZCBjaGVjayBpZiB0aGUgcGF0Y2ggc2F0aXNmaWVzIHRoZSBLTVNBTiBjb25kaXRpb25zLgoxLiBgc2FtZWAgaXMgc2VudCB0byB1c2VyIHNwYWNlIHZpYSBgY29weV90b191c2VyYC4gSG93ZXZlciwgaXQmIzM5O3MgYWxsb2NhdGVkIHZpYSBgbWVtZHVwX3VzZXJgLCB3aGljaCBjb3BpZXMgdGhlICplbnRpcmUqIHN0cnVjdHVyZSBmcm9tIHVzZXIgc3BhY2UuIE5vIGtlcm5lbCBtZW1vcnkgaXMgY3JlYXRlZCBhbmQgdW5pbml0aWFsaXplZC4KMi4gVGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gYHNhbWUtJmd0O2ZsYWdzYCwgd2hpY2ggY29tZXMgZnJvbSB1c2VyIHNwYWNlLiBLTVNBTiB0cmVhdHMgdGhpcyBhcyBpbml0aWFsaXplZC4KMy4gTm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLgo0LiBObyBib3VuZHMgb3IgbGVuZ3RoIG1vZGlmaWNhdGlvbnMgdGhhdCBjb3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBkYXRhLgoKV2FpdCwgaXMgaXQgcG9zc2libGUgdGhhdCBgc2l6ZWAgY2FsY3VsYXRlZCBieSBgc3RydWN0X3NpemVgIGlzIGxhcmdlciB0aGFuIHdoYXQgYG1lbWR1cF91c2VyYCBjb3BpZXM/Ck5vLCB0aGUgc2l6ZSBhcmd1bWVudCBpbiBgbWVtZHVwX3VzZXJgICptdXN0KiBiZSB0aGUgc2l6ZSBhcmd1bWVudCBvZiBgY29weV9mcm9tX3VzZXJgIGNhbGwuCgpUaGVyZWZvcmUsIGJlY2F1c2UgYG1lbWR1cF91c2VyYCBjb3BpZXMgZXhhY3RseSBgc2l6ZWAgYnl0ZXMgZnJvbSBgYXJncGAgYnkgdXNpbmcgYGNvcHlfZnJvbV91c2VyYCwgYW5kIGBzaXplYCBpcyBjYWxjdWxhdGVkIGNvcnJlY3RseSwgYHNhbWVgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGF0YSBmcm9tIHVzZXIgc3BhY2UuCgpJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBLTVNBTiBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgXFwqbWVtZHVwX3VzZXJcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zdHJpbmcuaD0xNz1leHRlcm4gY2hhciAqc3RybmR1cF91c2VyKGNvbnN0IGNoYXIgX191c2VyICosIGxvbmcpO1xuaW5jbHVkZS9saW51eC9zdHJpbmcuaDoxODpleHRlcm4gdm9pZCAqbWVtZHVwX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKiwgc2l6ZV90KSBfX3JlYWxsb2Nfc2l6ZSgyKTtcbmluY2x1ZGUvbGludXgvc3RyaW5nLmgtMTktZXh0ZXJuIHZvaWQgKnZtZW1kdXBfdXNlcihjb25zdCB2b2lkIF9fdXNlciAqLCBzaXplX3QpIF9fcmVhbGxvY19zaXplKDIpO1xuLS1cbm1tL3V0aWwuYz0yMDY9c3Vic3lzX2luaXRjYWxsKGluaXRfdXNlcl9idWNrZXRzKTtcbi0tXG5tbS91dGlsLmMtMjE2LSAqL1xubW0vdXRpbC5jOjIxNzp2b2lkICptZW1kdXBfdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLCBzaXplX3QgbGVuKVxubW0vdXRpbC5jLTIxOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT42bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTIwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbWVtZHVwX3VzZXJgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYG1lbWR1cF91c2VyYCBpbiBgbW0vdXRpbC5jYC4gSSYjMzk7bSBzdGFydGluZyBoZXJlIGJlY2F1c2UuLi4gd2VsbCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBJJiMzOTttIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMsIGFuZCB0aGlzIG9uZSYjMzk7cyBnb3QgYSB1c2VyLXNwYWNlIGNvbXBvbmVudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uLCBlc3BlY2lhbGx5IHdoZXJlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgdW50cnVzdGVkIGRhdGEgb3IgcmVzb3VyY2UgY29udGVudGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgdHlwaWNhbCBlcnJvciBoYW5kbGluZyBwYXRoczogaG93IGl0IGRlYWxzIHdpdGggcGFnZSBmYXVsdHMsIGludmFsaWQgdXNlciBwb2ludGVycywgYW5kIHJlc291cmNlIGV4aGF1c3Rpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBlc3BlY2lhbGx5IGlmIGl0JiMzOTtzIG9wZXJhdGluZyBvbiBkYXRhIHRoYXQgY291bGQgY2hhbmdlIGJldHdlZW4gdGhlIHVzZXItc3BhY2UgYW5kIGtlcm5lbC1zcGFjZSBjb3B5LiBUaW1lIHRvIGdldCB0aGUgZGVidWdnZXIgcmVhZHkganVzdCBpbiBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3V0aWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjE3Olx0dm9pZCAqbWVtZHVwX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgc2l6ZV90IGxlbilcbiAyMTg6XHR7XG4gMjE5Olx0XHR2b2lkICpwO1xuIDIyMDpcdFxuIDIyMTpcdFx0cCA9IGttZW1fYnVja2V0c19hbGxvY190cmFja19jYWxsZXIodXNlcl9idWNrZXRzLCBsZW4sIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcbiAyMjI6XHRcdGlmICghcClcbiAyMjM6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gMjI0Olx0XG4gMjI1Olx0XHRpZiAoY29weV9mcm9tX3VzZXIocCwgc3JjLCBsZW4pKSB7XG4gMjI2Olx0XHRcdGtmcmVlKHApO1xuIDIyNzpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTtcbiAyMjg6XHRcdH1cbiAyMjk6XHRcbiAyMzA6XHRcdHJldHVybiBwO1xuIDIzMTpcdH1cbiAyMzI6XHRFWFBPUlRfU1lNQk9MKG1lbWR1cF91c2VyKTtcbiAyMzM6XHRcbiAyMzQ6XHQvKipcbiAyMzU6XHQgKiB2bWVtZHVwX3VzZXIgLSBkdXBsaWNhdGUgbWVtb3J5IHJlZ2lvbiBmcm9tIHVzZXIgc3BhY2VcbiAyMzY6XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAzOAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYGZpbGVfZGVkdXBlX3JhbmdlYCBTdHJ1Y3R1cmUqKgoKT2theSwgc28gYG1lbWR1cF91c2VyYCBkZWZpbml0ZWx5IGFsbG9jYXRlcyBtZW1vcnkgYW5kIGNvcGllcyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlcyBmcm9tIHVzZXIgc3BhY2UuIElmIGBjb3B5X2Zyb21fdXNlcmAgZmFpbHMsIHdoaWNoIHdvdWxkIGJlIGV4cGVjdGVkIGJlaGF2aW9yLCBpdCBmcmVlcyB0aGUgYWxsb2NhdGVkIG1lbW9yeSBhbmQgcmV0dXJucyBgLUVGQVVMVGAuIFRoYXQgbWVhbnMgdGhlIGFsbG9jYXRlZCBtZW1vcnkgaXMgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGF0YSBvcmlnaW5hdGluZyBmcm9tIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUmIzM5O3MgYWJzb2x1dGVseSBubyBrZXJuZWwgbWVtb3J5IGxlYWsgaGVyZSBmcm9tIGEgc2ltcGxlIGFsbG9jYXRpb24vY29weSBwZXJzcGVjdGl2ZS4KCkJ1dCBob2xkIG9uLi4uIEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2ggY29tcGxldGVseS4gV2hhdCBpZiB0aGUga2VybmVsIGRvZXNuJiMzOTt0IGFjdHVhbGx5ICp1cGRhdGUqIHRoZSBgaW5mby0mZ3Q7Ynl0ZXNfZGVkdXBlZGAgZmllbGQ/IElmIHRoYXQgaGFwcGVucywgaXQganVzdCByZXRhaW5zIHdoYXRldmVyIHZhbHVlIHRoZSB1c2VyIGluaXRpYWxseSBwcm92aWRlZCB3aGVuIHRoZSBgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlYCB3YXMgY29waWVkIGZyb20gdXNlciBzcGFjZS4gVGhlbiwgd2hlbiBgY29weV90b191c2VyYCBjb3BpZXMgdGhhdCBmaWVsZCBiYWNrIHRvIHVzZXIgc3BhY2UsIGl0IHdpbGwgZWZmZWN0aXZlbHkgcmV0dXJuIHRoZSB1c2VyJiMzOTtzICpvcmlnaW5hbCogdmFsdWUuIEkgc2VlIG5vdzsgdGhpcywgYWdhaW4sIHdvdWxkbiYjMzk7dCBjb25zdGl0dXRlIGEga2VybmVsIG1lbW9yeSBsZWFrLgoKTm93LCBJIHNob3VsZCBpbnZlc3RpZ2F0ZSBldmVyeSBzaW5nbGUgcGxhY2UgdGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgY3JpdGljYWwuIEkmIzM5O3ZlIGFscmVhZHkgY2hlY2tlZCBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCBhbmQgYGlvY3RsX2ZpbGVfZGVkdXBlX3JhbmdlYC4gV2hhdCBhYm91dCBgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzYD8gVGhlIGNvbW1lbnQgZG9lcyBzYXkgJiMzNDsvKiBmcm9tIHN0cnVjdCBidHJmc19pb2N0bF9maWxlX2V4dGVudF9zYW1lX2FyZ3MgKi8mIzM0Oy4gVGhhdCYjMzk7cyBhIHN0cm9uZyBoaW50ISBMZXQgbWUgZGlnIGludG8gdGhlIGBidHJmc2AgY29kZSB0byBzZWUgaWYgaXQgbWFrZXMgdXNlIG9mIGBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VgLiBUaGlzIGlzIHdoZXJlIHRoZSBwb3RlbnRpYWwgZm9yIGlzc3VlcyBtaWdodCBsaWUsIGFuZCBJJiMzOTttIG5vdCBydWxpbmcgb3V0IHRoYXQgSSBtYXkgaGF2ZSB0byBsb29rIGF0IGFsbCBvZiB0aGUgY2FsbGVycyBvZiB0aGF0IGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidHJmc19pb2N0bF9maWxlX2V4dGVudF9zYW1lX2FyZ3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg9MTY3PXN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZV9pbmZvIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0xODMtXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaDoxODQ6LyogZnJvbSBzdHJ1Y3QgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzICovXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0xODUtc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaD05OT1zdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VfaW5mbyB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMTEyLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6MTEzOi8qIGZyb20gc3RydWN0IGJ0cmZzX2lvY3RsX2ZpbGVfZXh0ZW50X3NhbWVfYXJncyAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMTE0LXN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSB7XG4tLVxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg9MTY3PXN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZV9pbmZvIHtcbi0tXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0xODAtXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaDoxODE6LyogZnJvbSBzdHJ1Y3QgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzICovXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0xODItc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMzYKCQkJCQkJCW91dHB1dDogMjE2CgkJCQkJCQl0aG91Z2h0czogMjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJ0cmZzIERlZHVwbGljYXRpb24gQ29kZSBDaGFuZ2UqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCBsb29rcyBsaWtlIGBidHJmc19pb2N0bF9maWxlX2V4dGVudF9zYW1lX2FyZ3NgIGlzIGp1c3QgdGhlIGxlZ2FjeSBuYW1lIGZvciBgZmlsZV9kZWR1cGVfcmFuZ2VgLiBNYWtlcyBzZW5zZSwgbm8gY29uZmxpY3RpbmcgdXNlcyB0aGVyZS4KCk5vdywgbGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gSSB3YXMgYSBsaXR0bGUgY29uY2VybmVkIGFib3V0IGBpbmZvLSZndDtieXRlc19kZWR1cGVkID0gbWluX3QodTY0LCBzdGVwLCBsZW4pO2AuIEJ1dCBgc3RlcGAgaXMgZGVyaXZlZCBmcm9tIGBpX2Jsb2Nrc2l6ZShzcmMpYCwgd2hpY2ggaXMgYSBgdTY0YCB0byBiZWdpbiB3aXRoIChvciBwcm9tb3RlZCB0byBvbmUpLiBgbGVuYCBpcyBhbHNvIGEgYHU2NGAuIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgdGhlcmUuIEl0JiMzOTtzIHNhZmUuCgpXaGF0IGFib3V0IHRoYXQgYHNhbWUtJmd0O2ZsYWdzICZhbXA7IH5GSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgIGNoZWNrPyBJZiBgc2FtZS0mZ3Q7ZmxhZ3NgIGlzbiYjMzk7dCBpbml0aWFsaXplZCBvbiB0aGUgdXNlciBzcGFjZSBzaWRlLCB3ZSBjb3VsZCBlbmQgdXAgd2l0aCBzb21lIHJhbmRvbSBiaXRzLCB0cmlnZ2VyaW5nIGFuIGAtRUlOVkFMYCwgd2hpY2ggaXMgZmluZS4gSXQgd291bGQganVzdCBjb3JyZWN0bHkgZmFpbCBpZiBpdCYjMzk7cyBub3Qgc2V0LgoKR2l2ZW4gYWxsIG9mIHRoaXMsIHRoaXMgcGF0Y2ggaXNuJiMzOTt0IGludHJvZHVjaW5nIGFueSBuZXcgcmlza3MgaW4gdGVybXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCBpdCBkb2VzIGlzIGFkZCB0aGUgcHJvZ3Jlc3MgcmVwb3J0aW5nIGZsYWcgYW5kIHVwZGF0ZXMgdGhlIGRlZHVwbGljYXRlZCBieXRlcy4gV2hpbGUgS0FTQU4gaXMgdGhlcmUgdG8gY2F0Y2ggbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIEkgZG9uJiMzOTt0IHNlZSBhbnkgcmlzayBvZiB0aG9zZSBpc3N1ZXMgaGVyZSBlaXRoZXIuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIHdpdGggdGhpcyByYXRpb25hbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCBmdW5jdGlvbiBhbmQgdGhlIGBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VgIHVzZXItc3BhY2UgQVBJIHRvIGFkZCBhIG5ldyBmbGFnIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgLiBUaGUgc3RydWN0dXJlIGBzYW1lYCBpcyBhbGxvY2F0ZWQgYW5kIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGF0YSBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBgbWVtZHVwX3VzZXJgIGluIGBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZWAuIEFueSBmaWVsZHMgbm90IGV4cGxpY2l0bHkgdXBkYXRlZCBieSB0aGUga2VybmVsIHdpbGwgc2ltcGx5IHJldGFpbiB0aGUgdmFsdWVzIHByb3ZpZGVkIGJ5IHVzZXIgc3BhY2Ugd2hlbiBjb3BpZWQgYmFjayB2aWEgYGNvcHlfdG9fdXNlcmAuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgbm9yIGRvZXMgaXQgbW9kaWZ5IGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIGluIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCBmdW5jdGlvbiBhbmQgdGhlIGBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VgIHVzZXItc3BhY2UgQVBJIHRvIGFkZCBhIG5ldyBmbGFnIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgLiBUaGUgc3RydWN0dXJlIGBzYW1lYCBpcyBhbGxvY2F0ZWQgYW5kIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGF0YSBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBgbWVtZHVwX3VzZXJgIGluIGBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZWAuIEFueSBmaWVsZHMgbm90IGV4cGxpY2l0bHkgdXBkYXRlZCBieSB0aGUga2VybmVsIHdpbGwgc2ltcGx5IHJldGFpbiB0aGUgdmFsdWVzIHByb3ZpZGVkIGJ5IHVzZXIgc3BhY2Ugd2hlbiBjb3BpZWQgYmFjayB2aWEgYGNvcHlfdG9fdXNlcmAuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgbm9yIGRvZXMgaXQgbW9kaWZ5IGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIGluIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MzY6MDIuNTk3Mjk0MjMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAxNTkwMjcyODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19kZWR1cGVfZmlsZV9yYW5nZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgIGZ1bmN0aW9uIGFuZCB0aGUgYHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZWAgdXNlci1zcGFjZSBBUEkgdG8gYWRkIGEgbmV3IGZsYWcgYEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTU2AuIFRoZSBzdHJ1Y3R1cmUgYHNhbWVgIGlzIGFsbG9jYXRlZCBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBkYXRhIGNvcGllZCBmcm9tIHVzZXIgc3BhY2UgdmlhIGBtZW1kdXBfdXNlcmAgaW4gYGlvY3RsX2ZpbGVfZGVkdXBlX3JhbmdlYC4gQW55IGZpZWxkcyBub3QgZXhwbGljaXRseSB1cGRhdGVkIGJ5IHRoZSBrZXJuZWwgd2lsbCBzaW1wbHkgcmV0YWluIHRoZSB2YWx1ZXMgcHJvdmlkZWQgYnkgdXNlciBzcGFjZSB3aGVuIGNvcGllZCBiYWNrIHZpYSBgY29weV90b191c2VyYC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBub3IgZG9lcyBpdCBtb2RpZnkgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgaW4gdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgVUFQSSBmbGFnIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgIHRvIHRoZSBgRklERURVUEVSQU5HRWAgaW9jdGwsIG1vZGlmeWluZyB0aGUgY29yZSBWRlMgZGVkdXBsaWNhdGlvbiBsb2dpYyBpbiBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjM2OjAyLjU5NzMwMDEyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA2NzQ2NDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmE0ODRiM2JmN2UwNzU2M2UxODQzNDBmYzJlYzZjZTI3YjI1NzM4YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxMjozNjowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9yZW1hcF9yYW5nZS5jIGIvZnMvcmVtYXBfcmFuZ2UuY1xcbmluZGV4IDI2YWZiYmJmYjEwYzIuLmFjODhhODFjMTI3MzkgMTAwNjQ0XFxuLS0tIGEvZnMvcmVtYXBfcmFuZ2UuY1xcbisrKyBiL2ZzL3JlbWFwX3JhbmdlLmNcXG5AQCAtNTAzLDcgKzUwMyw3IEBAIGludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSlcXG4gXFx0aWYgKCEoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfUkVBRCkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0aWYgKHNhbWUtXFx1MDAzZXJlc2VydmVkMSB8fCBzYW1lLVxcdTAwM2VyZXNlcnZlZDIpXFxuK1xcdGlmIChzYW1lLVxcdTAwM2VyZXNlcnZlZDEgfHwgKHNhbWUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgfkZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0b2ZmID0gc2FtZS1cXHUwMDNlc3JjX29mZnNldDtcXG5AQCAtNTUxLDEyICs1NTEsMjkgQEAgaW50IHZmc19kZWR1cGVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICpzYW1lKVxcbiBcXHRcXHRkZWR1cGVkID0gdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShmaWxlLCBvZmYsIGZkX2ZpbGUoZHN0X2ZkKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGluZm8tXFx1MDAzZWRlc3Rfb2Zmc2V0LCBsZW4sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBSRU1BUF9GSUxFX0NBTl9TSE9SVEVOKTtcXG4tXFx0XFx0aWYgKGRlZHVwZWQgPT0gLUVCQURFKVxcbitcXHRcXHRpZiAoZGVkdXBlZCA9PSAtRUJBREUpIHtcXG4gXFx0XFx0XFx0aW5mby1cXHUwMDNlc3RhdHVzID0gRklMRV9ERURVUEVfUkFOR0VfRElGRkVSUztcXG4tXFx0XFx0ZWxzZSBpZiAoZGVkdXBlZCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGlmIChzYW1lLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykge1xcbitcXHRcXHRcXHRcXHR1NjQgc3RlcCA9IGlfYmxvY2tzaXplKHNyYyk7XFxuK1xcbitcXHRcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHRcXHQgKiBTdGFja2VkIGZpbGVzeXN0ZW1zIChlLmcuIG92ZXJsYXlmcykgY2FuXFxuK1xcdFxcdFxcdFxcdCAqIHJlcG9ydCBhIGRlZ2VuZXJhdGUgYmxvY2sgc2l6ZSBoZXJlOyBhXFxuK1xcdFxcdFxcdFxcdCAqIG9uZS1ieXRlIHN0ZXAgd291bGQgb25seSBtaXNhbGlnbiB0aGVcXG4rXFx0XFx0XFx0XFx0ICogbmV4dCBjYWxsLCBzbyBhZHZhbmNlIHBhc3QgdGhlIHdob2xlXFxuK1xcdFxcdFxcdFxcdCAqIHJlcXVlc3QgaW5zdGVhZC5cXG4rXFx0XFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdFxcdGlmIChzdGVwIFxcdTAwM2M9IDEpXFxuK1xcdFxcdFxcdFxcdFxcdHN0ZXAgPSBsZW47XFxuK1xcdFxcdFxcdFxcdGluZm8tXFx1MDAzZWJ5dGVzX2RlZHVwZWQgPSBtaW5fdCh1NjQsIHN0ZXAsIGxlbik7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fSBlbHNlIGlmIChkZWR1cGVkIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRpbmZvLVxcdTAwM2VzdGF0dXMgPSBkZWR1cGVkO1xcbi1cXHRcXHRlbHNlXFxuK1xcdFxcdH0gZWxzZSBpZiAoc2FtZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1MpIHtcXG4rXFx0XFx0XFx0aW5mby1cXHUwMDNlYnl0ZXNfZGVkdXBlZCA9IGRlZHVwZWQ7XFxuK1xcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGluZm8tXFx1MDAzZWJ5dGVzX2RlZHVwZWQgPSBsZW47XFxuK1xcdFxcdH1cXG4gXFxuIG5leHRfbG9vcDpcXG4gXFx0XFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oXFxuaW5kZXggYmQ4NzI2MmYyZTM0OS4uNDcxZjY5OGJlYWE5MyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oXFxuQEAgLTE3OCwxMyArMTc4LDE2IEBAIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZV9pbmZvIHtcXG4gXFx0X191MzIgcmVzZXJ2ZWQ7XFx0XFx0LyogbXVzdCBiZSB6ZXJvICovXFxuIH07XFxuIFxcbisvKiBmbGFncyBmb3Igc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICovXFxuKyNkZWZpbmUgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTICgxVSBcXHUwMDNjXFx1MDAzYyAwKVxcbitcXG4gLyogZnJvbSBzdHJ1Y3QgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzICovXFxuIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSB7XFxuIFxcdF9fdTY0IHNyY19vZmZzZXQ7XFx0LyogaW4gLSBzdGFydCBvZiBleHRlbnQgaW4gc291cmNlICovXFxuIFxcdF9fdTY0IHNyY19sZW5ndGg7XFx0LyogaW4gLSBsZW5ndGggb2YgZXh0ZW50ICovXFxuIFxcdF9fdTE2IGRlc3RfY291bnQ7XFx0LyogaW4gLSB0b3RhbCBlbGVtZW50cyBpbiBpbmZvIGFycmF5ICovXFxuIFxcdF9fdTE2IHJlc2VydmVkMTtcXHQvKiBtdXN0IGJlIHplcm8gKi9cXG4tXFx0X191MzIgcmVzZXJ2ZWQyO1xcdC8qIG11c3QgYmUgemVybyAqL1xcbitcXHRfX3UzMiBmbGFncztcXHRcXHQvKiBpbiAtIEZJTEVfREVEVVBFX1JBTkdFXyogZmxhZ3MgKi9cXG4gXFx0c3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlX2luZm8gaW5mb1tdO1xcbiB9O1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MzY6MDMuMDA0NzM1NzkxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzMwNzE0NjU2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX2RlZHVwZV9maWxlX3JhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBVQVBJIGZsYWcgYEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTU2AgdG8gdGhlIGBGSURFRFVQRVJBTkdFYCBpb2N0bCwgbW9kaWZ5aW5nIHRoZSBjb3JlIFZGUyBkZWR1cGxpY2F0aW9uIGxvZ2ljIGluIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmE0ODRiM2JmN2UwNzU2M2UxODQzNDBmYzJlYzZjZTI3YjI1NzM4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDEyOjM2OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvcmVtYXBfcmFuZ2UuYyBiL2ZzL3JlbWFwX3JhbmdlLmNcbmluZGV4IDI2YWZiYmJmYjEwYzIuLmFjODhhODFjMTI3MzkgMTAwNjQ0XG4tLS0gYS9mcy9yZW1hcF9yYW5nZS5jXG4rKysgYi9mcy9yZW1hcF9yYW5nZS5jXG5AQCAtNTAzLDcgKzUwMyw3IEBAIGludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSlcbiBcdGlmICghKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9SRUFEKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoc2FtZS1cdTAwM2VyZXNlcnZlZDEgfHwgc2FtZS1cdTAwM2VyZXNlcnZlZDIpXG4rXHRpZiAoc2FtZS1cdTAwM2VyZXNlcnZlZDEgfHwgKHNhbWUtXHUwMDNlZmxhZ3MgXHUwMDI2IH5GSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1MpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdG9mZiA9IHNhbWUtXHUwMDNlc3JjX29mZnNldDtcbkBAIC01NTEsMTIgKzU1MSwyOSBAQCBpbnQgdmZzX2RlZHVwZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKnNhbWUpXG4gXHRcdGRlZHVwZWQgPSB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKGZpbGUsIG9mZiwgZmRfZmlsZShkc3RfZmQpLFxuIFx0XHRcdFx0XHRcdCAgICBpbmZvLVx1MDAzZWRlc3Rfb2Zmc2V0LCBsZW4sXG4gXHRcdFx0XHRcdFx0ICAgIFJFTUFQX0ZJTEVfQ0FOX1NIT1JURU4pO1xuLVx0XHRpZiAoZGVkdXBlZCA9PSAtRUJBREUpXG4rXHRcdGlmIChkZWR1cGVkID09IC1FQkFERSkge1xuIFx0XHRcdGluZm8tXHUwMDNlc3RhdHVzID0gRklMRV9ERURVUEVfUkFOR0VfRElGRkVSUztcbi1cdFx0ZWxzZSBpZiAoZGVkdXBlZCBcdTAwM2MgMClcbitcdFx0XHRpZiAoc2FtZS1cdTAwM2VmbGFncyBcdTAwMjYgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTKSB7XG4rXHRcdFx0XHR1NjQgc3RlcCA9IGlfYmxvY2tzaXplKHNyYyk7XG4rXG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogU3RhY2tlZCBmaWxlc3lzdGVtcyAoZS5nLiBvdmVybGF5ZnMpIGNhblxuK1x0XHRcdFx0ICogcmVwb3J0IGEgZGVnZW5lcmF0ZSBibG9jayBzaXplIGhlcmU7IGFcbitcdFx0XHRcdCAqIG9uZS1ieXRlIHN0ZXAgd291bGQgb25seSBtaXNhbGlnbiB0aGVcbitcdFx0XHRcdCAqIG5leHQgY2FsbCwgc28gYWR2YW5jZSBwYXN0IHRoZSB3aG9sZVxuK1x0XHRcdFx0ICogcmVxdWVzdCBpbnN0ZWFkLlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRpZiAoc3RlcCBcdTAwM2M9IDEpXG4rXHRcdFx0XHRcdHN0ZXAgPSBsZW47XG4rXHRcdFx0XHRpbmZvLVx1MDAzZWJ5dGVzX2RlZHVwZWQgPSBtaW5fdCh1NjQsIHN0ZXAsIGxlbik7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2UgaWYgKGRlZHVwZWQgXHUwMDNjIDApIHtcbiBcdFx0XHRpbmZvLVx1MDAzZXN0YXR1cyA9IGRlZHVwZWQ7XG4tXHRcdGVsc2VcbitcdFx0fSBlbHNlIGlmIChzYW1lLVx1MDAzZWZsYWdzIFx1MDAyNiBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1MpIHtcbitcdFx0XHRpbmZvLVx1MDAzZWJ5dGVzX2RlZHVwZWQgPSBkZWR1cGVkO1xuK1x0XHR9IGVsc2Uge1xuIFx0XHRcdGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZCA9IGxlbjtcbitcdFx0fVxuIFxuIG5leHRfbG9vcDpcbiBcdFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmhcbmluZGV4IGJkODcyNjJmMmUzNDkuLjQ3MWY2OThiZWFhOTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmhcbkBAIC0xNzgsMTMgKzE3OCwxNiBAQCBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VfaW5mbyB7XG4gXHRfX3UzMiByZXNlcnZlZDtcdFx0LyogbXVzdCBiZSB6ZXJvICovXG4gfTtcbiBcbisvKiBmbGFncyBmb3Igc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICovXG4rI2RlZmluZSBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1MgKDFVIFx1MDAzY1x1MDAzYyAwKVxuK1xuIC8qIGZyb20gc3RydWN0IGJ0cmZzX2lvY3RsX2ZpbGVfZXh0ZW50X3NhbWVfYXJncyAqL1xuIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSB7XG4gXHRfX3U2NCBzcmNfb2Zmc2V0O1x0LyogaW4gLSBzdGFydCBvZiBleHRlbnQgaW4gc291cmNlICovXG4gXHRfX3U2NCBzcmNfbGVuZ3RoO1x0LyogaW4gLSBsZW5ndGggb2YgZXh0ZW50ICovXG4gXHRfX3UxNiBkZXN0X2NvdW50O1x0LyogaW4gLSB0b3RhbCBlbGVtZW50cyBpbiBpbmZvIGFycmF5ICovXG4gXHRfX3UxNiByZXNlcnZlZDE7XHQvKiBtdXN0IGJlIHplcm8gKi9cbi1cdF9fdTMyIHJlc2VydmVkMjtcdC8qIG11c3QgYmUgemVybyAqL1xuK1x0X191MzIgZmxhZ3M7XHRcdC8qIGluIC0gRklMRV9ERURVUEVfUkFOR0VfKiBmbGFncyAqL1xuIFx0c3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlX2luZm8gaW5mb1tdO1xuIH07XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozNjowMy4wMDQ3Mzc0ODFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjY5NTAzMzQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERlZHVwbGljYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZnMvcmVtYXBfcmFuZ2UuY2AgYW5kIGBpbmNsdWRlL3VhcGkvbGludXgvZnMuaGAuIEl0IHNlZW1zIHdlJ3JlIG1vZGlmeWluZyBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCB0byBpbmNvcnBvcmF0ZSBhIG5ldyBmZWF0dXJlLiBUaGV5J3JlIGFkZGluZyBzdXBwb3J0IGZvciB0aGlzIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgIGZsYWcgaW4gdGhlIGBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOyByZXBsYWNpbmcgYHNhbWUtXHUwMDNlcmVzZXJ2ZWQyYCB3aXRoIGBzYW1lLVx1MDAzZWZsYWdzYCBpcyBhIHR5cGljYWwgcmVmYWN0b3IgdG8gbWFrZSByb29tLCBhbmQgbm93IHdlIGNoZWNrIGZvciB0aGlzIHByb2dyZXNzIHJlcG9ydGluZyBmbGFnLlxuXG5UaGUgY29yZSBvZiB0aGUgbG9naWMgaXMgdGhpczogaWYgYGRlZHVwZWRgIHJldHVybnMgYC1FQkFERWAgKHdoaWNoIEkga25vdyBzaWduaWZpZXMgYW4gZXJyb3IpIGFuZCB0aGF0IGZsYWcgaXMgc2V0LCB3ZSdyZSBub3cgc2V0dGluZyBgaW5mby1cdTAwM2VieXRlc19kZWR1cGVkYCB0byB0aGUgbWluaW11bSBvZiBzb21lIGBzdGVwYCB2YWx1ZSBhbmQgdGhlIHJlcXVlc3RlZCBsZW5ndGguIFRoZSBgc3RlcGAgbG9va3MgbGlrZSBpdCdzIHRoZSBibG9jayBzaXplIG9mIHRoZSBzb3VyY2UgZmlsZSwgd2hpY2ggbWFrZXMgc2Vuc2UuIFdlIHdhbnQgdG8gdXBkYXRlIHByb2dyZXNzLCBhc3N1bWluZyBgRUJBREVgIGluZGljYXRlcyBhbiBpbmNvbXBsZXRlIG9wZXJhdGlvbiwgYW5kIHByb3ZpZGUgaW5jcmVtZW50YWwgZmVlZGJhY2suIElmIHRoZSBgZGVkdXBlZGAgdmFsdWUgaXMgbm9uLW5lZ2F0aXZlIGFuZCB0aGUgZmxhZyBpcyBzZXQsIGl0IHVwZGF0ZXMgYGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZGAgZGlyZWN0bHkuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgaW1wbGVtZW50YXRpb24gdG8gcmVwb3J0IHByb2dyZXNzIGJhY2sgdG8gdGhlIHVzZXIgc3BhY2UuXG5cblNpbmNlIHRoaXMgdG91Y2hlcyBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCwgSSBpbW1lZGlhdGVseSBrbm93IHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgYGlvY3RsKEZJREVEVVBFUkFOR0UpYCBzeXN0ZW0gY2FsbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3QgY29uZmxpY3Qgd2l0aCBhbnkgY29uZmlndXJhdGlvbnMuIEknbSBnb2luZyB0byBjaGVjayBpZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSSdsbCBjaGVjayBgZnMvcmVtYXBfcmFuZ2UuY2AgZGlyZWN0bHksIGFuZCB0aGVuIGp1bXAgdG8gYGZzL01ha2VmaWxlYCB0byBzZWUgaWYgYHJlbWFwX3JhbmdlLmNgIGl0c2VsZiBkZXBlbmRzIG9uIGFueSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb25zLiBJJ20gbG9va2luZyBmb3IgYSBgb2JqLSQoQ09ORklHX1NPTUVUSElORykgKz0gcmVtYXBfcmFuZ2Uub2AgdHlwZSBvZiBkaXJlY3RpdmUuIElmIHRoZXJlJ3MgYSBjb25maWcgZGVwZW5kZW5jeSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2gga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjb3VsZCBhZmZlY3QgdGhpcy4gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2gga2VybmVsIGNvbmZpZ3VyYXRpb25zIG11c3QgYmUgc2V0IHRvIGNvcnJlY3RseSB1dGlsaXplIHRoZSBmZWF0dXJlIHRvIGFwcHJvcHJpYXRlbHkgYXNzZXNzIHRoZSBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozNjoyNS42OTk3NzM2MTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcxMTI2ODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlbWFwX3JhbmdlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvTWFrZWZpbGU9MTA9b2JqLXkgOj1cXHRvcGVuLm8gcmVhZF93cml0ZS5vIGZpbGVfdGFibGUubyBzdXBlci5vIFxcXFxcXG4tLVxcbmZzL01ha2VmaWxlLTE3LVxcdFxcdGZzX2RpcmVudC5vIGZzX2NvbnRleHQubyBmc19wYXJzZXIubyBmc29wZW4ubyBpbml0Lm8gXFxcXFxcbmZzL01ha2VmaWxlOjE4OlxcdFxcdGtlcm5lbF9yZWFkX2ZpbGUubyBtbnRfaWRtYXBwaW5nLm8gcmVtYXBfcmFuZ2UubyBwaWRmcy5vIFxcXFxcXG5mcy9NYWtlZmlsZS0xOS1cXHRcXHRmaWxlX2F0dHIubyBmc2Vycm9yLm8gbnVsbGZzLm8gZmFpbGZzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MzY6MjYuMDcwOTA5NzYzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwNTczNDIxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCBGdW5jdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgLiBJdCdzIGRlZmluaXRlbHkgY29tcGlsZWQgaW47IHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggc29tZSBkeW5hbWljYWxseSBsb2FkZWQgbW9kdWxlIGhlcmUsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LiBGaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgcXVpY2tseSB2ZXJpZnkgaWYgdGhpcyBmdW5jdGlvbiwgdGhpcyBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCwgaXMgZWl0aGVyIHN0YXRpYyBvciBleHBvcnRlZC4gVGhhdCdsbCBpbmZvcm0gbXkgZnV6emluZyBzdHJhdGVneS4gSWYgaXQncyBzdGF0aWMsIHRoZW4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGNhbGwgaXQuIEl0IGFsc28gZGV0ZXJtaW5lcyBpZiB0aGlzIGNhbGwgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGJlZ2luIGZ1enppbmcsIG9yIGlmIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGViYXNlIHRvIGZ1enogaXQgY29ycmVjdGx5LiBJIG5lZWQgdG8ga25vdyBob3cgYWNjZXNzaWJsZSBpdCBpcyBiZWZvcmUgSSBjYW4gZGVjaWRlIHRoZSBiZXN0IHdheSB0byBhcHByb2FjaCB0YXJnZXRpbmcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NTYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozNjoyOS41NzY2NDYyNTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzMjU5NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdmZzX2RlZHVwZV9maWxlX3JhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3JlbWFwX3JhbmdlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcmVtYXBfcmFuZ2UuYz00MzI9bG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmMtNDg5LX1cXG5mcy9yZW1hcF9yYW5nZS5jOjQ5MDpFWFBPUlRfU1lNQk9MKHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUpO1xcbmZzL3JlbWFwX3JhbmdlLmMtNDkxLVxcbmZzL3JlbWFwX3JhbmdlLmM9NDkyPWludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSlcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmMtNTgzLX1cXG5mcy9yZW1hcF9yYW5nZS5jOjU4NDpFWFBPUlRfU1lNQk9MKHZmc19kZWR1cGVfZmlsZV9yYW5nZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjM2OjI5LjYyMTk3NzcwNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NTQxOTQ1NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgLCB0aGF0J3MgYSBnb29kIGluaXRpYWwgZm9jdXMuIExldCBtZSBzZWUuLi4gQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdG91Y2hlZCBoZXJlPyBOb3BlLCBpdCdzIGp1c3QgdGhpcyBvbmUuIEFoLCB0aGUgcGF0Y2ggaXMgaW4gYGZzL3JlbWFwX3JhbmdlLmNgLCB3aGljaCBpcyByaWdodCBpbiB0aGUgY29yZSBWRlMsIHNvIHRoYXQncyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBpdCBpbnRyb2R1Y2VzIGEgbmV3IFVBUEkgZmxhZywgYEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTU2AuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmssIFwiV29ydGggZnV6emluZyFcIiBObyBzcGVjaWZpYyBrZXJuZWwgY29uZmlncyBzZWVtIHRvIGJlIHJlcXVpcmVkIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHksIHNpbmNlIGl0J3MgY29yZSBWRlMsIHdoaWNoIGlzIGV2ZW4gYmV0dGVyLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgcGF0Y2ggaXRzZWxmLi4uIEFoLCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl0IGxvb2tzIGxpa2UgdGhleSBhcmUganVzdCBjaGVja2luZyB0aGUgZmxhZ3MgZmllbGQgaW4gdGhlIHNhbWUgc3RydWN0IGBmaWxlX2RlZHVwZV9yYW5nZWAgdG8gc2VlIGlmIHRoZSBuZXcgYEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTU2AgaXMgc2V0LiBTaW1wbGUgY2hhbmdlLCBidXQgc2lnbmlmaWNhbnQuXG5cblNvLCBzdW1taW5nIGl0IHVwOiBUaGUgY29yZSBmdW5jdGlvbiBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCBpcyBtb2RpZmllZCwgYWRkaW5nIGEgVUFQSSBmbGFnLCBhbmQgdGhpcyBzaG91bGQgYmUgZnV6emVkLCBnaXZlbiBpdHMgcG90ZW50aWFsIGZvciB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGFuZCB0aGUgY2hhbmdlIGluIFZGUyBsb2dpYy4gSSdtIGdvaW5nIHRvIGFkZCB0aGF0IGZ1bmN0aW9uIHRvIG15IEZvY3VzU3ltYm9scyBsaXN0LCBzZXQgXCJXb3J0aEZ1enppbmdcIiB0byB0cnVlLCBhbmQgbm90ZSB0aGF0IHRoZSBwYXRjaCBhZGRzIHRoZSBgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTYCBmbGFnLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTM0LCJPdXRwdXRUb2tlbnMiOjExNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozNjozNi4wNzYxNzQ4MjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX2RlZHVwZV9maWxlX3JhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBVQVBJIGZsYWcgYEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTU2AgdG8gdGhlIGBGSURFRFVQRVJBTkdFYCBpb2N0bCwgbW9kaWZ5aW5nIHRoZSBjb3JlIFZGUyBkZWR1cGxpY2F0aW9uIGxvZ2ljIGluIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IFVBUEkgZmxhZyBgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTYCB0byB0aGUgYEZJREVEVVBFUkFOR0VgIGlvY3RsLCBtb2RpZnlpbmcgdGhlIGNvcmUgVkZTIGRlZHVwbGljYXRpb24gbG9naWMgaW4gYHZmc19kZWR1cGVfZmlsZV9yYW5nZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozNjozNi4wNzYyMDMxNzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY4MTExMzUxMTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MzY6MzYuMDc2NjM4NzIxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg2ODExMDkxMDQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgIGZ1bmN0aW9uIGFuZCB0aGUgYHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZWAgdXNlci1zcGFjZSBBUEkgdG8gYWRkIGEgbmV3IGZsYWcgYEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTU2AuIFRoZSBzdHJ1Y3R1cmUgYHNhbWVgIGlzIGFsbG9jYXRlZCBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBkYXRhIGNvcGllZCBmcm9tIHVzZXIgc3BhY2UgdmlhIGBtZW1kdXBfdXNlcmAgaW4gYGlvY3RsX2ZpbGVfZGVkdXBlX3JhbmdlYC4gQW55IGZpZWxkcyBub3QgZXhwbGljaXRseSB1cGRhdGVkIGJ5IHRoZSBrZXJuZWwgd2lsbCBzaW1wbHkgcmV0YWluIHRoZSB2YWx1ZXMgcHJvdmlkZWQgYnkgdXNlciBzcGFjZSB3aGVuIGNvcGllZCBiYWNrIHZpYSBgY29weV90b191c2VyYC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBub3IgZG9lcyBpdCBtb2RpZnkgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgaW4gdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZhNDg0YjNiZjdlMDc1NjNlMTg0MzQwZmMyZWM2Y2UyN2IyNTczOGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxMjozNjowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3JlbWFwX3JhbmdlLmMgYi9mcy9yZW1hcF9yYW5nZS5jXG5pbmRleCAyNmFmYmJiZmIxMGMyLi5hYzg4YTgxYzEyNzM5IDEwMDY0NFxuLS0tIGEvZnMvcmVtYXBfcmFuZ2UuY1xuKysrIGIvZnMvcmVtYXBfcmFuZ2UuY1xuQEAgLTUwMyw3ICs1MDMsNyBAQCBpbnQgdmZzX2RlZHVwZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKnNhbWUpXG4gXHRpZiAoIShmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfUkVBRCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKHNhbWUtXHUwMDNlcmVzZXJ2ZWQxIHx8IHNhbWUtXHUwMDNlcmVzZXJ2ZWQyKVxuK1x0aWYgKHNhbWUtXHUwMDNlcmVzZXJ2ZWQxIHx8IChzYW1lLVx1MDAzZWZsYWdzIFx1MDAyNiB+RklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRvZmYgPSBzYW1lLVx1MDAzZXNyY19vZmZzZXQ7XG5AQCAtNTUxLDEyICs1NTEsMjkgQEAgaW50IHZmc19kZWR1cGVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICpzYW1lKVxuIFx0XHRkZWR1cGVkID0gdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShmaWxlLCBvZmYsIGZkX2ZpbGUoZHN0X2ZkKSxcbiBcdFx0XHRcdFx0XHQgICAgaW5mby1cdTAwM2VkZXN0X29mZnNldCwgbGVuLFxuIFx0XHRcdFx0XHRcdCAgICBSRU1BUF9GSUxFX0NBTl9TSE9SVEVOKTtcbi1cdFx0aWYgKGRlZHVwZWQgPT0gLUVCQURFKVxuK1x0XHRpZiAoZGVkdXBlZCA9PSAtRUJBREUpIHtcbiBcdFx0XHRpbmZvLVx1MDAzZXN0YXR1cyA9IEZJTEVfREVEVVBFX1JBTkdFX0RJRkZFUlM7XG4tXHRcdGVsc2UgaWYgKGRlZHVwZWQgXHUwMDNjIDApXG4rXHRcdFx0aWYgKHNhbWUtXHUwMDNlZmxhZ3MgXHUwMDI2IEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykge1xuK1x0XHRcdFx0dTY0IHN0ZXAgPSBpX2Jsb2Nrc2l6ZShzcmMpO1xuK1xuK1x0XHRcdFx0LypcbitcdFx0XHRcdCAqIFN0YWNrZWQgZmlsZXN5c3RlbXMgKGUuZy4gb3ZlcmxheWZzKSBjYW5cbitcdFx0XHRcdCAqIHJlcG9ydCBhIGRlZ2VuZXJhdGUgYmxvY2sgc2l6ZSBoZXJlOyBhXG4rXHRcdFx0XHQgKiBvbmUtYnl0ZSBzdGVwIHdvdWxkIG9ubHkgbWlzYWxpZ24gdGhlXG4rXHRcdFx0XHQgKiBuZXh0IGNhbGwsIHNvIGFkdmFuY2UgcGFzdCB0aGUgd2hvbGVcbitcdFx0XHRcdCAqIHJlcXVlc3QgaW5zdGVhZC5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0aWYgKHN0ZXAgXHUwMDNjPSAxKVxuK1x0XHRcdFx0XHRzdGVwID0gbGVuO1xuK1x0XHRcdFx0aW5mby1cdTAwM2VieXRlc19kZWR1cGVkID0gbWluX3QodTY0LCBzdGVwLCBsZW4pO1xuK1x0XHRcdH1cbitcdFx0fSBlbHNlIGlmIChkZWR1cGVkIFx1MDAzYyAwKSB7XG4gXHRcdFx0aW5mby1cdTAwM2VzdGF0dXMgPSBkZWR1cGVkO1xuLVx0XHRlbHNlXG4rXHRcdH0gZWxzZSBpZiAoc2FtZS1cdTAwM2VmbGFncyBcdTAwMjYgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTKSB7XG4rXHRcdFx0aW5mby1cdTAwM2VieXRlc19kZWR1cGVkID0gZGVkdXBlZDtcbitcdFx0fSBlbHNlIHtcbiBcdFx0XHRpbmZvLVx1MDAzZWJ5dGVzX2RlZHVwZWQgPSBsZW47XG4rXHRcdH1cbiBcbiBuZXh0X2xvb3A6XG4gXHRcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oXG5pbmRleCBiZDg3MjYyZjJlMzQ5Li40NzFmNjk4YmVhYTkzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oXG5AQCAtMTc4LDEzICsxNzgsMTYgQEAgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlX2luZm8ge1xuIFx0X191MzIgcmVzZXJ2ZWQ7XHRcdC8qIG11c3QgYmUgemVybyAqL1xuIH07XG4gXG4rLyogZmxhZ3MgZm9yIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqL1xuKyNkZWZpbmUgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTICgxVSBcdTAwM2NcdTAwM2MgMClcbitcbiAvKiBmcm9tIHN0cnVjdCBidHJmc19pb2N0bF9maWxlX2V4dGVudF9zYW1lX2FyZ3MgKi9cbiBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2Uge1xuIFx0X191NjQgc3JjX29mZnNldDtcdC8qIGluIC0gc3RhcnQgb2YgZXh0ZW50IGluIHNvdXJjZSAqL1xuIFx0X191NjQgc3JjX2xlbmd0aDtcdC8qIGluIC0gbGVuZ3RoIG9mIGV4dGVudCAqL1xuIFx0X191MTYgZGVzdF9jb3VudDtcdC8qIGluIC0gdG90YWwgZWxlbWVudHMgaW4gaW5mbyBhcnJheSAqL1xuIFx0X191MTYgcmVzZXJ2ZWQxO1x0LyogbXVzdCBiZSB6ZXJvICovXG4tXHRfX3UzMiByZXNlcnZlZDI7XHQvKiBtdXN0IGJlIHplcm8gKi9cbitcdF9fdTMyIGZsYWdzO1x0XHQvKiBpbiAtIEZJTEVfREVEVVBFX1JBTkdFXyogZmxhZ3MgKi9cbiBcdHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZV9pbmZvIGluZm9bXTtcbiB9O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MzY6MzYuMDc2NjQwMjMxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MjUwMDQzNDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGZpbGVfZGVkdXBlX3JhbmdlYCBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBmb2N1c2luZyBvbiBlbmhhbmNpbmcgdGhlIHJlcG9ydGluZyB3aXRoaW4gdGhlIGRlZHVwbGljYXRpb24gcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBpdCdzIG1vZGlmeWluZyB0aGUgYHZmc19kZWR1cGVfZmlsZV9yYW5nZWAgZnVuY3Rpb24gaW4gYGZzL3JlbWFwX3JhbmdlLmNgIGFuZCB0aGUgYXNzb2NpYXRlZCB1c2VyLXNwYWNlIEFQSSBzdHJ1Y3R1cmUgYHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZWAgaW4gYGluY2x1ZGUvdWFwaS9saW51eC9mcy5oYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgcmVuYW1pbmcgYHJlc2VydmVkMmAgdG8gYGZsYWdzYCBpbiBgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlYCwgd2hpY2ggaW1tZWRpYXRlbHkgc2lnbmFscyBhIHNlbWFudGljIHNoaWZ0IOKAkyB3ZSdyZSBtb3ZpbmcgZnJvbSBhIHJlc2VydmVkIGZpZWxkIHRvIHNvbWV0aGluZyBtb3JlIGFjdGl2ZWx5IHVzZWQgZm9yIGNvbnRyb2wuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgIGZsYWcgaXMgdGhlIGtleSB0YWtlYXdheSwgSSBzdXNwZWN0LlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgZ29hbCBvZiB0aGlzIGlzIHRvIG1ha2UgaXQgbXVjaCBjbGVhcmVyIHRvIHRoZSB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uIGFib3V0IHRoZSBwcm9ncmVzcyBvZiBhIGRlZHVwZSBvcGVyYXRpb24sIGFsbG93aW5nIGZvciBiZXR0ZXIgZmVlZGJhY2sgYW5kIGhhbmRsaW5nIG9mIHBvdGVudGlhbGx5IGxvbmctcnVubmluZyBvcGVyYXRpb25zLlxuXG5Ob3csIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0J3MgcHJldHR5IGNsZWFyIGhvdyB0aGlzIG5ldyBmbGFnIGlzIGJlaW5nIHV0aWxpemVkLiBJbnN0ZWFkIG9mIGNoZWNraW5nIGBzYW1lLVx1MDAzZXJlc2VydmVkMmAsIHRoZSBwYXRjaCBub3cgY2hlY2tzIGBzYW1lLVx1MDAzZWZsYWdzIFx1MDAyNiB+RklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTYCBpbnNpZGUgdGhlIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgIGZ1bmN0aW9uLCBhbmQgdGhlIGBpbmZvLVx1MDAzZWJ5dGVzX2RlZHVwZWRgIHZhbHVlIGlzIGJlaW5nIHVwZGF0ZWQgYmFzZWQgb24gdGhlIHN0YXRlIG9mIHRoYXQgZmxhZy5cblxuVGhlIGNvZGUgc25pcHBldCBjYXVnaHQgbXkgYXR0ZW50aW9uLiBJdCBzaG93cyB0aGUgY29uZGl0aW9uYWwgdXBkYXRlIG9mIGBpbmZvLVx1MDAzZWJ5dGVzX2RlZHVwZWRgLiBIZXJlJ3Mgd2hlcmUgdGhlIGxvZ2ljIGJlY29tZXMgaW1wb3J0YW50OlxuYGBgY1xuXHRcdGlmIChkZWR1cGVkID09IC1FQkFERSkge1xuXHRcdFx0aW5mby1cdTAwM2VzdGF0dXMgPSBGSUxFX0RFRFVQRV9SQU5HRV9ESUZGRVJTO1xuXHRcdFx0aWYgKHNhbWUtXHUwMDNlZmxhZ3MgXHUwMDI2IEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykge1xuXHRcdFx0XHR1NjQgc3RlcCA9IGlfYmxvY2tzaXplKHNyYyk7XG4uLi5cblx0XHRcdFx0aWYgKHN0ZXAgXHUwMDNjPSAxKVxuXHRcdFx0XHRcdHN0ZXAgPSBsZW47XG5cdFx0XHRcdGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZCA9IG1pbl90KHU2NCwgc3RlcCwgbGVuKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGRlZHVwZWQgXHUwMDNjIDApIHtcblx0XHRcdGluZm8tXHUwMDNlc3RhdHVzID0gZGVkdXBlZDtcblx0XHR9IGVsc2UgaWYgKHNhbWUtXHUwMDNlZmxhZ3MgXHUwMDI2IEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykge1xuXHRcdFx0aW5mby1cdTAwM2VieXRlc19kZWR1cGVkID0gZGVkdXBlZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aW5mby1cdTAwM2VieXRlc19kZWR1cGVkID0gbGVuO1xuXHRcdH1cbmBgYFxuSWYgYGRlZHVwZWQgPT0gLUVCQURFYCAod2hpY2ggSSBhc3N1bWUgaXMgYW4gZXJyb3IgY29kZSksIHRoZW4gYGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZGAgaXMgTk9UIHVwZGF0ZWQsIHVubGVzcyBgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTYCBpcyBzZXQuIFRoZW4gaXQgY2FsY3VsYXRlcyB0aGUgYW1vdW50IG9mIHByb2dyZXNzIHRoYXQgd2FzIG1hZGUgYmVmb3JlIHRoZSBlcnJvciBhbmQgcG9wdWxhdGVzIGl0IGluIGBpbmZvLVx1MDAzZWJ5dGVzX2RlZHVwZWRgLiBJZiB0aGUgZmxhZyBpc24ndCBzZXQsIGl0IGRvZXNuJ3QuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBvcmlnaW5hbCBjb2RlLCBhbmQgSSdtIGFza2luZyBteXNlbGYsICdXYWl0LCBob3cgd2FzIHRoaXMgaGFuZGxlZCBiZWZvcmU/JyBJIGFtIGEgbGl0dGxlIGNvbmNlcm5lZC4gQ2hlY2tpbmcgdGhlIHByaW9yIGNvZGUgc2VnbWVudCwgbXkgY29uY2VybnMgYXJlIHZpbmRpY2F0ZWQsIGBpbmZvLVx1MDAzZWJ5dGVzX2RlZHVwZWRgIHdhcyAqbm90KiB1cGRhdGVkIGluIHRoZSBlcnJvciBwYXRoIGJlZm9yZS4gU28sIHRoaXMgcGF0Y2ggaXNuJ3QganVzdCBhIHNpbXBsZSBmZWF0dXJlIGFkZGl0aW9uOyBpdCBpcyBjaGFuZ2luZyBiZWhhdmlvciwgdG8gcmVwb3J0IHByb2dyZXNzIGV2ZW4gaWYgdGhlcmUgaXMgYW4gZXJyb3IuIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhpcyBpc24ndCBnb2luZyB0byBicmVhayBhbnkgZXhpc3RpbmcgdXNlciBzcGFjZSBhcHBsaWNhdGlvbnMuXG5cblRoZSBgaW5mb2AgdmFyaWFibGUsIGZyb20gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSwgaXMgcGFydCBvZiBgc2FtZWAsIHdoaWNoIG9yaWdpbmF0ZXMgZnJvbSB1c2VyLXNwYWNlLiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBob3cgaXMgdGhlIHN0cnVjdHVyZSAqYWN0dWFsbHkqIHVzZWQ/IElzIGl0IGNvcGllZCBmcm9tIHVzZXItc3BhY2UsIG1vZGlmaWVkIGluIGtlcm5lbC1zcGFjZSwgYW5kIHRoZW4gY29waWVkIGJhY2s/IEkgbmVlZCB0byBsb29rIGF0IGhvdyB0aGlzIGBzYW1lYCBzdHJ1Y3QgaXMgaGFuZGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSByZXN1bHRzIGFyZSByZXR1cm5lZCB0byB1c2VyIHNwYWNlLiBJIGFtIGdvaW5nIHRvIHNlZSBob3cgYHNhbWVgIGdldHMgaXRzIGluaXRpYWwgdmFsdWVzLCBzbyBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZWAgZnVuY3Rpb24gb3Igc29tZXRoaW5nIHNpbWlsYXIgdXNpbmcgdGhlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB1dGlsaXR5LiBUaGF0IHdpbGwgc2hvdyBtZSB0aGUgZGF0YSBmbG93IGFuZCBpZiB0aGUga2VybmVsIGlzIGV4cG9zaW5nIGFueSBzdGF0ZSB0aGF0IG5lZWRzIHByb3RlY3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozNjo1Mi4zMjY2ODY1MloiLCJTZXEiOjEyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2OTM5NDE0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9jdGwuYz00MTU9c3RhdGljIGludCBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL2lvY3RsLmMtNDQxLVxcdHNhbWUtXFx1MDAzZWRlc3RfY291bnQgPSBjb3VudDtcXG5mcy9pb2N0bC5jOjQ0MjpcXHRyZXQgPSB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2UoZmlsZSwgc2FtZSk7XFxuZnMvaW9jdGwuYy00NDMtXFx0aWYgKHJldClcXG4tLVxcbmZzL292ZXJsYXlmcy9maWxlLmM9NTI3PXN0YXRpYyBsb2ZmX3Qgb3ZsX2NvcHlmaWxlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxcbi0tXFxuZnMvb3ZlcmxheWZzL2ZpbGUuYy01ODAtXFx0XFx0Y2FzZSBPVkxfREVEVVBFOlxcbmZzL292ZXJsYXlmcy9maWxlLmM6NTgxOlxcdFxcdFxcdHJldCA9IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUocmVhbGZpbGVfaW4sIHBvc19pbixcXG5mcy9vdmVybGF5ZnMvZmlsZS5jLTU4Mi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRyZWFsZmlsZV9vdXQsIHBvc19vdXQsIGxlbixcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmM9MTgxPXN0YXRpYyB2b2lkIHZmc191bmxvY2tfdHdvX2ZvbGlvcyhzdHJ1Y3QgZm9saW8gKmZvbGlvMSwgc3RydWN0IGZvbGlvICpmb2xpbzIpXFxuLS1cXG5mcy9yZW1hcF9yYW5nZS5jLTE5MS0gKi9cXG5mcy9yZW1hcF9yYW5nZS5jOjE5MjpzdGF0aWMgaW50IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9jb21wYXJlKHN0cnVjdCBmaWxlICpzcmMsIGxvZmZfdCBzcmNvZmYsXFxuZnMvcmVtYXBfcmFuZ2UuYy0xOTMtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBmaWxlICpkZXN0LCBsb2ZmX3QgZHN0b2ZmLFxcbi0tXFxuZnMvcmVtYXBfcmFuZ2UuYz0yNzc9X19nZW5lcmljX3JlbWFwX2ZpbGVfcmFuZ2VfcHJlcChzdHJ1Y3QgZmlsZSAqZmlsZV9pbiwgbG9mZl90IHBvc19pbixcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmMtMzQwLVxcdFxcdGlmICghSVNfREFYKGlub2RlX2luKSlcXG5mcy9yZW1hcF9yYW5nZS5jOjM0MTpcXHRcXHRcXHRyZXQgPSB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VfY29tcGFyZShmaWxlX2luLCBwb3NfaW4sXFxuZnMvcmVtYXBfcmFuZ2UuYy0zNDItXFx0XFx0XFx0XFx0XFx0ZmlsZV9vdXQsIHBvc19vdXQsICpsZW4sIFxcdTAwMjZpc19zYW1lKTtcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmM9NDE2PXN0YXRpYyBib29sIG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmMtNDMxLVxcbmZzL3JlbWFwX3JhbmdlLmM6NDMyOmxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXFxuZnMvcmVtYXBfcmFuZ2UuYy00MzMtXFx0XFx0XFx0XFx0IHN0cnVjdCBmaWxlICpkc3RfZmlsZSwgbG9mZl90IGRzdF9wb3MsXFxuLS1cXG5mcy9yZW1hcF9yYW5nZS5jLTQ0MS1cXHQvKlxcbmZzL3JlbWFwX3JhbmdlLmM6NDQyOlxcdCAqIFRoaXMgaXMgcmVkdW5kYW50IGlmIGNhbGxlZCBmcm9tIHZmc19kZWR1cGVfZmlsZV9yYW5nZSgpLCBidXQgb3RoZXJcXG5mcy9yZW1hcF9yYW5nZS5jLTQ0My1cXHQgKiBjYWxsZXJzIG5lZWQgaXQgYW5kIGl0J3Mgbm90IHBlcmZvcm1hbmNlIHNlc2l0aXZlLi4uXFxuLS1cXG5mcy9yZW1hcF9yYW5nZS5jLTQ4OS19XFxuZnMvcmVtYXBfcmFuZ2UuYzo0OTA6RVhQT1JUX1NZTUJPTCh2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKTtcXG5mcy9yZW1hcF9yYW5nZS5jLTQ5MS1cXG5mcy9yZW1hcF9yYW5nZS5jOjQ5MjppbnQgdmZzX2RlZHVwZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKnNhbWUpXFxuZnMvcmVtYXBfcmFuZ2UuYy00OTMte1xcbi0tXFxuZnMvcmVtYXBfcmFuZ2UuYy01NTAtXFxuZnMvcmVtYXBfcmFuZ2UuYzo1NTE6XFx0XFx0ZGVkdXBlZCA9IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoZmlsZSwgb2ZmLCBmZF9maWxlKGRzdF9mZCksXFxuZnMvcmVtYXBfcmFuZ2UuYy01NTItXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGluZm8tXFx1MDAzZWRlc3Rfb2Zmc2V0LCBsZW4sXFxuLS1cXG5mcy9yZW1hcF9yYW5nZS5jLTU4My19XFxuZnMvcmVtYXBfcmFuZ2UuYzo1ODQ6RVhQT1JUX1NZTUJPTCh2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2UpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTIwODU9ZXh0ZXJuIGxvZmZfdCB2ZnNfY2xvbmVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZV9pbiwgbG9mZl90IHBvc19pbixcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaC0yMDg3LVxcdFxcdFxcdFxcdCAgIGxvZmZfdCBsZW4sIHVuc2lnbmVkIGludCByZW1hcF9mbGFncyk7XFxuaW5jbHVkZS9saW51eC9mcy5oOjIwODg6ZXh0ZXJuIGludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsXFxuaW5jbHVkZS9saW51eC9mcy5oLTIwODktXFx0XFx0XFx0XFx0IHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSk7XFxuaW5jbHVkZS9saW51eC9mcy5oOjIwOTA6ZXh0ZXJuIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXFxuaW5jbHVkZS9saW51eC9mcy5oLTIwOTEtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGZpbGUgKmRzdF9maWxlLCBsb2ZmX3QgZHN0X3BvcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MzY6NTMuODk2MDg5NTQyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDMwOTkwMTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgb2YgdGhlIHRob3VnaHQgcHJvY2VzcyBkZXNjcmliZWQ6XG5cbioqRGl2aW5nIGludG8gYGlvY3RsX2ZpbGVfZGVkdXBlX3JhbmdlYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGVkdXBsaWNhdGlvbiBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gY29kZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBgaW9jdGxfZmlsZV9kZWR1cGVfcmFuZ2VgIGNhbGwgaXMgaW1wbGVtZW50ZWQuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHdpdGggdGhlIGNvcmUgaW1wbGVtZW50YXRpb24uIEknbGwgaGVhZCBzdHJhaWdodCBvdmVyIHRvIGBmcy9pb2N0bC5jYC4gVGhhdCBzaG91bGQgY29udGFpbiB0aGUgcHJpbWFyeSBsb2dpYyBmb3IgaGFuZGxpbmcgdGhlIGZpbGUgc3lzdGVtIGNvbnRyb2wgb3BlcmF0aW9ucywgaW5jbHVkaW5nIHRoZSBkZWR1cGUgaW9jdGwuIExldCdzIHNlZSB3aGF0J3Mgd2hhdCBpbiB0aGVyZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzLCBlcnJvciBoYW5kbGluZywgYW5kIHRoZSBjb3JlIGFsZ29yaXRobSBmb3IgZmluZGluZyBhbmQgbWVyZ2luZyB0aGUgZHVwbGljYXRlIGV4dGVudHMuIEZyb20gdGhlcmUsIEkgY2FuIGZpZ3VyZSBvdXQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlIGFuZCBhbnkgZmlsZSBzeXN0ZW0gc3BlY2lmaWMgbnVhbmNlcy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0ODIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozNzowNS4zMjcwODI5NjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2lvY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMDpcXHR9XFxuIDQwMTpcXHRcXG4gNDAyOlxcdHN0YXRpYyBpbnQgaW9jdGxfZnN0aGF3KHN0cnVjdCBmaWxlICpmaWxwKVxcbiA0MDM6XFx0e1xcbiA0MDQ6XFx0XFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGZpbGVfaW5vZGUoZmlscCktXFx1MDAzZWlfc2I7XFxuIDQwNTpcXHRcXG4gNDA2OlxcdFxcdGlmICghbnNfY2FwYWJsZShzYi1cXHUwMDNlc191c2VyX25zLCBDQVBfU1lTX0FETUlOKSlcXG4gNDA3OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDQwODpcXHRcXG4gNDA5OlxcdFxcdC8qIFRoYXcgKi9cXG4gNDEwOlxcdFxcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNldGhhd19zdXBlcilcXG4gNDExOlxcdFxcdFxcdHJldHVybiBzYi1cXHUwMDNlc19vcC1cXHUwMDNldGhhd19zdXBlcihzYiwgRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsIE5VTEwpO1xcbiA0MTI6XFx0XFx0cmV0dXJuIHRoYXdfc3VwZXIoc2IsIEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLCBOVUxMKTtcXG4gNDEzOlxcdH1cXG4gNDE0OlxcdFxcbiA0MTU6XFx0c3RhdGljIGludCBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gNDE2OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSBfX3VzZXIgKmFyZ3ApXFxuIDQxNzpcXHR7XFxuIDQxODpcXHRcXHRzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKnNhbWUgPSBOVUxMO1xcbiA0MTk6XFx0XFx0aW50IHJldDtcXG4gNDIwOlxcdFxcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcXG4gNDIxOlxcdFxcdHUxNiBjb3VudDtcXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0aWYgKGdldF91c2VyKGNvdW50LCBcXHUwMDI2YXJncC1cXHUwMDNlZGVzdF9jb3VudCkpIHtcXG4gNDI0OlxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuIDQyNTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNDI2OlxcdFxcdH1cXG4gNDI3OlxcdFxcbiA0Mjg6XFx0XFx0c2l6ZSA9IHN0cnVjdF9zaXplKHNhbWUsIGluZm8sIGNvdW50KTtcXG4gNDI5OlxcdFxcdGlmIChzaXplIFxcdTAwM2UgUEFHRV9TSVpFKSB7XFxuIDQzMDpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiA0MzE6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQzMjpcXHRcXHR9XFxuIDQzMzpcXHRcXG4gNDM0OlxcdFxcdHNhbWUgPSBtZW1kdXBfdXNlcihhcmdwLCBzaXplKTtcXG4gNDM1OlxcdFxcdGlmIChJU19FUlIoc2FtZSkpIHtcXG4gNDM2OlxcdFxcdFxcdHJldCA9IFBUUl9FUlIoc2FtZSk7XFxuIDQzNzpcXHRcXHRcXHRzYW1lID0gTlVMTDtcXG4gNDM4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA0Mzk6XFx0XFx0fVxcbiA0NDA6XFx0XFxuIDQ0MTpcXHRcXHRzYW1lLVxcdTAwM2VkZXN0X2NvdW50ID0gY291bnQ7XFxuIDQ0MjpcXHRcXHRyZXQgPSB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2UoZmlsZSwgc2FtZSk7XFxuIDQ0MzpcXHRcXHRpZiAocmV0KVxcbiA0NDQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQ0NTpcXHRcXG4gNDQ2OlxcdFxcdHJldCA9IGNvcHlfdG9fdXNlcihhcmdwLCBzYW1lLCBzaXplKTtcXG4gNDQ3OlxcdFxcdGlmIChyZXQpXFxuIDQ0ODpcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbiA0NDk6XFx0XFxuIDQ1MDpcXHRvdXQ6XFxuIDQ1MTpcXHRcXHRrZnJlZShzYW1lKTtcXG4gNDUyOlxcdFxcdHJldHVybiByZXQ7XFxuIDQ1MzpcXHR9XFxuIDQ1NDpcXHRcXG4gNDU1OlxcdHN0YXRpYyBpbnQgaW9jdGxfZ2V0ZnN1dWlkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJncClcXG4gNDU2OlxcdHtcXG4gNDU3OlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBmaWxlX2lub2RlKGZpbGUpLVxcdTAwM2VpX3NiO1xcbiA0NTg6XFx0XFx0c3RydWN0IGZzdXVpZDIgdSA9IHsgLmxlbiA9IHNiLVxcdTAwM2VzX3V1aWRfbGVuLCB9O1xcbiA0NTk6XFx0XFxuIDQ2MDpcXHRcXHRpZiAoIXNiLVxcdTAwM2VzX3V1aWRfbGVuKVxcbiA0NjE6XFx0XFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuIDQ2MjpcXHRcXG4gNDYzOlxcdFxcdG1lbWNweShcXHUwMDI2dS51dWlkWzBdLCBcXHUwMDI2c2ItXFx1MDAzZXNfdXVpZCwgc2ItXFx1MDAzZXNfdXVpZF9sZW4pO1xcbiA0NjQ6XFx0XFxuIDQ2NTpcXHRcXHRyZXR1cm4gY29weV90b191c2VyKGFyZ3AsIFxcdTAwMjZ1LCBzaXplb2YodSkpID8gLUVGQVVMVCA6IDA7XFxuIDQ2NjpcXHR9XFxuIDQ2NzpcXHRcXG4gNDY4OlxcdHN0YXRpYyBpbnQgaW9jdGxfZ2V0X2ZzX3N5c2ZzX3BhdGgoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmdwKVxcbiA0Njk6XFx0e1xcbiA0NzA6XFx0XFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGZpbGVfaW5vZGUoZmlsZSktXFx1MDAzZWlfc2I7XFxuIDQ3MTpcXHRcXG4gNDcyOlxcdFxcdGlmICghc3RybGVuKHNiLVxcdTAwM2VzX3N5c2ZzX25hbWUpKVxcbiA0NzM6XFx0XFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuIDQ3NDpcXHRcXG4gNDc1OlxcdFxcdHN0cnVjdCBmc19zeXNmc19wYXRoIHUgPSB7fTtcXG4gNDc2OlxcdFxcbiA0Nzc6XFx0XFx0dS5sZW4gPSBzY25wcmludGYodS5uYW1lLCBzaXplb2YodS5uYW1lKSwgXFxcIiVzLyVzXFxcIiwgc2ItXFx1MDAzZXNfdHlwZS1cXHUwMDNlbmFtZSwgc2ItXFx1MDAzZXNfc3lzZnNfbmFtZSk7XFxuIDQ3ODpcXHRcXG4gNDc5OlxcdFxcdHJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgXFx1MDAyNnUsIHNpemVvZih1KSkgPyAtRUZBVUxUIDogMDtcXG4gNDgwOlxcdH1cXG4gNDgxOlxcdFxcbiA0ODI6XFx0LypcXG4gNDgzOlxcdCAqIGRvX3Zmc19pb2N0bCgpIGlzIG5vdCBmb3IgZHJpdmVycyBhbmQgbm90IGludGVuZGVkIHRvIGJlIEVYUE9SVF9TWU1CT0woKSdkLlxcbiA0ODQ6XFx0ICogSXQncyBqdXN0IGEgc2ltcGxlIGhlbHBlciBmb3Igc3lzX2lvY3RsIGFuZCBjb21wYXRfc3lzX2lvY3RsLlxcbiA0ODU6XFx0ICpcXG4gNDg2OlxcdCAqIFdoZW4geW91IGFkZCBhbnkgbmV3IGNvbW1vbiBpb2N0bHMgdG8gdGhlIHN3aXRjaGVzIGFib3ZlIGFuZCBiZWxvdyxcXG4gNDg3OlxcdCAqIHBsZWFzZSBlbnN1cmUgdGhleSBoYXZlIGNvbXBhdGlibGUgYXJndW1lbnRzIGluIGNvbXBhdCBtb2RlLlxcbiA0ODg6XFx0ICpcXG4gNDg5OlxcdCAqIFRoZSBMU00gbWFpbGluZyBsaXN0IHNob3VsZCBhbHNvIGJlIG5vdGlmaWVkIG9mIGFueSBjb21tYW5kIGFkZGl0aW9ucyBvclxcbiA0OTA6XFx0ICogY2hhbmdlcywgYXMgc3BlY2lmaWMgTFNNcyBtYXkgYmUgYWZmZWN0ZWQuXFxuIDQ5MTpcXHQgKi9cXG4gNDkyOlxcdHN0YXRpYyBpbnQgZG9fdmZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgZmQsXFxuIDQ5MzpcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gNDk0OlxcdHtcXG4gNDk1OlxcdFxcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xcbiA0OTY6XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlscCk7XFxuIDQ5NzpcXHRcXG4gNDk4OlxcdFxcdHN3aXRjaCAoY21kKSB7XFxuIDQ5OTpcXHRcXHRjYXNlIEZJT0NMRVg6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjM3OjA1LjMyNzE5MzUyN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjcyNzk5Mzc2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBTYWZldHkgb2YgYHZmc19kZWR1cGVfZmlsZV9yYW5nZWAgYW5kIGl0cyBJbnRlcmFjdGlvbiB3aXRoIFVzZXItU3BhY2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGBtZW1kdXBfdXNlcmAgYmVpbmcgdXNlZC4gVGhhdCdzIG15IGZpcnN0IHNpZ25hbCB0byBzdGFydCB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBXZSdyZSBhbGxvY2F0aW5nIGFuZCBjb3B5aW5nIGEgc3RydWN0dXJlLCBgc2FtZWAsIGRpcmVjdGx5IGZyb20gdXNlci1zcGFjZSB1c2luZyBgbWVtZHVwX3VzZXIoYXJncCwgc2l6ZSlgLiBUaGVuIHdlIGNhbGwgYHZmc19kZWR1cGVfZmlsZV9yYW5nZShmaWxlLCBzYW1lKWAuIElmIGV2ZXJ5dGhpbmcgZ29lcyB3ZWxsIChyZXR1cm5zIDApLCB3ZSBjb3B5IGl0ICpiYWNrKiB0byB1c2VyLXNwYWNlIHdpdGggYGNvcHlfdG9fdXNlcihhcmdwLCBzYW1lLCBzaXplKWAuXG5cblJpZ2h0IGF3YXksIGFsYXJtIGJlbGxzIHN0YXJ0IGdvaW5nIG9mZi4gYG1lbWR1cF91c2VyYCBjb3BpZXMgdGhlICplbnRpcmUqIHN0cnVjdHVyZSBmcm9tIHVzZXItc3BhY2UuIFNvIGFueSB1bmluaXRpYWxpemVkIGZpZWxkcyBpbiBgc2FtZWAgYXJlIGVzc2VudGlhbGx5IHdoYXRldmVyIGdhcmJhZ2UgdGhlIHVzZXIgcHJvY2VzcyBoYXBwZW5lZCB0byBoYXZlIGluIHRoYXQgbWVtb3J5IHJlZ2lvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbid0IG9wZW5pbmcgYSB2dWxuZXJhYmlsaXR5LlxuXG5XYWl0LCBpZiB0aGUgdXNlciBwcm92aWRlcyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYG1lbWR1cF91c2VyYCBjb3BpZXMgaXQsIGFuZCB0aGVuIGl0IGdldHMgY29waWVkICpiYWNrKiB0byB1c2VyLXNwYWNlLiAgVGhlcmUncyBubyBrZXJuZWwgbWVtb3J5IGxlYWsgaGVyZSwgaXMgdGhlcmU/IFRoZSBtZW1vcnkgb3JpZ2luYXRlZCBpbiB1c2VyLXNwYWNlLCBzbyBldmVuIGlmIGl0J3MgZ2FyYmFnZSwgdGhlIGtlcm5lbCBpcyBqdXN0IGFjdGluZyBhcyBhIHBhc3MtdGhyb3VnaC4gT2theSwgc28gZmFyIHNvIGdvb2QuIEl0J3MgZXNzZW50aWFsbHkgcmV0dXJuaW5nIHRoZSBzYW1lIGdhcmJhZ2UgdGhlIHVzZXIgcHJvdmlkZWQuXG5cbkJ1dCB3aGF0IGlmIGBzaXplYCBpcyBsYXJnZXIgdGhhbiB3aGF0IHRoZSB1c2VyICphY3R1YWxseSogaW5pdGlhbGl6ZWQ/IFNhbWUgZGVhbC4gYG1lbWR1cF91c2VyYCBjb3BpZXMgYHNpemVgIGJ5dGVzLCBldmVuIGlmIHRoZSB1c2VyLXNwYWNlIHByb2dyYW0gb25seSBpbml0aWFsaXplZCBhIHNtYWxsZXIgY2h1bmsuICBUaGF0J3MgYSB1c2VyLXNwYWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLCBub3QgYSBrZXJuZWwgbWVtb3J5IGxlYWsuIEkgbmVlZCB0byBub3RlIHRoYXQgaW4gbXkgY29tbWVudHMuXG5cbk5vdywgd2hhdCBpZiBgaW5mby1cdTAwM2VieXRlc19kZWR1cGVkYCAqaXNuJ3QqIHVwZGF0ZWQgYnkgdGhlIGtlcm5lbCBhbmQgdGhlbiBnZXRzIGNvcGllZCBiYWNrIHRvIHVzZXItc3BhY2U/ICBTaW5jZSB0aGUgZGF0YSB3YXMgY29waWVkIEZST00gdXNlci1zcGFjZSwgaXQganVzdCByZXR1cm5zIHRoZSBzYW1lIHVuaW5pdGlhbGl6ZWQgZ2FyYmFnZSB0byB1c2VyLXNwYWNlLCBzbyB0aGVyZSdzICpzdGlsbCogbm8ga2VybmVsIG1lbW9yeSBsZWFrLiBJIGZlZWwgZ29vZCBhYm91dCB0aGF0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZywgdGhvdWdoLlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uIGFuZCBsb29rIGF0IHRoZSBsb2dpYyBhcm91bmQgYGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZGAuIEkgbmVlZCB0byBlbnN1cmUgaXQncyBpbml0aWFsaXplZCBjb3JyZWN0bHkgaW4gKmFsbCogY2FzZXMuIExldCdzIHNlZS4uLiBBaCwgdGhlcmUncyBhIHBhdGNoIHRoYXQgY29uZGl0aW9uYWxseSB1cGRhdGVzIGBpbmZvLVx1MDAzZWJ5dGVzX2RlZHVwZWRgIGJhc2VkIG9uIGBzYW1lLVx1MDAzZWZsYWdzIFx1MDAyNiBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgLlxuXG5JZiB0aGUgZmxhZyBpcyAqbm90KiBzZXQsIGBpbmZvLVx1MDAzZWJ5dGVzX2RlZHVwZWRgIGlzbid0IHVwZGF0ZWQgd2hlbiBgZGVkdXBlZCA9PSAtRUJBREVgIG9yIHdoZW4gYGRlZHVwZWQgXHUwMDNjIDBgLiBUaGF0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyLlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2sgYW5kIGxvb2sgYXQgdGhlICpvbGQqIGxvZ2ljOlxuXG5gYGBjXG5cdFx0aWYgKGRlZHVwZWQgPT0gLUVCQURFKVxuXHRcdFx0aW5mby1cdTAwM2VzdGF0dXMgPSBGSUxFX0RFRFVQRV9SQU5HRV9ESUZGRVJTO1xuXHRcdGVsc2UgaWYgKGRlZHVwZWQgXHUwMDNjIDApXG5cdFx0XHRpbmZvLVx1MDAzZXN0YXR1cyA9IGRlZHVwZWQ7XG5cdFx0ZWxzZVxuXHRcdFx0aW5mby1cdTAwM2VieXRlc19kZWR1cGVkID0gbGVuO1xuYGBgXG5cblByZXZpb3VzbHksIGlmIGBkZWR1cGVkID09IC1FQkFERWAsIHRoZW4gYGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZGAgd2FzICpub3QqIHVwZGF0ZWQuIFNhbWUgZm9yIGBkZWR1cGVkIFx1MDAzYyAwYC4gSWYgYGRlZHVwZWQgXHUwMDNlPSAwYCwgYGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZGAgd2FzIGFsd2F5cyB1cGRhdGVkIHRvIGBsZW5gLlxuXG5Ob3cgd2l0aCB0aGUgcGF0Y2gsIHRoZSBjb2RlIGxvb2tzIGxpa2U6XG5cbmBgYGNcblx0XHRpZiAoZGVkdXBlZCA9PSAtRUJBREUpIHtcblx0XHRcdGluZm8tXHUwMDNlc3RhdHVzID0gRklMRV9ERURVUEVfUkFOR0VfRElGRkVSUztcblx0XHRcdGlmIChzYW1lLVx1MDAzZWZsYWdzIFx1MDAyNiBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1MpIHtcblx0XHRcdFx0Li4uXG5cdFx0XHRcdGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZCA9IG1pbl90KHU2NCwgc3RlcCwgbGVuKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGRlZHVwZWQgXHUwMDNjIDApIHtcblx0XHRcdGluZm8tXHUwMDNlc3RhdHVzID0gZGVkdXBlZDtcblx0XHR9IGVsc2UgaWYgKHNhbWUtXHUwMDNlZmxhZ3MgXHUwMDI2IEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykge1xuXHRcdFx0aW5mby1cdTAwM2VieXRlc19kZWR1cGVkID0gZGVkdXBlZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aW5mby1cdTAwM2VieXRlc19kZWR1cGVkID0gbGVuO1xuXHRcdH1cbmBgYFxuXG5Ob3csIGlmIGBkZWR1cGVkIFx1MDAzZT0gMGAgKmFuZCogdGhlIGZsYWcgaXMgKm5vdCogc2V0LCBgaW5mby1cdTAwM2VieXRlc19kZWR1cGVkID0gbGVuYCBpcyBleGVjdXRlZCAodGhlIGBlbHNlYCBicmFuY2gpLiBJZiB0aGUgZmxhZyAqaXMqIHNldCwgYGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZCA9IGRlZHVwZWRgLlxuXG5TbywgYGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZGAgaXMgbm93IHVwZGF0ZWQgaW4gdGhlICpzYW1lKiBjYXNlcyBhcyBiZWZvcmUgKnBsdXMqIGFkZGl0aW9uYWxseSB3aGVuIGBkZWR1cFxuXG4iLCJJbnB1dFRva2VucyI6NzIxNywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjM3OjQ4LjA1NTE4OTc4N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2MDM1OTcxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb2N0bC5jPTQxNT1zdGF0aWMgaW50IGlvY3RsX2ZpbGVfZGVkdXBlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvaW9jdGwuYy00NDEtXFx0c2FtZS1cXHUwMDNlZGVzdF9jb3VudCA9IGNvdW50O1xcbmZzL2lvY3RsLmM6NDQyOlxcdHJldCA9IHZmc19kZWR1cGVfZmlsZV9yYW5nZShmaWxlLCBzYW1lKTtcXG5mcy9pb2N0bC5jLTQ0My1cXHRpZiAocmV0KVxcbi0tXFxuZnMvcmVtYXBfcmFuZ2UuYz00MzI9bG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmMtNDQxLVxcdC8qXFxuZnMvcmVtYXBfcmFuZ2UuYzo0NDI6XFx0ICogVGhpcyBpcyByZWR1bmRhbnQgaWYgY2FsbGVkIGZyb20gdmZzX2RlZHVwZV9maWxlX3JhbmdlKCksIGJ1dCBvdGhlclxcbmZzL3JlbWFwX3JhbmdlLmMtNDQzLVxcdCAqIGNhbGxlcnMgbmVlZCBpdCBhbmQgaXQncyBub3QgcGVyZm9ybWFuY2Ugc2VzaXRpdmUuLi5cXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmM9NDkwPUVYUE9SVF9TWU1CT0wodmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZSk7XFxuZnMvcmVtYXBfcmFuZ2UuYy00OTEtXFxuZnMvcmVtYXBfcmFuZ2UuYzo0OTI6aW50IHZmc19kZWR1cGVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICpzYW1lKVxcbmZzL3JlbWFwX3JhbmdlLmMtNDkzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaD0yMDg1PWV4dGVybiBsb2ZmX3QgdmZzX2Nsb25lX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjA4Ny1cXHRcXHRcXHRcXHQgICBsb2ZmX3QgbGVuLCB1bnNpZ25lZCBpbnQgcmVtYXBfZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvZnMuaDoyMDg4OmV4dGVybiBpbnQgdmZzX2RlZHVwZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLFxcbmluY2x1ZGUvbGludXgvZnMuaC0yMDg5LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKnNhbWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozNzo1MC40MTU1NTQwMTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3MzE3ODU0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgdGhlIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgIENhbGxlcnMgYW5kIFN0cnVjdHVyZXMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYC4gVGhlIGNvZGUgdHJhY2VzIHNob3cgdGhhdCB0aGUgb25seSBkaXJlY3QgY2FsbGVyIEkgc2VlIGlzIGBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZWAgd2l0aGluIGBmcy9pb2N0bC5jYC4gVGhhdCBmdW5jdGlvbiBzZWVtcyB0byBiZSByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIGlvY3RsIGNhbGwsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSBpdCBhbGxvY2F0aW5nIHRoZSBgc2FtZWAgYXJyYXkgdXNpbmcgYG1lbWR1cF91c2VyYCwgd2hpY2ggaXNuJ3QgZW50aXJlbHkgc3VycHJpc2luZyBpbiB0aGlzIGNvbnRleHQuIEl0IHN1Z2dlc3RzIHRoZXkncmUgbGlrZWx5IGR1cGxpY2F0aW5nIGRhdGEgcHJvdmlkZWQgYnkgdXNlcnNwYWNlLlxuXG5CdXQgaGFuZyBvbi4uLiBJIG5lZWQgdG8gY29uc2lkZXIgYHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZWAuIFRoaXMgc3RydWN0IGhhcyB0byBiZSB1c2VkIHNvbWV3aGVyZSBiZXNpZGVzIGp1c3QgdGhlIGlvY3RsIHBhdGguIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBvdGhlciBwb3RlbnRpYWwgY29uc3VtZXJzIG9yIHVzZXJzIG9mIHRoYXQgZGF0YSBzdHJ1Y3R1cmUgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTk3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6Mzc6NTQuMDg4NzM0OTI2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE0NzkyOTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9jdGwuYz00MTU9c3RhdGljIGludCBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5mcy9pb2N0bC5jOjQxNjpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgX191c2VyICphcmdwKVxcbmZzL2lvY3RsLmMtNDE3LXtcXG5mcy9pb2N0bC5jOjQxODpcXHRzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKnNhbWUgPSBOVUxMO1xcbmZzL2lvY3RsLmMtNDE5LVxcdGludCByZXQ7XFxuLS1cXG5mcy9yZW1hcF9yYW5nZS5jPTQ5MD1FWFBPUlRfU1lNQk9MKHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUpO1xcbmZzL3JlbWFwX3JhbmdlLmMtNDkxLVxcbmZzL3JlbWFwX3JhbmdlLmM6NDkyOmludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSlcXG5mcy9yZW1hcF9yYW5nZS5jLTQ5My17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MjA4OD1leHRlcm4gaW50IHZmc19kZWR1cGVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjA4OTpcXHRcXHRcXHRcXHQgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICpzYW1lKTtcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjA5MC1leHRlcm4gbG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oPTE2Nz1zdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VfaW5mbyB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0xODAtXFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6MTgxOi8qIGZsYWdzIGZvciBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0xODItI2RlZmluZSBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1MgKDFVIFxcdTAwM2NcXHUwMDNjIDApXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0xODQtLyogZnJvbSBzdHJ1Y3QgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6MTg1OnN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMTg2LVxcdF9fdTY0IHNyY19vZmZzZXQ7XFx0LyogaW4gLSBzdGFydCBvZiBleHRlbnQgaW4gc291cmNlICovXFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaD05OT1zdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VfaW5mbyB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0xMTMtLyogZnJvbSBzdHJ1Y3QgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzICovXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6MTE0OnN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSB7XFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMTE1LVxcdF9fdTY0IHNyY19vZmZzZXQ7XFx0LyogaW4gLSBzdGFydCBvZiBleHRlbnQgaW4gc291cmNlICovXFxuLS1cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaD0xNjc9c3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlX2luZm8ge1xcbi0tXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMTgxLS8qIGZyb20gc3RydWN0IGJ0cmZzX2lvY3RsX2ZpbGVfZXh0ZW50X3NhbWVfYXJncyAqL1xcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oOjE4MjpzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2Uge1xcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTE4My1cXHRfX3U2NCBzcmNfb2Zmc2V0O1xcdC8qIGluIC0gc3RhcnQgb2YgZXh0ZW50IGluIHNvdXJjZSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozNzo1NS42MDM1MzQzMloiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTAyNTYyMzQ5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBbmFseXNpcyBvZiBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZWAgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgbWVtZHVwX3VzZXJgIHVzYWdlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwicG90ZW50aWFsIGtlcm5lbCBtZW1vcnkgbGVhaz9cIiBUaGUgcHJvY2VzcyBpczogIGBtZW1kdXBfdXNlcmAgYWxsb2NhdGVzIG1lbW9yeSwgY29waWVzIHVzZXIgc3BhY2UgZGF0YSwgdGhlIGtlcm5lbCBtb2RpZmllcyBzb21lIGZpZWxkcywgYW5kIHRoZW4gYGNvcHlfdG9fdXNlcmAgc2VuZHMgaXQgYmFjay4gIEJ1dCBob2xkIG9uLiAgVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBgbWVtZHVwX3VzZXJgIGNvcGllcyAqZnJvbSogdXNlciBzcGFjZS4gQW55IHVuaW5pdGlhbGl6ZWQgYnl0ZXMgaW4gdGhlIGBzYW1lYCBzdHJ1Y3QgKHBhZGRpbmcsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHByb3ZpZGVkIGJ5IHVzZXIgc3BhY2UpIGFyZSAqYWxyZWFkeSogdXNlci1wcm92aWRlZCBkYXRhLiBJdCdzIGp1c3QgYmVpbmcgY29waWVkIGJhY2suIE5vIGtlcm5lbCBtZW1vcnkgbGVhayB0aGVyZS5cblxuTm93LCBhbSBJIG1pc3Npbmcgc29tZSBwYWRkaW5nPyBJIHF1aWNrbHkgY2hlY2tlZCB0aGUgYGZpbGVfZGVkdXBlX3JhbmdlX2luZm9gIHN0cnVjdCBhbmQgdGhlbiB0aGUgYGZpbGVfZGVkdXBlX3JhbmdlYCBzdHJ1Y3QuIFRoZSBzaXplcyBhZGQgdXAgcGVyZmVjdGx5OyBubyBwYWRkaW5nLiBFdmVuIGlmIHRoZXJlIHdhcyBwYWRkaW5nLCBgbWVtZHVwX3VzZXJgIGNvcGllcyB0aGUgZXhhY3Qgc2l6ZSBnaXZlbiB0byBpdCBieSB0aGUgYHNpemUgPSBzdHJ1Y3Rfc2l6ZShzYW1lLCBpbmZvLCBjb3VudCk7YCBjYWxsLCBzbyBubyBpc3N1ZXMgdGhlcmUuXG5cblRoZSBuZXh0IHRob3VnaHQgaXMgYHNhbWUtXHUwMDNlZmxhZ3NgLiBJdCdzIHVzZWQgaW4gYSBjb25kaXRpb25hbCBjaGVjazogYGlmIChzYW1lLVx1MDAzZXJlc2VydmVkMSB8fCAoc2FtZS1cdTAwM2VmbGFncyBcdTAwMjYgfkZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykpYC4gIElmIHVzZXIgc3BhY2UgcHJvdmlkZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgZm9yIGBmbGFnc2AsIGl0IG1pZ2h0IGhhdmUgcmFuZG9tIGJpdHMgc2V0LCBidXQgdGhpcyB3b3VsZCBqdXN0IGxlYWQgdG8gYW4gYC1FSU5WQUxgIHJldHVybi4gVGhpcyBpcyBhIHVzZXIgc3BhY2UgYnVnLCBub3QgYSBzZWN1cml0eSBpc3N1ZSAoYW5kIEtNU0FOIHdvdWxkIHBpY2sgaXQgdXApLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgS01TQU4ncyBiZWhhdmlvdXIuIERvZXMgS01TQU4gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgdXNlciBzcGFjZSBkYXRhPyBObywgbm90IHJlYWxseS4gS01TQU4gdHJhY2tzIGtlcm5lbCBtZW1vcnkuIFdoZW4gZGF0YSBpcyBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlIHRvIHRoZSBrZXJuZWwsIEtNU0FOIGFzc3VtZXMgaXQncyB2YWxpZC4gSG93ZXZlciwgS01TQU4gZG9lcyBjaGVjayBpZiBtZW1vcnkgKnRvKiB1c2VyIHNwYWNlIGlzIHVuaW5pdGlhbGl6ZWQgKHBvdGVudGlhbCBpbmZvIGxlYWspLiBCdXQgaGVyZSwgc2luY2UgdGhlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYnkgYGttYWxsb2NgIHZpYSBgbWVtZHVwX3VzZXJgLCBgbWVtZHVwX3VzZXJgIGRvZXMgYSBgY29weV9mcm9tX3VzZXJgIGNhbGwsIHdoaWNoIFwidW5wb2lzb25zXCIgdGhlIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiB3aWxsIGNvbnNpZGVyIGBzYW1lYCBmdWxseSBpbml0aWFsaXplZC5cblxuVGhlbiBJIGNvbnNpZGVyZWQgb3RoZXIgY2hhbmdlcyBpbiB0aGUgcGF0Y2gsIHNwZWNpZmljYWxseSB0aGUgY29kZSB1cGRhdGluZyBgaW5mby1cdTAwM2VieXRlc19kZWR1cGVkYC4gVGhpcyBzZWN0aW9uIHVzZXMgYGlfYmxvY2tzaXplKHNyYylgLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlZCBoZXJlOyBhbGwgc2FmZS5cblxuTGV0J3MgYXBwbHkgdGhlIEtNU0FOIHJ1bGVzIGFuZCBjaGVjayBpZiB0aGUgcGF0Y2ggc2F0aXNmaWVzIHRoZSBLTVNBTiBjb25kaXRpb25zLlxuMS4gYHNhbWVgIGlzIHNlbnQgdG8gdXNlciBzcGFjZSB2aWEgYGNvcHlfdG9fdXNlcmAuIEhvd2V2ZXIsIGl0J3MgYWxsb2NhdGVkIHZpYSBgbWVtZHVwX3VzZXJgLCB3aGljaCBjb3BpZXMgdGhlICplbnRpcmUqIHN0cnVjdHVyZSBmcm9tIHVzZXIgc3BhY2UuIE5vIGtlcm5lbCBtZW1vcnkgaXMgY3JlYXRlZCBhbmQgdW5pbml0aWFsaXplZC5cbjIuIFRoZSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRzIG9uIGBzYW1lLVx1MDAzZWZsYWdzYCwgd2hpY2ggY29tZXMgZnJvbSB1c2VyIHNwYWNlLiBLTVNBTiB0cmVhdHMgdGhpcyBhcyBpbml0aWFsaXplZC5cbjMuIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbi5cbjQuIE5vIGJvdW5kcyBvciBsZW5ndGggbW9kaWZpY2F0aW9ucyB0aGF0IGNvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGRhdGEuXG5cbldhaXQsIGlzIGl0IHBvc3NpYmxlIHRoYXQgYHNpemVgIGNhbGN1bGF0ZWQgYnkgYHN0cnVjdF9zaXplYCBpcyBsYXJnZXIgdGhhbiB3aGF0IGBtZW1kdXBfdXNlcmAgY29waWVzP1xuTm8sIHRoZSBzaXplIGFyZ3VtZW50IGluIGBtZW1kdXBfdXNlcmAgKm11c3QqIGJlIHRoZSBzaXplIGFyZ3VtZW50IG9mIGBjb3B5X2Zyb21fdXNlcmAgY2FsbC5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIGBtZW1kdXBfdXNlcmAgY29waWVzIGV4YWN0bHkgYHNpemVgIGJ5dGVzIGZyb20gYGFyZ3BgIGJ5IHVzaW5nIGBjb3B5X2Zyb21fdXNlcmAsIGFuZCBgc2l6ZWAgaXMgY2FsY3VsYXRlZCBjb3JyZWN0bHksIGBzYW1lYCBpcyBmdWxseSBpbml0aWFsaXplZCB3aXRoIGRhdGEgZnJvbSB1c2VyIHNwYWNlLlxuXG5JJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IEtNU0FOIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2OTIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjM4OjE2LjYyOTE2MDQ3NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3NTY3NzcxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIFxcXFwqbWVtZHVwX3VzZXJcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3N0cmluZy5oPTE3PWV4dGVybiBjaGFyICpzdHJuZHVwX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKiwgbG9uZyk7XFxuaW5jbHVkZS9saW51eC9zdHJpbmcuaDoxODpleHRlcm4gdm9pZCAqbWVtZHVwX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKiwgc2l6ZV90KSBfX3JlYWxsb2Nfc2l6ZSgyKTtcXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTE5LWV4dGVybiB2b2lkICp2bWVtZHVwX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKiwgc2l6ZV90KSBfX3JlYWxsb2Nfc2l6ZSgyKTtcXG4tLVxcbm1tL3V0aWwuYz0yMDY9c3Vic3lzX2luaXRjYWxsKGluaXRfdXNlcl9idWNrZXRzKTtcXG4tLVxcbm1tL3V0aWwuYy0yMTYtICovXFxubW0vdXRpbC5jOjIxNzp2b2lkICptZW1kdXBfdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLCBzaXplX3QgbGVuKVxcbm1tL3V0aWwuYy0yMTgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozODoxOC41MDQ4NDQ3MjhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyMTg4MTIyMzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBtZW1kdXBfdXNlcmAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBtZW1kdXBfdXNlcmAgaW4gYG1tL3V0aWwuY2AuIEknbSBzdGFydGluZyBoZXJlIGJlY2F1c2UuLi4gd2VsbCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBJJ20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcywgYW5kIHRoaXMgb25lJ3MgZ290IGEgdXNlci1zcGFjZSBjb21wb25lbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiwgZXNwZWNpYWxseSB3aGVyZSB3ZSdyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgdW50cnVzdGVkIGRhdGEgb3IgcmVzb3VyY2UgY29udGVudGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSB0eXBpY2FsIGVycm9yIGhhbmRsaW5nIHBhdGhzOiBob3cgaXQgZGVhbHMgd2l0aCBwYWdlIGZhdWx0cywgaW52YWxpZCB1c2VyIHBvaW50ZXJzLCBhbmQgcmVzb3VyY2UgZXhoYXVzdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZXNwZWNpYWxseSBpZiBpdCdzIG9wZXJhdGluZyBvbiBkYXRhIHRoYXQgY291bGQgY2hhbmdlIGJldHdlZW4gdGhlIHVzZXItc3BhY2UgYW5kIGtlcm5lbC1zcGFjZSBjb3B5LiBUaW1lIHRvIGdldCB0aGUgZGVidWdnZXIgcmVhZHkganVzdCBpbiBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUyMCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjQ0OjIwLjY5Mjk3MDYzNloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdXRpbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxNzpcXHR2b2lkICptZW1kdXBfdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLCBzaXplX3QgbGVuKVxcbiAyMTg6XFx0e1xcbiAyMTk6XFx0XFx0dm9pZCAqcDtcXG4gMjIwOlxcdFxcbiAyMjE6XFx0XFx0cCA9IGttZW1fYnVja2V0c19hbGxvY190cmFja19jYWxsZXIodXNlcl9idWNrZXRzLCBsZW4sIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcXG4gMjIyOlxcdFxcdGlmICghcClcXG4gMjIzOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiAyMjQ6XFx0XFxuIDIyNTpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIocCwgc3JjLCBsZW4pKSB7XFxuIDIyNjpcXHRcXHRcXHRrZnJlZShwKTtcXG4gMjI3OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FRkFVTFQpO1xcbiAyMjg6XFx0XFx0fVxcbiAyMjk6XFx0XFxuIDIzMDpcXHRcXHRyZXR1cm4gcDtcXG4gMjMxOlxcdH1cXG4gMjMyOlxcdEVYUE9SVF9TWU1CT0wobWVtZHVwX3VzZXIpO1xcbiAyMzM6XFx0XFxuIDIzNDpcXHQvKipcXG4gMjM1OlxcdCAqIHZtZW1kdXBfdXNlciAtIGR1cGxpY2F0ZSBtZW1vcnkgcmVnaW9uIGZyb20gdXNlciBzcGFjZVxcbiAyMzY6XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6NDQ6MjAuNjkzMDg4MTI2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MjI2NDg5NDc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGZpbGVfZGVkdXBlX3JhbmdlYCBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyBgbWVtZHVwX3VzZXJgIGRlZmluaXRlbHkgYWxsb2NhdGVzIG1lbW9yeSBhbmQgY29waWVzIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdXNlciBzcGFjZS4gSWYgYGNvcHlfZnJvbV91c2VyYCBmYWlscywgd2hpY2ggd291bGQgYmUgZXhwZWN0ZWQgYmVoYXZpb3IsIGl0IGZyZWVzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGFuZCByZXR1cm5zIGAtRUZBVUxUYC4gVGhhdCBtZWFucyB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpcyBhbHdheXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBkYXRhIG9yaWdpbmF0aW5nIGZyb20gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSdzIGFic29sdXRlbHkgbm8ga2VybmVsIG1lbW9yeSBsZWFrIGhlcmUgZnJvbSBhIHNpbXBsZSBhbGxvY2F0aW9uL2NvcHkgcGVyc3BlY3RpdmUuXG5cbkJ1dCBob2xkIG9uLi4uIEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2ggY29tcGxldGVseS4gV2hhdCBpZiB0aGUga2VybmVsIGRvZXNuJ3QgYWN0dWFsbHkgKnVwZGF0ZSogdGhlIGBpbmZvLVx1MDAzZWJ5dGVzX2RlZHVwZWRgIGZpZWxkPyBJZiB0aGF0IGhhcHBlbnMsIGl0IGp1c3QgcmV0YWlucyB3aGF0ZXZlciB2YWx1ZSB0aGUgdXNlciBpbml0aWFsbHkgcHJvdmlkZWQgd2hlbiB0aGUgYHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZWAgd2FzIGNvcGllZCBmcm9tIHVzZXIgc3BhY2UuIFRoZW4sIHdoZW4gYGNvcHlfdG9fdXNlcmAgY29waWVzIHRoYXQgZmllbGQgYmFjayB0byB1c2VyIHNwYWNlLCBpdCB3aWxsIGVmZmVjdGl2ZWx5IHJldHVybiB0aGUgdXNlcidzICpvcmlnaW5hbCogdmFsdWUuIEkgc2VlIG5vdzsgdGhpcywgYWdhaW4sIHdvdWxkbid0IGNvbnN0aXR1dGUgYSBrZXJuZWwgbWVtb3J5IGxlYWsuXG5cbk5vdywgSSBzaG91bGQgaW52ZXN0aWdhdGUgZXZlcnkgc2luZ2xlIHBsYWNlIHRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmcgY3JpdGljYWwuIEkndmUgYWxyZWFkeSBjaGVja2VkIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgIGFuZCBgaW9jdGxfZmlsZV9kZWR1cGVfcmFuZ2VgLiBXaGF0IGFib3V0IGBidHJmc19pb2N0bF9maWxlX2V4dGVudF9zYW1lX2FyZ3NgPyBUaGUgY29tbWVudCBkb2VzIHNheSBcIi8qIGZyb20gc3RydWN0IGJ0cmZzX2lvY3RsX2ZpbGVfZXh0ZW50X3NhbWVfYXJncyAqL1wiLiBUaGF0J3MgYSBzdHJvbmcgaGludCEgTGV0IG1lIGRpZyBpbnRvIHRoZSBgYnRyZnNgIGNvZGUgdG8gc2VlIGlmIGl0IG1ha2VzIHVzZSBvZiBgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlYC4gVGhpcyBpcyB3aGVyZSB0aGUgcG90ZW50aWFsIGZvciBpc3N1ZXMgbWlnaHQgbGllLCBhbmQgSSdtIG5vdCBydWxpbmcgb3V0IHRoYXQgSSBtYXkgaGF2ZSB0byBsb29rIGF0IGFsbCBvZiB0aGUgY2FsbGVycyBvZiB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAzOCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjQ5OjAyLjk1Nzk4NjI5N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4MjI3MzY4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJidHJmc19pb2N0bF9maWxlX2V4dGVudF9zYW1lX2FyZ3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg9MTY3PXN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZV9pbmZvIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oLTE4My1cXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaDoxODQ6LyogZnJvbSBzdHJ1Y3QgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMTg1LXN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaD05OT1zdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VfaW5mbyB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0xMTItXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6MTEzOi8qIGZyb20gc3RydWN0IGJ0cmZzX2lvY3RsX2ZpbGVfZXh0ZW50X3NhbWVfYXJncyAqL1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTExNC1zdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2Uge1xcbi0tXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg9MTY3PXN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZV9pbmZvIHtcXG4tLVxcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTE4MC1cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaDoxODE6LyogZnJvbSBzdHJ1Y3QgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzICovXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMTgyLXN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjQ5OjA0Ljg0MDI2ODVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE5MzQ3MjUzOTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJ0cmZzIERlZHVwbGljYXRpb24gQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgbG9va3MgbGlrZSBgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzYCBpcyBqdXN0IHRoZSBsZWdhY3kgbmFtZSBmb3IgYGZpbGVfZGVkdXBlX3JhbmdlYC4gTWFrZXMgc2Vuc2UsIG5vIGNvbmZsaWN0aW5nIHVzZXMgdGhlcmUuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBJIHdhcyBhIGxpdHRsZSBjb25jZXJuZWQgYWJvdXQgYGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZCA9IG1pbl90KHU2NCwgc3RlcCwgbGVuKTtgLiBCdXQgYHN0ZXBgIGlzIGRlcml2ZWQgZnJvbSBgaV9ibG9ja3NpemUoc3JjKWAsIHdoaWNoIGlzIGEgYHU2NGAgdG8gYmVnaW4gd2l0aCAob3IgcHJvbW90ZWQgdG8gb25lKS4gYGxlbmAgaXMgYWxzbyBhIGB1NjRgLiBTbywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIHRoZXJlLiBJdCdzIHNhZmUuXG5cbldoYXQgYWJvdXQgdGhhdCBgc2FtZS1cdTAwM2VmbGFncyBcdTAwMjYgfkZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTU2AgY2hlY2s/IElmIGBzYW1lLVx1MDAzZWZsYWdzYCBpc24ndCBpbml0aWFsaXplZCBvbiB0aGUgdXNlciBzcGFjZSBzaWRlLCB3ZSBjb3VsZCBlbmQgdXAgd2l0aCBzb21lIHJhbmRvbSBiaXRzLCB0cmlnZ2VyaW5nIGFuIGAtRUlOVkFMYCwgd2hpY2ggaXMgZmluZS4gSXQgd291bGQganVzdCBjb3JyZWN0bHkgZmFpbCBpZiBpdCdzIG5vdCBzZXQuXG5cbkdpdmVuIGFsbCBvZiB0aGlzLCB0aGlzIHBhdGNoIGlzbid0IGludHJvZHVjaW5nIGFueSBuZXcgcmlza3MgaW4gdGVybXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCBpdCBkb2VzIGlzIGFkZCB0aGUgcHJvZ3Jlc3MgcmVwb3J0aW5nIGZsYWcgYW5kIHVwZGF0ZXMgdGhlIGRlZHVwbGljYXRlZCBieXRlcy4gV2hpbGUgS0FTQU4gaXMgdGhlcmUgdG8gY2F0Y2ggbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIEkgZG9uJ3Qgc2VlIGFueSByaXNrIG9mIHRob3NlIGlzc3VlcyBoZXJlIGVpdGhlci5cblxuVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIHdpdGggdGhpcyByYXRpb25hbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDM2LCJPdXRwdXRUb2tlbnMiOjIxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjo1MTowNC4xODc1MjYxMzhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCBmdW5jdGlvbiBhbmQgdGhlIGBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VgIHVzZXItc3BhY2UgQVBJIHRvIGFkZCBhIG5ldyBmbGFnIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgLiBUaGUgc3RydWN0dXJlIGBzYW1lYCBpcyBhbGxvY2F0ZWQgYW5kIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGF0YSBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBgbWVtZHVwX3VzZXJgIGluIGBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZWAuIEFueSBmaWVsZHMgbm90IGV4cGxpY2l0bHkgdXBkYXRlZCBieSB0aGUga2VybmVsIHdpbGwgc2ltcGx5IHJldGFpbiB0aGUgdmFsdWVzIHByb3ZpZGVkIGJ5IHVzZXIgc3BhY2Ugd2hlbiBjb3BpZWQgYmFjayB2aWEgYGNvcHlfdG9fdXNlcmAuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgbm9yIGRvZXMgaXQgbW9kaWZ5IGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIGluIHRoaXMgY29kZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYHZmc19kZWR1cGVfZmlsZV9yYW5nZWAgZnVuY3Rpb24gYW5kIHRoZSBgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlYCB1c2VyLXNwYWNlIEFQSSB0byBhZGQgYSBuZXcgZmxhZyBgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTYC4gVGhlIHN0cnVjdHVyZSBgc2FtZWAgaXMgYWxsb2NhdGVkIGFuZCBmdWxseSBpbml0aWFsaXplZCB3aXRoIGRhdGEgY29waWVkIGZyb20gdXNlciBzcGFjZSB2aWEgYG1lbWR1cF91c2VyYCBpbiBgaW9jdGxfZmlsZV9kZWR1cGVfcmFuZ2VgLiBBbnkgZmllbGRzIG5vdCBleHBsaWNpdGx5IHVwZGF0ZWQgYnkgdGhlIGtlcm5lbCB3aWxsIHNpbXBseSByZXRhaW4gdGhlIHZhbHVlcyBwcm92aWRlZCBieSB1c2VyIHNwYWNlIHdoZW4gY29waWVkIGJhY2sgdmlhIGBjb3B5X3RvX3VzZXJgLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIG5vciBkb2VzIGl0IG1vZGlmeSBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSBpbiB0aGlzIGNvZGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8d2pj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 12:18:29 +0000 UTC FinishedAt: 2026-08-17 12:51:05 +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": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "series_id": "b93ec397-2207-4575-992c-647324ed16c8" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "vfs_dedupe_file_range" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19kZWR1cGVfZmlsZV9yYW5nZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCBmdW5jdGlvbiBhbmQgdGhlIGBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VgIHVzZXItc3BhY2UgQVBJIHRvIGFkZCBhIG5ldyBmbGFnIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgLiBUaGUgc3RydWN0dXJlIGBzYW1lYCBpcyBhbGxvY2F0ZWQgYW5kIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGF0YSBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBgbWVtZHVwX3VzZXJgIGluIGBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZWAuIEFueSBmaWVsZHMgbm90IGV4cGxpY2l0bHkgdXBkYXRlZCBieSB0aGUga2VybmVsIHdpbGwgc2ltcGx5IHJldGFpbiB0aGUgdmFsdWVzIHByb3ZpZGVkIGJ5IHVzZXIgc3BhY2Ugd2hlbiBjb3BpZWQgYmFjayB2aWEgYGNvcHlfdG9fdXNlcmAuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgbm9yIGRvZXMgaXQgbW9kaWZ5IGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIGluIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBVQVBJIGZsYWcgYEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTU2AgdG8gdGhlIGBGSURFRFVQRVJBTkdFYCBpb2N0bCwgbW9kaWZ5aW5nIHRoZSBjb3JlIFZGUyBkZWR1cGxpY2F0aW9uIGxvZ2ljIGluIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZhNDg0YjNiZjdlMDc1NjNlMTg0MzQwZmMyZWM2Y2UyN2IyNTczOGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxMjozNjowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9yZW1hcF9yYW5nZS5jIGIvZnMvcmVtYXBfcmFuZ2UuY1xuaW5kZXggMjZhZmJiYmZiMTBjMi4uYWM4OGE4MWMxMjczOSAxMDA2NDRcbi0tLSBhL2ZzL3JlbWFwX3JhbmdlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3JlbWFwX3JhbmdlLmNcbkBAIC01MDMsNyAmIzQzOzUwMyw3IEBAIGludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSlcbiBcdGlmICghKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9SRUFEKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoc2FtZS1cdTAwM2VyZXNlcnZlZDEgfHwgc2FtZS1cdTAwM2VyZXNlcnZlZDIpXG4mIzQzO1x0aWYgKHNhbWUtXHUwMDNlcmVzZXJ2ZWQxIHx8IChzYW1lLVx1MDAzZWZsYWdzIFx1MDAyNiB+RklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRvZmYgPSBzYW1lLVx1MDAzZXNyY19vZmZzZXQ7XG5AQCAtNTUxLDEyICYjNDM7NTUxLDI5IEBAIGludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSlcbiBcdFx0ZGVkdXBlZCA9IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoZmlsZSwgb2ZmLCBmZF9maWxlKGRzdF9mZCksXG4gXHRcdFx0XHRcdFx0ICAgIGluZm8tXHUwMDNlZGVzdF9vZmZzZXQsIGxlbixcbiBcdFx0XHRcdFx0XHQgICAgUkVNQVBfRklMRV9DQU5fU0hPUlRFTik7XG4tXHRcdGlmIChkZWR1cGVkID09IC1FQkFERSlcbiYjNDM7XHRcdGlmIChkZWR1cGVkID09IC1FQkFERSkge1xuIFx0XHRcdGluZm8tXHUwMDNlc3RhdHVzID0gRklMRV9ERURVUEVfUkFOR0VfRElGRkVSUztcbi1cdFx0ZWxzZSBpZiAoZGVkdXBlZCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0aWYgKHNhbWUtXHUwMDNlZmxhZ3MgXHUwMDI2IEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykge1xuJiM0MztcdFx0XHRcdHU2NCBzdGVwID0gaV9ibG9ja3NpemUoc3JjKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0LypcbiYjNDM7XHRcdFx0XHQgKiBTdGFja2VkIGZpbGVzeXN0ZW1zIChlLmcuIG92ZXJsYXlmcykgY2FuXG4mIzQzO1x0XHRcdFx0ICogcmVwb3J0IGEgZGVnZW5lcmF0ZSBibG9jayBzaXplIGhlcmU7IGFcbiYjNDM7XHRcdFx0XHQgKiBvbmUtYnl0ZSBzdGVwIHdvdWxkIG9ubHkgbWlzYWxpZ24gdGhlXG4mIzQzO1x0XHRcdFx0ICogbmV4dCBjYWxsLCBzbyBhZHZhbmNlIHBhc3QgdGhlIHdob2xlXG4mIzQzO1x0XHRcdFx0ICogcmVxdWVzdCBpbnN0ZWFkLlxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdGlmIChzdGVwIFx1MDAzYz0gMSlcbiYjNDM7XHRcdFx0XHRcdHN0ZXAgPSBsZW47XG4mIzQzO1x0XHRcdFx0aW5mby1cdTAwM2VieXRlc19kZWR1cGVkID0gbWluX3QodTY0LCBzdGVwLCBsZW4pO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGRlZHVwZWQgXHUwMDNjIDApIHtcbiBcdFx0XHRpbmZvLVx1MDAzZXN0YXR1cyA9IGRlZHVwZWQ7XG4tXHRcdGVsc2VcbiYjNDM7XHRcdH0gZWxzZSBpZiAoc2FtZS1cdTAwM2VmbGFncyBcdTAwMjYgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTKSB7XG4mIzQzO1x0XHRcdGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZCA9IGRlZHVwZWQ7XG4mIzQzO1x0XHR9IGVsc2Uge1xuIFx0XHRcdGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZCA9IGxlbjtcbiYjNDM7XHRcdH1cbiBcbiBuZXh0X2xvb3A6XG4gXHRcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oXG5pbmRleCBiZDg3MjYyZjJlMzQ5Li40NzFmNjk4YmVhYTkzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oXG5AQCAtMTc4LDEzICYjNDM7MTc4LDE2IEBAIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZV9pbmZvIHtcbiBcdF9fdTMyIHJlc2VydmVkO1x0XHQvKiBtdXN0IGJlIHplcm8gKi9cbiB9O1xuIFxuJiM0MzsvKiBmbGFncyBmb3Igc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICovXG4mIzQzOyNkZWZpbmUgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTICgxVSBcdTAwM2NcdTAwM2MgMClcbiYjNDM7XG4gLyogZnJvbSBzdHJ1Y3QgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzICovXG4gc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlIHtcbiBcdF9fdTY0IHNyY19vZmZzZXQ7XHQvKiBpbiAtIHN0YXJ0IG9mIGV4dGVudCBpbiBzb3VyY2UgKi9cbiBcdF9fdTY0IHNyY19sZW5ndGg7XHQvKiBpbiAtIGxlbmd0aCBvZiBleHRlbnQgKi9cbiBcdF9fdTE2IGRlc3RfY291bnQ7XHQvKiBpbiAtIHRvdGFsIGVsZW1lbnRzIGluIGluZm8gYXJyYXkgKi9cbiBcdF9fdTE2IHJlc2VydmVkMTtcdC8qIG11c3QgYmUgemVybyAqL1xuLVx0X191MzIgcmVzZXJ2ZWQyO1x0LyogbXVzdCBiZSB6ZXJvICovXG4mIzQzO1x0X191MzIgZmxhZ3M7XHRcdC8qIGluIC0gRklMRV9ERURVUEVfUkFOR0VfKiBmbGFncyAqL1xuIFx0c3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlX2luZm8gaW5mb1tdO1xuIH07XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZzX2RlZHVwZV9maWxlX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgVUFQSSBmbGFnIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgIHRvIHRoZSBgRklERURVUEVSQU5HRWAgaW9jdGwsIG1vZGlmeWluZyB0aGUgY29yZSBWRlMgZGVkdXBsaWNhdGlvbiBsb2dpYyBpbiBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YTQ4NGIzYmY3ZTA3NTYzZTE4NDM0MGZjMmVjNmNlMjdiMjU3MzhhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMTI6MzY6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9yZW1hcF9yYW5nZS5jIGIvZnMvcmVtYXBfcmFuZ2UuYwppbmRleCAyNmFmYmJiZmIxMGMyLi5hYzg4YTgxYzEyNzM5IDEwMDY0NAotLS0gYS9mcy9yZW1hcF9yYW5nZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3JlbWFwX3JhbmdlLmMKQEAgLTUwMyw3ICYjNDM7NTAzLDcgQEAgaW50IHZmc19kZWR1cGVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICpzYW1lKQogCWlmICghKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9SRUFEKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoc2FtZS0mZ3Q7cmVzZXJ2ZWQxIHx8IHNhbWUtJmd0O3Jlc2VydmVkMikKJiM0MzsJaWYgKHNhbWUtJmd0O3Jlc2VydmVkMSB8fCAoc2FtZS0mZ3Q7ZmxhZ3MgJmFtcDsgfkZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJb2ZmID0gc2FtZS0mZ3Q7c3JjX29mZnNldDsKQEAgLTU1MSwxMiAmIzQzOzU1MSwyOSBAQCBpbnQgdmZzX2RlZHVwZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKnNhbWUpCiAJCWRlZHVwZWQgPSB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKGZpbGUsIG9mZiwgZmRfZmlsZShkc3RfZmQpLAogCQkJCQkJICAgIGluZm8tJmd0O2Rlc3Rfb2Zmc2V0LCBsZW4sCiAJCQkJCQkgICAgUkVNQVBfRklMRV9DQU5fU0hPUlRFTik7Ci0JCWlmIChkZWR1cGVkID09IC1FQkFERSkKJiM0MzsJCWlmIChkZWR1cGVkID09IC1FQkFERSkgewogCQkJaW5mby0mZ3Q7c3RhdHVzID0gRklMRV9ERURVUEVfUkFOR0VfRElGRkVSUzsKLQkJZWxzZSBpZiAoZGVkdXBlZCAmbHQ7IDApCiYjNDM7CQkJaWYgKHNhbWUtJmd0O2ZsYWdzICZhbXA7IEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykgewomIzQzOwkJCQl1NjQgc3RlcCA9IGlfYmxvY2tzaXplKHNyYyk7CiYjNDM7CiYjNDM7CQkJCS8qCiYjNDM7CQkJCSAqIFN0YWNrZWQgZmlsZXN5c3RlbXMgKGUuZy4gb3ZlcmxheWZzKSBjYW4KJiM0MzsJCQkJICogcmVwb3J0IGEgZGVnZW5lcmF0ZSBibG9jayBzaXplIGhlcmU7IGEKJiM0MzsJCQkJICogb25lLWJ5dGUgc3RlcCB3b3VsZCBvbmx5IG1pc2FsaWduIHRoZQomIzQzOwkJCQkgKiBuZXh0IGNhbGwsIHNvIGFkdmFuY2UgcGFzdCB0aGUgd2hvbGUKJiM0MzsJCQkJICogcmVxdWVzdCBpbnN0ZWFkLgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJaWYgKHN0ZXAgJmx0Oz0gMSkKJiM0MzsJCQkJCXN0ZXAgPSBsZW47CiYjNDM7CQkJCWluZm8tJmd0O2J5dGVzX2RlZHVwZWQgPSBtaW5fdCh1NjQsIHN0ZXAsIGxlbik7CiYjNDM7CQkJfQomIzQzOwkJfSBlbHNlIGlmIChkZWR1cGVkICZsdDsgMCkgewogCQkJaW5mby0mZ3Q7c3RhdHVzID0gZGVkdXBlZDsKLQkJZWxzZQomIzQzOwkJfSBlbHNlIGlmIChzYW1lLSZndDtmbGFncyAmYW1wOyBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1MpIHsKJiM0MzsJCQlpbmZvLSZndDtieXRlc19kZWR1cGVkID0gZGVkdXBlZDsKJiM0MzsJCX0gZWxzZSB7CiAJCQlpbmZvLSZndDtieXRlc19kZWR1cGVkID0gbGVuOwomIzQzOwkJfQogCiBuZXh0X2xvb3A6CiAJCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgKaW5kZXggYmQ4NzI2MmYyZTM0OS4uNDcxZjY5OGJlYWE5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgKQEAgLTE3OCwxMyAmIzQzOzE3OCwxNiBAQCBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VfaW5mbyB7CiAJX191MzIgcmVzZXJ2ZWQ7CQkvKiBtdXN0IGJlIHplcm8gKi8KIH07CiAKJiM0MzsvKiBmbGFncyBmb3Igc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICovCiYjNDM7I2RlZmluZSBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1MgKDFVICZsdDsmbHQ7IDApCiYjNDM7CiAvKiBmcm9tIHN0cnVjdCBidHJmc19pb2N0bF9maWxlX2V4dGVudF9zYW1lX2FyZ3MgKi8KIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSB7CiAJX191NjQgc3JjX29mZnNldDsJLyogaW4gLSBzdGFydCBvZiBleHRlbnQgaW4gc291cmNlICovCiAJX191NjQgc3JjX2xlbmd0aDsJLyogaW4gLSBsZW5ndGggb2YgZXh0ZW50ICovCiAJX191MTYgZGVzdF9jb3VudDsJLyogaW4gLSB0b3RhbCBlbGVtZW50cyBpbiBpbmZvIGFycmF5ICovCiAJX191MTYgcmVzZXJ2ZWQxOwkvKiBtdXN0IGJlIHplcm8gKi8KLQlfX3UzMiByZXNlcnZlZDI7CS8qIG11c3QgYmUgemVybyAqLwomIzQzOwlfX3UzMiBmbGFnczsJCS8qIGluIC0gRklMRV9ERURVUEVfUkFOR0VfKiBmbGFncyAqLwogCXN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZV9pbmZvIGluZm9bXTsKIH07CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERlZHVwbGljYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBmcy9yZW1hcF9yYW5nZS5jYCBhbmQgYGluY2x1ZGUvdWFwaS9saW51eC9mcy5oYC4gSXQgc2VlbXMgd2UmIzM5O3JlIG1vZGlmeWluZyBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCB0byBpbmNvcnBvcmF0ZSBhIG5ldyBmZWF0dXJlLiBUaGV5JiMzOTtyZSBhZGRpbmcgc3VwcG9ydCBmb3IgdGhpcyBgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTYCBmbGFnIGluIHRoZSBgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDsgcmVwbGFjaW5nIGBzYW1lLSZndDtyZXNlcnZlZDJgIHdpdGggYHNhbWUtJmd0O2ZsYWdzYCBpcyBhIHR5cGljYWwgcmVmYWN0b3IgdG8gbWFrZSByb29tLCBhbmQgbm93IHdlIGNoZWNrIGZvciB0aGlzIHByb2dyZXNzIHJlcG9ydGluZyBmbGFnLgoKVGhlIGNvcmUgb2YgdGhlIGxvZ2ljIGlzIHRoaXM6IGlmIGBkZWR1cGVkYCByZXR1cm5zIGAtRUJBREVgICh3aGljaCBJIGtub3cgc2lnbmlmaWVzIGFuIGVycm9yKSBhbmQgdGhhdCBmbGFnIGlzIHNldCwgd2UmIzM5O3JlIG5vdyBzZXR0aW5nIGBpbmZvLSZndDtieXRlc19kZWR1cGVkYCB0byB0aGUgbWluaW11bSBvZiBzb21lIGBzdGVwYCB2YWx1ZSBhbmQgdGhlIHJlcXVlc3RlZCBsZW5ndGguIFRoZSBgc3RlcGAgbG9va3MgbGlrZSBpdCYjMzk7cyB0aGUgYmxvY2sgc2l6ZSBvZiB0aGUgc291cmNlIGZpbGUsIHdoaWNoIG1ha2VzIHNlbnNlLiBXZSB3YW50IHRvIHVwZGF0ZSBwcm9ncmVzcywgYXNzdW1pbmcgYEVCQURFYCBpbmRpY2F0ZXMgYW4gaW5jb21wbGV0ZSBvcGVyYXRpb24sIGFuZCBwcm92aWRlIGluY3JlbWVudGFsIGZlZWRiYWNrLiBJZiB0aGUgYGRlZHVwZWRgIHZhbHVlIGlzIG5vbi1uZWdhdGl2ZSBhbmQgdGhlIGZsYWcgaXMgc2V0LCBpdCB1cGRhdGVzIGBpbmZvLSZndDtieXRlc19kZWR1cGVkYCBkaXJlY3RseS4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBpbXBsZW1lbnRhdGlvbiB0byByZXBvcnQgcHJvZ3Jlc3MgYmFjayB0byB0aGUgdXNlciBzcGFjZS4KClNpbmNlIHRoaXMgdG91Y2hlcyBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCwgSSBpbW1lZGlhdGVseSBrbm93IHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgYGlvY3RsKEZJREVEVVBFUkFOR0UpYCBzeXN0ZW0gY2FsbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGNvbmZsaWN0IHdpdGggYW55IGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIGlmIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBJJiMzOTtsbCBjaGVjayBgZnMvcmVtYXBfcmFuZ2UuY2AgZGlyZWN0bHksIGFuZCB0aGVuIGp1bXAgdG8gYGZzL01ha2VmaWxlYCB0byBzZWUgaWYgYHJlbWFwX3JhbmdlLmNgIGl0c2VsZiBkZXBlbmRzIG9uIGFueSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgYG9iai0kKENPTkZJR19TT01FVEhJTkcpICYjNDM7PSByZW1hcF9yYW5nZS5vYCB0eXBlIG9mIGRpcmVjdGl2ZS4gSWYgdGhlcmUmIzM5O3MgYSBjb25maWcgZGVwZW5kZW5jeSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2gga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjb3VsZCBhZmZlY3QgdGhpcy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoaWNoIGtlcm5lbCBjb25maWd1cmF0aW9ucyBtdXN0IGJlIHNldCB0byBjb3JyZWN0bHkgdXRpbGl6ZSB0aGUgZmVhdHVyZSB0byBhcHByb3ByaWF0ZWx5IGFzc2VzcyB0aGUgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlbWFwX3JhbmdlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9NYWtlZmlsZT0xMD1vYmoteSA6PVx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxuLS1cbmZzL01ha2VmaWxlLTE3LVx0XHRmc19kaXJlbnQubyBmc19jb250ZXh0Lm8gZnNfcGFyc2VyLm8gZnNvcGVuLm8gaW5pdC5vIFxcXG5mcy9NYWtlZmlsZToxODpcdFx0a2VybmVsX3JlYWRfZmlsZS5vIG1udF9pZG1hcHBpbmcubyByZW1hcF9yYW5nZS5vIHBpZGZzLm8gXFxcbmZzL01ha2VmaWxlLTE5LVx0XHRmaWxlX2F0dHIubyBmc2Vycm9yLm8gbnVsbGZzLm8gZmFpbGZzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjU2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCBGdW5jdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYHZmc19kZWR1cGVfZmlsZV9yYW5nZWAuIEl0JiMzOTtzIGRlZmluaXRlbHkgY29tcGlsZWQgaW47IHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIHNvbWUgZHluYW1pY2FsbHkgbG9hZGVkIG1vZHVsZSBoZXJlLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gRmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHF1aWNrbHkgdmVyaWZ5IGlmIHRoaXMgZnVuY3Rpb24sIHRoaXMgYHZmc19kZWR1cGVfZmlsZV9yYW5nZWAsIGlzIGVpdGhlciBzdGF0aWMgb3IgZXhwb3J0ZWQuIFRoYXQmIzM5O2xsIGluZm9ybSBteSBmdXp6aW5nIHN0cmF0ZWd5LiBJZiBpdCYjMzk7cyBzdGF0aWMsIHRoZW4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBjYWxsIGl0LiBJdCBhbHNvIGRldGVybWluZXMgaWYgdGhpcyBjYWxsIGlzIHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiBmdXp6aW5nLCBvciBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlYmFzZSB0byBmdXp6IGl0IGNvcnJlY3RseS4gSSBuZWVkIHRvIGtub3cgaG93IGFjY2Vzc2libGUgaXQgaXMgYmVmb3JlIEkgY2FuIGRlY2lkZSB0aGUgYmVzdCB3YXkgdG8gYXBwcm9hY2ggdGFyZ2V0aW5nIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnZmc19kZWR1cGVfZmlsZV9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3JlbWFwX3JhbmdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcmVtYXBfcmFuZ2UuYz00MzI9bG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3Bvcyxcbi0tXG5mcy9yZW1hcF9yYW5nZS5jLTQ4OS19XG5mcy9yZW1hcF9yYW5nZS5jOjQ5MDpFWFBPUlRfU1lNQk9MKHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUpO1xuZnMvcmVtYXBfcmFuZ2UuYy00OTEtXG5mcy9yZW1hcF9yYW5nZS5jPTQ5Mj1pbnQgdmZzX2RlZHVwZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKnNhbWUpXG4tLVxuZnMvcmVtYXBfcmFuZ2UuYy01ODMtfVxuZnMvcmVtYXBfcmFuZ2UuYzo1ODQ6RVhQT1JUX1NZTUJPTCh2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMzQKCQkJCQkJCW91dHB1dDogMTE0CgkJCQkJCQl0aG91Z2h0czogMzY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYHZmc19kZWR1cGVfZmlsZV9yYW5nZWAsIHRoYXQmIzM5O3MgYSBnb29kIGluaXRpYWwgZm9jdXMuIExldCBtZSBzZWUuLi4gQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdG91Y2hlZCBoZXJlPyBOb3BlLCBpdCYjMzk7cyBqdXN0IHRoaXMgb25lLiBBaCwgdGhlIHBhdGNoIGlzIGluIGBmcy9yZW1hcF9yYW5nZS5jYCwgd2hpY2ggaXMgcmlnaHQgaW4gdGhlIGNvcmUgVkZTLCBzbyB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGl0IGludHJvZHVjZXMgYSBuZXcgVUFQSSBmbGFnLCBgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTYC4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluaywgJiMzNDtXb3J0aCBmdXp6aW5nISYjMzQ7IE5vIHNwZWNpZmljIGtlcm5lbCBjb25maWdzIHNlZW0gdG8gYmUgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSwgc2luY2UgaXQmIzM5O3MgY29yZSBWRlMsIHdoaWNoIGlzIGV2ZW4gYmV0dGVyLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHBhdGNoIGl0c2VsZi4uLiBBaCwgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgbG9va3MgbGlrZSB0aGV5IGFyZSBqdXN0IGNoZWNraW5nIHRoZSBmbGFncyBmaWVsZCBpbiB0aGUgc2FtZSBzdHJ1Y3QgYGZpbGVfZGVkdXBlX3JhbmdlYCB0byBzZWUgaWYgdGhlIG5ldyBgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTYCBpcyBzZXQuIFNpbXBsZSBjaGFuZ2UsIGJ1dCBzaWduaWZpY2FudC4KClNvLCBzdW1taW5nIGl0IHVwOiBUaGUgY29yZSBmdW5jdGlvbiBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCBpcyBtb2RpZmllZCwgYWRkaW5nIGEgVUFQSSBmbGFnLCBhbmQgdGhpcyBzaG91bGQgYmUgZnV6emVkLCBnaXZlbiBpdHMgcG90ZW50aWFsIGZvciB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGFuZCB0aGUgY2hhbmdlIGluIFZGUyBsb2dpYy4gSSYjMzk7bSBnb2luZyB0byBhZGQgdGhhdCBmdW5jdGlvbiB0byBteSBGb2N1c1N5bWJvbHMgbGlzdCwgc2V0ICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgdG8gdHJ1ZSwgYW5kIG5vdGUgdGhhdCB0aGUgcGF0Y2ggYWRkcyB0aGUgYEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTU2AgZmxhZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZzX2RlZHVwZV9maWxlX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgVUFQSSBmbGFnIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgIHRvIHRoZSBgRklERURVUEVSQU5HRWAgaW9jdGwsIG1vZGlmeWluZyB0aGUgY29yZSBWRlMgZGVkdXBsaWNhdGlvbiBsb2dpYyBpbiBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZzX2RlZHVwZV9maWxlX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgVUFQSSBmbGFnIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgIHRvIHRoZSBgRklERURVUEVSQU5HRWAgaW9jdGwsIG1vZGlmeWluZyB0aGUgY29yZSBWRlMgZGVkdXBsaWNhdGlvbiBsb2dpYyBpbiBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCBmdW5jdGlvbiBhbmQgdGhlIGBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VgIHVzZXItc3BhY2UgQVBJIHRvIGFkZCBhIG5ldyBmbGFnIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgLiBUaGUgc3RydWN0dXJlIGBzYW1lYCBpcyBhbGxvY2F0ZWQgYW5kIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGF0YSBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBgbWVtZHVwX3VzZXJgIGluIGBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZWAuIEFueSBmaWVsZHMgbm90IGV4cGxpY2l0bHkgdXBkYXRlZCBieSB0aGUga2VybmVsIHdpbGwgc2ltcGx5IHJldGFpbiB0aGUgdmFsdWVzIHByb3ZpZGVkIGJ5IHVzZXIgc3BhY2Ugd2hlbiBjb3BpZWQgYmFjayB2aWEgYGNvcHlfdG9fdXNlcmAuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgbm9yIGRvZXMgaXQgbW9kaWZ5IGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIGluIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmE0ODRiM2JmN2UwNzU2M2UxODQzNDBmYzJlYzZjZTI3YjI1NzM4YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDEyOjM2OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvcmVtYXBfcmFuZ2UuYyBiL2ZzL3JlbWFwX3JhbmdlLmMKaW5kZXggMjZhZmJiYmZiMTBjMi4uYWM4OGE4MWMxMjczOSAxMDA2NDQKLS0tIGEvZnMvcmVtYXBfcmFuZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9yZW1hcF9yYW5nZS5jCkBAIC01MDMsNyAmIzQzOzUwMyw3IEBAIGludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSkKIAlpZiAoIShmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfUkVBRCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHNhbWUtJmd0O3Jlc2VydmVkMSB8fCBzYW1lLSZndDtyZXNlcnZlZDIpCiYjNDM7CWlmIChzYW1lLSZndDtyZXNlcnZlZDEgfHwgKHNhbWUtJmd0O2ZsYWdzICZhbXA7IH5GSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1MpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW9mZiA9IHNhbWUtJmd0O3NyY19vZmZzZXQ7CkBAIC01NTEsMTIgJiM0Mzs1NTEsMjkgQEAgaW50IHZmc19kZWR1cGVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICpzYW1lKQogCQlkZWR1cGVkID0gdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShmaWxlLCBvZmYsIGZkX2ZpbGUoZHN0X2ZkKSwKIAkJCQkJCSAgICBpbmZvLSZndDtkZXN0X29mZnNldCwgbGVuLAogCQkJCQkJICAgIFJFTUFQX0ZJTEVfQ0FOX1NIT1JURU4pOwotCQlpZiAoZGVkdXBlZCA9PSAtRUJBREUpCiYjNDM7CQlpZiAoZGVkdXBlZCA9PSAtRUJBREUpIHsKIAkJCWluZm8tJmd0O3N0YXR1cyA9IEZJTEVfREVEVVBFX1JBTkdFX0RJRkZFUlM7Ci0JCWVsc2UgaWYgKGRlZHVwZWQgJmx0OyAwKQomIzQzOwkJCWlmIChzYW1lLSZndDtmbGFncyAmYW1wOyBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1MpIHsKJiM0MzsJCQkJdTY0IHN0ZXAgPSBpX2Jsb2Nrc2l6ZShzcmMpOwomIzQzOwomIzQzOwkJCQkvKgomIzQzOwkJCQkgKiBTdGFja2VkIGZpbGVzeXN0ZW1zIChlLmcuIG92ZXJsYXlmcykgY2FuCiYjNDM7CQkJCSAqIHJlcG9ydCBhIGRlZ2VuZXJhdGUgYmxvY2sgc2l6ZSBoZXJlOyBhCiYjNDM7CQkJCSAqIG9uZS1ieXRlIHN0ZXAgd291bGQgb25seSBtaXNhbGlnbiB0aGUKJiM0MzsJCQkJICogbmV4dCBjYWxsLCBzbyBhZHZhbmNlIHBhc3QgdGhlIHdob2xlCiYjNDM7CQkJCSAqIHJlcXVlc3QgaW5zdGVhZC4KJiM0MzsJCQkJICovCiYjNDM7CQkJCWlmIChzdGVwICZsdDs9IDEpCiYjNDM7CQkJCQlzdGVwID0gbGVuOwomIzQzOwkJCQlpbmZvLSZndDtieXRlc19kZWR1cGVkID0gbWluX3QodTY0LCBzdGVwLCBsZW4pOwomIzQzOwkJCX0KJiM0MzsJCX0gZWxzZSBpZiAoZGVkdXBlZCAmbHQ7IDApIHsKIAkJCWluZm8tJmd0O3N0YXR1cyA9IGRlZHVwZWQ7Ci0JCWVsc2UKJiM0MzsJCX0gZWxzZSBpZiAoc2FtZS0mZ3Q7ZmxhZ3MgJmFtcDsgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTKSB7CiYjNDM7CQkJaW5mby0mZ3Q7Ynl0ZXNfZGVkdXBlZCA9IGRlZHVwZWQ7CiYjNDM7CQl9IGVsc2UgewogCQkJaW5mby0mZ3Q7Ynl0ZXNfZGVkdXBlZCA9IGxlbjsKJiM0MzsJCX0KIAogbmV4dF9sb29wOgogCQlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oCmluZGV4IGJkODcyNjJmMmUzNDkuLjQ3MWY2OThiZWFhOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oCkBAIC0xNzgsMTMgJiM0MzsxNzgsMTYgQEAgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlX2luZm8gewogCV9fdTMyIHJlc2VydmVkOwkJLyogbXVzdCBiZSB6ZXJvICovCiB9OwogCiYjNDM7LyogZmxhZ3MgZm9yIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqLwomIzQzOyNkZWZpbmUgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTICgxVSAmbHQ7Jmx0OyAwKQomIzQzOwogLyogZnJvbSBzdHJ1Y3QgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzICovCiBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgewogCV9fdTY0IHNyY19vZmZzZXQ7CS8qIGluIC0gc3RhcnQgb2YgZXh0ZW50IGluIHNvdXJjZSAqLwogCV9fdTY0IHNyY19sZW5ndGg7CS8qIGluIC0gbGVuZ3RoIG9mIGV4dGVudCAqLwogCV9fdTE2IGRlc3RfY291bnQ7CS8qIGluIC0gdG90YWwgZWxlbWVudHMgaW4gaW5mbyBhcnJheSAqLwogCV9fdTE2IHJlc2VydmVkMTsJLyogbXVzdCBiZSB6ZXJvICovCi0JX191MzIgcmVzZXJ2ZWQyOwkvKiBtdXN0IGJlIHplcm8gKi8KJiM0MzsJX191MzIgZmxhZ3M7CQkvKiBpbiAtIEZJTEVfREVEVVBFX1JBTkdFXyogZmxhZ3MgKi8KIAlzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VfaW5mbyBpbmZvW107CiB9OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzQzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGZpbGVfZGVkdXBlX3JhbmdlYCBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBmb2N1c2luZyBvbiBlbmhhbmNpbmcgdGhlIHJlcG9ydGluZyB3aXRoaW4gdGhlIGRlZHVwbGljYXRpb24gcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgIGZ1bmN0aW9uIGluIGBmcy9yZW1hcF9yYW5nZS5jYCBhbmQgdGhlIGFzc29jaWF0ZWQgdXNlci1zcGFjZSBBUEkgc3RydWN0dXJlIGBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VgIGluIGBpbmNsdWRlL3VhcGkvbGludXgvZnMuaGAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHJlbmFtaW5nIGByZXNlcnZlZDJgIHRvIGBmbGFnc2AgaW4gYHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZWAsIHdoaWNoIGltbWVkaWF0ZWx5IHNpZ25hbHMgYSBzZW1hbnRpYyBzaGlmdCDigJMgd2UmIzM5O3JlIG1vdmluZyBmcm9tIGEgcmVzZXJ2ZWQgZmllbGQgdG8gc29tZXRoaW5nIG1vcmUgYWN0aXZlbHkgdXNlZCBmb3IgY29udHJvbC4gVGhlIGludHJvZHVjdGlvbiBvZiB0aGUgYEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTU2AgZmxhZyBpcyB0aGUga2V5IHRha2Vhd2F5LCBJIHN1c3BlY3QuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgZ29hbCBvZiB0aGlzIGlzIHRvIG1ha2UgaXQgbXVjaCBjbGVhcmVyIHRvIHRoZSB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uIGFib3V0IHRoZSBwcm9ncmVzcyBvZiBhIGRlZHVwZSBvcGVyYXRpb24sIGFsbG93aW5nIGZvciBiZXR0ZXIgZmVlZGJhY2sgYW5kIGhhbmRsaW5nIG9mIHBvdGVudGlhbGx5IGxvbmctcnVubmluZyBvcGVyYXRpb25zLgoKTm93LCBsb29raW5nIGF0IHRoZSBjb2RlLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgaG93IHRoaXMgbmV3IGZsYWcgaXMgYmVpbmcgdXRpbGl6ZWQuIEluc3RlYWQgb2YgY2hlY2tpbmcgYHNhbWUtJmd0O3Jlc2VydmVkMmAsIHRoZSBwYXRjaCBub3cgY2hlY2tzIGBzYW1lLSZndDtmbGFncyAmYW1wOyB+RklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTYCBpbnNpZGUgdGhlIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgIGZ1bmN0aW9uLCBhbmQgdGhlIGBpbmZvLSZndDtieXRlc19kZWR1cGVkYCB2YWx1ZSBpcyBiZWluZyB1cGRhdGVkIGJhc2VkIG9uIHRoZSBzdGF0ZSBvZiB0aGF0IGZsYWcuCgpUaGUgY29kZSBzbmlwcGV0IGNhdWdodCBteSBhdHRlbnRpb24uIEl0IHNob3dzIHRoZSBjb25kaXRpb25hbCB1cGRhdGUgb2YgYGluZm8tJmd0O2J5dGVzX2RlZHVwZWRgLiBIZXJlJiMzOTtzIHdoZXJlIHRoZSBsb2dpYyBiZWNvbWVzIGltcG9ydGFudDoKYGBgYwoJCWlmIChkZWR1cGVkID09IC1FQkFERSkgewoJCQlpbmZvLSZndDtzdGF0dXMgPSBGSUxFX0RFRFVQRV9SQU5HRV9ESUZGRVJTOwoJCQlpZiAoc2FtZS0mZ3Q7ZmxhZ3MgJmFtcDsgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTKSB7CgkJCQl1NjQgc3RlcCA9IGlfYmxvY2tzaXplKHNyYyk7Ci4uLgoJCQkJaWYgKHN0ZXAgJmx0Oz0gMSkKCQkJCQlzdGVwID0gbGVuOwoJCQkJaW5mby0mZ3Q7Ynl0ZXNfZGVkdXBlZCA9IG1pbl90KHU2NCwgc3RlcCwgbGVuKTsKCQkJfQoJCX0gZWxzZSBpZiAoZGVkdXBlZCAmbHQ7IDApIHsKCQkJaW5mby0mZ3Q7c3RhdHVzID0gZGVkdXBlZDsKCQl9IGVsc2UgaWYgKHNhbWUtJmd0O2ZsYWdzICZhbXA7IEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykgewoJCQlpbmZvLSZndDtieXRlc19kZWR1cGVkID0gZGVkdXBlZDsKCQl9IGVsc2UgewoJCQlpbmZvLSZndDtieXRlc19kZWR1cGVkID0gbGVuOwoJCX0KYGBgCklmIGBkZWR1cGVkID09IC1FQkFERWAgKHdoaWNoIEkgYXNzdW1lIGlzIGFuIGVycm9yIGNvZGUpLCB0aGVuIGBpbmZvLSZndDtieXRlc19kZWR1cGVkYCBpcyBOT1QgdXBkYXRlZCwgdW5sZXNzIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgIGlzIHNldC4gVGhlbiBpdCBjYWxjdWxhdGVzIHRoZSBhbW91bnQgb2YgcHJvZ3Jlc3MgdGhhdCB3YXMgbWFkZSBiZWZvcmUgdGhlIGVycm9yIGFuZCBwb3B1bGF0ZXMgaXQgaW4gYGluZm8tJmd0O2J5dGVzX2RlZHVwZWRgLiBJZiB0aGUgZmxhZyBpc24mIzM5O3Qgc2V0LCBpdCBkb2VzbiYjMzk7dC4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgb3JpZ2luYWwgY29kZSwgYW5kIEkmIzM5O20gYXNraW5nIG15c2VsZiwgJiMzOTtXYWl0LCBob3cgd2FzIHRoaXMgaGFuZGxlZCBiZWZvcmU/JiMzOTsgSSBhbSBhIGxpdHRsZSBjb25jZXJuZWQuIENoZWNraW5nIHRoZSBwcmlvciBjb2RlIHNlZ21lbnQsIG15IGNvbmNlcm5zIGFyZSB2aW5kaWNhdGVkLCBgaW5mby0mZ3Q7Ynl0ZXNfZGVkdXBlZGAgd2FzICpub3QqIHVwZGF0ZWQgaW4gdGhlIGVycm9yIHBhdGggYmVmb3JlLiBTbywgdGhpcyBwYXRjaCBpc24mIzM5O3QganVzdCBhIHNpbXBsZSBmZWF0dXJlIGFkZGl0aW9uOyBpdCBpcyBjaGFuZ2luZyBiZWhhdmlvciwgdG8gcmVwb3J0IHByb2dyZXNzIGV2ZW4gaWYgdGhlcmUgaXMgYW4gZXJyb3IuIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhpcyBpc24mIzM5O3QgZ29pbmcgdG8gYnJlYWsgYW55IGV4aXN0aW5nIHVzZXIgc3BhY2UgYXBwbGljYXRpb25zLgoKVGhlIGBpbmZvYCB2YXJpYWJsZSwgZnJvbSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlLCBpcyBwYXJ0IG9mIGBzYW1lYCwgd2hpY2ggb3JpZ2luYXRlcyBmcm9tIHVzZXItc3BhY2UuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGhvdyBpcyB0aGUgc3RydWN0dXJlICphY3R1YWxseSogdXNlZD8gSXMgaXQgY29waWVkIGZyb20gdXNlci1zcGFjZSwgbW9kaWZpZWQgaW4ga2VybmVsLXNwYWNlLCBhbmQgdGhlbiBjb3BpZWQgYmFjaz8gSSBuZWVkIHRvIGxvb2sgYXQgaG93IHRoaXMgYHNhbWVgIHN0cnVjdCBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHJlc3VsdHMgYXJlIHJldHVybmVkIHRvIHVzZXIgc3BhY2UuIEkgYW0gZ29pbmcgdG8gc2VlIGhvdyBgc2FtZWAgZ2V0cyBpdHMgaW5pdGlhbCB2YWx1ZXMsIHNvIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZWAgZnVuY3Rpb24gb3Igc29tZXRoaW5nIHNpbWlsYXIgdXNpbmcgdGhlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB1dGlsaXR5LiBUaGF0IHdpbGwgc2hvdyBtZSB0aGUgZGF0YSBmbG93IGFuZCBpZiB0aGUga2VybmVsIGlzIGV4cG9zaW5nIGFueSBzdGF0ZSB0aGF0IG5lZWRzIHByb3RlY3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zmc19kZWR1cGVfZmlsZV9yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb2N0bC5jPTQxNT1zdGF0aWMgaW50IGlvY3RsX2ZpbGVfZGVkdXBlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmZzL2lvY3RsLmMtNDQxLVx0c2FtZS1cdTAwM2VkZXN0X2NvdW50ID0gY291bnQ7XG5mcy9pb2N0bC5jOjQ0MjpcdHJldCA9IHZmc19kZWR1cGVfZmlsZV9yYW5nZShmaWxlLCBzYW1lKTtcbmZzL2lvY3RsLmMtNDQzLVx0aWYgKHJldClcbi0tXG5mcy9vdmVybGF5ZnMvZmlsZS5jPTUyNz1zdGF0aWMgbG9mZl90IG92bF9jb3B5ZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZV9pbiwgbG9mZl90IHBvc19pbixcbi0tXG5mcy9vdmVybGF5ZnMvZmlsZS5jLTU4MC1cdFx0Y2FzZSBPVkxfREVEVVBFOlxuZnMvb3ZlcmxheWZzL2ZpbGUuYzo1ODE6XHRcdFx0cmV0ID0gdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShyZWFsZmlsZV9pbiwgcG9zX2luLFxuZnMvb3ZlcmxheWZzL2ZpbGUuYy01ODItXHRcdFx0XHRcdFx0XHRyZWFsZmlsZV9vdXQsIHBvc19vdXQsIGxlbixcbi0tXG5mcy9yZW1hcF9yYW5nZS5jPTE4MT1zdGF0aWMgdm9pZCB2ZnNfdW5sb2NrX3R3b19mb2xpb3Moc3RydWN0IGZvbGlvICpmb2xpbzEsIHN0cnVjdCBmb2xpbyAqZm9saW8yKVxuLS1cbmZzL3JlbWFwX3JhbmdlLmMtMTkxLSAqL1xuZnMvcmVtYXBfcmFuZ2UuYzoxOTI6c3RhdGljIGludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VfY29tcGFyZShzdHJ1Y3QgZmlsZSAqc3JjLCBsb2ZmX3Qgc3Jjb2ZmLFxuZnMvcmVtYXBfcmFuZ2UuYy0xOTMtXHRcdFx0XHRcdCBzdHJ1Y3QgZmlsZSAqZGVzdCwgbG9mZl90IGRzdG9mZixcbi0tXG5mcy9yZW1hcF9yYW5nZS5jPTI3Nz1fX2dlbmVyaWNfcmVtYXBfZmlsZV9yYW5nZV9wcmVwKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxuLS1cbmZzL3JlbWFwX3JhbmdlLmMtMzQwLVx0XHRpZiAoIUlTX0RBWChpbm9kZV9pbikpXG5mcy9yZW1hcF9yYW5nZS5jOjM0MTpcdFx0XHRyZXQgPSB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VfY29tcGFyZShmaWxlX2luLCBwb3NfaW4sXG5mcy9yZW1hcF9yYW5nZS5jLTM0Mi1cdFx0XHRcdFx0ZmlsZV9vdXQsIHBvc19vdXQsICpsZW4sIFx1MDAyNmlzX3NhbWUpO1xuLS1cbmZzL3JlbWFwX3JhbmdlLmM9NDE2PXN0YXRpYyBib29sIG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5mcy9yZW1hcF9yYW5nZS5jLTQzMS1cbmZzL3JlbWFwX3JhbmdlLmM6NDMyOmxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXG5mcy9yZW1hcF9yYW5nZS5jLTQzMy1cdFx0XHRcdCBzdHJ1Y3QgZmlsZSAqZHN0X2ZpbGUsIGxvZmZfdCBkc3RfcG9zLFxuLS1cbmZzL3JlbWFwX3JhbmdlLmMtNDQxLVx0LypcbmZzL3JlbWFwX3JhbmdlLmM6NDQyOlx0ICogVGhpcyBpcyByZWR1bmRhbnQgaWYgY2FsbGVkIGZyb20gdmZzX2RlZHVwZV9maWxlX3JhbmdlKCksIGJ1dCBvdGhlclxuZnMvcmVtYXBfcmFuZ2UuYy00NDMtXHQgKiBjYWxsZXJzIG5lZWQgaXQgYW5kIGl0JiMzOTtzIG5vdCBwZXJmb3JtYW5jZSBzZXNpdGl2ZS4uLlxuLS1cbmZzL3JlbWFwX3JhbmdlLmMtNDg5LX1cbmZzL3JlbWFwX3JhbmdlLmM6NDkwOkVYUE9SVF9TWU1CT0wodmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZSk7XG5mcy9yZW1hcF9yYW5nZS5jLTQ5MS1cbmZzL3JlbWFwX3JhbmdlLmM6NDkyOmludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSlcbmZzL3JlbWFwX3JhbmdlLmMtNDkzLXtcbi0tXG5mcy9yZW1hcF9yYW5nZS5jLTU1MC1cbmZzL3JlbWFwX3JhbmdlLmM6NTUxOlx0XHRkZWR1cGVkID0gdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShmaWxlLCBvZmYsIGZkX2ZpbGUoZHN0X2ZkKSxcbmZzL3JlbWFwX3JhbmdlLmMtNTUyLVx0XHRcdFx0XHRcdCAgICBpbmZvLVx1MDAzZWRlc3Rfb2Zmc2V0LCBsZW4sXG4tLVxuZnMvcmVtYXBfcmFuZ2UuYy01ODMtfVxuZnMvcmVtYXBfcmFuZ2UuYzo1ODQ6RVhQT1JUX1NZTUJPTCh2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2UpO1xuLS1cbmluY2x1ZGUvbGludXgvZnMuaD0yMDg1PWV4dGVybiBsb2ZmX3QgdmZzX2Nsb25lX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXG4tLVxuaW5jbHVkZS9saW51eC9mcy5oLTIwODctXHRcdFx0XHQgICBsb2ZmX3QgbGVuLCB1bnNpZ25lZCBpbnQgcmVtYXBfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9mcy5oOjIwODg6ZXh0ZXJuIGludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjA4OS1cdFx0XHRcdCBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKnNhbWUpO1xuaW5jbHVkZS9saW51eC9mcy5oOjIwOTA6ZXh0ZXJuIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjA5MS1cdFx0XHRcdFx0c3RydWN0IGZpbGUgKmRzdF9maWxlLCBsb2ZmX3QgZHN0X3BvcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ4MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIG9mIHRoZSB0aG91Z2h0IHByb2Nlc3MgZGVzY3JpYmVkOgoKKipEaXZpbmcgaW50byBgaW9jdGxfZmlsZV9kZWR1cGVfcmFuZ2VgKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGVkdXBsaWNhdGlvbiBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gY29kZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgYGlvY3RsX2ZpbGVfZGVkdXBlX3JhbmdlYCBjYWxsIGlzIGltcGxlbWVudGVkLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyB3aXRoIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBoZWFkIHN0cmFpZ2h0IG92ZXIgdG8gYGZzL2lvY3RsLmNgLiBUaGF0IHNob3VsZCBjb250YWluIHRoZSBwcmltYXJ5IGxvZ2ljIGZvciBoYW5kbGluZyB0aGUgZmlsZSBzeXN0ZW0gY29udHJvbCBvcGVyYXRpb25zLCBpbmNsdWRpbmcgdGhlIGRlZHVwZSBpb2N0bC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQgaW4gdGhlcmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMsIGVycm9yIGhhbmRsaW5nLCBhbmQgdGhlIGNvcmUgYWxnb3JpdGhtIGZvciBmaW5kaW5nIGFuZCBtZXJnaW5nIHRoZSBkdXBsaWNhdGUgZXh0ZW50cy4gRnJvbSB0aGVyZSwgSSBjYW4gZmlndXJlIG91dCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UgYW5kIGFueSBmaWxlIHN5c3RlbSBzcGVjaWZpYyBudWFuY2VzLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9pb2N0bC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAwOlx0fVxuIDQwMTpcdFxuIDQwMjpcdHN0YXRpYyBpbnQgaW9jdGxfZnN0aGF3KHN0cnVjdCBmaWxlICpmaWxwKVxuIDQwMzpcdHtcbiA0MDQ6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBmaWxlX2lub2RlKGZpbHApLVx1MDAzZWlfc2I7XG4gNDA1Olx0XG4gNDA2Olx0XHRpZiAoIW5zX2NhcGFibGUoc2ItXHUwMDNlc191c2VyX25zLCBDQVBfU1lTX0FETUlOKSlcbiA0MDc6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiA0MDg6XHRcbiA0MDk6XHRcdC8qIFRoYXcgKi9cbiA0MTA6XHRcdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZXRoYXdfc3VwZXIpXG4gNDExOlx0XHRcdHJldHVybiBzYi1cdTAwM2VzX29wLVx1MDAzZXRoYXdfc3VwZXIoc2IsIEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLCBOVUxMKTtcbiA0MTI6XHRcdHJldHVybiB0aGF3X3N1cGVyKHNiLCBGUkVFWkVfSE9MREVSX1VTRVJTUEFDRSwgTlVMTCk7XG4gNDEzOlx0fVxuIDQxNDpcdFxuIDQxNTpcdHN0YXRpYyBpbnQgaW9jdGxfZmlsZV9kZWR1cGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsXG4gNDE2Olx0XHRcdFx0XHQgICBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgX191c2VyICphcmdwKVxuIDQxNzpcdHtcbiA0MTg6XHRcdHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSA9IE5VTEw7XG4gNDE5Olx0XHRpbnQgcmV0O1xuIDQyMDpcdFx0dW5zaWduZWQgbG9uZyBzaXplO1xuIDQyMTpcdFx0dTE2IGNvdW50O1xuIDQyMjpcdFxuIDQyMzpcdFx0aWYgKGdldF91c2VyKGNvdW50LCBcdTAwMjZhcmdwLVx1MDAzZWRlc3RfY291bnQpKSB7XG4gNDI0Olx0XHRcdHJldCA9IC1FRkFVTFQ7XG4gNDI1Olx0XHRcdGdvdG8gb3V0O1xuIDQyNjpcdFx0fVxuIDQyNzpcdFxuIDQyODpcdFx0c2l6ZSA9IHN0cnVjdF9zaXplKHNhbWUsIGluZm8sIGNvdW50KTtcbiA0Mjk6XHRcdGlmIChzaXplIFx1MDAzZSBQQUdFX1NJWkUpIHtcbiA0MzA6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiA0MzE6XHRcdFx0Z290byBvdXQ7XG4gNDMyOlx0XHR9XG4gNDMzOlx0XG4gNDM0Olx0XHRzYW1lID0gbWVtZHVwX3VzZXIoYXJncCwgc2l6ZSk7XG4gNDM1Olx0XHRpZiAoSVNfRVJSKHNhbWUpKSB7XG4gNDM2Olx0XHRcdHJldCA9IFBUUl9FUlIoc2FtZSk7XG4gNDM3Olx0XHRcdHNhbWUgPSBOVUxMO1xuIDQzODpcdFx0XHRnb3RvIG91dDtcbiA0Mzk6XHRcdH1cbiA0NDA6XHRcbiA0NDE6XHRcdHNhbWUtXHUwMDNlZGVzdF9jb3VudCA9IGNvdW50O1xuIDQ0MjpcdFx0cmV0ID0gdmZzX2RlZHVwZV9maWxlX3JhbmdlKGZpbGUsIHNhbWUpO1xuIDQ0MzpcdFx0aWYgKHJldClcbiA0NDQ6XHRcdFx0Z290byBvdXQ7XG4gNDQ1Olx0XG4gNDQ2Olx0XHRyZXQgPSBjb3B5X3RvX3VzZXIoYXJncCwgc2FtZSwgc2l6ZSk7XG4gNDQ3Olx0XHRpZiAocmV0KVxuIDQ0ODpcdFx0XHRyZXQgPSAtRUZBVUxUO1xuIDQ0OTpcdFxuIDQ1MDpcdG91dDpcbiA0NTE6XHRcdGtmcmVlKHNhbWUpO1xuIDQ1MjpcdFx0cmV0dXJuIHJldDtcbiA0NTM6XHR9XG4gNDU0Olx0XG4gNDU1Olx0c3RhdGljIGludCBpb2N0bF9nZXRmc3V1aWQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmdwKVxuIDQ1NjpcdHtcbiA0NTc6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBmaWxlX2lub2RlKGZpbGUpLVx1MDAzZWlfc2I7XG4gNDU4Olx0XHRzdHJ1Y3QgZnN1dWlkMiB1ID0geyAubGVuID0gc2ItXHUwMDNlc191dWlkX2xlbiwgfTtcbiA0NTk6XHRcbiA0NjA6XHRcdGlmICghc2ItXHUwMDNlc191dWlkX2xlbilcbiA0NjE6XHRcdFx0cmV0dXJuIC1FTk9UVFk7XG4gNDYyOlx0XG4gNDYzOlx0XHRtZW1jcHkoXHUwMDI2dS51dWlkWzBdLCBcdTAwMjZzYi1cdTAwM2VzX3V1aWQsIHNiLVx1MDAzZXNfdXVpZF9sZW4pO1xuIDQ2NDpcdFxuIDQ2NTpcdFx0cmV0dXJuIGNvcHlfdG9fdXNlcihhcmdwLCBcdTAwMjZ1LCBzaXplb2YodSkpID8gLUVGQVVMVCA6IDA7XG4gNDY2Olx0fVxuIDQ2NzpcdFxuIDQ2ODpcdHN0YXRpYyBpbnQgaW9jdGxfZ2V0X2ZzX3N5c2ZzX3BhdGgoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmdwKVxuIDQ2OTpcdHtcbiA0NzA6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBmaWxlX2lub2RlKGZpbGUpLVx1MDAzZWlfc2I7XG4gNDcxOlx0XG4gNDcyOlx0XHRpZiAoIXN0cmxlbihzYi1cdTAwM2VzX3N5c2ZzX25hbWUpKVxuIDQ3MzpcdFx0XHRyZXR1cm4gLUVOT1RUWTtcbiA0NzQ6XHRcbiA0NzU6XHRcdHN0cnVjdCBmc19zeXNmc19wYXRoIHUgPSB7fTtcbiA0NzY6XHRcbiA0Nzc6XHRcdHUubGVuID0gc2NucHJpbnRmKHUubmFtZSwgc2l6ZW9mKHUubmFtZSksIFwmIzM0OyVzLyVzXCYjMzQ7LCBzYi1cdTAwM2VzX3R5cGUtXHUwMDNlbmFtZSwgc2ItXHUwMDNlc19zeXNmc19uYW1lKTtcbiA0Nzg6XHRcbiA0Nzk6XHRcdHJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgXHUwMDI2dSwgc2l6ZW9mKHUpKSA/IC1FRkFVTFQgOiAwO1xuIDQ4MDpcdH1cbiA0ODE6XHRcbiA0ODI6XHQvKlxuIDQ4MzpcdCAqIGRvX3Zmc19pb2N0bCgpIGlzIG5vdCBmb3IgZHJpdmVycyBhbmQgbm90IGludGVuZGVkIHRvIGJlIEVYUE9SVF9TWU1CT0woKSYjMzk7ZC5cbiA0ODQ6XHQgKiBJdCYjMzk7cyBqdXN0IGEgc2ltcGxlIGhlbHBlciBmb3Igc3lzX2lvY3RsIGFuZCBjb21wYXRfc3lzX2lvY3RsLlxuIDQ4NTpcdCAqXG4gNDg2Olx0ICogV2hlbiB5b3UgYWRkIGFueSBuZXcgY29tbW9uIGlvY3RscyB0byB0aGUgc3dpdGNoZXMgYWJvdmUgYW5kIGJlbG93LFxuIDQ4NzpcdCAqIHBsZWFzZSBlbnN1cmUgdGhleSBoYXZlIGNvbXBhdGlibGUgYXJndW1lbnRzIGluIGNvbXBhdCBtb2RlLlxuIDQ4ODpcdCAqXG4gNDg5Olx0ICogVGhlIExTTSBtYWlsaW5nIGxpc3Qgc2hvdWxkIGFsc28gYmUgbm90aWZpZWQgb2YgYW55IGNvbW1hbmQgYWRkaXRpb25zIG9yXG4gNDkwOlx0ICogY2hhbmdlcywgYXMgc3BlY2lmaWMgTFNNcyBtYXkgYmUgYWZmZWN0ZWQuXG4gNDkxOlx0ICovXG4gNDkyOlx0c3RhdGljIGludCBkb192ZnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBmZCxcbiA0OTM6XHRcdFx0XHR1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiA0OTQ6XHR7XG4gNDk1Olx0XHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcbiA0OTY6XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApO1xuIDQ5NzpcdFxuIDQ5ODpcdFx0c3dpdGNoIChjbWQpIHtcbiA0OTk6XHRcdGNhc2UgRklPQ0xFWDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIxNwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDg2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBTYWZldHkgb2YgYHZmc19kZWR1cGVfZmlsZV9yYW5nZWAgYW5kIGl0cyBJbnRlcmFjdGlvbiB3aXRoIFVzZXItU3BhY2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYG1lbWR1cF91c2VyYCBiZWluZyB1c2VkLiBUaGF0JiMzOTtzIG15IGZpcnN0IHNpZ25hbCB0byBzdGFydCB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBXZSYjMzk7cmUgYWxsb2NhdGluZyBhbmQgY29weWluZyBhIHN0cnVjdHVyZSwgYHNhbWVgLCBkaXJlY3RseSBmcm9tIHVzZXItc3BhY2UgdXNpbmcgYG1lbWR1cF91c2VyKGFyZ3AsIHNpemUpYC4gVGhlbiB3ZSBjYWxsIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2UoZmlsZSwgc2FtZSlgLiBJZiBldmVyeXRoaW5nIGdvZXMgd2VsbCAocmV0dXJucyAwKSwgd2UgY29weSBpdCAqYmFjayogdG8gdXNlci1zcGFjZSB3aXRoIGBjb3B5X3RvX3VzZXIoYXJncCwgc2FtZSwgc2l6ZSlgLgoKUmlnaHQgYXdheSwgYWxhcm0gYmVsbHMgc3RhcnQgZ29pbmcgb2ZmLiBgbWVtZHVwX3VzZXJgIGNvcGllcyB0aGUgKmVudGlyZSogc3RydWN0dXJlIGZyb20gdXNlci1zcGFjZS4gU28gYW55IHVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIGBzYW1lYCBhcmUgZXNzZW50aWFsbHkgd2hhdGV2ZXIgZ2FyYmFnZSB0aGUgdXNlciBwcm9jZXNzIGhhcHBlbmVkIHRvIGhhdmUgaW4gdGhhdCBtZW1vcnkgcmVnaW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJiMzOTt0IG9wZW5pbmcgYSB2dWxuZXJhYmlsaXR5LgoKV2FpdCwgaWYgdGhlIHVzZXIgcHJvdmlkZXMgdW5pbml0aWFsaXplZCBtZW1vcnksIGBtZW1kdXBfdXNlcmAgY29waWVzIGl0LCBhbmQgdGhlbiBpdCBnZXRzIGNvcGllZCAqYmFjayogdG8gdXNlci1zcGFjZS4gIFRoZXJlJiMzOTtzIG5vIGtlcm5lbCBtZW1vcnkgbGVhayBoZXJlLCBpcyB0aGVyZT8gVGhlIG1lbW9yeSBvcmlnaW5hdGVkIGluIHVzZXItc3BhY2UsIHNvIGV2ZW4gaWYgaXQmIzM5O3MgZ2FyYmFnZSwgdGhlIGtlcm5lbCBpcyBqdXN0IGFjdGluZyBhcyBhIHBhc3MtdGhyb3VnaC4gT2theSwgc28gZmFyIHNvIGdvb2QuIEl0JiMzOTtzIGVzc2VudGlhbGx5IHJldHVybmluZyB0aGUgc2FtZSBnYXJiYWdlIHRoZSB1c2VyIHByb3ZpZGVkLgoKQnV0IHdoYXQgaWYgYHNpemVgIGlzIGxhcmdlciB0aGFuIHdoYXQgdGhlIHVzZXIgKmFjdHVhbGx5KiBpbml0aWFsaXplZD8gU2FtZSBkZWFsLiBgbWVtZHVwX3VzZXJgIGNvcGllcyBgc2l6ZWAgYnl0ZXMsIGV2ZW4gaWYgdGhlIHVzZXItc3BhY2UgcHJvZ3JhbSBvbmx5IGluaXRpYWxpemVkIGEgc21hbGxlciBjaHVuay4gIFRoYXQmIzM5O3MgYSB1c2VyLXNwYWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLCBub3QgYSBrZXJuZWwgbWVtb3J5IGxlYWsuIEkgbmVlZCB0byBub3RlIHRoYXQgaW4gbXkgY29tbWVudHMuCgpOb3csIHdoYXQgaWYgYGluZm8tJmd0O2J5dGVzX2RlZHVwZWRgICppc24mIzM5O3QqIHVwZGF0ZWQgYnkgdGhlIGtlcm5lbCBhbmQgdGhlbiBnZXRzIGNvcGllZCBiYWNrIHRvIHVzZXItc3BhY2U/ICBTaW5jZSB0aGUgZGF0YSB3YXMgY29waWVkIEZST00gdXNlci1zcGFjZSwgaXQganVzdCByZXR1cm5zIHRoZSBzYW1lIHVuaW5pdGlhbGl6ZWQgZ2FyYmFnZSB0byB1c2VyLXNwYWNlLCBzbyB0aGVyZSYjMzk7cyAqc3RpbGwqIG5vIGtlcm5lbCBtZW1vcnkgbGVhay4gSSBmZWVsIGdvb2QgYWJvdXQgdGhhdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLCB0aG91Z2guCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbiBhbmQgbG9vayBhdCB0aGUgbG9naWMgYXJvdW5kIGBpbmZvLSZndDtieXRlc19kZWR1cGVkYC4gSSBuZWVkIHRvIGVuc3VyZSBpdCYjMzk7cyBpbml0aWFsaXplZCBjb3JyZWN0bHkgaW4gKmFsbCogY2FzZXMuIExldCYjMzk7cyBzZWUuLi4gQWgsIHRoZXJlJiMzOTtzIGEgcGF0Y2ggdGhhdCBjb25kaXRpb25hbGx5IHVwZGF0ZXMgYGluZm8tJmd0O2J5dGVzX2RlZHVwZWRgIGJhc2VkIG9uIGBzYW1lLSZndDtmbGFncyAmYW1wOyBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgLgoKSWYgdGhlIGZsYWcgaXMgKm5vdCogc2V0LCBgaW5mby0mZ3Q7Ynl0ZXNfZGVkdXBlZGAgaXNuJiMzOTt0IHVwZGF0ZWQgd2hlbiBgZGVkdXBlZCA9PSAtRUJBREVgIG9yIHdoZW4gYGRlZHVwZWQgJmx0OyAwYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHRoZSAqb2xkKiBsb2dpYzoKCmBgYGMKCQlpZiAoZGVkdXBlZCA9PSAtRUJBREUpCgkJCWluZm8tJmd0O3N0YXR1cyA9IEZJTEVfREVEVVBFX1JBTkdFX0RJRkZFUlM7CgkJZWxzZSBpZiAoZGVkdXBlZCAmbHQ7IDApCgkJCWluZm8tJmd0O3N0YXR1cyA9IGRlZHVwZWQ7CgkJZWxzZQoJCQlpbmZvLSZndDtieXRlc19kZWR1cGVkID0gbGVuOwpgYGAKClByZXZpb3VzbHksIGlmIGBkZWR1cGVkID09IC1FQkFERWAsIHRoZW4gYGluZm8tJmd0O2J5dGVzX2RlZHVwZWRgIHdhcyAqbm90KiB1cGRhdGVkLiBTYW1lIGZvciBgZGVkdXBlZCAmbHQ7IDBgLiBJZiBgZGVkdXBlZCAmZ3Q7PSAwYCwgYGluZm8tJmd0O2J5dGVzX2RlZHVwZWRgIHdhcyBhbHdheXMgdXBkYXRlZCB0byBgbGVuYC4KCk5vdyB3aXRoIHRoZSBwYXRjaCwgdGhlIGNvZGUgbG9va3MgbGlrZToKCmBgYGMKCQlpZiAoZGVkdXBlZCA9PSAtRUJBREUpIHsKCQkJaW5mby0mZ3Q7c3RhdHVzID0gRklMRV9ERURVUEVfUkFOR0VfRElGRkVSUzsKCQkJaWYgKHNhbWUtJmd0O2ZsYWdzICZhbXA7IEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykgewoJCQkJLi4uCgkJCQlpbmZvLSZndDtieXRlc19kZWR1cGVkID0gbWluX3QodTY0LCBzdGVwLCBsZW4pOwoJCQl9CgkJfSBlbHNlIGlmIChkZWR1cGVkICZsdDsgMCkgewoJCQlpbmZvLSZndDtzdGF0dXMgPSBkZWR1cGVkOwoJCX0gZWxzZSBpZiAoc2FtZS0mZ3Q7ZmxhZ3MgJmFtcDsgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTKSB7CgkJCWluZm8tJmd0O2J5dGVzX2RlZHVwZWQgPSBkZWR1cGVkOwoJCX0gZWxzZSB7CgkJCWluZm8tJmd0O2J5dGVzX2RlZHVwZWQgPSBsZW47CgkJfQpgYGAKCk5vdywgaWYgYGRlZHVwZWQgJmd0Oz0gMGAgKmFuZCogdGhlIGZsYWcgaXMgKm5vdCogc2V0LCBgaW5mby0mZ3Q7Ynl0ZXNfZGVkdXBlZCA9IGxlbmAgaXMgZXhlY3V0ZWQgKHRoZSBgZWxzZWAgYnJhbmNoKS4gSWYgdGhlIGZsYWcgKmlzKiBzZXQsIGBpbmZvLSZndDtieXRlc19kZWR1cGVkID0gZGVkdXBlZGAuCgpTbywgYGluZm8tJmd0O2J5dGVzX2RlZHVwZWRgIGlzIG5vdyB1cGRhdGVkIGluIHRoZSAqc2FtZSogY2FzZXMgYXMgYmVmb3JlICpwbHVzKiBhZGRpdGlvbmFsbHkgd2hlbiBgZGVkdXAKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9jdGwuYz00MTU9c3RhdGljIGludCBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5mcy9pb2N0bC5jLTQ0MS1cdHNhbWUtXHUwMDNlZGVzdF9jb3VudCA9IGNvdW50O1xuZnMvaW9jdGwuYzo0NDI6XHRyZXQgPSB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2UoZmlsZSwgc2FtZSk7XG5mcy9pb2N0bC5jLTQ0My1cdGlmIChyZXQpXG4tLVxuZnMvcmVtYXBfcmFuZ2UuYz00MzI9bG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3Bvcyxcbi0tXG5mcy9yZW1hcF9yYW5nZS5jLTQ0MS1cdC8qXG5mcy9yZW1hcF9yYW5nZS5jOjQ0MjpcdCAqIFRoaXMgaXMgcmVkdW5kYW50IGlmIGNhbGxlZCBmcm9tIHZmc19kZWR1cGVfZmlsZV9yYW5nZSgpLCBidXQgb3RoZXJcbmZzL3JlbWFwX3JhbmdlLmMtNDQzLVx0ICogY2FsbGVycyBuZWVkIGl0IGFuZCBpdCYjMzk7cyBub3QgcGVyZm9ybWFuY2Ugc2VzaXRpdmUuLi5cbi0tXG5mcy9yZW1hcF9yYW5nZS5jPTQ5MD1FWFBPUlRfU1lNQk9MKHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUpO1xuZnMvcmVtYXBfcmFuZ2UuYy00OTEtXG5mcy9yZW1hcF9yYW5nZS5jOjQ5MjppbnQgdmZzX2RlZHVwZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKnNhbWUpXG5mcy9yZW1hcF9yYW5nZS5jLTQ5My17XG4tLVxuaW5jbHVkZS9saW51eC9mcy5oPTIwODU9ZXh0ZXJuIGxvZmZfdCB2ZnNfY2xvbmVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZV9pbiwgbG9mZl90IHBvc19pbixcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjA4Ny1cdFx0XHRcdCAgIGxvZmZfdCBsZW4sIHVuc2lnbmVkIGludCByZW1hcF9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjA4ODpleHRlcm4gaW50IHZmc19kZWR1cGVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbmluY2x1ZGUvbGludXgvZnMuaC0yMDg5LVx0XHRcdFx0IHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1OTcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIHRoZSBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCBDYWxsZXJzIGFuZCBTdHJ1Y3R1cmVzKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYC4gVGhlIGNvZGUgdHJhY2VzIHNob3cgdGhhdCB0aGUgb25seSBkaXJlY3QgY2FsbGVyIEkgc2VlIGlzIGBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZWAgd2l0aGluIGBmcy9pb2N0bC5jYC4gVGhhdCBmdW5jdGlvbiBzZWVtcyB0byBiZSByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIGlvY3RsIGNhbGwsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSBpdCBhbGxvY2F0aW5nIHRoZSBgc2FtZWAgYXJyYXkgdXNpbmcgYG1lbWR1cF91c2VyYCwgd2hpY2ggaXNuJiMzOTt0IGVudGlyZWx5IHN1cnByaXNpbmcgaW4gdGhpcyBjb250ZXh0LiBJdCBzdWdnZXN0cyB0aGV5JiMzOTtyZSBsaWtlbHkgZHVwbGljYXRpbmcgZGF0YSBwcm92aWRlZCBieSB1c2Vyc3BhY2UuCgpCdXQgaGFuZyBvbi4uLiBJIG5lZWQgdG8gY29uc2lkZXIgYHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZWAuIFRoaXMgc3RydWN0IGhhcyB0byBiZSB1c2VkIHNvbWV3aGVyZSBiZXNpZGVzIGp1c3QgdGhlIGlvY3RsIHBhdGguIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgb3RoZXIgcG90ZW50aWFsIGNvbnN1bWVycyBvciB1c2VycyBvZiB0aGF0IGRhdGEgc3RydWN0dXJlIGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb2N0bC5jPTQxNT1zdGF0aWMgaW50IGlvY3RsX2ZpbGVfZGVkdXBlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLFxuZnMvaW9jdGwuYzo0MTY6XHRcdFx0XHQgICBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgX191c2VyICphcmdwKVxuZnMvaW9jdGwuYy00MTcte1xuZnMvaW9jdGwuYzo0MTg6XHRzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKnNhbWUgPSBOVUxMO1xuZnMvaW9jdGwuYy00MTktXHRpbnQgcmV0O1xuLS1cbmZzL3JlbWFwX3JhbmdlLmM9NDkwPUVYUE9SVF9TWU1CT0wodmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZSk7XG5mcy9yZW1hcF9yYW5nZS5jLTQ5MS1cbmZzL3JlbWFwX3JhbmdlLmM6NDkyOmludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSlcbmZzL3JlbWFwX3JhbmdlLmMtNDkzLXtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MjA4OD1leHRlcm4gaW50IHZmc19kZWR1cGVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbmluY2x1ZGUvbGludXgvZnMuaDoyMDg5Olx0XHRcdFx0IHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSk7XG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjA5MC1leHRlcm4gbG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3Bvcyxcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaD0xNjc9c3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlX2luZm8ge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oLTE4MC1cbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oOjE4MTovKiBmbGFncyBmb3Igc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICovXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0xODItI2RlZmluZSBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1MgKDFVIFx1MDAzY1x1MDAzYyAwKVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oLTE4NC0vKiBmcm9tIHN0cnVjdCBidHJmc19pb2N0bF9maWxlX2V4dGVudF9zYW1lX2FyZ3MgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oOjE4NTpzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2Uge1xuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMTg2LVx0X191NjQgc3JjX29mZnNldDtcdC8qIGluIC0gc3RhcnQgb2YgZXh0ZW50IGluIHNvdXJjZSAqL1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oPTk5PXN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZV9pbmZvIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0xMTMtLyogZnJvbSBzdHJ1Y3QgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzICovXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaDoxMTQ6c3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlIHtcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTExNS1cdF9fdTY0IHNyY19vZmZzZXQ7XHQvKiBpbiAtIHN0YXJ0IG9mIGV4dGVudCBpbiBzb3VyY2UgKi9cbi0tXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaD0xNjc9c3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlX2luZm8ge1xuLS1cbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTE4MS0vKiBmcm9tIHN0cnVjdCBidHJmc19pb2N0bF9maWxlX2V4dGVudF9zYW1lX2FyZ3MgKi9cbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oOjE4MjpzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2Uge1xudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMTgzLVx0X191NjQgc3JjX29mZnNldDtcdC8qIGluIC0gc3RhcnQgb2YgZXh0ZW50IGluIHNvdXJjZSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY5MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE4MzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQW5hbHlzaXMgb2YgaW9jdGxfZmlsZV9kZWR1cGVfcmFuZ2UgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZWAgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgbWVtZHVwX3VzZXJgIHVzYWdlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7cG90ZW50aWFsIGtlcm5lbCBtZW1vcnkgbGVhaz8mIzM0OyBUaGUgcHJvY2VzcyBpczogIGBtZW1kdXBfdXNlcmAgYWxsb2NhdGVzIG1lbW9yeSwgY29waWVzIHVzZXIgc3BhY2UgZGF0YSwgdGhlIGtlcm5lbCBtb2RpZmllcyBzb21lIGZpZWxkcywgYW5kIHRoZW4gYGNvcHlfdG9fdXNlcmAgc2VuZHMgaXQgYmFjay4gIEJ1dCBob2xkIG9uLiAgVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBgbWVtZHVwX3VzZXJgIGNvcGllcyAqZnJvbSogdXNlciBzcGFjZS4gQW55IHVuaW5pdGlhbGl6ZWQgYnl0ZXMgaW4gdGhlIGBzYW1lYCBzdHJ1Y3QgKHBhZGRpbmcsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHByb3ZpZGVkIGJ5IHVzZXIgc3BhY2UpIGFyZSAqYWxyZWFkeSogdXNlci1wcm92aWRlZCBkYXRhLiBJdCYjMzk7cyBqdXN0IGJlaW5nIGNvcGllZCBiYWNrLiBObyBrZXJuZWwgbWVtb3J5IGxlYWsgdGhlcmUuCgpOb3csIGFtIEkgbWlzc2luZyBzb21lIHBhZGRpbmc/IEkgcXVpY2tseSBjaGVja2VkIHRoZSBgZmlsZV9kZWR1cGVfcmFuZ2VfaW5mb2Agc3RydWN0IGFuZCB0aGVuIHRoZSBgZmlsZV9kZWR1cGVfcmFuZ2VgIHN0cnVjdC4gVGhlIHNpemVzIGFkZCB1cCBwZXJmZWN0bHk7IG5vIHBhZGRpbmcuIEV2ZW4gaWYgdGhlcmUgd2FzIHBhZGRpbmcsIGBtZW1kdXBfdXNlcmAgY29waWVzIHRoZSBleGFjdCBzaXplIGdpdmVuIHRvIGl0IGJ5IHRoZSBgc2l6ZSA9IHN0cnVjdF9zaXplKHNhbWUsIGluZm8sIGNvdW50KTtgIGNhbGwsIHNvIG5vIGlzc3VlcyB0aGVyZS4KClRoZSBuZXh0IHRob3VnaHQgaXMgYHNhbWUtJmd0O2ZsYWdzYC4gSXQmIzM5O3MgdXNlZCBpbiBhIGNvbmRpdGlvbmFsIGNoZWNrOiBgaWYgKHNhbWUtJmd0O3Jlc2VydmVkMSB8fCAoc2FtZS0mZ3Q7ZmxhZ3MgJmFtcDsgfkZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykpYC4gIElmIHVzZXIgc3BhY2UgcHJvdmlkZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgZm9yIGBmbGFnc2AsIGl0IG1pZ2h0IGhhdmUgcmFuZG9tIGJpdHMgc2V0LCBidXQgdGhpcyB3b3VsZCBqdXN0IGxlYWQgdG8gYW4gYC1FSU5WQUxgIHJldHVybi4gVGhpcyBpcyBhIHVzZXIgc3BhY2UgYnVnLCBub3QgYSBzZWN1cml0eSBpc3N1ZSAoYW5kIEtNU0FOIHdvdWxkIHBpY2sgaXQgdXApLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgS01TQU4mIzM5O3MgYmVoYXZpb3VyLiBEb2VzIEtNU0FOIGRldGVjdCB1bmluaXRpYWxpemVkIHVzZXIgc3BhY2UgZGF0YT8gTm8sIG5vdCByZWFsbHkuIEtNU0FOIHRyYWNrcyBrZXJuZWwgbWVtb3J5LiBXaGVuIGRhdGEgaXMgY29waWVkIGZyb20gdXNlciBzcGFjZSB0byB0aGUga2VybmVsLCBLTVNBTiBhc3N1bWVzIGl0JiMzOTtzIHZhbGlkLiBIb3dldmVyLCBLTVNBTiBkb2VzIGNoZWNrIGlmIG1lbW9yeSAqdG8qIHVzZXIgc3BhY2UgaXMgdW5pbml0aWFsaXplZCAocG90ZW50aWFsIGluZm8gbGVhaykuIEJ1dCBoZXJlLCBzaW5jZSB0aGUgbWVtb3J5IGlzIGFsbG9jYXRlZCBieSBga21hbGxvY2AgdmlhIGBtZW1kdXBfdXNlcmAsIGBtZW1kdXBfdXNlcmAgZG9lcyBhIGBjb3B5X2Zyb21fdXNlcmAgY2FsbCwgd2hpY2ggJiMzNDt1bnBvaXNvbnMmIzM0OyB0aGUgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIHdpbGwgY29uc2lkZXIgYHNhbWVgIGZ1bGx5IGluaXRpYWxpemVkLgoKVGhlbiBJIGNvbnNpZGVyZWQgb3RoZXIgY2hhbmdlcyBpbiB0aGUgcGF0Y2gsIHNwZWNpZmljYWxseSB0aGUgY29kZSB1cGRhdGluZyBgaW5mby0mZ3Q7Ynl0ZXNfZGVkdXBlZGAuIFRoaXMgc2VjdGlvbiB1c2VzIGBpX2Jsb2Nrc2l6ZShzcmMpYC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW52b2x2ZWQgaGVyZTsgYWxsIHNhZmUuCgpMZXQmIzM5O3MgYXBwbHkgdGhlIEtNU0FOIHJ1bGVzIGFuZCBjaGVjayBpZiB0aGUgcGF0Y2ggc2F0aXNmaWVzIHRoZSBLTVNBTiBjb25kaXRpb25zLgoxLiBgc2FtZWAgaXMgc2VudCB0byB1c2VyIHNwYWNlIHZpYSBgY29weV90b191c2VyYC4gSG93ZXZlciwgaXQmIzM5O3MgYWxsb2NhdGVkIHZpYSBgbWVtZHVwX3VzZXJgLCB3aGljaCBjb3BpZXMgdGhlICplbnRpcmUqIHN0cnVjdHVyZSBmcm9tIHVzZXIgc3BhY2UuIE5vIGtlcm5lbCBtZW1vcnkgaXMgY3JlYXRlZCBhbmQgdW5pbml0aWFsaXplZC4KMi4gVGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gYHNhbWUtJmd0O2ZsYWdzYCwgd2hpY2ggY29tZXMgZnJvbSB1c2VyIHNwYWNlLiBLTVNBTiB0cmVhdHMgdGhpcyBhcyBpbml0aWFsaXplZC4KMy4gTm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLgo0LiBObyBib3VuZHMgb3IgbGVuZ3RoIG1vZGlmaWNhdGlvbnMgdGhhdCBjb3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBkYXRhLgoKV2FpdCwgaXMgaXQgcG9zc2libGUgdGhhdCBgc2l6ZWAgY2FsY3VsYXRlZCBieSBgc3RydWN0X3NpemVgIGlzIGxhcmdlciB0aGFuIHdoYXQgYG1lbWR1cF91c2VyYCBjb3BpZXM/Ck5vLCB0aGUgc2l6ZSBhcmd1bWVudCBpbiBgbWVtZHVwX3VzZXJgICptdXN0KiBiZSB0aGUgc2l6ZSBhcmd1bWVudCBvZiBgY29weV9mcm9tX3VzZXJgIGNhbGwuCgpUaGVyZWZvcmUsIGJlY2F1c2UgYG1lbWR1cF91c2VyYCBjb3BpZXMgZXhhY3RseSBgc2l6ZWAgYnl0ZXMgZnJvbSBgYXJncGAgYnkgdXNpbmcgYGNvcHlfZnJvbV91c2VyYCwgYW5kIGBzaXplYCBpcyBjYWxjdWxhdGVkIGNvcnJlY3RseSwgYHNhbWVgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGF0YSBmcm9tIHVzZXIgc3BhY2UuCgpJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBLTVNBTiBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgXFwqbWVtZHVwX3VzZXJcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zdHJpbmcuaD0xNz1leHRlcm4gY2hhciAqc3RybmR1cF91c2VyKGNvbnN0IGNoYXIgX191c2VyICosIGxvbmcpO1xuaW5jbHVkZS9saW51eC9zdHJpbmcuaDoxODpleHRlcm4gdm9pZCAqbWVtZHVwX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKiwgc2l6ZV90KSBfX3JlYWxsb2Nfc2l6ZSgyKTtcbmluY2x1ZGUvbGludXgvc3RyaW5nLmgtMTktZXh0ZXJuIHZvaWQgKnZtZW1kdXBfdXNlcihjb25zdCB2b2lkIF9fdXNlciAqLCBzaXplX3QpIF9fcmVhbGxvY19zaXplKDIpO1xuLS1cbm1tL3V0aWwuYz0yMDY9c3Vic3lzX2luaXRjYWxsKGluaXRfdXNlcl9idWNrZXRzKTtcbi0tXG5tbS91dGlsLmMtMjE2LSAqL1xubW0vdXRpbC5jOjIxNzp2b2lkICptZW1kdXBfdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLCBzaXplX3QgbGVuKVxubW0vdXRpbC5jLTIxOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT42bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTIwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbWVtZHVwX3VzZXJgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYG1lbWR1cF91c2VyYCBpbiBgbW0vdXRpbC5jYC4gSSYjMzk7bSBzdGFydGluZyBoZXJlIGJlY2F1c2UuLi4gd2VsbCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBJJiMzOTttIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMsIGFuZCB0aGlzIG9uZSYjMzk7cyBnb3QgYSB1c2VyLXNwYWNlIGNvbXBvbmVudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uLCBlc3BlY2lhbGx5IHdoZXJlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgdW50cnVzdGVkIGRhdGEgb3IgcmVzb3VyY2UgY29udGVudGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgdHlwaWNhbCBlcnJvciBoYW5kbGluZyBwYXRoczogaG93IGl0IGRlYWxzIHdpdGggcGFnZSBmYXVsdHMsIGludmFsaWQgdXNlciBwb2ludGVycywgYW5kIHJlc291cmNlIGV4aGF1c3Rpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBlc3BlY2lhbGx5IGlmIGl0JiMzOTtzIG9wZXJhdGluZyBvbiBkYXRhIHRoYXQgY291bGQgY2hhbmdlIGJldHdlZW4gdGhlIHVzZXItc3BhY2UgYW5kIGtlcm5lbC1zcGFjZSBjb3B5LiBUaW1lIHRvIGdldCB0aGUgZGVidWdnZXIgcmVhZHkganVzdCBpbiBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3V0aWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjE3Olx0dm9pZCAqbWVtZHVwX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgc2l6ZV90IGxlbilcbiAyMTg6XHR7XG4gMjE5Olx0XHR2b2lkICpwO1xuIDIyMDpcdFxuIDIyMTpcdFx0cCA9IGttZW1fYnVja2V0c19hbGxvY190cmFja19jYWxsZXIodXNlcl9idWNrZXRzLCBsZW4sIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcbiAyMjI6XHRcdGlmICghcClcbiAyMjM6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gMjI0Olx0XG4gMjI1Olx0XHRpZiAoY29weV9mcm9tX3VzZXIocCwgc3JjLCBsZW4pKSB7XG4gMjI2Olx0XHRcdGtmcmVlKHApO1xuIDIyNzpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTtcbiAyMjg6XHRcdH1cbiAyMjk6XHRcbiAyMzA6XHRcdHJldHVybiBwO1xuIDIzMTpcdH1cbiAyMzI6XHRFWFBPUlRfU1lNQk9MKG1lbWR1cF91c2VyKTtcbiAyMzM6XHRcbiAyMzQ6XHQvKipcbiAyMzU6XHQgKiB2bWVtZHVwX3VzZXIgLSBkdXBsaWNhdGUgbWVtb3J5IHJlZ2lvbiBmcm9tIHVzZXIgc3BhY2VcbiAyMzY6XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAzOAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYGZpbGVfZGVkdXBlX3JhbmdlYCBTdHJ1Y3R1cmUqKgoKT2theSwgc28gYG1lbWR1cF91c2VyYCBkZWZpbml0ZWx5IGFsbG9jYXRlcyBtZW1vcnkgYW5kIGNvcGllcyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlcyBmcm9tIHVzZXIgc3BhY2UuIElmIGBjb3B5X2Zyb21fdXNlcmAgZmFpbHMsIHdoaWNoIHdvdWxkIGJlIGV4cGVjdGVkIGJlaGF2aW9yLCBpdCBmcmVlcyB0aGUgYWxsb2NhdGVkIG1lbW9yeSBhbmQgcmV0dXJucyBgLUVGQVVMVGAuIFRoYXQgbWVhbnMgdGhlIGFsbG9jYXRlZCBtZW1vcnkgaXMgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGF0YSBvcmlnaW5hdGluZyBmcm9tIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUmIzM5O3MgYWJzb2x1dGVseSBubyBrZXJuZWwgbWVtb3J5IGxlYWsgaGVyZSBmcm9tIGEgc2ltcGxlIGFsbG9jYXRpb24vY29weSBwZXJzcGVjdGl2ZS4KCkJ1dCBob2xkIG9uLi4uIEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2ggY29tcGxldGVseS4gV2hhdCBpZiB0aGUga2VybmVsIGRvZXNuJiMzOTt0IGFjdHVhbGx5ICp1cGRhdGUqIHRoZSBgaW5mby0mZ3Q7Ynl0ZXNfZGVkdXBlZGAgZmllbGQ/IElmIHRoYXQgaGFwcGVucywgaXQganVzdCByZXRhaW5zIHdoYXRldmVyIHZhbHVlIHRoZSB1c2VyIGluaXRpYWxseSBwcm92aWRlZCB3aGVuIHRoZSBgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlYCB3YXMgY29waWVkIGZyb20gdXNlciBzcGFjZS4gVGhlbiwgd2hlbiBgY29weV90b191c2VyYCBjb3BpZXMgdGhhdCBmaWVsZCBiYWNrIHRvIHVzZXIgc3BhY2UsIGl0IHdpbGwgZWZmZWN0aXZlbHkgcmV0dXJuIHRoZSB1c2VyJiMzOTtzICpvcmlnaW5hbCogdmFsdWUuIEkgc2VlIG5vdzsgdGhpcywgYWdhaW4sIHdvdWxkbiYjMzk7dCBjb25zdGl0dXRlIGEga2VybmVsIG1lbW9yeSBsZWFrLgoKTm93LCBJIHNob3VsZCBpbnZlc3RpZ2F0ZSBldmVyeSBzaW5nbGUgcGxhY2UgdGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgY3JpdGljYWwuIEkmIzM5O3ZlIGFscmVhZHkgY2hlY2tlZCBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCBhbmQgYGlvY3RsX2ZpbGVfZGVkdXBlX3JhbmdlYC4gV2hhdCBhYm91dCBgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzYD8gVGhlIGNvbW1lbnQgZG9lcyBzYXkgJiMzNDsvKiBmcm9tIHN0cnVjdCBidHJmc19pb2N0bF9maWxlX2V4dGVudF9zYW1lX2FyZ3MgKi8mIzM0Oy4gVGhhdCYjMzk7cyBhIHN0cm9uZyBoaW50ISBMZXQgbWUgZGlnIGludG8gdGhlIGBidHJmc2AgY29kZSB0byBzZWUgaWYgaXQgbWFrZXMgdXNlIG9mIGBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VgLiBUaGlzIGlzIHdoZXJlIHRoZSBwb3RlbnRpYWwgZm9yIGlzc3VlcyBtaWdodCBsaWUsIGFuZCBJJiMzOTttIG5vdCBydWxpbmcgb3V0IHRoYXQgSSBtYXkgaGF2ZSB0byBsb29rIGF0IGFsbCBvZiB0aGUgY2FsbGVycyBvZiB0aGF0IGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidHJmc19pb2N0bF9maWxlX2V4dGVudF9zYW1lX2FyZ3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg9MTY3PXN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZV9pbmZvIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0xODMtXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaDoxODQ6LyogZnJvbSBzdHJ1Y3QgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzICovXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0xODUtc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaD05OT1zdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VfaW5mbyB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMTEyLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6MTEzOi8qIGZyb20gc3RydWN0IGJ0cmZzX2lvY3RsX2ZpbGVfZXh0ZW50X3NhbWVfYXJncyAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMTE0LXN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSB7XG4tLVxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg9MTY3PXN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZV9pbmZvIHtcbi0tXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0xODAtXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaDoxODE6LyogZnJvbSBzdHJ1Y3QgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzICovXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0xODItc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMzYKCQkJCQkJCW91dHB1dDogMjE2CgkJCQkJCQl0aG91Z2h0czogMjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJ0cmZzIERlZHVwbGljYXRpb24gQ29kZSBDaGFuZ2UqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCBsb29rcyBsaWtlIGBidHJmc19pb2N0bF9maWxlX2V4dGVudF9zYW1lX2FyZ3NgIGlzIGp1c3QgdGhlIGxlZ2FjeSBuYW1lIGZvciBgZmlsZV9kZWR1cGVfcmFuZ2VgLiBNYWtlcyBzZW5zZSwgbm8gY29uZmxpY3RpbmcgdXNlcyB0aGVyZS4KCk5vdywgbGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gSSB3YXMgYSBsaXR0bGUgY29uY2VybmVkIGFib3V0IGBpbmZvLSZndDtieXRlc19kZWR1cGVkID0gbWluX3QodTY0LCBzdGVwLCBsZW4pO2AuIEJ1dCBgc3RlcGAgaXMgZGVyaXZlZCBmcm9tIGBpX2Jsb2Nrc2l6ZShzcmMpYCwgd2hpY2ggaXMgYSBgdTY0YCB0byBiZWdpbiB3aXRoIChvciBwcm9tb3RlZCB0byBvbmUpLiBgbGVuYCBpcyBhbHNvIGEgYHU2NGAuIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgdGhlcmUuIEl0JiMzOTtzIHNhZmUuCgpXaGF0IGFib3V0IHRoYXQgYHNhbWUtJmd0O2ZsYWdzICZhbXA7IH5GSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgIGNoZWNrPyBJZiBgc2FtZS0mZ3Q7ZmxhZ3NgIGlzbiYjMzk7dCBpbml0aWFsaXplZCBvbiB0aGUgdXNlciBzcGFjZSBzaWRlLCB3ZSBjb3VsZCBlbmQgdXAgd2l0aCBzb21lIHJhbmRvbSBiaXRzLCB0cmlnZ2VyaW5nIGFuIGAtRUlOVkFMYCwgd2hpY2ggaXMgZmluZS4gSXQgd291bGQganVzdCBjb3JyZWN0bHkgZmFpbCBpZiBpdCYjMzk7cyBub3Qgc2V0LgoKR2l2ZW4gYWxsIG9mIHRoaXMsIHRoaXMgcGF0Y2ggaXNuJiMzOTt0IGludHJvZHVjaW5nIGFueSBuZXcgcmlza3MgaW4gdGVybXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCBpdCBkb2VzIGlzIGFkZCB0aGUgcHJvZ3Jlc3MgcmVwb3J0aW5nIGZsYWcgYW5kIHVwZGF0ZXMgdGhlIGRlZHVwbGljYXRlZCBieXRlcy4gV2hpbGUgS0FTQU4gaXMgdGhlcmUgdG8gY2F0Y2ggbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIEkgZG9uJiMzOTt0IHNlZSBhbnkgcmlzayBvZiB0aG9zZSBpc3N1ZXMgaGVyZSBlaXRoZXIuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIHdpdGggdGhpcyByYXRpb25hbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCBmdW5jdGlvbiBhbmQgdGhlIGBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VgIHVzZXItc3BhY2UgQVBJIHRvIGFkZCBhIG5ldyBmbGFnIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgLiBUaGUgc3RydWN0dXJlIGBzYW1lYCBpcyBhbGxvY2F0ZWQgYW5kIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGF0YSBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBgbWVtZHVwX3VzZXJgIGluIGBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZWAuIEFueSBmaWVsZHMgbm90IGV4cGxpY2l0bHkgdXBkYXRlZCBieSB0aGUga2VybmVsIHdpbGwgc2ltcGx5IHJldGFpbiB0aGUgdmFsdWVzIHByb3ZpZGVkIGJ5IHVzZXIgc3BhY2Ugd2hlbiBjb3BpZWQgYmFjayB2aWEgYGNvcHlfdG9fdXNlcmAuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgbm9yIGRvZXMgaXQgbW9kaWZ5IGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIGluIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCBmdW5jdGlvbiBhbmQgdGhlIGBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VgIHVzZXItc3BhY2UgQVBJIHRvIGFkZCBhIG5ldyBmbGFnIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgLiBUaGUgc3RydWN0dXJlIGBzYW1lYCBpcyBhbGxvY2F0ZWQgYW5kIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGF0YSBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBgbWVtZHVwX3VzZXJgIGluIGBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZWAuIEFueSBmaWVsZHMgbm90IGV4cGxpY2l0bHkgdXBkYXRlZCBieSB0aGUga2VybmVsIHdpbGwgc2ltcGx5IHJldGFpbiB0aGUgdmFsdWVzIHByb3ZpZGVkIGJ5IHVzZXIgc3BhY2Ugd2hlbiBjb3BpZWQgYmFjayB2aWEgYGNvcHlfdG9fdXNlcmAuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgbm9yIGRvZXMgaXQgbW9kaWZ5IGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIGluIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MzY6MDIuNTk3Mjk0MjMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAxNTkwMjcyODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19kZWR1cGVfZmlsZV9yYW5nZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgIGZ1bmN0aW9uIGFuZCB0aGUgYHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZWAgdXNlci1zcGFjZSBBUEkgdG8gYWRkIGEgbmV3IGZsYWcgYEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTU2AuIFRoZSBzdHJ1Y3R1cmUgYHNhbWVgIGlzIGFsbG9jYXRlZCBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBkYXRhIGNvcGllZCBmcm9tIHVzZXIgc3BhY2UgdmlhIGBtZW1kdXBfdXNlcmAgaW4gYGlvY3RsX2ZpbGVfZGVkdXBlX3JhbmdlYC4gQW55IGZpZWxkcyBub3QgZXhwbGljaXRseSB1cGRhdGVkIGJ5IHRoZSBrZXJuZWwgd2lsbCBzaW1wbHkgcmV0YWluIHRoZSB2YWx1ZXMgcHJvdmlkZWQgYnkgdXNlciBzcGFjZSB3aGVuIGNvcGllZCBiYWNrIHZpYSBgY29weV90b191c2VyYC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBub3IgZG9lcyBpdCBtb2RpZnkgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgaW4gdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgVUFQSSBmbGFnIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgIHRvIHRoZSBgRklERURVUEVSQU5HRWAgaW9jdGwsIG1vZGlmeWluZyB0aGUgY29yZSBWRlMgZGVkdXBsaWNhdGlvbiBsb2dpYyBpbiBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjM2OjAyLjU5NzMwMDEyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA2NzQ2NDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmE0ODRiM2JmN2UwNzU2M2UxODQzNDBmYzJlYzZjZTI3YjI1NzM4YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxMjozNjowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9yZW1hcF9yYW5nZS5jIGIvZnMvcmVtYXBfcmFuZ2UuY1xcbmluZGV4IDI2YWZiYmJmYjEwYzIuLmFjODhhODFjMTI3MzkgMTAwNjQ0XFxuLS0tIGEvZnMvcmVtYXBfcmFuZ2UuY1xcbisrKyBiL2ZzL3JlbWFwX3JhbmdlLmNcXG5AQCAtNTAzLDcgKzUwMyw3IEBAIGludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSlcXG4gXFx0aWYgKCEoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfUkVBRCkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0aWYgKHNhbWUtXFx1MDAzZXJlc2VydmVkMSB8fCBzYW1lLVxcdTAwM2VyZXNlcnZlZDIpXFxuK1xcdGlmIChzYW1lLVxcdTAwM2VyZXNlcnZlZDEgfHwgKHNhbWUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgfkZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0b2ZmID0gc2FtZS1cXHUwMDNlc3JjX29mZnNldDtcXG5AQCAtNTUxLDEyICs1NTEsMjkgQEAgaW50IHZmc19kZWR1cGVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICpzYW1lKVxcbiBcXHRcXHRkZWR1cGVkID0gdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShmaWxlLCBvZmYsIGZkX2ZpbGUoZHN0X2ZkKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGluZm8tXFx1MDAzZWRlc3Rfb2Zmc2V0LCBsZW4sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBSRU1BUF9GSUxFX0NBTl9TSE9SVEVOKTtcXG4tXFx0XFx0aWYgKGRlZHVwZWQgPT0gLUVCQURFKVxcbitcXHRcXHRpZiAoZGVkdXBlZCA9PSAtRUJBREUpIHtcXG4gXFx0XFx0XFx0aW5mby1cXHUwMDNlc3RhdHVzID0gRklMRV9ERURVUEVfUkFOR0VfRElGRkVSUztcXG4tXFx0XFx0ZWxzZSBpZiAoZGVkdXBlZCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGlmIChzYW1lLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykge1xcbitcXHRcXHRcXHRcXHR1NjQgc3RlcCA9IGlfYmxvY2tzaXplKHNyYyk7XFxuK1xcbitcXHRcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHRcXHQgKiBTdGFja2VkIGZpbGVzeXN0ZW1zIChlLmcuIG92ZXJsYXlmcykgY2FuXFxuK1xcdFxcdFxcdFxcdCAqIHJlcG9ydCBhIGRlZ2VuZXJhdGUgYmxvY2sgc2l6ZSBoZXJlOyBhXFxuK1xcdFxcdFxcdFxcdCAqIG9uZS1ieXRlIHN0ZXAgd291bGQgb25seSBtaXNhbGlnbiB0aGVcXG4rXFx0XFx0XFx0XFx0ICogbmV4dCBjYWxsLCBzbyBhZHZhbmNlIHBhc3QgdGhlIHdob2xlXFxuK1xcdFxcdFxcdFxcdCAqIHJlcXVlc3QgaW5zdGVhZC5cXG4rXFx0XFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdFxcdGlmIChzdGVwIFxcdTAwM2M9IDEpXFxuK1xcdFxcdFxcdFxcdFxcdHN0ZXAgPSBsZW47XFxuK1xcdFxcdFxcdFxcdGluZm8tXFx1MDAzZWJ5dGVzX2RlZHVwZWQgPSBtaW5fdCh1NjQsIHN0ZXAsIGxlbik7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fSBlbHNlIGlmIChkZWR1cGVkIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRpbmZvLVxcdTAwM2VzdGF0dXMgPSBkZWR1cGVkO1xcbi1cXHRcXHRlbHNlXFxuK1xcdFxcdH0gZWxzZSBpZiAoc2FtZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1MpIHtcXG4rXFx0XFx0XFx0aW5mby1cXHUwMDNlYnl0ZXNfZGVkdXBlZCA9IGRlZHVwZWQ7XFxuK1xcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGluZm8tXFx1MDAzZWJ5dGVzX2RlZHVwZWQgPSBsZW47XFxuK1xcdFxcdH1cXG4gXFxuIG5leHRfbG9vcDpcXG4gXFx0XFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oXFxuaW5kZXggYmQ4NzI2MmYyZTM0OS4uNDcxZjY5OGJlYWE5MyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oXFxuQEAgLTE3OCwxMyArMTc4LDE2IEBAIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZV9pbmZvIHtcXG4gXFx0X191MzIgcmVzZXJ2ZWQ7XFx0XFx0LyogbXVzdCBiZSB6ZXJvICovXFxuIH07XFxuIFxcbisvKiBmbGFncyBmb3Igc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICovXFxuKyNkZWZpbmUgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTICgxVSBcXHUwMDNjXFx1MDAzYyAwKVxcbitcXG4gLyogZnJvbSBzdHJ1Y3QgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzICovXFxuIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSB7XFxuIFxcdF9fdTY0IHNyY19vZmZzZXQ7XFx0LyogaW4gLSBzdGFydCBvZiBleHRlbnQgaW4gc291cmNlICovXFxuIFxcdF9fdTY0IHNyY19sZW5ndGg7XFx0LyogaW4gLSBsZW5ndGggb2YgZXh0ZW50ICovXFxuIFxcdF9fdTE2IGRlc3RfY291bnQ7XFx0LyogaW4gLSB0b3RhbCBlbGVtZW50cyBpbiBpbmZvIGFycmF5ICovXFxuIFxcdF9fdTE2IHJlc2VydmVkMTtcXHQvKiBtdXN0IGJlIHplcm8gKi9cXG4tXFx0X191MzIgcmVzZXJ2ZWQyO1xcdC8qIG11c3QgYmUgemVybyAqL1xcbitcXHRfX3UzMiBmbGFncztcXHRcXHQvKiBpbiAtIEZJTEVfREVEVVBFX1JBTkdFXyogZmxhZ3MgKi9cXG4gXFx0c3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlX2luZm8gaW5mb1tdO1xcbiB9O1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MzY6MDMuMDA0NzM1NzkxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzMwNzE0NjU2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX2RlZHVwZV9maWxlX3JhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBVQVBJIGZsYWcgYEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTU2AgdG8gdGhlIGBGSURFRFVQRVJBTkdFYCBpb2N0bCwgbW9kaWZ5aW5nIHRoZSBjb3JlIFZGUyBkZWR1cGxpY2F0aW9uIGxvZ2ljIGluIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmE0ODRiM2JmN2UwNzU2M2UxODQzNDBmYzJlYzZjZTI3YjI1NzM4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDEyOjM2OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvcmVtYXBfcmFuZ2UuYyBiL2ZzL3JlbWFwX3JhbmdlLmNcbmluZGV4IDI2YWZiYmJmYjEwYzIuLmFjODhhODFjMTI3MzkgMTAwNjQ0XG4tLS0gYS9mcy9yZW1hcF9yYW5nZS5jXG4rKysgYi9mcy9yZW1hcF9yYW5nZS5jXG5AQCAtNTAzLDcgKzUwMyw3IEBAIGludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSlcbiBcdGlmICghKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9SRUFEKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoc2FtZS1cdTAwM2VyZXNlcnZlZDEgfHwgc2FtZS1cdTAwM2VyZXNlcnZlZDIpXG4rXHRpZiAoc2FtZS1cdTAwM2VyZXNlcnZlZDEgfHwgKHNhbWUtXHUwMDNlZmxhZ3MgXHUwMDI2IH5GSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1MpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdG9mZiA9IHNhbWUtXHUwMDNlc3JjX29mZnNldDtcbkBAIC01NTEsMTIgKzU1MSwyOSBAQCBpbnQgdmZzX2RlZHVwZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKnNhbWUpXG4gXHRcdGRlZHVwZWQgPSB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKGZpbGUsIG9mZiwgZmRfZmlsZShkc3RfZmQpLFxuIFx0XHRcdFx0XHRcdCAgICBpbmZvLVx1MDAzZWRlc3Rfb2Zmc2V0LCBsZW4sXG4gXHRcdFx0XHRcdFx0ICAgIFJFTUFQX0ZJTEVfQ0FOX1NIT1JURU4pO1xuLVx0XHRpZiAoZGVkdXBlZCA9PSAtRUJBREUpXG4rXHRcdGlmIChkZWR1cGVkID09IC1FQkFERSkge1xuIFx0XHRcdGluZm8tXHUwMDNlc3RhdHVzID0gRklMRV9ERURVUEVfUkFOR0VfRElGRkVSUztcbi1cdFx0ZWxzZSBpZiAoZGVkdXBlZCBcdTAwM2MgMClcbitcdFx0XHRpZiAoc2FtZS1cdTAwM2VmbGFncyBcdTAwMjYgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTKSB7XG4rXHRcdFx0XHR1NjQgc3RlcCA9IGlfYmxvY2tzaXplKHNyYyk7XG4rXG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogU3RhY2tlZCBmaWxlc3lzdGVtcyAoZS5nLiBvdmVybGF5ZnMpIGNhblxuK1x0XHRcdFx0ICogcmVwb3J0IGEgZGVnZW5lcmF0ZSBibG9jayBzaXplIGhlcmU7IGFcbitcdFx0XHRcdCAqIG9uZS1ieXRlIHN0ZXAgd291bGQgb25seSBtaXNhbGlnbiB0aGVcbitcdFx0XHRcdCAqIG5leHQgY2FsbCwgc28gYWR2YW5jZSBwYXN0IHRoZSB3aG9sZVxuK1x0XHRcdFx0ICogcmVxdWVzdCBpbnN0ZWFkLlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRpZiAoc3RlcCBcdTAwM2M9IDEpXG4rXHRcdFx0XHRcdHN0ZXAgPSBsZW47XG4rXHRcdFx0XHRpbmZvLVx1MDAzZWJ5dGVzX2RlZHVwZWQgPSBtaW5fdCh1NjQsIHN0ZXAsIGxlbik7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2UgaWYgKGRlZHVwZWQgXHUwMDNjIDApIHtcbiBcdFx0XHRpbmZvLVx1MDAzZXN0YXR1cyA9IGRlZHVwZWQ7XG4tXHRcdGVsc2VcbitcdFx0fSBlbHNlIGlmIChzYW1lLVx1MDAzZWZsYWdzIFx1MDAyNiBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1MpIHtcbitcdFx0XHRpbmZvLVx1MDAzZWJ5dGVzX2RlZHVwZWQgPSBkZWR1cGVkO1xuK1x0XHR9IGVsc2Uge1xuIFx0XHRcdGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZCA9IGxlbjtcbitcdFx0fVxuIFxuIG5leHRfbG9vcDpcbiBcdFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmhcbmluZGV4IGJkODcyNjJmMmUzNDkuLjQ3MWY2OThiZWFhOTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmhcbkBAIC0xNzgsMTMgKzE3OCwxNiBAQCBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VfaW5mbyB7XG4gXHRfX3UzMiByZXNlcnZlZDtcdFx0LyogbXVzdCBiZSB6ZXJvICovXG4gfTtcbiBcbisvKiBmbGFncyBmb3Igc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICovXG4rI2RlZmluZSBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1MgKDFVIFx1MDAzY1x1MDAzYyAwKVxuK1xuIC8qIGZyb20gc3RydWN0IGJ0cmZzX2lvY3RsX2ZpbGVfZXh0ZW50X3NhbWVfYXJncyAqL1xuIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSB7XG4gXHRfX3U2NCBzcmNfb2Zmc2V0O1x0LyogaW4gLSBzdGFydCBvZiBleHRlbnQgaW4gc291cmNlICovXG4gXHRfX3U2NCBzcmNfbGVuZ3RoO1x0LyogaW4gLSBsZW5ndGggb2YgZXh0ZW50ICovXG4gXHRfX3UxNiBkZXN0X2NvdW50O1x0LyogaW4gLSB0b3RhbCBlbGVtZW50cyBpbiBpbmZvIGFycmF5ICovXG4gXHRfX3UxNiByZXNlcnZlZDE7XHQvKiBtdXN0IGJlIHplcm8gKi9cbi1cdF9fdTMyIHJlc2VydmVkMjtcdC8qIG11c3QgYmUgemVybyAqL1xuK1x0X191MzIgZmxhZ3M7XHRcdC8qIGluIC0gRklMRV9ERURVUEVfUkFOR0VfKiBmbGFncyAqL1xuIFx0c3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlX2luZm8gaW5mb1tdO1xuIH07XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozNjowMy4wMDQ3Mzc0ODFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjY5NTAzMzQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERlZHVwbGljYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZnMvcmVtYXBfcmFuZ2UuY2AgYW5kIGBpbmNsdWRlL3VhcGkvbGludXgvZnMuaGAuIEl0IHNlZW1zIHdlJ3JlIG1vZGlmeWluZyBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCB0byBpbmNvcnBvcmF0ZSBhIG5ldyBmZWF0dXJlLiBUaGV5J3JlIGFkZGluZyBzdXBwb3J0IGZvciB0aGlzIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgIGZsYWcgaW4gdGhlIGBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOyByZXBsYWNpbmcgYHNhbWUtXHUwMDNlcmVzZXJ2ZWQyYCB3aXRoIGBzYW1lLVx1MDAzZWZsYWdzYCBpcyBhIHR5cGljYWwgcmVmYWN0b3IgdG8gbWFrZSByb29tLCBhbmQgbm93IHdlIGNoZWNrIGZvciB0aGlzIHByb2dyZXNzIHJlcG9ydGluZyBmbGFnLlxuXG5UaGUgY29yZSBvZiB0aGUgbG9naWMgaXMgdGhpczogaWYgYGRlZHVwZWRgIHJldHVybnMgYC1FQkFERWAgKHdoaWNoIEkga25vdyBzaWduaWZpZXMgYW4gZXJyb3IpIGFuZCB0aGF0IGZsYWcgaXMgc2V0LCB3ZSdyZSBub3cgc2V0dGluZyBgaW5mby1cdTAwM2VieXRlc19kZWR1cGVkYCB0byB0aGUgbWluaW11bSBvZiBzb21lIGBzdGVwYCB2YWx1ZSBhbmQgdGhlIHJlcXVlc3RlZCBsZW5ndGguIFRoZSBgc3RlcGAgbG9va3MgbGlrZSBpdCdzIHRoZSBibG9jayBzaXplIG9mIHRoZSBzb3VyY2UgZmlsZSwgd2hpY2ggbWFrZXMgc2Vuc2UuIFdlIHdhbnQgdG8gdXBkYXRlIHByb2dyZXNzLCBhc3N1bWluZyBgRUJBREVgIGluZGljYXRlcyBhbiBpbmNvbXBsZXRlIG9wZXJhdGlvbiwgYW5kIHByb3ZpZGUgaW5jcmVtZW50YWwgZmVlZGJhY2suIElmIHRoZSBgZGVkdXBlZGAgdmFsdWUgaXMgbm9uLW5lZ2F0aXZlIGFuZCB0aGUgZmxhZyBpcyBzZXQsIGl0IHVwZGF0ZXMgYGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZGAgZGlyZWN0bHkuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgaW1wbGVtZW50YXRpb24gdG8gcmVwb3J0IHByb2dyZXNzIGJhY2sgdG8gdGhlIHVzZXIgc3BhY2UuXG5cblNpbmNlIHRoaXMgdG91Y2hlcyBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCwgSSBpbW1lZGlhdGVseSBrbm93IHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgYGlvY3RsKEZJREVEVVBFUkFOR0UpYCBzeXN0ZW0gY2FsbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3QgY29uZmxpY3Qgd2l0aCBhbnkgY29uZmlndXJhdGlvbnMuIEknbSBnb2luZyB0byBjaGVjayBpZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSSdsbCBjaGVjayBgZnMvcmVtYXBfcmFuZ2UuY2AgZGlyZWN0bHksIGFuZCB0aGVuIGp1bXAgdG8gYGZzL01ha2VmaWxlYCB0byBzZWUgaWYgYHJlbWFwX3JhbmdlLmNgIGl0c2VsZiBkZXBlbmRzIG9uIGFueSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb25zLiBJJ20gbG9va2luZyBmb3IgYSBgb2JqLSQoQ09ORklHX1NPTUVUSElORykgKz0gcmVtYXBfcmFuZ2Uub2AgdHlwZSBvZiBkaXJlY3RpdmUuIElmIHRoZXJlJ3MgYSBjb25maWcgZGVwZW5kZW5jeSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2gga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjb3VsZCBhZmZlY3QgdGhpcy4gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2gga2VybmVsIGNvbmZpZ3VyYXRpb25zIG11c3QgYmUgc2V0IHRvIGNvcnJlY3RseSB1dGlsaXplIHRoZSBmZWF0dXJlIHRvIGFwcHJvcHJpYXRlbHkgYXNzZXNzIHRoZSBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozNjoyNS42OTk3NzM2MTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcxMTI2ODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlbWFwX3JhbmdlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvTWFrZWZpbGU9MTA9b2JqLXkgOj1cXHRvcGVuLm8gcmVhZF93cml0ZS5vIGZpbGVfdGFibGUubyBzdXBlci5vIFxcXFxcXG4tLVxcbmZzL01ha2VmaWxlLTE3LVxcdFxcdGZzX2RpcmVudC5vIGZzX2NvbnRleHQubyBmc19wYXJzZXIubyBmc29wZW4ubyBpbml0Lm8gXFxcXFxcbmZzL01ha2VmaWxlOjE4OlxcdFxcdGtlcm5lbF9yZWFkX2ZpbGUubyBtbnRfaWRtYXBwaW5nLm8gcmVtYXBfcmFuZ2UubyBwaWRmcy5vIFxcXFxcXG5mcy9NYWtlZmlsZS0xOS1cXHRcXHRmaWxlX2F0dHIubyBmc2Vycm9yLm8gbnVsbGZzLm8gZmFpbGZzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MzY6MjYuMDcwOTA5NzYzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwNTczNDIxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCBGdW5jdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgLiBJdCdzIGRlZmluaXRlbHkgY29tcGlsZWQgaW47IHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggc29tZSBkeW5hbWljYWxseSBsb2FkZWQgbW9kdWxlIGhlcmUsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LiBGaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgcXVpY2tseSB2ZXJpZnkgaWYgdGhpcyBmdW5jdGlvbiwgdGhpcyBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCwgaXMgZWl0aGVyIHN0YXRpYyBvciBleHBvcnRlZC4gVGhhdCdsbCBpbmZvcm0gbXkgZnV6emluZyBzdHJhdGVneS4gSWYgaXQncyBzdGF0aWMsIHRoZW4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGNhbGwgaXQuIEl0IGFsc28gZGV0ZXJtaW5lcyBpZiB0aGlzIGNhbGwgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGJlZ2luIGZ1enppbmcsIG9yIGlmIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGViYXNlIHRvIGZ1enogaXQgY29ycmVjdGx5LiBJIG5lZWQgdG8ga25vdyBob3cgYWNjZXNzaWJsZSBpdCBpcyBiZWZvcmUgSSBjYW4gZGVjaWRlIHRoZSBiZXN0IHdheSB0byBhcHByb2FjaCB0YXJnZXRpbmcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NTYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozNjoyOS41NzY2NDYyNTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzMjU5NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdmZzX2RlZHVwZV9maWxlX3JhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3JlbWFwX3JhbmdlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcmVtYXBfcmFuZ2UuYz00MzI9bG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmMtNDg5LX1cXG5mcy9yZW1hcF9yYW5nZS5jOjQ5MDpFWFBPUlRfU1lNQk9MKHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUpO1xcbmZzL3JlbWFwX3JhbmdlLmMtNDkxLVxcbmZzL3JlbWFwX3JhbmdlLmM9NDkyPWludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSlcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmMtNTgzLX1cXG5mcy9yZW1hcF9yYW5nZS5jOjU4NDpFWFBPUlRfU1lNQk9MKHZmc19kZWR1cGVfZmlsZV9yYW5nZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjM2OjI5LjYyMTk3NzcwNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NTQxOTQ1NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgLCB0aGF0J3MgYSBnb29kIGluaXRpYWwgZm9jdXMuIExldCBtZSBzZWUuLi4gQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdG91Y2hlZCBoZXJlPyBOb3BlLCBpdCdzIGp1c3QgdGhpcyBvbmUuIEFoLCB0aGUgcGF0Y2ggaXMgaW4gYGZzL3JlbWFwX3JhbmdlLmNgLCB3aGljaCBpcyByaWdodCBpbiB0aGUgY29yZSBWRlMsIHNvIHRoYXQncyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBpdCBpbnRyb2R1Y2VzIGEgbmV3IFVBUEkgZmxhZywgYEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTU2AuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmssIFwiV29ydGggZnV6emluZyFcIiBObyBzcGVjaWZpYyBrZXJuZWwgY29uZmlncyBzZWVtIHRvIGJlIHJlcXVpcmVkIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHksIHNpbmNlIGl0J3MgY29yZSBWRlMsIHdoaWNoIGlzIGV2ZW4gYmV0dGVyLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgcGF0Y2ggaXRzZWxmLi4uIEFoLCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl0IGxvb2tzIGxpa2UgdGhleSBhcmUganVzdCBjaGVja2luZyB0aGUgZmxhZ3MgZmllbGQgaW4gdGhlIHNhbWUgc3RydWN0IGBmaWxlX2RlZHVwZV9yYW5nZWAgdG8gc2VlIGlmIHRoZSBuZXcgYEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTU2AgaXMgc2V0LiBTaW1wbGUgY2hhbmdlLCBidXQgc2lnbmlmaWNhbnQuXG5cblNvLCBzdW1taW5nIGl0IHVwOiBUaGUgY29yZSBmdW5jdGlvbiBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCBpcyBtb2RpZmllZCwgYWRkaW5nIGEgVUFQSSBmbGFnLCBhbmQgdGhpcyBzaG91bGQgYmUgZnV6emVkLCBnaXZlbiBpdHMgcG90ZW50aWFsIGZvciB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGFuZCB0aGUgY2hhbmdlIGluIFZGUyBsb2dpYy4gSSdtIGdvaW5nIHRvIGFkZCB0aGF0IGZ1bmN0aW9uIHRvIG15IEZvY3VzU3ltYm9scyBsaXN0LCBzZXQgXCJXb3J0aEZ1enppbmdcIiB0byB0cnVlLCBhbmQgbm90ZSB0aGF0IHRoZSBwYXRjaCBhZGRzIHRoZSBgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTYCBmbGFnLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTM0LCJPdXRwdXRUb2tlbnMiOjExNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozNjozNi4wNzYxNzQ4MjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX2RlZHVwZV9maWxlX3JhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBVQVBJIGZsYWcgYEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTU2AgdG8gdGhlIGBGSURFRFVQRVJBTkdFYCBpb2N0bCwgbW9kaWZ5aW5nIHRoZSBjb3JlIFZGUyBkZWR1cGxpY2F0aW9uIGxvZ2ljIGluIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IFVBUEkgZmxhZyBgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTYCB0byB0aGUgYEZJREVEVVBFUkFOR0VgIGlvY3RsLCBtb2RpZnlpbmcgdGhlIGNvcmUgVkZTIGRlZHVwbGljYXRpb24gbG9naWMgaW4gYHZmc19kZWR1cGVfZmlsZV9yYW5nZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozNjozNi4wNzYyMDMxNzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY4MTExMzUxMTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MzY6MzYuMDc2NjM4NzIxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg2ODExMDkxMDQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgIGZ1bmN0aW9uIGFuZCB0aGUgYHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZWAgdXNlci1zcGFjZSBBUEkgdG8gYWRkIGEgbmV3IGZsYWcgYEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTU2AuIFRoZSBzdHJ1Y3R1cmUgYHNhbWVgIGlzIGFsbG9jYXRlZCBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBkYXRhIGNvcGllZCBmcm9tIHVzZXIgc3BhY2UgdmlhIGBtZW1kdXBfdXNlcmAgaW4gYGlvY3RsX2ZpbGVfZGVkdXBlX3JhbmdlYC4gQW55IGZpZWxkcyBub3QgZXhwbGljaXRseSB1cGRhdGVkIGJ5IHRoZSBrZXJuZWwgd2lsbCBzaW1wbHkgcmV0YWluIHRoZSB2YWx1ZXMgcHJvdmlkZWQgYnkgdXNlciBzcGFjZSB3aGVuIGNvcGllZCBiYWNrIHZpYSBgY29weV90b191c2VyYC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBub3IgZG9lcyBpdCBtb2RpZnkgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgaW4gdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZhNDg0YjNiZjdlMDc1NjNlMTg0MzQwZmMyZWM2Y2UyN2IyNTczOGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxMjozNjowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3JlbWFwX3JhbmdlLmMgYi9mcy9yZW1hcF9yYW5nZS5jXG5pbmRleCAyNmFmYmJiZmIxMGMyLi5hYzg4YTgxYzEyNzM5IDEwMDY0NFxuLS0tIGEvZnMvcmVtYXBfcmFuZ2UuY1xuKysrIGIvZnMvcmVtYXBfcmFuZ2UuY1xuQEAgLTUwMyw3ICs1MDMsNyBAQCBpbnQgdmZzX2RlZHVwZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKnNhbWUpXG4gXHRpZiAoIShmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfUkVBRCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKHNhbWUtXHUwMDNlcmVzZXJ2ZWQxIHx8IHNhbWUtXHUwMDNlcmVzZXJ2ZWQyKVxuK1x0aWYgKHNhbWUtXHUwMDNlcmVzZXJ2ZWQxIHx8IChzYW1lLVx1MDAzZWZsYWdzIFx1MDAyNiB+RklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRvZmYgPSBzYW1lLVx1MDAzZXNyY19vZmZzZXQ7XG5AQCAtNTUxLDEyICs1NTEsMjkgQEAgaW50IHZmc19kZWR1cGVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICpzYW1lKVxuIFx0XHRkZWR1cGVkID0gdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShmaWxlLCBvZmYsIGZkX2ZpbGUoZHN0X2ZkKSxcbiBcdFx0XHRcdFx0XHQgICAgaW5mby1cdTAwM2VkZXN0X29mZnNldCwgbGVuLFxuIFx0XHRcdFx0XHRcdCAgICBSRU1BUF9GSUxFX0NBTl9TSE9SVEVOKTtcbi1cdFx0aWYgKGRlZHVwZWQgPT0gLUVCQURFKVxuK1x0XHRpZiAoZGVkdXBlZCA9PSAtRUJBREUpIHtcbiBcdFx0XHRpbmZvLVx1MDAzZXN0YXR1cyA9IEZJTEVfREVEVVBFX1JBTkdFX0RJRkZFUlM7XG4tXHRcdGVsc2UgaWYgKGRlZHVwZWQgXHUwMDNjIDApXG4rXHRcdFx0aWYgKHNhbWUtXHUwMDNlZmxhZ3MgXHUwMDI2IEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykge1xuK1x0XHRcdFx0dTY0IHN0ZXAgPSBpX2Jsb2Nrc2l6ZShzcmMpO1xuK1xuK1x0XHRcdFx0LypcbitcdFx0XHRcdCAqIFN0YWNrZWQgZmlsZXN5c3RlbXMgKGUuZy4gb3ZlcmxheWZzKSBjYW5cbitcdFx0XHRcdCAqIHJlcG9ydCBhIGRlZ2VuZXJhdGUgYmxvY2sgc2l6ZSBoZXJlOyBhXG4rXHRcdFx0XHQgKiBvbmUtYnl0ZSBzdGVwIHdvdWxkIG9ubHkgbWlzYWxpZ24gdGhlXG4rXHRcdFx0XHQgKiBuZXh0IGNhbGwsIHNvIGFkdmFuY2UgcGFzdCB0aGUgd2hvbGVcbitcdFx0XHRcdCAqIHJlcXVlc3QgaW5zdGVhZC5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0aWYgKHN0ZXAgXHUwMDNjPSAxKVxuK1x0XHRcdFx0XHRzdGVwID0gbGVuO1xuK1x0XHRcdFx0aW5mby1cdTAwM2VieXRlc19kZWR1cGVkID0gbWluX3QodTY0LCBzdGVwLCBsZW4pO1xuK1x0XHRcdH1cbitcdFx0fSBlbHNlIGlmIChkZWR1cGVkIFx1MDAzYyAwKSB7XG4gXHRcdFx0aW5mby1cdTAwM2VzdGF0dXMgPSBkZWR1cGVkO1xuLVx0XHRlbHNlXG4rXHRcdH0gZWxzZSBpZiAoc2FtZS1cdTAwM2VmbGFncyBcdTAwMjYgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTKSB7XG4rXHRcdFx0aW5mby1cdTAwM2VieXRlc19kZWR1cGVkID0gZGVkdXBlZDtcbitcdFx0fSBlbHNlIHtcbiBcdFx0XHRpbmZvLVx1MDAzZWJ5dGVzX2RlZHVwZWQgPSBsZW47XG4rXHRcdH1cbiBcbiBuZXh0X2xvb3A6XG4gXHRcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oXG5pbmRleCBiZDg3MjYyZjJlMzQ5Li40NzFmNjk4YmVhYTkzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oXG5AQCAtMTc4LDEzICsxNzgsMTYgQEAgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlX2luZm8ge1xuIFx0X191MzIgcmVzZXJ2ZWQ7XHRcdC8qIG11c3QgYmUgemVybyAqL1xuIH07XG4gXG4rLyogZmxhZ3MgZm9yIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqL1xuKyNkZWZpbmUgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTICgxVSBcdTAwM2NcdTAwM2MgMClcbitcbiAvKiBmcm9tIHN0cnVjdCBidHJmc19pb2N0bF9maWxlX2V4dGVudF9zYW1lX2FyZ3MgKi9cbiBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2Uge1xuIFx0X191NjQgc3JjX29mZnNldDtcdC8qIGluIC0gc3RhcnQgb2YgZXh0ZW50IGluIHNvdXJjZSAqL1xuIFx0X191NjQgc3JjX2xlbmd0aDtcdC8qIGluIC0gbGVuZ3RoIG9mIGV4dGVudCAqL1xuIFx0X191MTYgZGVzdF9jb3VudDtcdC8qIGluIC0gdG90YWwgZWxlbWVudHMgaW4gaW5mbyBhcnJheSAqL1xuIFx0X191MTYgcmVzZXJ2ZWQxO1x0LyogbXVzdCBiZSB6ZXJvICovXG4tXHRfX3UzMiByZXNlcnZlZDI7XHQvKiBtdXN0IGJlIHplcm8gKi9cbitcdF9fdTMyIGZsYWdzO1x0XHQvKiBpbiAtIEZJTEVfREVEVVBFX1JBTkdFXyogZmxhZ3MgKi9cbiBcdHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZV9pbmZvIGluZm9bXTtcbiB9O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MzY6MzYuMDc2NjQwMjMxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MjUwMDQzNDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGZpbGVfZGVkdXBlX3JhbmdlYCBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBmb2N1c2luZyBvbiBlbmhhbmNpbmcgdGhlIHJlcG9ydGluZyB3aXRoaW4gdGhlIGRlZHVwbGljYXRpb24gcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBpdCdzIG1vZGlmeWluZyB0aGUgYHZmc19kZWR1cGVfZmlsZV9yYW5nZWAgZnVuY3Rpb24gaW4gYGZzL3JlbWFwX3JhbmdlLmNgIGFuZCB0aGUgYXNzb2NpYXRlZCB1c2VyLXNwYWNlIEFQSSBzdHJ1Y3R1cmUgYHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZWAgaW4gYGluY2x1ZGUvdWFwaS9saW51eC9mcy5oYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgcmVuYW1pbmcgYHJlc2VydmVkMmAgdG8gYGZsYWdzYCBpbiBgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlYCwgd2hpY2ggaW1tZWRpYXRlbHkgc2lnbmFscyBhIHNlbWFudGljIHNoaWZ0IOKAkyB3ZSdyZSBtb3ZpbmcgZnJvbSBhIHJlc2VydmVkIGZpZWxkIHRvIHNvbWV0aGluZyBtb3JlIGFjdGl2ZWx5IHVzZWQgZm9yIGNvbnRyb2wuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgIGZsYWcgaXMgdGhlIGtleSB0YWtlYXdheSwgSSBzdXNwZWN0LlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgZ29hbCBvZiB0aGlzIGlzIHRvIG1ha2UgaXQgbXVjaCBjbGVhcmVyIHRvIHRoZSB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uIGFib3V0IHRoZSBwcm9ncmVzcyBvZiBhIGRlZHVwZSBvcGVyYXRpb24sIGFsbG93aW5nIGZvciBiZXR0ZXIgZmVlZGJhY2sgYW5kIGhhbmRsaW5nIG9mIHBvdGVudGlhbGx5IGxvbmctcnVubmluZyBvcGVyYXRpb25zLlxuXG5Ob3csIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0J3MgcHJldHR5IGNsZWFyIGhvdyB0aGlzIG5ldyBmbGFnIGlzIGJlaW5nIHV0aWxpemVkLiBJbnN0ZWFkIG9mIGNoZWNraW5nIGBzYW1lLVx1MDAzZXJlc2VydmVkMmAsIHRoZSBwYXRjaCBub3cgY2hlY2tzIGBzYW1lLVx1MDAzZWZsYWdzIFx1MDAyNiB+RklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTYCBpbnNpZGUgdGhlIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgIGZ1bmN0aW9uLCBhbmQgdGhlIGBpbmZvLVx1MDAzZWJ5dGVzX2RlZHVwZWRgIHZhbHVlIGlzIGJlaW5nIHVwZGF0ZWQgYmFzZWQgb24gdGhlIHN0YXRlIG9mIHRoYXQgZmxhZy5cblxuVGhlIGNvZGUgc25pcHBldCBjYXVnaHQgbXkgYXR0ZW50aW9uLiBJdCBzaG93cyB0aGUgY29uZGl0aW9uYWwgdXBkYXRlIG9mIGBpbmZvLVx1MDAzZWJ5dGVzX2RlZHVwZWRgLiBIZXJlJ3Mgd2hlcmUgdGhlIGxvZ2ljIGJlY29tZXMgaW1wb3J0YW50OlxuYGBgY1xuXHRcdGlmIChkZWR1cGVkID09IC1FQkFERSkge1xuXHRcdFx0aW5mby1cdTAwM2VzdGF0dXMgPSBGSUxFX0RFRFVQRV9SQU5HRV9ESUZGRVJTO1xuXHRcdFx0aWYgKHNhbWUtXHUwMDNlZmxhZ3MgXHUwMDI2IEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykge1xuXHRcdFx0XHR1NjQgc3RlcCA9IGlfYmxvY2tzaXplKHNyYyk7XG4uLi5cblx0XHRcdFx0aWYgKHN0ZXAgXHUwMDNjPSAxKVxuXHRcdFx0XHRcdHN0ZXAgPSBsZW47XG5cdFx0XHRcdGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZCA9IG1pbl90KHU2NCwgc3RlcCwgbGVuKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGRlZHVwZWQgXHUwMDNjIDApIHtcblx0XHRcdGluZm8tXHUwMDNlc3RhdHVzID0gZGVkdXBlZDtcblx0XHR9IGVsc2UgaWYgKHNhbWUtXHUwMDNlZmxhZ3MgXHUwMDI2IEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykge1xuXHRcdFx0aW5mby1cdTAwM2VieXRlc19kZWR1cGVkID0gZGVkdXBlZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aW5mby1cdTAwM2VieXRlc19kZWR1cGVkID0gbGVuO1xuXHRcdH1cbmBgYFxuSWYgYGRlZHVwZWQgPT0gLUVCQURFYCAod2hpY2ggSSBhc3N1bWUgaXMgYW4gZXJyb3IgY29kZSksIHRoZW4gYGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZGAgaXMgTk9UIHVwZGF0ZWQsIHVubGVzcyBgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTYCBpcyBzZXQuIFRoZW4gaXQgY2FsY3VsYXRlcyB0aGUgYW1vdW50IG9mIHByb2dyZXNzIHRoYXQgd2FzIG1hZGUgYmVmb3JlIHRoZSBlcnJvciBhbmQgcG9wdWxhdGVzIGl0IGluIGBpbmZvLVx1MDAzZWJ5dGVzX2RlZHVwZWRgLiBJZiB0aGUgZmxhZyBpc24ndCBzZXQsIGl0IGRvZXNuJ3QuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBvcmlnaW5hbCBjb2RlLCBhbmQgSSdtIGFza2luZyBteXNlbGYsICdXYWl0LCBob3cgd2FzIHRoaXMgaGFuZGxlZCBiZWZvcmU/JyBJIGFtIGEgbGl0dGxlIGNvbmNlcm5lZC4gQ2hlY2tpbmcgdGhlIHByaW9yIGNvZGUgc2VnbWVudCwgbXkgY29uY2VybnMgYXJlIHZpbmRpY2F0ZWQsIGBpbmZvLVx1MDAzZWJ5dGVzX2RlZHVwZWRgIHdhcyAqbm90KiB1cGRhdGVkIGluIHRoZSBlcnJvciBwYXRoIGJlZm9yZS4gU28sIHRoaXMgcGF0Y2ggaXNuJ3QganVzdCBhIHNpbXBsZSBmZWF0dXJlIGFkZGl0aW9uOyBpdCBpcyBjaGFuZ2luZyBiZWhhdmlvciwgdG8gcmVwb3J0IHByb2dyZXNzIGV2ZW4gaWYgdGhlcmUgaXMgYW4gZXJyb3IuIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhpcyBpc24ndCBnb2luZyB0byBicmVhayBhbnkgZXhpc3RpbmcgdXNlciBzcGFjZSBhcHBsaWNhdGlvbnMuXG5cblRoZSBgaW5mb2AgdmFyaWFibGUsIGZyb20gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSwgaXMgcGFydCBvZiBgc2FtZWAsIHdoaWNoIG9yaWdpbmF0ZXMgZnJvbSB1c2VyLXNwYWNlLiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBob3cgaXMgdGhlIHN0cnVjdHVyZSAqYWN0dWFsbHkqIHVzZWQ/IElzIGl0IGNvcGllZCBmcm9tIHVzZXItc3BhY2UsIG1vZGlmaWVkIGluIGtlcm5lbC1zcGFjZSwgYW5kIHRoZW4gY29waWVkIGJhY2s/IEkgbmVlZCB0byBsb29rIGF0IGhvdyB0aGlzIGBzYW1lYCBzdHJ1Y3QgaXMgaGFuZGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSByZXN1bHRzIGFyZSByZXR1cm5lZCB0byB1c2VyIHNwYWNlLiBJIGFtIGdvaW5nIHRvIHNlZSBob3cgYHNhbWVgIGdldHMgaXRzIGluaXRpYWwgdmFsdWVzLCBzbyBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZWAgZnVuY3Rpb24gb3Igc29tZXRoaW5nIHNpbWlsYXIgdXNpbmcgdGhlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB1dGlsaXR5LiBUaGF0IHdpbGwgc2hvdyBtZSB0aGUgZGF0YSBmbG93IGFuZCBpZiB0aGUga2VybmVsIGlzIGV4cG9zaW5nIGFueSBzdGF0ZSB0aGF0IG5lZWRzIHByb3RlY3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozNjo1Mi4zMjY2ODY1MloiLCJTZXEiOjEyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2OTM5NDE0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9jdGwuYz00MTU9c3RhdGljIGludCBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL2lvY3RsLmMtNDQxLVxcdHNhbWUtXFx1MDAzZWRlc3RfY291bnQgPSBjb3VudDtcXG5mcy9pb2N0bC5jOjQ0MjpcXHRyZXQgPSB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2UoZmlsZSwgc2FtZSk7XFxuZnMvaW9jdGwuYy00NDMtXFx0aWYgKHJldClcXG4tLVxcbmZzL292ZXJsYXlmcy9maWxlLmM9NTI3PXN0YXRpYyBsb2ZmX3Qgb3ZsX2NvcHlmaWxlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxcbi0tXFxuZnMvb3ZlcmxheWZzL2ZpbGUuYy01ODAtXFx0XFx0Y2FzZSBPVkxfREVEVVBFOlxcbmZzL292ZXJsYXlmcy9maWxlLmM6NTgxOlxcdFxcdFxcdHJldCA9IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUocmVhbGZpbGVfaW4sIHBvc19pbixcXG5mcy9vdmVybGF5ZnMvZmlsZS5jLTU4Mi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRyZWFsZmlsZV9vdXQsIHBvc19vdXQsIGxlbixcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmM9MTgxPXN0YXRpYyB2b2lkIHZmc191bmxvY2tfdHdvX2ZvbGlvcyhzdHJ1Y3QgZm9saW8gKmZvbGlvMSwgc3RydWN0IGZvbGlvICpmb2xpbzIpXFxuLS1cXG5mcy9yZW1hcF9yYW5nZS5jLTE5MS0gKi9cXG5mcy9yZW1hcF9yYW5nZS5jOjE5MjpzdGF0aWMgaW50IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9jb21wYXJlKHN0cnVjdCBmaWxlICpzcmMsIGxvZmZfdCBzcmNvZmYsXFxuZnMvcmVtYXBfcmFuZ2UuYy0xOTMtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBmaWxlICpkZXN0LCBsb2ZmX3QgZHN0b2ZmLFxcbi0tXFxuZnMvcmVtYXBfcmFuZ2UuYz0yNzc9X19nZW5lcmljX3JlbWFwX2ZpbGVfcmFuZ2VfcHJlcChzdHJ1Y3QgZmlsZSAqZmlsZV9pbiwgbG9mZl90IHBvc19pbixcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmMtMzQwLVxcdFxcdGlmICghSVNfREFYKGlub2RlX2luKSlcXG5mcy9yZW1hcF9yYW5nZS5jOjM0MTpcXHRcXHRcXHRyZXQgPSB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VfY29tcGFyZShmaWxlX2luLCBwb3NfaW4sXFxuZnMvcmVtYXBfcmFuZ2UuYy0zNDItXFx0XFx0XFx0XFx0XFx0ZmlsZV9vdXQsIHBvc19vdXQsICpsZW4sIFxcdTAwMjZpc19zYW1lKTtcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmM9NDE2PXN0YXRpYyBib29sIG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmMtNDMxLVxcbmZzL3JlbWFwX3JhbmdlLmM6NDMyOmxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXFxuZnMvcmVtYXBfcmFuZ2UuYy00MzMtXFx0XFx0XFx0XFx0IHN0cnVjdCBmaWxlICpkc3RfZmlsZSwgbG9mZl90IGRzdF9wb3MsXFxuLS1cXG5mcy9yZW1hcF9yYW5nZS5jLTQ0MS1cXHQvKlxcbmZzL3JlbWFwX3JhbmdlLmM6NDQyOlxcdCAqIFRoaXMgaXMgcmVkdW5kYW50IGlmIGNhbGxlZCBmcm9tIHZmc19kZWR1cGVfZmlsZV9yYW5nZSgpLCBidXQgb3RoZXJcXG5mcy9yZW1hcF9yYW5nZS5jLTQ0My1cXHQgKiBjYWxsZXJzIG5lZWQgaXQgYW5kIGl0J3Mgbm90IHBlcmZvcm1hbmNlIHNlc2l0aXZlLi4uXFxuLS1cXG5mcy9yZW1hcF9yYW5nZS5jLTQ4OS19XFxuZnMvcmVtYXBfcmFuZ2UuYzo0OTA6RVhQT1JUX1NZTUJPTCh2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKTtcXG5mcy9yZW1hcF9yYW5nZS5jLTQ5MS1cXG5mcy9yZW1hcF9yYW5nZS5jOjQ5MjppbnQgdmZzX2RlZHVwZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKnNhbWUpXFxuZnMvcmVtYXBfcmFuZ2UuYy00OTMte1xcbi0tXFxuZnMvcmVtYXBfcmFuZ2UuYy01NTAtXFxuZnMvcmVtYXBfcmFuZ2UuYzo1NTE6XFx0XFx0ZGVkdXBlZCA9IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoZmlsZSwgb2ZmLCBmZF9maWxlKGRzdF9mZCksXFxuZnMvcmVtYXBfcmFuZ2UuYy01NTItXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGluZm8tXFx1MDAzZWRlc3Rfb2Zmc2V0LCBsZW4sXFxuLS1cXG5mcy9yZW1hcF9yYW5nZS5jLTU4My19XFxuZnMvcmVtYXBfcmFuZ2UuYzo1ODQ6RVhQT1JUX1NZTUJPTCh2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2UpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTIwODU9ZXh0ZXJuIGxvZmZfdCB2ZnNfY2xvbmVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZV9pbiwgbG9mZl90IHBvc19pbixcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaC0yMDg3LVxcdFxcdFxcdFxcdCAgIGxvZmZfdCBsZW4sIHVuc2lnbmVkIGludCByZW1hcF9mbGFncyk7XFxuaW5jbHVkZS9saW51eC9mcy5oOjIwODg6ZXh0ZXJuIGludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsXFxuaW5jbHVkZS9saW51eC9mcy5oLTIwODktXFx0XFx0XFx0XFx0IHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSk7XFxuaW5jbHVkZS9saW51eC9mcy5oOjIwOTA6ZXh0ZXJuIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXFxuaW5jbHVkZS9saW51eC9mcy5oLTIwOTEtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGZpbGUgKmRzdF9maWxlLCBsb2ZmX3QgZHN0X3BvcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MzY6NTMuODk2MDg5NTQyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDMwOTkwMTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgb2YgdGhlIHRob3VnaHQgcHJvY2VzcyBkZXNjcmliZWQ6XG5cbioqRGl2aW5nIGludG8gYGlvY3RsX2ZpbGVfZGVkdXBlX3JhbmdlYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGVkdXBsaWNhdGlvbiBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gY29kZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBgaW9jdGxfZmlsZV9kZWR1cGVfcmFuZ2VgIGNhbGwgaXMgaW1wbGVtZW50ZWQuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHdpdGggdGhlIGNvcmUgaW1wbGVtZW50YXRpb24uIEknbGwgaGVhZCBzdHJhaWdodCBvdmVyIHRvIGBmcy9pb2N0bC5jYC4gVGhhdCBzaG91bGQgY29udGFpbiB0aGUgcHJpbWFyeSBsb2dpYyBmb3IgaGFuZGxpbmcgdGhlIGZpbGUgc3lzdGVtIGNvbnRyb2wgb3BlcmF0aW9ucywgaW5jbHVkaW5nIHRoZSBkZWR1cGUgaW9jdGwuIExldCdzIHNlZSB3aGF0J3Mgd2hhdCBpbiB0aGVyZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzLCBlcnJvciBoYW5kbGluZywgYW5kIHRoZSBjb3JlIGFsZ29yaXRobSBmb3IgZmluZGluZyBhbmQgbWVyZ2luZyB0aGUgZHVwbGljYXRlIGV4dGVudHMuIEZyb20gdGhlcmUsIEkgY2FuIGZpZ3VyZSBvdXQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlIGFuZCBhbnkgZmlsZSBzeXN0ZW0gc3BlY2lmaWMgbnVhbmNlcy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0ODIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozNzowNS4zMjcwODI5NjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2lvY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMDpcXHR9XFxuIDQwMTpcXHRcXG4gNDAyOlxcdHN0YXRpYyBpbnQgaW9jdGxfZnN0aGF3KHN0cnVjdCBmaWxlICpmaWxwKVxcbiA0MDM6XFx0e1xcbiA0MDQ6XFx0XFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGZpbGVfaW5vZGUoZmlscCktXFx1MDAzZWlfc2I7XFxuIDQwNTpcXHRcXG4gNDA2OlxcdFxcdGlmICghbnNfY2FwYWJsZShzYi1cXHUwMDNlc191c2VyX25zLCBDQVBfU1lTX0FETUlOKSlcXG4gNDA3OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDQwODpcXHRcXG4gNDA5OlxcdFxcdC8qIFRoYXcgKi9cXG4gNDEwOlxcdFxcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNldGhhd19zdXBlcilcXG4gNDExOlxcdFxcdFxcdHJldHVybiBzYi1cXHUwMDNlc19vcC1cXHUwMDNldGhhd19zdXBlcihzYiwgRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsIE5VTEwpO1xcbiA0MTI6XFx0XFx0cmV0dXJuIHRoYXdfc3VwZXIoc2IsIEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLCBOVUxMKTtcXG4gNDEzOlxcdH1cXG4gNDE0OlxcdFxcbiA0MTU6XFx0c3RhdGljIGludCBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gNDE2OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSBfX3VzZXIgKmFyZ3ApXFxuIDQxNzpcXHR7XFxuIDQxODpcXHRcXHRzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKnNhbWUgPSBOVUxMO1xcbiA0MTk6XFx0XFx0aW50IHJldDtcXG4gNDIwOlxcdFxcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcXG4gNDIxOlxcdFxcdHUxNiBjb3VudDtcXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0aWYgKGdldF91c2VyKGNvdW50LCBcXHUwMDI2YXJncC1cXHUwMDNlZGVzdF9jb3VudCkpIHtcXG4gNDI0OlxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuIDQyNTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNDI2OlxcdFxcdH1cXG4gNDI3OlxcdFxcbiA0Mjg6XFx0XFx0c2l6ZSA9IHN0cnVjdF9zaXplKHNhbWUsIGluZm8sIGNvdW50KTtcXG4gNDI5OlxcdFxcdGlmIChzaXplIFxcdTAwM2UgUEFHRV9TSVpFKSB7XFxuIDQzMDpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiA0MzE6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQzMjpcXHRcXHR9XFxuIDQzMzpcXHRcXG4gNDM0OlxcdFxcdHNhbWUgPSBtZW1kdXBfdXNlcihhcmdwLCBzaXplKTtcXG4gNDM1OlxcdFxcdGlmIChJU19FUlIoc2FtZSkpIHtcXG4gNDM2OlxcdFxcdFxcdHJldCA9IFBUUl9FUlIoc2FtZSk7XFxuIDQzNzpcXHRcXHRcXHRzYW1lID0gTlVMTDtcXG4gNDM4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA0Mzk6XFx0XFx0fVxcbiA0NDA6XFx0XFxuIDQ0MTpcXHRcXHRzYW1lLVxcdTAwM2VkZXN0X2NvdW50ID0gY291bnQ7XFxuIDQ0MjpcXHRcXHRyZXQgPSB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2UoZmlsZSwgc2FtZSk7XFxuIDQ0MzpcXHRcXHRpZiAocmV0KVxcbiA0NDQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQ0NTpcXHRcXG4gNDQ2OlxcdFxcdHJldCA9IGNvcHlfdG9fdXNlcihhcmdwLCBzYW1lLCBzaXplKTtcXG4gNDQ3OlxcdFxcdGlmIChyZXQpXFxuIDQ0ODpcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbiA0NDk6XFx0XFxuIDQ1MDpcXHRvdXQ6XFxuIDQ1MTpcXHRcXHRrZnJlZShzYW1lKTtcXG4gNDUyOlxcdFxcdHJldHVybiByZXQ7XFxuIDQ1MzpcXHR9XFxuIDQ1NDpcXHRcXG4gNDU1OlxcdHN0YXRpYyBpbnQgaW9jdGxfZ2V0ZnN1dWlkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJncClcXG4gNDU2OlxcdHtcXG4gNDU3OlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBmaWxlX2lub2RlKGZpbGUpLVxcdTAwM2VpX3NiO1xcbiA0NTg6XFx0XFx0c3RydWN0IGZzdXVpZDIgdSA9IHsgLmxlbiA9IHNiLVxcdTAwM2VzX3V1aWRfbGVuLCB9O1xcbiA0NTk6XFx0XFxuIDQ2MDpcXHRcXHRpZiAoIXNiLVxcdTAwM2VzX3V1aWRfbGVuKVxcbiA0NjE6XFx0XFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuIDQ2MjpcXHRcXG4gNDYzOlxcdFxcdG1lbWNweShcXHUwMDI2dS51dWlkWzBdLCBcXHUwMDI2c2ItXFx1MDAzZXNfdXVpZCwgc2ItXFx1MDAzZXNfdXVpZF9sZW4pO1xcbiA0NjQ6XFx0XFxuIDQ2NTpcXHRcXHRyZXR1cm4gY29weV90b191c2VyKGFyZ3AsIFxcdTAwMjZ1LCBzaXplb2YodSkpID8gLUVGQVVMVCA6IDA7XFxuIDQ2NjpcXHR9XFxuIDQ2NzpcXHRcXG4gNDY4OlxcdHN0YXRpYyBpbnQgaW9jdGxfZ2V0X2ZzX3N5c2ZzX3BhdGgoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmdwKVxcbiA0Njk6XFx0e1xcbiA0NzA6XFx0XFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGZpbGVfaW5vZGUoZmlsZSktXFx1MDAzZWlfc2I7XFxuIDQ3MTpcXHRcXG4gNDcyOlxcdFxcdGlmICghc3RybGVuKHNiLVxcdTAwM2VzX3N5c2ZzX25hbWUpKVxcbiA0NzM6XFx0XFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuIDQ3NDpcXHRcXG4gNDc1OlxcdFxcdHN0cnVjdCBmc19zeXNmc19wYXRoIHUgPSB7fTtcXG4gNDc2OlxcdFxcbiA0Nzc6XFx0XFx0dS5sZW4gPSBzY25wcmludGYodS5uYW1lLCBzaXplb2YodS5uYW1lKSwgXFxcIiVzLyVzXFxcIiwgc2ItXFx1MDAzZXNfdHlwZS1cXHUwMDNlbmFtZSwgc2ItXFx1MDAzZXNfc3lzZnNfbmFtZSk7XFxuIDQ3ODpcXHRcXG4gNDc5OlxcdFxcdHJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgXFx1MDAyNnUsIHNpemVvZih1KSkgPyAtRUZBVUxUIDogMDtcXG4gNDgwOlxcdH1cXG4gNDgxOlxcdFxcbiA0ODI6XFx0LypcXG4gNDgzOlxcdCAqIGRvX3Zmc19pb2N0bCgpIGlzIG5vdCBmb3IgZHJpdmVycyBhbmQgbm90IGludGVuZGVkIHRvIGJlIEVYUE9SVF9TWU1CT0woKSdkLlxcbiA0ODQ6XFx0ICogSXQncyBqdXN0IGEgc2ltcGxlIGhlbHBlciBmb3Igc3lzX2lvY3RsIGFuZCBjb21wYXRfc3lzX2lvY3RsLlxcbiA0ODU6XFx0ICpcXG4gNDg2OlxcdCAqIFdoZW4geW91IGFkZCBhbnkgbmV3IGNvbW1vbiBpb2N0bHMgdG8gdGhlIHN3aXRjaGVzIGFib3ZlIGFuZCBiZWxvdyxcXG4gNDg3OlxcdCAqIHBsZWFzZSBlbnN1cmUgdGhleSBoYXZlIGNvbXBhdGlibGUgYXJndW1lbnRzIGluIGNvbXBhdCBtb2RlLlxcbiA0ODg6XFx0ICpcXG4gNDg5OlxcdCAqIFRoZSBMU00gbWFpbGluZyBsaXN0IHNob3VsZCBhbHNvIGJlIG5vdGlmaWVkIG9mIGFueSBjb21tYW5kIGFkZGl0aW9ucyBvclxcbiA0OTA6XFx0ICogY2hhbmdlcywgYXMgc3BlY2lmaWMgTFNNcyBtYXkgYmUgYWZmZWN0ZWQuXFxuIDQ5MTpcXHQgKi9cXG4gNDkyOlxcdHN0YXRpYyBpbnQgZG9fdmZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgZmQsXFxuIDQ5MzpcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gNDk0OlxcdHtcXG4gNDk1OlxcdFxcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xcbiA0OTY6XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlscCk7XFxuIDQ5NzpcXHRcXG4gNDk4OlxcdFxcdHN3aXRjaCAoY21kKSB7XFxuIDQ5OTpcXHRcXHRjYXNlIEZJT0NMRVg6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjM3OjA1LjMyNzE5MzUyN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjcyNzk5Mzc2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBTYWZldHkgb2YgYHZmc19kZWR1cGVfZmlsZV9yYW5nZWAgYW5kIGl0cyBJbnRlcmFjdGlvbiB3aXRoIFVzZXItU3BhY2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGBtZW1kdXBfdXNlcmAgYmVpbmcgdXNlZC4gVGhhdCdzIG15IGZpcnN0IHNpZ25hbCB0byBzdGFydCB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBXZSdyZSBhbGxvY2F0aW5nIGFuZCBjb3B5aW5nIGEgc3RydWN0dXJlLCBgc2FtZWAsIGRpcmVjdGx5IGZyb20gdXNlci1zcGFjZSB1c2luZyBgbWVtZHVwX3VzZXIoYXJncCwgc2l6ZSlgLiBUaGVuIHdlIGNhbGwgYHZmc19kZWR1cGVfZmlsZV9yYW5nZShmaWxlLCBzYW1lKWAuIElmIGV2ZXJ5dGhpbmcgZ29lcyB3ZWxsIChyZXR1cm5zIDApLCB3ZSBjb3B5IGl0ICpiYWNrKiB0byB1c2VyLXNwYWNlIHdpdGggYGNvcHlfdG9fdXNlcihhcmdwLCBzYW1lLCBzaXplKWAuXG5cblJpZ2h0IGF3YXksIGFsYXJtIGJlbGxzIHN0YXJ0IGdvaW5nIG9mZi4gYG1lbWR1cF91c2VyYCBjb3BpZXMgdGhlICplbnRpcmUqIHN0cnVjdHVyZSBmcm9tIHVzZXItc3BhY2UuIFNvIGFueSB1bmluaXRpYWxpemVkIGZpZWxkcyBpbiBgc2FtZWAgYXJlIGVzc2VudGlhbGx5IHdoYXRldmVyIGdhcmJhZ2UgdGhlIHVzZXIgcHJvY2VzcyBoYXBwZW5lZCB0byBoYXZlIGluIHRoYXQgbWVtb3J5IHJlZ2lvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbid0IG9wZW5pbmcgYSB2dWxuZXJhYmlsaXR5LlxuXG5XYWl0LCBpZiB0aGUgdXNlciBwcm92aWRlcyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYG1lbWR1cF91c2VyYCBjb3BpZXMgaXQsIGFuZCB0aGVuIGl0IGdldHMgY29waWVkICpiYWNrKiB0byB1c2VyLXNwYWNlLiAgVGhlcmUncyBubyBrZXJuZWwgbWVtb3J5IGxlYWsgaGVyZSwgaXMgdGhlcmU/IFRoZSBtZW1vcnkgb3JpZ2luYXRlZCBpbiB1c2VyLXNwYWNlLCBzbyBldmVuIGlmIGl0J3MgZ2FyYmFnZSwgdGhlIGtlcm5lbCBpcyBqdXN0IGFjdGluZyBhcyBhIHBhc3MtdGhyb3VnaC4gT2theSwgc28gZmFyIHNvIGdvb2QuIEl0J3MgZXNzZW50aWFsbHkgcmV0dXJuaW5nIHRoZSBzYW1lIGdhcmJhZ2UgdGhlIHVzZXIgcHJvdmlkZWQuXG5cbkJ1dCB3aGF0IGlmIGBzaXplYCBpcyBsYXJnZXIgdGhhbiB3aGF0IHRoZSB1c2VyICphY3R1YWxseSogaW5pdGlhbGl6ZWQ/IFNhbWUgZGVhbC4gYG1lbWR1cF91c2VyYCBjb3BpZXMgYHNpemVgIGJ5dGVzLCBldmVuIGlmIHRoZSB1c2VyLXNwYWNlIHByb2dyYW0gb25seSBpbml0aWFsaXplZCBhIHNtYWxsZXIgY2h1bmsuICBUaGF0J3MgYSB1c2VyLXNwYWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLCBub3QgYSBrZXJuZWwgbWVtb3J5IGxlYWsuIEkgbmVlZCB0byBub3RlIHRoYXQgaW4gbXkgY29tbWVudHMuXG5cbk5vdywgd2hhdCBpZiBgaW5mby1cdTAwM2VieXRlc19kZWR1cGVkYCAqaXNuJ3QqIHVwZGF0ZWQgYnkgdGhlIGtlcm5lbCBhbmQgdGhlbiBnZXRzIGNvcGllZCBiYWNrIHRvIHVzZXItc3BhY2U/ICBTaW5jZSB0aGUgZGF0YSB3YXMgY29waWVkIEZST00gdXNlci1zcGFjZSwgaXQganVzdCByZXR1cm5zIHRoZSBzYW1lIHVuaW5pdGlhbGl6ZWQgZ2FyYmFnZSB0byB1c2VyLXNwYWNlLCBzbyB0aGVyZSdzICpzdGlsbCogbm8ga2VybmVsIG1lbW9yeSBsZWFrLiBJIGZlZWwgZ29vZCBhYm91dCB0aGF0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZywgdGhvdWdoLlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uIGFuZCBsb29rIGF0IHRoZSBsb2dpYyBhcm91bmQgYGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZGAuIEkgbmVlZCB0byBlbnN1cmUgaXQncyBpbml0aWFsaXplZCBjb3JyZWN0bHkgaW4gKmFsbCogY2FzZXMuIExldCdzIHNlZS4uLiBBaCwgdGhlcmUncyBhIHBhdGNoIHRoYXQgY29uZGl0aW9uYWxseSB1cGRhdGVzIGBpbmZvLVx1MDAzZWJ5dGVzX2RlZHVwZWRgIGJhc2VkIG9uIGBzYW1lLVx1MDAzZWZsYWdzIFx1MDAyNiBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgLlxuXG5JZiB0aGUgZmxhZyBpcyAqbm90KiBzZXQsIGBpbmZvLVx1MDAzZWJ5dGVzX2RlZHVwZWRgIGlzbid0IHVwZGF0ZWQgd2hlbiBgZGVkdXBlZCA9PSAtRUJBREVgIG9yIHdoZW4gYGRlZHVwZWQgXHUwMDNjIDBgLiBUaGF0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyLlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2sgYW5kIGxvb2sgYXQgdGhlICpvbGQqIGxvZ2ljOlxuXG5gYGBjXG5cdFx0aWYgKGRlZHVwZWQgPT0gLUVCQURFKVxuXHRcdFx0aW5mby1cdTAwM2VzdGF0dXMgPSBGSUxFX0RFRFVQRV9SQU5HRV9ESUZGRVJTO1xuXHRcdGVsc2UgaWYgKGRlZHVwZWQgXHUwMDNjIDApXG5cdFx0XHRpbmZvLVx1MDAzZXN0YXR1cyA9IGRlZHVwZWQ7XG5cdFx0ZWxzZVxuXHRcdFx0aW5mby1cdTAwM2VieXRlc19kZWR1cGVkID0gbGVuO1xuYGBgXG5cblByZXZpb3VzbHksIGlmIGBkZWR1cGVkID09IC1FQkFERWAsIHRoZW4gYGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZGAgd2FzICpub3QqIHVwZGF0ZWQuIFNhbWUgZm9yIGBkZWR1cGVkIFx1MDAzYyAwYC4gSWYgYGRlZHVwZWQgXHUwMDNlPSAwYCwgYGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZGAgd2FzIGFsd2F5cyB1cGRhdGVkIHRvIGBsZW5gLlxuXG5Ob3cgd2l0aCB0aGUgcGF0Y2gsIHRoZSBjb2RlIGxvb2tzIGxpa2U6XG5cbmBgYGNcblx0XHRpZiAoZGVkdXBlZCA9PSAtRUJBREUpIHtcblx0XHRcdGluZm8tXHUwMDNlc3RhdHVzID0gRklMRV9ERURVUEVfUkFOR0VfRElGRkVSUztcblx0XHRcdGlmIChzYW1lLVx1MDAzZWZsYWdzIFx1MDAyNiBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1MpIHtcblx0XHRcdFx0Li4uXG5cdFx0XHRcdGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZCA9IG1pbl90KHU2NCwgc3RlcCwgbGVuKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGRlZHVwZWQgXHUwMDNjIDApIHtcblx0XHRcdGluZm8tXHUwMDNlc3RhdHVzID0gZGVkdXBlZDtcblx0XHR9IGVsc2UgaWYgKHNhbWUtXHUwMDNlZmxhZ3MgXHUwMDI2IEZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykge1xuXHRcdFx0aW5mby1cdTAwM2VieXRlc19kZWR1cGVkID0gZGVkdXBlZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aW5mby1cdTAwM2VieXRlc19kZWR1cGVkID0gbGVuO1xuXHRcdH1cbmBgYFxuXG5Ob3csIGlmIGBkZWR1cGVkIFx1MDAzZT0gMGAgKmFuZCogdGhlIGZsYWcgaXMgKm5vdCogc2V0LCBgaW5mby1cdTAwM2VieXRlc19kZWR1cGVkID0gbGVuYCBpcyBleGVjdXRlZCAodGhlIGBlbHNlYCBicmFuY2gpLiBJZiB0aGUgZmxhZyAqaXMqIHNldCwgYGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZCA9IGRlZHVwZWRgLlxuXG5TbywgYGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZGAgaXMgbm93IHVwZGF0ZWQgaW4gdGhlICpzYW1lKiBjYXNlcyBhcyBiZWZvcmUgKnBsdXMqIGFkZGl0aW9uYWxseSB3aGVuIGBkZWR1cFxuXG4iLCJJbnB1dFRva2VucyI6NzIxNywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjM3OjQ4LjA1NTE4OTc4N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2MDM1OTcxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb2N0bC5jPTQxNT1zdGF0aWMgaW50IGlvY3RsX2ZpbGVfZGVkdXBlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvaW9jdGwuYy00NDEtXFx0c2FtZS1cXHUwMDNlZGVzdF9jb3VudCA9IGNvdW50O1xcbmZzL2lvY3RsLmM6NDQyOlxcdHJldCA9IHZmc19kZWR1cGVfZmlsZV9yYW5nZShmaWxlLCBzYW1lKTtcXG5mcy9pb2N0bC5jLTQ0My1cXHRpZiAocmV0KVxcbi0tXFxuZnMvcmVtYXBfcmFuZ2UuYz00MzI9bG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmMtNDQxLVxcdC8qXFxuZnMvcmVtYXBfcmFuZ2UuYzo0NDI6XFx0ICogVGhpcyBpcyByZWR1bmRhbnQgaWYgY2FsbGVkIGZyb20gdmZzX2RlZHVwZV9maWxlX3JhbmdlKCksIGJ1dCBvdGhlclxcbmZzL3JlbWFwX3JhbmdlLmMtNDQzLVxcdCAqIGNhbGxlcnMgbmVlZCBpdCBhbmQgaXQncyBub3QgcGVyZm9ybWFuY2Ugc2VzaXRpdmUuLi5cXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmM9NDkwPUVYUE9SVF9TWU1CT0wodmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZSk7XFxuZnMvcmVtYXBfcmFuZ2UuYy00OTEtXFxuZnMvcmVtYXBfcmFuZ2UuYzo0OTI6aW50IHZmc19kZWR1cGVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICpzYW1lKVxcbmZzL3JlbWFwX3JhbmdlLmMtNDkzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaD0yMDg1PWV4dGVybiBsb2ZmX3QgdmZzX2Nsb25lX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjA4Ny1cXHRcXHRcXHRcXHQgICBsb2ZmX3QgbGVuLCB1bnNpZ25lZCBpbnQgcmVtYXBfZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvZnMuaDoyMDg4OmV4dGVybiBpbnQgdmZzX2RlZHVwZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLFxcbmluY2x1ZGUvbGludXgvZnMuaC0yMDg5LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKnNhbWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozNzo1MC40MTU1NTQwMTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3MzE3ODU0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgdGhlIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgIENhbGxlcnMgYW5kIFN0cnVjdHVyZXMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYC4gVGhlIGNvZGUgdHJhY2VzIHNob3cgdGhhdCB0aGUgb25seSBkaXJlY3QgY2FsbGVyIEkgc2VlIGlzIGBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZWAgd2l0aGluIGBmcy9pb2N0bC5jYC4gVGhhdCBmdW5jdGlvbiBzZWVtcyB0byBiZSByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIGlvY3RsIGNhbGwsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSBpdCBhbGxvY2F0aW5nIHRoZSBgc2FtZWAgYXJyYXkgdXNpbmcgYG1lbWR1cF91c2VyYCwgd2hpY2ggaXNuJ3QgZW50aXJlbHkgc3VycHJpc2luZyBpbiB0aGlzIGNvbnRleHQuIEl0IHN1Z2dlc3RzIHRoZXkncmUgbGlrZWx5IGR1cGxpY2F0aW5nIGRhdGEgcHJvdmlkZWQgYnkgdXNlcnNwYWNlLlxuXG5CdXQgaGFuZyBvbi4uLiBJIG5lZWQgdG8gY29uc2lkZXIgYHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZWAuIFRoaXMgc3RydWN0IGhhcyB0byBiZSB1c2VkIHNvbWV3aGVyZSBiZXNpZGVzIGp1c3QgdGhlIGlvY3RsIHBhdGguIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBvdGhlciBwb3RlbnRpYWwgY29uc3VtZXJzIG9yIHVzZXJzIG9mIHRoYXQgZGF0YSBzdHJ1Y3R1cmUgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTk3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6Mzc6NTQuMDg4NzM0OTI2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE0NzkyOTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9jdGwuYz00MTU9c3RhdGljIGludCBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5mcy9pb2N0bC5jOjQxNjpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgX191c2VyICphcmdwKVxcbmZzL2lvY3RsLmMtNDE3LXtcXG5mcy9pb2N0bC5jOjQxODpcXHRzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKnNhbWUgPSBOVUxMO1xcbmZzL2lvY3RsLmMtNDE5LVxcdGludCByZXQ7XFxuLS1cXG5mcy9yZW1hcF9yYW5nZS5jPTQ5MD1FWFBPUlRfU1lNQk9MKHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUpO1xcbmZzL3JlbWFwX3JhbmdlLmMtNDkxLVxcbmZzL3JlbWFwX3JhbmdlLmM6NDkyOmludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSlcXG5mcy9yZW1hcF9yYW5nZS5jLTQ5My17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MjA4OD1leHRlcm4gaW50IHZmc19kZWR1cGVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjA4OTpcXHRcXHRcXHRcXHQgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICpzYW1lKTtcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjA5MC1leHRlcm4gbG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oPTE2Nz1zdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VfaW5mbyB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0xODAtXFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6MTgxOi8qIGZsYWdzIGZvciBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2UgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0xODItI2RlZmluZSBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1MgKDFVIFxcdTAwM2NcXHUwMDNjIDApXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0xODQtLyogZnJvbSBzdHJ1Y3QgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6MTg1OnN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMTg2LVxcdF9fdTY0IHNyY19vZmZzZXQ7XFx0LyogaW4gLSBzdGFydCBvZiBleHRlbnQgaW4gc291cmNlICovXFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaD05OT1zdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VfaW5mbyB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0xMTMtLyogZnJvbSBzdHJ1Y3QgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzICovXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6MTE0OnN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSB7XFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMTE1LVxcdF9fdTY0IHNyY19vZmZzZXQ7XFx0LyogaW4gLSBzdGFydCBvZiBleHRlbnQgaW4gc291cmNlICovXFxuLS1cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaD0xNjc9c3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlX2luZm8ge1xcbi0tXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMTgxLS8qIGZyb20gc3RydWN0IGJ0cmZzX2lvY3RsX2ZpbGVfZXh0ZW50X3NhbWVfYXJncyAqL1xcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oOjE4MjpzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2Uge1xcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTE4My1cXHRfX3U2NCBzcmNfb2Zmc2V0O1xcdC8qIGluIC0gc3RhcnQgb2YgZXh0ZW50IGluIHNvdXJjZSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozNzo1NS42MDM1MzQzMloiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTAyNTYyMzQ5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBbmFseXNpcyBvZiBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZWAgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgbWVtZHVwX3VzZXJgIHVzYWdlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwicG90ZW50aWFsIGtlcm5lbCBtZW1vcnkgbGVhaz9cIiBUaGUgcHJvY2VzcyBpczogIGBtZW1kdXBfdXNlcmAgYWxsb2NhdGVzIG1lbW9yeSwgY29waWVzIHVzZXIgc3BhY2UgZGF0YSwgdGhlIGtlcm5lbCBtb2RpZmllcyBzb21lIGZpZWxkcywgYW5kIHRoZW4gYGNvcHlfdG9fdXNlcmAgc2VuZHMgaXQgYmFjay4gIEJ1dCBob2xkIG9uLiAgVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBgbWVtZHVwX3VzZXJgIGNvcGllcyAqZnJvbSogdXNlciBzcGFjZS4gQW55IHVuaW5pdGlhbGl6ZWQgYnl0ZXMgaW4gdGhlIGBzYW1lYCBzdHJ1Y3QgKHBhZGRpbmcsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHByb3ZpZGVkIGJ5IHVzZXIgc3BhY2UpIGFyZSAqYWxyZWFkeSogdXNlci1wcm92aWRlZCBkYXRhLiBJdCdzIGp1c3QgYmVpbmcgY29waWVkIGJhY2suIE5vIGtlcm5lbCBtZW1vcnkgbGVhayB0aGVyZS5cblxuTm93LCBhbSBJIG1pc3Npbmcgc29tZSBwYWRkaW5nPyBJIHF1aWNrbHkgY2hlY2tlZCB0aGUgYGZpbGVfZGVkdXBlX3JhbmdlX2luZm9gIHN0cnVjdCBhbmQgdGhlbiB0aGUgYGZpbGVfZGVkdXBlX3JhbmdlYCBzdHJ1Y3QuIFRoZSBzaXplcyBhZGQgdXAgcGVyZmVjdGx5OyBubyBwYWRkaW5nLiBFdmVuIGlmIHRoZXJlIHdhcyBwYWRkaW5nLCBgbWVtZHVwX3VzZXJgIGNvcGllcyB0aGUgZXhhY3Qgc2l6ZSBnaXZlbiB0byBpdCBieSB0aGUgYHNpemUgPSBzdHJ1Y3Rfc2l6ZShzYW1lLCBpbmZvLCBjb3VudCk7YCBjYWxsLCBzbyBubyBpc3N1ZXMgdGhlcmUuXG5cblRoZSBuZXh0IHRob3VnaHQgaXMgYHNhbWUtXHUwMDNlZmxhZ3NgLiBJdCdzIHVzZWQgaW4gYSBjb25kaXRpb25hbCBjaGVjazogYGlmIChzYW1lLVx1MDAzZXJlc2VydmVkMSB8fCAoc2FtZS1cdTAwM2VmbGFncyBcdTAwMjYgfkZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTUykpYC4gIElmIHVzZXIgc3BhY2UgcHJvdmlkZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgZm9yIGBmbGFnc2AsIGl0IG1pZ2h0IGhhdmUgcmFuZG9tIGJpdHMgc2V0LCBidXQgdGhpcyB3b3VsZCBqdXN0IGxlYWQgdG8gYW4gYC1FSU5WQUxgIHJldHVybi4gVGhpcyBpcyBhIHVzZXIgc3BhY2UgYnVnLCBub3QgYSBzZWN1cml0eSBpc3N1ZSAoYW5kIEtNU0FOIHdvdWxkIHBpY2sgaXQgdXApLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgS01TQU4ncyBiZWhhdmlvdXIuIERvZXMgS01TQU4gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgdXNlciBzcGFjZSBkYXRhPyBObywgbm90IHJlYWxseS4gS01TQU4gdHJhY2tzIGtlcm5lbCBtZW1vcnkuIFdoZW4gZGF0YSBpcyBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlIHRvIHRoZSBrZXJuZWwsIEtNU0FOIGFzc3VtZXMgaXQncyB2YWxpZC4gSG93ZXZlciwgS01TQU4gZG9lcyBjaGVjayBpZiBtZW1vcnkgKnRvKiB1c2VyIHNwYWNlIGlzIHVuaW5pdGlhbGl6ZWQgKHBvdGVudGlhbCBpbmZvIGxlYWspLiBCdXQgaGVyZSwgc2luY2UgdGhlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYnkgYGttYWxsb2NgIHZpYSBgbWVtZHVwX3VzZXJgLCBgbWVtZHVwX3VzZXJgIGRvZXMgYSBgY29weV9mcm9tX3VzZXJgIGNhbGwsIHdoaWNoIFwidW5wb2lzb25zXCIgdGhlIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiB3aWxsIGNvbnNpZGVyIGBzYW1lYCBmdWxseSBpbml0aWFsaXplZC5cblxuVGhlbiBJIGNvbnNpZGVyZWQgb3RoZXIgY2hhbmdlcyBpbiB0aGUgcGF0Y2gsIHNwZWNpZmljYWxseSB0aGUgY29kZSB1cGRhdGluZyBgaW5mby1cdTAwM2VieXRlc19kZWR1cGVkYC4gVGhpcyBzZWN0aW9uIHVzZXMgYGlfYmxvY2tzaXplKHNyYylgLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlZCBoZXJlOyBhbGwgc2FmZS5cblxuTGV0J3MgYXBwbHkgdGhlIEtNU0FOIHJ1bGVzIGFuZCBjaGVjayBpZiB0aGUgcGF0Y2ggc2F0aXNmaWVzIHRoZSBLTVNBTiBjb25kaXRpb25zLlxuMS4gYHNhbWVgIGlzIHNlbnQgdG8gdXNlciBzcGFjZSB2aWEgYGNvcHlfdG9fdXNlcmAuIEhvd2V2ZXIsIGl0J3MgYWxsb2NhdGVkIHZpYSBgbWVtZHVwX3VzZXJgLCB3aGljaCBjb3BpZXMgdGhlICplbnRpcmUqIHN0cnVjdHVyZSBmcm9tIHVzZXIgc3BhY2UuIE5vIGtlcm5lbCBtZW1vcnkgaXMgY3JlYXRlZCBhbmQgdW5pbml0aWFsaXplZC5cbjIuIFRoZSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRzIG9uIGBzYW1lLVx1MDAzZWZsYWdzYCwgd2hpY2ggY29tZXMgZnJvbSB1c2VyIHNwYWNlLiBLTVNBTiB0cmVhdHMgdGhpcyBhcyBpbml0aWFsaXplZC5cbjMuIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbi5cbjQuIE5vIGJvdW5kcyBvciBsZW5ndGggbW9kaWZpY2F0aW9ucyB0aGF0IGNvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGRhdGEuXG5cbldhaXQsIGlzIGl0IHBvc3NpYmxlIHRoYXQgYHNpemVgIGNhbGN1bGF0ZWQgYnkgYHN0cnVjdF9zaXplYCBpcyBsYXJnZXIgdGhhbiB3aGF0IGBtZW1kdXBfdXNlcmAgY29waWVzP1xuTm8sIHRoZSBzaXplIGFyZ3VtZW50IGluIGBtZW1kdXBfdXNlcmAgKm11c3QqIGJlIHRoZSBzaXplIGFyZ3VtZW50IG9mIGBjb3B5X2Zyb21fdXNlcmAgY2FsbC5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIGBtZW1kdXBfdXNlcmAgY29waWVzIGV4YWN0bHkgYHNpemVgIGJ5dGVzIGZyb20gYGFyZ3BgIGJ5IHVzaW5nIGBjb3B5X2Zyb21fdXNlcmAsIGFuZCBgc2l6ZWAgaXMgY2FsY3VsYXRlZCBjb3JyZWN0bHksIGBzYW1lYCBpcyBmdWxseSBpbml0aWFsaXplZCB3aXRoIGRhdGEgZnJvbSB1c2VyIHNwYWNlLlxuXG5JJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IEtNU0FOIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2OTIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjM4OjE2LjYyOTE2MDQ3NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3NTY3NzcxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIFxcXFwqbWVtZHVwX3VzZXJcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3N0cmluZy5oPTE3PWV4dGVybiBjaGFyICpzdHJuZHVwX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKiwgbG9uZyk7XFxuaW5jbHVkZS9saW51eC9zdHJpbmcuaDoxODpleHRlcm4gdm9pZCAqbWVtZHVwX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKiwgc2l6ZV90KSBfX3JlYWxsb2Nfc2l6ZSgyKTtcXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTE5LWV4dGVybiB2b2lkICp2bWVtZHVwX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKiwgc2l6ZV90KSBfX3JlYWxsb2Nfc2l6ZSgyKTtcXG4tLVxcbm1tL3V0aWwuYz0yMDY9c3Vic3lzX2luaXRjYWxsKGluaXRfdXNlcl9idWNrZXRzKTtcXG4tLVxcbm1tL3V0aWwuYy0yMTYtICovXFxubW0vdXRpbC5jOjIxNzp2b2lkICptZW1kdXBfdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLCBzaXplX3QgbGVuKVxcbm1tL3V0aWwuYy0yMTgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozODoxOC41MDQ4NDQ3MjhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyMTg4MTIyMzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBtZW1kdXBfdXNlcmAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBtZW1kdXBfdXNlcmAgaW4gYG1tL3V0aWwuY2AuIEknbSBzdGFydGluZyBoZXJlIGJlY2F1c2UuLi4gd2VsbCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBJJ20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcywgYW5kIHRoaXMgb25lJ3MgZ290IGEgdXNlci1zcGFjZSBjb21wb25lbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiwgZXNwZWNpYWxseSB3aGVyZSB3ZSdyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgdW50cnVzdGVkIGRhdGEgb3IgcmVzb3VyY2UgY29udGVudGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSB0eXBpY2FsIGVycm9yIGhhbmRsaW5nIHBhdGhzOiBob3cgaXQgZGVhbHMgd2l0aCBwYWdlIGZhdWx0cywgaW52YWxpZCB1c2VyIHBvaW50ZXJzLCBhbmQgcmVzb3VyY2UgZXhoYXVzdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZXNwZWNpYWxseSBpZiBpdCdzIG9wZXJhdGluZyBvbiBkYXRhIHRoYXQgY291bGQgY2hhbmdlIGJldHdlZW4gdGhlIHVzZXItc3BhY2UgYW5kIGtlcm5lbC1zcGFjZSBjb3B5LiBUaW1lIHRvIGdldCB0aGUgZGVidWdnZXIgcmVhZHkganVzdCBpbiBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUyMCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjQ0OjIwLjY5Mjk3MDYzNloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdXRpbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxNzpcXHR2b2lkICptZW1kdXBfdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLCBzaXplX3QgbGVuKVxcbiAyMTg6XFx0e1xcbiAyMTk6XFx0XFx0dm9pZCAqcDtcXG4gMjIwOlxcdFxcbiAyMjE6XFx0XFx0cCA9IGttZW1fYnVja2V0c19hbGxvY190cmFja19jYWxsZXIodXNlcl9idWNrZXRzLCBsZW4sIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcXG4gMjIyOlxcdFxcdGlmICghcClcXG4gMjIzOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiAyMjQ6XFx0XFxuIDIyNTpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIocCwgc3JjLCBsZW4pKSB7XFxuIDIyNjpcXHRcXHRcXHRrZnJlZShwKTtcXG4gMjI3OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FRkFVTFQpO1xcbiAyMjg6XFx0XFx0fVxcbiAyMjk6XFx0XFxuIDIzMDpcXHRcXHRyZXR1cm4gcDtcXG4gMjMxOlxcdH1cXG4gMjMyOlxcdEVYUE9SVF9TWU1CT0wobWVtZHVwX3VzZXIpO1xcbiAyMzM6XFx0XFxuIDIzNDpcXHQvKipcXG4gMjM1OlxcdCAqIHZtZW1kdXBfdXNlciAtIGR1cGxpY2F0ZSBtZW1vcnkgcmVnaW9uIGZyb20gdXNlciBzcGFjZVxcbiAyMzY6XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6NDQ6MjAuNjkzMDg4MTI2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MjI2NDg5NDc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGZpbGVfZGVkdXBlX3JhbmdlYCBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyBgbWVtZHVwX3VzZXJgIGRlZmluaXRlbHkgYWxsb2NhdGVzIG1lbW9yeSBhbmQgY29waWVzIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdXNlciBzcGFjZS4gSWYgYGNvcHlfZnJvbV91c2VyYCBmYWlscywgd2hpY2ggd291bGQgYmUgZXhwZWN0ZWQgYmVoYXZpb3IsIGl0IGZyZWVzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGFuZCByZXR1cm5zIGAtRUZBVUxUYC4gVGhhdCBtZWFucyB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpcyBhbHdheXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBkYXRhIG9yaWdpbmF0aW5nIGZyb20gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSdzIGFic29sdXRlbHkgbm8ga2VybmVsIG1lbW9yeSBsZWFrIGhlcmUgZnJvbSBhIHNpbXBsZSBhbGxvY2F0aW9uL2NvcHkgcGVyc3BlY3RpdmUuXG5cbkJ1dCBob2xkIG9uLi4uIEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2ggY29tcGxldGVseS4gV2hhdCBpZiB0aGUga2VybmVsIGRvZXNuJ3QgYWN0dWFsbHkgKnVwZGF0ZSogdGhlIGBpbmZvLVx1MDAzZWJ5dGVzX2RlZHVwZWRgIGZpZWxkPyBJZiB0aGF0IGhhcHBlbnMsIGl0IGp1c3QgcmV0YWlucyB3aGF0ZXZlciB2YWx1ZSB0aGUgdXNlciBpbml0aWFsbHkgcHJvdmlkZWQgd2hlbiB0aGUgYHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZWAgd2FzIGNvcGllZCBmcm9tIHVzZXIgc3BhY2UuIFRoZW4sIHdoZW4gYGNvcHlfdG9fdXNlcmAgY29waWVzIHRoYXQgZmllbGQgYmFjayB0byB1c2VyIHNwYWNlLCBpdCB3aWxsIGVmZmVjdGl2ZWx5IHJldHVybiB0aGUgdXNlcidzICpvcmlnaW5hbCogdmFsdWUuIEkgc2VlIG5vdzsgdGhpcywgYWdhaW4sIHdvdWxkbid0IGNvbnN0aXR1dGUgYSBrZXJuZWwgbWVtb3J5IGxlYWsuXG5cbk5vdywgSSBzaG91bGQgaW52ZXN0aWdhdGUgZXZlcnkgc2luZ2xlIHBsYWNlIHRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmcgY3JpdGljYWwuIEkndmUgYWxyZWFkeSBjaGVja2VkIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VgIGFuZCBgaW9jdGxfZmlsZV9kZWR1cGVfcmFuZ2VgLiBXaGF0IGFib3V0IGBidHJmc19pb2N0bF9maWxlX2V4dGVudF9zYW1lX2FyZ3NgPyBUaGUgY29tbWVudCBkb2VzIHNheSBcIi8qIGZyb20gc3RydWN0IGJ0cmZzX2lvY3RsX2ZpbGVfZXh0ZW50X3NhbWVfYXJncyAqL1wiLiBUaGF0J3MgYSBzdHJvbmcgaGludCEgTGV0IG1lIGRpZyBpbnRvIHRoZSBgYnRyZnNgIGNvZGUgdG8gc2VlIGlmIGl0IG1ha2VzIHVzZSBvZiBgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlYC4gVGhpcyBpcyB3aGVyZSB0aGUgcG90ZW50aWFsIGZvciBpc3N1ZXMgbWlnaHQgbGllLCBhbmQgSSdtIG5vdCBydWxpbmcgb3V0IHRoYXQgSSBtYXkgaGF2ZSB0byBsb29rIGF0IGFsbCBvZiB0aGUgY2FsbGVycyBvZiB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAzOCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjQ5OjAyLjk1Nzk4NjI5N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4MjI3MzY4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJidHJmc19pb2N0bF9maWxlX2V4dGVudF9zYW1lX2FyZ3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg9MTY3PXN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZV9pbmZvIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oLTE4My1cXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaDoxODQ6LyogZnJvbSBzdHJ1Y3QgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMTg1LXN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaD05OT1zdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VfaW5mbyB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0xMTItXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6MTEzOi8qIGZyb20gc3RydWN0IGJ0cmZzX2lvY3RsX2ZpbGVfZXh0ZW50X3NhbWVfYXJncyAqL1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTExNC1zdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2Uge1xcbi0tXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg9MTY3PXN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZV9pbmZvIHtcXG4tLVxcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTE4MC1cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaDoxODE6LyogZnJvbSBzdHJ1Y3QgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzICovXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMTgyLXN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjQ5OjA0Ljg0MDI2ODVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE5MzQ3MjUzOTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJ0cmZzIERlZHVwbGljYXRpb24gQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgbG9va3MgbGlrZSBgYnRyZnNfaW9jdGxfZmlsZV9leHRlbnRfc2FtZV9hcmdzYCBpcyBqdXN0IHRoZSBsZWdhY3kgbmFtZSBmb3IgYGZpbGVfZGVkdXBlX3JhbmdlYC4gTWFrZXMgc2Vuc2UsIG5vIGNvbmZsaWN0aW5nIHVzZXMgdGhlcmUuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBJIHdhcyBhIGxpdHRsZSBjb25jZXJuZWQgYWJvdXQgYGluZm8tXHUwMDNlYnl0ZXNfZGVkdXBlZCA9IG1pbl90KHU2NCwgc3RlcCwgbGVuKTtgLiBCdXQgYHN0ZXBgIGlzIGRlcml2ZWQgZnJvbSBgaV9ibG9ja3NpemUoc3JjKWAsIHdoaWNoIGlzIGEgYHU2NGAgdG8gYmVnaW4gd2l0aCAob3IgcHJvbW90ZWQgdG8gb25lKS4gYGxlbmAgaXMgYWxzbyBhIGB1NjRgLiBTbywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIHRoZXJlLiBJdCdzIHNhZmUuXG5cbldoYXQgYWJvdXQgdGhhdCBgc2FtZS1cdTAwM2VmbGFncyBcdTAwMjYgfkZJTEVfREVEVVBFX1JBTkdFX1JFUE9SVF9QUk9HUkVTU2AgY2hlY2s/IElmIGBzYW1lLVx1MDAzZWZsYWdzYCBpc24ndCBpbml0aWFsaXplZCBvbiB0aGUgdXNlciBzcGFjZSBzaWRlLCB3ZSBjb3VsZCBlbmQgdXAgd2l0aCBzb21lIHJhbmRvbSBiaXRzLCB0cmlnZ2VyaW5nIGFuIGAtRUlOVkFMYCwgd2hpY2ggaXMgZmluZS4gSXQgd291bGQganVzdCBjb3JyZWN0bHkgZmFpbCBpZiBpdCdzIG5vdCBzZXQuXG5cbkdpdmVuIGFsbCBvZiB0aGlzLCB0aGlzIHBhdGNoIGlzbid0IGludHJvZHVjaW5nIGFueSBuZXcgcmlza3MgaW4gdGVybXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCBpdCBkb2VzIGlzIGFkZCB0aGUgcHJvZ3Jlc3MgcmVwb3J0aW5nIGZsYWcgYW5kIHVwZGF0ZXMgdGhlIGRlZHVwbGljYXRlZCBieXRlcy4gV2hpbGUgS0FTQU4gaXMgdGhlcmUgdG8gY2F0Y2ggbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIEkgZG9uJ3Qgc2VlIGFueSByaXNrIG9mIHRob3NlIGlzc3VlcyBoZXJlIGVpdGhlci5cblxuVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIHdpdGggdGhpcyByYXRpb25hbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDM2LCJPdXRwdXRUb2tlbnMiOjIxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjo1MTowNC4xODc1MjYxMzhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgdmZzX2RlZHVwZV9maWxlX3JhbmdlYCBmdW5jdGlvbiBhbmQgdGhlIGBzdHJ1Y3QgZmlsZV9kZWR1cGVfcmFuZ2VgIHVzZXItc3BhY2UgQVBJIHRvIGFkZCBhIG5ldyBmbGFnIGBGSUxFX0RFRFVQRV9SQU5HRV9SRVBPUlRfUFJPR1JFU1NgLiBUaGUgc3RydWN0dXJlIGBzYW1lYCBpcyBhbGxvY2F0ZWQgYW5kIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGF0YSBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBgbWVtZHVwX3VzZXJgIGluIGBpb2N0bF9maWxlX2RlZHVwZV9yYW5nZWAuIEFueSBmaWVsZHMgbm90IGV4cGxpY2l0bHkgdXBkYXRlZCBieSB0aGUga2VybmVsIHdpbGwgc2ltcGx5IHJldGFpbiB0aGUgdmFsdWVzIHByb3ZpZGVkIGJ5IHVzZXIgc3BhY2Ugd2hlbiBjb3BpZWQgYmFjayB2aWEgYGNvcHlfdG9fdXNlcmAuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgbm9yIGRvZXMgaXQgbW9kaWZ5IGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIGluIHRoaXMgY29kZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYHZmc19kZWR1cGVfZmlsZV9yYW5nZWAgZnVuY3Rpb24gYW5kIHRoZSBgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlYCB1c2VyLXNwYWNlIEFQSSB0byBhZGQgYSBuZXcgZmxhZyBgRklMRV9ERURVUEVfUkFOR0VfUkVQT1JUX1BST0dSRVNTYC4gVGhlIHN0cnVjdHVyZSBgc2FtZWAgaXMgYWxsb2NhdGVkIGFuZCBmdWxseSBpbml0aWFsaXplZCB3aXRoIGRhdGEgY29waWVkIGZyb20gdXNlciBzcGFjZSB2aWEgYG1lbWR1cF91c2VyYCBpbiBgaW9jdGxfZmlsZV9kZWR1cGVfcmFuZ2VgLiBBbnkgZmllbGRzIG5vdCBleHBsaWNpdGx5IHVwZGF0ZWQgYnkgdGhlIGtlcm5lbCB3aWxsIHNpbXBseSByZXRhaW4gdGhlIHZhbHVlcyBwcm92aWRlZCBieSB1c2VyIHNwYWNlIHdoZW4gY29waWVkIGJhY2sgdmlhIGBjb3B5X3RvX3VzZXJgLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIG5vciBkb2VzIGl0IG1vZGlmeSBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSBpbiB0aGlzIGNvZGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8d2pj[1] Phase: Succeeded StartedAt: 2026-08-17 12:51:15 +0000 UTC FinishedAt: 2026-08-17 12:51:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8d2pj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-17 12:51:15 +0000 UTC FinishedAt: 2026-08-17 12:51:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8d2pj[2] Phase: Succeeded StartedAt: 2026-08-17 12:51:15 +0000 UTC FinishedAt: 2026-08-17 16:34:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-17 12:51:15 +0000 UTC FinishedAt: 2026-08-17 16:34:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-17 12:51:15 +0000 UTC FinishedAt: 2026-08-17 12:51:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-17 12:51:15 +0000 UTC FinishedAt: 2026-08-17 12:51:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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-workflow8d2pj/series-workflow8d2pj-convert-artifact-77222705/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-17 12:51:25 +0000 UTC FinishedAt: 2026-08-17 13:09:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-17 12:51:25 +0000 UTC FinishedAt: 2026-08-17 13:09:57 +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:*85ea9254-3641-4f92-98bf-a214cc4a6beb,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-workflow8d2pj/series-workflow8d2pj-convert-artifact-77222705/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": "e1ac0dc5-73c8-4cac-b717-957a554093f6", "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-workflow8d2pj/series-workflow8d2pj-build-action-344912223/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-17 12:51:25 +0000 UTC FinishedAt: 2026-08-17 13:09:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*85ea9254-3641-4f92-98bf-a214cc4a6beb,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-workflow8d2pj/series-workflow8d2pj-convert-artifact-77222705/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": "e1ac0dc5-73c8-4cac-b717-957a554093f6", "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-workflow8d2pj/series-workflow8d2pj-build-action-344912223/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-17 13:09:57 +0000 UTC FinishedAt: 2026-08-17 13:09:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-17 13:09:57 +0000 UTC FinishedAt: 2026-08-17 13:09:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-17 13:09:57 +0000 UTC FinishedAt: 2026-08-17 13:10:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-17 13:09:57 +0000 UTC FinishedAt: 2026-08-17 13:10:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","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-workflow8d2pj/series-workflow8d2pj-convert-artifact-2068495492/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-17 13:10:07 +0000 UTC FinishedAt: 2026-08-17 13:12:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-17 13:10:07 +0000 UTC FinishedAt: 2026-08-17 13:12:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e1ac0dc5-73c8-4cac-b717-957a554093f6,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-workflow8d2pj/series-workflow8d2pj-build-action-344912223/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-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-17 13:12:22 +0000 UTC FinishedAt: 2026-08-17 13:12:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-17 13:12:22 +0000 UTC FinishedAt: 2026-08-17 13:12:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-17 13:12:22 +0000 UTC FinishedAt: 2026-08-17 13:29:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-17 13:12:22 +0000 UTC FinishedAt: 2026-08-17 13:29:24 +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:*85ea9254-3641-4f92-98bf-a214cc4a6beb,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-workflow8d2pj/series-workflow8d2pj-convert-artifact-2068495492/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": "41a4d87b-8d1e-42d3-b944-c6e562f2a8f8", "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-workflow8d2pj/series-workflow8d2pj-build-action-1554036368/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-17 13:12:22 +0000 UTC FinishedAt: 2026-08-17 13:29:14 +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:*85ea9254-3641-4f92-98bf-a214cc4a6beb,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-workflow8d2pj/series-workflow8d2pj-convert-artifact-2068495492/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": "41a4d87b-8d1e-42d3-b944-c6e562f2a8f8", "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-workflow8d2pj/series-workflow8d2pj-build-action-1554036368/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-17 13:29:24 +0000 UTC FinishedAt: 2026-08-17 13:29:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-17 13:29:24 +0000 UTC FinishedAt: 2026-08-17 13:29:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-17 13:29:24 +0000 UTC FinishedAt: 2026-08-17 13:31:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-17 13:29:24 +0000 UTC FinishedAt: 2026-08-17 13:31:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*41a4d87b-8d1e-42d3-b944-c6e562f2a8f8,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-workflow8d2pj/series-workflow8d2pj-build-action-1554036368/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-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-17 13:31:36 +0000 UTC FinishedAt: 2026-08-17 16:34:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-17 13:31:36 +0000 UTC FinishedAt: 2026-08-17 16:34:45 +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":["vfs_dedupe_file_range"],"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:*e1ac0dc5-73c8-4cac-b717-957a554093f6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*41a4d87b-8d1e-42d3-b944-c6e562f2a8f8,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-workflow8d2pj/series-workflow8d2pj-build-action-344912223/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-workflow8d2pj/series-workflow8d2pj-build-action-1554036368/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-17 13:31:36 +0000 UTC FinishedAt: 2026-08-17 13:31:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-17 13:31:36 +0000 UTC FinishedAt: 2026-08-17 13:31:41 +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":["vfs_dedupe_file_range"],"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-workflow8d2pj/series-workflow8d2pj-convert-artifact-599981965/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-17 13:31:36 +0000 UTC FinishedAt: 2026-08-17 13:31:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-17 13:31:36 +0000 UTC FinishedAt: 2026-08-17 13:31:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-17 13:31:36 +0000 UTC FinishedAt: 2026-08-17 13:31:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-17 13:31:46 +0000 UTC FinishedAt: 2026-08-17 16:34:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8d2pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","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":["vfs_dedupe_file_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","series_id":"b93ec397-2207-4575-992c-647324ed16c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-17 13:31:46 +0000 UTC FinishedAt: 2026-08-17 16:34:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e1ac0dc5-73c8-4cac-b717-957a554093f6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*41a4d87b-8d1e-42d3-b944-c6e562f2a8f8,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-workflow8d2pj/series-workflow8d2pj-build-action-344912223/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-workflow8d2pj/series-workflow8d2pj-build-action-1554036368/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-workflow8d2pj/series-workflow8d2pj-convert-artifact-599981965/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,}