Name: series-workflownwt5t Phase: Succeeded StartedAt: 2026-06-26 02:04:48 +0000 UTC FinishedAt: 2026-06-26 06:14:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwt5t[0] Phase: Succeeded StartedAt: 2026-06-26 02:04:48 +0000 UTC FinishedAt: 2026-06-26 02:16:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwt5t[0].run-triage Phase: Succeeded StartedAt: 2026-06-26 02:04:48 +0000 UTC FinishedAt: 2026-06-26 02:16:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "dcfbdd5886ab8ecd3887d6a81216e82b8614ba78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSMALLOC", "ZRAM", "ZSWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "dcfbdd5886ab8ecd3887d6a81216e82b8614ba78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSMALLOC", "ZRAM", "ZSWAP" ], "series_id": "e65a1441-a8d8-4993-8461-08e3fca549e6" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zs_free", "obj_malloc", "zs_page_migrate", "async_free_zspage", "__free_zspage" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTTUFMTE9DJiMzNDssCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c19mcmVlJiMzNDssCiAgICAmIzM0O29ial9tYWxsb2MmIzM0OywKICAgICYjMzQ7enNfcGFnZV9taWdyYXRlJiMzNDssCiAgICAmIzM0O2FzeW5jX2ZyZWVfenNwYWdlJiMzNDssCiAgICAmIzM0O19fZnJlZV96c3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIG9wdGltaXphdGlvbiBmb3IgenNfZnJlZSgpIGluIHpzbWFsbG9jIGJ5IGVuY29kaW5nIHRoZSBjbGFzc19pZHggaW50byB0aGUgb2JqZWN0IGhhbmRsZS4gVGhpcyBhdm9pZHMgdGFraW5nIHBvb2wtXHUwMDNlbG9jayBkdXJpbmcgZnJlZSBvcGVyYXRpb25zLiBJdCBtb2RpZmllcyB0aGUgYml0IGxheW91dCBvZiB0aGUgb2JqZWN0IGhhbmRsZSBhbmQgdXBkYXRlcyB0aGUgYWxsb2NhdGlvbiwgZnJlZWluZywgYW5kIHBhZ2UgbWlncmF0aW9uIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24gYW5kIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcmUgY29ycmVjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwMjoxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ2NzU4MmE4MzZkNTA0ZWFjOTY3Zjg2Nzc5NTdjNzFmY2YwOTI3MTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAwMjoxNTozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS96c21hbGxvYy5jIGIvbW0venNtYWxsb2MuY1xuaW5kZXggNjMxMjhkZGI3OTU5OGYuLmJmNzRlNjk1ZDk3N2QzIDEwMDY0NFxuLS0tIGEvbW0venNtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0venNtYWxsb2MuY1xuQEAgLTIxLDYgJiM0MzsyMSwxMCBAQFxuICAqXHRwb29sLVx1MDAzZWxvY2tcbiAgKlx0Y2xhc3MtXHUwMDNlbG9ja1xuICAqXHR6c3BhZ2UtXHUwMDNlbG9ja1xuJiM0MzsgKlxuJiM0MzsgKiBXaGVuIFpTX09CSl9DTEFTU19CSVRTIFx1MDAzZSAwLCB6c19mcmVlKCkgc2tpcHMgcG9vbC1cdTAwM2Vsb2NrOyBpdCBwaWNrc1xuJiM0MzsgKiB0aGUgc2l6ZV9jbGFzcyBmcm9tIG9iaiYjMzk7cyBlbmNvZGVkIGNsYXNzX2lkeCBhbmQgc2VyaWFsaXplcyBhZ2FpbnN0XG4mIzQzOyAqIHBhZ2UgbWlncmF0aW9uIHZpYSBjbGFzcy1cdTAwM2Vsb2NrLlxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG5AQCAtNjcsOCAmIzQzOzcxLDggQEBcbiAjZGVmaW5lIE1BWF9QT1NTSUJMRV9QSFlTTUVNX0JJVFMgTUFYX1BIWVNNRU1fQklUU1xuICNlbHNlXG4gLypcbi0gKiBJZiB0aGlzIGRlZmluaXRpb24gb2YgTUFYX1BIWVNNRU1fQklUUyBpcyB1c2VkLCBPQkpfSU5ERVhfQklUUyB3aWxsIGp1c3Rcbi0gKiBiZSBQQUdFX1NISUZUXG4mIzQzOyAqIElmIHRoaXMgZGVmaW5pdGlvbiBvZiBNQVhfUEhZU01FTV9CSVRTIGlzIHVzZWQsIFpTX09CSl9QRk5fU0hJRlQgd2lsbFxuJiM0MzsgKiBqdXN0IGJlIFBBR0VfU0hJRlRcbiAgKi9cbiAjZGVmaW5lIE1BWF9QT1NTSUJMRV9QSFlTTUVNX0JJVFMgQklUU19QRVJfTE9OR1xuICNlbmRpZlxuQEAgLTg4LDggJiM0Mzs5MiwyMyBAQFxuICNkZWZpbmUgT0JKX1RBR19CSVRTXHQxXG4gI2RlZmluZSBPQkpfVEFHX01BU0tcdE9CSl9BTExPQ0FURURfVEFHXG4gXG4tI2RlZmluZSBPQkpfSU5ERVhfQklUU1x0KEJJVFNfUEVSX0xPTkcgLSBfUEZOX0JJVFMpXG4tI2RlZmluZSBPQkpfSU5ERVhfTUFTS1x0KChfQUMoMSwgVUwpIFx1MDAzY1x1MDAzYyBPQkpfSU5ERVhfQklUUykgLSAxKVxuJiM0MzsvKlxuJiM0MzsgKiBvYmogaXMgZW5jb2RlZCBhcyBbUEZOIHwgY2xhc3NfaWR4IHwgb2JqX2lkeF0gd2l0aGluIGFuIHVuc2lnbmVkIGxvbmc6XG4mIzQzOyAqXG4mIzQzOyAqICAgfFx1MDAzYy0tIF9QRk5fQklUUyAtLVx1MDAzZXxcdTAwM2MtLSBaU19PQkpfQ0xBU1NfQklUUyAtLVx1MDAzZXxcdTAwM2MtLSBaU19PQkpfSURYX0JJVFMgLS1cdTAwM2V8XG4mIzQzOyAqICAgJiM0MzstLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzO1xuJiM0MzsgKiAgIHwgICAgICAgUEZOICAgICAgIHwgICAgICAgIGNsYXNzX2lkeCAgICAgICAgfCAgICAgICAgb2JqX2lkeCAgICAgICAgfFxuJiM0MzsgKiAgICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MztcbiYjNDM7ICogIE1TQiAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFNCXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgfFxuJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICYjNDM7LS0gWlNfT0JKX1BGTl9TSElGVFxuJiM0MzsgKlxuJiM0MzsgKiBFbmNvZGluZyBjbGFzc19pZHggaW50byBvYmogbGV0cyB6c19mcmVlKCkgbG9jYXRlIHRoZSBzaXplX2NsYXNzXG4mIzQzOyAqIHdpdGhvdXQgaG9sZGluZyBwb29sLVx1MDAzZWxvY2s7IGNsYXNzX2lkeCBpcyBpbnZhcmlhbnQgYWNyb3NzIHBhZ2VcbiYjNDM7ICogbWlncmF0aW9uIChvbmx5IFBGTiBjaGFuZ2VzKSwgc28gYSBsb2NrbGVzcyByZWFkIG9mIHRoZSBvYmogdmFsdWVcbiYjNDM7ICogYWx3YXlzIHlpZWxkcyBhIHZhbGlkIGNsYXNzX2lkeC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgWlNfT0JKX1BGTl9TSElGVFx0KEJJVFNfUEVSX0xPTkcgLSBfUEZOX0JJVFMpXG4gXG4gI2RlZmluZSBIVUdFX0JJVFNcdDFcbiAjZGVmaW5lIEZVTExORVNTX0JJVFNcdDRcbkBAIC05OCw5ICYjNDM7MTE3LDYxIEBAXG4gXG4gI2RlZmluZSBaU19NQVhfUEFHRVNfUEVSX1pTUEFHRVx0KF9BQyhDT05GSUdfWlNNQUxMT0NfQ0hBSU5fU0laRSwgVUwpKVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBCaXRzIHRvIGluZGV4IGEgcGFnZSB3aXRoaW4gYSB6c3BhZ2UgPSBjZWlsKGxvZzIoWlNfTUFYX1BBR0VTX1BFUl9aU1BBR0UpKS5cbiYjNDM7ICogQ29tcHV0ZWQgYXQgcHJlcHJvY2Vzc29yIHRpbWUsIGZvciB1c2UgaW4gI2lmIGJlbG93LiAgS2NvbmZpZ1xuJiM0MzsgKiByZXN0cmljdHMgWlNNQUxMT0NfQ0hBSU5fU0laRSB0byBbNCwgMTZdLlxuJiM0MzsgKi9cbiYjNDM7I2lmIFpTX01BWF9QQUdFU19QRVJfWlNQQUdFIFx1MDAzYz0gNFxuJiM0MzsjZGVmaW5lIFpTX1BBR0VTX1BFUl9aU1BBR0VfQklUU1x0MlxuJiM0MzsjZWxpZiBaU19NQVhfUEFHRVNfUEVSX1pTUEFHRSBcdTAwM2M9IDhcbiYjNDM7I2RlZmluZSBaU19QQUdFU19QRVJfWlNQQUdFX0JJVFNcdDNcbiYjNDM7I2VsaWYgWlNfTUFYX1BBR0VTX1BFUl9aU1BBR0UgXHUwMDNjPSAxNlxuJiM0MzsjZGVmaW5lIFpTX1BBR0VTX1BFUl9aU1BBR0VfQklUU1x0NFxuJiM0MzsjZWxzZVxuJiM0MzsjZXJyb3IgXCYjMzQ7WlNNQUxMT0NfQ0hBSU5fU0laRSBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2UgWzQsMTZdXCYjMzQ7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQml0cyB0byBpbmRleCBhbiBvYmplY3Qgd2l0aGluIGEgc2luZ2xlIFBBR0VfU0laRSBhdCB0aGUgc21hbGxlc3RcbiYjNDM7ICogcG9zc2libGUgb2JqZWN0IHNpemU6IGxvZzIoUEFHRV9TSVpFIC8gMzIpID0gUEFHRV9TSElGVCAtIDUuXG4mIzQzOyAqIDMyIGlzIHRoZSBoYXJkIGZsb29yIG9mIFpTX01JTl9BTExPQ19TSVpFLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBaU19PQkpTX1BFUl9QQUdFX0JJVFNcdChQQUdFX1NISUZUIC0gNSlcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEJpdHMgdG8gaW5kZXggYW55IG9iamVjdCBpbiB0aGUgZGVuc2VzdCBwb3NzaWJsZSB6c3BhZ2UuICBCZWxvdyB0aGlzLFxuJiM0MzsgKiBaU19NSU5fQUxMT0NfU0laRSBpcyBhdXRvLXJhaXNlZCBieSB0aGUgTUFYKDMyLCAuLi4pIGZvcm11bGEgLS0gc3RpbGxcbiYjNDM7ICogY29ycmVjdCwgYnV0IG9iamVjdHMgYXJlIGNvYXJzZXIuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFpTX09CSlNfUEVSX1pTUEFHRV9CSVRTIFxcXG4mIzQzO1x0KFpTX1BBR0VTX1BFUl9aU1BBR0VfQklUUyAmIzQzOyBaU19PQkpTX1BFUl9QQUdFX0JJVFMpXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBFbmNvZGUgY2xhc3NfaWR4IG9ubHkgd2hlbiBvYmogaGFzIHNwYXJlIGJpdHM7IG90aGVyd2lzZVxuJiM0MzsgKiBaU19PQkpfQ0xBU1NfQklUUyBmb2xkcyB0byAwICgzMi1iaXQsIG9yIDY0LWJpdCBVTUwvZmFsbGJhY2spLlxuJiM0MzsgKi9cbiYjNDM7I2lmIEJJVFNfUEVSX0xPTkcgXHUwMDNlPSA2NCBcdTAwMjZcdTAwMjYgXFxcbiYjNDM7XHRaU19PQkpfUEZOX1NISUZUIFx1MDAzZT0gKENMQVNTX0JJVFMgJiM0MzsgMSkgJiM0MzsgWlNfT0JKU19QRVJfWlNQQUdFX0JJVFNcbiYjNDM7I2RlZmluZSBaU19PQkpfQ0xBU1NfQklUU1x0KENMQVNTX0JJVFMgJiM0MzsgMSlcbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBaU19PQkpfQ0xBU1NfQklUU1x0MFxuJiM0MzsjZW5kaWZcbiYjNDM7I2RlZmluZSBaU19PQkpfQ0xBU1NfTUFTS1x0KChfQUMoMSwgVUwpIFx1MDAzY1x1MDAzYyBaU19PQkpfQ0xBU1NfQklUUykgLSAxKVxuJiM0MztcbiYjNDM7I2RlZmluZSBaU19PQkpfSURYX0JJVFNcdFx0KFpTX09CSl9QRk5fU0hJRlQgLSBaU19PQkpfQ0xBU1NfQklUUylcbiYjNDM7I2RlZmluZSBaU19PQkpfSURYX01BU0tcdFx0KChfQUMoMSwgVUwpIFx1MDAzY1x1MDAzYyBaU19PQkpfSURYX0JJVFMpIC0gMSlcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEJlbHQtYW5kLXN1c3BlbmRlcnM6IHRoZSAjaWYgYWJvdmUgYWxyZWFkeSBndWFyYW50ZWVzIHRoaXMgd2hlblxuJiM0MzsgKiBjbGFzc19pZHggaXMgZW5hYmxlZC4gIENhdGNoZXMgZnV0dXJlIHR3ZWFrcyB0aGF0IGJ5cGFzcyBpdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpY19hc3NlcnQoWlNfT0JKX0lEWF9CSVRTIFx1MDAzZT0gWlNfUEFHRVNfUEVSX1pTUEFHRV9CSVRTLFxuJiM0MztcdCAgICAgIFwmIzM0O3pzbWFsbG9jOiBaU19NSU5fQUxMT0NfU0laRSB3b3VsZCBleGNlZWQgWlNfTUFYX0FMTE9DX1NJWkVcJiMzNDspO1xuJiM0MztcbiAvKiBaU19NSU5fQUxMT0NfU0laRSBtdXN0IGJlIG11bHRpcGxlIG9mIFpTX0FMSUdOICovXG4gI2RlZmluZSBaU19NSU5fQUxMT0NfU0laRSBcXFxuLVx0TUFYKDMyLCAoWlNfTUFYX1BBR0VTX1BFUl9aU1BBR0UgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQgXHUwMDNlXHUwMDNlIE9CSl9JTkRFWF9CSVRTKSlcbiYjNDM7XHRNQVgoMzIsIChaU19NQVhfUEFHRVNfUEVSX1pTUEFHRSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCBcdTAwM2VcdTAwM2UgWlNfT0JKX0lEWF9CSVRTKSlcbiAvKiBlYWNoIGNodW5rIGluY2x1ZGVzIGV4dHJhIHNwYWNlIHRvIGtlZXAgaGFuZGxlICovXG4gI2RlZmluZSBaU19NQVhfQUxMT0NfU0laRVx0UEFHRV9TSVpFXG4gXG5AQCAtMzk2LDEwICYjNDM7NDY3LDEzIEBAIHN0YXRpYyB2b2lkIGNhY2hlX2ZyZWVfenNwYWdlKHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcbiBcdGttZW1fY2FjaGVfZnJlZSh6c3BhZ2VfY2FjaGVwLCB6c3BhZ2UpO1xuIH1cbiBcbi0vKiBjbGFzcy1cdTAwM2Vsb2NrKHdoaWNoIG93bnMgdGhlIGhhbmRsZSkgc3luY2hyb25pemVzIHJhY2VzICovXG4mIzQzOy8qXG4mIzQzOyAqIFBhaXJzIHdpdGggUkVBRF9PTkNFKCkgaW4gaGFuZGxlX3RvX29iaigpOiB6c19mcmVlKCkgbWF5IHJlYWQgdGhlXG4mIzQzOyAqIGhhbmRsZSBsb2NrbGVzc2x5LCBzbyBwcmV2ZW50IHN0b3JlIHRlYXJpbmcgaGVyZS5cbiYjNDM7ICovXG4gc3RhdGljIHZvaWQgcmVjb3JkX29iaih1bnNpZ25lZCBsb25nIGhhbmRsZSwgdW5zaWduZWQgbG9uZyBvYmopXG4ge1xuLVx0Kih1bnNpZ25lZCBsb25nICopaGFuZGxlID0gb2JqO1xuJiM0MztcdFdSSVRFX09OQ0UoKih1bnNpZ25lZCBsb25nICopaGFuZGxlLCBvYmopO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgX19tYXliZV91bnVzZWQgaXNfZmlyc3RfenBkZXNjKHN0cnVjdCB6cGRlc2MgKnpwZGVzYylcbkBAIC03MjEsMzMgJiM0Mzs3OTUsNDIgQEAgc3RhdGljIHN0cnVjdCB6cGRlc2MgKmdldF9uZXh0X3pwZGVzYyhzdHJ1Y3QgenBkZXNjICp6cGRlc2MpXG4gc3RhdGljIHZvaWQgb2JqX3RvX2xvY2F0aW9uKHVuc2lnbmVkIGxvbmcgb2JqLCBzdHJ1Y3QgenBkZXNjICoqenBkZXNjLFxuIFx0XHRcdFx0dW5zaWduZWQgaW50ICpvYmpfaWR4KVxuIHtcbi1cdCp6cGRlc2MgPSBwZm5fenBkZXNjKG9iaiBcdTAwM2VcdTAwM2UgT0JKX0lOREVYX0JJVFMpO1xuLVx0Km9ial9pZHggPSAob2JqIFx1MDAyNiBPQkpfSU5ERVhfTUFTSyk7XG4mIzQzO1x0KnpwZGVzYyA9IHBmbl96cGRlc2Mob2JqIFx1MDAzZVx1MDAzZSBaU19PQkpfUEZOX1NISUZUKTtcbiYjNDM7XHQqb2JqX2lkeCA9IChvYmogXHUwMDI2IFpTX09CSl9JRFhfTUFTSyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG9ial90b196cGRlc2ModW5zaWduZWQgbG9uZyBvYmosIHN0cnVjdCB6cGRlc2MgKip6cGRlc2MpXG4ge1xuLVx0KnpwZGVzYyA9IHBmbl96cGRlc2Mob2JqIFx1MDAzZVx1MDAzZSBPQkpfSU5ERVhfQklUUyk7XG4mIzQzO1x0KnpwZGVzYyA9IHBmbl96cGRlc2Mob2JqIFx1MDAzZVx1MDAzZSBaU19PQkpfUEZOX1NISUZUKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogRm9sZHMgdG8gMCB3aGVuIFpTX09CSl9DTEFTU19CSVRTID09IDA7IG5vIGlmZGVmIG5lZWRlZCBhdCBjYWxsZXJzLiAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IG9ial90b19jbGFzc19pZHgodW5zaWduZWQgbG9uZyBvYmopXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKG9iaiBcdTAwM2VcdTAwM2UgWlNfT0JKX0lEWF9CSVRTKSBcdTAwMjYgWlNfT0JKX0NMQVNTX01BU0s7XG4gfVxuIFxuIC8qKlxuLSAqIGxvY2F0aW9uX3RvX29iaiAtIGdldCBvYmogdmFsdWUgZW5jb2RlZCBmcm9tIChcdTAwM2N6cGRlc2NcdTAwM2UsIFx1MDAzY29ial9pZHhcdTAwM2UpXG4mIzQzOyAqIGxvY2F0aW9uX3RvX29iaiAtIGVuY29kZSAoXHUwMDNjenBkZXNjXHUwMDNlLCBcdTAwM2NvYmpfaWR4XHUwMDNlLCBcdTAwM2NjbGFzc19pZHhcdTAwM2UpIGludG8gb2JqIHZhbHVlXG4gICogQHpwZGVzYzogenBkZXNjIG9iamVjdCByZXNpZGVzIGluIHpzcGFnZVxuICAqIEBvYmpfaWR4OiBvYmplY3QgaW5kZXhcbiYjNDM7ICogQGNsYXNzX2lkeDogc2l6ZSBjbGFzcyBpbmRleDsgaWdub3JlZCB3aGVuIFpTX09CSl9DTEFTU19CSVRTID09IDBcbiAgKi9cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBsb2NhdGlvbl90b19vYmooc3RydWN0IHpwZGVzYyAqenBkZXNjLCB1bnNpZ25lZCBpbnQgb2JqX2lkeClcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgbG9jYXRpb25fdG9fb2JqKHN0cnVjdCB6cGRlc2MgKnpwZGVzYywgdW5zaWduZWQgaW50IG9ial9pZHgsXG4mIzQzO1x0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgY2xhc3NfaWR4KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgb2JqO1xuIFxuLVx0b2JqID0genBkZXNjX3Bmbih6cGRlc2MpIFx1MDAzY1x1MDAzYyBPQkpfSU5ERVhfQklUUztcbi1cdG9iaiB8PSBvYmpfaWR4IFx1MDAyNiBPQkpfSU5ERVhfTUFTSztcbiYjNDM7XHRvYmogID0genBkZXNjX3Bmbih6cGRlc2MpIFx1MDAzY1x1MDAzYyBaU19PQkpfUEZOX1NISUZUO1xuJiM0MztcdG9iaiB8PSAodW5zaWduZWQgbG9uZykoY2xhc3NfaWR4IFx1MDAyNiBaU19PQkpfQ0xBU1NfTUFTSykgXHUwMDNjXHUwMDNjIFpTX09CSl9JRFhfQklUUztcbiYjNDM7XHRvYmogfD0gb2JqX2lkeCBcdTAwMjYgWlNfT0JKX0lEWF9NQVNLO1xuIFxuIFx0cmV0dXJuIG9iajtcbiB9XG4gXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgaGFuZGxlX3RvX29iaih1bnNpZ25lZCBsb25nIGhhbmRsZSlcbiB7XG4tXHRyZXR1cm4gKih1bnNpZ25lZCBsb25nICopaGFuZGxlO1xuJiM0MztcdHJldHVybiBSRUFEX09OQ0UoKih1bnNpZ25lZCBsb25nICopaGFuZGxlKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIG9ial9hbGxvY2F0ZWQoc3RydWN0IHpwZGVzYyAqenBkZXNjLCB2b2lkICpvYmosXG5AQCAtODAxLDEzICYjNDM7ODg0LDI2IEBAIHN0YXRpYyBpbnQgdHJ5bG9ja196c3BhZ2Uoc3RydWN0IHpzcGFnZSAqenNwYWdlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fZnJlZV96c3BhZ2Uoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcyxcbi1cdFx0XHRcdHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcbiYjNDM7LypcbiYjNDM7ICogVGhyZWUgZnJlZSBoZWxwZXJzLCBrZXB0IGFwYXJ0IGhlcmU6XG4mIzQzOyAqXG4mIzQzOyAqIF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoKTogYmFyZSBjb3JlOyB3YWxrcyB6cGRlc2NzIGFuZCByZXR1cm5zIHBhZ2VzXG4mIzQzOyAqICAgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvci4gIENhbGxlciBvd25zIGFsbCB6cGRlc2MgbG9ja3MgYW5kIGhhc1xuJiM0MzsgKiAgIHJlbW92ZWQgdGhlIHpzcGFnZSBmcm9tIGl0cyBjbGFzcyBsaXN0LiAgVXNlZCBieSB6c19mcmVlKCkgb3V0c2lkZVxuJiM0MzsgKiAgIGNsYXNzLVx1MDAzZWxvY2sgc28gdGhlIGJ1ZGR5LXNpZGUgd29yayBkb2VzIG5vdCBzdGFsbCB0aGUgY2xhc3MuXG4mIzQzOyAqXG4mIzQzOyAqIF9fZnJlZV96c3BhZ2UoKTogX19mcmVlX3pzcGFnZV9sb2NrbGVzcygpICYjNDM7IHBlci1jbGFzcyBhY2NvdW50aW5nLFxuJiM0MzsgKiAgIHVuZGVyIGNsYXNzLVx1MDAzZWxvY2suICBVc2VkIGJ5IGFzeW5jX2ZyZWVfenNwYWdlKCksIHRoZSB3b3JrZXIgZm9yXG4mIzQzOyAqICAgenNwYWdlcyB3aG9zZSB0cnlsb2NrX3pzcGFnZSgpIGZhaWxlZC5cbiYjNDM7ICpcbiYjNDM7ICogZnJlZV96c3BhZ2UoKTogZnVsbCB3cmFwcGVyIC0gdHJ5bG9jayB6cGRlc2NzLCByZW1vdmUgZnJvbSBjbGFzc1xuJiM0MzsgKiAgIGxpc3QsIGNhbGwgX19mcmVlX3pzcGFnZSgpOyBraWNrcyBkZWZlcnJlZCBmcmVlIG9uIGNvbnRlbnRpb24uXG4mIzQzOyAqICAgVXNlZCBieSBjb21wYWN0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIF9fZnJlZV96c3BhZ2VfbG9ja2xlc3Moc3RydWN0IHpzcGFnZSAqenNwYWdlKVxuIHtcbiBcdHN0cnVjdCB6cGRlc2MgKnpwZGVzYywgKm5leHQ7XG4gXG4tXHRhc3NlcnRfc3Bpbl9sb2NrZWQoXHUwMDI2Y2xhc3MtXHUwMDNlbG9jayk7XG4tXG4gXHRWTV9CVUdfT04oZ2V0X3pzcGFnZV9pbnVzZSh6c3BhZ2UpKTtcbiBcdFZNX0JVR19PTih6c3BhZ2UtXHUwMDNlZnVsbG5lc3MgIT0gWlNfSU5VU0VfUkFUSU9fMCk7XG4gXG5AQCAtODIzLDcgJiM0Mzs5MTksMTMgQEAgc3RhdGljIHZvaWQgX19mcmVlX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLFxuIFx0fSB3aGlsZSAoenBkZXNjICE9IE5VTEwpO1xuIFxuIFx0Y2FjaGVfZnJlZV96c3BhZ2UoenNwYWdlKTtcbiYjNDM7fVxuIFxuJiM0MztzdGF0aWMgdm9pZCBfX2ZyZWVfenNwYWdlKHN0cnVjdCB6c19wb29sICpwb29sLCBzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3MsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHpzcGFnZSAqenNwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0YXNzZXJ0X3NwaW5fbG9ja2VkKFx1MDAyNmNsYXNzLVx1MDAzZWxvY2spO1xuJiM0MztcdF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoenNwYWdlKTtcbiBcdGNsYXNzX3N0YXRfc3ViKGNsYXNzLCBaU19PQkpTX0FMTE9DQVRFRCwgY2xhc3MtXHUwMDNlb2Jqc19wZXJfenNwYWdlKTtcbiBcdGF0b21pY19sb25nX3N1YihjbGFzcy1cdTAwM2VwYWdlc19wZXJfenNwYWdlLCBcdTAwMjZwb29sLVx1MDAzZXBhZ2VzX2FsbG9jYXRlZCk7XG4gfVxuQEAgLTEyNzYsNyAmIzQzOzEzNzgsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBvYmpfbWFsbG9jKHN0cnVjdCB6c19wb29sICpwb29sLFxuIFx0a3VubWFwX2xvY2FsKHZhZGRyKTtcbiBcdG1vZF96c3BhZ2VfaW51c2UoenNwYWdlLCAxKTtcbiBcbi1cdG9iaiA9IGxvY2F0aW9uX3RvX29iaihtX3pwZGVzYywgb2JqKTtcbiYjNDM7XHRvYmogPSBsb2NhdGlvbl90b19vYmoobV96cGRlc2MsIG9iaiwgenNwYWdlLVx1MDAzZWNsYXNzKTtcbiBcdHJlY29yZF9vYmooaGFuZGxlLCBvYmopO1xuIFxuIFx0cmV0dXJuIG9iajtcbkBAIC0xMzgxLDM3ICYjNDM7MTQ4Myw4OSBAQCBzdGF0aWMgdm9pZCBvYmpfZnJlZShpbnQgY2xhc3Nfc2l6ZSwgdW5zaWduZWQgbG9uZyBvYmopXG4gXHRtb2RfenNwYWdlX2ludXNlKHpzcGFnZSwgLTEpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogUmVzb2x2ZSBAaGFuZGxlIHRvIGl0cyB6c3BhZ2UgLyBzaXplX2NsYXNzIGFuZCBhY3F1aXJlIGNsYXNzLVx1MDAzZWxvY2suXG4mIzQzOyAqXG4mIzQzOyAqIFdoZW4gY2xhc3NfaWR4IGlzIGVuY29kZWQgaW4gb2JqIChaU19PQkpfQ0xBU1NfQklUUyBcdTAwM2UgMCksIGl0IGlzXG4mIzQzOyAqIGludmFyaWFudCB1bmRlciBwYWdlIG1pZ3JhdGlvbiwgc28gdGhlIGhhbmRsZSBjYW4gYmUgcmVhZCBsb2NrbGVzc2x5XG4mIzQzOyAqIHRvIHBpY2sgdGhlIHNpemVfY2xhc3MuICBPbmNlIGNsYXNzLVx1MDAzZWxvY2sgaXMgaGVsZCBtaWdyYXRpb24gaXNcbiYjNDM7ICogYmxvY2tlZCBhbmQgdGhlIGhhbmRsZSBpcyByZS1yZWFkIHRvIG9idGFpbiBhIHN0YWJsZSBQRk4uXG4mIzQzOyAqXG4mIzQzOyAqIE90aGVyd2lzZSAoMzItYml0LCBvciA2NC1iaXQgZmFsbGJhY2sgcGF0aHMgbGlrZSBVTUwgd2hlcmUgdGhlXG4mIzQzOyAqIGVuY29kaW5nIGlzIGRpc2FibGVkKSwgZmFsbCBiYWNrIHRvIHBvb2wtXHUwMDNlbG9jayBmb3IgdGhlIGxvb2t1cC5cbiYjNDM7ICovXG4mIzQzOyNpZiBaU19PQkpfQ0xBU1NfQklUUyBcdTAwM2UgMFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgb2JqX2NsYXNzX2dldF9hbmRfbG9jayhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXG4mIzQzO1x0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqb2JqcCwgc3RydWN0IHpzcGFnZSAqKnpzcGFnZXAsXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IHNpemVfY2xhc3MgKipjbGFzc3ApXG4mIzQzO1x0X19hY3F1aXJlcyhcdTAwMjYoKmNsYXNzcCktXHUwMDNlbG9jaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6cGRlc2MgKmZfenBkZXNjO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgb2JqO1xuJiM0MztcbiYjNDM7XHRvYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7XG4mIzQzO1x0KmNsYXNzcCA9IHBvb2wtXHUwMDNlc2l6ZV9jbGFzc1tvYmpfdG9fY2xhc3NfaWR4KG9iaildO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjYoKmNsYXNzcCktXHUwMDNlbG9jayk7XG4mIzQzO1x0LyogUmUtcmVhZCB1bmRlciBjbGFzcy1cdTAwM2Vsb2NrOiBQRk4gaXMgbm93IHN0YWJsZSB2cyBtaWdyYXRpb24uICovXG4mIzQzO1x0b2JqID0gaGFuZGxlX3RvX29iaihoYW5kbGUpO1xuJiM0MztcdG9ial90b196cGRlc2Mob2JqLCBcdTAwMjZmX3pwZGVzYyk7XG4mIzQzO1x0KnpzcGFnZXAgPSBnZXRfenNwYWdlKGZfenBkZXNjKTtcbiYjNDM7XHQqb2JqcCA9IG9iajtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgb2JqX2NsYXNzX2dldF9hbmRfbG9jayhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXG4mIzQzO1x0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqb2JqcCwgc3RydWN0IHpzcGFnZSAqKnpzcGFnZXAsXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IHNpemVfY2xhc3MgKipjbGFzc3ApXG4mIzQzO1x0X19hY3F1aXJlcyhcdTAwMjYoKmNsYXNzcCktXHUwMDNlbG9jaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6cGRlc2MgKmZfenBkZXNjO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgb2JqO1xuJiM0MztcbiYjNDM7XHRyZWFkX2xvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRvYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7XG4mIzQzO1x0b2JqX3RvX3pwZGVzYyhvYmosIFx1MDAyNmZfenBkZXNjKTtcbiYjNDM7XHQqenNwYWdlcCA9IGdldF96c3BhZ2UoZl96cGRlc2MpO1xuJiM0MztcdCpjbGFzc3AgPSB6c3BhZ2VfY2xhc3MocG9vbCwgKnpzcGFnZXApO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjYoKmNsYXNzcCktXHUwMDNlbG9jayk7XG4mIzQzO1x0cmVhZF91bmxvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHQqb2JqcCA9IG9iajtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gdm9pZCB6c19mcmVlKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSlcbiB7XG4gXHRzdHJ1Y3QgenNwYWdlICp6c3BhZ2U7XG4tXHRzdHJ1Y3QgenBkZXNjICpmX3pwZGVzYztcbiBcdHVuc2lnbmVkIGxvbmcgb2JqO1xuIFx0c3RydWN0IHNpemVfY2xhc3MgKmNsYXNzO1xuIFx0aW50IGZ1bGxuZXNzO1xuJiM0MztcdHN0cnVjdCB6c3BhZ2UgKnpzcGFnZV90b19mcmVlID0gTlVMTDtcbiBcbiBcdGlmIChJU19FUlJfT1JfTlVMTCgodm9pZCAqKWhhbmRsZSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdC8qXG4tXHQgKiBUaGUgcG9vbC1cdTAwM2Vsb2NrIHByb3RlY3RzIHRoZSByYWNlIHdpdGggenBhZ2UmIzM5O3MgbWlncmF0aW9uXG4tXHQgKiBzbyBpdCYjMzk7cyBzYWZlIHRvIGdldCB0aGUgcGFnZSBmcm9tIGhhbmRsZS5cbi1cdCAqL1xuLVx0cmVhZF9sb2NrKFx1MDAyNnBvb2wtXHUwMDNlbG9jayk7XG4tXHRvYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7XG4tXHRvYmpfdG9fenBkZXNjKG9iaiwgXHUwMDI2Zl96cGRlc2MpO1xuLVx0enNwYWdlID0gZ2V0X3pzcGFnZShmX3pwZGVzYyk7XG4tXHRjbGFzcyA9IHpzcGFnZV9jbGFzcyhwb29sLCB6c3BhZ2UpO1xuLVx0c3Bpbl9sb2NrKFx1MDAyNmNsYXNzLVx1MDAzZWxvY2spO1xuLVx0cmVhZF91bmxvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrKHBvb2wsIGhhbmRsZSwgXHUwMDI2b2JqLCBcdTAwMjZ6c3BhZ2UsIFx1MDAyNmNsYXNzKTtcbiBcbiBcdGNsYXNzX3N0YXRfc3ViKGNsYXNzLCBaU19PQkpTX0lOVVNFLCAxKTtcbiBcdG9ial9mcmVlKGNsYXNzLVx1MDAzZXNpemUsIG9iaik7XG4gXG4gXHRmdWxsbmVzcyA9IGZpeF9mdWxsbmVzc19ncm91cChjbGFzcywgenNwYWdlKTtcbi1cdGlmIChmdWxsbmVzcyA9PSBaU19JTlVTRV9SQVRJT18wKVxuLVx0XHRmcmVlX3pzcGFnZShwb29sLCBjbGFzcywgenNwYWdlKTtcbiYjNDM7XHRpZiAoZnVsbG5lc3MgPT0gWlNfSU5VU0VfUkFUSU9fMCkge1xuJiM0MztcdFx0aWYgKHRyeWxvY2tfenNwYWdlKHpzcGFnZSkpIHtcbiYjNDM7XHRcdFx0cmVtb3ZlX3pzcGFnZShjbGFzcywgenNwYWdlKTtcbiYjNDM7XHRcdFx0Y2xhc3Nfc3RhdF9zdWIoY2xhc3MsIFpTX09CSlNfQUxMT0NBVEVELFxuJiM0MztcdFx0XHRcdCAgICAgICBjbGFzcy1cdTAwM2VvYmpzX3Blcl96c3BhZ2UpO1xuJiM0MztcdFx0XHR6c3BhZ2VfdG9fZnJlZSA9IHpzcGFnZTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGtpY2tfZGVmZXJyZWRfZnJlZShwb29sKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXG4gXHRzcGluX3VubG9jayhcdTAwMjZjbGFzcy1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHpzcGFnZV90b19mcmVlKSB7XG4mIzQzO1x0XHRfX2ZyZWVfenNwYWdlX2xvY2tsZXNzKHpzcGFnZV90b19mcmVlKTtcbiYjNDM7XHRcdGF0b21pY19sb25nX3N1YihjbGFzcy1cdTAwM2VwYWdlc19wZXJfenNwYWdlLCBcdTAwMjZwb29sLVx1MDAzZXBhZ2VzX2FsbG9jYXRlZCk7XG4mIzQzO1x0fVxuIFx0Y2FjaGVfZnJlZV9oYW5kbGUoaGFuZGxlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoenNfZnJlZSk7XG5AQCAtMTc2Miw3ICYjNDM7MTkxNiw4IEBAIHN0YXRpYyBpbnQgenNfcGFnZV9taWdyYXRlKHN0cnVjdCBwYWdlICpuZXdwYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcbiBcdFx0XHRvbGRfb2JqID0gaGFuZGxlX3RvX29iaihoYW5kbGUpO1xuIFx0XHRcdG9ial90b19sb2NhdGlvbihvbGRfb2JqLCBcdTAwMjZkdW1teSwgXHUwMDI2b2JqX2lkeCk7XG4tXHRcdFx0bmV3X29iaiA9ICh1bnNpZ25lZCBsb25nKWxvY2F0aW9uX3RvX29iaihuZXd6cGRlc2MsIG9ial9pZHgpO1xuJiM0MztcdFx0XHRuZXdfb2JqID0gbG9jYXRpb25fdG9fb2JqKG5ld3pwZGVzYywgb2JqX2lkeCxcbiYjNDM7XHRcdFx0XHRcdFx0ICBvYmpfdG9fY2xhc3NfaWR4KG9sZF9vYmopKTtcbiBcdFx0XHRyZWNvcmRfb2JqKGhhbmRsZSwgbmV3X29iaik7XG4gXHRcdH1cbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwMjoxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU01BTExPQyYjMzQ7LAogICAgJiMzNDtaUkFNJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enNfZnJlZSYjMzQ7LAogICAgJiMzNDtvYmpfbWFsbG9jJiMzNDssCiAgICAmIzM0O3pzX3BhZ2VfbWlncmF0ZSYjMzQ7LAogICAgJiMzNDthc3luY19mcmVlX3pzcGFnZSYjMzQ7LAogICAgJiMzNDtfX2ZyZWVfenNwYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBvcHRpbWl6YXRpb24gZm9yIHpzX2ZyZWUoKSBpbiB6c21hbGxvYyBieSBlbmNvZGluZyB0aGUgY2xhc3NfaWR4IGludG8gdGhlIG9iamVjdCBoYW5kbGUuIFRoaXMgYXZvaWRzIHRha2luZyBwb29sLVx1MDAzZWxvY2sgZHVyaW5nIGZyZWUgb3BlcmF0aW9ucy4gSXQgbW9kaWZpZXMgdGhlIGJpdCBsYXlvdXQgb2YgdGhlIG9iamVjdCBoYW5kbGUgYW5kIHVwZGF0ZXMgdGhlIGFsbG9jYXRpb24sIGZyZWVpbmcsIGFuZCBwYWdlIG1pZ3JhdGlvbiBwYXRocy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbG9ja2xlc3Mgc3luY2hyb25pemF0aW9uIGFuZCBiaXR3aXNlIG9wZXJhdGlvbnMgYXJlIGNvcnJlY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ2NzU4MmE4MzZkNTA0ZWFjOTY3Zjg2Nzc5NTdjNzFmY2YwOTI3MTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1biAyNiAwMjoxNTozMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3pzbWFsbG9jLmMgYi9tbS96c21hbGxvYy5jCmluZGV4IDYzMTI4ZGRiNzk1OThmLi5iZjc0ZTY5NWQ5NzdkMyAxMDA2NDQKLS0tIGEvbW0venNtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS96c21hbGxvYy5jCkBAIC0yMSw2ICYjNDM7MjEsMTAgQEAKICAqCXBvb2wtJmd0O2xvY2sKICAqCWNsYXNzLSZndDtsb2NrCiAgKgl6c3BhZ2UtJmd0O2xvY2sKJiM0MzsgKgomIzQzOyAqIFdoZW4gWlNfT0JKX0NMQVNTX0JJVFMgJmd0OyAwLCB6c19mcmVlKCkgc2tpcHMgcG9vbC0mZ3Q7bG9jazsgaXQgcGlja3MKJiM0MzsgKiB0aGUgc2l6ZV9jbGFzcyBmcm9tIG9iaiYjMzk7cyBlbmNvZGVkIGNsYXNzX2lkeCBhbmQgc2VyaWFsaXplcyBhZ2FpbnN0CiYjNDM7ICogcGFnZSBtaWdyYXRpb24gdmlhIGNsYXNzLSZndDtsb2NrLgogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKQEAgLTY3LDggJiM0Mzs3MSw4IEBACiAjZGVmaW5lIE1BWF9QT1NTSUJMRV9QSFlTTUVNX0JJVFMgTUFYX1BIWVNNRU1fQklUUwogI2Vsc2UKIC8qCi0gKiBJZiB0aGlzIGRlZmluaXRpb24gb2YgTUFYX1BIWVNNRU1fQklUUyBpcyB1c2VkLCBPQkpfSU5ERVhfQklUUyB3aWxsIGp1c3QKLSAqIGJlIFBBR0VfU0hJRlQKJiM0MzsgKiBJZiB0aGlzIGRlZmluaXRpb24gb2YgTUFYX1BIWVNNRU1fQklUUyBpcyB1c2VkLCBaU19PQkpfUEZOX1NISUZUIHdpbGwKJiM0MzsgKiBqdXN0IGJlIFBBR0VfU0hJRlQKICAqLwogI2RlZmluZSBNQVhfUE9TU0lCTEVfUEhZU01FTV9CSVRTIEJJVFNfUEVSX0xPTkcKICNlbmRpZgpAQCAtODgsOCAmIzQzOzkyLDIzIEBACiAjZGVmaW5lIE9CSl9UQUdfQklUUwkxCiAjZGVmaW5lIE9CSl9UQUdfTUFTSwlPQkpfQUxMT0NBVEVEX1RBRwogCi0jZGVmaW5lIE9CSl9JTkRFWF9CSVRTCShCSVRTX1BFUl9MT05HIC0gX1BGTl9CSVRTKQotI2RlZmluZSBPQkpfSU5ERVhfTUFTSwkoKF9BQygxLCBVTCkgJmx0OyZsdDsgT0JKX0lOREVYX0JJVFMpIC0gMSkKJiM0MzsvKgomIzQzOyAqIG9iaiBpcyBlbmNvZGVkIGFzIFtQRk4gfCBjbGFzc19pZHggfCBvYmpfaWR4XSB3aXRoaW4gYW4gdW5zaWduZWQgbG9uZzoKJiM0MzsgKgomIzQzOyAqICAgfCZsdDstLSBfUEZOX0JJVFMgLS0mZ3Q7fCZsdDstLSBaU19PQkpfQ0xBU1NfQklUUyAtLSZndDt8Jmx0Oy0tIFpTX09CSl9JRFhfQklUUyAtLSZndDt8CiYjNDM7ICogICAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7CiYjNDM7ICogICB8ICAgICAgIFBGTiAgICAgICB8ICAgICAgICBjbGFzc19pZHggICAgICAgIHwgICAgICAgIG9ial9pZHggICAgICAgIHwKJiM0MzsgKiAgICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzsKJiM0MzsgKiAgTVNCICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMU0IKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgIHwKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICYjNDM7LS0gWlNfT0JKX1BGTl9TSElGVAomIzQzOyAqCiYjNDM7ICogRW5jb2RpbmcgY2xhc3NfaWR4IGludG8gb2JqIGxldHMgenNfZnJlZSgpIGxvY2F0ZSB0aGUgc2l6ZV9jbGFzcwomIzQzOyAqIHdpdGhvdXQgaG9sZGluZyBwb29sLSZndDtsb2NrOyBjbGFzc19pZHggaXMgaW52YXJpYW50IGFjcm9zcyBwYWdlCiYjNDM7ICogbWlncmF0aW9uIChvbmx5IFBGTiBjaGFuZ2VzKSwgc28gYSBsb2NrbGVzcyByZWFkIG9mIHRoZSBvYmogdmFsdWUKJiM0MzsgKiBhbHdheXMgeWllbGRzIGEgdmFsaWQgY2xhc3NfaWR4LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgWlNfT0JKX1BGTl9TSElGVAkoQklUU19QRVJfTE9ORyAtIF9QRk5fQklUUykKIAogI2RlZmluZSBIVUdFX0JJVFMJMQogI2RlZmluZSBGVUxMTkVTU19CSVRTCTQKQEAgLTk4LDkgJiM0MzsxMTcsNjEgQEAKIAogI2RlZmluZSBaU19NQVhfUEFHRVNfUEVSX1pTUEFHRQkoX0FDKENPTkZJR19aU01BTExPQ19DSEFJTl9TSVpFLCBVTCkpCiAKJiM0MzsvKgomIzQzOyAqIEJpdHMgdG8gaW5kZXggYSBwYWdlIHdpdGhpbiBhIHpzcGFnZSA9IGNlaWwobG9nMihaU19NQVhfUEFHRVNfUEVSX1pTUEFHRSkpLgomIzQzOyAqIENvbXB1dGVkIGF0IHByZXByb2Nlc3NvciB0aW1lLCBmb3IgdXNlIGluICNpZiBiZWxvdy4gIEtjb25maWcKJiM0MzsgKiByZXN0cmljdHMgWlNNQUxMT0NfQ0hBSU5fU0laRSB0byBbNCwgMTZdLgomIzQzOyAqLwomIzQzOyNpZiBaU19NQVhfUEFHRVNfUEVSX1pTUEFHRSAmbHQ7PSA0CiYjNDM7I2RlZmluZSBaU19QQUdFU19QRVJfWlNQQUdFX0JJVFMJMgomIzQzOyNlbGlmIFpTX01BWF9QQUdFU19QRVJfWlNQQUdFICZsdDs9IDgKJiM0MzsjZGVmaW5lIFpTX1BBR0VTX1BFUl9aU1BBR0VfQklUUwkzCiYjNDM7I2VsaWYgWlNfTUFYX1BBR0VTX1BFUl9aU1BBR0UgJmx0Oz0gMTYKJiM0MzsjZGVmaW5lIFpTX1BBR0VTX1BFUl9aU1BBR0VfQklUUwk0CiYjNDM7I2Vsc2UKJiM0MzsjZXJyb3IgJiMzNDtaU01BTExPQ19DSEFJTl9TSVpFIG91dCBvZiBleHBlY3RlZCByYW5nZSBbNCwxNl0mIzM0OwomIzQzOyNlbmRpZgomIzQzOwomIzQzOy8qCiYjNDM7ICogQml0cyB0byBpbmRleCBhbiBvYmplY3Qgd2l0aGluIGEgc2luZ2xlIFBBR0VfU0laRSBhdCB0aGUgc21hbGxlc3QKJiM0MzsgKiBwb3NzaWJsZSBvYmplY3Qgc2l6ZTogbG9nMihQQUdFX1NJWkUgLyAzMikgPSBQQUdFX1NISUZUIC0gNS4KJiM0MzsgKiAzMiBpcyB0aGUgaGFyZCBmbG9vciBvZiBaU19NSU5fQUxMT0NfU0laRS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFpTX09CSlNfUEVSX1BBR0VfQklUUwkoUEFHRV9TSElGVCAtIDUpCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBCaXRzIHRvIGluZGV4IGFueSBvYmplY3QgaW4gdGhlIGRlbnNlc3QgcG9zc2libGUgenNwYWdlLiAgQmVsb3cgdGhpcywKJiM0MzsgKiBaU19NSU5fQUxMT0NfU0laRSBpcyBhdXRvLXJhaXNlZCBieSB0aGUgTUFYKDMyLCAuLi4pIGZvcm11bGEgLS0gc3RpbGwKJiM0MzsgKiBjb3JyZWN0LCBidXQgb2JqZWN0cyBhcmUgY29hcnNlci4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFpTX09CSlNfUEVSX1pTUEFHRV9CSVRTIFwKJiM0MzsJKFpTX1BBR0VTX1BFUl9aU1BBR0VfQklUUyAmIzQzOyBaU19PQkpTX1BFUl9QQUdFX0JJVFMpCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBFbmNvZGUgY2xhc3NfaWR4IG9ubHkgd2hlbiBvYmogaGFzIHNwYXJlIGJpdHM7IG90aGVyd2lzZQomIzQzOyAqIFpTX09CSl9DTEFTU19CSVRTIGZvbGRzIHRvIDAgKDMyLWJpdCwgb3IgNjQtYml0IFVNTC9mYWxsYmFjaykuCiYjNDM7ICovCiYjNDM7I2lmIEJJVFNfUEVSX0xPTkcgJmd0Oz0gNjQgJmFtcDsmYW1wOyBcCiYjNDM7CVpTX09CSl9QRk5fU0hJRlQgJmd0Oz0gKENMQVNTX0JJVFMgJiM0MzsgMSkgJiM0MzsgWlNfT0JKU19QRVJfWlNQQUdFX0JJVFMKJiM0MzsjZGVmaW5lIFpTX09CSl9DTEFTU19CSVRTCShDTEFTU19CSVRTICYjNDM7IDEpCiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIFpTX09CSl9DTEFTU19CSVRTCTAKJiM0MzsjZW5kaWYKJiM0MzsjZGVmaW5lIFpTX09CSl9DTEFTU19NQVNLCSgoX0FDKDEsIFVMKSAmbHQ7Jmx0OyBaU19PQkpfQ0xBU1NfQklUUykgLSAxKQomIzQzOwomIzQzOyNkZWZpbmUgWlNfT0JKX0lEWF9CSVRTCQkoWlNfT0JKX1BGTl9TSElGVCAtIFpTX09CSl9DTEFTU19CSVRTKQomIzQzOyNkZWZpbmUgWlNfT0JKX0lEWF9NQVNLCQkoKF9BQygxLCBVTCkgJmx0OyZsdDsgWlNfT0JKX0lEWF9CSVRTKSAtIDEpCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBCZWx0LWFuZC1zdXNwZW5kZXJzOiB0aGUgI2lmIGFib3ZlIGFscmVhZHkgZ3VhcmFudGVlcyB0aGlzIHdoZW4KJiM0MzsgKiBjbGFzc19pZHggaXMgZW5hYmxlZC4gIENhdGNoZXMgZnV0dXJlIHR3ZWFrcyB0aGF0IGJ5cGFzcyBpdC4KJiM0MzsgKi8KJiM0MztzdGF0aWNfYXNzZXJ0KFpTX09CSl9JRFhfQklUUyAmZ3Q7PSBaU19QQUdFU19QRVJfWlNQQUdFX0JJVFMsCiYjNDM7CSAgICAgICYjMzQ7enNtYWxsb2M6IFpTX01JTl9BTExPQ19TSVpFIHdvdWxkIGV4Y2VlZCBaU19NQVhfQUxMT0NfU0laRSYjMzQ7KTsKJiM0MzsKIC8qIFpTX01JTl9BTExPQ19TSVpFIG11c3QgYmUgbXVsdGlwbGUgb2YgWlNfQUxJR04gKi8KICNkZWZpbmUgWlNfTUlOX0FMTE9DX1NJWkUgXAotCU1BWCgzMiwgKFpTX01BWF9QQUdFU19QRVJfWlNQQUdFICZsdDsmbHQ7IFBBR0VfU0hJRlQgJmd0OyZndDsgT0JKX0lOREVYX0JJVFMpKQomIzQzOwlNQVgoMzIsIChaU19NQVhfUEFHRVNfUEVSX1pTUEFHRSAmbHQ7Jmx0OyBQQUdFX1NISUZUICZndDsmZ3Q7IFpTX09CSl9JRFhfQklUUykpCiAvKiBlYWNoIGNodW5rIGluY2x1ZGVzIGV4dHJhIHNwYWNlIHRvIGtlZXAgaGFuZGxlICovCiAjZGVmaW5lIFpTX01BWF9BTExPQ19TSVpFCVBBR0VfU0laRQogCkBAIC0zOTYsMTAgJiM0Mzs0NjcsMTMgQEAgc3RhdGljIHZvaWQgY2FjaGVfZnJlZV96c3BhZ2Uoc3RydWN0IHpzcGFnZSAqenNwYWdlKQogCWttZW1fY2FjaGVfZnJlZSh6c3BhZ2VfY2FjaGVwLCB6c3BhZ2UpOwogfQogCi0vKiBjbGFzcy0mZ3Q7bG9jayh3aGljaCBvd25zIHRoZSBoYW5kbGUpIHN5bmNocm9uaXplcyByYWNlcyAqLwomIzQzOy8qCiYjNDM7ICogUGFpcnMgd2l0aCBSRUFEX09OQ0UoKSBpbiBoYW5kbGVfdG9fb2JqKCk6IHpzX2ZyZWUoKSBtYXkgcmVhZCB0aGUKJiM0MzsgKiBoYW5kbGUgbG9ja2xlc3NseSwgc28gcHJldmVudCBzdG9yZSB0ZWFyaW5nIGhlcmUuCiYjNDM7ICovCiBzdGF0aWMgdm9pZCByZWNvcmRfb2JqKHVuc2lnbmVkIGxvbmcgaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9iaikKIHsKLQkqKHVuc2lnbmVkIGxvbmcgKiloYW5kbGUgPSBvYmo7CiYjNDM7CVdSSVRFX09OQ0UoKih1bnNpZ25lZCBsb25nICopaGFuZGxlLCBvYmopOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgX19tYXliZV91bnVzZWQgaXNfZmlyc3RfenBkZXNjKHN0cnVjdCB6cGRlc2MgKnpwZGVzYykKQEAgLTcyMSwzMyAmIzQzOzc5NSw0MiBAQCBzdGF0aWMgc3RydWN0IHpwZGVzYyAqZ2V0X25leHRfenBkZXNjKHN0cnVjdCB6cGRlc2MgKnpwZGVzYykKIHN0YXRpYyB2b2lkIG9ial90b19sb2NhdGlvbih1bnNpZ25lZCBsb25nIG9iaiwgc3RydWN0IHpwZGVzYyAqKnpwZGVzYywKIAkJCQl1bnNpZ25lZCBpbnQgKm9ial9pZHgpCiB7Ci0JKnpwZGVzYyA9IHBmbl96cGRlc2Mob2JqICZndDsmZ3Q7IE9CSl9JTkRFWF9CSVRTKTsKLQkqb2JqX2lkeCA9IChvYmogJmFtcDsgT0JKX0lOREVYX01BU0spOwomIzQzOwkqenBkZXNjID0gcGZuX3pwZGVzYyhvYmogJmd0OyZndDsgWlNfT0JKX1BGTl9TSElGVCk7CiYjNDM7CSpvYmpfaWR4ID0gKG9iaiAmYW1wOyBaU19PQkpfSURYX01BU0spOwogfQogCiBzdGF0aWMgdm9pZCBvYmpfdG9fenBkZXNjKHVuc2lnbmVkIGxvbmcgb2JqLCBzdHJ1Y3QgenBkZXNjICoqenBkZXNjKQogewotCSp6cGRlc2MgPSBwZm5fenBkZXNjKG9iaiAmZ3Q7Jmd0OyBPQkpfSU5ERVhfQklUUyk7CiYjNDM7CSp6cGRlc2MgPSBwZm5fenBkZXNjKG9iaiAmZ3Q7Jmd0OyBaU19PQkpfUEZOX1NISUZUKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogRm9sZHMgdG8gMCB3aGVuIFpTX09CSl9DTEFTU19CSVRTID09IDA7IG5vIGlmZGVmIG5lZWRlZCBhdCBjYWxsZXJzLiAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgb2JqX3RvX2NsYXNzX2lkeCh1bnNpZ25lZCBsb25nIG9iaikKJiM0Mzt7CiYjNDM7CXJldHVybiAob2JqICZndDsmZ3Q7IFpTX09CSl9JRFhfQklUUykgJmFtcDsgWlNfT0JKX0NMQVNTX01BU0s7CiB9CiAKIC8qKgotICogbG9jYXRpb25fdG9fb2JqIC0gZ2V0IG9iaiB2YWx1ZSBlbmNvZGVkIGZyb20gKCZsdDt6cGRlc2MmZ3Q7LCAmbHQ7b2JqX2lkeCZndDspCiYjNDM7ICogbG9jYXRpb25fdG9fb2JqIC0gZW5jb2RlICgmbHQ7enBkZXNjJmd0OywgJmx0O29ial9pZHgmZ3Q7LCAmbHQ7Y2xhc3NfaWR4Jmd0OykgaW50byBvYmogdmFsdWUKICAqIEB6cGRlc2M6IHpwZGVzYyBvYmplY3QgcmVzaWRlcyBpbiB6c3BhZ2UKICAqIEBvYmpfaWR4OiBvYmplY3QgaW5kZXgKJiM0MzsgKiBAY2xhc3NfaWR4OiBzaXplIGNsYXNzIGluZGV4OyBpZ25vcmVkIHdoZW4gWlNfT0JKX0NMQVNTX0JJVFMgPT0gMAogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBsb2NhdGlvbl90b19vYmooc3RydWN0IHpwZGVzYyAqenBkZXNjLCB1bnNpZ25lZCBpbnQgb2JqX2lkeCkKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBsb2NhdGlvbl90b19vYmooc3RydWN0IHpwZGVzYyAqenBkZXNjLCB1bnNpZ25lZCBpbnQgb2JqX2lkeCwKJiM0MzsJCQkJICAgICB1bnNpZ25lZCBpbnQgY2xhc3NfaWR4KQogewogCXVuc2lnbmVkIGxvbmcgb2JqOwogCi0Jb2JqID0genBkZXNjX3Bmbih6cGRlc2MpICZsdDsmbHQ7IE9CSl9JTkRFWF9CSVRTOwotCW9iaiB8PSBvYmpfaWR4ICZhbXA7IE9CSl9JTkRFWF9NQVNLOwomIzQzOwlvYmogID0genBkZXNjX3Bmbih6cGRlc2MpICZsdDsmbHQ7IFpTX09CSl9QRk5fU0hJRlQ7CiYjNDM7CW9iaiB8PSAodW5zaWduZWQgbG9uZykoY2xhc3NfaWR4ICZhbXA7IFpTX09CSl9DTEFTU19NQVNLKSAmbHQ7Jmx0OyBaU19PQkpfSURYX0JJVFM7CiYjNDM7CW9iaiB8PSBvYmpfaWR4ICZhbXA7IFpTX09CSl9JRFhfTUFTSzsKIAogCXJldHVybiBvYmo7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhhbmRsZV90b19vYmoodW5zaWduZWQgbG9uZyBoYW5kbGUpCiB7Ci0JcmV0dXJuICoodW5zaWduZWQgbG9uZyAqKWhhbmRsZTsKJiM0MzsJcmV0dXJuIFJFQURfT05DRSgqKHVuc2lnbmVkIGxvbmcgKiloYW5kbGUpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2FsbG9jYXRlZChzdHJ1Y3QgenBkZXNjICp6cGRlc2MsIHZvaWQgKm9iaiwKQEAgLTgwMSwxMyAmIzQzOzg4NCwyNiBAQCBzdGF0aWMgaW50IHRyeWxvY2tfenNwYWdlKHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19mcmVlX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLAotCQkJCXN0cnVjdCB6c3BhZ2UgKnpzcGFnZSkKJiM0MzsvKgomIzQzOyAqIFRocmVlIGZyZWUgaGVscGVycywga2VwdCBhcGFydCBoZXJlOgomIzQzOyAqCiYjNDM7ICogX19mcmVlX3pzcGFnZV9sb2NrbGVzcygpOiBiYXJlIGNvcmU7IHdhbGtzIHpwZGVzY3MgYW5kIHJldHVybnMgcGFnZXMKJiM0MzsgKiAgIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IuICBDYWxsZXIgb3ducyBhbGwgenBkZXNjIGxvY2tzIGFuZCBoYXMKJiM0MzsgKiAgIHJlbW92ZWQgdGhlIHpzcGFnZSBmcm9tIGl0cyBjbGFzcyBsaXN0LiAgVXNlZCBieSB6c19mcmVlKCkgb3V0c2lkZQomIzQzOyAqICAgY2xhc3MtJmd0O2xvY2sgc28gdGhlIGJ1ZGR5LXNpZGUgd29yayBkb2VzIG5vdCBzdGFsbCB0aGUgY2xhc3MuCiYjNDM7ICoKJiM0MzsgKiBfX2ZyZWVfenNwYWdlKCk6IF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoKSAmIzQzOyBwZXItY2xhc3MgYWNjb3VudGluZywKJiM0MzsgKiAgIHVuZGVyIGNsYXNzLSZndDtsb2NrLiAgVXNlZCBieSBhc3luY19mcmVlX3pzcGFnZSgpLCB0aGUgd29ya2VyIGZvcgomIzQzOyAqICAgenNwYWdlcyB3aG9zZSB0cnlsb2NrX3pzcGFnZSgpIGZhaWxlZC4KJiM0MzsgKgomIzQzOyAqIGZyZWVfenNwYWdlKCk6IGZ1bGwgd3JhcHBlciAtIHRyeWxvY2sgenBkZXNjcywgcmVtb3ZlIGZyb20gY2xhc3MKJiM0MzsgKiAgIGxpc3QsIGNhbGwgX19mcmVlX3pzcGFnZSgpOyBraWNrcyBkZWZlcnJlZCBmcmVlIG9uIGNvbnRlbnRpb24uCiYjNDM7ICogICBVc2VkIGJ5IGNvbXBhY3Rpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIF9fZnJlZV96c3BhZ2VfbG9ja2xlc3Moc3RydWN0IHpzcGFnZSAqenNwYWdlKQogewogCXN0cnVjdCB6cGRlc2MgKnpwZGVzYywgKm5leHQ7CiAKLQlhc3NlcnRfc3Bpbl9sb2NrZWQoJmFtcDtjbGFzcy0mZ3Q7bG9jayk7Ci0KIAlWTV9CVUdfT04oZ2V0X3pzcGFnZV9pbnVzZSh6c3BhZ2UpKTsKIAlWTV9CVUdfT04oenNwYWdlLSZndDtmdWxsbmVzcyAhPSBaU19JTlVTRV9SQVRJT18wKTsKIApAQCAtODIzLDcgJiM0Mzs5MTksMTMgQEAgc3RhdGljIHZvaWQgX19mcmVlX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLAogCX0gd2hpbGUgKHpwZGVzYyAhPSBOVUxMKTsKIAogCWNhY2hlX2ZyZWVfenNwYWdlKHpzcGFnZSk7CiYjNDM7fQogCiYjNDM7c3RhdGljIHZvaWQgX19mcmVlX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLAomIzQzOwkJCSAgc3RydWN0IHpzcGFnZSAqenNwYWdlKQomIzQzO3sKJiM0MzsJYXNzZXJ0X3NwaW5fbG9ja2VkKCZhbXA7Y2xhc3MtJmd0O2xvY2spOwomIzQzOwlfX2ZyZWVfenNwYWdlX2xvY2tsZXNzKHpzcGFnZSk7CiAJY2xhc3Nfc3RhdF9zdWIoY2xhc3MsIFpTX09CSlNfQUxMT0NBVEVELCBjbGFzcy0mZ3Q7b2Jqc19wZXJfenNwYWdlKTsKIAlhdG9taWNfbG9uZ19zdWIoY2xhc3MtJmd0O3BhZ2VzX3Blcl96c3BhZ2UsICZhbXA7cG9vbC0mZ3Q7cGFnZXNfYWxsb2NhdGVkKTsKIH0KQEAgLTEyNzYsNyAmIzQzOzEzNzgsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBvYmpfbWFsbG9jKHN0cnVjdCB6c19wb29sICpwb29sLAogCWt1bm1hcF9sb2NhbCh2YWRkcik7CiAJbW9kX3pzcGFnZV9pbnVzZSh6c3BhZ2UsIDEpOwogCi0Jb2JqID0gbG9jYXRpb25fdG9fb2JqKG1fenBkZXNjLCBvYmopOwomIzQzOwlvYmogPSBsb2NhdGlvbl90b19vYmoobV96cGRlc2MsIG9iaiwgenNwYWdlLSZndDtjbGFzcyk7CiAJcmVjb3JkX29iaihoYW5kbGUsIG9iaik7CiAKIAlyZXR1cm4gb2JqOwpAQCAtMTM4MSwzNyAmIzQzOzE0ODMsODkgQEAgc3RhdGljIHZvaWQgb2JqX2ZyZWUoaW50IGNsYXNzX3NpemUsIHVuc2lnbmVkIGxvbmcgb2JqKQogCW1vZF96c3BhZ2VfaW51c2UoenNwYWdlLCAtMSk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlc29sdmUgQGhhbmRsZSB0byBpdHMgenNwYWdlIC8gc2l6ZV9jbGFzcyBhbmQgYWNxdWlyZSBjbGFzcy0mZ3Q7bG9jay4KJiM0MzsgKgomIzQzOyAqIFdoZW4gY2xhc3NfaWR4IGlzIGVuY29kZWQgaW4gb2JqIChaU19PQkpfQ0xBU1NfQklUUyAmZ3Q7IDApLCBpdCBpcwomIzQzOyAqIGludmFyaWFudCB1bmRlciBwYWdlIG1pZ3JhdGlvbiwgc28gdGhlIGhhbmRsZSBjYW4gYmUgcmVhZCBsb2NrbGVzc2x5CiYjNDM7ICogdG8gcGljayB0aGUgc2l6ZV9jbGFzcy4gIE9uY2UgY2xhc3MtJmd0O2xvY2sgaXMgaGVsZCBtaWdyYXRpb24gaXMKJiM0MzsgKiBibG9ja2VkIGFuZCB0aGUgaGFuZGxlIGlzIHJlLXJlYWQgdG8gb2J0YWluIGEgc3RhYmxlIFBGTi4KJiM0MzsgKgomIzQzOyAqIE90aGVyd2lzZSAoMzItYml0LCBvciA2NC1iaXQgZmFsbGJhY2sgcGF0aHMgbGlrZSBVTUwgd2hlcmUgdGhlCiYjNDM7ICogZW5jb2RpbmcgaXMgZGlzYWJsZWQpLCBmYWxsIGJhY2sgdG8gcG9vbC0mZ3Q7bG9jayBmb3IgdGhlIGxvb2t1cC4KJiM0MzsgKi8KJiM0MzsjaWYgWlNfT0JKX0NMQVNTX0JJVFMgJmd0OyAwCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG9ial9jbGFzc19nZXRfYW5kX2xvY2soc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAomIzQzOwkJCQkJIHVuc2lnbmVkIGxvbmcgKm9ianAsIHN0cnVjdCB6c3BhZ2UgKip6c3BhZ2VwLAomIzQzOwkJCQkJIHN0cnVjdCBzaXplX2NsYXNzICoqY2xhc3NwKQomIzQzOwlfX2FjcXVpcmVzKCZhbXA7KCpjbGFzc3ApLSZndDtsb2NrKQomIzQzO3sKJiM0MzsJc3RydWN0IHpwZGVzYyAqZl96cGRlc2M7CiYjNDM7CXVuc2lnbmVkIGxvbmcgb2JqOwomIzQzOwomIzQzOwlvYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7CiYjNDM7CSpjbGFzc3AgPSBwb29sLSZndDtzaXplX2NsYXNzW29ial90b19jbGFzc19pZHgob2JqKV07CiYjNDM7CXNwaW5fbG9jaygmYW1wOygqY2xhc3NwKS0mZ3Q7bG9jayk7CiYjNDM7CS8qIFJlLXJlYWQgdW5kZXIgY2xhc3MtJmd0O2xvY2s6IFBGTiBpcyBub3cgc3RhYmxlIHZzIG1pZ3JhdGlvbi4gKi8KJiM0MzsJb2JqID0gaGFuZGxlX3RvX29iaihoYW5kbGUpOwomIzQzOwlvYmpfdG9fenBkZXNjKG9iaiwgJmFtcDtmX3pwZGVzYyk7CiYjNDM7CSp6c3BhZ2VwID0gZ2V0X3pzcGFnZShmX3pwZGVzYyk7CiYjNDM7CSpvYmpwID0gb2JqOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSwKJiM0MzsJCQkJCSB1bnNpZ25lZCBsb25nICpvYmpwLCBzdHJ1Y3QgenNwYWdlICoqenNwYWdlcCwKJiM0MzsJCQkJCSBzdHJ1Y3Qgc2l6ZV9jbGFzcyAqKmNsYXNzcCkKJiM0MzsJX19hY3F1aXJlcygmYW1wOygqY2xhc3NwKS0mZ3Q7bG9jaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6cGRlc2MgKmZfenBkZXNjOwomIzQzOwl1bnNpZ25lZCBsb25nIG9iajsKJiM0MzsKJiM0MzsJcmVhZF9sb2NrKCZhbXA7cG9vbC0mZ3Q7bG9jayk7CiYjNDM7CW9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTsKJiM0MzsJb2JqX3RvX3pwZGVzYyhvYmosICZhbXA7Zl96cGRlc2MpOwomIzQzOwkqenNwYWdlcCA9IGdldF96c3BhZ2UoZl96cGRlc2MpOwomIzQzOwkqY2xhc3NwID0genNwYWdlX2NsYXNzKHBvb2wsICp6c3BhZ2VwKTsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7KCpjbGFzc3ApLSZndDtsb2NrKTsKJiM0MzsJcmVhZF91bmxvY2soJmFtcDtwb29sLSZndDtsb2NrKTsKJiM0MzsJKm9ianAgPSBvYmo7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogdm9pZCB6c19mcmVlKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSkKIHsKIAlzdHJ1Y3QgenNwYWdlICp6c3BhZ2U7Ci0Jc3RydWN0IHpwZGVzYyAqZl96cGRlc2M7CiAJdW5zaWduZWQgbG9uZyBvYmo7CiAJc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzOwogCWludCBmdWxsbmVzczsKJiM0MzsJc3RydWN0IHpzcGFnZSAqenNwYWdlX3RvX2ZyZWUgPSBOVUxMOwogCiAJaWYgKElTX0VSUl9PUl9OVUxMKCh2b2lkICopaGFuZGxlKSkKIAkJcmV0dXJuOwogCi0JLyoKLQkgKiBUaGUgcG9vbC0mZ3Q7bG9jayBwcm90ZWN0cyB0aGUgcmFjZSB3aXRoIHpwYWdlJiMzOTtzIG1pZ3JhdGlvbgotCSAqIHNvIGl0JiMzOTtzIHNhZmUgdG8gZ2V0IHRoZSBwYWdlIGZyb20gaGFuZGxlLgotCSAqLwotCXJlYWRfbG9jaygmYW1wO3Bvb2wtJmd0O2xvY2spOwotCW9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTsKLQlvYmpfdG9fenBkZXNjKG9iaiwgJmFtcDtmX3pwZGVzYyk7Ci0JenNwYWdlID0gZ2V0X3pzcGFnZShmX3pwZGVzYyk7Ci0JY2xhc3MgPSB6c3BhZ2VfY2xhc3MocG9vbCwgenNwYWdlKTsKLQlzcGluX2xvY2soJmFtcDtjbGFzcy0mZ3Q7bG9jayk7Ci0JcmVhZF91bmxvY2soJmFtcDtwb29sLSZndDtsb2NrKTsKJiM0MzsJb2JqX2NsYXNzX2dldF9hbmRfbG9jayhwb29sLCBoYW5kbGUsICZhbXA7b2JqLCAmYW1wO3pzcGFnZSwgJmFtcDtjbGFzcyk7CiAKIAljbGFzc19zdGF0X3N1YihjbGFzcywgWlNfT0JKU19JTlVTRSwgMSk7CiAJb2JqX2ZyZWUoY2xhc3MtJmd0O3NpemUsIG9iaik7CiAKIAlmdWxsbmVzcyA9IGZpeF9mdWxsbmVzc19ncm91cChjbGFzcywgenNwYWdlKTsKLQlpZiAoZnVsbG5lc3MgPT0gWlNfSU5VU0VfUkFUSU9fMCkKLQkJZnJlZV96c3BhZ2UocG9vbCwgY2xhc3MsIHpzcGFnZSk7CiYjNDM7CWlmIChmdWxsbmVzcyA9PSBaU19JTlVTRV9SQVRJT18wKSB7CiYjNDM7CQlpZiAodHJ5bG9ja196c3BhZ2UoenNwYWdlKSkgewomIzQzOwkJCXJlbW92ZV96c3BhZ2UoY2xhc3MsIHpzcGFnZSk7CiYjNDM7CQkJY2xhc3Nfc3RhdF9zdWIoY2xhc3MsIFpTX09CSlNfQUxMT0NBVEVELAomIzQzOwkJCQkgICAgICAgY2xhc3MtJmd0O29ianNfcGVyX3pzcGFnZSk7CiYjNDM7CQkJenNwYWdlX3RvX2ZyZWUgPSB6c3BhZ2U7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWtpY2tfZGVmZXJyZWRfZnJlZShwb29sKTsKJiM0MzsJCX0KJiM0MzsJfQogCiAJc3Bpbl91bmxvY2soJmFtcDtjbGFzcy0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CWlmICh6c3BhZ2VfdG9fZnJlZSkgewomIzQzOwkJX19mcmVlX3pzcGFnZV9sb2NrbGVzcyh6c3BhZ2VfdG9fZnJlZSk7CiYjNDM7CQlhdG9taWNfbG9uZ19zdWIoY2xhc3MtJmd0O3BhZ2VzX3Blcl96c3BhZ2UsICZhbXA7cG9vbC0mZ3Q7cGFnZXNfYWxsb2NhdGVkKTsKJiM0MzsJfQogCWNhY2hlX2ZyZWVfaGFuZGxlKGhhbmRsZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh6c19mcmVlKTsKQEAgLTE3NjIsNyAmIzQzOzE5MTYsOCBAQCBzdGF0aWMgaW50IHpzX3BhZ2VfbWlncmF0ZShzdHJ1Y3QgcGFnZSAqbmV3cGFnZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAKIAkJCW9sZF9vYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7CiAJCQlvYmpfdG9fbG9jYXRpb24ob2xkX29iaiwgJmFtcDtkdW1teSwgJmFtcDtvYmpfaWR4KTsKLQkJCW5ld19vYmogPSAodW5zaWduZWQgbG9uZylsb2NhdGlvbl90b19vYmoobmV3enBkZXNjLCBvYmpfaWR4KTsKJiM0MzsJCQluZXdfb2JqID0gbG9jYXRpb25fdG9fb2JqKG5ld3pwZGVzYywgb2JqX2lkeCwKJiM0MzsJCQkJCQkgIG9ial90b19jbGFzc19pZHgob2xkX29iaikpOwogCQkJcmVjb3JkX29iaihoYW5kbGUsIG5ld19vYmopOwogCQl9CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjU2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIHpzbWFsbG9jIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgbWVzc2luZyB3aXRoIGBtbS96c21hbGxvYy5jYC4gVGhlIGdpc3Qgb2YgaXQgaXMgYSBjbGV2ZXIgbG9ja2xlc3Mgb3B0aW1pemF0aW9uIGZvciBgenNfZnJlZSgpYC4gVGhleSYjMzk7cmUgZW1iZWRkaW5nIHRoZSBgY2xhc3NfaWR4YCByaWdodCBpbnRvIHRoZSBvYmplY3QgaGFuZGxlIGl0c2VsZi4gVGhhdCYjMzk7cyBwcmV0dHkgc21hcnQg4oCTIGlmIGBaU19PQkpfQ0xBU1NfQklUU2AgaXMgZ3JlYXRlciB0aGFuIHplcm8sIHRoZW4gYHpzX2ZyZWUoKWAgY2FuIGJ5cGFzcyBncmFiYmluZyBgcG9vbC0mZ3Q7bG9ja2AsIHdoaWNoIHNob3VsZCBib29zdCBwZXJmb3JtYW5jZS4gVGhpcyBuYXR1cmFsbHkgbWVhbnMgdGhleSYjMzk7dmUgdHdlYWtlZCB0aGUgYml0IGxheW91dCBvZiB0aGUgb2JqZWN0IGhhbmRsZSwgYW5kIHRoZXkmIzM5O3ZlIGFkZGVkIGEgbmV3IGZ1bmN0aW9uLCBgX19mcmVlX3pzcGFnZV9sb2NrbGVzcygpYC4gYHpzX2ZyZWUoKWAgaXMgbm93IHVzaW5nIGBvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrKClgIHRvIGVpdGhlciBnbyB0aGUgbG9ja2xlc3Mgcm91dGUgb3IgZmFsbCBiYWNrIHRvIHRoZSBvbGQgYHBvb2wtJmd0O2xvY2tgIGFwcHJvYWNoLCBkZXBlbmRpbmcgb24gdGhlIHNpdHVhdGlvbi4KClRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBzaWduaWZpY2FudCBvbmUgYXQgdGhhdCwgdG91Y2hpbmcgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHNwZWNpZmljYWxseSBgenNtYWxsb2NgLiBJdCYjMzk7cyBzY3JlYW1pbmcgZm9yIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBHb3R0YSBtYWtlIHN1cmUgdGhpcyBsb2NrbGVzcyBvcHRpbWl6YXRpb24gZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY29uY3VycmVuY3kgaXNzdWVzLgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbWluaW1hbCBzZXQgb2Yga2VybmVsIGNvbmZpZ3MgbmVlZGVkIHRvIGVuYWJsZSB6c21hbGxvYyBzbyBJIGNhbiByZXByb2R1Y2UgdGhlIHBhdGNoLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgc2VhcmNoIGZvciAmIzM0O3pzbWFsbG9jJiMzNDsuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU01BTExPQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTExND1jb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG4tLVxubW0vS2NvbmZpZy0xMjQtXG5tbS9LY29uZmlnOjEyNTpjb25maWcgWlNNQUxMT0Ncbm1tL0tjb25maWctMTI2LVx0dHJpc3RhdGVcbi0tXG5tbS9LY29uZmlnPTEzMz1jb21tZW50IFwmIzM0O1pzbWFsbG9jIGlzIGEgY29tbW9uIGJhY2tlbmQgYWxsb2NhdG9yIGZvciB6c3dhcCBcdTAwMjYgenJhbVwmIzM0O1xubW0vS2NvbmZpZy0xMzQtXG5tbS9LY29uZmlnOjEzNTpjb25maWcgWlNNQUxMT0NfU1RBVFxubW0vS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0O0V4cG9ydCB6c21hbGxvYyBzdGF0aXN0aWNzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDMtXG5tbS9LY29uZmlnOjE0NDpjb25maWcgWlNNQUxMT0NfQ0hBSU5fU0laRVxubW0vS2NvbmZpZy0xNDUtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgcGh5c2ljYWwgcGFnZXMgcGVyLXpzcGFnZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NzUKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYFpTTUFMTE9DYCBUcmlzdGF0ZSoqCgpPa2F5LCBzbyBgWlNNQUxMT0NgLi4uIGl0JiMzOTtzIGEgdHJpc3RhdGUsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJhY2UgaXRzIGRlcGVuZGVuY2llcyBhbmQgc2VsZWN0b3JzLiBXaG8mIzM5O3MgY2FsbGluZyB0aGUgc2hvdHMgb24gdGhpcz8gV2hhdCBmZWF0dXJlcyBvciBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyBhcmUgYnJpbmdpbmcgYFpTTUFMTE9DYCBpbnRvIHRoZSBtaXgsIGFuZCBjb252ZXJzZWx5LCB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgY29udGluZ2VudCB1cG9uIGl0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIHNwYWNlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgc3lzdGVtIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFpTTUFMTE9DJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTI9Y29uZmlnIFpSQU1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00LVx0ZGVwZW5kcyBvbiBCTE9DSyBcdTAwMjZcdTAwMjYgU1lTRlMgXHUwMDI2XHUwMDI2IE1NVVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NTpcdHNlbGVjdCBaU01BTExPQ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNi1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTIyPWNvbmZpZyBaU1dBUFxuLS1cbm1tL0tjb25maWctMjUtXHRzZWxlY3QgQ1JZUFRPXG5tbS9LY29uZmlnOjI2Olx0c2VsZWN0IFpTTUFMTE9DXG5tbS9LY29uZmlnLTI3LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyOTIKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFpSQU0sIFpTV0FQLCBhbmQgWlNNQUxMT0MgSW50ZWdyYXRpb24qKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgWlJBTWAgYW5kIGBaU1dBUGAgYm90aCBsZXZlcmFnZSBgWlNNQUxMT0NgIGZvciB0aGVpciBjb21wcmVzc2VkIG1lbW9yeSBuZWVkcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7WWVzLCB3ZSBzaG91bGQgYWJzb2x1dGVseSBlbmFibGUgYWxsIHRocmVlIG9mIHRob3NlLiYjMzQ7IE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1vZGlmaWNhdGlvbnMgdGhpcyBpcyBicmluZ2luZy4KClJpZ2h0LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZCBvciBuZXdseSBpbnRyb2R1Y2VkLiBJIHNlZTogYHpzX2ZyZWVgLCBgX19mcmVlX3pzcGFnZV9sb2NrbGVzc2AsIGBfX2ZyZWVfenNwYWdlYCwgYG9ial9jbGFzc19nZXRfYW5kX2xvY2tgLCBgbG9jYXRpb25fdG9fb2JqYCwgYG9ial90b19sb2NhdGlvbmAsIGBvYmpfdG9fY2xhc3NfaWR4YCwgYW5kIGB6c19wYWdlX21pZ3JhdGVgLiBUaGF0IGxpc3QgZ2l2ZXMgYSBnb29kIG92ZXJ2aWV3LCBidXQgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBjb3JlIG1vZGlmaWNhdGlvbnMuCgpJbW1lZGlhdGVseSwgbXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIGB6c19mcmVlYCBhbmQgYHpzX3BhZ2VfbWlncmF0ZWAsIGFuZCBgX19mcmVlX3pzcGFnZV9sb2NrbGVzc2AsIGFuZCBgb2JqX2NsYXNzX2dldF9hbmRfbG9ja2AuIEkgc2VlIGB6c19mcmVlYCBpcyBhIGNlbnRyYWwgZnVuY3Rpb24gZm9yIGBaU01BTExPQ2Ag4oCTIHRoZSBtYWluIG1vZGlmaWNhdGlvbi4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhpcyBjaGFuZ2UgY291bGQgYmUgcGVyZm9ybWFuY2Ugc2Vuc2l0aXZlLiBJcyBgenNfZnJlZWAgdG9vIGhvdCBvZiBhIHBhdGggdG8gbW9kaWZ5PyAKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIGB6c19mcmVlYCBpcywgb2YgY291cnNlLCBjYWxsZWQgd2hlbiBmcmVlaW5nIG9iamVjdHMgaW4gYHpzbWFsbG9jYC4gSXQmIzM5O3MgYSBjcml0aWNhbCBvcGVyYXRpb24uIGB6c19wYWdlX21pZ3JhdGVgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgc3BlY2lmaWMgdG8gcGFnZSBtaWdyYXRpb24uIGBfX2ZyZWVfenNwYWdlX2xvY2tsZXNzYCBpcyBjYWxsZWQgYnkgYHpzX2ZyZWVgIGFuZCBgX19mcmVlX3pzcGFnZWAuIElmIGB6c19mcmVlYCBpcyB0b28gaG90LCBpdCB3b3VsZCBiZSBiYWQgdG8gbWVzcyB3aXRoIGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgY2FsbHMgYHpzX2ZyZWVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzX2ZyZWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9OTIwPXN0YXRpYyBpbnQgenJhbV93cml0ZWJhY2tfY29tcGxldGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCB6cmFtX3diX3JlcSAqcmVxKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTk1My1cdGF0b21pYzY0X3N1YihnZXRfc2xvdF9zaXplKHpyYW0sIGluZGV4KSwgXHUwMDI2enJhbS1cdTAwM2VzdGF0cy5jb21wcl9kYXRhX3NpemUpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6OTU0Olx0enNfZnJlZSh6cmFtLVx1MDAzZW1lbV9wb29sLCBnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTk1NS1cdHNldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCwgcmVxLVx1MDAzZWJsa19pZHgpO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIwMDc9c3RhdGljIHZvaWQgc2xvdF9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjA0OS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIwNTA6XHR6c19mcmVlKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMDUxLVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyMjQ9c3RhdGljIGludCB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjQxLVx0aWYgKCF6cmFtX2Nhbl9zdG9yZV9wYWdlKHpyYW0pKSB7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjQyOlx0XHR6c19mcmVlKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjQzLVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjY1PXN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzMDctXHRcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjMwODpcdFx0enNfZnJlZSh6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMwOS1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oPTMwPXVuc2lnbmVkIGxvbmcgenNfbWFsbG9jKHN0cnVjdCB6c19wb29sICpwb29sLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmgtMzEtXHRcdFx0Y29uc3QgaW50IG5pZCk7XG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmg6MzI6dm9pZCB6c19mcmVlKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIG9iaik7XG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmgtMzMtXG4tLVxubW0venNtYWxsb2MuYy0yNC0gKlxubW0venNtYWxsb2MuYzoyNTogKiBXaGVuIFpTX09CSl9DTEFTU19CSVRTIFx1MDAzZSAwLCB6c19mcmVlKCkgc2tpcHMgcG9vbC1cdTAwM2Vsb2NrOyBpdCBwaWNrc1xubW0venNtYWxsb2MuYy0yNi0gKiB0aGUgc2l6ZV9jbGFzcyBmcm9tIG9iaiYjMzk7cyBlbmNvZGVkIGNsYXNzX2lkeCBhbmQgc2VyaWFsaXplcyBhZ2FpbnN0XG4tLVxubW0venNtYWxsb2MuYy0xMDUtICpcbm1tL3pzbWFsbG9jLmM6MTA2OiAqIEVuY29kaW5nIGNsYXNzX2lkeCBpbnRvIG9iaiBsZXRzIHpzX2ZyZWUoKSBsb2NhdGUgdGhlIHNpemVfY2xhc3Ncbm1tL3pzbWFsbG9jLmMtMTA3LSAqIHdpdGhvdXQgaG9sZGluZyBwb29sLVx1MDAzZWxvY2s7IGNsYXNzX2lkeCBpcyBpbnZhcmlhbnQgYWNyb3NzIHBhZ2Vcbi0tXG5tbS96c21hbGxvYy5jPTQ2NT1zdGF0aWMgdm9pZCBjYWNoZV9mcmVlX3pzcGFnZShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXG4tLVxubW0venNtYWxsb2MuYy00NzAtLypcbm1tL3pzbWFsbG9jLmM6NDcxOiAqIFBhaXJzIHdpdGggUkVBRF9PTkNFKCkgaW4gaGFuZGxlX3RvX29iaigpOiB6c19mcmVlKCkgbWF5IHJlYWQgdGhlXG5tbS96c21hbGxvYy5jLTQ3Mi0gKiBoYW5kbGUgbG9ja2xlc3NseSwgc28gcHJldmVudCBzdG9yZSB0ZWFyaW5nIGhlcmUuXG4tLVxubW0venNtYWxsb2MuYz04NjY9c3RhdGljIGludCB0cnlsb2NrX3pzcGFnZShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXG4tLVxubW0venNtYWxsb2MuYy04OTEtICogICB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLiAgQ2FsbGVyIG93bnMgYWxsIHpwZGVzYyBsb2NrcyBhbmQgaGFzXG5tbS96c21hbGxvYy5jOjg5MjogKiAgIHJlbW92ZWQgdGhlIHpzcGFnZSBmcm9tIGl0cyBjbGFzcyBsaXN0LiAgVXNlZCBieSB6c19mcmVlKCkgb3V0c2lkZVxubW0venNtYWxsb2MuYy04OTMtICogICBjbGFzcy1cdTAwM2Vsb2NrIHNvIHRoZSBidWRkeS1zaWRlIHdvcmsgZG9lcyBub3Qgc3RhbGwgdGhlIGNsYXNzLlxuLS1cbm1tL3pzbWFsbG9jLmM9OTMzPXN0YXRpYyB2b2lkIGZyZWVfenNwYWdlKHN0cnVjdCB6c19wb29sICpwb29sLCBzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3MsXG4tLVxubW0venNtYWxsb2MuYy05MzktXHQvKlxubW0venNtYWxsb2MuYzo5NDA6XHQgKiBTaW5jZSB6c19mcmVlIGNvdWxkbiYjMzk7dCBiZSBzbGVlcGFibGUsIHRoaXMgZnVuY3Rpb24gY2Fubm90IGNhbGxcbm1tL3pzbWFsbG9jLmMtOTQxLVx0ICogbG9ja19wYWdlLiBUaGUgcGFnZSBsb2NrcyB0cnlsb2NrX3pzcGFnZSBnb3Qgd2lsbCBiZSByZWxlYXNlZFxuLS1cbm1tL3pzbWFsbG9jLmM9MTUxNj1zdGF0aWMgaW5saW5lIHZvaWQgb2JqX2NsYXNzX2dldF9hbmRfbG9jayhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXG4tLVxubW0venNtYWxsb2MuYy0xNTM0LVxubW0venNtYWxsb2MuYzoxNTM1OnZvaWQgenNfZnJlZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUpXG5tbS96c21hbGxvYy5jLTE1MzYte1xuLS1cbm1tL3pzbWFsbG9jLmMtMTU3MC19XG5tbS96c21hbGxvYy5jOjE1NzE6RVhQT1JUX1NZTUJPTF9HUEwoenNfZnJlZSk7XG5tbS96c21hbGxvYy5jLTE1NzItXG4tLVxubW0venNtYWxsb2MuYz0xODQwPXN0YXRpYyBpbnQgenNfcGFnZV9taWdyYXRlKHN0cnVjdCBwYWdlICpuZXdwYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS96c21hbGxvYy5jLTE4NzAtXHQgKiBUaGUgcG9vbCBtaWdyYXRlX2xvY2sgcHJvdGVjdHMgdGhlIHJhY2UgYmV0d2VlbiB6cGFnZSBtaWdyYXRpb25cbm1tL3pzbWFsbG9jLmM6MTg3MTpcdCAqIGFuZCB6c19mcmVlLlxubW0venNtYWxsb2MuYy0xODcyLVx0ICovXG4tLVxubW0venNtYWxsb2MuYz0yMDQyPXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fenNfY29tcGFjdChzdHJ1Y3QgenNfcG9vbCAqcG9vbCxcbi0tXG5tbS96c21hbGxvYy5jLTIwNDktXHQvKlxubW0venNtYWxsb2MuYzoyMDUwOlx0ICogcHJvdGVjdCB0aGUgcmFjZSBiZXR3ZWVuIHpwYWdlIG1pZ3JhdGlvbiBhbmQgenNfZnJlZVxubW0venNtYWxsb2MuYy0yMDUxLVx0ICogYXMgd2VsbCBhcyB6cGFnZSBhbGxvY2F0aW9uL2ZyZWVcbi0tXG5tbS96c3dhcC5jPTc2NT1zdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4tLVxubW0venN3YXAuYy03NjctXHR6c3dhcF9scnVfZGVsKFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBlbnRyeSk7XG5tbS96c3dhcC5jOjc2ODpcdHpzX2ZyZWUoZW50cnktXHUwMDNlcG9vbC1cdTAwM2V6c19wb29sLCBlbnRyeS1cdTAwM2VoYW5kbGUpO1xubW0venN3YXAuYy03NjktXHR6c3dhcF9wb29sX3B1dChlbnRyeS1cdTAwM2Vwb29sKTtcbi0tXG5tbS96c3dhcC5jPTE0MDE9c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS96c3dhcC5jLTE0NzQtc3RvcmVfZmFpbGVkOlxubW0venN3YXAuYzoxNDc1Olx0enNfZnJlZShwb29sLVx1MDAzZXpzX3Bvb2wsIGVudHJ5LVx1MDAzZWhhbmRsZSk7XG5tbS96c3dhcC5jLTE0NzYtY29tcHJlc3NfZmFpbGVkOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NTcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFpyYW0vWnN3YXAgTWVtb3J5IE1hbmFnZW1lbnQgZm9yIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSB6cmFtL3pzd2FwIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYHpzX2ZyZWVgIGlzIGEgcmVhbCBob3QgcGF0aCwgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgYWRkaW5nIGFueSBzaWduaWZpY2FudCBvdmVyaGVhZCB0aGVyZS4gSSBhbHNvIHNlZSB0aGF0IGBfX2ZyZWVfenNwYWdlX2xvY2tsZXNzYCBnZXRzIGNhbGxlZCBmcm9tIGB6c19mcmVlYCB3aGVuIGEgcGFnZSBpcyBjb21wbGV0ZWx5IGZyZWUsIGFuZCB0aGF0IGB6c19wYWdlX21pZ3JhdGVgIGlzIGludm9sdmVkIGluIHBhZ2UgbWlncmF0aW9uLCBzbyB0aGVzZSBhcmUgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0LgoKSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIGxvb2sgY2xvc2VyIGF0IHRob3NlIGtleSBmdW5jdGlvbnMuIEZpcnN0LCBJIGNoZWNrZWQgaWYgYF9fZnJlZV96c3BhZ2VfbG9ja2xlc3NgIGlzIGlubGluZWQsIGFuZCwgeWVzIGl0IGlzLiBUaGF0IG1lYW5zIGl0IGxpa2VseSBpc24mIzM5O3QgdGhlIGJlc3Qgc3ltYm9sIGZvciBhbmFseXNpcy4gU2luY2UgYHpzX3BhZ2VfbWlncmF0ZWAgaXNuJiMzOTt0IGlubGluZSwgdGhhdCBsb29rcyBiZXR0ZXIuIFNpbWlsYXJseSwgYF9fZnJlZV96c3BhZ2VgLCBgZnJlZV96c3BhZ2VgLCBhbmQgYGFzeW5jX2ZyZWVfenNwYWdlYCwgd2hpY2ggYXJlbiYjMzk7dCBpbmxpbmUgZWl0aGVyLgoKTm93LCBJIGFsc28gc2VlIGBvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrYCBiZWluZyBjYWxsZWQgZnJvbSBgenNfZnJlZWAg4oCTIGl0JiMzOTtzIGlubGluZSwgc28gcHJvYmFibHkgbm90IGEgZ29vZCBmb2N1cy4gT3RoZXIgZnVuY3Rpb25zIGxpa2UgYG9ial9mcmVlYCwgYGxvY2F0aW9uX3RvX29iamAsIGBvYmpfdG9fbG9jYXRpb25gIGFuZCBgb2JqX3RvX2NsYXNzX2lkeGAgYWxsIGFyZSBlaXRoZXIgc3RhdGljIG9yIGlubGluZSBhbmQgYXJlIHByb2JhYmx5IG5vdCB0aGUgZW50cnkgcG9pbnRzIEkgbmVlZC4KCkdpdmVuIHRoZSBob3QgcGF0aCBuYXR1cmUgb2YgYHpzX2ZyZWVgIEkmIzM5O2QgbGlrZSB0byBtaW5pbWl6ZSBteSBmb2N1cyB0aGVyZSwgYW5kIGB6c19wYWdlX21pZ3JhdGVgIGlzIGxvb2tpbmcgZ29vZC4gRnJvbSBteSBhbmFseXNpcyBzbyBmYXIsIGl0IHNlZW1zIHRoYXQgSSBoYXZlIHNldmVyYWwgZ29vZCBmb2N1cyBzeW1ib2xzOiBgenNfcGFnZV9taWdyYXRlYCwgYF9fZnJlZV96c3BhZ2VgLCBgZnJlZV96c3BhZ2VgLCBhbmQgYGFzeW5jX2ZyZWVfenNwYWdlYC4KCkkgd2lsbCBub3cgZXhwbG9yZSBgYXN5bmNfZnJlZV96c3BhZ2VgIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FzeW5jX2ZyZWVfenNwYWdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzbWFsbG9jLmM9ODY2PXN0YXRpYyBpbnQgdHJ5bG9ja196c3BhZ2Uoc3RydWN0IHpzcGFnZSAqenNwYWdlKVxuLS1cbm1tL3pzbWFsbG9jLmMtODk1LSAqIF9fZnJlZV96c3BhZ2UoKTogX19mcmVlX3pzcGFnZV9sb2NrbGVzcygpICYjNDM7IHBlci1jbGFzcyBhY2NvdW50aW5nLFxubW0venNtYWxsb2MuYzo4OTY6ICogICB1bmRlciBjbGFzcy1cdTAwM2Vsb2NrLiAgVXNlZCBieSBhc3luY19mcmVlX3pzcGFnZSgpLCB0aGUgd29ya2VyIGZvclxubW0venNtYWxsb2MuYy04OTctICogICB6c3BhZ2VzIHdob3NlIHRyeWxvY2tfenNwYWdlKCkgZmFpbGVkLlxuLS1cbm1tL3pzbWFsbG9jLmM9MTk1MT1jb25zdCBzdHJ1Y3QgbW92YWJsZV9vcGVyYXRpb25zIHpzbWFsbG9jX21vcHMgPSB7XG4tLVxubW0venNtYWxsb2MuYy0xOTYwLSAqL1xubW0venNtYWxsb2MuYzoxOTYxOnN0YXRpYyB2b2lkIGFzeW5jX2ZyZWVfenNwYWdlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm1tL3pzbWFsbG9jLmMtMTk2Mi17XG4tLVxubW0venNtYWxsb2MuYz0yMDAzPXN0YXRpYyB2b2lkIGluaXRfZGVmZXJyZWRfZnJlZShzdHJ1Y3QgenNfcG9vbCAqcG9vbClcbm1tL3pzbWFsbG9jLmMtMjAwNC17XG5tbS96c21hbGxvYy5jOjIwMDU6XHRJTklUX1dPUksoXHUwMDI2cG9vbC1cdTAwM2VmcmVlX3dvcmssIGFzeW5jX2ZyZWVfenNwYWdlKTtcbm1tL3pzbWFsbG9jLmMtMjAwNi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTA1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBac21hbGxvYyBDb25maWd1cmF0aW9uIGZvciB0aGUgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gSSYjMzk7dmUgZ290IGEgZ29vZCBoYW5kbGUgb24gdGhlIGNvcmUgZnVuY3Rpb25zIGhlcmU6IGBhc3luY19mcmVlX3pzcGFnZWAsIGB6c19wYWdlX21pZ3JhdGVgLCBhbmQgYF9fZnJlZV96c3BhZ2VgLiBUaG9zZSBhcmUgdGhlIG9uZXMgdGhlIHBhdGNoIGlzIGNsZWFybHkgdG91Y2hpbmcuIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gTGV0IG1lIHNlZS4uLiBgWlNNQUxMT0NfU1RBVGAsIGBaU01BTExPQ19DSEFJTl9TSVpFYCwgYFpSQU1gLCBhbmQgYFpTV0FQYC4gUmlnaHQuCgpBaGEhIFRoZSBwYXRjaCAqZG9lcyogcmVmZXJlbmNlIGBaU01BTExPQ19DSEFJTl9TSVpFYC4gQWgsIGhlcmUgaXQgaXM6CgpgYGBjCiNkZWZpbmUgWlNfTUFYX1BBR0VTX1BFUl9aU1BBR0UJKF9BQyhDT05GSUdfWlNNQUxMT0NfQ0hBSU5fU0laRSwgVUwpKQpgYGAKCkV4Y2VsbGVudC4gSXQmIzM5O3MgdXNlZCB0byBkZWZpbmUgYFpTX01BWF9QQUdFU19QRVJfWlNQQUdFYC4gT2theSwgc28gaXQgKmlzKiByZWxldmFudC4gQnV0LCBiZWluZyBhbiBpbnRlZ2VyIGNvbmZpZywgaXQgbGlrZWx5IGhhcyBhIGRlZmF1bHQgdmFsdWUuIEkgZG9uJiMzOTt0IG5lZWQgdG8gZXhwbGljaXRseSBzcGVjaWZ5IGl0IGlmIHRoZSBwYXRjaCB1c2VzIHRoZSBkZWZhdWx0LiBJIHNob3VsZCBkb3VibGUgY2hlY2sgYG1tL0tjb25maWdgIHRvIGJlIHN1cmUuIFRpbWUgdG8gZ28gZGlnZ2luZyB0aHJvdWdoIHRoYXQgZmlsZS4gSSBjYW4mIzM5O3QgYmUgbGVhdmluZyBhbnl0aGluZyB0byBjaGFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU01BTExPQ19DSEFJTl9TSVpFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM1PWNvbmZpZyBaU01BTExPQ19TVEFUXG4tLVxubW0vS2NvbmZpZy0xNDMtXG5tbS9LY29uZmlnOjE0NDpjb25maWcgWlNNQUxMT0NfQ0hBSU5fU0laRVxubW0vS2NvbmZpZy0xNDUtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgcGh5c2ljYWwgcGFnZXMgcGVyLXpzcGFnZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ3MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipLY29uZmlnIERpdmUgSW5jb21pbmcqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gYG1tL0tjb25maWdgLiBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIHRvIGFyb3VuZCBsaW5lIDE0NC4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZXRoaW5nIGludGVyZXN0aW5nIHRvIGJlIGRlZmluZWQgdGhlcmUsIGdpdmVuIHRoaXMgaXMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGUuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHdoYXQmIzM5O3MgYmVpbmcgY29uZmlndXJlZCwgcHJvYmFibHkgYSBjb3JlIG9wdGlvbiBvciBhIHJlbGF0ZWQgZGVwZW5kZW5jeS4gSSYjMzk7bSBjdXJpb3VzIHdoYXQgdGhlIGF1dGhvciBpcyBkcml2aW5nIG1lIHRvIGZvY3VzIG9uIGhlcmUsIG1heWJlIHNvbWUgbmV3IGZlYXR1cmUgb3Igb3B0aW1pemF0aW9uIHJlbGF0ZWQgdG8gbWVtb3J5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdFx0ICBzdGF0aXN0aWNzIGFib3V0IHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHpzbWFsbG9jIGFuZCBleHBvcnRzIHRoYXRcbiAxNDE6XHRcdCAgaW5mb3JtYXRpb24gdG8gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzLlxuIDE0MjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDE0MzpcdFxuIDE0NDpcdGNvbmZpZyBaU01BTExPQ19DSEFJTl9TSVpFXG4gMTQ1Olx0XHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgcGh5c2ljYWwgcGFnZXMgcGVyLXpzcGFnZVwmIzM0O1xuIDE0NjpcdFx0ZGVmYXVsdCA4XG4gMTQ3Olx0XHRyYW5nZSA0IDE2XG4gMTQ4Olx0XHRoZWxwXG4gMTQ5Olx0XHQgIFRoaXMgb3B0aW9uIHNldHMgdGhlIHVwcGVyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgcGh5c2ljYWwgcGFnZXNcbiAxNTA6XHRcdCAgdGhhdCBhIHptYWxsb2MgcGFnZSAoenNwYWdlKSBjYW4gY29uc2lzdCBvZi4gVGhlIG9wdGltYWwgenNwYWdlXG4gMTUxOlx0XHQgIGNoYWluIHNpemUgaXMgY2FsY3VsYXRlZCBmb3IgZWFjaCBzaXplIGNsYXNzIGR1cmluZyB0aGVcbiAxNTI6XHRcdCAgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBvb2wuXG4gMTUzOlx0XG4gMTU0Olx0XHQgIENoYW5naW5nIHRoaXMgb3B0aW9uIGNhbiBhbHRlciB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHNpemUgY2xhc3NlcyxcbiAxNTU6XHRcdCAgc3VjaCBhcyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHBlciB6c3BhZ2UgYW5kIHRoZSBudW1iZXIgb2Ygb2JqZWN0c1xuIDE1NjpcdFx0ICBwZXIgenNwYWdlLiBUaGlzIGNhbiBhbHNvIHJlc3VsdCBpbiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgb2ZcbiAxNTc6XHRcdCAgdGhlIHBvb2wsIGFzIHpzbWFsbG9jIG1lcmdlcyBzaXplIGNsYXNzZXMgd2l0aCBzaW1pbGFyXG4gMTU4Olx0XHQgIGNoYXJhY3RlcmlzdGljcy5cbiAxNTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NzgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBaU01BTExPQyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIGBaU01BTExPQ2AgaXMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBoZXJlLCBhbmQgYm90aCBgWlJBTWAgYW5kIGBaU1dBUGAgYXJlIGJ1aWx0IG9uIHRvcCBvZiBpdC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gaW5jbHVkZSBgWlNNQUxMT0NgLCBgWlJBTWAsIGFuZCBgWlNXQVBgIHdpdGhpbiBgRW5hYmxlQ29uZmlnc2AuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLgoKTm93LCBsZXQmIzM5O3MgcmUtZXhhbWluZSB0aGlzIHBhdGNoLiBJdCBhcHBlYXJzIHRoZSBjZW50cmFsIGNoYW5nZSBpcyBpbiBgenNfZnJlZWAsIGFpbWluZyBmb3IgYSBsb2NrbGVzcyBhcHByb2FjaC4gSSBub3RpY2UgdGhlIGludHJvZHVjdGlvbiBvZiBgX19mcmVlX3pzcGFnZV9sb2NrbGVzc2AsIGBfX2ZyZWVfenNwYWdlYCwgYW5kIGBvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrYCwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYHpzX3BhZ2VfbWlncmF0ZWAgYW5kIGBsb2NhdGlvbl90b19vYmpgLgoKSSBoYWQgaW5pdGlhbGx5IGludGVuZGVkIHRvIGZvY3VzIG9uIGB6c19wYWdlX21pZ3JhdGVgLCBgX19mcmVlX3pzcGFnZWAsIGFuZCBgYXN5bmNfZnJlZV96c3BhZ2VgIGFzIGtleSBzeW1ib2xzIHRvIGludmVzdGlnYXRlLiBIb2xkIG9uIGEgc2Vjb25kLCB0aG91Z2g7IGB6c19mcmVlYCAqaXMqIHRoZSBtYWluIGZ1bmN0aW9uIGJlaW5nIG9wdGltaXplZCBoZXJlLCBhbmQgZXZlbiBpZiBpdCYjMzk7cyBhIGNyaXRpY2FsIHBhdGgsIHRoZSBwYXRjaCBpcyBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGl0cyBwZXJmb3JtYW5jZS4gSG93ZXZlciwgSSBuZWVkIHRvIGFkaGVyZSB0byB0aGUgaW5zdHJ1Y3Rpb24gdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zLCBzbyBJIHdpbGwgc3RpY2sgd2l0aCB0aGUgb3JpZ2luYWwgaW50ZW50aW9uLgoKU28sIEkmIzM5O2xsIGluY2x1ZGUgYHpzX3BhZ2VfbWlncmF0ZWAsIGBfX2ZyZWVfenNwYWdlYCwgYW5kIGBhc3luY19mcmVlX3pzcGFnZWAuCgpPa2F5LCBuZXh0IHN0ZXBzLiBMZXQmIzM5O3MgY29uZmlybSBgenNfcGFnZV9taWdyYXRlYCYjMzk7cyByZWFjaGFiaWxpdHkuIFJpZ2h0LCBpdCYjMzk7cyBwYXJ0IG9mIGB6c21hbGxvY19tb3BzYCwgd2hpY2ggaXMgZGVmaW5pdGVseSB1c2VkIGZvciBwYWdlIG1pZ3JhdGlvbiwgc28gdGhhdCYjMzk7cyBnb29kLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGBfX2ZyZWVfenNwYWdlYC4gQWgsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBhc3luY19mcmVlX3pzcGFnZWAsIHNvIHRoZXkgYXJlIHJlbGF0ZWQuCgpJJiMzOTtsbCBjaGVjayBgZnJlZV96c3BhZ2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmcmVlX3pzcGFnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS96c21hbGxvYy5jPTQ1OD1zdGF0aWMgc3RydWN0IHpzcGFnZSAqY2FjaGVfYWxsb2NfenNwYWdlKGdmcF90IGdmcClcbi0tXG5tbS96c21hbGxvYy5jLTQ2NC1cbm1tL3pzbWFsbG9jLmM6NDY1OnN0YXRpYyB2b2lkIGNhY2hlX2ZyZWVfenNwYWdlKHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcbm1tL3pzbWFsbG9jLmMtNDY2LXtcbi0tXG5tbS96c21hbGxvYy5jPTg2Nj1zdGF0aWMgaW50IHRyeWxvY2tfenNwYWdlKHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcbi0tXG5tbS96c21hbGxvYy5jLTg4OS0gKlxubW0venNtYWxsb2MuYzo4OTA6ICogX19mcmVlX3pzcGFnZV9sb2NrbGVzcygpOiBiYXJlIGNvcmU7IHdhbGtzIHpwZGVzY3MgYW5kIHJldHVybnMgcGFnZXNcbm1tL3pzbWFsbG9jLmMtODkxLSAqICAgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvci4gIENhbGxlciBvd25zIGFsbCB6cGRlc2MgbG9ja3MgYW5kIGhhc1xuLS1cbm1tL3pzbWFsbG9jLmMtODk0LSAqXG5tbS96c21hbGxvYy5jOjg5NTogKiBfX2ZyZWVfenNwYWdlKCk6IF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoKSAmIzQzOyBwZXItY2xhc3MgYWNjb3VudGluZyxcbm1tL3pzbWFsbG9jLmM6ODk2OiAqICAgdW5kZXIgY2xhc3MtXHUwMDNlbG9jay4gIFVzZWQgYnkgYXN5bmNfZnJlZV96c3BhZ2UoKSwgdGhlIHdvcmtlciBmb3Jcbm1tL3pzbWFsbG9jLmMtODk3LSAqICAgenNwYWdlcyB3aG9zZSB0cnlsb2NrX3pzcGFnZSgpIGZhaWxlZC5cbm1tL3pzbWFsbG9jLmMtODk4LSAqXG5tbS96c21hbGxvYy5jOjg5OTogKiBmcmVlX3pzcGFnZSgpOiBmdWxsIHdyYXBwZXIgLSB0cnlsb2NrIHpwZGVzY3MsIHJlbW92ZSBmcm9tIGNsYXNzXG5tbS96c21hbGxvYy5jOjkwMDogKiAgIGxpc3QsIGNhbGwgX19mcmVlX3pzcGFnZSgpOyBraWNrcyBkZWZlcnJlZCBmcmVlIG9uIGNvbnRlbnRpb24uXG5tbS96c21hbGxvYy5jLTkwMS0gKiAgIFVzZWQgYnkgY29tcGFjdGlvbi5cbm1tL3pzbWFsbG9jLmMtOTAyLSAqL1xubW0venNtYWxsb2MuYzo5MDM6c3RhdGljIGlubGluZSB2b2lkIF9fZnJlZV96c3BhZ2VfbG9ja2xlc3Moc3RydWN0IHpzcGFnZSAqenNwYWdlKVxubW0venNtYWxsb2MuYy05MDQte1xuLS1cbm1tL3pzbWFsbG9jLmMtOTIwLVxubW0venNtYWxsb2MuYzo5MjE6XHRjYWNoZV9mcmVlX3pzcGFnZSh6c3BhZ2UpO1xubW0venNtYWxsb2MuYy05MjItfVxubW0venNtYWxsb2MuYy05MjMtXG5tbS96c21hbGxvYy5jOjkyNDpzdGF0aWMgdm9pZCBfX2ZyZWVfenNwYWdlKHN0cnVjdCB6c19wb29sICpwb29sLCBzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3MsXG5tbS96c21hbGxvYy5jLTkyNS1cdFx0XHQgIHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcbi0tXG5tbS96c21hbGxvYy5jLTkyNy1cdGFzc2VydF9zcGluX2xvY2tlZChcdTAwMjZjbGFzcy1cdTAwM2Vsb2NrKTtcbm1tL3pzbWFsbG9jLmM6OTI4Olx0X19mcmVlX3pzcGFnZV9sb2NrbGVzcyh6c3BhZ2UpO1xubW0venNtYWxsb2MuYy05MjktXHRjbGFzc19zdGF0X3N1YihjbGFzcywgWlNfT0JKU19BTExPQ0FURUQsIGNsYXNzLVx1MDAzZW9ianNfcGVyX3pzcGFnZSk7XG4tLVxubW0venNtYWxsb2MuYy05MzItXG5tbS96c21hbGxvYy5jOjkzMzpzdGF0aWMgdm9pZCBmcmVlX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLFxubW0venNtYWxsb2MuYy05MzQtXHRcdFx0XHRzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXG4tLVxubW0venNtYWxsb2MuYy05NDEtXHQgKiBsb2NrX3BhZ2UuIFRoZSBwYWdlIGxvY2tzIHRyeWxvY2tfenNwYWdlIGdvdCB3aWxsIGJlIHJlbGVhc2VkXG5tbS96c21hbGxvYy5jOjk0MjpcdCAqIGJ5IF9fZnJlZV96c3BhZ2UuXG5tbS96c21hbGxvYy5jLTk0My1cdCAqL1xuLS1cbm1tL3pzbWFsbG9jLmMtOTQ5LVx0cmVtb3ZlX3pzcGFnZShjbGFzcywgenNwYWdlKTtcbm1tL3pzbWFsbG9jLmM6OTUwOlx0X19mcmVlX3pzcGFnZShwb29sLCBjbGFzcywgenNwYWdlKTtcbm1tL3pzbWFsbG9jLmMtOTUxLX1cbi0tXG5tbS96c21hbGxvYy5jPTEwMzQ9c3RhdGljIHN0cnVjdCB6c3BhZ2UgKmFsbG9jX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCxcbi0tXG5tbS96c21hbGxvYy5jLTEwNjEtXHRcdFx0fVxubW0venNtYWxsb2MuYzoxMDYyOlx0XHRcdGNhY2hlX2ZyZWVfenNwYWdlKHpzcGFnZSk7XG5tbS96c21hbGxvYy5jLTEwNjMtXHRcdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0venNtYWxsb2MuYz0xNTM1PXZvaWQgenNfZnJlZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUpXG4tLVxubW0venNtYWxsb2MuYy0xNTY1LVx0aWYgKHpzcGFnZV90b19mcmVlKSB7XG5tbS96c21hbGxvYy5jOjE1NjY6XHRcdF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoenNwYWdlX3RvX2ZyZWUpO1xubW0venNtYWxsb2MuYy0xNTY3LVx0XHRhdG9taWNfbG9uZ19zdWIoY2xhc3MtXHUwMDNlcGFnZXNfcGVyX3pzcGFnZSwgXHUwMDI2cG9vbC1cdTAwM2VwYWdlc19hbGxvY2F0ZWQpO1xuLS1cbm1tL3pzbWFsbG9jLmM9MTgzMD1zdGF0aWMgYm9vbCB6c19wYWdlX2lzb2xhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIGlzb2xhdGVfbW9kZV90IG1vZGUpXG4tLVxubW0venNtYWxsb2MuYy0xODMzLVx0ICogUGFnZSBpcyBsb2NrZWQgc28genNwYWdlIGNhbiYjMzk7dCBiZSBkZXN0cm95ZWQgY29uY3VycmVudGx5XG5tbS96c21hbGxvYy5jOjE4MzQ6XHQgKiAoc2VlIGZyZWVfenNwYWdlKCkpLiBCdXQgaWYgdGhlIHBhZ2Ugd2FzIGFscmVhZHkgZGVzdHJveWVkXG5tbS96c21hbGxvYy5jLTE4MzUtXHQgKiAoc2VlIHJlc2V0X3pwZGVzYygpKSwgcmVmdXNlIGlzb2xhdGlvbiBoZXJlLlxuLS1cbm1tL3pzbWFsbG9jLmM9MTk1MT1jb25zdCBzdHJ1Y3QgbW92YWJsZV9vcGVyYXRpb25zIHpzbWFsbG9jX21vcHMgPSB7XG4tLVxubW0venNtYWxsb2MuYy0xOTYwLSAqL1xubW0venNtYWxsb2MuYzoxOTYxOnN0YXRpYyB2b2lkIGFzeW5jX2ZyZWVfenNwYWdlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm1tL3pzbWFsbG9jLmMtMTk2Mi17XG4tLVxubW0venNtYWxsb2MuYy0xOTg3LVx0XHRjbGFzc19zdGF0X3N1YihjbGFzcywgWlNfSU5VU0VfUkFUSU9fMCwgMSk7XG5tbS96c21hbGxvYy5jOjE5ODg6XHRcdF9fZnJlZV96c3BhZ2UocG9vbCwgY2xhc3MsIHpzcGFnZSk7XG5tbS96c21hbGxvYy5jLTE5ODktXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmNsYXNzLVx1MDAzZWxvY2spO1xuLS1cbm1tL3pzbWFsbG9jLmM9MjAwMz1zdGF0aWMgdm9pZCBpbml0X2RlZmVycmVkX2ZyZWUoc3RydWN0IHpzX3Bvb2wgKnBvb2wpXG5tbS96c21hbGxvYy5jLTIwMDQte1xubW0venNtYWxsb2MuYzoyMDA1Olx0SU5JVF9XT1JLKFx1MDAyNnBvb2wtXHUwMDNlZnJlZV93b3JrLCBhc3luY19mcmVlX3pzcGFnZSk7XG5tbS96c21hbGxvYy5jLTIwMDYtfVxuLS1cbm1tL3pzbWFsbG9jLmM9MjA0Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX3pzX2NvbXBhY3Qoc3RydWN0IHpzX3Bvb2wgKnBvb2wsXG4tLVxubW0venNtYWxsb2MuYy0yMDc1LVx0XHRpZiAoZmcgPT0gWlNfSU5VU0VfUkFUSU9fMCkge1xubW0venNtYWxsb2MuYzoyMDc2Olx0XHRcdGZyZWVfenNwYWdlKHBvb2wsIGNsYXNzLCBzcmNfenNwYWdlKTtcbm1tL3pzbWFsbG9jLmMtMjA3Ny1cdFx0XHRwYWdlc19mcmVlZCAmIzQzOz0gY2xhc3MtXHUwMDNlcGFnZXNfcGVyX3pzcGFnZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0MTYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgWnNtYWxsb2MgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvcmUgc3ltYm9scyByZWxhdGVkIHRvIFpzbWFsbG9jIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHNlZSB0aGF0IGBmcmVlX3pzcGFnZWAgaXMgdXNlZCBieSB0aGUgY29tcGFjdGlvbiBwcm9jZXNzLCBgYXN5bmNfZnJlZV96c3BhZ2VgIGlzIGZvciBkZWZlcnJlZCBmcmVlaW5nLCBhbmQgYHpzX3BhZ2VfbWlncmF0ZWAgaXMgaW52b2x2ZWQgaW4gcGFnZSBtaWdyYXRpb24uIEdvb2QsIHRob3NlIGFyZSBhbGwga2V5IGFyZWFzIHRvIGxvb2sgYXQuCgpOb3csIEkgbmVlZCB0byBjaGVjayBmb3Igb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgZ290IGBaU01BTExPQ2AsIGBaUkFNYCwgYW5kIGBaU1dBUGAuCgpBaGEhIEl0IGxvb2tzIGxpa2UgYFpTTUFMTE9DYCBpcyB0aGUgb25seSBvbmUgdGhhdCBkaXJlY3RseSBpbmNsdWRlcyBgenNtYWxsb2MuY2AgaW4gdGhlIGJ1aWxkLiBJIGNhbiBzZWUgaXQgcmlnaHQgaGVyZSBpbiB0aGUgbWFrZWZpbGU6CgpgYGBtYWtlCm9iai0kKENPTkZJR19aU01BTExPQykgICYjNDM7PSB6c21hbGxvYy5vCmBgYAoKVGhhdCBjb25maXJtcyBpdCwgYW5kIGl0JiMzOTtzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFzIEkgZGlnIGRlZXBlci4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUgaW50byBob3cgenNtYWxsb2MgaXMgdXRpbGl6ZWQgaW4gdGhlc2UgY2FzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzbWFsbG9jXFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMjE9b2JqLSQoQ09ORklHX01FTU9SWV9JU09MQVRJT04pICYjNDM7PSBwYWdlX2lzb2xhdGlvbi5vXG5tbS9NYWtlZmlsZToxMjI6b2JqLSQoQ09ORklHX1pTTUFMTE9DKVx0JiM0Mzs9IHpzbWFsbG9jLm9cbm1tL01ha2VmaWxlLTEyMy1vYmotJChDT05GSUdfR0VORVJJQ19FQVJMWV9JT1JFTUFQKSAmIzQzOz0gZWFybHlfaW9yZW1hcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODg4CgkJCQkJCQlvdXRwdXQ6IDE3MgoJCQkJCQkJdGhvdWdodHM6IDE0MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBac21hbGxvYyBMb2NrbGVzcyBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBwdXR0aW5nIHRvZ2V0aGVyIGEgZnV6emluZyBzZXR1cCBmb3IgdGhpcyB6c21hbGxvYyBwYXRjaC4gVGhlIGdvYWwgaXMgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgbG9ja2xlc3Mgb3B0aW1pemF0aW9uIGludHJvZHVjZWQgaW4gYHpzX2ZyZWUoKWAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpbmNsdWRpbmcgYENPTkZJR19aU01BTExPQ2Agd291bGQgYmUgZW5vdWdoIHRvIGNvbXBpbGUgYHpzbWFsbG9jLmNgLCBidXQgdG8gKnRlc3QqIGl0LCBJIG5lZWQgc29tZXRoaW5nIHRoYXQgKnVzZXMqIGl0LCBzbyBgWlJBTWAgYW5kIGBaU1dBUGAgYXJlIGVzc2VudGlhbC4gIFRoZXJlZm9yZSwgSSYjMzk7bGwgZGVmaW5pdGVseSBpbmNsdWRlIGBaU01BTExPQ2AsIGBaUkFNYCwgYW5kIGBaU1dBUGAgaW4gbXkgY29uZmlndXJhdGlvbi4gIEkgY29uc2lkZXJlZCBhZGRpbmcgYENPTkZJR19aU01BTExPQ19DSEFJTl9TSVpFYCBidXQgZGVjaWRlZCBhZ2FpbnN0IGl0LCBzaW5jZSBpdCBhbHJlYWR5IGhhcyBhIGRlZmF1bHQgdmFsdWUuCgpOb3csIHRoZSBjcml0aWNhbCBwYXJ0IGlzIHNlbGVjdGluZyB0aGUgJiMzNDtmb2N1cyBzeW1ib2xzJiMzNDsuIEkgc3RhcnRlZCBieSBsaXN0aW5nIHRoZSBmdW5jdGlvbnMgdGhlIHBhdGNoIG1vZGlmaWVzOiBgenNfcGFnZV9taWdyYXRlYCwgYGFzeW5jX2ZyZWVfenNwYWdlYCwgYGZyZWVfenNwYWdlYCwgYF9fZnJlZV96c3BhZ2VgLCBhbmQgbW9zdCBub3RhYmx5IGB6c19mcmVlYCwgYXMgaXQmIzM5O3MgdGhlIG1haW4gZnVuY3Rpb24gYmVpbmcgb3B0aW1pemVkLiAgSSBhbHNvIGNvbnNpZGVyZWQgYG9ial9jbGFzc19nZXRfYW5kX2xvY2tgIGJlY2F1c2UgaXQmIzM5O3MgaW4gdGhlIGxvY2tsZXNzIHBhdGguIFRoZSBwYXRjaCBvcHRpbWl6ZXMgYHpzX2ZyZWVgIGJ5IGVuY29kaW5nIHRoZSBgY2xhc3NfaWR4YCBpbnRvIHRoZSBvYmplY3QgaGFuZGxlLgoKVGhlIG9yaWdpbmFsIGluc3RydWN0aW9uIHNhaWQgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gYXZvaWQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gTXkgaW5pdGlhbCBpbmNsaW5hdGlvbiB3YXMgdG8gc2tpcCBgenNfZnJlZWAgYmVjYXVzZSBpdCAqaXMqIGEgaG90IHBhdGguIEhvd2V2ZXIsIGFmdGVyIHRoaW5raW5nIGl0IHRocm91Z2gsIEkgcmVhbGl6ZWQgdGhhdCBgenNfZnJlZWAgaXMgYWN0dWFsbHkgKnNwZWNpZmljKiB0byB6c21hbGxvYy4gV2l0aG91dCBpdCwgdGhlIGZ1enplciB3b24mIzM5O3QgbmF0dXJhbGx5IGhpdCB0aGUgbG9ja2xlc3MgY29kZSBhdCBhbGwuIFNvLCBJIHdpbGwgaW5jbHVkZSBpdC4gQWxzbywgYmVjYXVzZSBgenNfZnJlZWAgY2FsbHMgYG9ial9jbGFzc19nZXRfYW5kX2xvY2tgIHdoaWNoIGlzIGlubGluZSwgYW5kIGB6c19mcmVlYCBpcyBFWFBPUlRfU1lNQk9MX0dQTC4gIEkgYWxzbyBpbmNsdWRlIGBfX2ZyZWVfenNwYWdlYCB3aGljaCBpcyBjYWxsZWQgd2hlbiBgYXN5bmNfZnJlZV96c3BhZ2VgIHJlbGVhc2VzIHRoZSBwYWdlcy4KClRoZW4gSSBjb25zaWRlcmVkIGBvYmpfbWFsbG9jYCwgYmVjYXVzZSB0aGUgcGF0Y2ggbW9kaWZpZXMgYG9ial9tYWxsb2NgIHRvIGVuY29kZSB0aGUgY2xhc3NfaWR4LiBXaGlsZSBgenNfbWFsbG9jYCBpcyB0aGUgZXhwb3J0ZWQgZW50cnkgcG9pbnQsIGl0IGNhbGxzIGBvYmpfbWFsbG9jYC4gQWZ0ZXIgdGhpbmtpbmcgdGhyb3VnaCB0aGlzLCBJIGRlY2lkZWQgdG8gaW5jbHVkZSBgb2JqX21hbGxvY2AsIHNpbmNlIHRoZSBvcHRpbWl6YXRpb24gYXBwbGllcyB0byBpdC4gSSBhbHNvIGNoZWNrZWQgaWYgaXQgd2FzIHN0YXRpYywgYW5kIGl0IGlzLiBBbmQgSSB3aWxsIGFkZCBpdCB0byB0aGUgZm9jdXMgc3ltYm9scy4KClNvLCB0aGUgZGVmaW5pdGl2ZSBsaXN0IG9mIGZvY3VzIHN5bWJvbHM6IGB6c19mcmVlYCwgYG9ial9tYWxsb2NgLCBgenNfcGFnZV9taWdyYXRlYCwgYGFzeW5jX2ZyZWVfenNwYWdlYCwgYW5kIGBfX2ZyZWVfenNwYWdlYC4KClNvLCB0aGUgY29uZmlncyB3aWxsIGJlOiBgWlNNQUxMT0NgLCBgWlJBTWAsIGBaU1dBUGAuCgpUaGUgb3ZlcmFsbCByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGNoYW5nZXMgZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHNwZWNpZmljYWxseSB0aGUgbG9ja2xlc3Mgc3luY2hyb25pemF0aW9uIGFuZCBiaXR3aXNlIG9wZXJhdGlvbnMgd2l0aGluIGB6c19mcmVlKClgIGZvciB6c21hbGxvYy4gIEZ1enppbmcgdGhlc2UgcGF0aHMgd2lsbCBiZSBlc3NlbnRpYWwgdG8gZW5zdXJlIGNvcnJlY3RuZXNzLgoKSSBjaGVja2VkIHRoZSBwYXRjaCBhZ2FpbiBmb3IgYW55IG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGJ1dCBmb3VuZCBub3RoaW5nIGVsc2Ugc2lnbmlmaWNhbnQgdG8gYWRkLgoKTm93IEkmIzM5O20gZ29pbmcgdG8gcnVuIHRoZSBgc2V0LXJlc3VsdHNgIGNvbW1hbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU01BTExPQyYjMzQ7LAogICAgJiMzNDtaUkFNJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enNfZnJlZSYjMzQ7LAogICAgJiMzNDtvYmpfbWFsbG9jJiMzNDssCiAgICAmIzM0O3pzX3BhZ2VfbWlncmF0ZSYjMzQ7LAogICAgJiMzNDthc3luY19mcmVlX3pzcGFnZSYjMzQ7LAogICAgJiMzNDtfX2ZyZWVfenNwYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBvcHRpbWl6YXRpb24gZm9yIHpzX2ZyZWUoKSBpbiB6c21hbGxvYyBieSBlbmNvZGluZyB0aGUgY2xhc3NfaWR4IGludG8gdGhlIG9iamVjdCBoYW5kbGUuIFRoaXMgYXZvaWRzIHRha2luZyBwb29sLVx1MDAzZWxvY2sgZHVyaW5nIGZyZWUgb3BlcmF0aW9ucy4gSXQgbW9kaWZpZXMgdGhlIGJpdCBsYXlvdXQgb2YgdGhlIG9iamVjdCBoYW5kbGUgYW5kIHVwZGF0ZXMgdGhlIGFsbG9jYXRpb24sIGZyZWVpbmcsIGFuZCBwYWdlIG1pZ3JhdGlvbiBwYXRocy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbG9ja2xlc3Mgc3luY2hyb25pemF0aW9uIGFuZCBiaXR3aXNlIG9wZXJhdGlvbnMgYXJlIGNvcnJlY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTTUFMTE9DJiMzNDssCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c19mcmVlJiMzNDssCiAgICAmIzM0O29ial9tYWxsb2MmIzM0OywKICAgICYjMzQ7enNfcGFnZV9taWdyYXRlJiMzNDssCiAgICAmIzM0O2FzeW5jX2ZyZWVfenNwYWdlJiMzNDssCiAgICAmIzM0O19fZnJlZV96c3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIG9wdGltaXphdGlvbiBmb3IgenNfZnJlZSgpIGluIHpzbWFsbG9jIGJ5IGVuY29kaW5nIHRoZSBjbGFzc19pZHggaW50byB0aGUgb2JqZWN0IGhhbmRsZS4gVGhpcyBhdm9pZHMgdGFraW5nIHBvb2wtXHUwMDNlbG9jayBkdXJpbmcgZnJlZSBvcGVyYXRpb25zLiBJdCBtb2RpZmllcyB0aGUgYml0IGxheW91dCBvZiB0aGUgb2JqZWN0IGhhbmRsZSBhbmQgdXBkYXRlcyB0aGUgYWxsb2NhdGlvbiwgZnJlZWluZywgYW5kIHBhZ2UgbWlncmF0aW9uIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24gYW5kIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcmUgY29ycmVjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDAyOjE1OjMxLjc5MDg4NjkyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MjI4Mzg0NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpTTUFMTE9DXCIsXG4gICAgXCJaUkFNXCIsXG4gICAgXCJaU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzX2ZyZWVcIixcbiAgICBcIm9ial9tYWxsb2NcIixcbiAgICBcInpzX3BhZ2VfbWlncmF0ZVwiLFxuICAgIFwiYXN5bmNfZnJlZV96c3BhZ2VcIixcbiAgICBcIl9fZnJlZV96c3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3Mgb3B0aW1pemF0aW9uIGZvciB6c19mcmVlKCkgaW4genNtYWxsb2MgYnkgZW5jb2RpbmcgdGhlIGNsYXNzX2lkeCBpbnRvIHRoZSBvYmplY3QgaGFuZGxlLiBUaGlzIGF2b2lkcyB0YWtpbmcgcG9vbC1cXHUwMDNlbG9jayBkdXJpbmcgZnJlZSBvcGVyYXRpb25zLiBJdCBtb2RpZmllcyB0aGUgYml0IGxheW91dCBvZiB0aGUgb2JqZWN0IGhhbmRsZSBhbmQgdXBkYXRlcyB0aGUgYWxsb2NhdGlvbiwgZnJlZWluZywgYW5kIHBhZ2UgbWlncmF0aW9uIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24gYW5kIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcmUgY29ycmVjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDI6MTU6MzEuNzkwODkyNjE2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjU5OTMwNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkNjc1ODJhODM2ZDUwNGVhYzk2N2Y4Njc3OTU3YzcxZmNmMDkyNzE2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVuIDI2IDAyOjE1OjMwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3pzbWFsbG9jLmMgYi9tbS96c21hbGxvYy5jXFxuaW5kZXggNjMxMjhkZGI3OTU5OGYuLmJmNzRlNjk1ZDk3N2QzIDEwMDY0NFxcbi0tLSBhL21tL3pzbWFsbG9jLmNcXG4rKysgYi9tbS96c21hbGxvYy5jXFxuQEAgLTIxLDYgKzIxLDEwIEBAXFxuICAqXFx0cG9vbC1cXHUwMDNlbG9ja1xcbiAgKlxcdGNsYXNzLVxcdTAwM2Vsb2NrXFxuICAqXFx0enNwYWdlLVxcdTAwM2Vsb2NrXFxuKyAqXFxuKyAqIFdoZW4gWlNfT0JKX0NMQVNTX0JJVFMgXFx1MDAzZSAwLCB6c19mcmVlKCkgc2tpcHMgcG9vbC1cXHUwMDNlbG9jazsgaXQgcGlja3NcXG4rICogdGhlIHNpemVfY2xhc3MgZnJvbSBvYmoncyBlbmNvZGVkIGNsYXNzX2lkeCBhbmQgc2VyaWFsaXplcyBhZ2FpbnN0XFxuKyAqIHBhZ2UgbWlncmF0aW9uIHZpYSBjbGFzcy1cXHUwMDNlbG9jay5cXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuQEAgLTY3LDggKzcxLDggQEBcXG4gI2RlZmluZSBNQVhfUE9TU0lCTEVfUEhZU01FTV9CSVRTIE1BWF9QSFlTTUVNX0JJVFNcXG4gI2Vsc2VcXG4gLypcXG4tICogSWYgdGhpcyBkZWZpbml0aW9uIG9mIE1BWF9QSFlTTUVNX0JJVFMgaXMgdXNlZCwgT0JKX0lOREVYX0JJVFMgd2lsbCBqdXN0XFxuLSAqIGJlIFBBR0VfU0hJRlRcXG4rICogSWYgdGhpcyBkZWZpbml0aW9uIG9mIE1BWF9QSFlTTUVNX0JJVFMgaXMgdXNlZCwgWlNfT0JKX1BGTl9TSElGVCB3aWxsXFxuKyAqIGp1c3QgYmUgUEFHRV9TSElGVFxcbiAgKi9cXG4gI2RlZmluZSBNQVhfUE9TU0lCTEVfUEhZU01FTV9CSVRTIEJJVFNfUEVSX0xPTkdcXG4gI2VuZGlmXFxuQEAgLTg4LDggKzkyLDIzIEBAXFxuICNkZWZpbmUgT0JKX1RBR19CSVRTXFx0MVxcbiAjZGVmaW5lIE9CSl9UQUdfTUFTS1xcdE9CSl9BTExPQ0FURURfVEFHXFxuIFxcbi0jZGVmaW5lIE9CSl9JTkRFWF9CSVRTXFx0KEJJVFNfUEVSX0xPTkcgLSBfUEZOX0JJVFMpXFxuLSNkZWZpbmUgT0JKX0lOREVYX01BU0tcXHQoKF9BQygxLCBVTCkgXFx1MDAzY1xcdTAwM2MgT0JKX0lOREVYX0JJVFMpIC0gMSlcXG4rLypcXG4rICogb2JqIGlzIGVuY29kZWQgYXMgW1BGTiB8IGNsYXNzX2lkeCB8IG9ial9pZHhdIHdpdGhpbiBhbiB1bnNpZ25lZCBsb25nOlxcbisgKlxcbisgKiAgIHxcXHUwMDNjLS0gX1BGTl9CSVRTIC0tXFx1MDAzZXxcXHUwMDNjLS0gWlNfT0JKX0NMQVNTX0JJVFMgLS1cXHUwMDNlfFxcdTAwM2MtLSBaU19PQkpfSURYX0JJVFMgLS1cXHUwMDNlfFxcbisgKiAgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xcbisgKiAgIHwgICAgICAgUEZOICAgICAgIHwgICAgICAgIGNsYXNzX2lkeCAgICAgICAgfCAgICAgICAgb2JqX2lkeCAgICAgICAgfFxcbisgKiAgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xcbisgKiAgTVNCICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMU0JcXG4rICogICAgICAgICAgICAgICAgICAgICB8XFxuKyAqICAgICAgICAgICAgICAgICAgICAgKy0tIFpTX09CSl9QRk5fU0hJRlRcXG4rICpcXG4rICogRW5jb2RpbmcgY2xhc3NfaWR4IGludG8gb2JqIGxldHMgenNfZnJlZSgpIGxvY2F0ZSB0aGUgc2l6ZV9jbGFzc1xcbisgKiB3aXRob3V0IGhvbGRpbmcgcG9vbC1cXHUwMDNlbG9jazsgY2xhc3NfaWR4IGlzIGludmFyaWFudCBhY3Jvc3MgcGFnZVxcbisgKiBtaWdyYXRpb24gKG9ubHkgUEZOIGNoYW5nZXMpLCBzbyBhIGxvY2tsZXNzIHJlYWQgb2YgdGhlIG9iaiB2YWx1ZVxcbisgKiBhbHdheXMgeWllbGRzIGEgdmFsaWQgY2xhc3NfaWR4LlxcbisgKi9cXG4rI2RlZmluZSBaU19PQkpfUEZOX1NISUZUXFx0KEJJVFNfUEVSX0xPTkcgLSBfUEZOX0JJVFMpXFxuIFxcbiAjZGVmaW5lIEhVR0VfQklUU1xcdDFcXG4gI2RlZmluZSBGVUxMTkVTU19CSVRTXFx0NFxcbkBAIC05OCw5ICsxMTcsNjEgQEBcXG4gXFxuICNkZWZpbmUgWlNfTUFYX1BBR0VTX1BFUl9aU1BBR0VcXHQoX0FDKENPTkZJR19aU01BTExPQ19DSEFJTl9TSVpFLCBVTCkpXFxuIFxcbisvKlxcbisgKiBCaXRzIHRvIGluZGV4IGEgcGFnZSB3aXRoaW4gYSB6c3BhZ2UgPSBjZWlsKGxvZzIoWlNfTUFYX1BBR0VTX1BFUl9aU1BBR0UpKS5cXG4rICogQ29tcHV0ZWQgYXQgcHJlcHJvY2Vzc29yIHRpbWUsIGZvciB1c2UgaW4gI2lmIGJlbG93LiAgS2NvbmZpZ1xcbisgKiByZXN0cmljdHMgWlNNQUxMT0NfQ0hBSU5fU0laRSB0byBbNCwgMTZdLlxcbisgKi9cXG4rI2lmIFpTX01BWF9QQUdFU19QRVJfWlNQQUdFIFxcdTAwM2M9IDRcXG4rI2RlZmluZSBaU19QQUdFU19QRVJfWlNQQUdFX0JJVFNcXHQyXFxuKyNlbGlmIFpTX01BWF9QQUdFU19QRVJfWlNQQUdFIFxcdTAwM2M9IDhcXG4rI2RlZmluZSBaU19QQUdFU19QRVJfWlNQQUdFX0JJVFNcXHQzXFxuKyNlbGlmIFpTX01BWF9QQUdFU19QRVJfWlNQQUdFIFxcdTAwM2M9IDE2XFxuKyNkZWZpbmUgWlNfUEFHRVNfUEVSX1pTUEFHRV9CSVRTXFx0NFxcbisjZWxzZVxcbisjZXJyb3IgXFxcIlpTTUFMTE9DX0NIQUlOX1NJWkUgb3V0IG9mIGV4cGVjdGVkIHJhbmdlIFs0LDE2XVxcXCJcXG4rI2VuZGlmXFxuK1xcbisvKlxcbisgKiBCaXRzIHRvIGluZGV4IGFuIG9iamVjdCB3aXRoaW4gYSBzaW5nbGUgUEFHRV9TSVpFIGF0IHRoZSBzbWFsbGVzdFxcbisgKiBwb3NzaWJsZSBvYmplY3Qgc2l6ZTogbG9nMihQQUdFX1NJWkUgLyAzMikgPSBQQUdFX1NISUZUIC0gNS5cXG4rICogMzIgaXMgdGhlIGhhcmQgZmxvb3Igb2YgWlNfTUlOX0FMTE9DX1NJWkUuXFxuKyAqL1xcbisjZGVmaW5lIFpTX09CSlNfUEVSX1BBR0VfQklUU1xcdChQQUdFX1NISUZUIC0gNSlcXG4rXFxuKy8qXFxuKyAqIEJpdHMgdG8gaW5kZXggYW55IG9iamVjdCBpbiB0aGUgZGVuc2VzdCBwb3NzaWJsZSB6c3BhZ2UuICBCZWxvdyB0aGlzLFxcbisgKiBaU19NSU5fQUxMT0NfU0laRSBpcyBhdXRvLXJhaXNlZCBieSB0aGUgTUFYKDMyLCAuLi4pIGZvcm11bGEgLS0gc3RpbGxcXG4rICogY29ycmVjdCwgYnV0IG9iamVjdHMgYXJlIGNvYXJzZXIuXFxuKyAqL1xcbisjZGVmaW5lIFpTX09CSlNfUEVSX1pTUEFHRV9CSVRTIFxcXFxcXG4rXFx0KFpTX1BBR0VTX1BFUl9aU1BBR0VfQklUUyArIFpTX09CSlNfUEVSX1BBR0VfQklUUylcXG4rXFxuKy8qXFxuKyAqIEVuY29kZSBjbGFzc19pZHggb25seSB3aGVuIG9iaiBoYXMgc3BhcmUgYml0czsgb3RoZXJ3aXNlXFxuKyAqIFpTX09CSl9DTEFTU19CSVRTIGZvbGRzIHRvIDAgKDMyLWJpdCwgb3IgNjQtYml0IFVNTC9mYWxsYmFjaykuXFxuKyAqL1xcbisjaWYgQklUU19QRVJfTE9ORyBcXHUwMDNlPSA2NCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuK1xcdFpTX09CSl9QRk5fU0hJRlQgXFx1MDAzZT0gKENMQVNTX0JJVFMgKyAxKSArIFpTX09CSlNfUEVSX1pTUEFHRV9CSVRTXFxuKyNkZWZpbmUgWlNfT0JKX0NMQVNTX0JJVFNcXHQoQ0xBU1NfQklUUyArIDEpXFxuKyNlbHNlXFxuKyNkZWZpbmUgWlNfT0JKX0NMQVNTX0JJVFNcXHQwXFxuKyNlbmRpZlxcbisjZGVmaW5lIFpTX09CSl9DTEFTU19NQVNLXFx0KChfQUMoMSwgVUwpIFxcdTAwM2NcXHUwMDNjIFpTX09CSl9DTEFTU19CSVRTKSAtIDEpXFxuK1xcbisjZGVmaW5lIFpTX09CSl9JRFhfQklUU1xcdFxcdChaU19PQkpfUEZOX1NISUZUIC0gWlNfT0JKX0NMQVNTX0JJVFMpXFxuKyNkZWZpbmUgWlNfT0JKX0lEWF9NQVNLXFx0XFx0KChfQUMoMSwgVUwpIFxcdTAwM2NcXHUwMDNjIFpTX09CSl9JRFhfQklUUykgLSAxKVxcbitcXG4rLypcXG4rICogQmVsdC1hbmQtc3VzcGVuZGVyczogdGhlICNpZiBhYm92ZSBhbHJlYWR5IGd1YXJhbnRlZXMgdGhpcyB3aGVuXFxuKyAqIGNsYXNzX2lkeCBpcyBlbmFibGVkLiAgQ2F0Y2hlcyBmdXR1cmUgdHdlYWtzIHRoYXQgYnlwYXNzIGl0LlxcbisgKi9cXG4rc3RhdGljX2Fzc2VydChaU19PQkpfSURYX0JJVFMgXFx1MDAzZT0gWlNfUEFHRVNfUEVSX1pTUEFHRV9CSVRTLFxcbitcXHQgICAgICBcXFwienNtYWxsb2M6IFpTX01JTl9BTExPQ19TSVpFIHdvdWxkIGV4Y2VlZCBaU19NQVhfQUxMT0NfU0laRVxcXCIpO1xcbitcXG4gLyogWlNfTUlOX0FMTE9DX1NJWkUgbXVzdCBiZSBtdWx0aXBsZSBvZiBaU19BTElHTiAqL1xcbiAjZGVmaW5lIFpTX01JTl9BTExPQ19TSVpFIFxcXFxcXG4tXFx0TUFYKDMyLCAoWlNfTUFYX1BBR0VTX1BFUl9aU1BBR0UgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCBcXHUwMDNlXFx1MDAzZSBPQkpfSU5ERVhfQklUUykpXFxuK1xcdE1BWCgzMiwgKFpTX01BWF9QQUdFU19QRVJfWlNQQUdFIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQgXFx1MDAzZVxcdTAwM2UgWlNfT0JKX0lEWF9CSVRTKSlcXG4gLyogZWFjaCBjaHVuayBpbmNsdWRlcyBleHRyYSBzcGFjZSB0byBrZWVwIGhhbmRsZSAqL1xcbiAjZGVmaW5lIFpTX01BWF9BTExPQ19TSVpFXFx0UEFHRV9TSVpFXFxuIFxcbkBAIC0zOTYsMTAgKzQ2NywxMyBAQCBzdGF0aWMgdm9pZCBjYWNoZV9mcmVlX3pzcGFnZShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXFxuIFxcdGttZW1fY2FjaGVfZnJlZSh6c3BhZ2VfY2FjaGVwLCB6c3BhZ2UpO1xcbiB9XFxuIFxcbi0vKiBjbGFzcy1cXHUwMDNlbG9jayh3aGljaCBvd25zIHRoZSBoYW5kbGUpIHN5bmNocm9uaXplcyByYWNlcyAqL1xcbisvKlxcbisgKiBQYWlycyB3aXRoIFJFQURfT05DRSgpIGluIGhhbmRsZV90b19vYmooKTogenNfZnJlZSgpIG1heSByZWFkIHRoZVxcbisgKiBoYW5kbGUgbG9ja2xlc3NseSwgc28gcHJldmVudCBzdG9yZSB0ZWFyaW5nIGhlcmUuXFxuKyAqL1xcbiBzdGF0aWMgdm9pZCByZWNvcmRfb2JqKHVuc2lnbmVkIGxvbmcgaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9iailcXG4ge1xcbi1cXHQqKHVuc2lnbmVkIGxvbmcgKiloYW5kbGUgPSBvYmo7XFxuK1xcdFdSSVRFX09OQ0UoKih1bnNpZ25lZCBsb25nICopaGFuZGxlLCBvYmopO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgX19tYXliZV91bnVzZWQgaXNfZmlyc3RfenBkZXNjKHN0cnVjdCB6cGRlc2MgKnpwZGVzYylcXG5AQCAtNzIxLDMzICs3OTUsNDIgQEAgc3RhdGljIHN0cnVjdCB6cGRlc2MgKmdldF9uZXh0X3pwZGVzYyhzdHJ1Y3QgenBkZXNjICp6cGRlc2MpXFxuIHN0YXRpYyB2b2lkIG9ial90b19sb2NhdGlvbih1bnNpZ25lZCBsb25nIG9iaiwgc3RydWN0IHpwZGVzYyAqKnpwZGVzYyxcXG4gXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50ICpvYmpfaWR4KVxcbiB7XFxuLVxcdCp6cGRlc2MgPSBwZm5fenBkZXNjKG9iaiBcXHUwMDNlXFx1MDAzZSBPQkpfSU5ERVhfQklUUyk7XFxuLVxcdCpvYmpfaWR4ID0gKG9iaiBcXHUwMDI2IE9CSl9JTkRFWF9NQVNLKTtcXG4rXFx0KnpwZGVzYyA9IHBmbl96cGRlc2Mob2JqIFxcdTAwM2VcXHUwMDNlIFpTX09CSl9QRk5fU0hJRlQpO1xcbitcXHQqb2JqX2lkeCA9IChvYmogXFx1MDAyNiBaU19PQkpfSURYX01BU0spO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBvYmpfdG9fenBkZXNjKHVuc2lnbmVkIGxvbmcgb2JqLCBzdHJ1Y3QgenBkZXNjICoqenBkZXNjKVxcbiB7XFxuLVxcdCp6cGRlc2MgPSBwZm5fenBkZXNjKG9iaiBcXHUwMDNlXFx1MDAzZSBPQkpfSU5ERVhfQklUUyk7XFxuK1xcdCp6cGRlc2MgPSBwZm5fenBkZXNjKG9iaiBcXHUwMDNlXFx1MDAzZSBaU19PQkpfUEZOX1NISUZUKTtcXG4rfVxcbitcXG4rLyogRm9sZHMgdG8gMCB3aGVuIFpTX09CSl9DTEFTU19CSVRTID09IDA7IG5vIGlmZGVmIG5lZWRlZCBhdCBjYWxsZXJzLiAqL1xcbitzdGF0aWMgdW5zaWduZWQgaW50IG9ial90b19jbGFzc19pZHgodW5zaWduZWQgbG9uZyBvYmopXFxuK3tcXG4rXFx0cmV0dXJuIChvYmogXFx1MDAzZVxcdTAwM2UgWlNfT0JKX0lEWF9CSVRTKSBcXHUwMDI2IFpTX09CSl9DTEFTU19NQVNLO1xcbiB9XFxuIFxcbiAvKipcXG4tICogbG9jYXRpb25fdG9fb2JqIC0gZ2V0IG9iaiB2YWx1ZSBlbmNvZGVkIGZyb20gKFxcdTAwM2N6cGRlc2NcXHUwMDNlLCBcXHUwMDNjb2JqX2lkeFxcdTAwM2UpXFxuKyAqIGxvY2F0aW9uX3RvX29iaiAtIGVuY29kZSAoXFx1MDAzY3pwZGVzY1xcdTAwM2UsIFxcdTAwM2NvYmpfaWR4XFx1MDAzZSwgXFx1MDAzY2NsYXNzX2lkeFxcdTAwM2UpIGludG8gb2JqIHZhbHVlXFxuICAqIEB6cGRlc2M6IHpwZGVzYyBvYmplY3QgcmVzaWRlcyBpbiB6c3BhZ2VcXG4gICogQG9ial9pZHg6IG9iamVjdCBpbmRleFxcbisgKiBAY2xhc3NfaWR4OiBzaXplIGNsYXNzIGluZGV4OyBpZ25vcmVkIHdoZW4gWlNfT0JKX0NMQVNTX0JJVFMgPT0gMFxcbiAgKi9cXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9jYXRpb25fdG9fb2JqKHN0cnVjdCB6cGRlc2MgKnpwZGVzYywgdW5zaWduZWQgaW50IG9ial9pZHgpXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvY2F0aW9uX3RvX29iaihzdHJ1Y3QgenBkZXNjICp6cGRlc2MsIHVuc2lnbmVkIGludCBvYmpfaWR4LFxcbitcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBjbGFzc19pZHgpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBvYmo7XFxuIFxcbi1cXHRvYmogPSB6cGRlc2NfcGZuKHpwZGVzYykgXFx1MDAzY1xcdTAwM2MgT0JKX0lOREVYX0JJVFM7XFxuLVxcdG9iaiB8PSBvYmpfaWR4IFxcdTAwMjYgT0JKX0lOREVYX01BU0s7XFxuK1xcdG9iaiAgPSB6cGRlc2NfcGZuKHpwZGVzYykgXFx1MDAzY1xcdTAwM2MgWlNfT0JKX1BGTl9TSElGVDtcXG4rXFx0b2JqIHw9ICh1bnNpZ25lZCBsb25nKShjbGFzc19pZHggXFx1MDAyNiBaU19PQkpfQ0xBU1NfTUFTSykgXFx1MDAzY1xcdTAwM2MgWlNfT0JKX0lEWF9CSVRTO1xcbitcXHRvYmogfD0gb2JqX2lkeCBcXHUwMDI2IFpTX09CSl9JRFhfTUFTSztcXG4gXFxuIFxcdHJldHVybiBvYmo7XFxuIH1cXG4gXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhhbmRsZV90b19vYmoodW5zaWduZWQgbG9uZyBoYW5kbGUpXFxuIHtcXG4tXFx0cmV0dXJuICoodW5zaWduZWQgbG9uZyAqKWhhbmRsZTtcXG4rXFx0cmV0dXJuIFJFQURfT05DRSgqKHVuc2lnbmVkIGxvbmcgKiloYW5kbGUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2FsbG9jYXRlZChzdHJ1Y3QgenBkZXNjICp6cGRlc2MsIHZvaWQgKm9iaixcXG5AQCAtODAxLDEzICs4ODQsMjYgQEAgc3RhdGljIGludCB0cnlsb2NrX3pzcGFnZShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBfX2ZyZWVfenNwYWdlKHN0cnVjdCB6c19wb29sICpwb29sLCBzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3MsXFxuLVxcdFxcdFxcdFxcdHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcXG4rLypcXG4rICogVGhyZWUgZnJlZSBoZWxwZXJzLCBrZXB0IGFwYXJ0IGhlcmU6XFxuKyAqXFxuKyAqIF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoKTogYmFyZSBjb3JlOyB3YWxrcyB6cGRlc2NzIGFuZCByZXR1cm5zIHBhZ2VzXFxuKyAqICAgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvci4gIENhbGxlciBvd25zIGFsbCB6cGRlc2MgbG9ja3MgYW5kIGhhc1xcbisgKiAgIHJlbW92ZWQgdGhlIHpzcGFnZSBmcm9tIGl0cyBjbGFzcyBsaXN0LiAgVXNlZCBieSB6c19mcmVlKCkgb3V0c2lkZVxcbisgKiAgIGNsYXNzLVxcdTAwM2Vsb2NrIHNvIHRoZSBidWRkeS1zaWRlIHdvcmsgZG9lcyBub3Qgc3RhbGwgdGhlIGNsYXNzLlxcbisgKlxcbisgKiBfX2ZyZWVfenNwYWdlKCk6IF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoKSArIHBlci1jbGFzcyBhY2NvdW50aW5nLFxcbisgKiAgIHVuZGVyIGNsYXNzLVxcdTAwM2Vsb2NrLiAgVXNlZCBieSBhc3luY19mcmVlX3pzcGFnZSgpLCB0aGUgd29ya2VyIGZvclxcbisgKiAgIHpzcGFnZXMgd2hvc2UgdHJ5bG9ja196c3BhZ2UoKSBmYWlsZWQuXFxuKyAqXFxuKyAqIGZyZWVfenNwYWdlKCk6IGZ1bGwgd3JhcHBlciAtIHRyeWxvY2sgenBkZXNjcywgcmVtb3ZlIGZyb20gY2xhc3NcXG4rICogICBsaXN0LCBjYWxsIF9fZnJlZV96c3BhZ2UoKTsga2lja3MgZGVmZXJyZWQgZnJlZSBvbiBjb250ZW50aW9uLlxcbisgKiAgIFVzZWQgYnkgY29tcGFjdGlvbi5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2ZyZWVfenNwYWdlX2xvY2tsZXNzKHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgenBkZXNjICp6cGRlc2MsICpuZXh0O1xcbiBcXG4tXFx0YXNzZXJ0X3NwaW5fbG9ja2VkKFxcdTAwMjZjbGFzcy1cXHUwMDNlbG9jayk7XFxuLVxcbiBcXHRWTV9CVUdfT04oZ2V0X3pzcGFnZV9pbnVzZSh6c3BhZ2UpKTtcXG4gXFx0Vk1fQlVHX09OKHpzcGFnZS1cXHUwMDNlZnVsbG5lc3MgIT0gWlNfSU5VU0VfUkFUSU9fMCk7XFxuIFxcbkBAIC04MjMsNyArOTE5LDEzIEBAIHN0YXRpYyB2b2lkIF9fZnJlZV96c3BhZ2Uoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcyxcXG4gXFx0fSB3aGlsZSAoenBkZXNjICE9IE5VTEwpO1xcbiBcXG4gXFx0Y2FjaGVfZnJlZV96c3BhZ2UoenNwYWdlKTtcXG4rfVxcbiBcXG4rc3RhdGljIHZvaWQgX19mcmVlX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLFxcbitcXHRcXHRcXHQgIHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcXG4re1xcbitcXHRhc3NlcnRfc3Bpbl9sb2NrZWQoXFx1MDAyNmNsYXNzLVxcdTAwM2Vsb2NrKTtcXG4rXFx0X19mcmVlX3pzcGFnZV9sb2NrbGVzcyh6c3BhZ2UpO1xcbiBcXHRjbGFzc19zdGF0X3N1YihjbGFzcywgWlNfT0JKU19BTExPQ0FURUQsIGNsYXNzLVxcdTAwM2VvYmpzX3Blcl96c3BhZ2UpO1xcbiBcXHRhdG9taWNfbG9uZ19zdWIoY2xhc3MtXFx1MDAzZXBhZ2VzX3Blcl96c3BhZ2UsIFxcdTAwMjZwb29sLVxcdTAwM2VwYWdlc19hbGxvY2F0ZWQpO1xcbiB9XFxuQEAgLTEyNzYsNyArMTM3OCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIG9ial9tYWxsb2Moc3RydWN0IHpzX3Bvb2wgKnBvb2wsXFxuIFxcdGt1bm1hcF9sb2NhbCh2YWRkcik7XFxuIFxcdG1vZF96c3BhZ2VfaW51c2UoenNwYWdlLCAxKTtcXG4gXFxuLVxcdG9iaiA9IGxvY2F0aW9uX3RvX29iaihtX3pwZGVzYywgb2JqKTtcXG4rXFx0b2JqID0gbG9jYXRpb25fdG9fb2JqKG1fenBkZXNjLCBvYmosIHpzcGFnZS1cXHUwMDNlY2xhc3MpO1xcbiBcXHRyZWNvcmRfb2JqKGhhbmRsZSwgb2JqKTtcXG4gXFxuIFxcdHJldHVybiBvYmo7XFxuQEAgLTEzODEsMzcgKzE0ODMsODkgQEAgc3RhdGljIHZvaWQgb2JqX2ZyZWUoaW50IGNsYXNzX3NpemUsIHVuc2lnbmVkIGxvbmcgb2JqKVxcbiBcXHRtb2RfenNwYWdlX2ludXNlKHpzcGFnZSwgLTEpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBSZXNvbHZlIEBoYW5kbGUgdG8gaXRzIHpzcGFnZSAvIHNpemVfY2xhc3MgYW5kIGFjcXVpcmUgY2xhc3MtXFx1MDAzZWxvY2suXFxuKyAqXFxuKyAqIFdoZW4gY2xhc3NfaWR4IGlzIGVuY29kZWQgaW4gb2JqIChaU19PQkpfQ0xBU1NfQklUUyBcXHUwMDNlIDApLCBpdCBpc1xcbisgKiBpbnZhcmlhbnQgdW5kZXIgcGFnZSBtaWdyYXRpb24sIHNvIHRoZSBoYW5kbGUgY2FuIGJlIHJlYWQgbG9ja2xlc3NseVxcbisgKiB0byBwaWNrIHRoZSBzaXplX2NsYXNzLiAgT25jZSBjbGFzcy1cXHUwMDNlbG9jayBpcyBoZWxkIG1pZ3JhdGlvbiBpc1xcbisgKiBibG9ja2VkIGFuZCB0aGUgaGFuZGxlIGlzIHJlLXJlYWQgdG8gb2J0YWluIGEgc3RhYmxlIFBGTi5cXG4rICpcXG4rICogT3RoZXJ3aXNlICgzMi1iaXQsIG9yIDY0LWJpdCBmYWxsYmFjayBwYXRocyBsaWtlIFVNTCB3aGVyZSB0aGVcXG4rICogZW5jb2RpbmcgaXMgZGlzYWJsZWQpLCBmYWxsIGJhY2sgdG8gcG9vbC1cXHUwMDNlbG9jayBmb3IgdGhlIGxvb2t1cC5cXG4rICovXFxuKyNpZiBaU19PQkpfQ0xBU1NfQklUUyBcXHUwMDNlIDBcXG4rc3RhdGljIGlubGluZSB2b2lkIG9ial9jbGFzc19nZXRfYW5kX2xvY2soc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxcbitcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyAqb2JqcCwgc3RydWN0IHpzcGFnZSAqKnpzcGFnZXAsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2l6ZV9jbGFzcyAqKmNsYXNzcClcXG4rXFx0X19hY3F1aXJlcyhcXHUwMDI2KCpjbGFzc3ApLVxcdTAwM2Vsb2NrKVxcbit7XFxuK1xcdHN0cnVjdCB6cGRlc2MgKmZfenBkZXNjO1xcbitcXHR1bnNpZ25lZCBsb25nIG9iajtcXG4rXFxuK1xcdG9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTtcXG4rXFx0KmNsYXNzcCA9IHBvb2wtXFx1MDAzZXNpemVfY2xhc3Nbb2JqX3RvX2NsYXNzX2lkeChvYmopXTtcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjYoKmNsYXNzcCktXFx1MDAzZWxvY2spO1xcbitcXHQvKiBSZS1yZWFkIHVuZGVyIGNsYXNzLVxcdTAwM2Vsb2NrOiBQRk4gaXMgbm93IHN0YWJsZSB2cyBtaWdyYXRpb24uICovXFxuK1xcdG9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTtcXG4rXFx0b2JqX3RvX3pwZGVzYyhvYmosIFxcdTAwMjZmX3pwZGVzYyk7XFxuK1xcdCp6c3BhZ2VwID0gZ2V0X3pzcGFnZShmX3pwZGVzYyk7XFxuK1xcdCpvYmpwID0gb2JqO1xcbit9XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSxcXG4rXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgKm9ianAsIHN0cnVjdCB6c3BhZ2UgKip6c3BhZ2VwLFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNpemVfY2xhc3MgKipjbGFzc3ApXFxuK1xcdF9fYWNxdWlyZXMoXFx1MDAyNigqY2xhc3NwKS1cXHUwMDNlbG9jaylcXG4re1xcbitcXHRzdHJ1Y3QgenBkZXNjICpmX3pwZGVzYztcXG4rXFx0dW5zaWduZWQgbG9uZyBvYmo7XFxuK1xcbitcXHRyZWFkX2xvY2soXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2spO1xcbitcXHRvYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7XFxuK1xcdG9ial90b196cGRlc2Mob2JqLCBcXHUwMDI2Zl96cGRlc2MpO1xcbitcXHQqenNwYWdlcCA9IGdldF96c3BhZ2UoZl96cGRlc2MpO1xcbitcXHQqY2xhc3NwID0genNwYWdlX2NsYXNzKHBvb2wsICp6c3BhZ2VwKTtcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjYoKmNsYXNzcCktXFx1MDAzZWxvY2spO1xcbitcXHRyZWFkX3VubG9jayhcXHUwMDI2cG9vbC1cXHUwMDNlbG9jayk7XFxuK1xcdCpvYmpwID0gb2JqO1xcbit9XFxuKyNlbmRpZlxcbitcXG4gdm9pZCB6c19mcmVlKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgenNwYWdlICp6c3BhZ2U7XFxuLVxcdHN0cnVjdCB6cGRlc2MgKmZfenBkZXNjO1xcbiBcXHR1bnNpZ25lZCBsb25nIG9iajtcXG4gXFx0c3RydWN0IHNpemVfY2xhc3MgKmNsYXNzO1xcbiBcXHRpbnQgZnVsbG5lc3M7XFxuK1xcdHN0cnVjdCB6c3BhZ2UgKnpzcGFnZV90b19mcmVlID0gTlVMTDtcXG4gXFxuIFxcdGlmIChJU19FUlJfT1JfTlVMTCgodm9pZCAqKWhhbmRsZSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIFRoZSBwb29sLVxcdTAwM2Vsb2NrIHByb3RlY3RzIHRoZSByYWNlIHdpdGggenBhZ2UncyBtaWdyYXRpb25cXG4tXFx0ICogc28gaXQncyBzYWZlIHRvIGdldCB0aGUgcGFnZSBmcm9tIGhhbmRsZS5cXG4tXFx0ICovXFxuLVxcdHJlYWRfbG9jayhcXHUwMDI2cG9vbC1cXHUwMDNlbG9jayk7XFxuLVxcdG9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTtcXG4tXFx0b2JqX3RvX3pwZGVzYyhvYmosIFxcdTAwMjZmX3pwZGVzYyk7XFxuLVxcdHpzcGFnZSA9IGdldF96c3BhZ2UoZl96cGRlc2MpO1xcbi1cXHRjbGFzcyA9IHpzcGFnZV9jbGFzcyhwb29sLCB6c3BhZ2UpO1xcbi1cXHRzcGluX2xvY2soXFx1MDAyNmNsYXNzLVxcdTAwM2Vsb2NrKTtcXG4tXFx0cmVhZF91bmxvY2soXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2spO1xcbitcXHRvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrKHBvb2wsIGhhbmRsZSwgXFx1MDAyNm9iaiwgXFx1MDAyNnpzcGFnZSwgXFx1MDAyNmNsYXNzKTtcXG4gXFxuIFxcdGNsYXNzX3N0YXRfc3ViKGNsYXNzLCBaU19PQkpTX0lOVVNFLCAxKTtcXG4gXFx0b2JqX2ZyZWUoY2xhc3MtXFx1MDAzZXNpemUsIG9iaik7XFxuIFxcbiBcXHRmdWxsbmVzcyA9IGZpeF9mdWxsbmVzc19ncm91cChjbGFzcywgenNwYWdlKTtcXG4tXFx0aWYgKGZ1bGxuZXNzID09IFpTX0lOVVNFX1JBVElPXzApXFxuLVxcdFxcdGZyZWVfenNwYWdlKHBvb2wsIGNsYXNzLCB6c3BhZ2UpO1xcbitcXHRpZiAoZnVsbG5lc3MgPT0gWlNfSU5VU0VfUkFUSU9fMCkge1xcbitcXHRcXHRpZiAodHJ5bG9ja196c3BhZ2UoenNwYWdlKSkge1xcbitcXHRcXHRcXHRyZW1vdmVfenNwYWdlKGNsYXNzLCB6c3BhZ2UpO1xcbitcXHRcXHRcXHRjbGFzc19zdGF0X3N1YihjbGFzcywgWlNfT0JKU19BTExPQ0FURUQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBjbGFzcy1cXHUwMDNlb2Jqc19wZXJfenNwYWdlKTtcXG4rXFx0XFx0XFx0enNwYWdlX3RvX2ZyZWUgPSB6c3BhZ2U7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGtpY2tfZGVmZXJyZWRfZnJlZShwb29sKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2Y2xhc3MtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0aWYgKHpzcGFnZV90b19mcmVlKSB7XFxuK1xcdFxcdF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoenNwYWdlX3RvX2ZyZWUpO1xcbitcXHRcXHRhdG9taWNfbG9uZ19zdWIoY2xhc3MtXFx1MDAzZXBhZ2VzX3Blcl96c3BhZ2UsIFxcdTAwMjZwb29sLVxcdTAwM2VwYWdlc19hbGxvY2F0ZWQpO1xcbitcXHR9XFxuIFxcdGNhY2hlX2ZyZWVfaGFuZGxlKGhhbmRsZSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoenNfZnJlZSk7XFxuQEAgLTE3NjIsNyArMTkxNiw4IEBAIHN0YXRpYyBpbnQgenNfcGFnZV9taWdyYXRlKHN0cnVjdCBwYWdlICpuZXdwYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFxuIFxcdFxcdFxcdG9sZF9vYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7XFxuIFxcdFxcdFxcdG9ial90b19sb2NhdGlvbihvbGRfb2JqLCBcXHUwMDI2ZHVtbXksIFxcdTAwMjZvYmpfaWR4KTtcXG4tXFx0XFx0XFx0bmV3X29iaiA9ICh1bnNpZ25lZCBsb25nKWxvY2F0aW9uX3RvX29iaihuZXd6cGRlc2MsIG9ial9pZHgpO1xcbitcXHRcXHRcXHRuZXdfb2JqID0gbG9jYXRpb25fdG9fb2JqKG5ld3pwZGVzYywgb2JqX2lkeCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBvYmpfdG9fY2xhc3NfaWR4KG9sZF9vYmopKTtcXG4gXFx0XFx0XFx0cmVjb3JkX29iaihoYW5kbGUsIG5ld19vYmopO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDI6MTU6MzIuMTU3NjM4MDI4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTg2MTYyMzcyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaU01BTExPQ1wiLFxuICAgIFwiWlJBTVwiLFxuICAgIFwiWlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c19mcmVlXCIsXG4gICAgXCJvYmpfbWFsbG9jXCIsXG4gICAgXCJ6c19wYWdlX21pZ3JhdGVcIixcbiAgICBcImFzeW5jX2ZyZWVfenNwYWdlXCIsXG4gICAgXCJfX2ZyZWVfenNwYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIG9wdGltaXphdGlvbiBmb3IgenNfZnJlZSgpIGluIHpzbWFsbG9jIGJ5IGVuY29kaW5nIHRoZSBjbGFzc19pZHggaW50byB0aGUgb2JqZWN0IGhhbmRsZS4gVGhpcyBhdm9pZHMgdGFraW5nIHBvb2wtXFx1MDAzZWxvY2sgZHVyaW5nIGZyZWUgb3BlcmF0aW9ucy4gSXQgbW9kaWZpZXMgdGhlIGJpdCBsYXlvdXQgb2YgdGhlIG9iamVjdCBoYW5kbGUgYW5kIHVwZGF0ZXMgdGhlIGFsbG9jYXRpb24sIGZyZWVpbmcsIGFuZCBwYWdlIG1pZ3JhdGlvbiBwYXRocy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbG9ja2xlc3Mgc3luY2hyb25pemF0aW9uIGFuZCBiaXR3aXNlIG9wZXJhdGlvbnMgYXJlIGNvcnJlY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDY3NTgyYTgzNmQ1MDRlYWM5NjdmODY3Nzk1N2M3MWZjZjA5MjcxNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDAyOjE1OjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0venNtYWxsb2MuYyBiL21tL3pzbWFsbG9jLmNcbmluZGV4IDYzMTI4ZGRiNzk1OThmLi5iZjc0ZTY5NWQ5NzdkMyAxMDA2NDRcbi0tLSBhL21tL3pzbWFsbG9jLmNcbisrKyBiL21tL3pzbWFsbG9jLmNcbkBAIC0yMSw2ICsyMSwxMCBAQFxuICAqXHRwb29sLVx1MDAzZWxvY2tcbiAgKlx0Y2xhc3MtXHUwMDNlbG9ja1xuICAqXHR6c3BhZ2UtXHUwMDNlbG9ja1xuKyAqXG4rICogV2hlbiBaU19PQkpfQ0xBU1NfQklUUyBcdTAwM2UgMCwgenNfZnJlZSgpIHNraXBzIHBvb2wtXHUwMDNlbG9jazsgaXQgcGlja3NcbisgKiB0aGUgc2l6ZV9jbGFzcyBmcm9tIG9iaidzIGVuY29kZWQgY2xhc3NfaWR4IGFuZCBzZXJpYWxpemVzIGFnYWluc3RcbisgKiBwYWdlIG1pZ3JhdGlvbiB2aWEgY2xhc3MtXHUwMDNlbG9jay5cbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuQEAgLTY3LDggKzcxLDggQEBcbiAjZGVmaW5lIE1BWF9QT1NTSUJMRV9QSFlTTUVNX0JJVFMgTUFYX1BIWVNNRU1fQklUU1xuICNlbHNlXG4gLypcbi0gKiBJZiB0aGlzIGRlZmluaXRpb24gb2YgTUFYX1BIWVNNRU1fQklUUyBpcyB1c2VkLCBPQkpfSU5ERVhfQklUUyB3aWxsIGp1c3Rcbi0gKiBiZSBQQUdFX1NISUZUXG4rICogSWYgdGhpcyBkZWZpbml0aW9uIG9mIE1BWF9QSFlTTUVNX0JJVFMgaXMgdXNlZCwgWlNfT0JKX1BGTl9TSElGVCB3aWxsXG4rICoganVzdCBiZSBQQUdFX1NISUZUXG4gICovXG4gI2RlZmluZSBNQVhfUE9TU0lCTEVfUEhZU01FTV9CSVRTIEJJVFNfUEVSX0xPTkdcbiAjZW5kaWZcbkBAIC04OCw4ICs5MiwyMyBAQFxuICNkZWZpbmUgT0JKX1RBR19CSVRTXHQxXG4gI2RlZmluZSBPQkpfVEFHX01BU0tcdE9CSl9BTExPQ0FURURfVEFHXG4gXG4tI2RlZmluZSBPQkpfSU5ERVhfQklUU1x0KEJJVFNfUEVSX0xPTkcgLSBfUEZOX0JJVFMpXG4tI2RlZmluZSBPQkpfSU5ERVhfTUFTS1x0KChfQUMoMSwgVUwpIFx1MDAzY1x1MDAzYyBPQkpfSU5ERVhfQklUUykgLSAxKVxuKy8qXG4rICogb2JqIGlzIGVuY29kZWQgYXMgW1BGTiB8IGNsYXNzX2lkeCB8IG9ial9pZHhdIHdpdGhpbiBhbiB1bnNpZ25lZCBsb25nOlxuKyAqXG4rICogICB8XHUwMDNjLS0gX1BGTl9CSVRTIC0tXHUwMDNlfFx1MDAzYy0tIFpTX09CSl9DTEFTU19CSVRTIC0tXHUwMDNlfFx1MDAzYy0tIFpTX09CSl9JRFhfQklUUyAtLVx1MDAzZXxcbisgKiAgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuKyAqICAgfCAgICAgICBQRk4gICAgICAgfCAgICAgICAgY2xhc3NfaWR4ICAgICAgICB8ICAgICAgICBvYmpfaWR4ICAgICAgICB8XG4rICogICArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbisgKiAgTVNCICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMU0JcbisgKiAgICAgICAgICAgICAgICAgICAgIHxcbisgKiAgICAgICAgICAgICAgICAgICAgICstLSBaU19PQkpfUEZOX1NISUZUXG4rICpcbisgKiBFbmNvZGluZyBjbGFzc19pZHggaW50byBvYmogbGV0cyB6c19mcmVlKCkgbG9jYXRlIHRoZSBzaXplX2NsYXNzXG4rICogd2l0aG91dCBob2xkaW5nIHBvb2wtXHUwMDNlbG9jazsgY2xhc3NfaWR4IGlzIGludmFyaWFudCBhY3Jvc3MgcGFnZVxuKyAqIG1pZ3JhdGlvbiAob25seSBQRk4gY2hhbmdlcyksIHNvIGEgbG9ja2xlc3MgcmVhZCBvZiB0aGUgb2JqIHZhbHVlXG4rICogYWx3YXlzIHlpZWxkcyBhIHZhbGlkIGNsYXNzX2lkeC5cbisgKi9cbisjZGVmaW5lIFpTX09CSl9QRk5fU0hJRlRcdChCSVRTX1BFUl9MT05HIC0gX1BGTl9CSVRTKVxuIFxuICNkZWZpbmUgSFVHRV9CSVRTXHQxXG4gI2RlZmluZSBGVUxMTkVTU19CSVRTXHQ0XG5AQCAtOTgsOSArMTE3LDYxIEBAXG4gXG4gI2RlZmluZSBaU19NQVhfUEFHRVNfUEVSX1pTUEFHRVx0KF9BQyhDT05GSUdfWlNNQUxMT0NfQ0hBSU5fU0laRSwgVUwpKVxuIFxuKy8qXG4rICogQml0cyB0byBpbmRleCBhIHBhZ2Ugd2l0aGluIGEgenNwYWdlID0gY2VpbChsb2cyKFpTX01BWF9QQUdFU19QRVJfWlNQQUdFKSkuXG4rICogQ29tcHV0ZWQgYXQgcHJlcHJvY2Vzc29yIHRpbWUsIGZvciB1c2UgaW4gI2lmIGJlbG93LiAgS2NvbmZpZ1xuKyAqIHJlc3RyaWN0cyBaU01BTExPQ19DSEFJTl9TSVpFIHRvIFs0LCAxNl0uXG4rICovXG4rI2lmIFpTX01BWF9QQUdFU19QRVJfWlNQQUdFIFx1MDAzYz0gNFxuKyNkZWZpbmUgWlNfUEFHRVNfUEVSX1pTUEFHRV9CSVRTXHQyXG4rI2VsaWYgWlNfTUFYX1BBR0VTX1BFUl9aU1BBR0UgXHUwMDNjPSA4XG4rI2RlZmluZSBaU19QQUdFU19QRVJfWlNQQUdFX0JJVFNcdDNcbisjZWxpZiBaU19NQVhfUEFHRVNfUEVSX1pTUEFHRSBcdTAwM2M9IDE2XG4rI2RlZmluZSBaU19QQUdFU19QRVJfWlNQQUdFX0JJVFNcdDRcbisjZWxzZVxuKyNlcnJvciBcIlpTTUFMTE9DX0NIQUlOX1NJWkUgb3V0IG9mIGV4cGVjdGVkIHJhbmdlIFs0LDE2XVwiXG4rI2VuZGlmXG4rXG4rLypcbisgKiBCaXRzIHRvIGluZGV4IGFuIG9iamVjdCB3aXRoaW4gYSBzaW5nbGUgUEFHRV9TSVpFIGF0IHRoZSBzbWFsbGVzdFxuKyAqIHBvc3NpYmxlIG9iamVjdCBzaXplOiBsb2cyKFBBR0VfU0laRSAvIDMyKSA9IFBBR0VfU0hJRlQgLSA1LlxuKyAqIDMyIGlzIHRoZSBoYXJkIGZsb29yIG9mIFpTX01JTl9BTExPQ19TSVpFLlxuKyAqL1xuKyNkZWZpbmUgWlNfT0JKU19QRVJfUEFHRV9CSVRTXHQoUEFHRV9TSElGVCAtIDUpXG4rXG4rLypcbisgKiBCaXRzIHRvIGluZGV4IGFueSBvYmplY3QgaW4gdGhlIGRlbnNlc3QgcG9zc2libGUgenNwYWdlLiAgQmVsb3cgdGhpcyxcbisgKiBaU19NSU5fQUxMT0NfU0laRSBpcyBhdXRvLXJhaXNlZCBieSB0aGUgTUFYKDMyLCAuLi4pIGZvcm11bGEgLS0gc3RpbGxcbisgKiBjb3JyZWN0LCBidXQgb2JqZWN0cyBhcmUgY29hcnNlci5cbisgKi9cbisjZGVmaW5lIFpTX09CSlNfUEVSX1pTUEFHRV9CSVRTIFxcXG4rXHQoWlNfUEFHRVNfUEVSX1pTUEFHRV9CSVRTICsgWlNfT0JKU19QRVJfUEFHRV9CSVRTKVxuK1xuKy8qXG4rICogRW5jb2RlIGNsYXNzX2lkeCBvbmx5IHdoZW4gb2JqIGhhcyBzcGFyZSBiaXRzOyBvdGhlcndpc2VcbisgKiBaU19PQkpfQ0xBU1NfQklUUyBmb2xkcyB0byAwICgzMi1iaXQsIG9yIDY0LWJpdCBVTUwvZmFsbGJhY2spLlxuKyAqL1xuKyNpZiBCSVRTX1BFUl9MT05HIFx1MDAzZT0gNjQgXHUwMDI2XHUwMDI2IFxcXG4rXHRaU19PQkpfUEZOX1NISUZUIFx1MDAzZT0gKENMQVNTX0JJVFMgKyAxKSArIFpTX09CSlNfUEVSX1pTUEFHRV9CSVRTXG4rI2RlZmluZSBaU19PQkpfQ0xBU1NfQklUU1x0KENMQVNTX0JJVFMgKyAxKVxuKyNlbHNlXG4rI2RlZmluZSBaU19PQkpfQ0xBU1NfQklUU1x0MFxuKyNlbmRpZlxuKyNkZWZpbmUgWlNfT0JKX0NMQVNTX01BU0tcdCgoX0FDKDEsIFVMKSBcdTAwM2NcdTAwM2MgWlNfT0JKX0NMQVNTX0JJVFMpIC0gMSlcbitcbisjZGVmaW5lIFpTX09CSl9JRFhfQklUU1x0XHQoWlNfT0JKX1BGTl9TSElGVCAtIFpTX09CSl9DTEFTU19CSVRTKVxuKyNkZWZpbmUgWlNfT0JKX0lEWF9NQVNLXHRcdCgoX0FDKDEsIFVMKSBcdTAwM2NcdTAwM2MgWlNfT0JKX0lEWF9CSVRTKSAtIDEpXG4rXG4rLypcbisgKiBCZWx0LWFuZC1zdXNwZW5kZXJzOiB0aGUgI2lmIGFib3ZlIGFscmVhZHkgZ3VhcmFudGVlcyB0aGlzIHdoZW5cbisgKiBjbGFzc19pZHggaXMgZW5hYmxlZC4gIENhdGNoZXMgZnV0dXJlIHR3ZWFrcyB0aGF0IGJ5cGFzcyBpdC5cbisgKi9cbitzdGF0aWNfYXNzZXJ0KFpTX09CSl9JRFhfQklUUyBcdTAwM2U9IFpTX1BBR0VTX1BFUl9aU1BBR0VfQklUUyxcbitcdCAgICAgIFwienNtYWxsb2M6IFpTX01JTl9BTExPQ19TSVpFIHdvdWxkIGV4Y2VlZCBaU19NQVhfQUxMT0NfU0laRVwiKTtcbitcbiAvKiBaU19NSU5fQUxMT0NfU0laRSBtdXN0IGJlIG11bHRpcGxlIG9mIFpTX0FMSUdOICovXG4gI2RlZmluZSBaU19NSU5fQUxMT0NfU0laRSBcXFxuLVx0TUFYKDMyLCAoWlNfTUFYX1BBR0VTX1BFUl9aU1BBR0UgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQgXHUwMDNlXHUwMDNlIE9CSl9JTkRFWF9CSVRTKSlcbitcdE1BWCgzMiwgKFpTX01BWF9QQUdFU19QRVJfWlNQQUdFIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUIFx1MDAzZVx1MDAzZSBaU19PQkpfSURYX0JJVFMpKVxuIC8qIGVhY2ggY2h1bmsgaW5jbHVkZXMgZXh0cmEgc3BhY2UgdG8ga2VlcCBoYW5kbGUgKi9cbiAjZGVmaW5lIFpTX01BWF9BTExPQ19TSVpFXHRQQUdFX1NJWkVcbiBcbkBAIC0zOTYsMTAgKzQ2NywxMyBAQCBzdGF0aWMgdm9pZCBjYWNoZV9mcmVlX3pzcGFnZShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXG4gXHRrbWVtX2NhY2hlX2ZyZWUoenNwYWdlX2NhY2hlcCwgenNwYWdlKTtcbiB9XG4gXG4tLyogY2xhc3MtXHUwMDNlbG9jayh3aGljaCBvd25zIHRoZSBoYW5kbGUpIHN5bmNocm9uaXplcyByYWNlcyAqL1xuKy8qXG4rICogUGFpcnMgd2l0aCBSRUFEX09OQ0UoKSBpbiBoYW5kbGVfdG9fb2JqKCk6IHpzX2ZyZWUoKSBtYXkgcmVhZCB0aGVcbisgKiBoYW5kbGUgbG9ja2xlc3NseSwgc28gcHJldmVudCBzdG9yZSB0ZWFyaW5nIGhlcmUuXG4rICovXG4gc3RhdGljIHZvaWQgcmVjb3JkX29iaih1bnNpZ25lZCBsb25nIGhhbmRsZSwgdW5zaWduZWQgbG9uZyBvYmopXG4ge1xuLVx0Kih1bnNpZ25lZCBsb25nICopaGFuZGxlID0gb2JqO1xuK1x0V1JJVEVfT05DRSgqKHVuc2lnbmVkIGxvbmcgKiloYW5kbGUsIG9iaik7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBfX21heWJlX3VudXNlZCBpc19maXJzdF96cGRlc2Moc3RydWN0IHpwZGVzYyAqenBkZXNjKVxuQEAgLTcyMSwzMyArNzk1LDQyIEBAIHN0YXRpYyBzdHJ1Y3QgenBkZXNjICpnZXRfbmV4dF96cGRlc2Moc3RydWN0IHpwZGVzYyAqenBkZXNjKVxuIHN0YXRpYyB2b2lkIG9ial90b19sb2NhdGlvbih1bnNpZ25lZCBsb25nIG9iaiwgc3RydWN0IHpwZGVzYyAqKnpwZGVzYyxcbiBcdFx0XHRcdHVuc2lnbmVkIGludCAqb2JqX2lkeClcbiB7XG4tXHQqenBkZXNjID0gcGZuX3pwZGVzYyhvYmogXHUwMDNlXHUwMDNlIE9CSl9JTkRFWF9CSVRTKTtcbi1cdCpvYmpfaWR4ID0gKG9iaiBcdTAwMjYgT0JKX0lOREVYX01BU0spO1xuK1x0KnpwZGVzYyA9IHBmbl96cGRlc2Mob2JqIFx1MDAzZVx1MDAzZSBaU19PQkpfUEZOX1NISUZUKTtcbitcdCpvYmpfaWR4ID0gKG9iaiBcdTAwMjYgWlNfT0JKX0lEWF9NQVNLKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgb2JqX3RvX3pwZGVzYyh1bnNpZ25lZCBsb25nIG9iaiwgc3RydWN0IHpwZGVzYyAqKnpwZGVzYylcbiB7XG4tXHQqenBkZXNjID0gcGZuX3pwZGVzYyhvYmogXHUwMDNlXHUwMDNlIE9CSl9JTkRFWF9CSVRTKTtcbitcdCp6cGRlc2MgPSBwZm5fenBkZXNjKG9iaiBcdTAwM2VcdTAwM2UgWlNfT0JKX1BGTl9TSElGVCk7XG4rfVxuK1xuKy8qIEZvbGRzIHRvIDAgd2hlbiBaU19PQkpfQ0xBU1NfQklUUyA9PSAwOyBubyBpZmRlZiBuZWVkZWQgYXQgY2FsbGVycy4gKi9cbitzdGF0aWMgdW5zaWduZWQgaW50IG9ial90b19jbGFzc19pZHgodW5zaWduZWQgbG9uZyBvYmopXG4re1xuK1x0cmV0dXJuIChvYmogXHUwMDNlXHUwMDNlIFpTX09CSl9JRFhfQklUUykgXHUwMDI2IFpTX09CSl9DTEFTU19NQVNLO1xuIH1cbiBcbiAvKipcbi0gKiBsb2NhdGlvbl90b19vYmogLSBnZXQgb2JqIHZhbHVlIGVuY29kZWQgZnJvbSAoXHUwMDNjenBkZXNjXHUwMDNlLCBcdTAwM2NvYmpfaWR4XHUwMDNlKVxuKyAqIGxvY2F0aW9uX3RvX29iaiAtIGVuY29kZSAoXHUwMDNjenBkZXNjXHUwMDNlLCBcdTAwM2NvYmpfaWR4XHUwMDNlLCBcdTAwM2NjbGFzc19pZHhcdTAwM2UpIGludG8gb2JqIHZhbHVlXG4gICogQHpwZGVzYzogenBkZXNjIG9iamVjdCByZXNpZGVzIGluIHpzcGFnZVxuICAqIEBvYmpfaWR4OiBvYmplY3QgaW5kZXhcbisgKiBAY2xhc3NfaWR4OiBzaXplIGNsYXNzIGluZGV4OyBpZ25vcmVkIHdoZW4gWlNfT0JKX0NMQVNTX0JJVFMgPT0gMFxuICAqL1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGxvY2F0aW9uX3RvX29iaihzdHJ1Y3QgenBkZXNjICp6cGRlc2MsIHVuc2lnbmVkIGludCBvYmpfaWR4KVxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvY2F0aW9uX3RvX29iaihzdHJ1Y3QgenBkZXNjICp6cGRlc2MsIHVuc2lnbmVkIGludCBvYmpfaWR4LFxuK1x0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgY2xhc3NfaWR4KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgb2JqO1xuIFxuLVx0b2JqID0genBkZXNjX3Bmbih6cGRlc2MpIFx1MDAzY1x1MDAzYyBPQkpfSU5ERVhfQklUUztcbi1cdG9iaiB8PSBvYmpfaWR4IFx1MDAyNiBPQkpfSU5ERVhfTUFTSztcbitcdG9iaiAgPSB6cGRlc2NfcGZuKHpwZGVzYykgXHUwMDNjXHUwMDNjIFpTX09CSl9QRk5fU0hJRlQ7XG4rXHRvYmogfD0gKHVuc2lnbmVkIGxvbmcpKGNsYXNzX2lkeCBcdTAwMjYgWlNfT0JKX0NMQVNTX01BU0spIFx1MDAzY1x1MDAzYyBaU19PQkpfSURYX0JJVFM7XG4rXHRvYmogfD0gb2JqX2lkeCBcdTAwMjYgWlNfT0JKX0lEWF9NQVNLO1xuIFxuIFx0cmV0dXJuIG9iajtcbiB9XG4gXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgaGFuZGxlX3RvX29iaih1bnNpZ25lZCBsb25nIGhhbmRsZSlcbiB7XG4tXHRyZXR1cm4gKih1bnNpZ25lZCBsb25nICopaGFuZGxlO1xuK1x0cmV0dXJuIFJFQURfT05DRSgqKHVuc2lnbmVkIGxvbmcgKiloYW5kbGUpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2FsbG9jYXRlZChzdHJ1Y3QgenBkZXNjICp6cGRlc2MsIHZvaWQgKm9iaixcbkBAIC04MDEsMTMgKzg4NCwyNiBAQCBzdGF0aWMgaW50IHRyeWxvY2tfenNwYWdlKHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX2ZyZWVfenNwYWdlKHN0cnVjdCB6c19wb29sICpwb29sLCBzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3MsXG4tXHRcdFx0XHRzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXG4rLypcbisgKiBUaHJlZSBmcmVlIGhlbHBlcnMsIGtlcHQgYXBhcnQgaGVyZTpcbisgKlxuKyAqIF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoKTogYmFyZSBjb3JlOyB3YWxrcyB6cGRlc2NzIGFuZCByZXR1cm5zIHBhZ2VzXG4rICogICB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLiAgQ2FsbGVyIG93bnMgYWxsIHpwZGVzYyBsb2NrcyBhbmQgaGFzXG4rICogICByZW1vdmVkIHRoZSB6c3BhZ2UgZnJvbSBpdHMgY2xhc3MgbGlzdC4gIFVzZWQgYnkgenNfZnJlZSgpIG91dHNpZGVcbisgKiAgIGNsYXNzLVx1MDAzZWxvY2sgc28gdGhlIGJ1ZGR5LXNpZGUgd29yayBkb2VzIG5vdCBzdGFsbCB0aGUgY2xhc3MuXG4rICpcbisgKiBfX2ZyZWVfenNwYWdlKCk6IF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoKSArIHBlci1jbGFzcyBhY2NvdW50aW5nLFxuKyAqICAgdW5kZXIgY2xhc3MtXHUwMDNlbG9jay4gIFVzZWQgYnkgYXN5bmNfZnJlZV96c3BhZ2UoKSwgdGhlIHdvcmtlciBmb3JcbisgKiAgIHpzcGFnZXMgd2hvc2UgdHJ5bG9ja196c3BhZ2UoKSBmYWlsZWQuXG4rICpcbisgKiBmcmVlX3pzcGFnZSgpOiBmdWxsIHdyYXBwZXIgLSB0cnlsb2NrIHpwZGVzY3MsIHJlbW92ZSBmcm9tIGNsYXNzXG4rICogICBsaXN0LCBjYWxsIF9fZnJlZV96c3BhZ2UoKTsga2lja3MgZGVmZXJyZWQgZnJlZSBvbiBjb250ZW50aW9uLlxuKyAqICAgVXNlZCBieSBjb21wYWN0aW9uLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2ZyZWVfenNwYWdlX2xvY2tsZXNzKHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcbiB7XG4gXHRzdHJ1Y3QgenBkZXNjICp6cGRlc2MsICpuZXh0O1xuIFxuLVx0YXNzZXJ0X3NwaW5fbG9ja2VkKFx1MDAyNmNsYXNzLVx1MDAzZWxvY2spO1xuLVxuIFx0Vk1fQlVHX09OKGdldF96c3BhZ2VfaW51c2UoenNwYWdlKSk7XG4gXHRWTV9CVUdfT04oenNwYWdlLVx1MDAzZWZ1bGxuZXNzICE9IFpTX0lOVVNFX1JBVElPXzApO1xuIFxuQEAgLTgyMyw3ICs5MTksMTMgQEAgc3RhdGljIHZvaWQgX19mcmVlX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLFxuIFx0fSB3aGlsZSAoenBkZXNjICE9IE5VTEwpO1xuIFxuIFx0Y2FjaGVfZnJlZV96c3BhZ2UoenNwYWdlKTtcbit9XG4gXG4rc3RhdGljIHZvaWQgX19mcmVlX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLFxuK1x0XHRcdCAgc3RydWN0IHpzcGFnZSAqenNwYWdlKVxuK3tcbitcdGFzc2VydF9zcGluX2xvY2tlZChcdTAwMjZjbGFzcy1cdTAwM2Vsb2NrKTtcbitcdF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoenNwYWdlKTtcbiBcdGNsYXNzX3N0YXRfc3ViKGNsYXNzLCBaU19PQkpTX0FMTE9DQVRFRCwgY2xhc3MtXHUwMDNlb2Jqc19wZXJfenNwYWdlKTtcbiBcdGF0b21pY19sb25nX3N1YihjbGFzcy1cdTAwM2VwYWdlc19wZXJfenNwYWdlLCBcdTAwMjZwb29sLVx1MDAzZXBhZ2VzX2FsbG9jYXRlZCk7XG4gfVxuQEAgLTEyNzYsNyArMTM3OCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIG9ial9tYWxsb2Moc3RydWN0IHpzX3Bvb2wgKnBvb2wsXG4gXHRrdW5tYXBfbG9jYWwodmFkZHIpO1xuIFx0bW9kX3pzcGFnZV9pbnVzZSh6c3BhZ2UsIDEpO1xuIFxuLVx0b2JqID0gbG9jYXRpb25fdG9fb2JqKG1fenBkZXNjLCBvYmopO1xuK1x0b2JqID0gbG9jYXRpb25fdG9fb2JqKG1fenBkZXNjLCBvYmosIHpzcGFnZS1cdTAwM2VjbGFzcyk7XG4gXHRyZWNvcmRfb2JqKGhhbmRsZSwgb2JqKTtcbiBcbiBcdHJldHVybiBvYmo7XG5AQCAtMTM4MSwzNyArMTQ4Myw4OSBAQCBzdGF0aWMgdm9pZCBvYmpfZnJlZShpbnQgY2xhc3Nfc2l6ZSwgdW5zaWduZWQgbG9uZyBvYmopXG4gXHRtb2RfenNwYWdlX2ludXNlKHpzcGFnZSwgLTEpO1xuIH1cbiBcbisvKlxuKyAqIFJlc29sdmUgQGhhbmRsZSB0byBpdHMgenNwYWdlIC8gc2l6ZV9jbGFzcyBhbmQgYWNxdWlyZSBjbGFzcy1cdTAwM2Vsb2NrLlxuKyAqXG4rICogV2hlbiBjbGFzc19pZHggaXMgZW5jb2RlZCBpbiBvYmogKFpTX09CSl9DTEFTU19CSVRTIFx1MDAzZSAwKSwgaXQgaXNcbisgKiBpbnZhcmlhbnQgdW5kZXIgcGFnZSBtaWdyYXRpb24sIHNvIHRoZSBoYW5kbGUgY2FuIGJlIHJlYWQgbG9ja2xlc3NseVxuKyAqIHRvIHBpY2sgdGhlIHNpemVfY2xhc3MuICBPbmNlIGNsYXNzLVx1MDAzZWxvY2sgaXMgaGVsZCBtaWdyYXRpb24gaXNcbisgKiBibG9ja2VkIGFuZCB0aGUgaGFuZGxlIGlzIHJlLXJlYWQgdG8gb2J0YWluIGEgc3RhYmxlIFBGTi5cbisgKlxuKyAqIE90aGVyd2lzZSAoMzItYml0LCBvciA2NC1iaXQgZmFsbGJhY2sgcGF0aHMgbGlrZSBVTUwgd2hlcmUgdGhlXG4rICogZW5jb2RpbmcgaXMgZGlzYWJsZWQpLCBmYWxsIGJhY2sgdG8gcG9vbC1cdTAwM2Vsb2NrIGZvciB0aGUgbG9va3VwLlxuKyAqL1xuKyNpZiBaU19PQkpfQ0xBU1NfQklUUyBcdTAwM2UgMFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSxcbitcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgKm9ianAsIHN0cnVjdCB6c3BhZ2UgKip6c3BhZ2VwLFxuK1x0XHRcdFx0XHQgc3RydWN0IHNpemVfY2xhc3MgKipjbGFzc3ApXG4rXHRfX2FjcXVpcmVzKFx1MDAyNigqY2xhc3NwKS1cdTAwM2Vsb2NrKVxuK3tcbitcdHN0cnVjdCB6cGRlc2MgKmZfenBkZXNjO1xuK1x0dW5zaWduZWQgbG9uZyBvYmo7XG4rXG4rXHRvYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7XG4rXHQqY2xhc3NwID0gcG9vbC1cdTAwM2VzaXplX2NsYXNzW29ial90b19jbGFzc19pZHgob2JqKV07XG4rXHRzcGluX2xvY2soXHUwMDI2KCpjbGFzc3ApLVx1MDAzZWxvY2spO1xuK1x0LyogUmUtcmVhZCB1bmRlciBjbGFzcy1cdTAwM2Vsb2NrOiBQRk4gaXMgbm93IHN0YWJsZSB2cyBtaWdyYXRpb24uICovXG4rXHRvYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7XG4rXHRvYmpfdG9fenBkZXNjKG9iaiwgXHUwMDI2Zl96cGRlc2MpO1xuK1x0KnpzcGFnZXAgPSBnZXRfenNwYWdlKGZfenBkZXNjKTtcbitcdCpvYmpwID0gb2JqO1xuK31cbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSxcbitcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgKm9ianAsIHN0cnVjdCB6c3BhZ2UgKip6c3BhZ2VwLFxuK1x0XHRcdFx0XHQgc3RydWN0IHNpemVfY2xhc3MgKipjbGFzc3ApXG4rXHRfX2FjcXVpcmVzKFx1MDAyNigqY2xhc3NwKS1cdTAwM2Vsb2NrKVxuK3tcbitcdHN0cnVjdCB6cGRlc2MgKmZfenBkZXNjO1xuK1x0dW5zaWduZWQgbG9uZyBvYmo7XG4rXG4rXHRyZWFkX2xvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbitcdG9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTtcbitcdG9ial90b196cGRlc2Mob2JqLCBcdTAwMjZmX3pwZGVzYyk7XG4rXHQqenNwYWdlcCA9IGdldF96c3BhZ2UoZl96cGRlc2MpO1xuK1x0KmNsYXNzcCA9IHpzcGFnZV9jbGFzcyhwb29sLCAqenNwYWdlcCk7XG4rXHRzcGluX2xvY2soXHUwMDI2KCpjbGFzc3ApLVx1MDAzZWxvY2spO1xuK1x0cmVhZF91bmxvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbitcdCpvYmpwID0gb2JqO1xuK31cbisjZW5kaWZcbitcbiB2b2lkIHpzX2ZyZWUoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlKVxuIHtcbiBcdHN0cnVjdCB6c3BhZ2UgKnpzcGFnZTtcbi1cdHN0cnVjdCB6cGRlc2MgKmZfenBkZXNjO1xuIFx0dW5zaWduZWQgbG9uZyBvYmo7XG4gXHRzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3M7XG4gXHRpbnQgZnVsbG5lc3M7XG4rXHRzdHJ1Y3QgenNwYWdlICp6c3BhZ2VfdG9fZnJlZSA9IE5VTEw7XG4gXG4gXHRpZiAoSVNfRVJSX09SX05VTEwoKHZvaWQgKiloYW5kbGUpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHQvKlxuLVx0ICogVGhlIHBvb2wtXHUwMDNlbG9jayBwcm90ZWN0cyB0aGUgcmFjZSB3aXRoIHpwYWdlJ3MgbWlncmF0aW9uXG4tXHQgKiBzbyBpdCdzIHNhZmUgdG8gZ2V0IHRoZSBwYWdlIGZyb20gaGFuZGxlLlxuLVx0ICovXG4tXHRyZWFkX2xvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbi1cdG9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTtcbi1cdG9ial90b196cGRlc2Mob2JqLCBcdTAwMjZmX3pwZGVzYyk7XG4tXHR6c3BhZ2UgPSBnZXRfenNwYWdlKGZfenBkZXNjKTtcbi1cdGNsYXNzID0genNwYWdlX2NsYXNzKHBvb2wsIHpzcGFnZSk7XG4tXHRzcGluX2xvY2soXHUwMDI2Y2xhc3MtXHUwMDNlbG9jayk7XG4tXHRyZWFkX3VubG9jayhcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuK1x0b2JqX2NsYXNzX2dldF9hbmRfbG9jayhwb29sLCBoYW5kbGUsIFx1MDAyNm9iaiwgXHUwMDI2enNwYWdlLCBcdTAwMjZjbGFzcyk7XG4gXG4gXHRjbGFzc19zdGF0X3N1YihjbGFzcywgWlNfT0JKU19JTlVTRSwgMSk7XG4gXHRvYmpfZnJlZShjbGFzcy1cdTAwM2VzaXplLCBvYmopO1xuIFxuIFx0ZnVsbG5lc3MgPSBmaXhfZnVsbG5lc3NfZ3JvdXAoY2xhc3MsIHpzcGFnZSk7XG4tXHRpZiAoZnVsbG5lc3MgPT0gWlNfSU5VU0VfUkFUSU9fMClcbi1cdFx0ZnJlZV96c3BhZ2UocG9vbCwgY2xhc3MsIHpzcGFnZSk7XG4rXHRpZiAoZnVsbG5lc3MgPT0gWlNfSU5VU0VfUkFUSU9fMCkge1xuK1x0XHRpZiAodHJ5bG9ja196c3BhZ2UoenNwYWdlKSkge1xuK1x0XHRcdHJlbW92ZV96c3BhZ2UoY2xhc3MsIHpzcGFnZSk7XG4rXHRcdFx0Y2xhc3Nfc3RhdF9zdWIoY2xhc3MsIFpTX09CSlNfQUxMT0NBVEVELFxuK1x0XHRcdFx0ICAgICAgIGNsYXNzLVx1MDAzZW9ianNfcGVyX3pzcGFnZSk7XG4rXHRcdFx0enNwYWdlX3RvX2ZyZWUgPSB6c3BhZ2U7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0a2lja19kZWZlcnJlZF9mcmVlKHBvb2wpO1xuK1x0XHR9XG4rXHR9XG4gXG4gXHRzcGluX3VubG9jayhcdTAwMjZjbGFzcy1cdTAwM2Vsb2NrKTtcbitcbitcdGlmICh6c3BhZ2VfdG9fZnJlZSkge1xuK1x0XHRfX2ZyZWVfenNwYWdlX2xvY2tsZXNzKHpzcGFnZV90b19mcmVlKTtcbitcdFx0YXRvbWljX2xvbmdfc3ViKGNsYXNzLVx1MDAzZXBhZ2VzX3Blcl96c3BhZ2UsIFx1MDAyNnBvb2wtXHUwMDNlcGFnZXNfYWxsb2NhdGVkKTtcbitcdH1cbiBcdGNhY2hlX2ZyZWVfaGFuZGxlKGhhbmRsZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHpzX2ZyZWUpO1xuQEAgLTE3NjIsNyArMTkxNiw4IEBAIHN0YXRpYyBpbnQgenNfcGFnZV9taWdyYXRlKHN0cnVjdCBwYWdlICpuZXdwYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcbiBcdFx0XHRvbGRfb2JqID0gaGFuZGxlX3RvX29iaihoYW5kbGUpO1xuIFx0XHRcdG9ial90b19sb2NhdGlvbihvbGRfb2JqLCBcdTAwMjZkdW1teSwgXHUwMDI2b2JqX2lkeCk7XG4tXHRcdFx0bmV3X29iaiA9ICh1bnNpZ25lZCBsb25nKWxvY2F0aW9uX3RvX29iaihuZXd6cGRlc2MsIG9ial9pZHgpO1xuK1x0XHRcdG5ld19vYmogPSBsb2NhdGlvbl90b19vYmoobmV3enBkZXNjLCBvYmpfaWR4LFxuK1x0XHRcdFx0XHRcdCAgb2JqX3RvX2NsYXNzX2lkeChvbGRfb2JqKSk7XG4gXHRcdFx0cmVjb3JkX29iaihoYW5kbGUsIG5ld19vYmopO1xuIFx0XHR9XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwMjoxNTozMi4xNTc2Mzk1MDhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDUwMDc1MjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIHpzbWFsbG9jIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgbWVzc2luZyB3aXRoIGBtbS96c21hbGxvYy5jYC4gVGhlIGdpc3Qgb2YgaXQgaXMgYSBjbGV2ZXIgbG9ja2xlc3Mgb3B0aW1pemF0aW9uIGZvciBgenNfZnJlZSgpYC4gVGhleSdyZSBlbWJlZGRpbmcgdGhlIGBjbGFzc19pZHhgIHJpZ2h0IGludG8gdGhlIG9iamVjdCBoYW5kbGUgaXRzZWxmLiBUaGF0J3MgcHJldHR5IHNtYXJ0IOKAkyBpZiBgWlNfT0JKX0NMQVNTX0JJVFNgIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLCB0aGVuIGB6c19mcmVlKClgIGNhbiBieXBhc3MgZ3JhYmJpbmcgYHBvb2wtXHUwMDNlbG9ja2AsIHdoaWNoIHNob3VsZCBib29zdCBwZXJmb3JtYW5jZS4gVGhpcyBuYXR1cmFsbHkgbWVhbnMgdGhleSd2ZSB0d2Vha2VkIHRoZSBiaXQgbGF5b3V0IG9mIHRoZSBvYmplY3QgaGFuZGxlLCBhbmQgdGhleSd2ZSBhZGRlZCBhIG5ldyBmdW5jdGlvbiwgYF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoKWAuIGB6c19mcmVlKClgIGlzIG5vdyB1c2luZyBgb2JqX2NsYXNzX2dldF9hbmRfbG9jaygpYCB0byBlaXRoZXIgZ28gdGhlIGxvY2tsZXNzIHJvdXRlIG9yIGZhbGwgYmFjayB0byB0aGUgb2xkIGBwb29sLVx1MDAzZWxvY2tgIGFwcHJvYWNoLCBkZXBlbmRpbmcgb24gdGhlIHNpdHVhdGlvbi5cblxuVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IHNpZ25pZmljYW50IG9uZSBhdCB0aGF0LCB0b3VjaGluZyBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IGB6c21hbGxvY2AuIEl0J3Mgc2NyZWFtaW5nIGZvciBzb21lIHNlcmlvdXMgZnV6emluZy4gR290dGEgbWFrZSBzdXJlIHRoaXMgbG9ja2xlc3Mgb3B0aW1pemF0aW9uIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY29uY3VycmVuY3kgaXNzdWVzLlxuXG5Ob3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBtaW5pbWFsIHNldCBvZiBrZXJuZWwgY29uZmlncyBuZWVkZWQgdG8gZW5hYmxlIHpzbWFsbG9jIHNvIEkgY2FuIHJlcHJvZHVjZSB0aGUgcGF0Y2guIExldCdzIHNlZS4uLiBJJ2xsIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgc2VhcmNoIGZvciBcInpzbWFsbG9jXCIuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjU2LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDI6MTU6MzguMjA3NzE3NTk1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDAxNzQzMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpTTUFMTE9DXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTE0PWNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcXG4tLVxcbm1tL0tjb25maWctMTI0LVxcbm1tL0tjb25maWc6MTI1OmNvbmZpZyBaU01BTExPQ1xcbm1tL0tjb25maWctMTI2LVxcdHRyaXN0YXRlXFxuLS1cXG5tbS9LY29uZmlnPTEzMz1jb21tZW50IFxcXCJac21hbGxvYyBpcyBhIGNvbW1vbiBiYWNrZW5kIGFsbG9jYXRvciBmb3IgenN3YXAgXFx1MDAyNiB6cmFtXFxcIlxcbm1tL0tjb25maWctMTM0LVxcbm1tL0tjb25maWc6MTM1OmNvbmZpZyBaU01BTExPQ19TVEFUXFxubW0vS2NvbmZpZy0xMzYtXFx0Ym9vbCBcXFwiRXhwb3J0IHpzbWFsbG9jIHN0YXRpc3RpY3NcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0My1cXG5tbS9LY29uZmlnOjE0NDpjb25maWcgWlNNQUxMT0NfQ0hBSU5fU0laRVxcbm1tL0tjb25maWctMTQ1LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgcGh5c2ljYWwgcGFnZXMgcGVyLXpzcGFnZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDI6MTU6NDAuNDQ3ODk4MzY2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc4Nzc3NjExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBaU01BTExPQ2AgVHJpc3RhdGUqKlxuXG5Pa2F5LCBzbyBgWlNNQUxMT0NgLi4uIGl0J3MgYSB0cmlzdGF0ZSwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBwaWN0dXJlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0cmFjZSBpdHMgZGVwZW5kZW5jaWVzIGFuZCBzZWxlY3RvcnMuIFdobydzIGNhbGxpbmcgdGhlIHNob3RzIG9uIHRoaXM/IFdoYXQgZmVhdHVyZXMgb3IgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMgYXJlIGJyaW5naW5nIGBaU01BTExPQ2AgaW50byB0aGUgbWl4LCBhbmQgY29udmVyc2VseSwgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGNvbnRpbmdlbnQgdXBvbiBpdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIHNwYWNlLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk3NSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDAyOjE1OjQzLjIzNTY3NjE0NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTkzODMyODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBaU01BTExPQ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz0yPWNvbmZpZyBaUkFNXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00LVxcdGRlcGVuZHMgb24gQkxPQ0sgXFx1MDAyNlxcdTAwMjYgU1lTRlMgXFx1MDAyNlxcdTAwMjYgTU1VXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NTpcXHRzZWxlY3QgWlNNQUxMT0NcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MjI9Y29uZmlnIFpTV0FQXFxuLS1cXG5tbS9LY29uZmlnLTI1LVxcdHNlbGVjdCBDUllQVE9cXG5tbS9LY29uZmlnOjI2OlxcdHNlbGVjdCBaU01BTExPQ1xcbm1tL0tjb25maWctMjctXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwMjoxNTo0NS40Mjk1MTQ2MjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTY0MTA0ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBaUkFNLCBaU1dBUCwgYW5kIFpTTUFMTE9DIEludGVncmF0aW9uKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBgWlJBTWAgYW5kIGBaU1dBUGAgYm90aCBsZXZlcmFnZSBgWlNNQUxMT0NgIGZvciB0aGVpciBjb21wcmVzc2VkIG1lbW9yeSBuZWVkcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiWWVzLCB3ZSBzaG91bGQgYWJzb2x1dGVseSBlbmFibGUgYWxsIHRocmVlIG9mIHRob3NlLlwiIE5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbW9kaWZpY2F0aW9ucyB0aGlzIGlzIGJyaW5naW5nLlxuXG5SaWdodCwgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZCBvciBuZXdseSBpbnRyb2R1Y2VkLiBJIHNlZTogYHpzX2ZyZWVgLCBgX19mcmVlX3pzcGFnZV9sb2NrbGVzc2AsIGBfX2ZyZWVfenNwYWdlYCwgYG9ial9jbGFzc19nZXRfYW5kX2xvY2tgLCBgbG9jYXRpb25fdG9fb2JqYCwgYG9ial90b19sb2NhdGlvbmAsIGBvYmpfdG9fY2xhc3NfaWR4YCwgYW5kIGB6c19wYWdlX21pZ3JhdGVgLiBUaGF0IGxpc3QgZ2l2ZXMgYSBnb29kIG92ZXJ2aWV3LCBidXQgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBjb3JlIG1vZGlmaWNhdGlvbnMuXG5cbkltbWVkaWF0ZWx5LCBteSBhdHRlbnRpb24gaXMgZHJhd24gdG8gYHpzX2ZyZWVgIGFuZCBgenNfcGFnZV9taWdyYXRlYCwgYW5kIGBfX2ZyZWVfenNwYWdlX2xvY2tsZXNzYCwgYW5kIGBvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrYC4gSSBzZWUgYHpzX2ZyZWVgIGlzIGEgY2VudHJhbCBmdW5jdGlvbiBmb3IgYFpTTUFMTE9DYCDigJMgdGhlIG1haW4gbW9kaWZpY2F0aW9uLiBJJ20gd29uZGVyaW5nIGlmIHRoaXMgY2hhbmdlIGNvdWxkIGJlIHBlcmZvcm1hbmNlIHNlbnNpdGl2ZS4gSXMgYHpzX2ZyZWVgIHRvbyBob3Qgb2YgYSBwYXRoIHRvIG1vZGlmeT8gXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYHpzX2ZyZWVgIGlzLCBvZiBjb3Vyc2UsIGNhbGxlZCB3aGVuIGZyZWVpbmcgb2JqZWN0cyBpbiBgenNtYWxsb2NgLiBJdCdzIGEgY3JpdGljYWwgb3BlcmF0aW9uLiBgenNfcGFnZV9taWdyYXRlYCwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHNwZWNpZmljIHRvIHBhZ2UgbWlncmF0aW9uLiBgX19mcmVlX3pzcGFnZV9sb2NrbGVzc2AgaXMgY2FsbGVkIGJ5IGB6c19mcmVlYCBhbmQgYF9fZnJlZV96c3BhZ2VgLiBJZiBgenNfZnJlZWAgaXMgdG9vIGhvdCwgaXQgd291bGQgYmUgYmFkIHRvIG1lc3Mgd2l0aCBpdC4gTGV0J3Mgc2VlIHdoYXQgY2FsbHMgYHpzX2ZyZWVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjkyLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDAyOjE1OjUwLjU5MzYyMDkzM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQyMTc2MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzX2ZyZWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9OTIwPXN0YXRpYyBpbnQgenJhbV93cml0ZWJhY2tfY29tcGxldGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCB6cmFtX3diX3JlcSAqcmVxKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtOTUzLVxcdGF0b21pYzY0X3N1YihnZXRfc2xvdF9zaXplKHpyYW0sIGluZGV4KSwgXFx1MDAyNnpyYW0tXFx1MDAzZXN0YXRzLmNvbXByX2RhdGFfc2l6ZSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6OTU0OlxcdHpzX2ZyZWUoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGdldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCkpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTk1NS1cXHRzZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgsIHJlcS1cXHUwMDNlYmxrX2lkeCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMDA3PXN0YXRpYyB2b2lkIHNsb3RfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjA0OS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMDUwOlxcdHpzX2ZyZWUoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjA1MS1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyMjQ9c3RhdGljIGludCB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNDEtXFx0aWYgKCF6cmFtX2Nhbl9zdG9yZV9wYWdlKHpyYW0pKSB7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI0MjpcXHRcXHR6c19mcmVlKHpyYW0tXFx1MDAzZW1lbV9wb29sLCBoYW5kbGUpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNDMtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjY1PXN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMwNy1cXHRcXHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzA4OlxcdFxcdHpzX2ZyZWUoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMwOS1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmluY2x1ZGUvbGludXgvenNtYWxsb2MuaD0zMD11bnNpZ25lZCBsb25nIHpzX21hbGxvYyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLFxcbmluY2x1ZGUvbGludXgvenNtYWxsb2MuaC0zMS1cXHRcXHRcXHRjb25zdCBpbnQgbmlkKTtcXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmg6MzI6dm9pZCB6c19mcmVlKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIG9iaik7XFxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oLTMzLVxcbi0tXFxubW0venNtYWxsb2MuYy0yNC0gKlxcbm1tL3pzbWFsbG9jLmM6MjU6ICogV2hlbiBaU19PQkpfQ0xBU1NfQklUUyBcXHUwMDNlIDAsIHpzX2ZyZWUoKSBza2lwcyBwb29sLVxcdTAwM2Vsb2NrOyBpdCBwaWNrc1xcbm1tL3pzbWFsbG9jLmMtMjYtICogdGhlIHNpemVfY2xhc3MgZnJvbSBvYmoncyBlbmNvZGVkIGNsYXNzX2lkeCBhbmQgc2VyaWFsaXplcyBhZ2FpbnN0XFxuLS1cXG5tbS96c21hbGxvYy5jLTEwNS0gKlxcbm1tL3pzbWFsbG9jLmM6MTA2OiAqIEVuY29kaW5nIGNsYXNzX2lkeCBpbnRvIG9iaiBsZXRzIHpzX2ZyZWUoKSBsb2NhdGUgdGhlIHNpemVfY2xhc3NcXG5tbS96c21hbGxvYy5jLTEwNy0gKiB3aXRob3V0IGhvbGRpbmcgcG9vbC1cXHUwMDNlbG9jazsgY2xhc3NfaWR4IGlzIGludmFyaWFudCBhY3Jvc3MgcGFnZVxcbi0tXFxubW0venNtYWxsb2MuYz00NjU9c3RhdGljIHZvaWQgY2FjaGVfZnJlZV96c3BhZ2Uoc3RydWN0IHpzcGFnZSAqenNwYWdlKVxcbi0tXFxubW0venNtYWxsb2MuYy00NzAtLypcXG5tbS96c21hbGxvYy5jOjQ3MTogKiBQYWlycyB3aXRoIFJFQURfT05DRSgpIGluIGhhbmRsZV90b19vYmooKTogenNfZnJlZSgpIG1heSByZWFkIHRoZVxcbm1tL3pzbWFsbG9jLmMtNDcyLSAqIGhhbmRsZSBsb2NrbGVzc2x5LCBzbyBwcmV2ZW50IHN0b3JlIHRlYXJpbmcgaGVyZS5cXG4tLVxcbm1tL3pzbWFsbG9jLmM9ODY2PXN0YXRpYyBpbnQgdHJ5bG9ja196c3BhZ2Uoc3RydWN0IHpzcGFnZSAqenNwYWdlKVxcbi0tXFxubW0venNtYWxsb2MuYy04OTEtICogICB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLiAgQ2FsbGVyIG93bnMgYWxsIHpwZGVzYyBsb2NrcyBhbmQgaGFzXFxubW0venNtYWxsb2MuYzo4OTI6ICogICByZW1vdmVkIHRoZSB6c3BhZ2UgZnJvbSBpdHMgY2xhc3MgbGlzdC4gIFVzZWQgYnkgenNfZnJlZSgpIG91dHNpZGVcXG5tbS96c21hbGxvYy5jLTg5My0gKiAgIGNsYXNzLVxcdTAwM2Vsb2NrIHNvIHRoZSBidWRkeS1zaWRlIHdvcmsgZG9lcyBub3Qgc3RhbGwgdGhlIGNsYXNzLlxcbi0tXFxubW0venNtYWxsb2MuYz05MzM9c3RhdGljIHZvaWQgZnJlZV96c3BhZ2Uoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcyxcXG4tLVxcbm1tL3pzbWFsbG9jLmMtOTM5LVxcdC8qXFxubW0venNtYWxsb2MuYzo5NDA6XFx0ICogU2luY2UgenNfZnJlZSBjb3VsZG4ndCBiZSBzbGVlcGFibGUsIHRoaXMgZnVuY3Rpb24gY2Fubm90IGNhbGxcXG5tbS96c21hbGxvYy5jLTk0MS1cXHQgKiBsb2NrX3BhZ2UuIFRoZSBwYWdlIGxvY2tzIHRyeWxvY2tfenNwYWdlIGdvdCB3aWxsIGJlIHJlbGVhc2VkXFxuLS1cXG5tbS96c21hbGxvYy5jPTE1MTY9c3RhdGljIGlubGluZSB2b2lkIG9ial9jbGFzc19nZXRfYW5kX2xvY2soc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxcbi0tXFxubW0venNtYWxsb2MuYy0xNTM0LVxcbm1tL3pzbWFsbG9jLmM6MTUzNTp2b2lkIHpzX2ZyZWUoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlKVxcbm1tL3pzbWFsbG9jLmMtMTUzNi17XFxuLS1cXG5tbS96c21hbGxvYy5jLTE1NzAtfVxcbm1tL3pzbWFsbG9jLmM6MTU3MTpFWFBPUlRfU1lNQk9MX0dQTCh6c19mcmVlKTtcXG5tbS96c21hbGxvYy5jLTE1NzItXFxuLS1cXG5tbS96c21hbGxvYy5jPTE4NDA9c3RhdGljIGludCB6c19wYWdlX21pZ3JhdGUoc3RydWN0IHBhZ2UgKm5ld3BhZ2UsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0venNtYWxsb2MuYy0xODcwLVxcdCAqIFRoZSBwb29sIG1pZ3JhdGVfbG9jayBwcm90ZWN0cyB0aGUgcmFjZSBiZXR3ZWVuIHpwYWdlIG1pZ3JhdGlvblxcbm1tL3pzbWFsbG9jLmM6MTg3MTpcXHQgKiBhbmQgenNfZnJlZS5cXG5tbS96c21hbGxvYy5jLTE4NzItXFx0ICovXFxuLS1cXG5tbS96c21hbGxvYy5jPTIwNDI9c3RhdGljIHVuc2lnbmVkIGxvbmcgX196c19jb21wYWN0KHN0cnVjdCB6c19wb29sICpwb29sLFxcbi0tXFxubW0venNtYWxsb2MuYy0yMDQ5LVxcdC8qXFxubW0venNtYWxsb2MuYzoyMDUwOlxcdCAqIHByb3RlY3QgdGhlIHJhY2UgYmV0d2VlbiB6cGFnZSBtaWdyYXRpb24gYW5kIHpzX2ZyZWVcXG5tbS96c21hbGxvYy5jLTIwNTEtXFx0ICogYXMgd2VsbCBhcyB6cGFnZSBhbGxvY2F0aW9uL2ZyZWVcXG4tLVxcbm1tL3pzd2FwLmM9NzY1PXN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG4tLVxcbm1tL3pzd2FwLmMtNzY3LVxcdHpzd2FwX2xydV9kZWwoXFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBlbnRyeSk7XFxubW0venN3YXAuYzo3Njg6XFx0enNfZnJlZShlbnRyeS1cXHUwMDNlcG9vbC1cXHUwMDNlenNfcG9vbCwgZW50cnktXFx1MDAzZWhhbmRsZSk7XFxubW0venN3YXAuYy03NjktXFx0enN3YXBfcG9vbF9wdXQoZW50cnktXFx1MDAzZXBvb2wpO1xcbi0tXFxubW0venN3YXAuYz0xNDAxPXN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS96c3dhcC5jLTE0NzQtc3RvcmVfZmFpbGVkOlxcbm1tL3pzd2FwLmM6MTQ3NTpcXHR6c19mcmVlKHBvb2wtXFx1MDAzZXpzX3Bvb2wsIGVudHJ5LVxcdTAwM2VoYW5kbGUpO1xcbm1tL3pzd2FwLmMtMTQ3Ni1jb21wcmVzc19mYWlsZWQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDAyOjE1OjUyLjkzNTgwNTE4MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MTgzODMxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFpyYW0vWnN3YXAgTWVtb3J5IE1hbmFnZW1lbnQgZm9yIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgenJhbS96c3dhcCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGB6c19mcmVlYCBpcyBhIHJlYWwgaG90IHBhdGgsIHdoaWNoIG1lYW5zIEkgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IGFkZGluZyBhbnkgc2lnbmlmaWNhbnQgb3ZlcmhlYWQgdGhlcmUuIEkgYWxzbyBzZWUgdGhhdCBgX19mcmVlX3pzcGFnZV9sb2NrbGVzc2AgZ2V0cyBjYWxsZWQgZnJvbSBgenNfZnJlZWAgd2hlbiBhIHBhZ2UgaXMgY29tcGxldGVseSBmcmVlLCBhbmQgdGhhdCBgenNfcGFnZV9taWdyYXRlYCBpcyBpbnZvbHZlZCBpbiBwYWdlIG1pZ3JhdGlvbiwgc28gdGhlc2UgYXJlIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdC5cblxuSSdtIHRoaW5raW5nLCBsZXQncyBsb29rIGNsb3NlciBhdCB0aG9zZSBrZXkgZnVuY3Rpb25zLiBGaXJzdCwgSSBjaGVja2VkIGlmIGBfX2ZyZWVfenNwYWdlX2xvY2tsZXNzYCBpcyBpbmxpbmVkLCBhbmQsIHllcyBpdCBpcy4gVGhhdCBtZWFucyBpdCBsaWtlbHkgaXNuJ3QgdGhlIGJlc3Qgc3ltYm9sIGZvciBhbmFseXNpcy4gU2luY2UgYHpzX3BhZ2VfbWlncmF0ZWAgaXNuJ3QgaW5saW5lLCB0aGF0IGxvb2tzIGJldHRlci4gU2ltaWxhcmx5LCBgX19mcmVlX3pzcGFnZWAsIGBmcmVlX3pzcGFnZWAsIGFuZCBgYXN5bmNfZnJlZV96c3BhZ2VgLCB3aGljaCBhcmVuJ3QgaW5saW5lIGVpdGhlci5cblxuTm93LCBJIGFsc28gc2VlIGBvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrYCBiZWluZyBjYWxsZWQgZnJvbSBgenNfZnJlZWAg4oCTIGl0J3MgaW5saW5lLCBzbyBwcm9iYWJseSBub3QgYSBnb29kIGZvY3VzLiBPdGhlciBmdW5jdGlvbnMgbGlrZSBgb2JqX2ZyZWVgLCBgbG9jYXRpb25fdG9fb2JqYCwgYG9ial90b19sb2NhdGlvbmAgYW5kIGBvYmpfdG9fY2xhc3NfaWR4YCBhbGwgYXJlIGVpdGhlciBzdGF0aWMgb3IgaW5saW5lIGFuZCBhcmUgcHJvYmFibHkgbm90IHRoZSBlbnRyeSBwb2ludHMgSSBuZWVkLlxuXG5HaXZlbiB0aGUgaG90IHBhdGggbmF0dXJlIG9mIGB6c19mcmVlYCBJJ2QgbGlrZSB0byBtaW5pbWl6ZSBteSBmb2N1cyB0aGVyZSwgYW5kIGB6c19wYWdlX21pZ3JhdGVgIGlzIGxvb2tpbmcgZ29vZC4gRnJvbSBteSBhbmFseXNpcyBzbyBmYXIsIGl0IHNlZW1zIHRoYXQgSSBoYXZlIHNldmVyYWwgZ29vZCBmb2N1cyBzeW1ib2xzOiBgenNfcGFnZV9taWdyYXRlYCwgYF9fZnJlZV96c3BhZ2VgLCBgZnJlZV96c3BhZ2VgLCBhbmQgYGFzeW5jX2ZyZWVfenNwYWdlYC5cblxuSSB3aWxsIG5vdyBleHBsb3JlIGBhc3luY19mcmVlX3pzcGFnZWAgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc1NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwMjoxNTo1OS40NTQxOTA0OTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODQzNTU4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXN5bmNfZnJlZV96c3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venNtYWxsb2MuYz04NjY9c3RhdGljIGludCB0cnlsb2NrX3pzcGFnZShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXFxuLS1cXG5tbS96c21hbGxvYy5jLTg5NS0gKiBfX2ZyZWVfenNwYWdlKCk6IF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoKSArIHBlci1jbGFzcyBhY2NvdW50aW5nLFxcbm1tL3pzbWFsbG9jLmM6ODk2OiAqICAgdW5kZXIgY2xhc3MtXFx1MDAzZWxvY2suICBVc2VkIGJ5IGFzeW5jX2ZyZWVfenNwYWdlKCksIHRoZSB3b3JrZXIgZm9yXFxubW0venNtYWxsb2MuYy04OTctICogICB6c3BhZ2VzIHdob3NlIHRyeWxvY2tfenNwYWdlKCkgZmFpbGVkLlxcbi0tXFxubW0venNtYWxsb2MuYz0xOTUxPWNvbnN0IHN0cnVjdCBtb3ZhYmxlX29wZXJhdGlvbnMgenNtYWxsb2NfbW9wcyA9IHtcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTk2MC0gKi9cXG5tbS96c21hbGxvYy5jOjE5NjE6c3RhdGljIHZvaWQgYXN5bmNfZnJlZV96c3BhZ2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm1tL3pzbWFsbG9jLmMtMTk2Mi17XFxuLS1cXG5tbS96c21hbGxvYy5jPTIwMDM9c3RhdGljIHZvaWQgaW5pdF9kZWZlcnJlZF9mcmVlKHN0cnVjdCB6c19wb29sICpwb29sKVxcbm1tL3pzbWFsbG9jLmMtMjAwNC17XFxubW0venNtYWxsb2MuYzoyMDA1OlxcdElOSVRfV09SSyhcXHUwMDI2cG9vbC1cXHUwMDNlZnJlZV93b3JrLCBhc3luY19mcmVlX3pzcGFnZSk7XFxubW0venNtYWxsb2MuYy0yMDA2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDI6MTY6MDEuNzM4NTU3MDM5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MTY2NDA4MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFpzbWFsbG9jIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gSSd2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB0aGUgY29yZSBmdW5jdGlvbnMgaGVyZTogYGFzeW5jX2ZyZWVfenNwYWdlYCwgYHpzX3BhZ2VfbWlncmF0ZWAsIGFuZCBgX19mcmVlX3pzcGFnZWAuIFRob3NlIGFyZSB0aGUgb25lcyB0aGUgcGF0Y2ggaXMgY2xlYXJseSB0b3VjaGluZy4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIExldCBtZSBzZWUuLi4gYFpTTUFMTE9DX1NUQVRgLCBgWlNNQUxMT0NfQ0hBSU5fU0laRWAsIGBaUkFNYCwgYW5kIGBaU1dBUGAuIFJpZ2h0LlxuXG5BaGEhIFRoZSBwYXRjaCAqZG9lcyogcmVmZXJlbmNlIGBaU01BTExPQ19DSEFJTl9TSVpFYC4gQWgsIGhlcmUgaXQgaXM6XG5cbmBgYGNcbiNkZWZpbmUgWlNfTUFYX1BBR0VTX1BFUl9aU1BBR0VcdChfQUMoQ09ORklHX1pTTUFMTE9DX0NIQUlOX1NJWkUsIFVMKSlcbmBgYFxuXG5FeGNlbGxlbnQuIEl0J3MgdXNlZCB0byBkZWZpbmUgYFpTX01BWF9QQUdFU19QRVJfWlNQQUdFYC4gT2theSwgc28gaXQgKmlzKiByZWxldmFudC4gQnV0LCBiZWluZyBhbiBpbnRlZ2VyIGNvbmZpZywgaXQgbGlrZWx5IGhhcyBhIGRlZmF1bHQgdmFsdWUuIEkgZG9uJ3QgbmVlZCB0byBleHBsaWNpdGx5IHNwZWNpZnkgaXQgaWYgdGhlIHBhdGNoIHVzZXMgdGhlIGRlZmF1bHQuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBgbW0vS2NvbmZpZ2AgdG8gYmUgc3VyZS4gVGltZSB0byBnbyBkaWdnaW5nIHRocm91Z2ggdGhhdCBmaWxlLiBJIGNhbid0IGJlIGxlYXZpbmcgYW55dGhpbmcgdG8gY2hhbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkwNSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwMjoxNjowOC40NTUxOTk5NzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzcyMzQxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpTTUFMTE9DX0NIQUlOX1NJWkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzU9Y29uZmlnIFpTTUFMTE9DX1NUQVRcXG4tLVxcbm1tL0tjb25maWctMTQzLVxcbm1tL0tjb25maWc6MTQ0OmNvbmZpZyBaU01BTExPQ19DSEFJTl9TSVpFXFxubW0vS2NvbmZpZy0xNDUtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiBwaHlzaWNhbCBwYWdlcyBwZXItenNwYWdlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwMjoxNjoxMC43MzI0Mzk2NDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyNzU3ODY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKktjb25maWcgRGl2ZSBJbmNvbWluZyoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gYG1tL0tjb25maWdgLiBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gYXJvdW5kIGxpbmUgMTQ0LiBJJ20gZXhwZWN0aW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZyB0byBiZSBkZWZpbmVkIHRoZXJlLCBnaXZlbiB0aGlzIGlzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0ncyBjb25maWd1cmF0aW9uIGZpbGUuIEknbSBob3BpbmcgdG8gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcgb2Ygd2hhdCdzIGJlaW5nIGNvbmZpZ3VyZWQsIHByb2JhYmx5IGEgY29yZSBvcHRpb24gb3IgYSByZWxhdGVkIGRlcGVuZGVuY3kuIEknbSBjdXJpb3VzIHdoYXQgdGhlIGF1dGhvciBpcyBkcml2aW5nIG1lIHRvIGZvY3VzIG9uIGhlcmUsIG1heWJlIHNvbWUgbmV3IGZlYXR1cmUgb3Igb3B0aW1pemF0aW9uIHJlbGF0ZWQgdG8gbWVtb3J5LiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDczLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDI6MTY6MTMuNjYwMDIwMjY3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0MDpcXHRcXHQgIHN0YXRpc3RpY3MgYWJvdXQgd2hhdCdzIGhhcHBlbmluZyBpbiB6c21hbGxvYyBhbmQgZXhwb3J0cyB0aGF0XFxuIDE0MTpcXHRcXHQgIGluZm9ybWF0aW9uIHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmcy5cXG4gMTQyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTQzOlxcdFxcbiAxNDQ6XFx0Y29uZmlnIFpTTUFMTE9DX0NIQUlOX1NJWkVcXG4gMTQ1OlxcdFxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgcGh5c2ljYWwgcGFnZXMgcGVyLXpzcGFnZVxcXCJcXG4gMTQ2OlxcdFxcdGRlZmF1bHQgOFxcbiAxNDc6XFx0XFx0cmFuZ2UgNCAxNlxcbiAxNDg6XFx0XFx0aGVscFxcbiAxNDk6XFx0XFx0ICBUaGlzIG9wdGlvbiBzZXRzIHRoZSB1cHBlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHBoeXNpY2FsIHBhZ2VzXFxuIDE1MDpcXHRcXHQgIHRoYXQgYSB6bWFsbG9jIHBhZ2UgKHpzcGFnZSkgY2FuIGNvbnNpc3Qgb2YuIFRoZSBvcHRpbWFsIHpzcGFnZVxcbiAxNTE6XFx0XFx0ICBjaGFpbiBzaXplIGlzIGNhbGN1bGF0ZWQgZm9yIGVhY2ggc2l6ZSBjbGFzcyBkdXJpbmcgdGhlXFxuIDE1MjpcXHRcXHQgIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwb29sLlxcbiAxNTM6XFx0XFxuIDE1NDpcXHRcXHQgIENoYW5naW5nIHRoaXMgb3B0aW9uIGNhbiBhbHRlciB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHNpemUgY2xhc3NlcyxcXG4gMTU1OlxcdFxcdCAgc3VjaCBhcyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHBlciB6c3BhZ2UgYW5kIHRoZSBudW1iZXIgb2Ygb2JqZWN0c1xcbiAxNTY6XFx0XFx0ICBwZXIgenNwYWdlLiBUaGlzIGNhbiBhbHNvIHJlc3VsdCBpbiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgb2ZcXG4gMTU3OlxcdFxcdCAgdGhlIHBvb2wsIGFzIHpzbWFsbG9jIG1lcmdlcyBzaXplIGNsYXNzZXMgd2l0aCBzaW1pbGFyXFxuIDE1ODpcXHRcXHQgIGNoYXJhY3RlcmlzdGljcy5cXG4gMTU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwMjoxNjoxMy42NjAxMjk3NDdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAxNzA2MDcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpTTUFMTE9DIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIGBaU01BTExPQ2AgaXMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBoZXJlLCBhbmQgYm90aCBgWlJBTWAgYW5kIGBaU1dBUGAgYXJlIGJ1aWx0IG9uIHRvcCBvZiBpdC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gaW5jbHVkZSBgWlNNQUxMT0NgLCBgWlJBTWAsIGFuZCBgWlNXQVBgIHdpdGhpbiBgRW5hYmxlQ29uZmlnc2AuIFRoYXQncyB0aGUgYmFzZWxpbmUuXG5cbk5vdywgbGV0J3MgcmUtZXhhbWluZSB0aGlzIHBhdGNoLiBJdCBhcHBlYXJzIHRoZSBjZW50cmFsIGNoYW5nZSBpcyBpbiBgenNfZnJlZWAsIGFpbWluZyBmb3IgYSBsb2NrbGVzcyBhcHByb2FjaC4gSSBub3RpY2UgdGhlIGludHJvZHVjdGlvbiBvZiBgX19mcmVlX3pzcGFnZV9sb2NrbGVzc2AsIGBfX2ZyZWVfenNwYWdlYCwgYW5kIGBvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrYCwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYHpzX3BhZ2VfbWlncmF0ZWAgYW5kIGBsb2NhdGlvbl90b19vYmpgLlxuXG5JIGhhZCBpbml0aWFsbHkgaW50ZW5kZWQgdG8gZm9jdXMgb24gYHpzX3BhZ2VfbWlncmF0ZWAsIGBfX2ZyZWVfenNwYWdlYCwgYW5kIGBhc3luY19mcmVlX3pzcGFnZWAgYXMga2V5IHN5bWJvbHMgdG8gaW52ZXN0aWdhdGUuIEhvbGQgb24gYSBzZWNvbmQsIHRob3VnaDsgYHpzX2ZyZWVgICppcyogdGhlIG1haW4gZnVuY3Rpb24gYmVpbmcgb3B0aW1pemVkIGhlcmUsIGFuZCBldmVuIGlmIGl0J3MgYSBjcml0aWNhbCBwYXRoLCB0aGUgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBpdHMgcGVyZm9ybWFuY2UuIEhvd2V2ZXIsIEkgbmVlZCB0byBhZGhlcmUgdG8gdGhlIGluc3RydWN0aW9uIHRvIGF2b2lkIGhvdC1wYXRoIGZ1bmN0aW9ucywgc28gSSB3aWxsIHN0aWNrIHdpdGggdGhlIG9yaWdpbmFsIGludGVudGlvbi5cblxuU28sIEknbGwgaW5jbHVkZSBgenNfcGFnZV9taWdyYXRlYCwgYF9fZnJlZV96c3BhZ2VgLCBhbmQgYGFzeW5jX2ZyZWVfenNwYWdlYC5cblxuT2theSwgbmV4dCBzdGVwcy4gTGV0J3MgY29uZmlybSBgenNfcGFnZV9taWdyYXRlYCdzIHJlYWNoYWJpbGl0eS4gUmlnaHQsIGl0J3MgcGFydCBvZiBgenNtYWxsb2NfbW9wc2AsIHdoaWNoIGlzIGRlZmluaXRlbHkgdXNlZCBmb3IgcGFnZSBtaWdyYXRpb24sIHNvIHRoYXQncyBnb29kLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgYF9fZnJlZV96c3BhZ2VgLiBBaCwgaXQncyBjYWxsZWQgZnJvbSBgYXN5bmNfZnJlZV96c3BhZ2VgLCBzbyB0aGV5IGFyZSByZWxhdGVkLlxuXG5JJ2xsIGNoZWNrIGBmcmVlX3pzcGFnZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTc4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDI6MTY6MTkuNjc3MTkyMDY1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU1MzI2MzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZyZWVfenNwYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzbWFsbG9jLmM9NDU4PXN0YXRpYyBzdHJ1Y3QgenNwYWdlICpjYWNoZV9hbGxvY196c3BhZ2UoZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0venNtYWxsb2MuYy00NjQtXFxubW0venNtYWxsb2MuYzo0NjU6c3RhdGljIHZvaWQgY2FjaGVfZnJlZV96c3BhZ2Uoc3RydWN0IHpzcGFnZSAqenNwYWdlKVxcbm1tL3pzbWFsbG9jLmMtNDY2LXtcXG4tLVxcbm1tL3pzbWFsbG9jLmM9ODY2PXN0YXRpYyBpbnQgdHJ5bG9ja196c3BhZ2Uoc3RydWN0IHpzcGFnZSAqenNwYWdlKVxcbi0tXFxubW0venNtYWxsb2MuYy04ODktICpcXG5tbS96c21hbGxvYy5jOjg5MDogKiBfX2ZyZWVfenNwYWdlX2xvY2tsZXNzKCk6IGJhcmUgY29yZTsgd2Fsa3MgenBkZXNjcyBhbmQgcmV0dXJucyBwYWdlc1xcbm1tL3pzbWFsbG9jLmMtODkxLSAqICAgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvci4gIENhbGxlciBvd25zIGFsbCB6cGRlc2MgbG9ja3MgYW5kIGhhc1xcbi0tXFxubW0venNtYWxsb2MuYy04OTQtICpcXG5tbS96c21hbGxvYy5jOjg5NTogKiBfX2ZyZWVfenNwYWdlKCk6IF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoKSArIHBlci1jbGFzcyBhY2NvdW50aW5nLFxcbm1tL3pzbWFsbG9jLmM6ODk2OiAqICAgdW5kZXIgY2xhc3MtXFx1MDAzZWxvY2suICBVc2VkIGJ5IGFzeW5jX2ZyZWVfenNwYWdlKCksIHRoZSB3b3JrZXIgZm9yXFxubW0venNtYWxsb2MuYy04OTctICogICB6c3BhZ2VzIHdob3NlIHRyeWxvY2tfenNwYWdlKCkgZmFpbGVkLlxcbm1tL3pzbWFsbG9jLmMtODk4LSAqXFxubW0venNtYWxsb2MuYzo4OTk6ICogZnJlZV96c3BhZ2UoKTogZnVsbCB3cmFwcGVyIC0gdHJ5bG9jayB6cGRlc2NzLCByZW1vdmUgZnJvbSBjbGFzc1xcbm1tL3pzbWFsbG9jLmM6OTAwOiAqICAgbGlzdCwgY2FsbCBfX2ZyZWVfenNwYWdlKCk7IGtpY2tzIGRlZmVycmVkIGZyZWUgb24gY29udGVudGlvbi5cXG5tbS96c21hbGxvYy5jLTkwMS0gKiAgIFVzZWQgYnkgY29tcGFjdGlvbi5cXG5tbS96c21hbGxvYy5jLTkwMi0gKi9cXG5tbS96c21hbGxvYy5jOjkwMzpzdGF0aWMgaW5saW5lIHZvaWQgX19mcmVlX3pzcGFnZV9sb2NrbGVzcyhzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXFxubW0venNtYWxsb2MuYy05MDQte1xcbi0tXFxubW0venNtYWxsb2MuYy05MjAtXFxubW0venNtYWxsb2MuYzo5MjE6XFx0Y2FjaGVfZnJlZV96c3BhZ2UoenNwYWdlKTtcXG5tbS96c21hbGxvYy5jLTkyMi19XFxubW0venNtYWxsb2MuYy05MjMtXFxubW0venNtYWxsb2MuYzo5MjQ6c3RhdGljIHZvaWQgX19mcmVlX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLFxcbm1tL3pzbWFsbG9jLmMtOTI1LVxcdFxcdFxcdCAgc3RydWN0IHpzcGFnZSAqenNwYWdlKVxcbi0tXFxubW0venNtYWxsb2MuYy05MjctXFx0YXNzZXJ0X3NwaW5fbG9ja2VkKFxcdTAwMjZjbGFzcy1cXHUwMDNlbG9jayk7XFxubW0venNtYWxsb2MuYzo5Mjg6XFx0X19mcmVlX3pzcGFnZV9sb2NrbGVzcyh6c3BhZ2UpO1xcbm1tL3pzbWFsbG9jLmMtOTI5LVxcdGNsYXNzX3N0YXRfc3ViKGNsYXNzLCBaU19PQkpTX0FMTE9DQVRFRCwgY2xhc3MtXFx1MDAzZW9ianNfcGVyX3pzcGFnZSk7XFxuLS1cXG5tbS96c21hbGxvYy5jLTkzMi1cXG5tbS96c21hbGxvYy5jOjkzMzpzdGF0aWMgdm9pZCBmcmVlX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLFxcbm1tL3pzbWFsbG9jLmMtOTM0LVxcdFxcdFxcdFxcdHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcXG4tLVxcbm1tL3pzbWFsbG9jLmMtOTQxLVxcdCAqIGxvY2tfcGFnZS4gVGhlIHBhZ2UgbG9ja3MgdHJ5bG9ja196c3BhZ2UgZ290IHdpbGwgYmUgcmVsZWFzZWRcXG5tbS96c21hbGxvYy5jOjk0MjpcXHQgKiBieSBfX2ZyZWVfenNwYWdlLlxcbm1tL3pzbWFsbG9jLmMtOTQzLVxcdCAqL1xcbi0tXFxubW0venNtYWxsb2MuYy05NDktXFx0cmVtb3ZlX3pzcGFnZShjbGFzcywgenNwYWdlKTtcXG5tbS96c21hbGxvYy5jOjk1MDpcXHRfX2ZyZWVfenNwYWdlKHBvb2wsIGNsYXNzLCB6c3BhZ2UpO1xcbm1tL3pzbWFsbG9jLmMtOTUxLX1cXG4tLVxcbm1tL3pzbWFsbG9jLmM9MTAzND1zdGF0aWMgc3RydWN0IHpzcGFnZSAqYWxsb2NfenNwYWdlKHN0cnVjdCB6c19wb29sICpwb29sLFxcbi0tXFxubW0venNtYWxsb2MuYy0xMDYxLVxcdFxcdFxcdH1cXG5tbS96c21hbGxvYy5jOjEwNjI6XFx0XFx0XFx0Y2FjaGVfZnJlZV96c3BhZ2UoenNwYWdlKTtcXG5tbS96c21hbGxvYy5jLTEwNjMtXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS96c21hbGxvYy5jPTE1MzU9dm9pZCB6c19mcmVlKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSlcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTU2NS1cXHRpZiAoenNwYWdlX3RvX2ZyZWUpIHtcXG5tbS96c21hbGxvYy5jOjE1NjY6XFx0XFx0X19mcmVlX3pzcGFnZV9sb2NrbGVzcyh6c3BhZ2VfdG9fZnJlZSk7XFxubW0venNtYWxsb2MuYy0xNTY3LVxcdFxcdGF0b21pY19sb25nX3N1YihjbGFzcy1cXHUwMDNlcGFnZXNfcGVyX3pzcGFnZSwgXFx1MDAyNnBvb2wtXFx1MDAzZXBhZ2VzX2FsbG9jYXRlZCk7XFxuLS1cXG5tbS96c21hbGxvYy5jPTE4MzA9c3RhdGljIGJvb2wgenNfcGFnZV9pc29sYXRlKHN0cnVjdCBwYWdlICpwYWdlLCBpc29sYXRlX21vZGVfdCBtb2RlKVxcbi0tXFxubW0venNtYWxsb2MuYy0xODMzLVxcdCAqIFBhZ2UgaXMgbG9ja2VkIHNvIHpzcGFnZSBjYW4ndCBiZSBkZXN0cm95ZWQgY29uY3VycmVudGx5XFxubW0venNtYWxsb2MuYzoxODM0OlxcdCAqIChzZWUgZnJlZV96c3BhZ2UoKSkuIEJ1dCBpZiB0aGUgcGFnZSB3YXMgYWxyZWFkeSBkZXN0cm95ZWRcXG5tbS96c21hbGxvYy5jLTE4MzUtXFx0ICogKHNlZSByZXNldF96cGRlc2MoKSksIHJlZnVzZSBpc29sYXRpb24gaGVyZS5cXG4tLVxcbm1tL3pzbWFsbG9jLmM9MTk1MT1jb25zdCBzdHJ1Y3QgbW92YWJsZV9vcGVyYXRpb25zIHpzbWFsbG9jX21vcHMgPSB7XFxuLS1cXG5tbS96c21hbGxvYy5jLTE5NjAtICovXFxubW0venNtYWxsb2MuYzoxOTYxOnN0YXRpYyB2b2lkIGFzeW5jX2ZyZWVfenNwYWdlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5tbS96c21hbGxvYy5jLTE5NjIte1xcbi0tXFxubW0venNtYWxsb2MuYy0xOTg3LVxcdFxcdGNsYXNzX3N0YXRfc3ViKGNsYXNzLCBaU19JTlVTRV9SQVRJT18wLCAxKTtcXG5tbS96c21hbGxvYy5jOjE5ODg6XFx0XFx0X19mcmVlX3pzcGFnZShwb29sLCBjbGFzcywgenNwYWdlKTtcXG5tbS96c21hbGxvYy5jLTE5ODktXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmNsYXNzLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbm1tL3pzbWFsbG9jLmM9MjAwMz1zdGF0aWMgdm9pZCBpbml0X2RlZmVycmVkX2ZyZWUoc3RydWN0IHpzX3Bvb2wgKnBvb2wpXFxubW0venNtYWxsb2MuYy0yMDA0LXtcXG5tbS96c21hbGxvYy5jOjIwMDU6XFx0SU5JVF9XT1JLKFxcdTAwMjZwb29sLVxcdTAwM2VmcmVlX3dvcmssIGFzeW5jX2ZyZWVfenNwYWdlKTtcXG5tbS96c21hbGxvYy5jLTIwMDYtfVxcbi0tXFxubW0venNtYWxsb2MuYz0yMDQyPXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fenNfY29tcGFjdChzdHJ1Y3QgenNfcG9vbCAqcG9vbCxcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMjA3NS1cXHRcXHRpZiAoZmcgPT0gWlNfSU5VU0VfUkFUSU9fMCkge1xcbm1tL3pzbWFsbG9jLmM6MjA3NjpcXHRcXHRcXHRmcmVlX3pzcGFnZShwb29sLCBjbGFzcywgc3JjX3pzcGFnZSk7XFxubW0venNtYWxsb2MuYy0yMDc3LVxcdFxcdFxcdHBhZ2VzX2ZyZWVkICs9IGNsYXNzLVxcdTAwM2VwYWdlc19wZXJfenNwYWdlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwMjoxNjoyMS44MzI1MzQxNDhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY4NDkxODI4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBac21hbGxvYyBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGNvcmUgc3ltYm9scyByZWxhdGVkIHRvIFpzbWFsbG9jIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHNlZSB0aGF0IGBmcmVlX3pzcGFnZWAgaXMgdXNlZCBieSB0aGUgY29tcGFjdGlvbiBwcm9jZXNzLCBgYXN5bmNfZnJlZV96c3BhZ2VgIGlzIGZvciBkZWZlcnJlZCBmcmVlaW5nLCBhbmQgYHpzX3BhZ2VfbWlncmF0ZWAgaXMgaW52b2x2ZWQgaW4gcGFnZSBtaWdyYXRpb24uIEdvb2QsIHRob3NlIGFyZSBhbGwga2V5IGFyZWFzIHRvIGxvb2sgYXQuXG5cbk5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTGV0J3Mgc2VlLi4uIEkndmUgZ290IGBaU01BTExPQ2AsIGBaUkFNYCwgYW5kIGBaU1dBUGAuXG5cbkFoYSEgSXQgbG9va3MgbGlrZSBgWlNNQUxMT0NgIGlzIHRoZSBvbmx5IG9uZSB0aGF0IGRpcmVjdGx5IGluY2x1ZGVzIGB6c21hbGxvYy5jYCBpbiB0aGUgYnVpbGQuIEkgY2FuIHNlZSBpdCByaWdodCBoZXJlIGluIHRoZSBtYWtlZmlsZTpcblxuYGBgbWFrZVxub2JqLSQoQ09ORklHX1pTTUFMTE9DKSAgKz0genNtYWxsb2Mub1xuYGBgXG5cblRoYXQgY29uZmlybXMgaXQsIGFuZCBpdCdzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFzIEkgZGlnIGRlZXBlci4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUgaW50byBob3cgenNtYWxsb2MgaXMgdXRpbGl6ZWQgaW4gdGhlc2UgY2FzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDE2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDAyOjE2OjI2LjUxNzQ1NDQ4NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyOTI3NTg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c21hbGxvY1xcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMjE9b2JqLSQoQ09ORklHX01FTU9SWV9JU09MQVRJT04pICs9IHBhZ2VfaXNvbGF0aW9uLm9cXG5tbS9NYWtlZmlsZToxMjI6b2JqLSQoQ09ORklHX1pTTUFMTE9DKVxcdCs9IHpzbWFsbG9jLm9cXG5tbS9NYWtlZmlsZS0xMjMtb2JqLSQoQ09ORklHX0dFTkVSSUNfRUFSTFlfSU9SRU1BUCkgKz0gZWFybHlfaW9yZW1hcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDAyOjE2OjI4Ljg0NjczNTM2NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTA5MTY5NDkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFpzbWFsbG9jIExvY2tsZXNzIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBwdXR0aW5nIHRvZ2V0aGVyIGEgZnV6emluZyBzZXR1cCBmb3IgdGhpcyB6c21hbGxvYyBwYXRjaC4gVGhlIGdvYWwgaXMgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgbG9ja2xlc3Mgb3B0aW1pemF0aW9uIGludHJvZHVjZWQgaW4gYHpzX2ZyZWUoKWAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpbmNsdWRpbmcgYENPTkZJR19aU01BTExPQ2Agd291bGQgYmUgZW5vdWdoIHRvIGNvbXBpbGUgYHpzbWFsbG9jLmNgLCBidXQgdG8gKnRlc3QqIGl0LCBJIG5lZWQgc29tZXRoaW5nIHRoYXQgKnVzZXMqIGl0LCBzbyBgWlJBTWAgYW5kIGBaU1dBUGAgYXJlIGVzc2VudGlhbC4gIFRoZXJlZm9yZSwgSSdsbCBkZWZpbml0ZWx5IGluY2x1ZGUgYFpTTUFMTE9DYCwgYFpSQU1gLCBhbmQgYFpTV0FQYCBpbiBteSBjb25maWd1cmF0aW9uLiAgSSBjb25zaWRlcmVkIGFkZGluZyBgQ09ORklHX1pTTUFMTE9DX0NIQUlOX1NJWkVgIGJ1dCBkZWNpZGVkIGFnYWluc3QgaXQsIHNpbmNlIGl0IGFscmVhZHkgaGFzIGEgZGVmYXVsdCB2YWx1ZS5cblxuTm93LCB0aGUgY3JpdGljYWwgcGFydCBpcyBzZWxlY3RpbmcgdGhlIFwiZm9jdXMgc3ltYm9sc1wiLiBJIHN0YXJ0ZWQgYnkgbGlzdGluZyB0aGUgZnVuY3Rpb25zIHRoZSBwYXRjaCBtb2RpZmllczogYHpzX3BhZ2VfbWlncmF0ZWAsIGBhc3luY19mcmVlX3pzcGFnZWAsIGBmcmVlX3pzcGFnZWAsIGBfX2ZyZWVfenNwYWdlYCwgYW5kIG1vc3Qgbm90YWJseSBgenNfZnJlZWAsIGFzIGl0J3MgdGhlIG1haW4gZnVuY3Rpb24gYmVpbmcgb3B0aW1pemVkLiAgSSBhbHNvIGNvbnNpZGVyZWQgYG9ial9jbGFzc19nZXRfYW5kX2xvY2tgIGJlY2F1c2UgaXQncyBpbiB0aGUgbG9ja2xlc3MgcGF0aC4gVGhlIHBhdGNoIG9wdGltaXplcyBgenNfZnJlZWAgYnkgZW5jb2RpbmcgdGhlIGBjbGFzc19pZHhgIGludG8gdGhlIG9iamVjdCBoYW5kbGUuXG5cblRoZSBvcmlnaW5hbCBpbnN0cnVjdGlvbiBzYWlkIHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGF2b2lkIHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIE15IGluaXRpYWwgaW5jbGluYXRpb24gd2FzIHRvIHNraXAgYHpzX2ZyZWVgIGJlY2F1c2UgaXQgKmlzKiBhIGhvdCBwYXRoLiBIb3dldmVyLCBhZnRlciB0aGlua2luZyBpdCB0aHJvdWdoLCBJIHJlYWxpemVkIHRoYXQgYHpzX2ZyZWVgIGlzIGFjdHVhbGx5ICpzcGVjaWZpYyogdG8genNtYWxsb2MuIFdpdGhvdXQgaXQsIHRoZSBmdXp6ZXIgd29uJ3QgbmF0dXJhbGx5IGhpdCB0aGUgbG9ja2xlc3MgY29kZSBhdCBhbGwuIFNvLCBJIHdpbGwgaW5jbHVkZSBpdC4gQWxzbywgYmVjYXVzZSBgenNfZnJlZWAgY2FsbHMgYG9ial9jbGFzc19nZXRfYW5kX2xvY2tgIHdoaWNoIGlzIGlubGluZSwgYW5kIGB6c19mcmVlYCBpcyBFWFBPUlRfU1lNQk9MX0dQTC4gIEkgYWxzbyBpbmNsdWRlIGBfX2ZyZWVfenNwYWdlYCB3aGljaCBpcyBjYWxsZWQgd2hlbiBgYXN5bmNfZnJlZV96c3BhZ2VgIHJlbGVhc2VzIHRoZSBwYWdlcy5cblxuVGhlbiBJIGNvbnNpZGVyZWQgYG9ial9tYWxsb2NgLCBiZWNhdXNlIHRoZSBwYXRjaCBtb2RpZmllcyBgb2JqX21hbGxvY2AgdG8gZW5jb2RlIHRoZSBjbGFzc19pZHguIFdoaWxlIGB6c19tYWxsb2NgIGlzIHRoZSBleHBvcnRlZCBlbnRyeSBwb2ludCwgaXQgY2FsbHMgYG9ial9tYWxsb2NgLiBBZnRlciB0aGlua2luZyB0aHJvdWdoIHRoaXMsIEkgZGVjaWRlZCB0byBpbmNsdWRlIGBvYmpfbWFsbG9jYCwgc2luY2UgdGhlIG9wdGltaXphdGlvbiBhcHBsaWVzIHRvIGl0LiBJIGFsc28gY2hlY2tlZCBpZiBpdCB3YXMgc3RhdGljLCBhbmQgaXQgaXMuIEFuZCBJIHdpbGwgYWRkIGl0IHRvIHRoZSBmb2N1cyBzeW1ib2xzLlxuXG5TbywgdGhlIGRlZmluaXRpdmUgbGlzdCBvZiBmb2N1cyBzeW1ib2xzOiBgenNfZnJlZWAsIGBvYmpfbWFsbG9jYCwgYHpzX3BhZ2VfbWlncmF0ZWAsIGBhc3luY19mcmVlX3pzcGFnZWAsIGFuZCBgX19mcmVlX3pzcGFnZWAuXG5cblNvLCB0aGUgY29uZmlncyB3aWxsIGJlOiBgWlNNQUxMT0NgLCBgWlJBTWAsIGBaU1dBUGAuXG5cblRoZSBvdmVyYWxsIHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggY2hhbmdlcyBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24gYW5kIGJpdHdpc2Ugb3BlcmF0aW9ucyB3aXRoaW4gYHpzX2ZyZWUoKWAgZm9yIHpzbWFsbG9jLiAgRnV6emluZyB0aGVzZSBwYXRocyB3aWxsIGJlIGVzc2VudGlhbCB0byBlbnN1cmUgY29ycmVjdG5lc3MuXG5cbkkgY2hlY2tlZCB0aGUgcGF0Y2ggYWdhaW4gZm9yIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucyBidXQgZm91bmQgbm90aGluZyBlbHNlIHNpZ25pZmljYW50IHRvIGFkZC5cblxuTm93IEknbSBnb2luZyB0byBydW4gdGhlIGBzZXQtcmVzdWx0c2AgY29tbWFuZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4ODgsIk91dHB1dFRva2VucyI6MTcyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwMjoxNjo0Ny45Mzg0MzIzNjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDgyNTUxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNNQUxMT0NcIixcbiAgICBcIlpSQU1cIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwienNfZnJlZVwiLFxuICAgIFwib2JqX21hbGxvY1wiLFxuICAgIFwienNfcGFnZV9taWdyYXRlXCIsXG4gICAgXCJhc3luY19mcmVlX3pzcGFnZVwiLFxuICAgIFwiX19mcmVlX3pzcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBvcHRpbWl6YXRpb24gZm9yIHpzX2ZyZWUoKSBpbiB6c21hbGxvYyBieSBlbmNvZGluZyB0aGUgY2xhc3NfaWR4IGludG8gdGhlIG9iamVjdCBoYW5kbGUuIFRoaXMgYXZvaWRzIHRha2luZyBwb29sLVxcdTAwM2Vsb2NrIGR1cmluZyBmcmVlIG9wZXJhdGlvbnMuIEl0IG1vZGlmaWVzIHRoZSBiaXQgbGF5b3V0IG9mIHRoZSBvYmplY3QgaGFuZGxlIGFuZCB1cGRhdGVzIHRoZSBhbGxvY2F0aW9uLCBmcmVlaW5nLCBhbmQgcGFnZSBtaWdyYXRpb24gcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGxvY2tsZXNzIHN5bmNocm9uaXphdGlvbiBhbmQgYml0d2lzZSBvcGVyYXRpb25zIGFyZSBjb3JyZWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpTTUFMTE9DXCIsXG4gICAgXCJaUkFNXCIsXG4gICAgXCJaU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzX2ZyZWVcIixcbiAgICBcIm9ial9tYWxsb2NcIixcbiAgICBcInpzX3BhZ2VfbWlncmF0ZVwiLFxuICAgIFwiYXN5bmNfZnJlZV96c3BhZ2VcIixcbiAgICBcIl9fZnJlZV96c3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3Mgb3B0aW1pemF0aW9uIGZvciB6c19mcmVlKCkgaW4genNtYWxsb2MgYnkgZW5jb2RpbmcgdGhlIGNsYXNzX2lkeCBpbnRvIHRoZSBvYmplY3QgaGFuZGxlLiBUaGlzIGF2b2lkcyB0YWtpbmcgcG9vbC1cXHUwMDNlbG9jayBkdXJpbmcgZnJlZSBvcGVyYXRpb25zLiBJdCBtb2RpZmllcyB0aGUgYml0IGxheW91dCBvZiB0aGUgb2JqZWN0IGhhbmRsZSBhbmQgdXBkYXRlcyB0aGUgYWxsb2NhdGlvbiwgZnJlZWluZywgYW5kIHBhZ2UgbWlncmF0aW9uIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24gYW5kIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcmUgY29ycmVjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflownwt5t[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-26 02:04:48 +0000 UTC FinishedAt: 2026-06-26 02:16:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "dcfbdd5886ab8ecd3887d6a81216e82b8614ba78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSMALLOC", "ZRAM", "ZSWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "dcfbdd5886ab8ecd3887d6a81216e82b8614ba78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSMALLOC", "ZRAM", "ZSWAP" ], "series_id": "e65a1441-a8d8-4993-8461-08e3fca549e6" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zs_free", "obj_malloc", "zs_page_migrate", "async_free_zspage", "__free_zspage" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTTUFMTE9DJiMzNDssCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c19mcmVlJiMzNDssCiAgICAmIzM0O29ial9tYWxsb2MmIzM0OywKICAgICYjMzQ7enNfcGFnZV9taWdyYXRlJiMzNDssCiAgICAmIzM0O2FzeW5jX2ZyZWVfenNwYWdlJiMzNDssCiAgICAmIzM0O19fZnJlZV96c3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIG9wdGltaXphdGlvbiBmb3IgenNfZnJlZSgpIGluIHpzbWFsbG9jIGJ5IGVuY29kaW5nIHRoZSBjbGFzc19pZHggaW50byB0aGUgb2JqZWN0IGhhbmRsZS4gVGhpcyBhdm9pZHMgdGFraW5nIHBvb2wtXHUwMDNlbG9jayBkdXJpbmcgZnJlZSBvcGVyYXRpb25zLiBJdCBtb2RpZmllcyB0aGUgYml0IGxheW91dCBvZiB0aGUgb2JqZWN0IGhhbmRsZSBhbmQgdXBkYXRlcyB0aGUgYWxsb2NhdGlvbiwgZnJlZWluZywgYW5kIHBhZ2UgbWlncmF0aW9uIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24gYW5kIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcmUgY29ycmVjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwMjoxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ2NzU4MmE4MzZkNTA0ZWFjOTY3Zjg2Nzc5NTdjNzFmY2YwOTI3MTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAwMjoxNTozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS96c21hbGxvYy5jIGIvbW0venNtYWxsb2MuY1xuaW5kZXggNjMxMjhkZGI3OTU5OGYuLmJmNzRlNjk1ZDk3N2QzIDEwMDY0NFxuLS0tIGEvbW0venNtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0venNtYWxsb2MuY1xuQEAgLTIxLDYgJiM0MzsyMSwxMCBAQFxuICAqXHRwb29sLVx1MDAzZWxvY2tcbiAgKlx0Y2xhc3MtXHUwMDNlbG9ja1xuICAqXHR6c3BhZ2UtXHUwMDNlbG9ja1xuJiM0MzsgKlxuJiM0MzsgKiBXaGVuIFpTX09CSl9DTEFTU19CSVRTIFx1MDAzZSAwLCB6c19mcmVlKCkgc2tpcHMgcG9vbC1cdTAwM2Vsb2NrOyBpdCBwaWNrc1xuJiM0MzsgKiB0aGUgc2l6ZV9jbGFzcyBmcm9tIG9iaiYjMzk7cyBlbmNvZGVkIGNsYXNzX2lkeCBhbmQgc2VyaWFsaXplcyBhZ2FpbnN0XG4mIzQzOyAqIHBhZ2UgbWlncmF0aW9uIHZpYSBjbGFzcy1cdTAwM2Vsb2NrLlxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG5AQCAtNjcsOCAmIzQzOzcxLDggQEBcbiAjZGVmaW5lIE1BWF9QT1NTSUJMRV9QSFlTTUVNX0JJVFMgTUFYX1BIWVNNRU1fQklUU1xuICNlbHNlXG4gLypcbi0gKiBJZiB0aGlzIGRlZmluaXRpb24gb2YgTUFYX1BIWVNNRU1fQklUUyBpcyB1c2VkLCBPQkpfSU5ERVhfQklUUyB3aWxsIGp1c3Rcbi0gKiBiZSBQQUdFX1NISUZUXG4mIzQzOyAqIElmIHRoaXMgZGVmaW5pdGlvbiBvZiBNQVhfUEhZU01FTV9CSVRTIGlzIHVzZWQsIFpTX09CSl9QRk5fU0hJRlQgd2lsbFxuJiM0MzsgKiBqdXN0IGJlIFBBR0VfU0hJRlRcbiAgKi9cbiAjZGVmaW5lIE1BWF9QT1NTSUJMRV9QSFlTTUVNX0JJVFMgQklUU19QRVJfTE9OR1xuICNlbmRpZlxuQEAgLTg4LDggJiM0Mzs5MiwyMyBAQFxuICNkZWZpbmUgT0JKX1RBR19CSVRTXHQxXG4gI2RlZmluZSBPQkpfVEFHX01BU0tcdE9CSl9BTExPQ0FURURfVEFHXG4gXG4tI2RlZmluZSBPQkpfSU5ERVhfQklUU1x0KEJJVFNfUEVSX0xPTkcgLSBfUEZOX0JJVFMpXG4tI2RlZmluZSBPQkpfSU5ERVhfTUFTS1x0KChfQUMoMSwgVUwpIFx1MDAzY1x1MDAzYyBPQkpfSU5ERVhfQklUUykgLSAxKVxuJiM0MzsvKlxuJiM0MzsgKiBvYmogaXMgZW5jb2RlZCBhcyBbUEZOIHwgY2xhc3NfaWR4IHwgb2JqX2lkeF0gd2l0aGluIGFuIHVuc2lnbmVkIGxvbmc6XG4mIzQzOyAqXG4mIzQzOyAqICAgfFx1MDAzYy0tIF9QRk5fQklUUyAtLVx1MDAzZXxcdTAwM2MtLSBaU19PQkpfQ0xBU1NfQklUUyAtLVx1MDAzZXxcdTAwM2MtLSBaU19PQkpfSURYX0JJVFMgLS1cdTAwM2V8XG4mIzQzOyAqICAgJiM0MzstLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzO1xuJiM0MzsgKiAgIHwgICAgICAgUEZOICAgICAgIHwgICAgICAgIGNsYXNzX2lkeCAgICAgICAgfCAgICAgICAgb2JqX2lkeCAgICAgICAgfFxuJiM0MzsgKiAgICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MztcbiYjNDM7ICogIE1TQiAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFNCXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgfFxuJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICYjNDM7LS0gWlNfT0JKX1BGTl9TSElGVFxuJiM0MzsgKlxuJiM0MzsgKiBFbmNvZGluZyBjbGFzc19pZHggaW50byBvYmogbGV0cyB6c19mcmVlKCkgbG9jYXRlIHRoZSBzaXplX2NsYXNzXG4mIzQzOyAqIHdpdGhvdXQgaG9sZGluZyBwb29sLVx1MDAzZWxvY2s7IGNsYXNzX2lkeCBpcyBpbnZhcmlhbnQgYWNyb3NzIHBhZ2VcbiYjNDM7ICogbWlncmF0aW9uIChvbmx5IFBGTiBjaGFuZ2VzKSwgc28gYSBsb2NrbGVzcyByZWFkIG9mIHRoZSBvYmogdmFsdWVcbiYjNDM7ICogYWx3YXlzIHlpZWxkcyBhIHZhbGlkIGNsYXNzX2lkeC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgWlNfT0JKX1BGTl9TSElGVFx0KEJJVFNfUEVSX0xPTkcgLSBfUEZOX0JJVFMpXG4gXG4gI2RlZmluZSBIVUdFX0JJVFNcdDFcbiAjZGVmaW5lIEZVTExORVNTX0JJVFNcdDRcbkBAIC05OCw5ICYjNDM7MTE3LDYxIEBAXG4gXG4gI2RlZmluZSBaU19NQVhfUEFHRVNfUEVSX1pTUEFHRVx0KF9BQyhDT05GSUdfWlNNQUxMT0NfQ0hBSU5fU0laRSwgVUwpKVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBCaXRzIHRvIGluZGV4IGEgcGFnZSB3aXRoaW4gYSB6c3BhZ2UgPSBjZWlsKGxvZzIoWlNfTUFYX1BBR0VTX1BFUl9aU1BBR0UpKS5cbiYjNDM7ICogQ29tcHV0ZWQgYXQgcHJlcHJvY2Vzc29yIHRpbWUsIGZvciB1c2UgaW4gI2lmIGJlbG93LiAgS2NvbmZpZ1xuJiM0MzsgKiByZXN0cmljdHMgWlNNQUxMT0NfQ0hBSU5fU0laRSB0byBbNCwgMTZdLlxuJiM0MzsgKi9cbiYjNDM7I2lmIFpTX01BWF9QQUdFU19QRVJfWlNQQUdFIFx1MDAzYz0gNFxuJiM0MzsjZGVmaW5lIFpTX1BBR0VTX1BFUl9aU1BBR0VfQklUU1x0MlxuJiM0MzsjZWxpZiBaU19NQVhfUEFHRVNfUEVSX1pTUEFHRSBcdTAwM2M9IDhcbiYjNDM7I2RlZmluZSBaU19QQUdFU19QRVJfWlNQQUdFX0JJVFNcdDNcbiYjNDM7I2VsaWYgWlNfTUFYX1BBR0VTX1BFUl9aU1BBR0UgXHUwMDNjPSAxNlxuJiM0MzsjZGVmaW5lIFpTX1BBR0VTX1BFUl9aU1BBR0VfQklUU1x0NFxuJiM0MzsjZWxzZVxuJiM0MzsjZXJyb3IgXCYjMzQ7WlNNQUxMT0NfQ0hBSU5fU0laRSBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2UgWzQsMTZdXCYjMzQ7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQml0cyB0byBpbmRleCBhbiBvYmplY3Qgd2l0aGluIGEgc2luZ2xlIFBBR0VfU0laRSBhdCB0aGUgc21hbGxlc3RcbiYjNDM7ICogcG9zc2libGUgb2JqZWN0IHNpemU6IGxvZzIoUEFHRV9TSVpFIC8gMzIpID0gUEFHRV9TSElGVCAtIDUuXG4mIzQzOyAqIDMyIGlzIHRoZSBoYXJkIGZsb29yIG9mIFpTX01JTl9BTExPQ19TSVpFLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBaU19PQkpTX1BFUl9QQUdFX0JJVFNcdChQQUdFX1NISUZUIC0gNSlcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEJpdHMgdG8gaW5kZXggYW55IG9iamVjdCBpbiB0aGUgZGVuc2VzdCBwb3NzaWJsZSB6c3BhZ2UuICBCZWxvdyB0aGlzLFxuJiM0MzsgKiBaU19NSU5fQUxMT0NfU0laRSBpcyBhdXRvLXJhaXNlZCBieSB0aGUgTUFYKDMyLCAuLi4pIGZvcm11bGEgLS0gc3RpbGxcbiYjNDM7ICogY29ycmVjdCwgYnV0IG9iamVjdHMgYXJlIGNvYXJzZXIuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFpTX09CSlNfUEVSX1pTUEFHRV9CSVRTIFxcXG4mIzQzO1x0KFpTX1BBR0VTX1BFUl9aU1BBR0VfQklUUyAmIzQzOyBaU19PQkpTX1BFUl9QQUdFX0JJVFMpXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBFbmNvZGUgY2xhc3NfaWR4IG9ubHkgd2hlbiBvYmogaGFzIHNwYXJlIGJpdHM7IG90aGVyd2lzZVxuJiM0MzsgKiBaU19PQkpfQ0xBU1NfQklUUyBmb2xkcyB0byAwICgzMi1iaXQsIG9yIDY0LWJpdCBVTUwvZmFsbGJhY2spLlxuJiM0MzsgKi9cbiYjNDM7I2lmIEJJVFNfUEVSX0xPTkcgXHUwMDNlPSA2NCBcdTAwMjZcdTAwMjYgXFxcbiYjNDM7XHRaU19PQkpfUEZOX1NISUZUIFx1MDAzZT0gKENMQVNTX0JJVFMgJiM0MzsgMSkgJiM0MzsgWlNfT0JKU19QRVJfWlNQQUdFX0JJVFNcbiYjNDM7I2RlZmluZSBaU19PQkpfQ0xBU1NfQklUU1x0KENMQVNTX0JJVFMgJiM0MzsgMSlcbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBaU19PQkpfQ0xBU1NfQklUU1x0MFxuJiM0MzsjZW5kaWZcbiYjNDM7I2RlZmluZSBaU19PQkpfQ0xBU1NfTUFTS1x0KChfQUMoMSwgVUwpIFx1MDAzY1x1MDAzYyBaU19PQkpfQ0xBU1NfQklUUykgLSAxKVxuJiM0MztcbiYjNDM7I2RlZmluZSBaU19PQkpfSURYX0JJVFNcdFx0KFpTX09CSl9QRk5fU0hJRlQgLSBaU19PQkpfQ0xBU1NfQklUUylcbiYjNDM7I2RlZmluZSBaU19PQkpfSURYX01BU0tcdFx0KChfQUMoMSwgVUwpIFx1MDAzY1x1MDAzYyBaU19PQkpfSURYX0JJVFMpIC0gMSlcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEJlbHQtYW5kLXN1c3BlbmRlcnM6IHRoZSAjaWYgYWJvdmUgYWxyZWFkeSBndWFyYW50ZWVzIHRoaXMgd2hlblxuJiM0MzsgKiBjbGFzc19pZHggaXMgZW5hYmxlZC4gIENhdGNoZXMgZnV0dXJlIHR3ZWFrcyB0aGF0IGJ5cGFzcyBpdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpY19hc3NlcnQoWlNfT0JKX0lEWF9CSVRTIFx1MDAzZT0gWlNfUEFHRVNfUEVSX1pTUEFHRV9CSVRTLFxuJiM0MztcdCAgICAgIFwmIzM0O3pzbWFsbG9jOiBaU19NSU5fQUxMT0NfU0laRSB3b3VsZCBleGNlZWQgWlNfTUFYX0FMTE9DX1NJWkVcJiMzNDspO1xuJiM0MztcbiAvKiBaU19NSU5fQUxMT0NfU0laRSBtdXN0IGJlIG11bHRpcGxlIG9mIFpTX0FMSUdOICovXG4gI2RlZmluZSBaU19NSU5fQUxMT0NfU0laRSBcXFxuLVx0TUFYKDMyLCAoWlNfTUFYX1BBR0VTX1BFUl9aU1BBR0UgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQgXHUwMDNlXHUwMDNlIE9CSl9JTkRFWF9CSVRTKSlcbiYjNDM7XHRNQVgoMzIsIChaU19NQVhfUEFHRVNfUEVSX1pTUEFHRSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCBcdTAwM2VcdTAwM2UgWlNfT0JKX0lEWF9CSVRTKSlcbiAvKiBlYWNoIGNodW5rIGluY2x1ZGVzIGV4dHJhIHNwYWNlIHRvIGtlZXAgaGFuZGxlICovXG4gI2RlZmluZSBaU19NQVhfQUxMT0NfU0laRVx0UEFHRV9TSVpFXG4gXG5AQCAtMzk2LDEwICYjNDM7NDY3LDEzIEBAIHN0YXRpYyB2b2lkIGNhY2hlX2ZyZWVfenNwYWdlKHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcbiBcdGttZW1fY2FjaGVfZnJlZSh6c3BhZ2VfY2FjaGVwLCB6c3BhZ2UpO1xuIH1cbiBcbi0vKiBjbGFzcy1cdTAwM2Vsb2NrKHdoaWNoIG93bnMgdGhlIGhhbmRsZSkgc3luY2hyb25pemVzIHJhY2VzICovXG4mIzQzOy8qXG4mIzQzOyAqIFBhaXJzIHdpdGggUkVBRF9PTkNFKCkgaW4gaGFuZGxlX3RvX29iaigpOiB6c19mcmVlKCkgbWF5IHJlYWQgdGhlXG4mIzQzOyAqIGhhbmRsZSBsb2NrbGVzc2x5LCBzbyBwcmV2ZW50IHN0b3JlIHRlYXJpbmcgaGVyZS5cbiYjNDM7ICovXG4gc3RhdGljIHZvaWQgcmVjb3JkX29iaih1bnNpZ25lZCBsb25nIGhhbmRsZSwgdW5zaWduZWQgbG9uZyBvYmopXG4ge1xuLVx0Kih1bnNpZ25lZCBsb25nICopaGFuZGxlID0gb2JqO1xuJiM0MztcdFdSSVRFX09OQ0UoKih1bnNpZ25lZCBsb25nICopaGFuZGxlLCBvYmopO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgX19tYXliZV91bnVzZWQgaXNfZmlyc3RfenBkZXNjKHN0cnVjdCB6cGRlc2MgKnpwZGVzYylcbkBAIC03MjEsMzMgJiM0Mzs3OTUsNDIgQEAgc3RhdGljIHN0cnVjdCB6cGRlc2MgKmdldF9uZXh0X3pwZGVzYyhzdHJ1Y3QgenBkZXNjICp6cGRlc2MpXG4gc3RhdGljIHZvaWQgb2JqX3RvX2xvY2F0aW9uKHVuc2lnbmVkIGxvbmcgb2JqLCBzdHJ1Y3QgenBkZXNjICoqenBkZXNjLFxuIFx0XHRcdFx0dW5zaWduZWQgaW50ICpvYmpfaWR4KVxuIHtcbi1cdCp6cGRlc2MgPSBwZm5fenBkZXNjKG9iaiBcdTAwM2VcdTAwM2UgT0JKX0lOREVYX0JJVFMpO1xuLVx0Km9ial9pZHggPSAob2JqIFx1MDAyNiBPQkpfSU5ERVhfTUFTSyk7XG4mIzQzO1x0KnpwZGVzYyA9IHBmbl96cGRlc2Mob2JqIFx1MDAzZVx1MDAzZSBaU19PQkpfUEZOX1NISUZUKTtcbiYjNDM7XHQqb2JqX2lkeCA9IChvYmogXHUwMDI2IFpTX09CSl9JRFhfTUFTSyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG9ial90b196cGRlc2ModW5zaWduZWQgbG9uZyBvYmosIHN0cnVjdCB6cGRlc2MgKip6cGRlc2MpXG4ge1xuLVx0KnpwZGVzYyA9IHBmbl96cGRlc2Mob2JqIFx1MDAzZVx1MDAzZSBPQkpfSU5ERVhfQklUUyk7XG4mIzQzO1x0KnpwZGVzYyA9IHBmbl96cGRlc2Mob2JqIFx1MDAzZVx1MDAzZSBaU19PQkpfUEZOX1NISUZUKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogRm9sZHMgdG8gMCB3aGVuIFpTX09CSl9DTEFTU19CSVRTID09IDA7IG5vIGlmZGVmIG5lZWRlZCBhdCBjYWxsZXJzLiAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IG9ial90b19jbGFzc19pZHgodW5zaWduZWQgbG9uZyBvYmopXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKG9iaiBcdTAwM2VcdTAwM2UgWlNfT0JKX0lEWF9CSVRTKSBcdTAwMjYgWlNfT0JKX0NMQVNTX01BU0s7XG4gfVxuIFxuIC8qKlxuLSAqIGxvY2F0aW9uX3RvX29iaiAtIGdldCBvYmogdmFsdWUgZW5jb2RlZCBmcm9tIChcdTAwM2N6cGRlc2NcdTAwM2UsIFx1MDAzY29ial9pZHhcdTAwM2UpXG4mIzQzOyAqIGxvY2F0aW9uX3RvX29iaiAtIGVuY29kZSAoXHUwMDNjenBkZXNjXHUwMDNlLCBcdTAwM2NvYmpfaWR4XHUwMDNlLCBcdTAwM2NjbGFzc19pZHhcdTAwM2UpIGludG8gb2JqIHZhbHVlXG4gICogQHpwZGVzYzogenBkZXNjIG9iamVjdCByZXNpZGVzIGluIHpzcGFnZVxuICAqIEBvYmpfaWR4OiBvYmplY3QgaW5kZXhcbiYjNDM7ICogQGNsYXNzX2lkeDogc2l6ZSBjbGFzcyBpbmRleDsgaWdub3JlZCB3aGVuIFpTX09CSl9DTEFTU19CSVRTID09IDBcbiAgKi9cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBsb2NhdGlvbl90b19vYmooc3RydWN0IHpwZGVzYyAqenBkZXNjLCB1bnNpZ25lZCBpbnQgb2JqX2lkeClcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgbG9jYXRpb25fdG9fb2JqKHN0cnVjdCB6cGRlc2MgKnpwZGVzYywgdW5zaWduZWQgaW50IG9ial9pZHgsXG4mIzQzO1x0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgY2xhc3NfaWR4KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgb2JqO1xuIFxuLVx0b2JqID0genBkZXNjX3Bmbih6cGRlc2MpIFx1MDAzY1x1MDAzYyBPQkpfSU5ERVhfQklUUztcbi1cdG9iaiB8PSBvYmpfaWR4IFx1MDAyNiBPQkpfSU5ERVhfTUFTSztcbiYjNDM7XHRvYmogID0genBkZXNjX3Bmbih6cGRlc2MpIFx1MDAzY1x1MDAzYyBaU19PQkpfUEZOX1NISUZUO1xuJiM0MztcdG9iaiB8PSAodW5zaWduZWQgbG9uZykoY2xhc3NfaWR4IFx1MDAyNiBaU19PQkpfQ0xBU1NfTUFTSykgXHUwMDNjXHUwMDNjIFpTX09CSl9JRFhfQklUUztcbiYjNDM7XHRvYmogfD0gb2JqX2lkeCBcdTAwMjYgWlNfT0JKX0lEWF9NQVNLO1xuIFxuIFx0cmV0dXJuIG9iajtcbiB9XG4gXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgaGFuZGxlX3RvX29iaih1bnNpZ25lZCBsb25nIGhhbmRsZSlcbiB7XG4tXHRyZXR1cm4gKih1bnNpZ25lZCBsb25nICopaGFuZGxlO1xuJiM0MztcdHJldHVybiBSRUFEX09OQ0UoKih1bnNpZ25lZCBsb25nICopaGFuZGxlKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIG9ial9hbGxvY2F0ZWQoc3RydWN0IHpwZGVzYyAqenBkZXNjLCB2b2lkICpvYmosXG5AQCAtODAxLDEzICYjNDM7ODg0LDI2IEBAIHN0YXRpYyBpbnQgdHJ5bG9ja196c3BhZ2Uoc3RydWN0IHpzcGFnZSAqenNwYWdlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fZnJlZV96c3BhZ2Uoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcyxcbi1cdFx0XHRcdHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcbiYjNDM7LypcbiYjNDM7ICogVGhyZWUgZnJlZSBoZWxwZXJzLCBrZXB0IGFwYXJ0IGhlcmU6XG4mIzQzOyAqXG4mIzQzOyAqIF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoKTogYmFyZSBjb3JlOyB3YWxrcyB6cGRlc2NzIGFuZCByZXR1cm5zIHBhZ2VzXG4mIzQzOyAqICAgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvci4gIENhbGxlciBvd25zIGFsbCB6cGRlc2MgbG9ja3MgYW5kIGhhc1xuJiM0MzsgKiAgIHJlbW92ZWQgdGhlIHpzcGFnZSBmcm9tIGl0cyBjbGFzcyBsaXN0LiAgVXNlZCBieSB6c19mcmVlKCkgb3V0c2lkZVxuJiM0MzsgKiAgIGNsYXNzLVx1MDAzZWxvY2sgc28gdGhlIGJ1ZGR5LXNpZGUgd29yayBkb2VzIG5vdCBzdGFsbCB0aGUgY2xhc3MuXG4mIzQzOyAqXG4mIzQzOyAqIF9fZnJlZV96c3BhZ2UoKTogX19mcmVlX3pzcGFnZV9sb2NrbGVzcygpICYjNDM7IHBlci1jbGFzcyBhY2NvdW50aW5nLFxuJiM0MzsgKiAgIHVuZGVyIGNsYXNzLVx1MDAzZWxvY2suICBVc2VkIGJ5IGFzeW5jX2ZyZWVfenNwYWdlKCksIHRoZSB3b3JrZXIgZm9yXG4mIzQzOyAqICAgenNwYWdlcyB3aG9zZSB0cnlsb2NrX3pzcGFnZSgpIGZhaWxlZC5cbiYjNDM7ICpcbiYjNDM7ICogZnJlZV96c3BhZ2UoKTogZnVsbCB3cmFwcGVyIC0gdHJ5bG9jayB6cGRlc2NzLCByZW1vdmUgZnJvbSBjbGFzc1xuJiM0MzsgKiAgIGxpc3QsIGNhbGwgX19mcmVlX3pzcGFnZSgpOyBraWNrcyBkZWZlcnJlZCBmcmVlIG9uIGNvbnRlbnRpb24uXG4mIzQzOyAqICAgVXNlZCBieSBjb21wYWN0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIF9fZnJlZV96c3BhZ2VfbG9ja2xlc3Moc3RydWN0IHpzcGFnZSAqenNwYWdlKVxuIHtcbiBcdHN0cnVjdCB6cGRlc2MgKnpwZGVzYywgKm5leHQ7XG4gXG4tXHRhc3NlcnRfc3Bpbl9sb2NrZWQoXHUwMDI2Y2xhc3MtXHUwMDNlbG9jayk7XG4tXG4gXHRWTV9CVUdfT04oZ2V0X3pzcGFnZV9pbnVzZSh6c3BhZ2UpKTtcbiBcdFZNX0JVR19PTih6c3BhZ2UtXHUwMDNlZnVsbG5lc3MgIT0gWlNfSU5VU0VfUkFUSU9fMCk7XG4gXG5AQCAtODIzLDcgJiM0Mzs5MTksMTMgQEAgc3RhdGljIHZvaWQgX19mcmVlX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLFxuIFx0fSB3aGlsZSAoenBkZXNjICE9IE5VTEwpO1xuIFxuIFx0Y2FjaGVfZnJlZV96c3BhZ2UoenNwYWdlKTtcbiYjNDM7fVxuIFxuJiM0MztzdGF0aWMgdm9pZCBfX2ZyZWVfenNwYWdlKHN0cnVjdCB6c19wb29sICpwb29sLCBzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3MsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHpzcGFnZSAqenNwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0YXNzZXJ0X3NwaW5fbG9ja2VkKFx1MDAyNmNsYXNzLVx1MDAzZWxvY2spO1xuJiM0MztcdF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoenNwYWdlKTtcbiBcdGNsYXNzX3N0YXRfc3ViKGNsYXNzLCBaU19PQkpTX0FMTE9DQVRFRCwgY2xhc3MtXHUwMDNlb2Jqc19wZXJfenNwYWdlKTtcbiBcdGF0b21pY19sb25nX3N1YihjbGFzcy1cdTAwM2VwYWdlc19wZXJfenNwYWdlLCBcdTAwMjZwb29sLVx1MDAzZXBhZ2VzX2FsbG9jYXRlZCk7XG4gfVxuQEAgLTEyNzYsNyAmIzQzOzEzNzgsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBvYmpfbWFsbG9jKHN0cnVjdCB6c19wb29sICpwb29sLFxuIFx0a3VubWFwX2xvY2FsKHZhZGRyKTtcbiBcdG1vZF96c3BhZ2VfaW51c2UoenNwYWdlLCAxKTtcbiBcbi1cdG9iaiA9IGxvY2F0aW9uX3RvX29iaihtX3pwZGVzYywgb2JqKTtcbiYjNDM7XHRvYmogPSBsb2NhdGlvbl90b19vYmoobV96cGRlc2MsIG9iaiwgenNwYWdlLVx1MDAzZWNsYXNzKTtcbiBcdHJlY29yZF9vYmooaGFuZGxlLCBvYmopO1xuIFxuIFx0cmV0dXJuIG9iajtcbkBAIC0xMzgxLDM3ICYjNDM7MTQ4Myw4OSBAQCBzdGF0aWMgdm9pZCBvYmpfZnJlZShpbnQgY2xhc3Nfc2l6ZSwgdW5zaWduZWQgbG9uZyBvYmopXG4gXHRtb2RfenNwYWdlX2ludXNlKHpzcGFnZSwgLTEpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogUmVzb2x2ZSBAaGFuZGxlIHRvIGl0cyB6c3BhZ2UgLyBzaXplX2NsYXNzIGFuZCBhY3F1aXJlIGNsYXNzLVx1MDAzZWxvY2suXG4mIzQzOyAqXG4mIzQzOyAqIFdoZW4gY2xhc3NfaWR4IGlzIGVuY29kZWQgaW4gb2JqIChaU19PQkpfQ0xBU1NfQklUUyBcdTAwM2UgMCksIGl0IGlzXG4mIzQzOyAqIGludmFyaWFudCB1bmRlciBwYWdlIG1pZ3JhdGlvbiwgc28gdGhlIGhhbmRsZSBjYW4gYmUgcmVhZCBsb2NrbGVzc2x5XG4mIzQzOyAqIHRvIHBpY2sgdGhlIHNpemVfY2xhc3MuICBPbmNlIGNsYXNzLVx1MDAzZWxvY2sgaXMgaGVsZCBtaWdyYXRpb24gaXNcbiYjNDM7ICogYmxvY2tlZCBhbmQgdGhlIGhhbmRsZSBpcyByZS1yZWFkIHRvIG9idGFpbiBhIHN0YWJsZSBQRk4uXG4mIzQzOyAqXG4mIzQzOyAqIE90aGVyd2lzZSAoMzItYml0LCBvciA2NC1iaXQgZmFsbGJhY2sgcGF0aHMgbGlrZSBVTUwgd2hlcmUgdGhlXG4mIzQzOyAqIGVuY29kaW5nIGlzIGRpc2FibGVkKSwgZmFsbCBiYWNrIHRvIHBvb2wtXHUwMDNlbG9jayBmb3IgdGhlIGxvb2t1cC5cbiYjNDM7ICovXG4mIzQzOyNpZiBaU19PQkpfQ0xBU1NfQklUUyBcdTAwM2UgMFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgb2JqX2NsYXNzX2dldF9hbmRfbG9jayhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXG4mIzQzO1x0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqb2JqcCwgc3RydWN0IHpzcGFnZSAqKnpzcGFnZXAsXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IHNpemVfY2xhc3MgKipjbGFzc3ApXG4mIzQzO1x0X19hY3F1aXJlcyhcdTAwMjYoKmNsYXNzcCktXHUwMDNlbG9jaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6cGRlc2MgKmZfenBkZXNjO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgb2JqO1xuJiM0MztcbiYjNDM7XHRvYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7XG4mIzQzO1x0KmNsYXNzcCA9IHBvb2wtXHUwMDNlc2l6ZV9jbGFzc1tvYmpfdG9fY2xhc3NfaWR4KG9iaildO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjYoKmNsYXNzcCktXHUwMDNlbG9jayk7XG4mIzQzO1x0LyogUmUtcmVhZCB1bmRlciBjbGFzcy1cdTAwM2Vsb2NrOiBQRk4gaXMgbm93IHN0YWJsZSB2cyBtaWdyYXRpb24uICovXG4mIzQzO1x0b2JqID0gaGFuZGxlX3RvX29iaihoYW5kbGUpO1xuJiM0MztcdG9ial90b196cGRlc2Mob2JqLCBcdTAwMjZmX3pwZGVzYyk7XG4mIzQzO1x0KnpzcGFnZXAgPSBnZXRfenNwYWdlKGZfenBkZXNjKTtcbiYjNDM7XHQqb2JqcCA9IG9iajtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgb2JqX2NsYXNzX2dldF9hbmRfbG9jayhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXG4mIzQzO1x0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqb2JqcCwgc3RydWN0IHpzcGFnZSAqKnpzcGFnZXAsXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IHNpemVfY2xhc3MgKipjbGFzc3ApXG4mIzQzO1x0X19hY3F1aXJlcyhcdTAwMjYoKmNsYXNzcCktXHUwMDNlbG9jaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6cGRlc2MgKmZfenBkZXNjO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgb2JqO1xuJiM0MztcbiYjNDM7XHRyZWFkX2xvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRvYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7XG4mIzQzO1x0b2JqX3RvX3pwZGVzYyhvYmosIFx1MDAyNmZfenBkZXNjKTtcbiYjNDM7XHQqenNwYWdlcCA9IGdldF96c3BhZ2UoZl96cGRlc2MpO1xuJiM0MztcdCpjbGFzc3AgPSB6c3BhZ2VfY2xhc3MocG9vbCwgKnpzcGFnZXApO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjYoKmNsYXNzcCktXHUwMDNlbG9jayk7XG4mIzQzO1x0cmVhZF91bmxvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHQqb2JqcCA9IG9iajtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gdm9pZCB6c19mcmVlKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSlcbiB7XG4gXHRzdHJ1Y3QgenNwYWdlICp6c3BhZ2U7XG4tXHRzdHJ1Y3QgenBkZXNjICpmX3pwZGVzYztcbiBcdHVuc2lnbmVkIGxvbmcgb2JqO1xuIFx0c3RydWN0IHNpemVfY2xhc3MgKmNsYXNzO1xuIFx0aW50IGZ1bGxuZXNzO1xuJiM0MztcdHN0cnVjdCB6c3BhZ2UgKnpzcGFnZV90b19mcmVlID0gTlVMTDtcbiBcbiBcdGlmIChJU19FUlJfT1JfTlVMTCgodm9pZCAqKWhhbmRsZSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdC8qXG4tXHQgKiBUaGUgcG9vbC1cdTAwM2Vsb2NrIHByb3RlY3RzIHRoZSByYWNlIHdpdGggenBhZ2UmIzM5O3MgbWlncmF0aW9uXG4tXHQgKiBzbyBpdCYjMzk7cyBzYWZlIHRvIGdldCB0aGUgcGFnZSBmcm9tIGhhbmRsZS5cbi1cdCAqL1xuLVx0cmVhZF9sb2NrKFx1MDAyNnBvb2wtXHUwMDNlbG9jayk7XG4tXHRvYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7XG4tXHRvYmpfdG9fenBkZXNjKG9iaiwgXHUwMDI2Zl96cGRlc2MpO1xuLVx0enNwYWdlID0gZ2V0X3pzcGFnZShmX3pwZGVzYyk7XG4tXHRjbGFzcyA9IHpzcGFnZV9jbGFzcyhwb29sLCB6c3BhZ2UpO1xuLVx0c3Bpbl9sb2NrKFx1MDAyNmNsYXNzLVx1MDAzZWxvY2spO1xuLVx0cmVhZF91bmxvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrKHBvb2wsIGhhbmRsZSwgXHUwMDI2b2JqLCBcdTAwMjZ6c3BhZ2UsIFx1MDAyNmNsYXNzKTtcbiBcbiBcdGNsYXNzX3N0YXRfc3ViKGNsYXNzLCBaU19PQkpTX0lOVVNFLCAxKTtcbiBcdG9ial9mcmVlKGNsYXNzLVx1MDAzZXNpemUsIG9iaik7XG4gXG4gXHRmdWxsbmVzcyA9IGZpeF9mdWxsbmVzc19ncm91cChjbGFzcywgenNwYWdlKTtcbi1cdGlmIChmdWxsbmVzcyA9PSBaU19JTlVTRV9SQVRJT18wKVxuLVx0XHRmcmVlX3pzcGFnZShwb29sLCBjbGFzcywgenNwYWdlKTtcbiYjNDM7XHRpZiAoZnVsbG5lc3MgPT0gWlNfSU5VU0VfUkFUSU9fMCkge1xuJiM0MztcdFx0aWYgKHRyeWxvY2tfenNwYWdlKHpzcGFnZSkpIHtcbiYjNDM7XHRcdFx0cmVtb3ZlX3pzcGFnZShjbGFzcywgenNwYWdlKTtcbiYjNDM7XHRcdFx0Y2xhc3Nfc3RhdF9zdWIoY2xhc3MsIFpTX09CSlNfQUxMT0NBVEVELFxuJiM0MztcdFx0XHRcdCAgICAgICBjbGFzcy1cdTAwM2VvYmpzX3Blcl96c3BhZ2UpO1xuJiM0MztcdFx0XHR6c3BhZ2VfdG9fZnJlZSA9IHpzcGFnZTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGtpY2tfZGVmZXJyZWRfZnJlZShwb29sKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXG4gXHRzcGluX3VubG9jayhcdTAwMjZjbGFzcy1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHpzcGFnZV90b19mcmVlKSB7XG4mIzQzO1x0XHRfX2ZyZWVfenNwYWdlX2xvY2tsZXNzKHpzcGFnZV90b19mcmVlKTtcbiYjNDM7XHRcdGF0b21pY19sb25nX3N1YihjbGFzcy1cdTAwM2VwYWdlc19wZXJfenNwYWdlLCBcdTAwMjZwb29sLVx1MDAzZXBhZ2VzX2FsbG9jYXRlZCk7XG4mIzQzO1x0fVxuIFx0Y2FjaGVfZnJlZV9oYW5kbGUoaGFuZGxlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoenNfZnJlZSk7XG5AQCAtMTc2Miw3ICYjNDM7MTkxNiw4IEBAIHN0YXRpYyBpbnQgenNfcGFnZV9taWdyYXRlKHN0cnVjdCBwYWdlICpuZXdwYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcbiBcdFx0XHRvbGRfb2JqID0gaGFuZGxlX3RvX29iaihoYW5kbGUpO1xuIFx0XHRcdG9ial90b19sb2NhdGlvbihvbGRfb2JqLCBcdTAwMjZkdW1teSwgXHUwMDI2b2JqX2lkeCk7XG4tXHRcdFx0bmV3X29iaiA9ICh1bnNpZ25lZCBsb25nKWxvY2F0aW9uX3RvX29iaihuZXd6cGRlc2MsIG9ial9pZHgpO1xuJiM0MztcdFx0XHRuZXdfb2JqID0gbG9jYXRpb25fdG9fb2JqKG5ld3pwZGVzYywgb2JqX2lkeCxcbiYjNDM7XHRcdFx0XHRcdFx0ICBvYmpfdG9fY2xhc3NfaWR4KG9sZF9vYmopKTtcbiBcdFx0XHRyZWNvcmRfb2JqKGhhbmRsZSwgbmV3X29iaik7XG4gXHRcdH1cbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwMjoxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU01BTExPQyYjMzQ7LAogICAgJiMzNDtaUkFNJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enNfZnJlZSYjMzQ7LAogICAgJiMzNDtvYmpfbWFsbG9jJiMzNDssCiAgICAmIzM0O3pzX3BhZ2VfbWlncmF0ZSYjMzQ7LAogICAgJiMzNDthc3luY19mcmVlX3pzcGFnZSYjMzQ7LAogICAgJiMzNDtfX2ZyZWVfenNwYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBvcHRpbWl6YXRpb24gZm9yIHpzX2ZyZWUoKSBpbiB6c21hbGxvYyBieSBlbmNvZGluZyB0aGUgY2xhc3NfaWR4IGludG8gdGhlIG9iamVjdCBoYW5kbGUuIFRoaXMgYXZvaWRzIHRha2luZyBwb29sLVx1MDAzZWxvY2sgZHVyaW5nIGZyZWUgb3BlcmF0aW9ucy4gSXQgbW9kaWZpZXMgdGhlIGJpdCBsYXlvdXQgb2YgdGhlIG9iamVjdCBoYW5kbGUgYW5kIHVwZGF0ZXMgdGhlIGFsbG9jYXRpb24sIGZyZWVpbmcsIGFuZCBwYWdlIG1pZ3JhdGlvbiBwYXRocy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbG9ja2xlc3Mgc3luY2hyb25pemF0aW9uIGFuZCBiaXR3aXNlIG9wZXJhdGlvbnMgYXJlIGNvcnJlY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ2NzU4MmE4MzZkNTA0ZWFjOTY3Zjg2Nzc5NTdjNzFmY2YwOTI3MTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1biAyNiAwMjoxNTozMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3pzbWFsbG9jLmMgYi9tbS96c21hbGxvYy5jCmluZGV4IDYzMTI4ZGRiNzk1OThmLi5iZjc0ZTY5NWQ5NzdkMyAxMDA2NDQKLS0tIGEvbW0venNtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS96c21hbGxvYy5jCkBAIC0yMSw2ICYjNDM7MjEsMTAgQEAKICAqCXBvb2wtJmd0O2xvY2sKICAqCWNsYXNzLSZndDtsb2NrCiAgKgl6c3BhZ2UtJmd0O2xvY2sKJiM0MzsgKgomIzQzOyAqIFdoZW4gWlNfT0JKX0NMQVNTX0JJVFMgJmd0OyAwLCB6c19mcmVlKCkgc2tpcHMgcG9vbC0mZ3Q7bG9jazsgaXQgcGlja3MKJiM0MzsgKiB0aGUgc2l6ZV9jbGFzcyBmcm9tIG9iaiYjMzk7cyBlbmNvZGVkIGNsYXNzX2lkeCBhbmQgc2VyaWFsaXplcyBhZ2FpbnN0CiYjNDM7ICogcGFnZSBtaWdyYXRpb24gdmlhIGNsYXNzLSZndDtsb2NrLgogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKQEAgLTY3LDggJiM0Mzs3MSw4IEBACiAjZGVmaW5lIE1BWF9QT1NTSUJMRV9QSFlTTUVNX0JJVFMgTUFYX1BIWVNNRU1fQklUUwogI2Vsc2UKIC8qCi0gKiBJZiB0aGlzIGRlZmluaXRpb24gb2YgTUFYX1BIWVNNRU1fQklUUyBpcyB1c2VkLCBPQkpfSU5ERVhfQklUUyB3aWxsIGp1c3QKLSAqIGJlIFBBR0VfU0hJRlQKJiM0MzsgKiBJZiB0aGlzIGRlZmluaXRpb24gb2YgTUFYX1BIWVNNRU1fQklUUyBpcyB1c2VkLCBaU19PQkpfUEZOX1NISUZUIHdpbGwKJiM0MzsgKiBqdXN0IGJlIFBBR0VfU0hJRlQKICAqLwogI2RlZmluZSBNQVhfUE9TU0lCTEVfUEhZU01FTV9CSVRTIEJJVFNfUEVSX0xPTkcKICNlbmRpZgpAQCAtODgsOCAmIzQzOzkyLDIzIEBACiAjZGVmaW5lIE9CSl9UQUdfQklUUwkxCiAjZGVmaW5lIE9CSl9UQUdfTUFTSwlPQkpfQUxMT0NBVEVEX1RBRwogCi0jZGVmaW5lIE9CSl9JTkRFWF9CSVRTCShCSVRTX1BFUl9MT05HIC0gX1BGTl9CSVRTKQotI2RlZmluZSBPQkpfSU5ERVhfTUFTSwkoKF9BQygxLCBVTCkgJmx0OyZsdDsgT0JKX0lOREVYX0JJVFMpIC0gMSkKJiM0MzsvKgomIzQzOyAqIG9iaiBpcyBlbmNvZGVkIGFzIFtQRk4gfCBjbGFzc19pZHggfCBvYmpfaWR4XSB3aXRoaW4gYW4gdW5zaWduZWQgbG9uZzoKJiM0MzsgKgomIzQzOyAqICAgfCZsdDstLSBfUEZOX0JJVFMgLS0mZ3Q7fCZsdDstLSBaU19PQkpfQ0xBU1NfQklUUyAtLSZndDt8Jmx0Oy0tIFpTX09CSl9JRFhfQklUUyAtLSZndDt8CiYjNDM7ICogICAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7CiYjNDM7ICogICB8ICAgICAgIFBGTiAgICAgICB8ICAgICAgICBjbGFzc19pZHggICAgICAgIHwgICAgICAgIG9ial9pZHggICAgICAgIHwKJiM0MzsgKiAgICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzsKJiM0MzsgKiAgTVNCICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMU0IKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgIHwKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICYjNDM7LS0gWlNfT0JKX1BGTl9TSElGVAomIzQzOyAqCiYjNDM7ICogRW5jb2RpbmcgY2xhc3NfaWR4IGludG8gb2JqIGxldHMgenNfZnJlZSgpIGxvY2F0ZSB0aGUgc2l6ZV9jbGFzcwomIzQzOyAqIHdpdGhvdXQgaG9sZGluZyBwb29sLSZndDtsb2NrOyBjbGFzc19pZHggaXMgaW52YXJpYW50IGFjcm9zcyBwYWdlCiYjNDM7ICogbWlncmF0aW9uIChvbmx5IFBGTiBjaGFuZ2VzKSwgc28gYSBsb2NrbGVzcyByZWFkIG9mIHRoZSBvYmogdmFsdWUKJiM0MzsgKiBhbHdheXMgeWllbGRzIGEgdmFsaWQgY2xhc3NfaWR4LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgWlNfT0JKX1BGTl9TSElGVAkoQklUU19QRVJfTE9ORyAtIF9QRk5fQklUUykKIAogI2RlZmluZSBIVUdFX0JJVFMJMQogI2RlZmluZSBGVUxMTkVTU19CSVRTCTQKQEAgLTk4LDkgJiM0MzsxMTcsNjEgQEAKIAogI2RlZmluZSBaU19NQVhfUEFHRVNfUEVSX1pTUEFHRQkoX0FDKENPTkZJR19aU01BTExPQ19DSEFJTl9TSVpFLCBVTCkpCiAKJiM0MzsvKgomIzQzOyAqIEJpdHMgdG8gaW5kZXggYSBwYWdlIHdpdGhpbiBhIHpzcGFnZSA9IGNlaWwobG9nMihaU19NQVhfUEFHRVNfUEVSX1pTUEFHRSkpLgomIzQzOyAqIENvbXB1dGVkIGF0IHByZXByb2Nlc3NvciB0aW1lLCBmb3IgdXNlIGluICNpZiBiZWxvdy4gIEtjb25maWcKJiM0MzsgKiByZXN0cmljdHMgWlNNQUxMT0NfQ0hBSU5fU0laRSB0byBbNCwgMTZdLgomIzQzOyAqLwomIzQzOyNpZiBaU19NQVhfUEFHRVNfUEVSX1pTUEFHRSAmbHQ7PSA0CiYjNDM7I2RlZmluZSBaU19QQUdFU19QRVJfWlNQQUdFX0JJVFMJMgomIzQzOyNlbGlmIFpTX01BWF9QQUdFU19QRVJfWlNQQUdFICZsdDs9IDgKJiM0MzsjZGVmaW5lIFpTX1BBR0VTX1BFUl9aU1BBR0VfQklUUwkzCiYjNDM7I2VsaWYgWlNfTUFYX1BBR0VTX1BFUl9aU1BBR0UgJmx0Oz0gMTYKJiM0MzsjZGVmaW5lIFpTX1BBR0VTX1BFUl9aU1BBR0VfQklUUwk0CiYjNDM7I2Vsc2UKJiM0MzsjZXJyb3IgJiMzNDtaU01BTExPQ19DSEFJTl9TSVpFIG91dCBvZiBleHBlY3RlZCByYW5nZSBbNCwxNl0mIzM0OwomIzQzOyNlbmRpZgomIzQzOwomIzQzOy8qCiYjNDM7ICogQml0cyB0byBpbmRleCBhbiBvYmplY3Qgd2l0aGluIGEgc2luZ2xlIFBBR0VfU0laRSBhdCB0aGUgc21hbGxlc3QKJiM0MzsgKiBwb3NzaWJsZSBvYmplY3Qgc2l6ZTogbG9nMihQQUdFX1NJWkUgLyAzMikgPSBQQUdFX1NISUZUIC0gNS4KJiM0MzsgKiAzMiBpcyB0aGUgaGFyZCBmbG9vciBvZiBaU19NSU5fQUxMT0NfU0laRS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFpTX09CSlNfUEVSX1BBR0VfQklUUwkoUEFHRV9TSElGVCAtIDUpCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBCaXRzIHRvIGluZGV4IGFueSBvYmplY3QgaW4gdGhlIGRlbnNlc3QgcG9zc2libGUgenNwYWdlLiAgQmVsb3cgdGhpcywKJiM0MzsgKiBaU19NSU5fQUxMT0NfU0laRSBpcyBhdXRvLXJhaXNlZCBieSB0aGUgTUFYKDMyLCAuLi4pIGZvcm11bGEgLS0gc3RpbGwKJiM0MzsgKiBjb3JyZWN0LCBidXQgb2JqZWN0cyBhcmUgY29hcnNlci4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFpTX09CSlNfUEVSX1pTUEFHRV9CSVRTIFwKJiM0MzsJKFpTX1BBR0VTX1BFUl9aU1BBR0VfQklUUyAmIzQzOyBaU19PQkpTX1BFUl9QQUdFX0JJVFMpCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBFbmNvZGUgY2xhc3NfaWR4IG9ubHkgd2hlbiBvYmogaGFzIHNwYXJlIGJpdHM7IG90aGVyd2lzZQomIzQzOyAqIFpTX09CSl9DTEFTU19CSVRTIGZvbGRzIHRvIDAgKDMyLWJpdCwgb3IgNjQtYml0IFVNTC9mYWxsYmFjaykuCiYjNDM7ICovCiYjNDM7I2lmIEJJVFNfUEVSX0xPTkcgJmd0Oz0gNjQgJmFtcDsmYW1wOyBcCiYjNDM7CVpTX09CSl9QRk5fU0hJRlQgJmd0Oz0gKENMQVNTX0JJVFMgJiM0MzsgMSkgJiM0MzsgWlNfT0JKU19QRVJfWlNQQUdFX0JJVFMKJiM0MzsjZGVmaW5lIFpTX09CSl9DTEFTU19CSVRTCShDTEFTU19CSVRTICYjNDM7IDEpCiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIFpTX09CSl9DTEFTU19CSVRTCTAKJiM0MzsjZW5kaWYKJiM0MzsjZGVmaW5lIFpTX09CSl9DTEFTU19NQVNLCSgoX0FDKDEsIFVMKSAmbHQ7Jmx0OyBaU19PQkpfQ0xBU1NfQklUUykgLSAxKQomIzQzOwomIzQzOyNkZWZpbmUgWlNfT0JKX0lEWF9CSVRTCQkoWlNfT0JKX1BGTl9TSElGVCAtIFpTX09CSl9DTEFTU19CSVRTKQomIzQzOyNkZWZpbmUgWlNfT0JKX0lEWF9NQVNLCQkoKF9BQygxLCBVTCkgJmx0OyZsdDsgWlNfT0JKX0lEWF9CSVRTKSAtIDEpCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBCZWx0LWFuZC1zdXNwZW5kZXJzOiB0aGUgI2lmIGFib3ZlIGFscmVhZHkgZ3VhcmFudGVlcyB0aGlzIHdoZW4KJiM0MzsgKiBjbGFzc19pZHggaXMgZW5hYmxlZC4gIENhdGNoZXMgZnV0dXJlIHR3ZWFrcyB0aGF0IGJ5cGFzcyBpdC4KJiM0MzsgKi8KJiM0MztzdGF0aWNfYXNzZXJ0KFpTX09CSl9JRFhfQklUUyAmZ3Q7PSBaU19QQUdFU19QRVJfWlNQQUdFX0JJVFMsCiYjNDM7CSAgICAgICYjMzQ7enNtYWxsb2M6IFpTX01JTl9BTExPQ19TSVpFIHdvdWxkIGV4Y2VlZCBaU19NQVhfQUxMT0NfU0laRSYjMzQ7KTsKJiM0MzsKIC8qIFpTX01JTl9BTExPQ19TSVpFIG11c3QgYmUgbXVsdGlwbGUgb2YgWlNfQUxJR04gKi8KICNkZWZpbmUgWlNfTUlOX0FMTE9DX1NJWkUgXAotCU1BWCgzMiwgKFpTX01BWF9QQUdFU19QRVJfWlNQQUdFICZsdDsmbHQ7IFBBR0VfU0hJRlQgJmd0OyZndDsgT0JKX0lOREVYX0JJVFMpKQomIzQzOwlNQVgoMzIsIChaU19NQVhfUEFHRVNfUEVSX1pTUEFHRSAmbHQ7Jmx0OyBQQUdFX1NISUZUICZndDsmZ3Q7IFpTX09CSl9JRFhfQklUUykpCiAvKiBlYWNoIGNodW5rIGluY2x1ZGVzIGV4dHJhIHNwYWNlIHRvIGtlZXAgaGFuZGxlICovCiAjZGVmaW5lIFpTX01BWF9BTExPQ19TSVpFCVBBR0VfU0laRQogCkBAIC0zOTYsMTAgJiM0Mzs0NjcsMTMgQEAgc3RhdGljIHZvaWQgY2FjaGVfZnJlZV96c3BhZ2Uoc3RydWN0IHpzcGFnZSAqenNwYWdlKQogCWttZW1fY2FjaGVfZnJlZSh6c3BhZ2VfY2FjaGVwLCB6c3BhZ2UpOwogfQogCi0vKiBjbGFzcy0mZ3Q7bG9jayh3aGljaCBvd25zIHRoZSBoYW5kbGUpIHN5bmNocm9uaXplcyByYWNlcyAqLwomIzQzOy8qCiYjNDM7ICogUGFpcnMgd2l0aCBSRUFEX09OQ0UoKSBpbiBoYW5kbGVfdG9fb2JqKCk6IHpzX2ZyZWUoKSBtYXkgcmVhZCB0aGUKJiM0MzsgKiBoYW5kbGUgbG9ja2xlc3NseSwgc28gcHJldmVudCBzdG9yZSB0ZWFyaW5nIGhlcmUuCiYjNDM7ICovCiBzdGF0aWMgdm9pZCByZWNvcmRfb2JqKHVuc2lnbmVkIGxvbmcgaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9iaikKIHsKLQkqKHVuc2lnbmVkIGxvbmcgKiloYW5kbGUgPSBvYmo7CiYjNDM7CVdSSVRFX09OQ0UoKih1bnNpZ25lZCBsb25nICopaGFuZGxlLCBvYmopOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgX19tYXliZV91bnVzZWQgaXNfZmlyc3RfenBkZXNjKHN0cnVjdCB6cGRlc2MgKnpwZGVzYykKQEAgLTcyMSwzMyAmIzQzOzc5NSw0MiBAQCBzdGF0aWMgc3RydWN0IHpwZGVzYyAqZ2V0X25leHRfenBkZXNjKHN0cnVjdCB6cGRlc2MgKnpwZGVzYykKIHN0YXRpYyB2b2lkIG9ial90b19sb2NhdGlvbih1bnNpZ25lZCBsb25nIG9iaiwgc3RydWN0IHpwZGVzYyAqKnpwZGVzYywKIAkJCQl1bnNpZ25lZCBpbnQgKm9ial9pZHgpCiB7Ci0JKnpwZGVzYyA9IHBmbl96cGRlc2Mob2JqICZndDsmZ3Q7IE9CSl9JTkRFWF9CSVRTKTsKLQkqb2JqX2lkeCA9IChvYmogJmFtcDsgT0JKX0lOREVYX01BU0spOwomIzQzOwkqenBkZXNjID0gcGZuX3pwZGVzYyhvYmogJmd0OyZndDsgWlNfT0JKX1BGTl9TSElGVCk7CiYjNDM7CSpvYmpfaWR4ID0gKG9iaiAmYW1wOyBaU19PQkpfSURYX01BU0spOwogfQogCiBzdGF0aWMgdm9pZCBvYmpfdG9fenBkZXNjKHVuc2lnbmVkIGxvbmcgb2JqLCBzdHJ1Y3QgenBkZXNjICoqenBkZXNjKQogewotCSp6cGRlc2MgPSBwZm5fenBkZXNjKG9iaiAmZ3Q7Jmd0OyBPQkpfSU5ERVhfQklUUyk7CiYjNDM7CSp6cGRlc2MgPSBwZm5fenBkZXNjKG9iaiAmZ3Q7Jmd0OyBaU19PQkpfUEZOX1NISUZUKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogRm9sZHMgdG8gMCB3aGVuIFpTX09CSl9DTEFTU19CSVRTID09IDA7IG5vIGlmZGVmIG5lZWRlZCBhdCBjYWxsZXJzLiAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgb2JqX3RvX2NsYXNzX2lkeCh1bnNpZ25lZCBsb25nIG9iaikKJiM0Mzt7CiYjNDM7CXJldHVybiAob2JqICZndDsmZ3Q7IFpTX09CSl9JRFhfQklUUykgJmFtcDsgWlNfT0JKX0NMQVNTX01BU0s7CiB9CiAKIC8qKgotICogbG9jYXRpb25fdG9fb2JqIC0gZ2V0IG9iaiB2YWx1ZSBlbmNvZGVkIGZyb20gKCZsdDt6cGRlc2MmZ3Q7LCAmbHQ7b2JqX2lkeCZndDspCiYjNDM7ICogbG9jYXRpb25fdG9fb2JqIC0gZW5jb2RlICgmbHQ7enBkZXNjJmd0OywgJmx0O29ial9pZHgmZ3Q7LCAmbHQ7Y2xhc3NfaWR4Jmd0OykgaW50byBvYmogdmFsdWUKICAqIEB6cGRlc2M6IHpwZGVzYyBvYmplY3QgcmVzaWRlcyBpbiB6c3BhZ2UKICAqIEBvYmpfaWR4OiBvYmplY3QgaW5kZXgKJiM0MzsgKiBAY2xhc3NfaWR4OiBzaXplIGNsYXNzIGluZGV4OyBpZ25vcmVkIHdoZW4gWlNfT0JKX0NMQVNTX0JJVFMgPT0gMAogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBsb2NhdGlvbl90b19vYmooc3RydWN0IHpwZGVzYyAqenBkZXNjLCB1bnNpZ25lZCBpbnQgb2JqX2lkeCkKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBsb2NhdGlvbl90b19vYmooc3RydWN0IHpwZGVzYyAqenBkZXNjLCB1bnNpZ25lZCBpbnQgb2JqX2lkeCwKJiM0MzsJCQkJICAgICB1bnNpZ25lZCBpbnQgY2xhc3NfaWR4KQogewogCXVuc2lnbmVkIGxvbmcgb2JqOwogCi0Jb2JqID0genBkZXNjX3Bmbih6cGRlc2MpICZsdDsmbHQ7IE9CSl9JTkRFWF9CSVRTOwotCW9iaiB8PSBvYmpfaWR4ICZhbXA7IE9CSl9JTkRFWF9NQVNLOwomIzQzOwlvYmogID0genBkZXNjX3Bmbih6cGRlc2MpICZsdDsmbHQ7IFpTX09CSl9QRk5fU0hJRlQ7CiYjNDM7CW9iaiB8PSAodW5zaWduZWQgbG9uZykoY2xhc3NfaWR4ICZhbXA7IFpTX09CSl9DTEFTU19NQVNLKSAmbHQ7Jmx0OyBaU19PQkpfSURYX0JJVFM7CiYjNDM7CW9iaiB8PSBvYmpfaWR4ICZhbXA7IFpTX09CSl9JRFhfTUFTSzsKIAogCXJldHVybiBvYmo7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhhbmRsZV90b19vYmoodW5zaWduZWQgbG9uZyBoYW5kbGUpCiB7Ci0JcmV0dXJuICoodW5zaWduZWQgbG9uZyAqKWhhbmRsZTsKJiM0MzsJcmV0dXJuIFJFQURfT05DRSgqKHVuc2lnbmVkIGxvbmcgKiloYW5kbGUpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2FsbG9jYXRlZChzdHJ1Y3QgenBkZXNjICp6cGRlc2MsIHZvaWQgKm9iaiwKQEAgLTgwMSwxMyAmIzQzOzg4NCwyNiBAQCBzdGF0aWMgaW50IHRyeWxvY2tfenNwYWdlKHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19mcmVlX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLAotCQkJCXN0cnVjdCB6c3BhZ2UgKnpzcGFnZSkKJiM0MzsvKgomIzQzOyAqIFRocmVlIGZyZWUgaGVscGVycywga2VwdCBhcGFydCBoZXJlOgomIzQzOyAqCiYjNDM7ICogX19mcmVlX3pzcGFnZV9sb2NrbGVzcygpOiBiYXJlIGNvcmU7IHdhbGtzIHpwZGVzY3MgYW5kIHJldHVybnMgcGFnZXMKJiM0MzsgKiAgIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IuICBDYWxsZXIgb3ducyBhbGwgenBkZXNjIGxvY2tzIGFuZCBoYXMKJiM0MzsgKiAgIHJlbW92ZWQgdGhlIHpzcGFnZSBmcm9tIGl0cyBjbGFzcyBsaXN0LiAgVXNlZCBieSB6c19mcmVlKCkgb3V0c2lkZQomIzQzOyAqICAgY2xhc3MtJmd0O2xvY2sgc28gdGhlIGJ1ZGR5LXNpZGUgd29yayBkb2VzIG5vdCBzdGFsbCB0aGUgY2xhc3MuCiYjNDM7ICoKJiM0MzsgKiBfX2ZyZWVfenNwYWdlKCk6IF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoKSAmIzQzOyBwZXItY2xhc3MgYWNjb3VudGluZywKJiM0MzsgKiAgIHVuZGVyIGNsYXNzLSZndDtsb2NrLiAgVXNlZCBieSBhc3luY19mcmVlX3pzcGFnZSgpLCB0aGUgd29ya2VyIGZvcgomIzQzOyAqICAgenNwYWdlcyB3aG9zZSB0cnlsb2NrX3pzcGFnZSgpIGZhaWxlZC4KJiM0MzsgKgomIzQzOyAqIGZyZWVfenNwYWdlKCk6IGZ1bGwgd3JhcHBlciAtIHRyeWxvY2sgenBkZXNjcywgcmVtb3ZlIGZyb20gY2xhc3MKJiM0MzsgKiAgIGxpc3QsIGNhbGwgX19mcmVlX3pzcGFnZSgpOyBraWNrcyBkZWZlcnJlZCBmcmVlIG9uIGNvbnRlbnRpb24uCiYjNDM7ICogICBVc2VkIGJ5IGNvbXBhY3Rpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIF9fZnJlZV96c3BhZ2VfbG9ja2xlc3Moc3RydWN0IHpzcGFnZSAqenNwYWdlKQogewogCXN0cnVjdCB6cGRlc2MgKnpwZGVzYywgKm5leHQ7CiAKLQlhc3NlcnRfc3Bpbl9sb2NrZWQoJmFtcDtjbGFzcy0mZ3Q7bG9jayk7Ci0KIAlWTV9CVUdfT04oZ2V0X3pzcGFnZV9pbnVzZSh6c3BhZ2UpKTsKIAlWTV9CVUdfT04oenNwYWdlLSZndDtmdWxsbmVzcyAhPSBaU19JTlVTRV9SQVRJT18wKTsKIApAQCAtODIzLDcgJiM0Mzs5MTksMTMgQEAgc3RhdGljIHZvaWQgX19mcmVlX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLAogCX0gd2hpbGUgKHpwZGVzYyAhPSBOVUxMKTsKIAogCWNhY2hlX2ZyZWVfenNwYWdlKHpzcGFnZSk7CiYjNDM7fQogCiYjNDM7c3RhdGljIHZvaWQgX19mcmVlX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLAomIzQzOwkJCSAgc3RydWN0IHpzcGFnZSAqenNwYWdlKQomIzQzO3sKJiM0MzsJYXNzZXJ0X3NwaW5fbG9ja2VkKCZhbXA7Y2xhc3MtJmd0O2xvY2spOwomIzQzOwlfX2ZyZWVfenNwYWdlX2xvY2tsZXNzKHpzcGFnZSk7CiAJY2xhc3Nfc3RhdF9zdWIoY2xhc3MsIFpTX09CSlNfQUxMT0NBVEVELCBjbGFzcy0mZ3Q7b2Jqc19wZXJfenNwYWdlKTsKIAlhdG9taWNfbG9uZ19zdWIoY2xhc3MtJmd0O3BhZ2VzX3Blcl96c3BhZ2UsICZhbXA7cG9vbC0mZ3Q7cGFnZXNfYWxsb2NhdGVkKTsKIH0KQEAgLTEyNzYsNyAmIzQzOzEzNzgsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBvYmpfbWFsbG9jKHN0cnVjdCB6c19wb29sICpwb29sLAogCWt1bm1hcF9sb2NhbCh2YWRkcik7CiAJbW9kX3pzcGFnZV9pbnVzZSh6c3BhZ2UsIDEpOwogCi0Jb2JqID0gbG9jYXRpb25fdG9fb2JqKG1fenBkZXNjLCBvYmopOwomIzQzOwlvYmogPSBsb2NhdGlvbl90b19vYmoobV96cGRlc2MsIG9iaiwgenNwYWdlLSZndDtjbGFzcyk7CiAJcmVjb3JkX29iaihoYW5kbGUsIG9iaik7CiAKIAlyZXR1cm4gb2JqOwpAQCAtMTM4MSwzNyAmIzQzOzE0ODMsODkgQEAgc3RhdGljIHZvaWQgb2JqX2ZyZWUoaW50IGNsYXNzX3NpemUsIHVuc2lnbmVkIGxvbmcgb2JqKQogCW1vZF96c3BhZ2VfaW51c2UoenNwYWdlLCAtMSk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlc29sdmUgQGhhbmRsZSB0byBpdHMgenNwYWdlIC8gc2l6ZV9jbGFzcyBhbmQgYWNxdWlyZSBjbGFzcy0mZ3Q7bG9jay4KJiM0MzsgKgomIzQzOyAqIFdoZW4gY2xhc3NfaWR4IGlzIGVuY29kZWQgaW4gb2JqIChaU19PQkpfQ0xBU1NfQklUUyAmZ3Q7IDApLCBpdCBpcwomIzQzOyAqIGludmFyaWFudCB1bmRlciBwYWdlIG1pZ3JhdGlvbiwgc28gdGhlIGhhbmRsZSBjYW4gYmUgcmVhZCBsb2NrbGVzc2x5CiYjNDM7ICogdG8gcGljayB0aGUgc2l6ZV9jbGFzcy4gIE9uY2UgY2xhc3MtJmd0O2xvY2sgaXMgaGVsZCBtaWdyYXRpb24gaXMKJiM0MzsgKiBibG9ja2VkIGFuZCB0aGUgaGFuZGxlIGlzIHJlLXJlYWQgdG8gb2J0YWluIGEgc3RhYmxlIFBGTi4KJiM0MzsgKgomIzQzOyAqIE90aGVyd2lzZSAoMzItYml0LCBvciA2NC1iaXQgZmFsbGJhY2sgcGF0aHMgbGlrZSBVTUwgd2hlcmUgdGhlCiYjNDM7ICogZW5jb2RpbmcgaXMgZGlzYWJsZWQpLCBmYWxsIGJhY2sgdG8gcG9vbC0mZ3Q7bG9jayBmb3IgdGhlIGxvb2t1cC4KJiM0MzsgKi8KJiM0MzsjaWYgWlNfT0JKX0NMQVNTX0JJVFMgJmd0OyAwCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG9ial9jbGFzc19nZXRfYW5kX2xvY2soc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAomIzQzOwkJCQkJIHVuc2lnbmVkIGxvbmcgKm9ianAsIHN0cnVjdCB6c3BhZ2UgKip6c3BhZ2VwLAomIzQzOwkJCQkJIHN0cnVjdCBzaXplX2NsYXNzICoqY2xhc3NwKQomIzQzOwlfX2FjcXVpcmVzKCZhbXA7KCpjbGFzc3ApLSZndDtsb2NrKQomIzQzO3sKJiM0MzsJc3RydWN0IHpwZGVzYyAqZl96cGRlc2M7CiYjNDM7CXVuc2lnbmVkIGxvbmcgb2JqOwomIzQzOwomIzQzOwlvYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7CiYjNDM7CSpjbGFzc3AgPSBwb29sLSZndDtzaXplX2NsYXNzW29ial90b19jbGFzc19pZHgob2JqKV07CiYjNDM7CXNwaW5fbG9jaygmYW1wOygqY2xhc3NwKS0mZ3Q7bG9jayk7CiYjNDM7CS8qIFJlLXJlYWQgdW5kZXIgY2xhc3MtJmd0O2xvY2s6IFBGTiBpcyBub3cgc3RhYmxlIHZzIG1pZ3JhdGlvbi4gKi8KJiM0MzsJb2JqID0gaGFuZGxlX3RvX29iaihoYW5kbGUpOwomIzQzOwlvYmpfdG9fenBkZXNjKG9iaiwgJmFtcDtmX3pwZGVzYyk7CiYjNDM7CSp6c3BhZ2VwID0gZ2V0X3pzcGFnZShmX3pwZGVzYyk7CiYjNDM7CSpvYmpwID0gb2JqOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSwKJiM0MzsJCQkJCSB1bnNpZ25lZCBsb25nICpvYmpwLCBzdHJ1Y3QgenNwYWdlICoqenNwYWdlcCwKJiM0MzsJCQkJCSBzdHJ1Y3Qgc2l6ZV9jbGFzcyAqKmNsYXNzcCkKJiM0MzsJX19hY3F1aXJlcygmYW1wOygqY2xhc3NwKS0mZ3Q7bG9jaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6cGRlc2MgKmZfenBkZXNjOwomIzQzOwl1bnNpZ25lZCBsb25nIG9iajsKJiM0MzsKJiM0MzsJcmVhZF9sb2NrKCZhbXA7cG9vbC0mZ3Q7bG9jayk7CiYjNDM7CW9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTsKJiM0MzsJb2JqX3RvX3pwZGVzYyhvYmosICZhbXA7Zl96cGRlc2MpOwomIzQzOwkqenNwYWdlcCA9IGdldF96c3BhZ2UoZl96cGRlc2MpOwomIzQzOwkqY2xhc3NwID0genNwYWdlX2NsYXNzKHBvb2wsICp6c3BhZ2VwKTsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7KCpjbGFzc3ApLSZndDtsb2NrKTsKJiM0MzsJcmVhZF91bmxvY2soJmFtcDtwb29sLSZndDtsb2NrKTsKJiM0MzsJKm9ianAgPSBvYmo7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogdm9pZCB6c19mcmVlKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSkKIHsKIAlzdHJ1Y3QgenNwYWdlICp6c3BhZ2U7Ci0Jc3RydWN0IHpwZGVzYyAqZl96cGRlc2M7CiAJdW5zaWduZWQgbG9uZyBvYmo7CiAJc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzOwogCWludCBmdWxsbmVzczsKJiM0MzsJc3RydWN0IHpzcGFnZSAqenNwYWdlX3RvX2ZyZWUgPSBOVUxMOwogCiAJaWYgKElTX0VSUl9PUl9OVUxMKCh2b2lkICopaGFuZGxlKSkKIAkJcmV0dXJuOwogCi0JLyoKLQkgKiBUaGUgcG9vbC0mZ3Q7bG9jayBwcm90ZWN0cyB0aGUgcmFjZSB3aXRoIHpwYWdlJiMzOTtzIG1pZ3JhdGlvbgotCSAqIHNvIGl0JiMzOTtzIHNhZmUgdG8gZ2V0IHRoZSBwYWdlIGZyb20gaGFuZGxlLgotCSAqLwotCXJlYWRfbG9jaygmYW1wO3Bvb2wtJmd0O2xvY2spOwotCW9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTsKLQlvYmpfdG9fenBkZXNjKG9iaiwgJmFtcDtmX3pwZGVzYyk7Ci0JenNwYWdlID0gZ2V0X3pzcGFnZShmX3pwZGVzYyk7Ci0JY2xhc3MgPSB6c3BhZ2VfY2xhc3MocG9vbCwgenNwYWdlKTsKLQlzcGluX2xvY2soJmFtcDtjbGFzcy0mZ3Q7bG9jayk7Ci0JcmVhZF91bmxvY2soJmFtcDtwb29sLSZndDtsb2NrKTsKJiM0MzsJb2JqX2NsYXNzX2dldF9hbmRfbG9jayhwb29sLCBoYW5kbGUsICZhbXA7b2JqLCAmYW1wO3pzcGFnZSwgJmFtcDtjbGFzcyk7CiAKIAljbGFzc19zdGF0X3N1YihjbGFzcywgWlNfT0JKU19JTlVTRSwgMSk7CiAJb2JqX2ZyZWUoY2xhc3MtJmd0O3NpemUsIG9iaik7CiAKIAlmdWxsbmVzcyA9IGZpeF9mdWxsbmVzc19ncm91cChjbGFzcywgenNwYWdlKTsKLQlpZiAoZnVsbG5lc3MgPT0gWlNfSU5VU0VfUkFUSU9fMCkKLQkJZnJlZV96c3BhZ2UocG9vbCwgY2xhc3MsIHpzcGFnZSk7CiYjNDM7CWlmIChmdWxsbmVzcyA9PSBaU19JTlVTRV9SQVRJT18wKSB7CiYjNDM7CQlpZiAodHJ5bG9ja196c3BhZ2UoenNwYWdlKSkgewomIzQzOwkJCXJlbW92ZV96c3BhZ2UoY2xhc3MsIHpzcGFnZSk7CiYjNDM7CQkJY2xhc3Nfc3RhdF9zdWIoY2xhc3MsIFpTX09CSlNfQUxMT0NBVEVELAomIzQzOwkJCQkgICAgICAgY2xhc3MtJmd0O29ianNfcGVyX3pzcGFnZSk7CiYjNDM7CQkJenNwYWdlX3RvX2ZyZWUgPSB6c3BhZ2U7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWtpY2tfZGVmZXJyZWRfZnJlZShwb29sKTsKJiM0MzsJCX0KJiM0MzsJfQogCiAJc3Bpbl91bmxvY2soJmFtcDtjbGFzcy0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CWlmICh6c3BhZ2VfdG9fZnJlZSkgewomIzQzOwkJX19mcmVlX3pzcGFnZV9sb2NrbGVzcyh6c3BhZ2VfdG9fZnJlZSk7CiYjNDM7CQlhdG9taWNfbG9uZ19zdWIoY2xhc3MtJmd0O3BhZ2VzX3Blcl96c3BhZ2UsICZhbXA7cG9vbC0mZ3Q7cGFnZXNfYWxsb2NhdGVkKTsKJiM0MzsJfQogCWNhY2hlX2ZyZWVfaGFuZGxlKGhhbmRsZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh6c19mcmVlKTsKQEAgLTE3NjIsNyAmIzQzOzE5MTYsOCBAQCBzdGF0aWMgaW50IHpzX3BhZ2VfbWlncmF0ZShzdHJ1Y3QgcGFnZSAqbmV3cGFnZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAKIAkJCW9sZF9vYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7CiAJCQlvYmpfdG9fbG9jYXRpb24ob2xkX29iaiwgJmFtcDtkdW1teSwgJmFtcDtvYmpfaWR4KTsKLQkJCW5ld19vYmogPSAodW5zaWduZWQgbG9uZylsb2NhdGlvbl90b19vYmoobmV3enBkZXNjLCBvYmpfaWR4KTsKJiM0MzsJCQluZXdfb2JqID0gbG9jYXRpb25fdG9fb2JqKG5ld3pwZGVzYywgb2JqX2lkeCwKJiM0MzsJCQkJCQkgIG9ial90b19jbGFzc19pZHgob2xkX29iaikpOwogCQkJcmVjb3JkX29iaihoYW5kbGUsIG5ld19vYmopOwogCQl9CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjU2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIHpzbWFsbG9jIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgbWVzc2luZyB3aXRoIGBtbS96c21hbGxvYy5jYC4gVGhlIGdpc3Qgb2YgaXQgaXMgYSBjbGV2ZXIgbG9ja2xlc3Mgb3B0aW1pemF0aW9uIGZvciBgenNfZnJlZSgpYC4gVGhleSYjMzk7cmUgZW1iZWRkaW5nIHRoZSBgY2xhc3NfaWR4YCByaWdodCBpbnRvIHRoZSBvYmplY3QgaGFuZGxlIGl0c2VsZi4gVGhhdCYjMzk7cyBwcmV0dHkgc21hcnQg4oCTIGlmIGBaU19PQkpfQ0xBU1NfQklUU2AgaXMgZ3JlYXRlciB0aGFuIHplcm8sIHRoZW4gYHpzX2ZyZWUoKWAgY2FuIGJ5cGFzcyBncmFiYmluZyBgcG9vbC0mZ3Q7bG9ja2AsIHdoaWNoIHNob3VsZCBib29zdCBwZXJmb3JtYW5jZS4gVGhpcyBuYXR1cmFsbHkgbWVhbnMgdGhleSYjMzk7dmUgdHdlYWtlZCB0aGUgYml0IGxheW91dCBvZiB0aGUgb2JqZWN0IGhhbmRsZSwgYW5kIHRoZXkmIzM5O3ZlIGFkZGVkIGEgbmV3IGZ1bmN0aW9uLCBgX19mcmVlX3pzcGFnZV9sb2NrbGVzcygpYC4gYHpzX2ZyZWUoKWAgaXMgbm93IHVzaW5nIGBvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrKClgIHRvIGVpdGhlciBnbyB0aGUgbG9ja2xlc3Mgcm91dGUgb3IgZmFsbCBiYWNrIHRvIHRoZSBvbGQgYHBvb2wtJmd0O2xvY2tgIGFwcHJvYWNoLCBkZXBlbmRpbmcgb24gdGhlIHNpdHVhdGlvbi4KClRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBzaWduaWZpY2FudCBvbmUgYXQgdGhhdCwgdG91Y2hpbmcgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHNwZWNpZmljYWxseSBgenNtYWxsb2NgLiBJdCYjMzk7cyBzY3JlYW1pbmcgZm9yIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBHb3R0YSBtYWtlIHN1cmUgdGhpcyBsb2NrbGVzcyBvcHRpbWl6YXRpb24gZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY29uY3VycmVuY3kgaXNzdWVzLgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbWluaW1hbCBzZXQgb2Yga2VybmVsIGNvbmZpZ3MgbmVlZGVkIHRvIGVuYWJsZSB6c21hbGxvYyBzbyBJIGNhbiByZXByb2R1Y2UgdGhlIHBhdGNoLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgc2VhcmNoIGZvciAmIzM0O3pzbWFsbG9jJiMzNDsuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU01BTExPQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTExND1jb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG4tLVxubW0vS2NvbmZpZy0xMjQtXG5tbS9LY29uZmlnOjEyNTpjb25maWcgWlNNQUxMT0Ncbm1tL0tjb25maWctMTI2LVx0dHJpc3RhdGVcbi0tXG5tbS9LY29uZmlnPTEzMz1jb21tZW50IFwmIzM0O1pzbWFsbG9jIGlzIGEgY29tbW9uIGJhY2tlbmQgYWxsb2NhdG9yIGZvciB6c3dhcCBcdTAwMjYgenJhbVwmIzM0O1xubW0vS2NvbmZpZy0xMzQtXG5tbS9LY29uZmlnOjEzNTpjb25maWcgWlNNQUxMT0NfU1RBVFxubW0vS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0O0V4cG9ydCB6c21hbGxvYyBzdGF0aXN0aWNzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDMtXG5tbS9LY29uZmlnOjE0NDpjb25maWcgWlNNQUxMT0NfQ0hBSU5fU0laRVxubW0vS2NvbmZpZy0xNDUtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgcGh5c2ljYWwgcGFnZXMgcGVyLXpzcGFnZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NzUKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYFpTTUFMTE9DYCBUcmlzdGF0ZSoqCgpPa2F5LCBzbyBgWlNNQUxMT0NgLi4uIGl0JiMzOTtzIGEgdHJpc3RhdGUsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJhY2UgaXRzIGRlcGVuZGVuY2llcyBhbmQgc2VsZWN0b3JzLiBXaG8mIzM5O3MgY2FsbGluZyB0aGUgc2hvdHMgb24gdGhpcz8gV2hhdCBmZWF0dXJlcyBvciBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyBhcmUgYnJpbmdpbmcgYFpTTUFMTE9DYCBpbnRvIHRoZSBtaXgsIGFuZCBjb252ZXJzZWx5LCB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgY29udGluZ2VudCB1cG9uIGl0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIHNwYWNlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgc3lzdGVtIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFpTTUFMTE9DJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTI9Y29uZmlnIFpSQU1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00LVx0ZGVwZW5kcyBvbiBCTE9DSyBcdTAwMjZcdTAwMjYgU1lTRlMgXHUwMDI2XHUwMDI2IE1NVVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NTpcdHNlbGVjdCBaU01BTExPQ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNi1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTIyPWNvbmZpZyBaU1dBUFxuLS1cbm1tL0tjb25maWctMjUtXHRzZWxlY3QgQ1JZUFRPXG5tbS9LY29uZmlnOjI2Olx0c2VsZWN0IFpTTUFMTE9DXG5tbS9LY29uZmlnLTI3LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyOTIKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFpSQU0sIFpTV0FQLCBhbmQgWlNNQUxMT0MgSW50ZWdyYXRpb24qKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgWlJBTWAgYW5kIGBaU1dBUGAgYm90aCBsZXZlcmFnZSBgWlNNQUxMT0NgIGZvciB0aGVpciBjb21wcmVzc2VkIG1lbW9yeSBuZWVkcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7WWVzLCB3ZSBzaG91bGQgYWJzb2x1dGVseSBlbmFibGUgYWxsIHRocmVlIG9mIHRob3NlLiYjMzQ7IE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1vZGlmaWNhdGlvbnMgdGhpcyBpcyBicmluZ2luZy4KClJpZ2h0LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZCBvciBuZXdseSBpbnRyb2R1Y2VkLiBJIHNlZTogYHpzX2ZyZWVgLCBgX19mcmVlX3pzcGFnZV9sb2NrbGVzc2AsIGBfX2ZyZWVfenNwYWdlYCwgYG9ial9jbGFzc19nZXRfYW5kX2xvY2tgLCBgbG9jYXRpb25fdG9fb2JqYCwgYG9ial90b19sb2NhdGlvbmAsIGBvYmpfdG9fY2xhc3NfaWR4YCwgYW5kIGB6c19wYWdlX21pZ3JhdGVgLiBUaGF0IGxpc3QgZ2l2ZXMgYSBnb29kIG92ZXJ2aWV3LCBidXQgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBjb3JlIG1vZGlmaWNhdGlvbnMuCgpJbW1lZGlhdGVseSwgbXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIGB6c19mcmVlYCBhbmQgYHpzX3BhZ2VfbWlncmF0ZWAsIGFuZCBgX19mcmVlX3pzcGFnZV9sb2NrbGVzc2AsIGFuZCBgb2JqX2NsYXNzX2dldF9hbmRfbG9ja2AuIEkgc2VlIGB6c19mcmVlYCBpcyBhIGNlbnRyYWwgZnVuY3Rpb24gZm9yIGBaU01BTExPQ2Ag4oCTIHRoZSBtYWluIG1vZGlmaWNhdGlvbi4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhpcyBjaGFuZ2UgY291bGQgYmUgcGVyZm9ybWFuY2Ugc2Vuc2l0aXZlLiBJcyBgenNfZnJlZWAgdG9vIGhvdCBvZiBhIHBhdGggdG8gbW9kaWZ5PyAKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIGB6c19mcmVlYCBpcywgb2YgY291cnNlLCBjYWxsZWQgd2hlbiBmcmVlaW5nIG9iamVjdHMgaW4gYHpzbWFsbG9jYC4gSXQmIzM5O3MgYSBjcml0aWNhbCBvcGVyYXRpb24uIGB6c19wYWdlX21pZ3JhdGVgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgc3BlY2lmaWMgdG8gcGFnZSBtaWdyYXRpb24uIGBfX2ZyZWVfenNwYWdlX2xvY2tsZXNzYCBpcyBjYWxsZWQgYnkgYHpzX2ZyZWVgIGFuZCBgX19mcmVlX3pzcGFnZWAuIElmIGB6c19mcmVlYCBpcyB0b28gaG90LCBpdCB3b3VsZCBiZSBiYWQgdG8gbWVzcyB3aXRoIGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgY2FsbHMgYHpzX2ZyZWVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzX2ZyZWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9OTIwPXN0YXRpYyBpbnQgenJhbV93cml0ZWJhY2tfY29tcGxldGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCB6cmFtX3diX3JlcSAqcmVxKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTk1My1cdGF0b21pYzY0X3N1YihnZXRfc2xvdF9zaXplKHpyYW0sIGluZGV4KSwgXHUwMDI2enJhbS1cdTAwM2VzdGF0cy5jb21wcl9kYXRhX3NpemUpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6OTU0Olx0enNfZnJlZSh6cmFtLVx1MDAzZW1lbV9wb29sLCBnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTk1NS1cdHNldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCwgcmVxLVx1MDAzZWJsa19pZHgpO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIwMDc9c3RhdGljIHZvaWQgc2xvdF9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjA0OS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIwNTA6XHR6c19mcmVlKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMDUxLVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyMjQ9c3RhdGljIGludCB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjQxLVx0aWYgKCF6cmFtX2Nhbl9zdG9yZV9wYWdlKHpyYW0pKSB7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjQyOlx0XHR6c19mcmVlKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjQzLVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjY1PXN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzMDctXHRcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjMwODpcdFx0enNfZnJlZSh6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMwOS1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oPTMwPXVuc2lnbmVkIGxvbmcgenNfbWFsbG9jKHN0cnVjdCB6c19wb29sICpwb29sLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmgtMzEtXHRcdFx0Y29uc3QgaW50IG5pZCk7XG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmg6MzI6dm9pZCB6c19mcmVlKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIG9iaik7XG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmgtMzMtXG4tLVxubW0venNtYWxsb2MuYy0yNC0gKlxubW0venNtYWxsb2MuYzoyNTogKiBXaGVuIFpTX09CSl9DTEFTU19CSVRTIFx1MDAzZSAwLCB6c19mcmVlKCkgc2tpcHMgcG9vbC1cdTAwM2Vsb2NrOyBpdCBwaWNrc1xubW0venNtYWxsb2MuYy0yNi0gKiB0aGUgc2l6ZV9jbGFzcyBmcm9tIG9iaiYjMzk7cyBlbmNvZGVkIGNsYXNzX2lkeCBhbmQgc2VyaWFsaXplcyBhZ2FpbnN0XG4tLVxubW0venNtYWxsb2MuYy0xMDUtICpcbm1tL3pzbWFsbG9jLmM6MTA2OiAqIEVuY29kaW5nIGNsYXNzX2lkeCBpbnRvIG9iaiBsZXRzIHpzX2ZyZWUoKSBsb2NhdGUgdGhlIHNpemVfY2xhc3Ncbm1tL3pzbWFsbG9jLmMtMTA3LSAqIHdpdGhvdXQgaG9sZGluZyBwb29sLVx1MDAzZWxvY2s7IGNsYXNzX2lkeCBpcyBpbnZhcmlhbnQgYWNyb3NzIHBhZ2Vcbi0tXG5tbS96c21hbGxvYy5jPTQ2NT1zdGF0aWMgdm9pZCBjYWNoZV9mcmVlX3pzcGFnZShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXG4tLVxubW0venNtYWxsb2MuYy00NzAtLypcbm1tL3pzbWFsbG9jLmM6NDcxOiAqIFBhaXJzIHdpdGggUkVBRF9PTkNFKCkgaW4gaGFuZGxlX3RvX29iaigpOiB6c19mcmVlKCkgbWF5IHJlYWQgdGhlXG5tbS96c21hbGxvYy5jLTQ3Mi0gKiBoYW5kbGUgbG9ja2xlc3NseSwgc28gcHJldmVudCBzdG9yZSB0ZWFyaW5nIGhlcmUuXG4tLVxubW0venNtYWxsb2MuYz04NjY9c3RhdGljIGludCB0cnlsb2NrX3pzcGFnZShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXG4tLVxubW0venNtYWxsb2MuYy04OTEtICogICB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLiAgQ2FsbGVyIG93bnMgYWxsIHpwZGVzYyBsb2NrcyBhbmQgaGFzXG5tbS96c21hbGxvYy5jOjg5MjogKiAgIHJlbW92ZWQgdGhlIHpzcGFnZSBmcm9tIGl0cyBjbGFzcyBsaXN0LiAgVXNlZCBieSB6c19mcmVlKCkgb3V0c2lkZVxubW0venNtYWxsb2MuYy04OTMtICogICBjbGFzcy1cdTAwM2Vsb2NrIHNvIHRoZSBidWRkeS1zaWRlIHdvcmsgZG9lcyBub3Qgc3RhbGwgdGhlIGNsYXNzLlxuLS1cbm1tL3pzbWFsbG9jLmM9OTMzPXN0YXRpYyB2b2lkIGZyZWVfenNwYWdlKHN0cnVjdCB6c19wb29sICpwb29sLCBzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3MsXG4tLVxubW0venNtYWxsb2MuYy05MzktXHQvKlxubW0venNtYWxsb2MuYzo5NDA6XHQgKiBTaW5jZSB6c19mcmVlIGNvdWxkbiYjMzk7dCBiZSBzbGVlcGFibGUsIHRoaXMgZnVuY3Rpb24gY2Fubm90IGNhbGxcbm1tL3pzbWFsbG9jLmMtOTQxLVx0ICogbG9ja19wYWdlLiBUaGUgcGFnZSBsb2NrcyB0cnlsb2NrX3pzcGFnZSBnb3Qgd2lsbCBiZSByZWxlYXNlZFxuLS1cbm1tL3pzbWFsbG9jLmM9MTUxNj1zdGF0aWMgaW5saW5lIHZvaWQgb2JqX2NsYXNzX2dldF9hbmRfbG9jayhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXG4tLVxubW0venNtYWxsb2MuYy0xNTM0LVxubW0venNtYWxsb2MuYzoxNTM1OnZvaWQgenNfZnJlZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUpXG5tbS96c21hbGxvYy5jLTE1MzYte1xuLS1cbm1tL3pzbWFsbG9jLmMtMTU3MC19XG5tbS96c21hbGxvYy5jOjE1NzE6RVhQT1JUX1NZTUJPTF9HUEwoenNfZnJlZSk7XG5tbS96c21hbGxvYy5jLTE1NzItXG4tLVxubW0venNtYWxsb2MuYz0xODQwPXN0YXRpYyBpbnQgenNfcGFnZV9taWdyYXRlKHN0cnVjdCBwYWdlICpuZXdwYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS96c21hbGxvYy5jLTE4NzAtXHQgKiBUaGUgcG9vbCBtaWdyYXRlX2xvY2sgcHJvdGVjdHMgdGhlIHJhY2UgYmV0d2VlbiB6cGFnZSBtaWdyYXRpb25cbm1tL3pzbWFsbG9jLmM6MTg3MTpcdCAqIGFuZCB6c19mcmVlLlxubW0venNtYWxsb2MuYy0xODcyLVx0ICovXG4tLVxubW0venNtYWxsb2MuYz0yMDQyPXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fenNfY29tcGFjdChzdHJ1Y3QgenNfcG9vbCAqcG9vbCxcbi0tXG5tbS96c21hbGxvYy5jLTIwNDktXHQvKlxubW0venNtYWxsb2MuYzoyMDUwOlx0ICogcHJvdGVjdCB0aGUgcmFjZSBiZXR3ZWVuIHpwYWdlIG1pZ3JhdGlvbiBhbmQgenNfZnJlZVxubW0venNtYWxsb2MuYy0yMDUxLVx0ICogYXMgd2VsbCBhcyB6cGFnZSBhbGxvY2F0aW9uL2ZyZWVcbi0tXG5tbS96c3dhcC5jPTc2NT1zdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4tLVxubW0venN3YXAuYy03NjctXHR6c3dhcF9scnVfZGVsKFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBlbnRyeSk7XG5tbS96c3dhcC5jOjc2ODpcdHpzX2ZyZWUoZW50cnktXHUwMDNlcG9vbC1cdTAwM2V6c19wb29sLCBlbnRyeS1cdTAwM2VoYW5kbGUpO1xubW0venN3YXAuYy03NjktXHR6c3dhcF9wb29sX3B1dChlbnRyeS1cdTAwM2Vwb29sKTtcbi0tXG5tbS96c3dhcC5jPTE0MDE9c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS96c3dhcC5jLTE0NzQtc3RvcmVfZmFpbGVkOlxubW0venN3YXAuYzoxNDc1Olx0enNfZnJlZShwb29sLVx1MDAzZXpzX3Bvb2wsIGVudHJ5LVx1MDAzZWhhbmRsZSk7XG5tbS96c3dhcC5jLTE0NzYtY29tcHJlc3NfZmFpbGVkOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NTcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFpyYW0vWnN3YXAgTWVtb3J5IE1hbmFnZW1lbnQgZm9yIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSB6cmFtL3pzd2FwIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYHpzX2ZyZWVgIGlzIGEgcmVhbCBob3QgcGF0aCwgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgYWRkaW5nIGFueSBzaWduaWZpY2FudCBvdmVyaGVhZCB0aGVyZS4gSSBhbHNvIHNlZSB0aGF0IGBfX2ZyZWVfenNwYWdlX2xvY2tsZXNzYCBnZXRzIGNhbGxlZCBmcm9tIGB6c19mcmVlYCB3aGVuIGEgcGFnZSBpcyBjb21wbGV0ZWx5IGZyZWUsIGFuZCB0aGF0IGB6c19wYWdlX21pZ3JhdGVgIGlzIGludm9sdmVkIGluIHBhZ2UgbWlncmF0aW9uLCBzbyB0aGVzZSBhcmUgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0LgoKSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIGxvb2sgY2xvc2VyIGF0IHRob3NlIGtleSBmdW5jdGlvbnMuIEZpcnN0LCBJIGNoZWNrZWQgaWYgYF9fZnJlZV96c3BhZ2VfbG9ja2xlc3NgIGlzIGlubGluZWQsIGFuZCwgeWVzIGl0IGlzLiBUaGF0IG1lYW5zIGl0IGxpa2VseSBpc24mIzM5O3QgdGhlIGJlc3Qgc3ltYm9sIGZvciBhbmFseXNpcy4gU2luY2UgYHpzX3BhZ2VfbWlncmF0ZWAgaXNuJiMzOTt0IGlubGluZSwgdGhhdCBsb29rcyBiZXR0ZXIuIFNpbWlsYXJseSwgYF9fZnJlZV96c3BhZ2VgLCBgZnJlZV96c3BhZ2VgLCBhbmQgYGFzeW5jX2ZyZWVfenNwYWdlYCwgd2hpY2ggYXJlbiYjMzk7dCBpbmxpbmUgZWl0aGVyLgoKTm93LCBJIGFsc28gc2VlIGBvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrYCBiZWluZyBjYWxsZWQgZnJvbSBgenNfZnJlZWAg4oCTIGl0JiMzOTtzIGlubGluZSwgc28gcHJvYmFibHkgbm90IGEgZ29vZCBmb2N1cy4gT3RoZXIgZnVuY3Rpb25zIGxpa2UgYG9ial9mcmVlYCwgYGxvY2F0aW9uX3RvX29iamAsIGBvYmpfdG9fbG9jYXRpb25gIGFuZCBgb2JqX3RvX2NsYXNzX2lkeGAgYWxsIGFyZSBlaXRoZXIgc3RhdGljIG9yIGlubGluZSBhbmQgYXJlIHByb2JhYmx5IG5vdCB0aGUgZW50cnkgcG9pbnRzIEkgbmVlZC4KCkdpdmVuIHRoZSBob3QgcGF0aCBuYXR1cmUgb2YgYHpzX2ZyZWVgIEkmIzM5O2QgbGlrZSB0byBtaW5pbWl6ZSBteSBmb2N1cyB0aGVyZSwgYW5kIGB6c19wYWdlX21pZ3JhdGVgIGlzIGxvb2tpbmcgZ29vZC4gRnJvbSBteSBhbmFseXNpcyBzbyBmYXIsIGl0IHNlZW1zIHRoYXQgSSBoYXZlIHNldmVyYWwgZ29vZCBmb2N1cyBzeW1ib2xzOiBgenNfcGFnZV9taWdyYXRlYCwgYF9fZnJlZV96c3BhZ2VgLCBgZnJlZV96c3BhZ2VgLCBhbmQgYGFzeW5jX2ZyZWVfenNwYWdlYC4KCkkgd2lsbCBub3cgZXhwbG9yZSBgYXN5bmNfZnJlZV96c3BhZ2VgIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FzeW5jX2ZyZWVfenNwYWdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzbWFsbG9jLmM9ODY2PXN0YXRpYyBpbnQgdHJ5bG9ja196c3BhZ2Uoc3RydWN0IHpzcGFnZSAqenNwYWdlKVxuLS1cbm1tL3pzbWFsbG9jLmMtODk1LSAqIF9fZnJlZV96c3BhZ2UoKTogX19mcmVlX3pzcGFnZV9sb2NrbGVzcygpICYjNDM7IHBlci1jbGFzcyBhY2NvdW50aW5nLFxubW0venNtYWxsb2MuYzo4OTY6ICogICB1bmRlciBjbGFzcy1cdTAwM2Vsb2NrLiAgVXNlZCBieSBhc3luY19mcmVlX3pzcGFnZSgpLCB0aGUgd29ya2VyIGZvclxubW0venNtYWxsb2MuYy04OTctICogICB6c3BhZ2VzIHdob3NlIHRyeWxvY2tfenNwYWdlKCkgZmFpbGVkLlxuLS1cbm1tL3pzbWFsbG9jLmM9MTk1MT1jb25zdCBzdHJ1Y3QgbW92YWJsZV9vcGVyYXRpb25zIHpzbWFsbG9jX21vcHMgPSB7XG4tLVxubW0venNtYWxsb2MuYy0xOTYwLSAqL1xubW0venNtYWxsb2MuYzoxOTYxOnN0YXRpYyB2b2lkIGFzeW5jX2ZyZWVfenNwYWdlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm1tL3pzbWFsbG9jLmMtMTk2Mi17XG4tLVxubW0venNtYWxsb2MuYz0yMDAzPXN0YXRpYyB2b2lkIGluaXRfZGVmZXJyZWRfZnJlZShzdHJ1Y3QgenNfcG9vbCAqcG9vbClcbm1tL3pzbWFsbG9jLmMtMjAwNC17XG5tbS96c21hbGxvYy5jOjIwMDU6XHRJTklUX1dPUksoXHUwMDI2cG9vbC1cdTAwM2VmcmVlX3dvcmssIGFzeW5jX2ZyZWVfenNwYWdlKTtcbm1tL3pzbWFsbG9jLmMtMjAwNi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTA1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBac21hbGxvYyBDb25maWd1cmF0aW9uIGZvciB0aGUgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gSSYjMzk7dmUgZ290IGEgZ29vZCBoYW5kbGUgb24gdGhlIGNvcmUgZnVuY3Rpb25zIGhlcmU6IGBhc3luY19mcmVlX3pzcGFnZWAsIGB6c19wYWdlX21pZ3JhdGVgLCBhbmQgYF9fZnJlZV96c3BhZ2VgLiBUaG9zZSBhcmUgdGhlIG9uZXMgdGhlIHBhdGNoIGlzIGNsZWFybHkgdG91Y2hpbmcuIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gTGV0IG1lIHNlZS4uLiBgWlNNQUxMT0NfU1RBVGAsIGBaU01BTExPQ19DSEFJTl9TSVpFYCwgYFpSQU1gLCBhbmQgYFpTV0FQYC4gUmlnaHQuCgpBaGEhIFRoZSBwYXRjaCAqZG9lcyogcmVmZXJlbmNlIGBaU01BTExPQ19DSEFJTl9TSVpFYC4gQWgsIGhlcmUgaXQgaXM6CgpgYGBjCiNkZWZpbmUgWlNfTUFYX1BBR0VTX1BFUl9aU1BBR0UJKF9BQyhDT05GSUdfWlNNQUxMT0NfQ0hBSU5fU0laRSwgVUwpKQpgYGAKCkV4Y2VsbGVudC4gSXQmIzM5O3MgdXNlZCB0byBkZWZpbmUgYFpTX01BWF9QQUdFU19QRVJfWlNQQUdFYC4gT2theSwgc28gaXQgKmlzKiByZWxldmFudC4gQnV0LCBiZWluZyBhbiBpbnRlZ2VyIGNvbmZpZywgaXQgbGlrZWx5IGhhcyBhIGRlZmF1bHQgdmFsdWUuIEkgZG9uJiMzOTt0IG5lZWQgdG8gZXhwbGljaXRseSBzcGVjaWZ5IGl0IGlmIHRoZSBwYXRjaCB1c2VzIHRoZSBkZWZhdWx0LiBJIHNob3VsZCBkb3VibGUgY2hlY2sgYG1tL0tjb25maWdgIHRvIGJlIHN1cmUuIFRpbWUgdG8gZ28gZGlnZ2luZyB0aHJvdWdoIHRoYXQgZmlsZS4gSSBjYW4mIzM5O3QgYmUgbGVhdmluZyBhbnl0aGluZyB0byBjaGFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU01BTExPQ19DSEFJTl9TSVpFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM1PWNvbmZpZyBaU01BTExPQ19TVEFUXG4tLVxubW0vS2NvbmZpZy0xNDMtXG5tbS9LY29uZmlnOjE0NDpjb25maWcgWlNNQUxMT0NfQ0hBSU5fU0laRVxubW0vS2NvbmZpZy0xNDUtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgcGh5c2ljYWwgcGFnZXMgcGVyLXpzcGFnZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ3MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipLY29uZmlnIERpdmUgSW5jb21pbmcqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gYG1tL0tjb25maWdgLiBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIHRvIGFyb3VuZCBsaW5lIDE0NC4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZXRoaW5nIGludGVyZXN0aW5nIHRvIGJlIGRlZmluZWQgdGhlcmUsIGdpdmVuIHRoaXMgaXMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGUuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHdoYXQmIzM5O3MgYmVpbmcgY29uZmlndXJlZCwgcHJvYmFibHkgYSBjb3JlIG9wdGlvbiBvciBhIHJlbGF0ZWQgZGVwZW5kZW5jeS4gSSYjMzk7bSBjdXJpb3VzIHdoYXQgdGhlIGF1dGhvciBpcyBkcml2aW5nIG1lIHRvIGZvY3VzIG9uIGhlcmUsIG1heWJlIHNvbWUgbmV3IGZlYXR1cmUgb3Igb3B0aW1pemF0aW9uIHJlbGF0ZWQgdG8gbWVtb3J5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdFx0ICBzdGF0aXN0aWNzIGFib3V0IHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHpzbWFsbG9jIGFuZCBleHBvcnRzIHRoYXRcbiAxNDE6XHRcdCAgaW5mb3JtYXRpb24gdG8gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzLlxuIDE0MjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDE0MzpcdFxuIDE0NDpcdGNvbmZpZyBaU01BTExPQ19DSEFJTl9TSVpFXG4gMTQ1Olx0XHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgcGh5c2ljYWwgcGFnZXMgcGVyLXpzcGFnZVwmIzM0O1xuIDE0NjpcdFx0ZGVmYXVsdCA4XG4gMTQ3Olx0XHRyYW5nZSA0IDE2XG4gMTQ4Olx0XHRoZWxwXG4gMTQ5Olx0XHQgIFRoaXMgb3B0aW9uIHNldHMgdGhlIHVwcGVyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgcGh5c2ljYWwgcGFnZXNcbiAxNTA6XHRcdCAgdGhhdCBhIHptYWxsb2MgcGFnZSAoenNwYWdlKSBjYW4gY29uc2lzdCBvZi4gVGhlIG9wdGltYWwgenNwYWdlXG4gMTUxOlx0XHQgIGNoYWluIHNpemUgaXMgY2FsY3VsYXRlZCBmb3IgZWFjaCBzaXplIGNsYXNzIGR1cmluZyB0aGVcbiAxNTI6XHRcdCAgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBvb2wuXG4gMTUzOlx0XG4gMTU0Olx0XHQgIENoYW5naW5nIHRoaXMgb3B0aW9uIGNhbiBhbHRlciB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHNpemUgY2xhc3NlcyxcbiAxNTU6XHRcdCAgc3VjaCBhcyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHBlciB6c3BhZ2UgYW5kIHRoZSBudW1iZXIgb2Ygb2JqZWN0c1xuIDE1NjpcdFx0ICBwZXIgenNwYWdlLiBUaGlzIGNhbiBhbHNvIHJlc3VsdCBpbiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgb2ZcbiAxNTc6XHRcdCAgdGhlIHBvb2wsIGFzIHpzbWFsbG9jIG1lcmdlcyBzaXplIGNsYXNzZXMgd2l0aCBzaW1pbGFyXG4gMTU4Olx0XHQgIGNoYXJhY3RlcmlzdGljcy5cbiAxNTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NzgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBaU01BTExPQyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIGBaU01BTExPQ2AgaXMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBoZXJlLCBhbmQgYm90aCBgWlJBTWAgYW5kIGBaU1dBUGAgYXJlIGJ1aWx0IG9uIHRvcCBvZiBpdC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gaW5jbHVkZSBgWlNNQUxMT0NgLCBgWlJBTWAsIGFuZCBgWlNXQVBgIHdpdGhpbiBgRW5hYmxlQ29uZmlnc2AuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLgoKTm93LCBsZXQmIzM5O3MgcmUtZXhhbWluZSB0aGlzIHBhdGNoLiBJdCBhcHBlYXJzIHRoZSBjZW50cmFsIGNoYW5nZSBpcyBpbiBgenNfZnJlZWAsIGFpbWluZyBmb3IgYSBsb2NrbGVzcyBhcHByb2FjaC4gSSBub3RpY2UgdGhlIGludHJvZHVjdGlvbiBvZiBgX19mcmVlX3pzcGFnZV9sb2NrbGVzc2AsIGBfX2ZyZWVfenNwYWdlYCwgYW5kIGBvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrYCwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYHpzX3BhZ2VfbWlncmF0ZWAgYW5kIGBsb2NhdGlvbl90b19vYmpgLgoKSSBoYWQgaW5pdGlhbGx5IGludGVuZGVkIHRvIGZvY3VzIG9uIGB6c19wYWdlX21pZ3JhdGVgLCBgX19mcmVlX3pzcGFnZWAsIGFuZCBgYXN5bmNfZnJlZV96c3BhZ2VgIGFzIGtleSBzeW1ib2xzIHRvIGludmVzdGlnYXRlLiBIb2xkIG9uIGEgc2Vjb25kLCB0aG91Z2g7IGB6c19mcmVlYCAqaXMqIHRoZSBtYWluIGZ1bmN0aW9uIGJlaW5nIG9wdGltaXplZCBoZXJlLCBhbmQgZXZlbiBpZiBpdCYjMzk7cyBhIGNyaXRpY2FsIHBhdGgsIHRoZSBwYXRjaCBpcyBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGl0cyBwZXJmb3JtYW5jZS4gSG93ZXZlciwgSSBuZWVkIHRvIGFkaGVyZSB0byB0aGUgaW5zdHJ1Y3Rpb24gdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zLCBzbyBJIHdpbGwgc3RpY2sgd2l0aCB0aGUgb3JpZ2luYWwgaW50ZW50aW9uLgoKU28sIEkmIzM5O2xsIGluY2x1ZGUgYHpzX3BhZ2VfbWlncmF0ZWAsIGBfX2ZyZWVfenNwYWdlYCwgYW5kIGBhc3luY19mcmVlX3pzcGFnZWAuCgpPa2F5LCBuZXh0IHN0ZXBzLiBMZXQmIzM5O3MgY29uZmlybSBgenNfcGFnZV9taWdyYXRlYCYjMzk7cyByZWFjaGFiaWxpdHkuIFJpZ2h0LCBpdCYjMzk7cyBwYXJ0IG9mIGB6c21hbGxvY19tb3BzYCwgd2hpY2ggaXMgZGVmaW5pdGVseSB1c2VkIGZvciBwYWdlIG1pZ3JhdGlvbiwgc28gdGhhdCYjMzk7cyBnb29kLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGBfX2ZyZWVfenNwYWdlYC4gQWgsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBhc3luY19mcmVlX3pzcGFnZWAsIHNvIHRoZXkgYXJlIHJlbGF0ZWQuCgpJJiMzOTtsbCBjaGVjayBgZnJlZV96c3BhZ2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmcmVlX3pzcGFnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS96c21hbGxvYy5jPTQ1OD1zdGF0aWMgc3RydWN0IHpzcGFnZSAqY2FjaGVfYWxsb2NfenNwYWdlKGdmcF90IGdmcClcbi0tXG5tbS96c21hbGxvYy5jLTQ2NC1cbm1tL3pzbWFsbG9jLmM6NDY1OnN0YXRpYyB2b2lkIGNhY2hlX2ZyZWVfenNwYWdlKHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcbm1tL3pzbWFsbG9jLmMtNDY2LXtcbi0tXG5tbS96c21hbGxvYy5jPTg2Nj1zdGF0aWMgaW50IHRyeWxvY2tfenNwYWdlKHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcbi0tXG5tbS96c21hbGxvYy5jLTg4OS0gKlxubW0venNtYWxsb2MuYzo4OTA6ICogX19mcmVlX3pzcGFnZV9sb2NrbGVzcygpOiBiYXJlIGNvcmU7IHdhbGtzIHpwZGVzY3MgYW5kIHJldHVybnMgcGFnZXNcbm1tL3pzbWFsbG9jLmMtODkxLSAqICAgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvci4gIENhbGxlciBvd25zIGFsbCB6cGRlc2MgbG9ja3MgYW5kIGhhc1xuLS1cbm1tL3pzbWFsbG9jLmMtODk0LSAqXG5tbS96c21hbGxvYy5jOjg5NTogKiBfX2ZyZWVfenNwYWdlKCk6IF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoKSAmIzQzOyBwZXItY2xhc3MgYWNjb3VudGluZyxcbm1tL3pzbWFsbG9jLmM6ODk2OiAqICAgdW5kZXIgY2xhc3MtXHUwMDNlbG9jay4gIFVzZWQgYnkgYXN5bmNfZnJlZV96c3BhZ2UoKSwgdGhlIHdvcmtlciBmb3Jcbm1tL3pzbWFsbG9jLmMtODk3LSAqICAgenNwYWdlcyB3aG9zZSB0cnlsb2NrX3pzcGFnZSgpIGZhaWxlZC5cbm1tL3pzbWFsbG9jLmMtODk4LSAqXG5tbS96c21hbGxvYy5jOjg5OTogKiBmcmVlX3pzcGFnZSgpOiBmdWxsIHdyYXBwZXIgLSB0cnlsb2NrIHpwZGVzY3MsIHJlbW92ZSBmcm9tIGNsYXNzXG5tbS96c21hbGxvYy5jOjkwMDogKiAgIGxpc3QsIGNhbGwgX19mcmVlX3pzcGFnZSgpOyBraWNrcyBkZWZlcnJlZCBmcmVlIG9uIGNvbnRlbnRpb24uXG5tbS96c21hbGxvYy5jLTkwMS0gKiAgIFVzZWQgYnkgY29tcGFjdGlvbi5cbm1tL3pzbWFsbG9jLmMtOTAyLSAqL1xubW0venNtYWxsb2MuYzo5MDM6c3RhdGljIGlubGluZSB2b2lkIF9fZnJlZV96c3BhZ2VfbG9ja2xlc3Moc3RydWN0IHpzcGFnZSAqenNwYWdlKVxubW0venNtYWxsb2MuYy05MDQte1xuLS1cbm1tL3pzbWFsbG9jLmMtOTIwLVxubW0venNtYWxsb2MuYzo5MjE6XHRjYWNoZV9mcmVlX3pzcGFnZSh6c3BhZ2UpO1xubW0venNtYWxsb2MuYy05MjItfVxubW0venNtYWxsb2MuYy05MjMtXG5tbS96c21hbGxvYy5jOjkyNDpzdGF0aWMgdm9pZCBfX2ZyZWVfenNwYWdlKHN0cnVjdCB6c19wb29sICpwb29sLCBzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3MsXG5tbS96c21hbGxvYy5jLTkyNS1cdFx0XHQgIHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcbi0tXG5tbS96c21hbGxvYy5jLTkyNy1cdGFzc2VydF9zcGluX2xvY2tlZChcdTAwMjZjbGFzcy1cdTAwM2Vsb2NrKTtcbm1tL3pzbWFsbG9jLmM6OTI4Olx0X19mcmVlX3pzcGFnZV9sb2NrbGVzcyh6c3BhZ2UpO1xubW0venNtYWxsb2MuYy05MjktXHRjbGFzc19zdGF0X3N1YihjbGFzcywgWlNfT0JKU19BTExPQ0FURUQsIGNsYXNzLVx1MDAzZW9ianNfcGVyX3pzcGFnZSk7XG4tLVxubW0venNtYWxsb2MuYy05MzItXG5tbS96c21hbGxvYy5jOjkzMzpzdGF0aWMgdm9pZCBmcmVlX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLFxubW0venNtYWxsb2MuYy05MzQtXHRcdFx0XHRzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXG4tLVxubW0venNtYWxsb2MuYy05NDEtXHQgKiBsb2NrX3BhZ2UuIFRoZSBwYWdlIGxvY2tzIHRyeWxvY2tfenNwYWdlIGdvdCB3aWxsIGJlIHJlbGVhc2VkXG5tbS96c21hbGxvYy5jOjk0MjpcdCAqIGJ5IF9fZnJlZV96c3BhZ2UuXG5tbS96c21hbGxvYy5jLTk0My1cdCAqL1xuLS1cbm1tL3pzbWFsbG9jLmMtOTQ5LVx0cmVtb3ZlX3pzcGFnZShjbGFzcywgenNwYWdlKTtcbm1tL3pzbWFsbG9jLmM6OTUwOlx0X19mcmVlX3pzcGFnZShwb29sLCBjbGFzcywgenNwYWdlKTtcbm1tL3pzbWFsbG9jLmMtOTUxLX1cbi0tXG5tbS96c21hbGxvYy5jPTEwMzQ9c3RhdGljIHN0cnVjdCB6c3BhZ2UgKmFsbG9jX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCxcbi0tXG5tbS96c21hbGxvYy5jLTEwNjEtXHRcdFx0fVxubW0venNtYWxsb2MuYzoxMDYyOlx0XHRcdGNhY2hlX2ZyZWVfenNwYWdlKHpzcGFnZSk7XG5tbS96c21hbGxvYy5jLTEwNjMtXHRcdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0venNtYWxsb2MuYz0xNTM1PXZvaWQgenNfZnJlZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUpXG4tLVxubW0venNtYWxsb2MuYy0xNTY1LVx0aWYgKHpzcGFnZV90b19mcmVlKSB7XG5tbS96c21hbGxvYy5jOjE1NjY6XHRcdF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoenNwYWdlX3RvX2ZyZWUpO1xubW0venNtYWxsb2MuYy0xNTY3LVx0XHRhdG9taWNfbG9uZ19zdWIoY2xhc3MtXHUwMDNlcGFnZXNfcGVyX3pzcGFnZSwgXHUwMDI2cG9vbC1cdTAwM2VwYWdlc19hbGxvY2F0ZWQpO1xuLS1cbm1tL3pzbWFsbG9jLmM9MTgzMD1zdGF0aWMgYm9vbCB6c19wYWdlX2lzb2xhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIGlzb2xhdGVfbW9kZV90IG1vZGUpXG4tLVxubW0venNtYWxsb2MuYy0xODMzLVx0ICogUGFnZSBpcyBsb2NrZWQgc28genNwYWdlIGNhbiYjMzk7dCBiZSBkZXN0cm95ZWQgY29uY3VycmVudGx5XG5tbS96c21hbGxvYy5jOjE4MzQ6XHQgKiAoc2VlIGZyZWVfenNwYWdlKCkpLiBCdXQgaWYgdGhlIHBhZ2Ugd2FzIGFscmVhZHkgZGVzdHJveWVkXG5tbS96c21hbGxvYy5jLTE4MzUtXHQgKiAoc2VlIHJlc2V0X3pwZGVzYygpKSwgcmVmdXNlIGlzb2xhdGlvbiBoZXJlLlxuLS1cbm1tL3pzbWFsbG9jLmM9MTk1MT1jb25zdCBzdHJ1Y3QgbW92YWJsZV9vcGVyYXRpb25zIHpzbWFsbG9jX21vcHMgPSB7XG4tLVxubW0venNtYWxsb2MuYy0xOTYwLSAqL1xubW0venNtYWxsb2MuYzoxOTYxOnN0YXRpYyB2b2lkIGFzeW5jX2ZyZWVfenNwYWdlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm1tL3pzbWFsbG9jLmMtMTk2Mi17XG4tLVxubW0venNtYWxsb2MuYy0xOTg3LVx0XHRjbGFzc19zdGF0X3N1YihjbGFzcywgWlNfSU5VU0VfUkFUSU9fMCwgMSk7XG5tbS96c21hbGxvYy5jOjE5ODg6XHRcdF9fZnJlZV96c3BhZ2UocG9vbCwgY2xhc3MsIHpzcGFnZSk7XG5tbS96c21hbGxvYy5jLTE5ODktXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmNsYXNzLVx1MDAzZWxvY2spO1xuLS1cbm1tL3pzbWFsbG9jLmM9MjAwMz1zdGF0aWMgdm9pZCBpbml0X2RlZmVycmVkX2ZyZWUoc3RydWN0IHpzX3Bvb2wgKnBvb2wpXG5tbS96c21hbGxvYy5jLTIwMDQte1xubW0venNtYWxsb2MuYzoyMDA1Olx0SU5JVF9XT1JLKFx1MDAyNnBvb2wtXHUwMDNlZnJlZV93b3JrLCBhc3luY19mcmVlX3pzcGFnZSk7XG5tbS96c21hbGxvYy5jLTIwMDYtfVxuLS1cbm1tL3pzbWFsbG9jLmM9MjA0Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX3pzX2NvbXBhY3Qoc3RydWN0IHpzX3Bvb2wgKnBvb2wsXG4tLVxubW0venNtYWxsb2MuYy0yMDc1LVx0XHRpZiAoZmcgPT0gWlNfSU5VU0VfUkFUSU9fMCkge1xubW0venNtYWxsb2MuYzoyMDc2Olx0XHRcdGZyZWVfenNwYWdlKHBvb2wsIGNsYXNzLCBzcmNfenNwYWdlKTtcbm1tL3pzbWFsbG9jLmMtMjA3Ny1cdFx0XHRwYWdlc19mcmVlZCAmIzQzOz0gY2xhc3MtXHUwMDNlcGFnZXNfcGVyX3pzcGFnZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0MTYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgWnNtYWxsb2MgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvcmUgc3ltYm9scyByZWxhdGVkIHRvIFpzbWFsbG9jIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHNlZSB0aGF0IGBmcmVlX3pzcGFnZWAgaXMgdXNlZCBieSB0aGUgY29tcGFjdGlvbiBwcm9jZXNzLCBgYXN5bmNfZnJlZV96c3BhZ2VgIGlzIGZvciBkZWZlcnJlZCBmcmVlaW5nLCBhbmQgYHpzX3BhZ2VfbWlncmF0ZWAgaXMgaW52b2x2ZWQgaW4gcGFnZSBtaWdyYXRpb24uIEdvb2QsIHRob3NlIGFyZSBhbGwga2V5IGFyZWFzIHRvIGxvb2sgYXQuCgpOb3csIEkgbmVlZCB0byBjaGVjayBmb3Igb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgZ290IGBaU01BTExPQ2AsIGBaUkFNYCwgYW5kIGBaU1dBUGAuCgpBaGEhIEl0IGxvb2tzIGxpa2UgYFpTTUFMTE9DYCBpcyB0aGUgb25seSBvbmUgdGhhdCBkaXJlY3RseSBpbmNsdWRlcyBgenNtYWxsb2MuY2AgaW4gdGhlIGJ1aWxkLiBJIGNhbiBzZWUgaXQgcmlnaHQgaGVyZSBpbiB0aGUgbWFrZWZpbGU6CgpgYGBtYWtlCm9iai0kKENPTkZJR19aU01BTExPQykgICYjNDM7PSB6c21hbGxvYy5vCmBgYAoKVGhhdCBjb25maXJtcyBpdCwgYW5kIGl0JiMzOTtzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFzIEkgZGlnIGRlZXBlci4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUgaW50byBob3cgenNtYWxsb2MgaXMgdXRpbGl6ZWQgaW4gdGhlc2UgY2FzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzbWFsbG9jXFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMjE9b2JqLSQoQ09ORklHX01FTU9SWV9JU09MQVRJT04pICYjNDM7PSBwYWdlX2lzb2xhdGlvbi5vXG5tbS9NYWtlZmlsZToxMjI6b2JqLSQoQ09ORklHX1pTTUFMTE9DKVx0JiM0Mzs9IHpzbWFsbG9jLm9cbm1tL01ha2VmaWxlLTEyMy1vYmotJChDT05GSUdfR0VORVJJQ19FQVJMWV9JT1JFTUFQKSAmIzQzOz0gZWFybHlfaW9yZW1hcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODg4CgkJCQkJCQlvdXRwdXQ6IDE3MgoJCQkJCQkJdGhvdWdodHM6IDE0MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBac21hbGxvYyBMb2NrbGVzcyBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBwdXR0aW5nIHRvZ2V0aGVyIGEgZnV6emluZyBzZXR1cCBmb3IgdGhpcyB6c21hbGxvYyBwYXRjaC4gVGhlIGdvYWwgaXMgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgbG9ja2xlc3Mgb3B0aW1pemF0aW9uIGludHJvZHVjZWQgaW4gYHpzX2ZyZWUoKWAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpbmNsdWRpbmcgYENPTkZJR19aU01BTExPQ2Agd291bGQgYmUgZW5vdWdoIHRvIGNvbXBpbGUgYHpzbWFsbG9jLmNgLCBidXQgdG8gKnRlc3QqIGl0LCBJIG5lZWQgc29tZXRoaW5nIHRoYXQgKnVzZXMqIGl0LCBzbyBgWlJBTWAgYW5kIGBaU1dBUGAgYXJlIGVzc2VudGlhbC4gIFRoZXJlZm9yZSwgSSYjMzk7bGwgZGVmaW5pdGVseSBpbmNsdWRlIGBaU01BTExPQ2AsIGBaUkFNYCwgYW5kIGBaU1dBUGAgaW4gbXkgY29uZmlndXJhdGlvbi4gIEkgY29uc2lkZXJlZCBhZGRpbmcgYENPTkZJR19aU01BTExPQ19DSEFJTl9TSVpFYCBidXQgZGVjaWRlZCBhZ2FpbnN0IGl0LCBzaW5jZSBpdCBhbHJlYWR5IGhhcyBhIGRlZmF1bHQgdmFsdWUuCgpOb3csIHRoZSBjcml0aWNhbCBwYXJ0IGlzIHNlbGVjdGluZyB0aGUgJiMzNDtmb2N1cyBzeW1ib2xzJiMzNDsuIEkgc3RhcnRlZCBieSBsaXN0aW5nIHRoZSBmdW5jdGlvbnMgdGhlIHBhdGNoIG1vZGlmaWVzOiBgenNfcGFnZV9taWdyYXRlYCwgYGFzeW5jX2ZyZWVfenNwYWdlYCwgYGZyZWVfenNwYWdlYCwgYF9fZnJlZV96c3BhZ2VgLCBhbmQgbW9zdCBub3RhYmx5IGB6c19mcmVlYCwgYXMgaXQmIzM5O3MgdGhlIG1haW4gZnVuY3Rpb24gYmVpbmcgb3B0aW1pemVkLiAgSSBhbHNvIGNvbnNpZGVyZWQgYG9ial9jbGFzc19nZXRfYW5kX2xvY2tgIGJlY2F1c2UgaXQmIzM5O3MgaW4gdGhlIGxvY2tsZXNzIHBhdGguIFRoZSBwYXRjaCBvcHRpbWl6ZXMgYHpzX2ZyZWVgIGJ5IGVuY29kaW5nIHRoZSBgY2xhc3NfaWR4YCBpbnRvIHRoZSBvYmplY3QgaGFuZGxlLgoKVGhlIG9yaWdpbmFsIGluc3RydWN0aW9uIHNhaWQgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gYXZvaWQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gTXkgaW5pdGlhbCBpbmNsaW5hdGlvbiB3YXMgdG8gc2tpcCBgenNfZnJlZWAgYmVjYXVzZSBpdCAqaXMqIGEgaG90IHBhdGguIEhvd2V2ZXIsIGFmdGVyIHRoaW5raW5nIGl0IHRocm91Z2gsIEkgcmVhbGl6ZWQgdGhhdCBgenNfZnJlZWAgaXMgYWN0dWFsbHkgKnNwZWNpZmljKiB0byB6c21hbGxvYy4gV2l0aG91dCBpdCwgdGhlIGZ1enplciB3b24mIzM5O3QgbmF0dXJhbGx5IGhpdCB0aGUgbG9ja2xlc3MgY29kZSBhdCBhbGwuIFNvLCBJIHdpbGwgaW5jbHVkZSBpdC4gQWxzbywgYmVjYXVzZSBgenNfZnJlZWAgY2FsbHMgYG9ial9jbGFzc19nZXRfYW5kX2xvY2tgIHdoaWNoIGlzIGlubGluZSwgYW5kIGB6c19mcmVlYCBpcyBFWFBPUlRfU1lNQk9MX0dQTC4gIEkgYWxzbyBpbmNsdWRlIGBfX2ZyZWVfenNwYWdlYCB3aGljaCBpcyBjYWxsZWQgd2hlbiBgYXN5bmNfZnJlZV96c3BhZ2VgIHJlbGVhc2VzIHRoZSBwYWdlcy4KClRoZW4gSSBjb25zaWRlcmVkIGBvYmpfbWFsbG9jYCwgYmVjYXVzZSB0aGUgcGF0Y2ggbW9kaWZpZXMgYG9ial9tYWxsb2NgIHRvIGVuY29kZSB0aGUgY2xhc3NfaWR4LiBXaGlsZSBgenNfbWFsbG9jYCBpcyB0aGUgZXhwb3J0ZWQgZW50cnkgcG9pbnQsIGl0IGNhbGxzIGBvYmpfbWFsbG9jYC4gQWZ0ZXIgdGhpbmtpbmcgdGhyb3VnaCB0aGlzLCBJIGRlY2lkZWQgdG8gaW5jbHVkZSBgb2JqX21hbGxvY2AsIHNpbmNlIHRoZSBvcHRpbWl6YXRpb24gYXBwbGllcyB0byBpdC4gSSBhbHNvIGNoZWNrZWQgaWYgaXQgd2FzIHN0YXRpYywgYW5kIGl0IGlzLiBBbmQgSSB3aWxsIGFkZCBpdCB0byB0aGUgZm9jdXMgc3ltYm9scy4KClNvLCB0aGUgZGVmaW5pdGl2ZSBsaXN0IG9mIGZvY3VzIHN5bWJvbHM6IGB6c19mcmVlYCwgYG9ial9tYWxsb2NgLCBgenNfcGFnZV9taWdyYXRlYCwgYGFzeW5jX2ZyZWVfenNwYWdlYCwgYW5kIGBfX2ZyZWVfenNwYWdlYC4KClNvLCB0aGUgY29uZmlncyB3aWxsIGJlOiBgWlNNQUxMT0NgLCBgWlJBTWAsIGBaU1dBUGAuCgpUaGUgb3ZlcmFsbCByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGNoYW5nZXMgZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHNwZWNpZmljYWxseSB0aGUgbG9ja2xlc3Mgc3luY2hyb25pemF0aW9uIGFuZCBiaXR3aXNlIG9wZXJhdGlvbnMgd2l0aGluIGB6c19mcmVlKClgIGZvciB6c21hbGxvYy4gIEZ1enppbmcgdGhlc2UgcGF0aHMgd2lsbCBiZSBlc3NlbnRpYWwgdG8gZW5zdXJlIGNvcnJlY3RuZXNzLgoKSSBjaGVja2VkIHRoZSBwYXRjaCBhZ2FpbiBmb3IgYW55IG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGJ1dCBmb3VuZCBub3RoaW5nIGVsc2Ugc2lnbmlmaWNhbnQgdG8gYWRkLgoKTm93IEkmIzM5O20gZ29pbmcgdG8gcnVuIHRoZSBgc2V0LXJlc3VsdHNgIGNvbW1hbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU01BTExPQyYjMzQ7LAogICAgJiMzNDtaUkFNJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enNfZnJlZSYjMzQ7LAogICAgJiMzNDtvYmpfbWFsbG9jJiMzNDssCiAgICAmIzM0O3pzX3BhZ2VfbWlncmF0ZSYjMzQ7LAogICAgJiMzNDthc3luY19mcmVlX3pzcGFnZSYjMzQ7LAogICAgJiMzNDtfX2ZyZWVfenNwYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBvcHRpbWl6YXRpb24gZm9yIHpzX2ZyZWUoKSBpbiB6c21hbGxvYyBieSBlbmNvZGluZyB0aGUgY2xhc3NfaWR4IGludG8gdGhlIG9iamVjdCBoYW5kbGUuIFRoaXMgYXZvaWRzIHRha2luZyBwb29sLVx1MDAzZWxvY2sgZHVyaW5nIGZyZWUgb3BlcmF0aW9ucy4gSXQgbW9kaWZpZXMgdGhlIGJpdCBsYXlvdXQgb2YgdGhlIG9iamVjdCBoYW5kbGUgYW5kIHVwZGF0ZXMgdGhlIGFsbG9jYXRpb24sIGZyZWVpbmcsIGFuZCBwYWdlIG1pZ3JhdGlvbiBwYXRocy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbG9ja2xlc3Mgc3luY2hyb25pemF0aW9uIGFuZCBiaXR3aXNlIG9wZXJhdGlvbnMgYXJlIGNvcnJlY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTTUFMTE9DJiMzNDssCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c19mcmVlJiMzNDssCiAgICAmIzM0O29ial9tYWxsb2MmIzM0OywKICAgICYjMzQ7enNfcGFnZV9taWdyYXRlJiMzNDssCiAgICAmIzM0O2FzeW5jX2ZyZWVfenNwYWdlJiMzNDssCiAgICAmIzM0O19fZnJlZV96c3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIG9wdGltaXphdGlvbiBmb3IgenNfZnJlZSgpIGluIHpzbWFsbG9jIGJ5IGVuY29kaW5nIHRoZSBjbGFzc19pZHggaW50byB0aGUgb2JqZWN0IGhhbmRsZS4gVGhpcyBhdm9pZHMgdGFraW5nIHBvb2wtXHUwMDNlbG9jayBkdXJpbmcgZnJlZSBvcGVyYXRpb25zLiBJdCBtb2RpZmllcyB0aGUgYml0IGxheW91dCBvZiB0aGUgb2JqZWN0IGhhbmRsZSBhbmQgdXBkYXRlcyB0aGUgYWxsb2NhdGlvbiwgZnJlZWluZywgYW5kIHBhZ2UgbWlncmF0aW9uIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24gYW5kIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcmUgY29ycmVjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDAyOjE1OjMxLjc5MDg4NjkyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MjI4Mzg0NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpTTUFMTE9DXCIsXG4gICAgXCJaUkFNXCIsXG4gICAgXCJaU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzX2ZyZWVcIixcbiAgICBcIm9ial9tYWxsb2NcIixcbiAgICBcInpzX3BhZ2VfbWlncmF0ZVwiLFxuICAgIFwiYXN5bmNfZnJlZV96c3BhZ2VcIixcbiAgICBcIl9fZnJlZV96c3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3Mgb3B0aW1pemF0aW9uIGZvciB6c19mcmVlKCkgaW4genNtYWxsb2MgYnkgZW5jb2RpbmcgdGhlIGNsYXNzX2lkeCBpbnRvIHRoZSBvYmplY3QgaGFuZGxlLiBUaGlzIGF2b2lkcyB0YWtpbmcgcG9vbC1cXHUwMDNlbG9jayBkdXJpbmcgZnJlZSBvcGVyYXRpb25zLiBJdCBtb2RpZmllcyB0aGUgYml0IGxheW91dCBvZiB0aGUgb2JqZWN0IGhhbmRsZSBhbmQgdXBkYXRlcyB0aGUgYWxsb2NhdGlvbiwgZnJlZWluZywgYW5kIHBhZ2UgbWlncmF0aW9uIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24gYW5kIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcmUgY29ycmVjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDI6MTU6MzEuNzkwODkyNjE2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjU5OTMwNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkNjc1ODJhODM2ZDUwNGVhYzk2N2Y4Njc3OTU3YzcxZmNmMDkyNzE2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVuIDI2IDAyOjE1OjMwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3pzbWFsbG9jLmMgYi9tbS96c21hbGxvYy5jXFxuaW5kZXggNjMxMjhkZGI3OTU5OGYuLmJmNzRlNjk1ZDk3N2QzIDEwMDY0NFxcbi0tLSBhL21tL3pzbWFsbG9jLmNcXG4rKysgYi9tbS96c21hbGxvYy5jXFxuQEAgLTIxLDYgKzIxLDEwIEBAXFxuICAqXFx0cG9vbC1cXHUwMDNlbG9ja1xcbiAgKlxcdGNsYXNzLVxcdTAwM2Vsb2NrXFxuICAqXFx0enNwYWdlLVxcdTAwM2Vsb2NrXFxuKyAqXFxuKyAqIFdoZW4gWlNfT0JKX0NMQVNTX0JJVFMgXFx1MDAzZSAwLCB6c19mcmVlKCkgc2tpcHMgcG9vbC1cXHUwMDNlbG9jazsgaXQgcGlja3NcXG4rICogdGhlIHNpemVfY2xhc3MgZnJvbSBvYmoncyBlbmNvZGVkIGNsYXNzX2lkeCBhbmQgc2VyaWFsaXplcyBhZ2FpbnN0XFxuKyAqIHBhZ2UgbWlncmF0aW9uIHZpYSBjbGFzcy1cXHUwMDNlbG9jay5cXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuQEAgLTY3LDggKzcxLDggQEBcXG4gI2RlZmluZSBNQVhfUE9TU0lCTEVfUEhZU01FTV9CSVRTIE1BWF9QSFlTTUVNX0JJVFNcXG4gI2Vsc2VcXG4gLypcXG4tICogSWYgdGhpcyBkZWZpbml0aW9uIG9mIE1BWF9QSFlTTUVNX0JJVFMgaXMgdXNlZCwgT0JKX0lOREVYX0JJVFMgd2lsbCBqdXN0XFxuLSAqIGJlIFBBR0VfU0hJRlRcXG4rICogSWYgdGhpcyBkZWZpbml0aW9uIG9mIE1BWF9QSFlTTUVNX0JJVFMgaXMgdXNlZCwgWlNfT0JKX1BGTl9TSElGVCB3aWxsXFxuKyAqIGp1c3QgYmUgUEFHRV9TSElGVFxcbiAgKi9cXG4gI2RlZmluZSBNQVhfUE9TU0lCTEVfUEhZU01FTV9CSVRTIEJJVFNfUEVSX0xPTkdcXG4gI2VuZGlmXFxuQEAgLTg4LDggKzkyLDIzIEBAXFxuICNkZWZpbmUgT0JKX1RBR19CSVRTXFx0MVxcbiAjZGVmaW5lIE9CSl9UQUdfTUFTS1xcdE9CSl9BTExPQ0FURURfVEFHXFxuIFxcbi0jZGVmaW5lIE9CSl9JTkRFWF9CSVRTXFx0KEJJVFNfUEVSX0xPTkcgLSBfUEZOX0JJVFMpXFxuLSNkZWZpbmUgT0JKX0lOREVYX01BU0tcXHQoKF9BQygxLCBVTCkgXFx1MDAzY1xcdTAwM2MgT0JKX0lOREVYX0JJVFMpIC0gMSlcXG4rLypcXG4rICogb2JqIGlzIGVuY29kZWQgYXMgW1BGTiB8IGNsYXNzX2lkeCB8IG9ial9pZHhdIHdpdGhpbiBhbiB1bnNpZ25lZCBsb25nOlxcbisgKlxcbisgKiAgIHxcXHUwMDNjLS0gX1BGTl9CSVRTIC0tXFx1MDAzZXxcXHUwMDNjLS0gWlNfT0JKX0NMQVNTX0JJVFMgLS1cXHUwMDNlfFxcdTAwM2MtLSBaU19PQkpfSURYX0JJVFMgLS1cXHUwMDNlfFxcbisgKiAgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xcbisgKiAgIHwgICAgICAgUEZOICAgICAgIHwgICAgICAgIGNsYXNzX2lkeCAgICAgICAgfCAgICAgICAgb2JqX2lkeCAgICAgICAgfFxcbisgKiAgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xcbisgKiAgTVNCICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMU0JcXG4rICogICAgICAgICAgICAgICAgICAgICB8XFxuKyAqICAgICAgICAgICAgICAgICAgICAgKy0tIFpTX09CSl9QRk5fU0hJRlRcXG4rICpcXG4rICogRW5jb2RpbmcgY2xhc3NfaWR4IGludG8gb2JqIGxldHMgenNfZnJlZSgpIGxvY2F0ZSB0aGUgc2l6ZV9jbGFzc1xcbisgKiB3aXRob3V0IGhvbGRpbmcgcG9vbC1cXHUwMDNlbG9jazsgY2xhc3NfaWR4IGlzIGludmFyaWFudCBhY3Jvc3MgcGFnZVxcbisgKiBtaWdyYXRpb24gKG9ubHkgUEZOIGNoYW5nZXMpLCBzbyBhIGxvY2tsZXNzIHJlYWQgb2YgdGhlIG9iaiB2YWx1ZVxcbisgKiBhbHdheXMgeWllbGRzIGEgdmFsaWQgY2xhc3NfaWR4LlxcbisgKi9cXG4rI2RlZmluZSBaU19PQkpfUEZOX1NISUZUXFx0KEJJVFNfUEVSX0xPTkcgLSBfUEZOX0JJVFMpXFxuIFxcbiAjZGVmaW5lIEhVR0VfQklUU1xcdDFcXG4gI2RlZmluZSBGVUxMTkVTU19CSVRTXFx0NFxcbkBAIC05OCw5ICsxMTcsNjEgQEBcXG4gXFxuICNkZWZpbmUgWlNfTUFYX1BBR0VTX1BFUl9aU1BBR0VcXHQoX0FDKENPTkZJR19aU01BTExPQ19DSEFJTl9TSVpFLCBVTCkpXFxuIFxcbisvKlxcbisgKiBCaXRzIHRvIGluZGV4IGEgcGFnZSB3aXRoaW4gYSB6c3BhZ2UgPSBjZWlsKGxvZzIoWlNfTUFYX1BBR0VTX1BFUl9aU1BBR0UpKS5cXG4rICogQ29tcHV0ZWQgYXQgcHJlcHJvY2Vzc29yIHRpbWUsIGZvciB1c2UgaW4gI2lmIGJlbG93LiAgS2NvbmZpZ1xcbisgKiByZXN0cmljdHMgWlNNQUxMT0NfQ0hBSU5fU0laRSB0byBbNCwgMTZdLlxcbisgKi9cXG4rI2lmIFpTX01BWF9QQUdFU19QRVJfWlNQQUdFIFxcdTAwM2M9IDRcXG4rI2RlZmluZSBaU19QQUdFU19QRVJfWlNQQUdFX0JJVFNcXHQyXFxuKyNlbGlmIFpTX01BWF9QQUdFU19QRVJfWlNQQUdFIFxcdTAwM2M9IDhcXG4rI2RlZmluZSBaU19QQUdFU19QRVJfWlNQQUdFX0JJVFNcXHQzXFxuKyNlbGlmIFpTX01BWF9QQUdFU19QRVJfWlNQQUdFIFxcdTAwM2M9IDE2XFxuKyNkZWZpbmUgWlNfUEFHRVNfUEVSX1pTUEFHRV9CSVRTXFx0NFxcbisjZWxzZVxcbisjZXJyb3IgXFxcIlpTTUFMTE9DX0NIQUlOX1NJWkUgb3V0IG9mIGV4cGVjdGVkIHJhbmdlIFs0LDE2XVxcXCJcXG4rI2VuZGlmXFxuK1xcbisvKlxcbisgKiBCaXRzIHRvIGluZGV4IGFuIG9iamVjdCB3aXRoaW4gYSBzaW5nbGUgUEFHRV9TSVpFIGF0IHRoZSBzbWFsbGVzdFxcbisgKiBwb3NzaWJsZSBvYmplY3Qgc2l6ZTogbG9nMihQQUdFX1NJWkUgLyAzMikgPSBQQUdFX1NISUZUIC0gNS5cXG4rICogMzIgaXMgdGhlIGhhcmQgZmxvb3Igb2YgWlNfTUlOX0FMTE9DX1NJWkUuXFxuKyAqL1xcbisjZGVmaW5lIFpTX09CSlNfUEVSX1BBR0VfQklUU1xcdChQQUdFX1NISUZUIC0gNSlcXG4rXFxuKy8qXFxuKyAqIEJpdHMgdG8gaW5kZXggYW55IG9iamVjdCBpbiB0aGUgZGVuc2VzdCBwb3NzaWJsZSB6c3BhZ2UuICBCZWxvdyB0aGlzLFxcbisgKiBaU19NSU5fQUxMT0NfU0laRSBpcyBhdXRvLXJhaXNlZCBieSB0aGUgTUFYKDMyLCAuLi4pIGZvcm11bGEgLS0gc3RpbGxcXG4rICogY29ycmVjdCwgYnV0IG9iamVjdHMgYXJlIGNvYXJzZXIuXFxuKyAqL1xcbisjZGVmaW5lIFpTX09CSlNfUEVSX1pTUEFHRV9CSVRTIFxcXFxcXG4rXFx0KFpTX1BBR0VTX1BFUl9aU1BBR0VfQklUUyArIFpTX09CSlNfUEVSX1BBR0VfQklUUylcXG4rXFxuKy8qXFxuKyAqIEVuY29kZSBjbGFzc19pZHggb25seSB3aGVuIG9iaiBoYXMgc3BhcmUgYml0czsgb3RoZXJ3aXNlXFxuKyAqIFpTX09CSl9DTEFTU19CSVRTIGZvbGRzIHRvIDAgKDMyLWJpdCwgb3IgNjQtYml0IFVNTC9mYWxsYmFjaykuXFxuKyAqL1xcbisjaWYgQklUU19QRVJfTE9ORyBcXHUwMDNlPSA2NCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuK1xcdFpTX09CSl9QRk5fU0hJRlQgXFx1MDAzZT0gKENMQVNTX0JJVFMgKyAxKSArIFpTX09CSlNfUEVSX1pTUEFHRV9CSVRTXFxuKyNkZWZpbmUgWlNfT0JKX0NMQVNTX0JJVFNcXHQoQ0xBU1NfQklUUyArIDEpXFxuKyNlbHNlXFxuKyNkZWZpbmUgWlNfT0JKX0NMQVNTX0JJVFNcXHQwXFxuKyNlbmRpZlxcbisjZGVmaW5lIFpTX09CSl9DTEFTU19NQVNLXFx0KChfQUMoMSwgVUwpIFxcdTAwM2NcXHUwMDNjIFpTX09CSl9DTEFTU19CSVRTKSAtIDEpXFxuK1xcbisjZGVmaW5lIFpTX09CSl9JRFhfQklUU1xcdFxcdChaU19PQkpfUEZOX1NISUZUIC0gWlNfT0JKX0NMQVNTX0JJVFMpXFxuKyNkZWZpbmUgWlNfT0JKX0lEWF9NQVNLXFx0XFx0KChfQUMoMSwgVUwpIFxcdTAwM2NcXHUwMDNjIFpTX09CSl9JRFhfQklUUykgLSAxKVxcbitcXG4rLypcXG4rICogQmVsdC1hbmQtc3VzcGVuZGVyczogdGhlICNpZiBhYm92ZSBhbHJlYWR5IGd1YXJhbnRlZXMgdGhpcyB3aGVuXFxuKyAqIGNsYXNzX2lkeCBpcyBlbmFibGVkLiAgQ2F0Y2hlcyBmdXR1cmUgdHdlYWtzIHRoYXQgYnlwYXNzIGl0LlxcbisgKi9cXG4rc3RhdGljX2Fzc2VydChaU19PQkpfSURYX0JJVFMgXFx1MDAzZT0gWlNfUEFHRVNfUEVSX1pTUEFHRV9CSVRTLFxcbitcXHQgICAgICBcXFwienNtYWxsb2M6IFpTX01JTl9BTExPQ19TSVpFIHdvdWxkIGV4Y2VlZCBaU19NQVhfQUxMT0NfU0laRVxcXCIpO1xcbitcXG4gLyogWlNfTUlOX0FMTE9DX1NJWkUgbXVzdCBiZSBtdWx0aXBsZSBvZiBaU19BTElHTiAqL1xcbiAjZGVmaW5lIFpTX01JTl9BTExPQ19TSVpFIFxcXFxcXG4tXFx0TUFYKDMyLCAoWlNfTUFYX1BBR0VTX1BFUl9aU1BBR0UgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCBcXHUwMDNlXFx1MDAzZSBPQkpfSU5ERVhfQklUUykpXFxuK1xcdE1BWCgzMiwgKFpTX01BWF9QQUdFU19QRVJfWlNQQUdFIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQgXFx1MDAzZVxcdTAwM2UgWlNfT0JKX0lEWF9CSVRTKSlcXG4gLyogZWFjaCBjaHVuayBpbmNsdWRlcyBleHRyYSBzcGFjZSB0byBrZWVwIGhhbmRsZSAqL1xcbiAjZGVmaW5lIFpTX01BWF9BTExPQ19TSVpFXFx0UEFHRV9TSVpFXFxuIFxcbkBAIC0zOTYsMTAgKzQ2NywxMyBAQCBzdGF0aWMgdm9pZCBjYWNoZV9mcmVlX3pzcGFnZShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXFxuIFxcdGttZW1fY2FjaGVfZnJlZSh6c3BhZ2VfY2FjaGVwLCB6c3BhZ2UpO1xcbiB9XFxuIFxcbi0vKiBjbGFzcy1cXHUwMDNlbG9jayh3aGljaCBvd25zIHRoZSBoYW5kbGUpIHN5bmNocm9uaXplcyByYWNlcyAqL1xcbisvKlxcbisgKiBQYWlycyB3aXRoIFJFQURfT05DRSgpIGluIGhhbmRsZV90b19vYmooKTogenNfZnJlZSgpIG1heSByZWFkIHRoZVxcbisgKiBoYW5kbGUgbG9ja2xlc3NseSwgc28gcHJldmVudCBzdG9yZSB0ZWFyaW5nIGhlcmUuXFxuKyAqL1xcbiBzdGF0aWMgdm9pZCByZWNvcmRfb2JqKHVuc2lnbmVkIGxvbmcgaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9iailcXG4ge1xcbi1cXHQqKHVuc2lnbmVkIGxvbmcgKiloYW5kbGUgPSBvYmo7XFxuK1xcdFdSSVRFX09OQ0UoKih1bnNpZ25lZCBsb25nICopaGFuZGxlLCBvYmopO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgX19tYXliZV91bnVzZWQgaXNfZmlyc3RfenBkZXNjKHN0cnVjdCB6cGRlc2MgKnpwZGVzYylcXG5AQCAtNzIxLDMzICs3OTUsNDIgQEAgc3RhdGljIHN0cnVjdCB6cGRlc2MgKmdldF9uZXh0X3pwZGVzYyhzdHJ1Y3QgenBkZXNjICp6cGRlc2MpXFxuIHN0YXRpYyB2b2lkIG9ial90b19sb2NhdGlvbih1bnNpZ25lZCBsb25nIG9iaiwgc3RydWN0IHpwZGVzYyAqKnpwZGVzYyxcXG4gXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50ICpvYmpfaWR4KVxcbiB7XFxuLVxcdCp6cGRlc2MgPSBwZm5fenBkZXNjKG9iaiBcXHUwMDNlXFx1MDAzZSBPQkpfSU5ERVhfQklUUyk7XFxuLVxcdCpvYmpfaWR4ID0gKG9iaiBcXHUwMDI2IE9CSl9JTkRFWF9NQVNLKTtcXG4rXFx0KnpwZGVzYyA9IHBmbl96cGRlc2Mob2JqIFxcdTAwM2VcXHUwMDNlIFpTX09CSl9QRk5fU0hJRlQpO1xcbitcXHQqb2JqX2lkeCA9IChvYmogXFx1MDAyNiBaU19PQkpfSURYX01BU0spO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBvYmpfdG9fenBkZXNjKHVuc2lnbmVkIGxvbmcgb2JqLCBzdHJ1Y3QgenBkZXNjICoqenBkZXNjKVxcbiB7XFxuLVxcdCp6cGRlc2MgPSBwZm5fenBkZXNjKG9iaiBcXHUwMDNlXFx1MDAzZSBPQkpfSU5ERVhfQklUUyk7XFxuK1xcdCp6cGRlc2MgPSBwZm5fenBkZXNjKG9iaiBcXHUwMDNlXFx1MDAzZSBaU19PQkpfUEZOX1NISUZUKTtcXG4rfVxcbitcXG4rLyogRm9sZHMgdG8gMCB3aGVuIFpTX09CSl9DTEFTU19CSVRTID09IDA7IG5vIGlmZGVmIG5lZWRlZCBhdCBjYWxsZXJzLiAqL1xcbitzdGF0aWMgdW5zaWduZWQgaW50IG9ial90b19jbGFzc19pZHgodW5zaWduZWQgbG9uZyBvYmopXFxuK3tcXG4rXFx0cmV0dXJuIChvYmogXFx1MDAzZVxcdTAwM2UgWlNfT0JKX0lEWF9CSVRTKSBcXHUwMDI2IFpTX09CSl9DTEFTU19NQVNLO1xcbiB9XFxuIFxcbiAvKipcXG4tICogbG9jYXRpb25fdG9fb2JqIC0gZ2V0IG9iaiB2YWx1ZSBlbmNvZGVkIGZyb20gKFxcdTAwM2N6cGRlc2NcXHUwMDNlLCBcXHUwMDNjb2JqX2lkeFxcdTAwM2UpXFxuKyAqIGxvY2F0aW9uX3RvX29iaiAtIGVuY29kZSAoXFx1MDAzY3pwZGVzY1xcdTAwM2UsIFxcdTAwM2NvYmpfaWR4XFx1MDAzZSwgXFx1MDAzY2NsYXNzX2lkeFxcdTAwM2UpIGludG8gb2JqIHZhbHVlXFxuICAqIEB6cGRlc2M6IHpwZGVzYyBvYmplY3QgcmVzaWRlcyBpbiB6c3BhZ2VcXG4gICogQG9ial9pZHg6IG9iamVjdCBpbmRleFxcbisgKiBAY2xhc3NfaWR4OiBzaXplIGNsYXNzIGluZGV4OyBpZ25vcmVkIHdoZW4gWlNfT0JKX0NMQVNTX0JJVFMgPT0gMFxcbiAgKi9cXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9jYXRpb25fdG9fb2JqKHN0cnVjdCB6cGRlc2MgKnpwZGVzYywgdW5zaWduZWQgaW50IG9ial9pZHgpXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvY2F0aW9uX3RvX29iaihzdHJ1Y3QgenBkZXNjICp6cGRlc2MsIHVuc2lnbmVkIGludCBvYmpfaWR4LFxcbitcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBjbGFzc19pZHgpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBvYmo7XFxuIFxcbi1cXHRvYmogPSB6cGRlc2NfcGZuKHpwZGVzYykgXFx1MDAzY1xcdTAwM2MgT0JKX0lOREVYX0JJVFM7XFxuLVxcdG9iaiB8PSBvYmpfaWR4IFxcdTAwMjYgT0JKX0lOREVYX01BU0s7XFxuK1xcdG9iaiAgPSB6cGRlc2NfcGZuKHpwZGVzYykgXFx1MDAzY1xcdTAwM2MgWlNfT0JKX1BGTl9TSElGVDtcXG4rXFx0b2JqIHw9ICh1bnNpZ25lZCBsb25nKShjbGFzc19pZHggXFx1MDAyNiBaU19PQkpfQ0xBU1NfTUFTSykgXFx1MDAzY1xcdTAwM2MgWlNfT0JKX0lEWF9CSVRTO1xcbitcXHRvYmogfD0gb2JqX2lkeCBcXHUwMDI2IFpTX09CSl9JRFhfTUFTSztcXG4gXFxuIFxcdHJldHVybiBvYmo7XFxuIH1cXG4gXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhhbmRsZV90b19vYmoodW5zaWduZWQgbG9uZyBoYW5kbGUpXFxuIHtcXG4tXFx0cmV0dXJuICoodW5zaWduZWQgbG9uZyAqKWhhbmRsZTtcXG4rXFx0cmV0dXJuIFJFQURfT05DRSgqKHVuc2lnbmVkIGxvbmcgKiloYW5kbGUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2FsbG9jYXRlZChzdHJ1Y3QgenBkZXNjICp6cGRlc2MsIHZvaWQgKm9iaixcXG5AQCAtODAxLDEzICs4ODQsMjYgQEAgc3RhdGljIGludCB0cnlsb2NrX3pzcGFnZShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBfX2ZyZWVfenNwYWdlKHN0cnVjdCB6c19wb29sICpwb29sLCBzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3MsXFxuLVxcdFxcdFxcdFxcdHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcXG4rLypcXG4rICogVGhyZWUgZnJlZSBoZWxwZXJzLCBrZXB0IGFwYXJ0IGhlcmU6XFxuKyAqXFxuKyAqIF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoKTogYmFyZSBjb3JlOyB3YWxrcyB6cGRlc2NzIGFuZCByZXR1cm5zIHBhZ2VzXFxuKyAqICAgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvci4gIENhbGxlciBvd25zIGFsbCB6cGRlc2MgbG9ja3MgYW5kIGhhc1xcbisgKiAgIHJlbW92ZWQgdGhlIHpzcGFnZSBmcm9tIGl0cyBjbGFzcyBsaXN0LiAgVXNlZCBieSB6c19mcmVlKCkgb3V0c2lkZVxcbisgKiAgIGNsYXNzLVxcdTAwM2Vsb2NrIHNvIHRoZSBidWRkeS1zaWRlIHdvcmsgZG9lcyBub3Qgc3RhbGwgdGhlIGNsYXNzLlxcbisgKlxcbisgKiBfX2ZyZWVfenNwYWdlKCk6IF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoKSArIHBlci1jbGFzcyBhY2NvdW50aW5nLFxcbisgKiAgIHVuZGVyIGNsYXNzLVxcdTAwM2Vsb2NrLiAgVXNlZCBieSBhc3luY19mcmVlX3pzcGFnZSgpLCB0aGUgd29ya2VyIGZvclxcbisgKiAgIHpzcGFnZXMgd2hvc2UgdHJ5bG9ja196c3BhZ2UoKSBmYWlsZWQuXFxuKyAqXFxuKyAqIGZyZWVfenNwYWdlKCk6IGZ1bGwgd3JhcHBlciAtIHRyeWxvY2sgenBkZXNjcywgcmVtb3ZlIGZyb20gY2xhc3NcXG4rICogICBsaXN0LCBjYWxsIF9fZnJlZV96c3BhZ2UoKTsga2lja3MgZGVmZXJyZWQgZnJlZSBvbiBjb250ZW50aW9uLlxcbisgKiAgIFVzZWQgYnkgY29tcGFjdGlvbi5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2ZyZWVfenNwYWdlX2xvY2tsZXNzKHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgenBkZXNjICp6cGRlc2MsICpuZXh0O1xcbiBcXG4tXFx0YXNzZXJ0X3NwaW5fbG9ja2VkKFxcdTAwMjZjbGFzcy1cXHUwMDNlbG9jayk7XFxuLVxcbiBcXHRWTV9CVUdfT04oZ2V0X3pzcGFnZV9pbnVzZSh6c3BhZ2UpKTtcXG4gXFx0Vk1fQlVHX09OKHpzcGFnZS1cXHUwMDNlZnVsbG5lc3MgIT0gWlNfSU5VU0VfUkFUSU9fMCk7XFxuIFxcbkBAIC04MjMsNyArOTE5LDEzIEBAIHN0YXRpYyB2b2lkIF9fZnJlZV96c3BhZ2Uoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcyxcXG4gXFx0fSB3aGlsZSAoenBkZXNjICE9IE5VTEwpO1xcbiBcXG4gXFx0Y2FjaGVfZnJlZV96c3BhZ2UoenNwYWdlKTtcXG4rfVxcbiBcXG4rc3RhdGljIHZvaWQgX19mcmVlX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLFxcbitcXHRcXHRcXHQgIHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcXG4re1xcbitcXHRhc3NlcnRfc3Bpbl9sb2NrZWQoXFx1MDAyNmNsYXNzLVxcdTAwM2Vsb2NrKTtcXG4rXFx0X19mcmVlX3pzcGFnZV9sb2NrbGVzcyh6c3BhZ2UpO1xcbiBcXHRjbGFzc19zdGF0X3N1YihjbGFzcywgWlNfT0JKU19BTExPQ0FURUQsIGNsYXNzLVxcdTAwM2VvYmpzX3Blcl96c3BhZ2UpO1xcbiBcXHRhdG9taWNfbG9uZ19zdWIoY2xhc3MtXFx1MDAzZXBhZ2VzX3Blcl96c3BhZ2UsIFxcdTAwMjZwb29sLVxcdTAwM2VwYWdlc19hbGxvY2F0ZWQpO1xcbiB9XFxuQEAgLTEyNzYsNyArMTM3OCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIG9ial9tYWxsb2Moc3RydWN0IHpzX3Bvb2wgKnBvb2wsXFxuIFxcdGt1bm1hcF9sb2NhbCh2YWRkcik7XFxuIFxcdG1vZF96c3BhZ2VfaW51c2UoenNwYWdlLCAxKTtcXG4gXFxuLVxcdG9iaiA9IGxvY2F0aW9uX3RvX29iaihtX3pwZGVzYywgb2JqKTtcXG4rXFx0b2JqID0gbG9jYXRpb25fdG9fb2JqKG1fenBkZXNjLCBvYmosIHpzcGFnZS1cXHUwMDNlY2xhc3MpO1xcbiBcXHRyZWNvcmRfb2JqKGhhbmRsZSwgb2JqKTtcXG4gXFxuIFxcdHJldHVybiBvYmo7XFxuQEAgLTEzODEsMzcgKzE0ODMsODkgQEAgc3RhdGljIHZvaWQgb2JqX2ZyZWUoaW50IGNsYXNzX3NpemUsIHVuc2lnbmVkIGxvbmcgb2JqKVxcbiBcXHRtb2RfenNwYWdlX2ludXNlKHpzcGFnZSwgLTEpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBSZXNvbHZlIEBoYW5kbGUgdG8gaXRzIHpzcGFnZSAvIHNpemVfY2xhc3MgYW5kIGFjcXVpcmUgY2xhc3MtXFx1MDAzZWxvY2suXFxuKyAqXFxuKyAqIFdoZW4gY2xhc3NfaWR4IGlzIGVuY29kZWQgaW4gb2JqIChaU19PQkpfQ0xBU1NfQklUUyBcXHUwMDNlIDApLCBpdCBpc1xcbisgKiBpbnZhcmlhbnQgdW5kZXIgcGFnZSBtaWdyYXRpb24sIHNvIHRoZSBoYW5kbGUgY2FuIGJlIHJlYWQgbG9ja2xlc3NseVxcbisgKiB0byBwaWNrIHRoZSBzaXplX2NsYXNzLiAgT25jZSBjbGFzcy1cXHUwMDNlbG9jayBpcyBoZWxkIG1pZ3JhdGlvbiBpc1xcbisgKiBibG9ja2VkIGFuZCB0aGUgaGFuZGxlIGlzIHJlLXJlYWQgdG8gb2J0YWluIGEgc3RhYmxlIFBGTi5cXG4rICpcXG4rICogT3RoZXJ3aXNlICgzMi1iaXQsIG9yIDY0LWJpdCBmYWxsYmFjayBwYXRocyBsaWtlIFVNTCB3aGVyZSB0aGVcXG4rICogZW5jb2RpbmcgaXMgZGlzYWJsZWQpLCBmYWxsIGJhY2sgdG8gcG9vbC1cXHUwMDNlbG9jayBmb3IgdGhlIGxvb2t1cC5cXG4rICovXFxuKyNpZiBaU19PQkpfQ0xBU1NfQklUUyBcXHUwMDNlIDBcXG4rc3RhdGljIGlubGluZSB2b2lkIG9ial9jbGFzc19nZXRfYW5kX2xvY2soc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxcbitcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyAqb2JqcCwgc3RydWN0IHpzcGFnZSAqKnpzcGFnZXAsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2l6ZV9jbGFzcyAqKmNsYXNzcClcXG4rXFx0X19hY3F1aXJlcyhcXHUwMDI2KCpjbGFzc3ApLVxcdTAwM2Vsb2NrKVxcbit7XFxuK1xcdHN0cnVjdCB6cGRlc2MgKmZfenBkZXNjO1xcbitcXHR1bnNpZ25lZCBsb25nIG9iajtcXG4rXFxuK1xcdG9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTtcXG4rXFx0KmNsYXNzcCA9IHBvb2wtXFx1MDAzZXNpemVfY2xhc3Nbb2JqX3RvX2NsYXNzX2lkeChvYmopXTtcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjYoKmNsYXNzcCktXFx1MDAzZWxvY2spO1xcbitcXHQvKiBSZS1yZWFkIHVuZGVyIGNsYXNzLVxcdTAwM2Vsb2NrOiBQRk4gaXMgbm93IHN0YWJsZSB2cyBtaWdyYXRpb24uICovXFxuK1xcdG9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTtcXG4rXFx0b2JqX3RvX3pwZGVzYyhvYmosIFxcdTAwMjZmX3pwZGVzYyk7XFxuK1xcdCp6c3BhZ2VwID0gZ2V0X3pzcGFnZShmX3pwZGVzYyk7XFxuK1xcdCpvYmpwID0gb2JqO1xcbit9XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSxcXG4rXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgKm9ianAsIHN0cnVjdCB6c3BhZ2UgKip6c3BhZ2VwLFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNpemVfY2xhc3MgKipjbGFzc3ApXFxuK1xcdF9fYWNxdWlyZXMoXFx1MDAyNigqY2xhc3NwKS1cXHUwMDNlbG9jaylcXG4re1xcbitcXHRzdHJ1Y3QgenBkZXNjICpmX3pwZGVzYztcXG4rXFx0dW5zaWduZWQgbG9uZyBvYmo7XFxuK1xcbitcXHRyZWFkX2xvY2soXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2spO1xcbitcXHRvYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7XFxuK1xcdG9ial90b196cGRlc2Mob2JqLCBcXHUwMDI2Zl96cGRlc2MpO1xcbitcXHQqenNwYWdlcCA9IGdldF96c3BhZ2UoZl96cGRlc2MpO1xcbitcXHQqY2xhc3NwID0genNwYWdlX2NsYXNzKHBvb2wsICp6c3BhZ2VwKTtcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjYoKmNsYXNzcCktXFx1MDAzZWxvY2spO1xcbitcXHRyZWFkX3VubG9jayhcXHUwMDI2cG9vbC1cXHUwMDNlbG9jayk7XFxuK1xcdCpvYmpwID0gb2JqO1xcbit9XFxuKyNlbmRpZlxcbitcXG4gdm9pZCB6c19mcmVlKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgenNwYWdlICp6c3BhZ2U7XFxuLVxcdHN0cnVjdCB6cGRlc2MgKmZfenBkZXNjO1xcbiBcXHR1bnNpZ25lZCBsb25nIG9iajtcXG4gXFx0c3RydWN0IHNpemVfY2xhc3MgKmNsYXNzO1xcbiBcXHRpbnQgZnVsbG5lc3M7XFxuK1xcdHN0cnVjdCB6c3BhZ2UgKnpzcGFnZV90b19mcmVlID0gTlVMTDtcXG4gXFxuIFxcdGlmIChJU19FUlJfT1JfTlVMTCgodm9pZCAqKWhhbmRsZSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIFRoZSBwb29sLVxcdTAwM2Vsb2NrIHByb3RlY3RzIHRoZSByYWNlIHdpdGggenBhZ2UncyBtaWdyYXRpb25cXG4tXFx0ICogc28gaXQncyBzYWZlIHRvIGdldCB0aGUgcGFnZSBmcm9tIGhhbmRsZS5cXG4tXFx0ICovXFxuLVxcdHJlYWRfbG9jayhcXHUwMDI2cG9vbC1cXHUwMDNlbG9jayk7XFxuLVxcdG9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTtcXG4tXFx0b2JqX3RvX3pwZGVzYyhvYmosIFxcdTAwMjZmX3pwZGVzYyk7XFxuLVxcdHpzcGFnZSA9IGdldF96c3BhZ2UoZl96cGRlc2MpO1xcbi1cXHRjbGFzcyA9IHpzcGFnZV9jbGFzcyhwb29sLCB6c3BhZ2UpO1xcbi1cXHRzcGluX2xvY2soXFx1MDAyNmNsYXNzLVxcdTAwM2Vsb2NrKTtcXG4tXFx0cmVhZF91bmxvY2soXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2spO1xcbitcXHRvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrKHBvb2wsIGhhbmRsZSwgXFx1MDAyNm9iaiwgXFx1MDAyNnpzcGFnZSwgXFx1MDAyNmNsYXNzKTtcXG4gXFxuIFxcdGNsYXNzX3N0YXRfc3ViKGNsYXNzLCBaU19PQkpTX0lOVVNFLCAxKTtcXG4gXFx0b2JqX2ZyZWUoY2xhc3MtXFx1MDAzZXNpemUsIG9iaik7XFxuIFxcbiBcXHRmdWxsbmVzcyA9IGZpeF9mdWxsbmVzc19ncm91cChjbGFzcywgenNwYWdlKTtcXG4tXFx0aWYgKGZ1bGxuZXNzID09IFpTX0lOVVNFX1JBVElPXzApXFxuLVxcdFxcdGZyZWVfenNwYWdlKHBvb2wsIGNsYXNzLCB6c3BhZ2UpO1xcbitcXHRpZiAoZnVsbG5lc3MgPT0gWlNfSU5VU0VfUkFUSU9fMCkge1xcbitcXHRcXHRpZiAodHJ5bG9ja196c3BhZ2UoenNwYWdlKSkge1xcbitcXHRcXHRcXHRyZW1vdmVfenNwYWdlKGNsYXNzLCB6c3BhZ2UpO1xcbitcXHRcXHRcXHRjbGFzc19zdGF0X3N1YihjbGFzcywgWlNfT0JKU19BTExPQ0FURUQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBjbGFzcy1cXHUwMDNlb2Jqc19wZXJfenNwYWdlKTtcXG4rXFx0XFx0XFx0enNwYWdlX3RvX2ZyZWUgPSB6c3BhZ2U7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGtpY2tfZGVmZXJyZWRfZnJlZShwb29sKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2Y2xhc3MtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0aWYgKHpzcGFnZV90b19mcmVlKSB7XFxuK1xcdFxcdF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoenNwYWdlX3RvX2ZyZWUpO1xcbitcXHRcXHRhdG9taWNfbG9uZ19zdWIoY2xhc3MtXFx1MDAzZXBhZ2VzX3Blcl96c3BhZ2UsIFxcdTAwMjZwb29sLVxcdTAwM2VwYWdlc19hbGxvY2F0ZWQpO1xcbitcXHR9XFxuIFxcdGNhY2hlX2ZyZWVfaGFuZGxlKGhhbmRsZSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoenNfZnJlZSk7XFxuQEAgLTE3NjIsNyArMTkxNiw4IEBAIHN0YXRpYyBpbnQgenNfcGFnZV9taWdyYXRlKHN0cnVjdCBwYWdlICpuZXdwYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFxuIFxcdFxcdFxcdG9sZF9vYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7XFxuIFxcdFxcdFxcdG9ial90b19sb2NhdGlvbihvbGRfb2JqLCBcXHUwMDI2ZHVtbXksIFxcdTAwMjZvYmpfaWR4KTtcXG4tXFx0XFx0XFx0bmV3X29iaiA9ICh1bnNpZ25lZCBsb25nKWxvY2F0aW9uX3RvX29iaihuZXd6cGRlc2MsIG9ial9pZHgpO1xcbitcXHRcXHRcXHRuZXdfb2JqID0gbG9jYXRpb25fdG9fb2JqKG5ld3pwZGVzYywgb2JqX2lkeCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBvYmpfdG9fY2xhc3NfaWR4KG9sZF9vYmopKTtcXG4gXFx0XFx0XFx0cmVjb3JkX29iaihoYW5kbGUsIG5ld19vYmopO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDI6MTU6MzIuMTU3NjM4MDI4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTg2MTYyMzcyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaU01BTExPQ1wiLFxuICAgIFwiWlJBTVwiLFxuICAgIFwiWlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c19mcmVlXCIsXG4gICAgXCJvYmpfbWFsbG9jXCIsXG4gICAgXCJ6c19wYWdlX21pZ3JhdGVcIixcbiAgICBcImFzeW5jX2ZyZWVfenNwYWdlXCIsXG4gICAgXCJfX2ZyZWVfenNwYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIG9wdGltaXphdGlvbiBmb3IgenNfZnJlZSgpIGluIHpzbWFsbG9jIGJ5IGVuY29kaW5nIHRoZSBjbGFzc19pZHggaW50byB0aGUgb2JqZWN0IGhhbmRsZS4gVGhpcyBhdm9pZHMgdGFraW5nIHBvb2wtXFx1MDAzZWxvY2sgZHVyaW5nIGZyZWUgb3BlcmF0aW9ucy4gSXQgbW9kaWZpZXMgdGhlIGJpdCBsYXlvdXQgb2YgdGhlIG9iamVjdCBoYW5kbGUgYW5kIHVwZGF0ZXMgdGhlIGFsbG9jYXRpb24sIGZyZWVpbmcsIGFuZCBwYWdlIG1pZ3JhdGlvbiBwYXRocy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbG9ja2xlc3Mgc3luY2hyb25pemF0aW9uIGFuZCBiaXR3aXNlIG9wZXJhdGlvbnMgYXJlIGNvcnJlY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDY3NTgyYTgzNmQ1MDRlYWM5NjdmODY3Nzk1N2M3MWZjZjA5MjcxNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDAyOjE1OjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0venNtYWxsb2MuYyBiL21tL3pzbWFsbG9jLmNcbmluZGV4IDYzMTI4ZGRiNzk1OThmLi5iZjc0ZTY5NWQ5NzdkMyAxMDA2NDRcbi0tLSBhL21tL3pzbWFsbG9jLmNcbisrKyBiL21tL3pzbWFsbG9jLmNcbkBAIC0yMSw2ICsyMSwxMCBAQFxuICAqXHRwb29sLVx1MDAzZWxvY2tcbiAgKlx0Y2xhc3MtXHUwMDNlbG9ja1xuICAqXHR6c3BhZ2UtXHUwMDNlbG9ja1xuKyAqXG4rICogV2hlbiBaU19PQkpfQ0xBU1NfQklUUyBcdTAwM2UgMCwgenNfZnJlZSgpIHNraXBzIHBvb2wtXHUwMDNlbG9jazsgaXQgcGlja3NcbisgKiB0aGUgc2l6ZV9jbGFzcyBmcm9tIG9iaidzIGVuY29kZWQgY2xhc3NfaWR4IGFuZCBzZXJpYWxpemVzIGFnYWluc3RcbisgKiBwYWdlIG1pZ3JhdGlvbiB2aWEgY2xhc3MtXHUwMDNlbG9jay5cbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuQEAgLTY3LDggKzcxLDggQEBcbiAjZGVmaW5lIE1BWF9QT1NTSUJMRV9QSFlTTUVNX0JJVFMgTUFYX1BIWVNNRU1fQklUU1xuICNlbHNlXG4gLypcbi0gKiBJZiB0aGlzIGRlZmluaXRpb24gb2YgTUFYX1BIWVNNRU1fQklUUyBpcyB1c2VkLCBPQkpfSU5ERVhfQklUUyB3aWxsIGp1c3Rcbi0gKiBiZSBQQUdFX1NISUZUXG4rICogSWYgdGhpcyBkZWZpbml0aW9uIG9mIE1BWF9QSFlTTUVNX0JJVFMgaXMgdXNlZCwgWlNfT0JKX1BGTl9TSElGVCB3aWxsXG4rICoganVzdCBiZSBQQUdFX1NISUZUXG4gICovXG4gI2RlZmluZSBNQVhfUE9TU0lCTEVfUEhZU01FTV9CSVRTIEJJVFNfUEVSX0xPTkdcbiAjZW5kaWZcbkBAIC04OCw4ICs5MiwyMyBAQFxuICNkZWZpbmUgT0JKX1RBR19CSVRTXHQxXG4gI2RlZmluZSBPQkpfVEFHX01BU0tcdE9CSl9BTExPQ0FURURfVEFHXG4gXG4tI2RlZmluZSBPQkpfSU5ERVhfQklUU1x0KEJJVFNfUEVSX0xPTkcgLSBfUEZOX0JJVFMpXG4tI2RlZmluZSBPQkpfSU5ERVhfTUFTS1x0KChfQUMoMSwgVUwpIFx1MDAzY1x1MDAzYyBPQkpfSU5ERVhfQklUUykgLSAxKVxuKy8qXG4rICogb2JqIGlzIGVuY29kZWQgYXMgW1BGTiB8IGNsYXNzX2lkeCB8IG9ial9pZHhdIHdpdGhpbiBhbiB1bnNpZ25lZCBsb25nOlxuKyAqXG4rICogICB8XHUwMDNjLS0gX1BGTl9CSVRTIC0tXHUwMDNlfFx1MDAzYy0tIFpTX09CSl9DTEFTU19CSVRTIC0tXHUwMDNlfFx1MDAzYy0tIFpTX09CSl9JRFhfQklUUyAtLVx1MDAzZXxcbisgKiAgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuKyAqICAgfCAgICAgICBQRk4gICAgICAgfCAgICAgICAgY2xhc3NfaWR4ICAgICAgICB8ICAgICAgICBvYmpfaWR4ICAgICAgICB8XG4rICogICArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbisgKiAgTVNCICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMU0JcbisgKiAgICAgICAgICAgICAgICAgICAgIHxcbisgKiAgICAgICAgICAgICAgICAgICAgICstLSBaU19PQkpfUEZOX1NISUZUXG4rICpcbisgKiBFbmNvZGluZyBjbGFzc19pZHggaW50byBvYmogbGV0cyB6c19mcmVlKCkgbG9jYXRlIHRoZSBzaXplX2NsYXNzXG4rICogd2l0aG91dCBob2xkaW5nIHBvb2wtXHUwMDNlbG9jazsgY2xhc3NfaWR4IGlzIGludmFyaWFudCBhY3Jvc3MgcGFnZVxuKyAqIG1pZ3JhdGlvbiAob25seSBQRk4gY2hhbmdlcyksIHNvIGEgbG9ja2xlc3MgcmVhZCBvZiB0aGUgb2JqIHZhbHVlXG4rICogYWx3YXlzIHlpZWxkcyBhIHZhbGlkIGNsYXNzX2lkeC5cbisgKi9cbisjZGVmaW5lIFpTX09CSl9QRk5fU0hJRlRcdChCSVRTX1BFUl9MT05HIC0gX1BGTl9CSVRTKVxuIFxuICNkZWZpbmUgSFVHRV9CSVRTXHQxXG4gI2RlZmluZSBGVUxMTkVTU19CSVRTXHQ0XG5AQCAtOTgsOSArMTE3LDYxIEBAXG4gXG4gI2RlZmluZSBaU19NQVhfUEFHRVNfUEVSX1pTUEFHRVx0KF9BQyhDT05GSUdfWlNNQUxMT0NfQ0hBSU5fU0laRSwgVUwpKVxuIFxuKy8qXG4rICogQml0cyB0byBpbmRleCBhIHBhZ2Ugd2l0aGluIGEgenNwYWdlID0gY2VpbChsb2cyKFpTX01BWF9QQUdFU19QRVJfWlNQQUdFKSkuXG4rICogQ29tcHV0ZWQgYXQgcHJlcHJvY2Vzc29yIHRpbWUsIGZvciB1c2UgaW4gI2lmIGJlbG93LiAgS2NvbmZpZ1xuKyAqIHJlc3RyaWN0cyBaU01BTExPQ19DSEFJTl9TSVpFIHRvIFs0LCAxNl0uXG4rICovXG4rI2lmIFpTX01BWF9QQUdFU19QRVJfWlNQQUdFIFx1MDAzYz0gNFxuKyNkZWZpbmUgWlNfUEFHRVNfUEVSX1pTUEFHRV9CSVRTXHQyXG4rI2VsaWYgWlNfTUFYX1BBR0VTX1BFUl9aU1BBR0UgXHUwMDNjPSA4XG4rI2RlZmluZSBaU19QQUdFU19QRVJfWlNQQUdFX0JJVFNcdDNcbisjZWxpZiBaU19NQVhfUEFHRVNfUEVSX1pTUEFHRSBcdTAwM2M9IDE2XG4rI2RlZmluZSBaU19QQUdFU19QRVJfWlNQQUdFX0JJVFNcdDRcbisjZWxzZVxuKyNlcnJvciBcIlpTTUFMTE9DX0NIQUlOX1NJWkUgb3V0IG9mIGV4cGVjdGVkIHJhbmdlIFs0LDE2XVwiXG4rI2VuZGlmXG4rXG4rLypcbisgKiBCaXRzIHRvIGluZGV4IGFuIG9iamVjdCB3aXRoaW4gYSBzaW5nbGUgUEFHRV9TSVpFIGF0IHRoZSBzbWFsbGVzdFxuKyAqIHBvc3NpYmxlIG9iamVjdCBzaXplOiBsb2cyKFBBR0VfU0laRSAvIDMyKSA9IFBBR0VfU0hJRlQgLSA1LlxuKyAqIDMyIGlzIHRoZSBoYXJkIGZsb29yIG9mIFpTX01JTl9BTExPQ19TSVpFLlxuKyAqL1xuKyNkZWZpbmUgWlNfT0JKU19QRVJfUEFHRV9CSVRTXHQoUEFHRV9TSElGVCAtIDUpXG4rXG4rLypcbisgKiBCaXRzIHRvIGluZGV4IGFueSBvYmplY3QgaW4gdGhlIGRlbnNlc3QgcG9zc2libGUgenNwYWdlLiAgQmVsb3cgdGhpcyxcbisgKiBaU19NSU5fQUxMT0NfU0laRSBpcyBhdXRvLXJhaXNlZCBieSB0aGUgTUFYKDMyLCAuLi4pIGZvcm11bGEgLS0gc3RpbGxcbisgKiBjb3JyZWN0LCBidXQgb2JqZWN0cyBhcmUgY29hcnNlci5cbisgKi9cbisjZGVmaW5lIFpTX09CSlNfUEVSX1pTUEFHRV9CSVRTIFxcXG4rXHQoWlNfUEFHRVNfUEVSX1pTUEFHRV9CSVRTICsgWlNfT0JKU19QRVJfUEFHRV9CSVRTKVxuK1xuKy8qXG4rICogRW5jb2RlIGNsYXNzX2lkeCBvbmx5IHdoZW4gb2JqIGhhcyBzcGFyZSBiaXRzOyBvdGhlcndpc2VcbisgKiBaU19PQkpfQ0xBU1NfQklUUyBmb2xkcyB0byAwICgzMi1iaXQsIG9yIDY0LWJpdCBVTUwvZmFsbGJhY2spLlxuKyAqL1xuKyNpZiBCSVRTX1BFUl9MT05HIFx1MDAzZT0gNjQgXHUwMDI2XHUwMDI2IFxcXG4rXHRaU19PQkpfUEZOX1NISUZUIFx1MDAzZT0gKENMQVNTX0JJVFMgKyAxKSArIFpTX09CSlNfUEVSX1pTUEFHRV9CSVRTXG4rI2RlZmluZSBaU19PQkpfQ0xBU1NfQklUU1x0KENMQVNTX0JJVFMgKyAxKVxuKyNlbHNlXG4rI2RlZmluZSBaU19PQkpfQ0xBU1NfQklUU1x0MFxuKyNlbmRpZlxuKyNkZWZpbmUgWlNfT0JKX0NMQVNTX01BU0tcdCgoX0FDKDEsIFVMKSBcdTAwM2NcdTAwM2MgWlNfT0JKX0NMQVNTX0JJVFMpIC0gMSlcbitcbisjZGVmaW5lIFpTX09CSl9JRFhfQklUU1x0XHQoWlNfT0JKX1BGTl9TSElGVCAtIFpTX09CSl9DTEFTU19CSVRTKVxuKyNkZWZpbmUgWlNfT0JKX0lEWF9NQVNLXHRcdCgoX0FDKDEsIFVMKSBcdTAwM2NcdTAwM2MgWlNfT0JKX0lEWF9CSVRTKSAtIDEpXG4rXG4rLypcbisgKiBCZWx0LWFuZC1zdXNwZW5kZXJzOiB0aGUgI2lmIGFib3ZlIGFscmVhZHkgZ3VhcmFudGVlcyB0aGlzIHdoZW5cbisgKiBjbGFzc19pZHggaXMgZW5hYmxlZC4gIENhdGNoZXMgZnV0dXJlIHR3ZWFrcyB0aGF0IGJ5cGFzcyBpdC5cbisgKi9cbitzdGF0aWNfYXNzZXJ0KFpTX09CSl9JRFhfQklUUyBcdTAwM2U9IFpTX1BBR0VTX1BFUl9aU1BBR0VfQklUUyxcbitcdCAgICAgIFwienNtYWxsb2M6IFpTX01JTl9BTExPQ19TSVpFIHdvdWxkIGV4Y2VlZCBaU19NQVhfQUxMT0NfU0laRVwiKTtcbitcbiAvKiBaU19NSU5fQUxMT0NfU0laRSBtdXN0IGJlIG11bHRpcGxlIG9mIFpTX0FMSUdOICovXG4gI2RlZmluZSBaU19NSU5fQUxMT0NfU0laRSBcXFxuLVx0TUFYKDMyLCAoWlNfTUFYX1BBR0VTX1BFUl9aU1BBR0UgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQgXHUwMDNlXHUwMDNlIE9CSl9JTkRFWF9CSVRTKSlcbitcdE1BWCgzMiwgKFpTX01BWF9QQUdFU19QRVJfWlNQQUdFIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUIFx1MDAzZVx1MDAzZSBaU19PQkpfSURYX0JJVFMpKVxuIC8qIGVhY2ggY2h1bmsgaW5jbHVkZXMgZXh0cmEgc3BhY2UgdG8ga2VlcCBoYW5kbGUgKi9cbiAjZGVmaW5lIFpTX01BWF9BTExPQ19TSVpFXHRQQUdFX1NJWkVcbiBcbkBAIC0zOTYsMTAgKzQ2NywxMyBAQCBzdGF0aWMgdm9pZCBjYWNoZV9mcmVlX3pzcGFnZShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXG4gXHRrbWVtX2NhY2hlX2ZyZWUoenNwYWdlX2NhY2hlcCwgenNwYWdlKTtcbiB9XG4gXG4tLyogY2xhc3MtXHUwMDNlbG9jayh3aGljaCBvd25zIHRoZSBoYW5kbGUpIHN5bmNocm9uaXplcyByYWNlcyAqL1xuKy8qXG4rICogUGFpcnMgd2l0aCBSRUFEX09OQ0UoKSBpbiBoYW5kbGVfdG9fb2JqKCk6IHpzX2ZyZWUoKSBtYXkgcmVhZCB0aGVcbisgKiBoYW5kbGUgbG9ja2xlc3NseSwgc28gcHJldmVudCBzdG9yZSB0ZWFyaW5nIGhlcmUuXG4rICovXG4gc3RhdGljIHZvaWQgcmVjb3JkX29iaih1bnNpZ25lZCBsb25nIGhhbmRsZSwgdW5zaWduZWQgbG9uZyBvYmopXG4ge1xuLVx0Kih1bnNpZ25lZCBsb25nICopaGFuZGxlID0gb2JqO1xuK1x0V1JJVEVfT05DRSgqKHVuc2lnbmVkIGxvbmcgKiloYW5kbGUsIG9iaik7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBfX21heWJlX3VudXNlZCBpc19maXJzdF96cGRlc2Moc3RydWN0IHpwZGVzYyAqenBkZXNjKVxuQEAgLTcyMSwzMyArNzk1LDQyIEBAIHN0YXRpYyBzdHJ1Y3QgenBkZXNjICpnZXRfbmV4dF96cGRlc2Moc3RydWN0IHpwZGVzYyAqenBkZXNjKVxuIHN0YXRpYyB2b2lkIG9ial90b19sb2NhdGlvbih1bnNpZ25lZCBsb25nIG9iaiwgc3RydWN0IHpwZGVzYyAqKnpwZGVzYyxcbiBcdFx0XHRcdHVuc2lnbmVkIGludCAqb2JqX2lkeClcbiB7XG4tXHQqenBkZXNjID0gcGZuX3pwZGVzYyhvYmogXHUwMDNlXHUwMDNlIE9CSl9JTkRFWF9CSVRTKTtcbi1cdCpvYmpfaWR4ID0gKG9iaiBcdTAwMjYgT0JKX0lOREVYX01BU0spO1xuK1x0KnpwZGVzYyA9IHBmbl96cGRlc2Mob2JqIFx1MDAzZVx1MDAzZSBaU19PQkpfUEZOX1NISUZUKTtcbitcdCpvYmpfaWR4ID0gKG9iaiBcdTAwMjYgWlNfT0JKX0lEWF9NQVNLKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgb2JqX3RvX3pwZGVzYyh1bnNpZ25lZCBsb25nIG9iaiwgc3RydWN0IHpwZGVzYyAqKnpwZGVzYylcbiB7XG4tXHQqenBkZXNjID0gcGZuX3pwZGVzYyhvYmogXHUwMDNlXHUwMDNlIE9CSl9JTkRFWF9CSVRTKTtcbitcdCp6cGRlc2MgPSBwZm5fenBkZXNjKG9iaiBcdTAwM2VcdTAwM2UgWlNfT0JKX1BGTl9TSElGVCk7XG4rfVxuK1xuKy8qIEZvbGRzIHRvIDAgd2hlbiBaU19PQkpfQ0xBU1NfQklUUyA9PSAwOyBubyBpZmRlZiBuZWVkZWQgYXQgY2FsbGVycy4gKi9cbitzdGF0aWMgdW5zaWduZWQgaW50IG9ial90b19jbGFzc19pZHgodW5zaWduZWQgbG9uZyBvYmopXG4re1xuK1x0cmV0dXJuIChvYmogXHUwMDNlXHUwMDNlIFpTX09CSl9JRFhfQklUUykgXHUwMDI2IFpTX09CSl9DTEFTU19NQVNLO1xuIH1cbiBcbiAvKipcbi0gKiBsb2NhdGlvbl90b19vYmogLSBnZXQgb2JqIHZhbHVlIGVuY29kZWQgZnJvbSAoXHUwMDNjenBkZXNjXHUwMDNlLCBcdTAwM2NvYmpfaWR4XHUwMDNlKVxuKyAqIGxvY2F0aW9uX3RvX29iaiAtIGVuY29kZSAoXHUwMDNjenBkZXNjXHUwMDNlLCBcdTAwM2NvYmpfaWR4XHUwMDNlLCBcdTAwM2NjbGFzc19pZHhcdTAwM2UpIGludG8gb2JqIHZhbHVlXG4gICogQHpwZGVzYzogenBkZXNjIG9iamVjdCByZXNpZGVzIGluIHpzcGFnZVxuICAqIEBvYmpfaWR4OiBvYmplY3QgaW5kZXhcbisgKiBAY2xhc3NfaWR4OiBzaXplIGNsYXNzIGluZGV4OyBpZ25vcmVkIHdoZW4gWlNfT0JKX0NMQVNTX0JJVFMgPT0gMFxuICAqL1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGxvY2F0aW9uX3RvX29iaihzdHJ1Y3QgenBkZXNjICp6cGRlc2MsIHVuc2lnbmVkIGludCBvYmpfaWR4KVxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvY2F0aW9uX3RvX29iaihzdHJ1Y3QgenBkZXNjICp6cGRlc2MsIHVuc2lnbmVkIGludCBvYmpfaWR4LFxuK1x0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgY2xhc3NfaWR4KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgb2JqO1xuIFxuLVx0b2JqID0genBkZXNjX3Bmbih6cGRlc2MpIFx1MDAzY1x1MDAzYyBPQkpfSU5ERVhfQklUUztcbi1cdG9iaiB8PSBvYmpfaWR4IFx1MDAyNiBPQkpfSU5ERVhfTUFTSztcbitcdG9iaiAgPSB6cGRlc2NfcGZuKHpwZGVzYykgXHUwMDNjXHUwMDNjIFpTX09CSl9QRk5fU0hJRlQ7XG4rXHRvYmogfD0gKHVuc2lnbmVkIGxvbmcpKGNsYXNzX2lkeCBcdTAwMjYgWlNfT0JKX0NMQVNTX01BU0spIFx1MDAzY1x1MDAzYyBaU19PQkpfSURYX0JJVFM7XG4rXHRvYmogfD0gb2JqX2lkeCBcdTAwMjYgWlNfT0JKX0lEWF9NQVNLO1xuIFxuIFx0cmV0dXJuIG9iajtcbiB9XG4gXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgaGFuZGxlX3RvX29iaih1bnNpZ25lZCBsb25nIGhhbmRsZSlcbiB7XG4tXHRyZXR1cm4gKih1bnNpZ25lZCBsb25nICopaGFuZGxlO1xuK1x0cmV0dXJuIFJFQURfT05DRSgqKHVuc2lnbmVkIGxvbmcgKiloYW5kbGUpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2FsbG9jYXRlZChzdHJ1Y3QgenBkZXNjICp6cGRlc2MsIHZvaWQgKm9iaixcbkBAIC04MDEsMTMgKzg4NCwyNiBAQCBzdGF0aWMgaW50IHRyeWxvY2tfenNwYWdlKHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX2ZyZWVfenNwYWdlKHN0cnVjdCB6c19wb29sICpwb29sLCBzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3MsXG4tXHRcdFx0XHRzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXG4rLypcbisgKiBUaHJlZSBmcmVlIGhlbHBlcnMsIGtlcHQgYXBhcnQgaGVyZTpcbisgKlxuKyAqIF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoKTogYmFyZSBjb3JlOyB3YWxrcyB6cGRlc2NzIGFuZCByZXR1cm5zIHBhZ2VzXG4rICogICB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLiAgQ2FsbGVyIG93bnMgYWxsIHpwZGVzYyBsb2NrcyBhbmQgaGFzXG4rICogICByZW1vdmVkIHRoZSB6c3BhZ2UgZnJvbSBpdHMgY2xhc3MgbGlzdC4gIFVzZWQgYnkgenNfZnJlZSgpIG91dHNpZGVcbisgKiAgIGNsYXNzLVx1MDAzZWxvY2sgc28gdGhlIGJ1ZGR5LXNpZGUgd29yayBkb2VzIG5vdCBzdGFsbCB0aGUgY2xhc3MuXG4rICpcbisgKiBfX2ZyZWVfenNwYWdlKCk6IF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoKSArIHBlci1jbGFzcyBhY2NvdW50aW5nLFxuKyAqICAgdW5kZXIgY2xhc3MtXHUwMDNlbG9jay4gIFVzZWQgYnkgYXN5bmNfZnJlZV96c3BhZ2UoKSwgdGhlIHdvcmtlciBmb3JcbisgKiAgIHpzcGFnZXMgd2hvc2UgdHJ5bG9ja196c3BhZ2UoKSBmYWlsZWQuXG4rICpcbisgKiBmcmVlX3pzcGFnZSgpOiBmdWxsIHdyYXBwZXIgLSB0cnlsb2NrIHpwZGVzY3MsIHJlbW92ZSBmcm9tIGNsYXNzXG4rICogICBsaXN0LCBjYWxsIF9fZnJlZV96c3BhZ2UoKTsga2lja3MgZGVmZXJyZWQgZnJlZSBvbiBjb250ZW50aW9uLlxuKyAqICAgVXNlZCBieSBjb21wYWN0aW9uLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2ZyZWVfenNwYWdlX2xvY2tsZXNzKHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcbiB7XG4gXHRzdHJ1Y3QgenBkZXNjICp6cGRlc2MsICpuZXh0O1xuIFxuLVx0YXNzZXJ0X3NwaW5fbG9ja2VkKFx1MDAyNmNsYXNzLVx1MDAzZWxvY2spO1xuLVxuIFx0Vk1fQlVHX09OKGdldF96c3BhZ2VfaW51c2UoenNwYWdlKSk7XG4gXHRWTV9CVUdfT04oenNwYWdlLVx1MDAzZWZ1bGxuZXNzICE9IFpTX0lOVVNFX1JBVElPXzApO1xuIFxuQEAgLTgyMyw3ICs5MTksMTMgQEAgc3RhdGljIHZvaWQgX19mcmVlX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLFxuIFx0fSB3aGlsZSAoenBkZXNjICE9IE5VTEwpO1xuIFxuIFx0Y2FjaGVfZnJlZV96c3BhZ2UoenNwYWdlKTtcbit9XG4gXG4rc3RhdGljIHZvaWQgX19mcmVlX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLFxuK1x0XHRcdCAgc3RydWN0IHpzcGFnZSAqenNwYWdlKVxuK3tcbitcdGFzc2VydF9zcGluX2xvY2tlZChcdTAwMjZjbGFzcy1cdTAwM2Vsb2NrKTtcbitcdF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoenNwYWdlKTtcbiBcdGNsYXNzX3N0YXRfc3ViKGNsYXNzLCBaU19PQkpTX0FMTE9DQVRFRCwgY2xhc3MtXHUwMDNlb2Jqc19wZXJfenNwYWdlKTtcbiBcdGF0b21pY19sb25nX3N1YihjbGFzcy1cdTAwM2VwYWdlc19wZXJfenNwYWdlLCBcdTAwMjZwb29sLVx1MDAzZXBhZ2VzX2FsbG9jYXRlZCk7XG4gfVxuQEAgLTEyNzYsNyArMTM3OCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIG9ial9tYWxsb2Moc3RydWN0IHpzX3Bvb2wgKnBvb2wsXG4gXHRrdW5tYXBfbG9jYWwodmFkZHIpO1xuIFx0bW9kX3pzcGFnZV9pbnVzZSh6c3BhZ2UsIDEpO1xuIFxuLVx0b2JqID0gbG9jYXRpb25fdG9fb2JqKG1fenBkZXNjLCBvYmopO1xuK1x0b2JqID0gbG9jYXRpb25fdG9fb2JqKG1fenBkZXNjLCBvYmosIHpzcGFnZS1cdTAwM2VjbGFzcyk7XG4gXHRyZWNvcmRfb2JqKGhhbmRsZSwgb2JqKTtcbiBcbiBcdHJldHVybiBvYmo7XG5AQCAtMTM4MSwzNyArMTQ4Myw4OSBAQCBzdGF0aWMgdm9pZCBvYmpfZnJlZShpbnQgY2xhc3Nfc2l6ZSwgdW5zaWduZWQgbG9uZyBvYmopXG4gXHRtb2RfenNwYWdlX2ludXNlKHpzcGFnZSwgLTEpO1xuIH1cbiBcbisvKlxuKyAqIFJlc29sdmUgQGhhbmRsZSB0byBpdHMgenNwYWdlIC8gc2l6ZV9jbGFzcyBhbmQgYWNxdWlyZSBjbGFzcy1cdTAwM2Vsb2NrLlxuKyAqXG4rICogV2hlbiBjbGFzc19pZHggaXMgZW5jb2RlZCBpbiBvYmogKFpTX09CSl9DTEFTU19CSVRTIFx1MDAzZSAwKSwgaXQgaXNcbisgKiBpbnZhcmlhbnQgdW5kZXIgcGFnZSBtaWdyYXRpb24sIHNvIHRoZSBoYW5kbGUgY2FuIGJlIHJlYWQgbG9ja2xlc3NseVxuKyAqIHRvIHBpY2sgdGhlIHNpemVfY2xhc3MuICBPbmNlIGNsYXNzLVx1MDAzZWxvY2sgaXMgaGVsZCBtaWdyYXRpb24gaXNcbisgKiBibG9ja2VkIGFuZCB0aGUgaGFuZGxlIGlzIHJlLXJlYWQgdG8gb2J0YWluIGEgc3RhYmxlIFBGTi5cbisgKlxuKyAqIE90aGVyd2lzZSAoMzItYml0LCBvciA2NC1iaXQgZmFsbGJhY2sgcGF0aHMgbGlrZSBVTUwgd2hlcmUgdGhlXG4rICogZW5jb2RpbmcgaXMgZGlzYWJsZWQpLCBmYWxsIGJhY2sgdG8gcG9vbC1cdTAwM2Vsb2NrIGZvciB0aGUgbG9va3VwLlxuKyAqL1xuKyNpZiBaU19PQkpfQ0xBU1NfQklUUyBcdTAwM2UgMFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSxcbitcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgKm9ianAsIHN0cnVjdCB6c3BhZ2UgKip6c3BhZ2VwLFxuK1x0XHRcdFx0XHQgc3RydWN0IHNpemVfY2xhc3MgKipjbGFzc3ApXG4rXHRfX2FjcXVpcmVzKFx1MDAyNigqY2xhc3NwKS1cdTAwM2Vsb2NrKVxuK3tcbitcdHN0cnVjdCB6cGRlc2MgKmZfenBkZXNjO1xuK1x0dW5zaWduZWQgbG9uZyBvYmo7XG4rXG4rXHRvYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7XG4rXHQqY2xhc3NwID0gcG9vbC1cdTAwM2VzaXplX2NsYXNzW29ial90b19jbGFzc19pZHgob2JqKV07XG4rXHRzcGluX2xvY2soXHUwMDI2KCpjbGFzc3ApLVx1MDAzZWxvY2spO1xuK1x0LyogUmUtcmVhZCB1bmRlciBjbGFzcy1cdTAwM2Vsb2NrOiBQRk4gaXMgbm93IHN0YWJsZSB2cyBtaWdyYXRpb24uICovXG4rXHRvYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7XG4rXHRvYmpfdG9fenBkZXNjKG9iaiwgXHUwMDI2Zl96cGRlc2MpO1xuK1x0KnpzcGFnZXAgPSBnZXRfenNwYWdlKGZfenBkZXNjKTtcbitcdCpvYmpwID0gb2JqO1xuK31cbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSxcbitcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgKm9ianAsIHN0cnVjdCB6c3BhZ2UgKip6c3BhZ2VwLFxuK1x0XHRcdFx0XHQgc3RydWN0IHNpemVfY2xhc3MgKipjbGFzc3ApXG4rXHRfX2FjcXVpcmVzKFx1MDAyNigqY2xhc3NwKS1cdTAwM2Vsb2NrKVxuK3tcbitcdHN0cnVjdCB6cGRlc2MgKmZfenBkZXNjO1xuK1x0dW5zaWduZWQgbG9uZyBvYmo7XG4rXG4rXHRyZWFkX2xvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbitcdG9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTtcbitcdG9ial90b196cGRlc2Mob2JqLCBcdTAwMjZmX3pwZGVzYyk7XG4rXHQqenNwYWdlcCA9IGdldF96c3BhZ2UoZl96cGRlc2MpO1xuK1x0KmNsYXNzcCA9IHpzcGFnZV9jbGFzcyhwb29sLCAqenNwYWdlcCk7XG4rXHRzcGluX2xvY2soXHUwMDI2KCpjbGFzc3ApLVx1MDAzZWxvY2spO1xuK1x0cmVhZF91bmxvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbitcdCpvYmpwID0gb2JqO1xuK31cbisjZW5kaWZcbitcbiB2b2lkIHpzX2ZyZWUoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlKVxuIHtcbiBcdHN0cnVjdCB6c3BhZ2UgKnpzcGFnZTtcbi1cdHN0cnVjdCB6cGRlc2MgKmZfenBkZXNjO1xuIFx0dW5zaWduZWQgbG9uZyBvYmo7XG4gXHRzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3M7XG4gXHRpbnQgZnVsbG5lc3M7XG4rXHRzdHJ1Y3QgenNwYWdlICp6c3BhZ2VfdG9fZnJlZSA9IE5VTEw7XG4gXG4gXHRpZiAoSVNfRVJSX09SX05VTEwoKHZvaWQgKiloYW5kbGUpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHQvKlxuLVx0ICogVGhlIHBvb2wtXHUwMDNlbG9jayBwcm90ZWN0cyB0aGUgcmFjZSB3aXRoIHpwYWdlJ3MgbWlncmF0aW9uXG4tXHQgKiBzbyBpdCdzIHNhZmUgdG8gZ2V0IHRoZSBwYWdlIGZyb20gaGFuZGxlLlxuLVx0ICovXG4tXHRyZWFkX2xvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbi1cdG9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTtcbi1cdG9ial90b196cGRlc2Mob2JqLCBcdTAwMjZmX3pwZGVzYyk7XG4tXHR6c3BhZ2UgPSBnZXRfenNwYWdlKGZfenBkZXNjKTtcbi1cdGNsYXNzID0genNwYWdlX2NsYXNzKHBvb2wsIHpzcGFnZSk7XG4tXHRzcGluX2xvY2soXHUwMDI2Y2xhc3MtXHUwMDNlbG9jayk7XG4tXHRyZWFkX3VubG9jayhcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuK1x0b2JqX2NsYXNzX2dldF9hbmRfbG9jayhwb29sLCBoYW5kbGUsIFx1MDAyNm9iaiwgXHUwMDI2enNwYWdlLCBcdTAwMjZjbGFzcyk7XG4gXG4gXHRjbGFzc19zdGF0X3N1YihjbGFzcywgWlNfT0JKU19JTlVTRSwgMSk7XG4gXHRvYmpfZnJlZShjbGFzcy1cdTAwM2VzaXplLCBvYmopO1xuIFxuIFx0ZnVsbG5lc3MgPSBmaXhfZnVsbG5lc3NfZ3JvdXAoY2xhc3MsIHpzcGFnZSk7XG4tXHRpZiAoZnVsbG5lc3MgPT0gWlNfSU5VU0VfUkFUSU9fMClcbi1cdFx0ZnJlZV96c3BhZ2UocG9vbCwgY2xhc3MsIHpzcGFnZSk7XG4rXHRpZiAoZnVsbG5lc3MgPT0gWlNfSU5VU0VfUkFUSU9fMCkge1xuK1x0XHRpZiAodHJ5bG9ja196c3BhZ2UoenNwYWdlKSkge1xuK1x0XHRcdHJlbW92ZV96c3BhZ2UoY2xhc3MsIHpzcGFnZSk7XG4rXHRcdFx0Y2xhc3Nfc3RhdF9zdWIoY2xhc3MsIFpTX09CSlNfQUxMT0NBVEVELFxuK1x0XHRcdFx0ICAgICAgIGNsYXNzLVx1MDAzZW9ianNfcGVyX3pzcGFnZSk7XG4rXHRcdFx0enNwYWdlX3RvX2ZyZWUgPSB6c3BhZ2U7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0a2lja19kZWZlcnJlZF9mcmVlKHBvb2wpO1xuK1x0XHR9XG4rXHR9XG4gXG4gXHRzcGluX3VubG9jayhcdTAwMjZjbGFzcy1cdTAwM2Vsb2NrKTtcbitcbitcdGlmICh6c3BhZ2VfdG9fZnJlZSkge1xuK1x0XHRfX2ZyZWVfenNwYWdlX2xvY2tsZXNzKHpzcGFnZV90b19mcmVlKTtcbitcdFx0YXRvbWljX2xvbmdfc3ViKGNsYXNzLVx1MDAzZXBhZ2VzX3Blcl96c3BhZ2UsIFx1MDAyNnBvb2wtXHUwMDNlcGFnZXNfYWxsb2NhdGVkKTtcbitcdH1cbiBcdGNhY2hlX2ZyZWVfaGFuZGxlKGhhbmRsZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHpzX2ZyZWUpO1xuQEAgLTE3NjIsNyArMTkxNiw4IEBAIHN0YXRpYyBpbnQgenNfcGFnZV9taWdyYXRlKHN0cnVjdCBwYWdlICpuZXdwYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcbiBcdFx0XHRvbGRfb2JqID0gaGFuZGxlX3RvX29iaihoYW5kbGUpO1xuIFx0XHRcdG9ial90b19sb2NhdGlvbihvbGRfb2JqLCBcdTAwMjZkdW1teSwgXHUwMDI2b2JqX2lkeCk7XG4tXHRcdFx0bmV3X29iaiA9ICh1bnNpZ25lZCBsb25nKWxvY2F0aW9uX3RvX29iaihuZXd6cGRlc2MsIG9ial9pZHgpO1xuK1x0XHRcdG5ld19vYmogPSBsb2NhdGlvbl90b19vYmoobmV3enBkZXNjLCBvYmpfaWR4LFxuK1x0XHRcdFx0XHRcdCAgb2JqX3RvX2NsYXNzX2lkeChvbGRfb2JqKSk7XG4gXHRcdFx0cmVjb3JkX29iaihoYW5kbGUsIG5ld19vYmopO1xuIFx0XHR9XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwMjoxNTozMi4xNTc2Mzk1MDhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDUwMDc1MjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIHpzbWFsbG9jIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgbWVzc2luZyB3aXRoIGBtbS96c21hbGxvYy5jYC4gVGhlIGdpc3Qgb2YgaXQgaXMgYSBjbGV2ZXIgbG9ja2xlc3Mgb3B0aW1pemF0aW9uIGZvciBgenNfZnJlZSgpYC4gVGhleSdyZSBlbWJlZGRpbmcgdGhlIGBjbGFzc19pZHhgIHJpZ2h0IGludG8gdGhlIG9iamVjdCBoYW5kbGUgaXRzZWxmLiBUaGF0J3MgcHJldHR5IHNtYXJ0IOKAkyBpZiBgWlNfT0JKX0NMQVNTX0JJVFNgIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLCB0aGVuIGB6c19mcmVlKClgIGNhbiBieXBhc3MgZ3JhYmJpbmcgYHBvb2wtXHUwMDNlbG9ja2AsIHdoaWNoIHNob3VsZCBib29zdCBwZXJmb3JtYW5jZS4gVGhpcyBuYXR1cmFsbHkgbWVhbnMgdGhleSd2ZSB0d2Vha2VkIHRoZSBiaXQgbGF5b3V0IG9mIHRoZSBvYmplY3QgaGFuZGxlLCBhbmQgdGhleSd2ZSBhZGRlZCBhIG5ldyBmdW5jdGlvbiwgYF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoKWAuIGB6c19mcmVlKClgIGlzIG5vdyB1c2luZyBgb2JqX2NsYXNzX2dldF9hbmRfbG9jaygpYCB0byBlaXRoZXIgZ28gdGhlIGxvY2tsZXNzIHJvdXRlIG9yIGZhbGwgYmFjayB0byB0aGUgb2xkIGBwb29sLVx1MDAzZWxvY2tgIGFwcHJvYWNoLCBkZXBlbmRpbmcgb24gdGhlIHNpdHVhdGlvbi5cblxuVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IHNpZ25pZmljYW50IG9uZSBhdCB0aGF0LCB0b3VjaGluZyBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IGB6c21hbGxvY2AuIEl0J3Mgc2NyZWFtaW5nIGZvciBzb21lIHNlcmlvdXMgZnV6emluZy4gR290dGEgbWFrZSBzdXJlIHRoaXMgbG9ja2xlc3Mgb3B0aW1pemF0aW9uIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY29uY3VycmVuY3kgaXNzdWVzLlxuXG5Ob3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBtaW5pbWFsIHNldCBvZiBrZXJuZWwgY29uZmlncyBuZWVkZWQgdG8gZW5hYmxlIHpzbWFsbG9jIHNvIEkgY2FuIHJlcHJvZHVjZSB0aGUgcGF0Y2guIExldCdzIHNlZS4uLiBJJ2xsIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgc2VhcmNoIGZvciBcInpzbWFsbG9jXCIuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjU2LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDI6MTU6MzguMjA3NzE3NTk1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDAxNzQzMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpTTUFMTE9DXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTE0PWNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcXG4tLVxcbm1tL0tjb25maWctMTI0LVxcbm1tL0tjb25maWc6MTI1OmNvbmZpZyBaU01BTExPQ1xcbm1tL0tjb25maWctMTI2LVxcdHRyaXN0YXRlXFxuLS1cXG5tbS9LY29uZmlnPTEzMz1jb21tZW50IFxcXCJac21hbGxvYyBpcyBhIGNvbW1vbiBiYWNrZW5kIGFsbG9jYXRvciBmb3IgenN3YXAgXFx1MDAyNiB6cmFtXFxcIlxcbm1tL0tjb25maWctMTM0LVxcbm1tL0tjb25maWc6MTM1OmNvbmZpZyBaU01BTExPQ19TVEFUXFxubW0vS2NvbmZpZy0xMzYtXFx0Ym9vbCBcXFwiRXhwb3J0IHpzbWFsbG9jIHN0YXRpc3RpY3NcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0My1cXG5tbS9LY29uZmlnOjE0NDpjb25maWcgWlNNQUxMT0NfQ0hBSU5fU0laRVxcbm1tL0tjb25maWctMTQ1LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgcGh5c2ljYWwgcGFnZXMgcGVyLXpzcGFnZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDI6MTU6NDAuNDQ3ODk4MzY2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc4Nzc3NjExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBaU01BTExPQ2AgVHJpc3RhdGUqKlxuXG5Pa2F5LCBzbyBgWlNNQUxMT0NgLi4uIGl0J3MgYSB0cmlzdGF0ZSwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBwaWN0dXJlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0cmFjZSBpdHMgZGVwZW5kZW5jaWVzIGFuZCBzZWxlY3RvcnMuIFdobydzIGNhbGxpbmcgdGhlIHNob3RzIG9uIHRoaXM/IFdoYXQgZmVhdHVyZXMgb3IgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMgYXJlIGJyaW5naW5nIGBaU01BTExPQ2AgaW50byB0aGUgbWl4LCBhbmQgY29udmVyc2VseSwgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGNvbnRpbmdlbnQgdXBvbiBpdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIHNwYWNlLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk3NSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDAyOjE1OjQzLjIzNTY3NjE0NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTkzODMyODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBaU01BTExPQ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz0yPWNvbmZpZyBaUkFNXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00LVxcdGRlcGVuZHMgb24gQkxPQ0sgXFx1MDAyNlxcdTAwMjYgU1lTRlMgXFx1MDAyNlxcdTAwMjYgTU1VXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NTpcXHRzZWxlY3QgWlNNQUxMT0NcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MjI9Y29uZmlnIFpTV0FQXFxuLS1cXG5tbS9LY29uZmlnLTI1LVxcdHNlbGVjdCBDUllQVE9cXG5tbS9LY29uZmlnOjI2OlxcdHNlbGVjdCBaU01BTExPQ1xcbm1tL0tjb25maWctMjctXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwMjoxNTo0NS40Mjk1MTQ2MjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTY0MTA0ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBaUkFNLCBaU1dBUCwgYW5kIFpTTUFMTE9DIEludGVncmF0aW9uKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBgWlJBTWAgYW5kIGBaU1dBUGAgYm90aCBsZXZlcmFnZSBgWlNNQUxMT0NgIGZvciB0aGVpciBjb21wcmVzc2VkIG1lbW9yeSBuZWVkcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiWWVzLCB3ZSBzaG91bGQgYWJzb2x1dGVseSBlbmFibGUgYWxsIHRocmVlIG9mIHRob3NlLlwiIE5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbW9kaWZpY2F0aW9ucyB0aGlzIGlzIGJyaW5naW5nLlxuXG5SaWdodCwgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZCBvciBuZXdseSBpbnRyb2R1Y2VkLiBJIHNlZTogYHpzX2ZyZWVgLCBgX19mcmVlX3pzcGFnZV9sb2NrbGVzc2AsIGBfX2ZyZWVfenNwYWdlYCwgYG9ial9jbGFzc19nZXRfYW5kX2xvY2tgLCBgbG9jYXRpb25fdG9fb2JqYCwgYG9ial90b19sb2NhdGlvbmAsIGBvYmpfdG9fY2xhc3NfaWR4YCwgYW5kIGB6c19wYWdlX21pZ3JhdGVgLiBUaGF0IGxpc3QgZ2l2ZXMgYSBnb29kIG92ZXJ2aWV3LCBidXQgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBjb3JlIG1vZGlmaWNhdGlvbnMuXG5cbkltbWVkaWF0ZWx5LCBteSBhdHRlbnRpb24gaXMgZHJhd24gdG8gYHpzX2ZyZWVgIGFuZCBgenNfcGFnZV9taWdyYXRlYCwgYW5kIGBfX2ZyZWVfenNwYWdlX2xvY2tsZXNzYCwgYW5kIGBvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrYC4gSSBzZWUgYHpzX2ZyZWVgIGlzIGEgY2VudHJhbCBmdW5jdGlvbiBmb3IgYFpTTUFMTE9DYCDigJMgdGhlIG1haW4gbW9kaWZpY2F0aW9uLiBJJ20gd29uZGVyaW5nIGlmIHRoaXMgY2hhbmdlIGNvdWxkIGJlIHBlcmZvcm1hbmNlIHNlbnNpdGl2ZS4gSXMgYHpzX2ZyZWVgIHRvbyBob3Qgb2YgYSBwYXRoIHRvIG1vZGlmeT8gXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYHpzX2ZyZWVgIGlzLCBvZiBjb3Vyc2UsIGNhbGxlZCB3aGVuIGZyZWVpbmcgb2JqZWN0cyBpbiBgenNtYWxsb2NgLiBJdCdzIGEgY3JpdGljYWwgb3BlcmF0aW9uLiBgenNfcGFnZV9taWdyYXRlYCwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHNwZWNpZmljIHRvIHBhZ2UgbWlncmF0aW9uLiBgX19mcmVlX3pzcGFnZV9sb2NrbGVzc2AgaXMgY2FsbGVkIGJ5IGB6c19mcmVlYCBhbmQgYF9fZnJlZV96c3BhZ2VgLiBJZiBgenNfZnJlZWAgaXMgdG9vIGhvdCwgaXQgd291bGQgYmUgYmFkIHRvIG1lc3Mgd2l0aCBpdC4gTGV0J3Mgc2VlIHdoYXQgY2FsbHMgYHpzX2ZyZWVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjkyLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDAyOjE1OjUwLjU5MzYyMDkzM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQyMTc2MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzX2ZyZWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9OTIwPXN0YXRpYyBpbnQgenJhbV93cml0ZWJhY2tfY29tcGxldGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCB6cmFtX3diX3JlcSAqcmVxKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtOTUzLVxcdGF0b21pYzY0X3N1YihnZXRfc2xvdF9zaXplKHpyYW0sIGluZGV4KSwgXFx1MDAyNnpyYW0tXFx1MDAzZXN0YXRzLmNvbXByX2RhdGFfc2l6ZSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6OTU0OlxcdHpzX2ZyZWUoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGdldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCkpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTk1NS1cXHRzZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgsIHJlcS1cXHUwMDNlYmxrX2lkeCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMDA3PXN0YXRpYyB2b2lkIHNsb3RfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjA0OS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMDUwOlxcdHpzX2ZyZWUoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjA1MS1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyMjQ9c3RhdGljIGludCB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNDEtXFx0aWYgKCF6cmFtX2Nhbl9zdG9yZV9wYWdlKHpyYW0pKSB7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI0MjpcXHRcXHR6c19mcmVlKHpyYW0tXFx1MDAzZW1lbV9wb29sLCBoYW5kbGUpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNDMtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjY1PXN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMwNy1cXHRcXHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzA4OlxcdFxcdHpzX2ZyZWUoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMwOS1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmluY2x1ZGUvbGludXgvenNtYWxsb2MuaD0zMD11bnNpZ25lZCBsb25nIHpzX21hbGxvYyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLFxcbmluY2x1ZGUvbGludXgvenNtYWxsb2MuaC0zMS1cXHRcXHRcXHRjb25zdCBpbnQgbmlkKTtcXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmg6MzI6dm9pZCB6c19mcmVlKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIG9iaik7XFxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oLTMzLVxcbi0tXFxubW0venNtYWxsb2MuYy0yNC0gKlxcbm1tL3pzbWFsbG9jLmM6MjU6ICogV2hlbiBaU19PQkpfQ0xBU1NfQklUUyBcXHUwMDNlIDAsIHpzX2ZyZWUoKSBza2lwcyBwb29sLVxcdTAwM2Vsb2NrOyBpdCBwaWNrc1xcbm1tL3pzbWFsbG9jLmMtMjYtICogdGhlIHNpemVfY2xhc3MgZnJvbSBvYmoncyBlbmNvZGVkIGNsYXNzX2lkeCBhbmQgc2VyaWFsaXplcyBhZ2FpbnN0XFxuLS1cXG5tbS96c21hbGxvYy5jLTEwNS0gKlxcbm1tL3pzbWFsbG9jLmM6MTA2OiAqIEVuY29kaW5nIGNsYXNzX2lkeCBpbnRvIG9iaiBsZXRzIHpzX2ZyZWUoKSBsb2NhdGUgdGhlIHNpemVfY2xhc3NcXG5tbS96c21hbGxvYy5jLTEwNy0gKiB3aXRob3V0IGhvbGRpbmcgcG9vbC1cXHUwMDNlbG9jazsgY2xhc3NfaWR4IGlzIGludmFyaWFudCBhY3Jvc3MgcGFnZVxcbi0tXFxubW0venNtYWxsb2MuYz00NjU9c3RhdGljIHZvaWQgY2FjaGVfZnJlZV96c3BhZ2Uoc3RydWN0IHpzcGFnZSAqenNwYWdlKVxcbi0tXFxubW0venNtYWxsb2MuYy00NzAtLypcXG5tbS96c21hbGxvYy5jOjQ3MTogKiBQYWlycyB3aXRoIFJFQURfT05DRSgpIGluIGhhbmRsZV90b19vYmooKTogenNfZnJlZSgpIG1heSByZWFkIHRoZVxcbm1tL3pzbWFsbG9jLmMtNDcyLSAqIGhhbmRsZSBsb2NrbGVzc2x5LCBzbyBwcmV2ZW50IHN0b3JlIHRlYXJpbmcgaGVyZS5cXG4tLVxcbm1tL3pzbWFsbG9jLmM9ODY2PXN0YXRpYyBpbnQgdHJ5bG9ja196c3BhZ2Uoc3RydWN0IHpzcGFnZSAqenNwYWdlKVxcbi0tXFxubW0venNtYWxsb2MuYy04OTEtICogICB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLiAgQ2FsbGVyIG93bnMgYWxsIHpwZGVzYyBsb2NrcyBhbmQgaGFzXFxubW0venNtYWxsb2MuYzo4OTI6ICogICByZW1vdmVkIHRoZSB6c3BhZ2UgZnJvbSBpdHMgY2xhc3MgbGlzdC4gIFVzZWQgYnkgenNfZnJlZSgpIG91dHNpZGVcXG5tbS96c21hbGxvYy5jLTg5My0gKiAgIGNsYXNzLVxcdTAwM2Vsb2NrIHNvIHRoZSBidWRkeS1zaWRlIHdvcmsgZG9lcyBub3Qgc3RhbGwgdGhlIGNsYXNzLlxcbi0tXFxubW0venNtYWxsb2MuYz05MzM9c3RhdGljIHZvaWQgZnJlZV96c3BhZ2Uoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcyxcXG4tLVxcbm1tL3pzbWFsbG9jLmMtOTM5LVxcdC8qXFxubW0venNtYWxsb2MuYzo5NDA6XFx0ICogU2luY2UgenNfZnJlZSBjb3VsZG4ndCBiZSBzbGVlcGFibGUsIHRoaXMgZnVuY3Rpb24gY2Fubm90IGNhbGxcXG5tbS96c21hbGxvYy5jLTk0MS1cXHQgKiBsb2NrX3BhZ2UuIFRoZSBwYWdlIGxvY2tzIHRyeWxvY2tfenNwYWdlIGdvdCB3aWxsIGJlIHJlbGVhc2VkXFxuLS1cXG5tbS96c21hbGxvYy5jPTE1MTY9c3RhdGljIGlubGluZSB2b2lkIG9ial9jbGFzc19nZXRfYW5kX2xvY2soc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxcbi0tXFxubW0venNtYWxsb2MuYy0xNTM0LVxcbm1tL3pzbWFsbG9jLmM6MTUzNTp2b2lkIHpzX2ZyZWUoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlKVxcbm1tL3pzbWFsbG9jLmMtMTUzNi17XFxuLS1cXG5tbS96c21hbGxvYy5jLTE1NzAtfVxcbm1tL3pzbWFsbG9jLmM6MTU3MTpFWFBPUlRfU1lNQk9MX0dQTCh6c19mcmVlKTtcXG5tbS96c21hbGxvYy5jLTE1NzItXFxuLS1cXG5tbS96c21hbGxvYy5jPTE4NDA9c3RhdGljIGludCB6c19wYWdlX21pZ3JhdGUoc3RydWN0IHBhZ2UgKm5ld3BhZ2UsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0venNtYWxsb2MuYy0xODcwLVxcdCAqIFRoZSBwb29sIG1pZ3JhdGVfbG9jayBwcm90ZWN0cyB0aGUgcmFjZSBiZXR3ZWVuIHpwYWdlIG1pZ3JhdGlvblxcbm1tL3pzbWFsbG9jLmM6MTg3MTpcXHQgKiBhbmQgenNfZnJlZS5cXG5tbS96c21hbGxvYy5jLTE4NzItXFx0ICovXFxuLS1cXG5tbS96c21hbGxvYy5jPTIwNDI9c3RhdGljIHVuc2lnbmVkIGxvbmcgX196c19jb21wYWN0KHN0cnVjdCB6c19wb29sICpwb29sLFxcbi0tXFxubW0venNtYWxsb2MuYy0yMDQ5LVxcdC8qXFxubW0venNtYWxsb2MuYzoyMDUwOlxcdCAqIHByb3RlY3QgdGhlIHJhY2UgYmV0d2VlbiB6cGFnZSBtaWdyYXRpb24gYW5kIHpzX2ZyZWVcXG5tbS96c21hbGxvYy5jLTIwNTEtXFx0ICogYXMgd2VsbCBhcyB6cGFnZSBhbGxvY2F0aW9uL2ZyZWVcXG4tLVxcbm1tL3pzd2FwLmM9NzY1PXN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG4tLVxcbm1tL3pzd2FwLmMtNzY3LVxcdHpzd2FwX2xydV9kZWwoXFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBlbnRyeSk7XFxubW0venN3YXAuYzo3Njg6XFx0enNfZnJlZShlbnRyeS1cXHUwMDNlcG9vbC1cXHUwMDNlenNfcG9vbCwgZW50cnktXFx1MDAzZWhhbmRsZSk7XFxubW0venN3YXAuYy03NjktXFx0enN3YXBfcG9vbF9wdXQoZW50cnktXFx1MDAzZXBvb2wpO1xcbi0tXFxubW0venN3YXAuYz0xNDAxPXN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS96c3dhcC5jLTE0NzQtc3RvcmVfZmFpbGVkOlxcbm1tL3pzd2FwLmM6MTQ3NTpcXHR6c19mcmVlKHBvb2wtXFx1MDAzZXpzX3Bvb2wsIGVudHJ5LVxcdTAwM2VoYW5kbGUpO1xcbm1tL3pzd2FwLmMtMTQ3Ni1jb21wcmVzc19mYWlsZWQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDAyOjE1OjUyLjkzNTgwNTE4MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MTgzODMxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFpyYW0vWnN3YXAgTWVtb3J5IE1hbmFnZW1lbnQgZm9yIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgenJhbS96c3dhcCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGB6c19mcmVlYCBpcyBhIHJlYWwgaG90IHBhdGgsIHdoaWNoIG1lYW5zIEkgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IGFkZGluZyBhbnkgc2lnbmlmaWNhbnQgb3ZlcmhlYWQgdGhlcmUuIEkgYWxzbyBzZWUgdGhhdCBgX19mcmVlX3pzcGFnZV9sb2NrbGVzc2AgZ2V0cyBjYWxsZWQgZnJvbSBgenNfZnJlZWAgd2hlbiBhIHBhZ2UgaXMgY29tcGxldGVseSBmcmVlLCBhbmQgdGhhdCBgenNfcGFnZV9taWdyYXRlYCBpcyBpbnZvbHZlZCBpbiBwYWdlIG1pZ3JhdGlvbiwgc28gdGhlc2UgYXJlIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdC5cblxuSSdtIHRoaW5raW5nLCBsZXQncyBsb29rIGNsb3NlciBhdCB0aG9zZSBrZXkgZnVuY3Rpb25zLiBGaXJzdCwgSSBjaGVja2VkIGlmIGBfX2ZyZWVfenNwYWdlX2xvY2tsZXNzYCBpcyBpbmxpbmVkLCBhbmQsIHllcyBpdCBpcy4gVGhhdCBtZWFucyBpdCBsaWtlbHkgaXNuJ3QgdGhlIGJlc3Qgc3ltYm9sIGZvciBhbmFseXNpcy4gU2luY2UgYHpzX3BhZ2VfbWlncmF0ZWAgaXNuJ3QgaW5saW5lLCB0aGF0IGxvb2tzIGJldHRlci4gU2ltaWxhcmx5LCBgX19mcmVlX3pzcGFnZWAsIGBmcmVlX3pzcGFnZWAsIGFuZCBgYXN5bmNfZnJlZV96c3BhZ2VgLCB3aGljaCBhcmVuJ3QgaW5saW5lIGVpdGhlci5cblxuTm93LCBJIGFsc28gc2VlIGBvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrYCBiZWluZyBjYWxsZWQgZnJvbSBgenNfZnJlZWAg4oCTIGl0J3MgaW5saW5lLCBzbyBwcm9iYWJseSBub3QgYSBnb29kIGZvY3VzLiBPdGhlciBmdW5jdGlvbnMgbGlrZSBgb2JqX2ZyZWVgLCBgbG9jYXRpb25fdG9fb2JqYCwgYG9ial90b19sb2NhdGlvbmAgYW5kIGBvYmpfdG9fY2xhc3NfaWR4YCBhbGwgYXJlIGVpdGhlciBzdGF0aWMgb3IgaW5saW5lIGFuZCBhcmUgcHJvYmFibHkgbm90IHRoZSBlbnRyeSBwb2ludHMgSSBuZWVkLlxuXG5HaXZlbiB0aGUgaG90IHBhdGggbmF0dXJlIG9mIGB6c19mcmVlYCBJJ2QgbGlrZSB0byBtaW5pbWl6ZSBteSBmb2N1cyB0aGVyZSwgYW5kIGB6c19wYWdlX21pZ3JhdGVgIGlzIGxvb2tpbmcgZ29vZC4gRnJvbSBteSBhbmFseXNpcyBzbyBmYXIsIGl0IHNlZW1zIHRoYXQgSSBoYXZlIHNldmVyYWwgZ29vZCBmb2N1cyBzeW1ib2xzOiBgenNfcGFnZV9taWdyYXRlYCwgYF9fZnJlZV96c3BhZ2VgLCBgZnJlZV96c3BhZ2VgLCBhbmQgYGFzeW5jX2ZyZWVfenNwYWdlYC5cblxuSSB3aWxsIG5vdyBleHBsb3JlIGBhc3luY19mcmVlX3pzcGFnZWAgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc1NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwMjoxNTo1OS40NTQxOTA0OTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODQzNTU4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXN5bmNfZnJlZV96c3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venNtYWxsb2MuYz04NjY9c3RhdGljIGludCB0cnlsb2NrX3pzcGFnZShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXFxuLS1cXG5tbS96c21hbGxvYy5jLTg5NS0gKiBfX2ZyZWVfenNwYWdlKCk6IF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoKSArIHBlci1jbGFzcyBhY2NvdW50aW5nLFxcbm1tL3pzbWFsbG9jLmM6ODk2OiAqICAgdW5kZXIgY2xhc3MtXFx1MDAzZWxvY2suICBVc2VkIGJ5IGFzeW5jX2ZyZWVfenNwYWdlKCksIHRoZSB3b3JrZXIgZm9yXFxubW0venNtYWxsb2MuYy04OTctICogICB6c3BhZ2VzIHdob3NlIHRyeWxvY2tfenNwYWdlKCkgZmFpbGVkLlxcbi0tXFxubW0venNtYWxsb2MuYz0xOTUxPWNvbnN0IHN0cnVjdCBtb3ZhYmxlX29wZXJhdGlvbnMgenNtYWxsb2NfbW9wcyA9IHtcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTk2MC0gKi9cXG5tbS96c21hbGxvYy5jOjE5NjE6c3RhdGljIHZvaWQgYXN5bmNfZnJlZV96c3BhZ2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm1tL3pzbWFsbG9jLmMtMTk2Mi17XFxuLS1cXG5tbS96c21hbGxvYy5jPTIwMDM9c3RhdGljIHZvaWQgaW5pdF9kZWZlcnJlZF9mcmVlKHN0cnVjdCB6c19wb29sICpwb29sKVxcbm1tL3pzbWFsbG9jLmMtMjAwNC17XFxubW0venNtYWxsb2MuYzoyMDA1OlxcdElOSVRfV09SSyhcXHUwMDI2cG9vbC1cXHUwMDNlZnJlZV93b3JrLCBhc3luY19mcmVlX3pzcGFnZSk7XFxubW0venNtYWxsb2MuYy0yMDA2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDI6MTY6MDEuNzM4NTU3MDM5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MTY2NDA4MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFpzbWFsbG9jIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gSSd2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB0aGUgY29yZSBmdW5jdGlvbnMgaGVyZTogYGFzeW5jX2ZyZWVfenNwYWdlYCwgYHpzX3BhZ2VfbWlncmF0ZWAsIGFuZCBgX19mcmVlX3pzcGFnZWAuIFRob3NlIGFyZSB0aGUgb25lcyB0aGUgcGF0Y2ggaXMgY2xlYXJseSB0b3VjaGluZy4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIExldCBtZSBzZWUuLi4gYFpTTUFMTE9DX1NUQVRgLCBgWlNNQUxMT0NfQ0hBSU5fU0laRWAsIGBaUkFNYCwgYW5kIGBaU1dBUGAuIFJpZ2h0LlxuXG5BaGEhIFRoZSBwYXRjaCAqZG9lcyogcmVmZXJlbmNlIGBaU01BTExPQ19DSEFJTl9TSVpFYC4gQWgsIGhlcmUgaXQgaXM6XG5cbmBgYGNcbiNkZWZpbmUgWlNfTUFYX1BBR0VTX1BFUl9aU1BBR0VcdChfQUMoQ09ORklHX1pTTUFMTE9DX0NIQUlOX1NJWkUsIFVMKSlcbmBgYFxuXG5FeGNlbGxlbnQuIEl0J3MgdXNlZCB0byBkZWZpbmUgYFpTX01BWF9QQUdFU19QRVJfWlNQQUdFYC4gT2theSwgc28gaXQgKmlzKiByZWxldmFudC4gQnV0LCBiZWluZyBhbiBpbnRlZ2VyIGNvbmZpZywgaXQgbGlrZWx5IGhhcyBhIGRlZmF1bHQgdmFsdWUuIEkgZG9uJ3QgbmVlZCB0byBleHBsaWNpdGx5IHNwZWNpZnkgaXQgaWYgdGhlIHBhdGNoIHVzZXMgdGhlIGRlZmF1bHQuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBgbW0vS2NvbmZpZ2AgdG8gYmUgc3VyZS4gVGltZSB0byBnbyBkaWdnaW5nIHRocm91Z2ggdGhhdCBmaWxlLiBJIGNhbid0IGJlIGxlYXZpbmcgYW55dGhpbmcgdG8gY2hhbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkwNSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwMjoxNjowOC40NTUxOTk5NzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzcyMzQxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpTTUFMTE9DX0NIQUlOX1NJWkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzU9Y29uZmlnIFpTTUFMTE9DX1NUQVRcXG4tLVxcbm1tL0tjb25maWctMTQzLVxcbm1tL0tjb25maWc6MTQ0OmNvbmZpZyBaU01BTExPQ19DSEFJTl9TSVpFXFxubW0vS2NvbmZpZy0xNDUtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiBwaHlzaWNhbCBwYWdlcyBwZXItenNwYWdlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwMjoxNjoxMC43MzI0Mzk2NDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyNzU3ODY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKktjb25maWcgRGl2ZSBJbmNvbWluZyoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gYG1tL0tjb25maWdgLiBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gYXJvdW5kIGxpbmUgMTQ0LiBJJ20gZXhwZWN0aW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZyB0byBiZSBkZWZpbmVkIHRoZXJlLCBnaXZlbiB0aGlzIGlzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0ncyBjb25maWd1cmF0aW9uIGZpbGUuIEknbSBob3BpbmcgdG8gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcgb2Ygd2hhdCdzIGJlaW5nIGNvbmZpZ3VyZWQsIHByb2JhYmx5IGEgY29yZSBvcHRpb24gb3IgYSByZWxhdGVkIGRlcGVuZGVuY3kuIEknbSBjdXJpb3VzIHdoYXQgdGhlIGF1dGhvciBpcyBkcml2aW5nIG1lIHRvIGZvY3VzIG9uIGhlcmUsIG1heWJlIHNvbWUgbmV3IGZlYXR1cmUgb3Igb3B0aW1pemF0aW9uIHJlbGF0ZWQgdG8gbWVtb3J5LiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDczLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDI6MTY6MTMuNjYwMDIwMjY3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0MDpcXHRcXHQgIHN0YXRpc3RpY3MgYWJvdXQgd2hhdCdzIGhhcHBlbmluZyBpbiB6c21hbGxvYyBhbmQgZXhwb3J0cyB0aGF0XFxuIDE0MTpcXHRcXHQgIGluZm9ybWF0aW9uIHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmcy5cXG4gMTQyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTQzOlxcdFxcbiAxNDQ6XFx0Y29uZmlnIFpTTUFMTE9DX0NIQUlOX1NJWkVcXG4gMTQ1OlxcdFxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgcGh5c2ljYWwgcGFnZXMgcGVyLXpzcGFnZVxcXCJcXG4gMTQ2OlxcdFxcdGRlZmF1bHQgOFxcbiAxNDc6XFx0XFx0cmFuZ2UgNCAxNlxcbiAxNDg6XFx0XFx0aGVscFxcbiAxNDk6XFx0XFx0ICBUaGlzIG9wdGlvbiBzZXRzIHRoZSB1cHBlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHBoeXNpY2FsIHBhZ2VzXFxuIDE1MDpcXHRcXHQgIHRoYXQgYSB6bWFsbG9jIHBhZ2UgKHpzcGFnZSkgY2FuIGNvbnNpc3Qgb2YuIFRoZSBvcHRpbWFsIHpzcGFnZVxcbiAxNTE6XFx0XFx0ICBjaGFpbiBzaXplIGlzIGNhbGN1bGF0ZWQgZm9yIGVhY2ggc2l6ZSBjbGFzcyBkdXJpbmcgdGhlXFxuIDE1MjpcXHRcXHQgIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwb29sLlxcbiAxNTM6XFx0XFxuIDE1NDpcXHRcXHQgIENoYW5naW5nIHRoaXMgb3B0aW9uIGNhbiBhbHRlciB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHNpemUgY2xhc3NlcyxcXG4gMTU1OlxcdFxcdCAgc3VjaCBhcyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHBlciB6c3BhZ2UgYW5kIHRoZSBudW1iZXIgb2Ygb2JqZWN0c1xcbiAxNTY6XFx0XFx0ICBwZXIgenNwYWdlLiBUaGlzIGNhbiBhbHNvIHJlc3VsdCBpbiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgb2ZcXG4gMTU3OlxcdFxcdCAgdGhlIHBvb2wsIGFzIHpzbWFsbG9jIG1lcmdlcyBzaXplIGNsYXNzZXMgd2l0aCBzaW1pbGFyXFxuIDE1ODpcXHRcXHQgIGNoYXJhY3RlcmlzdGljcy5cXG4gMTU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwMjoxNjoxMy42NjAxMjk3NDdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAxNzA2MDcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpTTUFMTE9DIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIGBaU01BTExPQ2AgaXMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBoZXJlLCBhbmQgYm90aCBgWlJBTWAgYW5kIGBaU1dBUGAgYXJlIGJ1aWx0IG9uIHRvcCBvZiBpdC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gaW5jbHVkZSBgWlNNQUxMT0NgLCBgWlJBTWAsIGFuZCBgWlNXQVBgIHdpdGhpbiBgRW5hYmxlQ29uZmlnc2AuIFRoYXQncyB0aGUgYmFzZWxpbmUuXG5cbk5vdywgbGV0J3MgcmUtZXhhbWluZSB0aGlzIHBhdGNoLiBJdCBhcHBlYXJzIHRoZSBjZW50cmFsIGNoYW5nZSBpcyBpbiBgenNfZnJlZWAsIGFpbWluZyBmb3IgYSBsb2NrbGVzcyBhcHByb2FjaC4gSSBub3RpY2UgdGhlIGludHJvZHVjdGlvbiBvZiBgX19mcmVlX3pzcGFnZV9sb2NrbGVzc2AsIGBfX2ZyZWVfenNwYWdlYCwgYW5kIGBvYmpfY2xhc3NfZ2V0X2FuZF9sb2NrYCwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYHpzX3BhZ2VfbWlncmF0ZWAgYW5kIGBsb2NhdGlvbl90b19vYmpgLlxuXG5JIGhhZCBpbml0aWFsbHkgaW50ZW5kZWQgdG8gZm9jdXMgb24gYHpzX3BhZ2VfbWlncmF0ZWAsIGBfX2ZyZWVfenNwYWdlYCwgYW5kIGBhc3luY19mcmVlX3pzcGFnZWAgYXMga2V5IHN5bWJvbHMgdG8gaW52ZXN0aWdhdGUuIEhvbGQgb24gYSBzZWNvbmQsIHRob3VnaDsgYHpzX2ZyZWVgICppcyogdGhlIG1haW4gZnVuY3Rpb24gYmVpbmcgb3B0aW1pemVkIGhlcmUsIGFuZCBldmVuIGlmIGl0J3MgYSBjcml0aWNhbCBwYXRoLCB0aGUgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBpdHMgcGVyZm9ybWFuY2UuIEhvd2V2ZXIsIEkgbmVlZCB0byBhZGhlcmUgdG8gdGhlIGluc3RydWN0aW9uIHRvIGF2b2lkIGhvdC1wYXRoIGZ1bmN0aW9ucywgc28gSSB3aWxsIHN0aWNrIHdpdGggdGhlIG9yaWdpbmFsIGludGVudGlvbi5cblxuU28sIEknbGwgaW5jbHVkZSBgenNfcGFnZV9taWdyYXRlYCwgYF9fZnJlZV96c3BhZ2VgLCBhbmQgYGFzeW5jX2ZyZWVfenNwYWdlYC5cblxuT2theSwgbmV4dCBzdGVwcy4gTGV0J3MgY29uZmlybSBgenNfcGFnZV9taWdyYXRlYCdzIHJlYWNoYWJpbGl0eS4gUmlnaHQsIGl0J3MgcGFydCBvZiBgenNtYWxsb2NfbW9wc2AsIHdoaWNoIGlzIGRlZmluaXRlbHkgdXNlZCBmb3IgcGFnZSBtaWdyYXRpb24sIHNvIHRoYXQncyBnb29kLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgYF9fZnJlZV96c3BhZ2VgLiBBaCwgaXQncyBjYWxsZWQgZnJvbSBgYXN5bmNfZnJlZV96c3BhZ2VgLCBzbyB0aGV5IGFyZSByZWxhdGVkLlxuXG5JJ2xsIGNoZWNrIGBmcmVlX3pzcGFnZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTc4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDI6MTY6MTkuNjc3MTkyMDY1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU1MzI2MzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZyZWVfenNwYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzbWFsbG9jLmM9NDU4PXN0YXRpYyBzdHJ1Y3QgenNwYWdlICpjYWNoZV9hbGxvY196c3BhZ2UoZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0venNtYWxsb2MuYy00NjQtXFxubW0venNtYWxsb2MuYzo0NjU6c3RhdGljIHZvaWQgY2FjaGVfZnJlZV96c3BhZ2Uoc3RydWN0IHpzcGFnZSAqenNwYWdlKVxcbm1tL3pzbWFsbG9jLmMtNDY2LXtcXG4tLVxcbm1tL3pzbWFsbG9jLmM9ODY2PXN0YXRpYyBpbnQgdHJ5bG9ja196c3BhZ2Uoc3RydWN0IHpzcGFnZSAqenNwYWdlKVxcbi0tXFxubW0venNtYWxsb2MuYy04ODktICpcXG5tbS96c21hbGxvYy5jOjg5MDogKiBfX2ZyZWVfenNwYWdlX2xvY2tsZXNzKCk6IGJhcmUgY29yZTsgd2Fsa3MgenBkZXNjcyBhbmQgcmV0dXJucyBwYWdlc1xcbm1tL3pzbWFsbG9jLmMtODkxLSAqICAgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvci4gIENhbGxlciBvd25zIGFsbCB6cGRlc2MgbG9ja3MgYW5kIGhhc1xcbi0tXFxubW0venNtYWxsb2MuYy04OTQtICpcXG5tbS96c21hbGxvYy5jOjg5NTogKiBfX2ZyZWVfenNwYWdlKCk6IF9fZnJlZV96c3BhZ2VfbG9ja2xlc3MoKSArIHBlci1jbGFzcyBhY2NvdW50aW5nLFxcbm1tL3pzbWFsbG9jLmM6ODk2OiAqICAgdW5kZXIgY2xhc3MtXFx1MDAzZWxvY2suICBVc2VkIGJ5IGFzeW5jX2ZyZWVfenNwYWdlKCksIHRoZSB3b3JrZXIgZm9yXFxubW0venNtYWxsb2MuYy04OTctICogICB6c3BhZ2VzIHdob3NlIHRyeWxvY2tfenNwYWdlKCkgZmFpbGVkLlxcbm1tL3pzbWFsbG9jLmMtODk4LSAqXFxubW0venNtYWxsb2MuYzo4OTk6ICogZnJlZV96c3BhZ2UoKTogZnVsbCB3cmFwcGVyIC0gdHJ5bG9jayB6cGRlc2NzLCByZW1vdmUgZnJvbSBjbGFzc1xcbm1tL3pzbWFsbG9jLmM6OTAwOiAqICAgbGlzdCwgY2FsbCBfX2ZyZWVfenNwYWdlKCk7IGtpY2tzIGRlZmVycmVkIGZyZWUgb24gY29udGVudGlvbi5cXG5tbS96c21hbGxvYy5jLTkwMS0gKiAgIFVzZWQgYnkgY29tcGFjdGlvbi5cXG5tbS96c21hbGxvYy5jLTkwMi0gKi9cXG5tbS96c21hbGxvYy5jOjkwMzpzdGF0aWMgaW5saW5lIHZvaWQgX19mcmVlX3pzcGFnZV9sb2NrbGVzcyhzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXFxubW0venNtYWxsb2MuYy05MDQte1xcbi0tXFxubW0venNtYWxsb2MuYy05MjAtXFxubW0venNtYWxsb2MuYzo5MjE6XFx0Y2FjaGVfZnJlZV96c3BhZ2UoenNwYWdlKTtcXG5tbS96c21hbGxvYy5jLTkyMi19XFxubW0venNtYWxsb2MuYy05MjMtXFxubW0venNtYWxsb2MuYzo5MjQ6c3RhdGljIHZvaWQgX19mcmVlX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLFxcbm1tL3pzbWFsbG9jLmMtOTI1LVxcdFxcdFxcdCAgc3RydWN0IHpzcGFnZSAqenNwYWdlKVxcbi0tXFxubW0venNtYWxsb2MuYy05MjctXFx0YXNzZXJ0X3NwaW5fbG9ja2VkKFxcdTAwMjZjbGFzcy1cXHUwMDNlbG9jayk7XFxubW0venNtYWxsb2MuYzo5Mjg6XFx0X19mcmVlX3pzcGFnZV9sb2NrbGVzcyh6c3BhZ2UpO1xcbm1tL3pzbWFsbG9jLmMtOTI5LVxcdGNsYXNzX3N0YXRfc3ViKGNsYXNzLCBaU19PQkpTX0FMTE9DQVRFRCwgY2xhc3MtXFx1MDAzZW9ianNfcGVyX3pzcGFnZSk7XFxuLS1cXG5tbS96c21hbGxvYy5jLTkzMi1cXG5tbS96c21hbGxvYy5jOjkzMzpzdGF0aWMgdm9pZCBmcmVlX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLFxcbm1tL3pzbWFsbG9jLmMtOTM0LVxcdFxcdFxcdFxcdHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcXG4tLVxcbm1tL3pzbWFsbG9jLmMtOTQxLVxcdCAqIGxvY2tfcGFnZS4gVGhlIHBhZ2UgbG9ja3MgdHJ5bG9ja196c3BhZ2UgZ290IHdpbGwgYmUgcmVsZWFzZWRcXG5tbS96c21hbGxvYy5jOjk0MjpcXHQgKiBieSBfX2ZyZWVfenNwYWdlLlxcbm1tL3pzbWFsbG9jLmMtOTQzLVxcdCAqL1xcbi0tXFxubW0venNtYWxsb2MuYy05NDktXFx0cmVtb3ZlX3pzcGFnZShjbGFzcywgenNwYWdlKTtcXG5tbS96c21hbGxvYy5jOjk1MDpcXHRfX2ZyZWVfenNwYWdlKHBvb2wsIGNsYXNzLCB6c3BhZ2UpO1xcbm1tL3pzbWFsbG9jLmMtOTUxLX1cXG4tLVxcbm1tL3pzbWFsbG9jLmM9MTAzND1zdGF0aWMgc3RydWN0IHpzcGFnZSAqYWxsb2NfenNwYWdlKHN0cnVjdCB6c19wb29sICpwb29sLFxcbi0tXFxubW0venNtYWxsb2MuYy0xMDYxLVxcdFxcdFxcdH1cXG5tbS96c21hbGxvYy5jOjEwNjI6XFx0XFx0XFx0Y2FjaGVfZnJlZV96c3BhZ2UoenNwYWdlKTtcXG5tbS96c21hbGxvYy5jLTEwNjMtXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS96c21hbGxvYy5jPTE1MzU9dm9pZCB6c19mcmVlKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSlcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTU2NS1cXHRpZiAoenNwYWdlX3RvX2ZyZWUpIHtcXG5tbS96c21hbGxvYy5jOjE1NjY6XFx0XFx0X19mcmVlX3pzcGFnZV9sb2NrbGVzcyh6c3BhZ2VfdG9fZnJlZSk7XFxubW0venNtYWxsb2MuYy0xNTY3LVxcdFxcdGF0b21pY19sb25nX3N1YihjbGFzcy1cXHUwMDNlcGFnZXNfcGVyX3pzcGFnZSwgXFx1MDAyNnBvb2wtXFx1MDAzZXBhZ2VzX2FsbG9jYXRlZCk7XFxuLS1cXG5tbS96c21hbGxvYy5jPTE4MzA9c3RhdGljIGJvb2wgenNfcGFnZV9pc29sYXRlKHN0cnVjdCBwYWdlICpwYWdlLCBpc29sYXRlX21vZGVfdCBtb2RlKVxcbi0tXFxubW0venNtYWxsb2MuYy0xODMzLVxcdCAqIFBhZ2UgaXMgbG9ja2VkIHNvIHpzcGFnZSBjYW4ndCBiZSBkZXN0cm95ZWQgY29uY3VycmVudGx5XFxubW0venNtYWxsb2MuYzoxODM0OlxcdCAqIChzZWUgZnJlZV96c3BhZ2UoKSkuIEJ1dCBpZiB0aGUgcGFnZSB3YXMgYWxyZWFkeSBkZXN0cm95ZWRcXG5tbS96c21hbGxvYy5jLTE4MzUtXFx0ICogKHNlZSByZXNldF96cGRlc2MoKSksIHJlZnVzZSBpc29sYXRpb24gaGVyZS5cXG4tLVxcbm1tL3pzbWFsbG9jLmM9MTk1MT1jb25zdCBzdHJ1Y3QgbW92YWJsZV9vcGVyYXRpb25zIHpzbWFsbG9jX21vcHMgPSB7XFxuLS1cXG5tbS96c21hbGxvYy5jLTE5NjAtICovXFxubW0venNtYWxsb2MuYzoxOTYxOnN0YXRpYyB2b2lkIGFzeW5jX2ZyZWVfenNwYWdlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5tbS96c21hbGxvYy5jLTE5NjIte1xcbi0tXFxubW0venNtYWxsb2MuYy0xOTg3LVxcdFxcdGNsYXNzX3N0YXRfc3ViKGNsYXNzLCBaU19JTlVTRV9SQVRJT18wLCAxKTtcXG5tbS96c21hbGxvYy5jOjE5ODg6XFx0XFx0X19mcmVlX3pzcGFnZShwb29sLCBjbGFzcywgenNwYWdlKTtcXG5tbS96c21hbGxvYy5jLTE5ODktXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmNsYXNzLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbm1tL3pzbWFsbG9jLmM9MjAwMz1zdGF0aWMgdm9pZCBpbml0X2RlZmVycmVkX2ZyZWUoc3RydWN0IHpzX3Bvb2wgKnBvb2wpXFxubW0venNtYWxsb2MuYy0yMDA0LXtcXG5tbS96c21hbGxvYy5jOjIwMDU6XFx0SU5JVF9XT1JLKFxcdTAwMjZwb29sLVxcdTAwM2VmcmVlX3dvcmssIGFzeW5jX2ZyZWVfenNwYWdlKTtcXG5tbS96c21hbGxvYy5jLTIwMDYtfVxcbi0tXFxubW0venNtYWxsb2MuYz0yMDQyPXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fenNfY29tcGFjdChzdHJ1Y3QgenNfcG9vbCAqcG9vbCxcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMjA3NS1cXHRcXHRpZiAoZmcgPT0gWlNfSU5VU0VfUkFUSU9fMCkge1xcbm1tL3pzbWFsbG9jLmM6MjA3NjpcXHRcXHRcXHRmcmVlX3pzcGFnZShwb29sLCBjbGFzcywgc3JjX3pzcGFnZSk7XFxubW0venNtYWxsb2MuYy0yMDc3LVxcdFxcdFxcdHBhZ2VzX2ZyZWVkICs9IGNsYXNzLVxcdTAwM2VwYWdlc19wZXJfenNwYWdlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwMjoxNjoyMS44MzI1MzQxNDhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY4NDkxODI4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBac21hbGxvYyBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGNvcmUgc3ltYm9scyByZWxhdGVkIHRvIFpzbWFsbG9jIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHNlZSB0aGF0IGBmcmVlX3pzcGFnZWAgaXMgdXNlZCBieSB0aGUgY29tcGFjdGlvbiBwcm9jZXNzLCBgYXN5bmNfZnJlZV96c3BhZ2VgIGlzIGZvciBkZWZlcnJlZCBmcmVlaW5nLCBhbmQgYHpzX3BhZ2VfbWlncmF0ZWAgaXMgaW52b2x2ZWQgaW4gcGFnZSBtaWdyYXRpb24uIEdvb2QsIHRob3NlIGFyZSBhbGwga2V5IGFyZWFzIHRvIGxvb2sgYXQuXG5cbk5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTGV0J3Mgc2VlLi4uIEkndmUgZ290IGBaU01BTExPQ2AsIGBaUkFNYCwgYW5kIGBaU1dBUGAuXG5cbkFoYSEgSXQgbG9va3MgbGlrZSBgWlNNQUxMT0NgIGlzIHRoZSBvbmx5IG9uZSB0aGF0IGRpcmVjdGx5IGluY2x1ZGVzIGB6c21hbGxvYy5jYCBpbiB0aGUgYnVpbGQuIEkgY2FuIHNlZSBpdCByaWdodCBoZXJlIGluIHRoZSBtYWtlZmlsZTpcblxuYGBgbWFrZVxub2JqLSQoQ09ORklHX1pTTUFMTE9DKSAgKz0genNtYWxsb2Mub1xuYGBgXG5cblRoYXQgY29uZmlybXMgaXQsIGFuZCBpdCdzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFzIEkgZGlnIGRlZXBlci4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUgaW50byBob3cgenNtYWxsb2MgaXMgdXRpbGl6ZWQgaW4gdGhlc2UgY2FzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDE2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDAyOjE2OjI2LjUxNzQ1NDQ4NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyOTI3NTg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c21hbGxvY1xcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMjE9b2JqLSQoQ09ORklHX01FTU9SWV9JU09MQVRJT04pICs9IHBhZ2VfaXNvbGF0aW9uLm9cXG5tbS9NYWtlZmlsZToxMjI6b2JqLSQoQ09ORklHX1pTTUFMTE9DKVxcdCs9IHpzbWFsbG9jLm9cXG5tbS9NYWtlZmlsZS0xMjMtb2JqLSQoQ09ORklHX0dFTkVSSUNfRUFSTFlfSU9SRU1BUCkgKz0gZWFybHlfaW9yZW1hcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDAyOjE2OjI4Ljg0NjczNTM2NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTA5MTY5NDkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFpzbWFsbG9jIExvY2tsZXNzIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBwdXR0aW5nIHRvZ2V0aGVyIGEgZnV6emluZyBzZXR1cCBmb3IgdGhpcyB6c21hbGxvYyBwYXRjaC4gVGhlIGdvYWwgaXMgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgbG9ja2xlc3Mgb3B0aW1pemF0aW9uIGludHJvZHVjZWQgaW4gYHpzX2ZyZWUoKWAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpbmNsdWRpbmcgYENPTkZJR19aU01BTExPQ2Agd291bGQgYmUgZW5vdWdoIHRvIGNvbXBpbGUgYHpzbWFsbG9jLmNgLCBidXQgdG8gKnRlc3QqIGl0LCBJIG5lZWQgc29tZXRoaW5nIHRoYXQgKnVzZXMqIGl0LCBzbyBgWlJBTWAgYW5kIGBaU1dBUGAgYXJlIGVzc2VudGlhbC4gIFRoZXJlZm9yZSwgSSdsbCBkZWZpbml0ZWx5IGluY2x1ZGUgYFpTTUFMTE9DYCwgYFpSQU1gLCBhbmQgYFpTV0FQYCBpbiBteSBjb25maWd1cmF0aW9uLiAgSSBjb25zaWRlcmVkIGFkZGluZyBgQ09ORklHX1pTTUFMTE9DX0NIQUlOX1NJWkVgIGJ1dCBkZWNpZGVkIGFnYWluc3QgaXQsIHNpbmNlIGl0IGFscmVhZHkgaGFzIGEgZGVmYXVsdCB2YWx1ZS5cblxuTm93LCB0aGUgY3JpdGljYWwgcGFydCBpcyBzZWxlY3RpbmcgdGhlIFwiZm9jdXMgc3ltYm9sc1wiLiBJIHN0YXJ0ZWQgYnkgbGlzdGluZyB0aGUgZnVuY3Rpb25zIHRoZSBwYXRjaCBtb2RpZmllczogYHpzX3BhZ2VfbWlncmF0ZWAsIGBhc3luY19mcmVlX3pzcGFnZWAsIGBmcmVlX3pzcGFnZWAsIGBfX2ZyZWVfenNwYWdlYCwgYW5kIG1vc3Qgbm90YWJseSBgenNfZnJlZWAsIGFzIGl0J3MgdGhlIG1haW4gZnVuY3Rpb24gYmVpbmcgb3B0aW1pemVkLiAgSSBhbHNvIGNvbnNpZGVyZWQgYG9ial9jbGFzc19nZXRfYW5kX2xvY2tgIGJlY2F1c2UgaXQncyBpbiB0aGUgbG9ja2xlc3MgcGF0aC4gVGhlIHBhdGNoIG9wdGltaXplcyBgenNfZnJlZWAgYnkgZW5jb2RpbmcgdGhlIGBjbGFzc19pZHhgIGludG8gdGhlIG9iamVjdCBoYW5kbGUuXG5cblRoZSBvcmlnaW5hbCBpbnN0cnVjdGlvbiBzYWlkIHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGF2b2lkIHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIE15IGluaXRpYWwgaW5jbGluYXRpb24gd2FzIHRvIHNraXAgYHpzX2ZyZWVgIGJlY2F1c2UgaXQgKmlzKiBhIGhvdCBwYXRoLiBIb3dldmVyLCBhZnRlciB0aGlua2luZyBpdCB0aHJvdWdoLCBJIHJlYWxpemVkIHRoYXQgYHpzX2ZyZWVgIGlzIGFjdHVhbGx5ICpzcGVjaWZpYyogdG8genNtYWxsb2MuIFdpdGhvdXQgaXQsIHRoZSBmdXp6ZXIgd29uJ3QgbmF0dXJhbGx5IGhpdCB0aGUgbG9ja2xlc3MgY29kZSBhdCBhbGwuIFNvLCBJIHdpbGwgaW5jbHVkZSBpdC4gQWxzbywgYmVjYXVzZSBgenNfZnJlZWAgY2FsbHMgYG9ial9jbGFzc19nZXRfYW5kX2xvY2tgIHdoaWNoIGlzIGlubGluZSwgYW5kIGB6c19mcmVlYCBpcyBFWFBPUlRfU1lNQk9MX0dQTC4gIEkgYWxzbyBpbmNsdWRlIGBfX2ZyZWVfenNwYWdlYCB3aGljaCBpcyBjYWxsZWQgd2hlbiBgYXN5bmNfZnJlZV96c3BhZ2VgIHJlbGVhc2VzIHRoZSBwYWdlcy5cblxuVGhlbiBJIGNvbnNpZGVyZWQgYG9ial9tYWxsb2NgLCBiZWNhdXNlIHRoZSBwYXRjaCBtb2RpZmllcyBgb2JqX21hbGxvY2AgdG8gZW5jb2RlIHRoZSBjbGFzc19pZHguIFdoaWxlIGB6c19tYWxsb2NgIGlzIHRoZSBleHBvcnRlZCBlbnRyeSBwb2ludCwgaXQgY2FsbHMgYG9ial9tYWxsb2NgLiBBZnRlciB0aGlua2luZyB0aHJvdWdoIHRoaXMsIEkgZGVjaWRlZCB0byBpbmNsdWRlIGBvYmpfbWFsbG9jYCwgc2luY2UgdGhlIG9wdGltaXphdGlvbiBhcHBsaWVzIHRvIGl0LiBJIGFsc28gY2hlY2tlZCBpZiBpdCB3YXMgc3RhdGljLCBhbmQgaXQgaXMuIEFuZCBJIHdpbGwgYWRkIGl0IHRvIHRoZSBmb2N1cyBzeW1ib2xzLlxuXG5TbywgdGhlIGRlZmluaXRpdmUgbGlzdCBvZiBmb2N1cyBzeW1ib2xzOiBgenNfZnJlZWAsIGBvYmpfbWFsbG9jYCwgYHpzX3BhZ2VfbWlncmF0ZWAsIGBhc3luY19mcmVlX3pzcGFnZWAsIGFuZCBgX19mcmVlX3pzcGFnZWAuXG5cblNvLCB0aGUgY29uZmlncyB3aWxsIGJlOiBgWlNNQUxMT0NgLCBgWlJBTWAsIGBaU1dBUGAuXG5cblRoZSBvdmVyYWxsIHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggY2hhbmdlcyBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24gYW5kIGJpdHdpc2Ugb3BlcmF0aW9ucyB3aXRoaW4gYHpzX2ZyZWUoKWAgZm9yIHpzbWFsbG9jLiAgRnV6emluZyB0aGVzZSBwYXRocyB3aWxsIGJlIGVzc2VudGlhbCB0byBlbnN1cmUgY29ycmVjdG5lc3MuXG5cbkkgY2hlY2tlZCB0aGUgcGF0Y2ggYWdhaW4gZm9yIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucyBidXQgZm91bmQgbm90aGluZyBlbHNlIHNpZ25pZmljYW50IHRvIGFkZC5cblxuTm93IEknbSBnb2luZyB0byBydW4gdGhlIGBzZXQtcmVzdWx0c2AgY29tbWFuZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4ODgsIk91dHB1dFRva2VucyI6MTcyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwMjoxNjo0Ny45Mzg0MzIzNjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDgyNTUxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNNQUxMT0NcIixcbiAgICBcIlpSQU1cIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwienNfZnJlZVwiLFxuICAgIFwib2JqX21hbGxvY1wiLFxuICAgIFwienNfcGFnZV9taWdyYXRlXCIsXG4gICAgXCJhc3luY19mcmVlX3pzcGFnZVwiLFxuICAgIFwiX19mcmVlX3pzcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBvcHRpbWl6YXRpb24gZm9yIHpzX2ZyZWUoKSBpbiB6c21hbGxvYyBieSBlbmNvZGluZyB0aGUgY2xhc3NfaWR4IGludG8gdGhlIG9iamVjdCBoYW5kbGUuIFRoaXMgYXZvaWRzIHRha2luZyBwb29sLVxcdTAwM2Vsb2NrIGR1cmluZyBmcmVlIG9wZXJhdGlvbnMuIEl0IG1vZGlmaWVzIHRoZSBiaXQgbGF5b3V0IG9mIHRoZSBvYmplY3QgaGFuZGxlIGFuZCB1cGRhdGVzIHRoZSBhbGxvY2F0aW9uLCBmcmVlaW5nLCBhbmQgcGFnZSBtaWdyYXRpb24gcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGxvY2tsZXNzIHN5bmNocm9uaXphdGlvbiBhbmQgYml0d2lzZSBvcGVyYXRpb25zIGFyZSBjb3JyZWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpTTUFMTE9DXCIsXG4gICAgXCJaUkFNXCIsXG4gICAgXCJaU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzX2ZyZWVcIixcbiAgICBcIm9ial9tYWxsb2NcIixcbiAgICBcInpzX3BhZ2VfbWlncmF0ZVwiLFxuICAgIFwiYXN5bmNfZnJlZV96c3BhZ2VcIixcbiAgICBcIl9fZnJlZV96c3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3Mgb3B0aW1pemF0aW9uIGZvciB6c19mcmVlKCkgaW4genNtYWxsb2MgYnkgZW5jb2RpbmcgdGhlIGNsYXNzX2lkeCBpbnRvIHRoZSBvYmplY3QgaGFuZGxlLiBUaGlzIGF2b2lkcyB0YWtpbmcgcG9vbC1cXHUwMDNlbG9jayBkdXJpbmcgZnJlZSBvcGVyYXRpb25zLiBJdCBtb2RpZmllcyB0aGUgYml0IGxheW91dCBvZiB0aGUgb2JqZWN0IGhhbmRsZSBhbmQgdXBkYXRlcyB0aGUgYWxsb2NhdGlvbiwgZnJlZWluZywgYW5kIHBhZ2UgbWlncmF0aW9uIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24gYW5kIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcmUgY29ycmVjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflownwt5t[1] Phase: Succeeded StartedAt: 2026-06-26 02:16:59 +0000 UTC FinishedAt: 2026-06-26 02:16:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwt5t[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-26 02:16:59 +0000 UTC FinishedAt: 2026-06-26 02:16:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwt5t[2] Phase: Succeeded StartedAt: 2026-06-26 02:16:59 +0000 UTC FinishedAt: 2026-06-26 06:14:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-26 02:16:59 +0000 UTC FinishedAt: 2026-06-26 06:14:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-26 02:16:59 +0000 UTC FinishedAt: 2026-06-26 02:17:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-26 02:16:59 +0000 UTC FinishedAt: 2026-06-26 02:17:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflownwt5t/series-workflownwt5t-convert-artifact-605999780/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-26 02:17:09 +0000 UTC FinishedAt: 2026-06-26 02:41:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-26 02:17:09 +0000 UTC FinishedAt: 2026-06-26 02:41:06 +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:*c31a0067-5fd7-471d-8921-4db889ee8542,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-workflownwt5t/series-workflownwt5t-convert-artifact-605999780/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": "e05923c8-d6e0-43dc-8bca-21fdf6afb95a", "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-workflownwt5t/series-workflownwt5t-build-action-2627626210/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-26 02:17:09 +0000 UTC FinishedAt: 2026-06-26 02:40:56 +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:*c31a0067-5fd7-471d-8921-4db889ee8542,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-workflownwt5t/series-workflownwt5t-convert-artifact-605999780/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": "e05923c8-d6e0-43dc-8bca-21fdf6afb95a", "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-workflownwt5t/series-workflownwt5t-build-action-2627626210/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-26 02:41:06 +0000 UTC FinishedAt: 2026-06-26 02:41:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-26 02:41:06 +0000 UTC FinishedAt: 2026-06-26 02:41:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-26 02:41:06 +0000 UTC FinishedAt: 2026-06-26 02:41:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-26 02:41:06 +0000 UTC FinishedAt: 2026-06-26 02:41:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflownwt5t/series-workflownwt5t-convert-artifact-3412223651/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-26 02:41:16 +0000 UTC FinishedAt: 2026-06-26 02:43:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-26 02:41:16 +0000 UTC FinishedAt: 2026-06-26 02:42:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e05923c8-d6e0-43dc-8bca-21fdf6afb95a,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-workflownwt5t/series-workflownwt5t-build-action-2627626210/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-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-26 02:43:03 +0000 UTC FinishedAt: 2026-06-26 02:43:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-26 02:43:03 +0000 UTC FinishedAt: 2026-06-26 02:43:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-26 02:43:03 +0000 UTC FinishedAt: 2026-06-26 03:07:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-26 02:43:03 +0000 UTC FinishedAt: 2026-06-26 03:07:27 +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:*c31a0067-5fd7-471d-8921-4db889ee8542,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-workflownwt5t/series-workflownwt5t-convert-artifact-3412223651/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": "4987fd17-a017-461e-98c5-63cf4f89e8c8", "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-workflownwt5t/series-workflownwt5t-build-action-4082985815/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-26 02:43:03 +0000 UTC FinishedAt: 2026-06-26 03:07:17 +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:*c31a0067-5fd7-471d-8921-4db889ee8542,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-workflownwt5t/series-workflownwt5t-convert-artifact-3412223651/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": "4987fd17-a017-461e-98c5-63cf4f89e8c8", "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-workflownwt5t/series-workflownwt5t-build-action-4082985815/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-26 03:07:27 +0000 UTC FinishedAt: 2026-06-26 03:07:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-26 03:07:27 +0000 UTC FinishedAt: 2026-06-26 03:07:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-26 03:07:27 +0000 UTC FinishedAt: 2026-06-26 03:09:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-26 03:07:27 +0000 UTC FinishedAt: 2026-06-26 03:09:31 +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:*4987fd17-a017-461e-98c5-63cf4f89e8c8,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-workflownwt5t/series-workflownwt5t-build-action-4082985815/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-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-26 03:09:41 +0000 UTC FinishedAt: 2026-06-26 06:14:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-26 03:09:41 +0000 UTC FinishedAt: 2026-06-26 06:14:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},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:*e05923c8-d6e0-43dc-8bca-21fdf6afb95a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4987fd17-a017-461e-98c5-63cf4f89e8c8,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-workflownwt5t/series-workflownwt5t-build-action-2627626210/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-workflownwt5t/series-workflownwt5t-build-action-4082985815/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-26 03:09:41 +0000 UTC FinishedAt: 2026-06-26 03:09:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-26 03:09:41 +0000 UTC FinishedAt: 2026-06-26 03:09:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},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-workflownwt5t/series-workflownwt5t-convert-artifact-2640654524/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-26 03:09:41 +0000 UTC FinishedAt: 2026-06-26 03:09:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-26 03:09:41 +0000 UTC FinishedAt: 2026-06-26 03:09:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-26 03:09:41 +0000 UTC FinishedAt: 2026-06-26 03:09:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-26 03:09:51 +0000 UTC FinishedAt: 2026-06-26 06:14:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwt5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_free","obj_malloc","zs_page_migrate","async_free_zspage","__free_zspage"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"e65a1441-a8d8-4993-8461-08e3fca549e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-26 03:09:51 +0000 UTC FinishedAt: 2026-06-26 06:14:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e05923c8-d6e0-43dc-8bca-21fdf6afb95a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4987fd17-a017-461e-98c5-63cf4f89e8c8,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-workflownwt5t/series-workflownwt5t-build-action-2627626210/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-workflownwt5t/series-workflownwt5t-build-action-4082985815/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-workflownwt5t/series-workflownwt5t-convert-artifact-2640654524/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,}