Name: series-workflowfb5l7 Phase: Succeeded StartedAt: 2026-08-11 07:20:52 +0000 UTC FinishedAt: 2026-08-11 11:06:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfb5l7[0] Phase: Succeeded StartedAt: 2026-08-11 07:20:52 +0000 UTC FinishedAt: 2026-08-11 07:24:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfb5l7[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 07:20:52 +0000 UTC FinishedAt: 2026-08-11 07:24:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "d58772d8520c7ef247c4b95c9bd76d3a25da9ff5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "d58772d8520c7ef247c4b95c9bd76d3a25da9ff5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "d4ee1178-db53-4b87-a3aa-d98f617fb380" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_wq_create", "io_wq_put_and_exit", "io_wq_enqueue", "io_wq_cancel_cb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fd3FfY3JlYXRlJiMzNDssCiAgICAmIzM0O2lvX3dxX3B1dF9hbmRfZXhpdCYjMzQ7LAogICAgJiMzNDtpb193cV9lbnF1ZXVlJiMzNDssCiAgICAmIzM0O2lvX3dxX2NhbmNlbF9jYiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGFjY291bnRpbmcgYnVnIGluIGlvX3dvcmtlcl9jYW5jZWxfY2IoKSB3aGVyZSBhY2N0LVx1MDAzZW5yX3dvcmtlcnMgd2FzIGRlY3JlbWVudGVkIGV2ZW4gaWYgY3JlYXRlX3dvcmtlcl9jYigpIGhhZCBub3QgcmVzZXJ2ZWQgYSB3b3JrZXIgc2xvdCB5ZXQuIFRoaXMgaXMgYSBsb2dpYyBidWcgcmVsYXRlZCB0byByZXNvdXJjZSBhY2NvdW50aW5nIGFuZCBjb25jdXJyZW5jeSwgd2hpY2ggZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpb193b3JrZXJfY2FuY2VsX2NiYCBpbiBgaW9fdXJpbmcvaW8td3EuY2AgdG8gY29uZGl0aW9uYWxseSBkZWNyZW1lbnQgYGFjY3QtXHUwMDNlbnJfd29ya2Vyc2Agb25seSBpZiBgd29ya2VyLVx1MDAzZWNyZWF0ZV93b3JrLmZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jYmAuIFRoaXMgZml4ZXMgYSBidWcgaW4gaW9fdXJpbmcgd29ya2VyIGNhbmNlbGxhdGlvbiB3aGVyZSB0aGUgd29ya2VyIHNsb3Qgd2FzIG5vdCB5ZXQgcmVzZXJ2ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBpb191cmluZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDJlY2FhMmE2MTljZjljMzc3ZDIwYTRmODc2NDMyYzg0ZTNkMTYwNjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNzoyMjo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9pby13cS5jIGIvaW9fdXJpbmcvaW8td3EuY1xuaW5kZXggMmUxNDg4MGVlZjkyYS4uZmE0MDNlZDI0NTk2MiAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2lvLXdxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2lvLXdxLmNcbkBAIC0yMTEsOSAmIzQzOzIxMSwxMiBAQCBzdGF0aWMgdm9pZCBpb193b3JrZXJfY2FuY2VsX2NiKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcbiBcdHN0cnVjdCBpb193cSAqd3EgPSB3b3JrZXItXHUwMDNld3E7XG4gXG4gXHRhdG9taWNfZGVjKFx1MDAyNmFjY3QtXHUwMDNlbnJfcnVubmluZyk7XG4tXHRyYXdfc3Bpbl9sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbi1cdGFjY3QtXHUwMDNlbnJfd29ya2Vycy0tO1xuLVx0cmF3X3NwaW5fdW5sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbiYjNDM7XHQvKiBjcmVhdGVfd29ya2VyX2NiKCkgaGFzIG5vdCByZXNlcnZlZCBhIHdvcmtlciBzbG90IHlldC4gKi9cbiYjNDM7XHRpZiAod29ya2VyLVx1MDAzZWNyZWF0ZV93b3JrLmZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jYikge1xuJiM0MztcdFx0cmF3X3NwaW5fbG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4mIzQzO1x0XHRhY2N0LVx1MDAzZW5yX3dvcmtlcnMtLTtcbiYjNDM7XHRcdHJhd19zcGluX3VubG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4mIzQzO1x0fVxuIFx0aW9fd29ya2VyX3JlZl9wdXQod3EpO1xuIFx0Y2xlYXJfYml0X3VubG9jaygwLCBcdTAwMjZ3b3JrZXItXHUwMDNlY3JlYXRlX3N0YXRlKTtcbiBcdGlvX3dvcmtlcl9yZWxlYXNlKHdvcmtlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fd3FfY3JlYXRlJiMzNDssCiAgICAmIzM0O2lvX3dxX3B1dF9hbmRfZXhpdCYjMzQ7LAogICAgJiMzNDtpb193cV9lbnF1ZXVlJiMzNDssCiAgICAmIzM0O2lvX3dxX2NhbmNlbF9jYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaW9fd29ya2VyX2NhbmNlbF9jYmAgaW4gYGlvX3VyaW5nL2lvLXdxLmNgIHRvIGNvbmRpdGlvbmFsbHkgZGVjcmVtZW50IGBhY2N0LVx1MDAzZW5yX3dvcmtlcnNgIG9ubHkgaWYgYHdvcmtlci1cdTAwM2VjcmVhdGVfd29yay5mdW5jICE9IGNyZWF0ZV93b3JrZXJfY2JgLiBUaGlzIGZpeGVzIGEgYnVnIGluIGlvX3VyaW5nIHdvcmtlciBjYW5jZWxsYXRpb24gd2hlcmUgdGhlIHdvcmtlciBzbG90IHdhcyBub3QgeWV0IHJlc2VydmVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9fdXJpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyZWNhYTJhNjE5Y2Y5YzM3N2QyMGE0Zjg3NjQzMmM4NGUzZDE2MDY1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMDc6MjI6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pb191cmluZy9pby13cS5jIGIvaW9fdXJpbmcvaW8td3EuYwppbmRleCAyZTE0ODgwZWVmOTJhLi5mYTQwM2VkMjQ1OTYyIDEwMDY0NAotLS0gYS9pb191cmluZy9pby13cS5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2lvLXdxLmMKQEAgLTIxMSw5ICYjNDM7MjExLDEyIEBAIHN0YXRpYyB2b2lkIGlvX3dvcmtlcl9jYW5jZWxfY2Ioc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKQogCXN0cnVjdCBpb193cSAqd3EgPSB3b3JrZXItJmd0O3dxOwogCiAJYXRvbWljX2RlYygmYW1wO2FjY3QtJmd0O25yX3J1bm5pbmcpOwotCXJhd19zcGluX2xvY2soJmFtcDthY2N0LSZndDt3b3JrZXJzX2xvY2spOwotCWFjY3QtJmd0O25yX3dvcmtlcnMtLTsKLQlyYXdfc3Bpbl91bmxvY2soJmFtcDthY2N0LSZndDt3b3JrZXJzX2xvY2spOwomIzQzOwkvKiBjcmVhdGVfd29ya2VyX2NiKCkgaGFzIG5vdCByZXNlcnZlZCBhIHdvcmtlciBzbG90IHlldC4gKi8KJiM0MzsJaWYgKHdvcmtlci0mZ3Q7Y3JlYXRlX3dvcmsuZnVuYyAhPSBjcmVhdGVfd29ya2VyX2NiKSB7CiYjNDM7CQlyYXdfc3Bpbl9sb2NrKCZhbXA7YWNjdC0mZ3Q7d29ya2Vyc19sb2NrKTsKJiM0MzsJCWFjY3QtJmd0O25yX3dvcmtlcnMtLTsKJiM0MzsJCXJhd19zcGluX3VubG9jaygmYW1wO2FjY3QtJmd0O3dvcmtlcnNfbG9jayk7CiYjNDM7CX0KIAlpb193b3JrZXJfcmVmX3B1dCh3cSk7CiAJY2xlYXJfYml0X3VubG9jaygwLCAmYW1wO3dvcmtlci0mZ3Q7Y3JlYXRlX3N0YXRlKTsKIAlpb193b3JrZXJfcmVsZWFzZSh3b3JrZXIpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGluIGlvX3VyaW5nL2lvLXdxLmMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggd2l0aGluIGBpb191cmluZy9pby13cS5jYC4gSXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYGlvX3dvcmtlcl9jYW5jZWxfY2JgLiBUaGUga2V5IGNoYW5nZSBpcyBhcm91bmQgdGhpcyBjb25kaXRpb25hbDogYXZvaWRpbmcgZGVjcmVtZW50aW5nIGBhY2N0LSZndDtucl93b3JrZXJzYCB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMuIExldCBtZSBzZWUuLi4gdGhlIGxvZ2ljIGhlcmUgaXMgc2tpcHBpbmcgdGhlIGRlY3JlbWVudCB3aGVuIGB3b3JrZXItJmd0O2NyZWF0ZV93b3JrLmZ1bmNgIGlzbiYjMzk7dCBgY3JlYXRlX3dvcmtlcl9jYmAuIEhtbSwgdGhlIGNvbW1lbnQgc2F5cyBzb21ldGhpbmcgYWJvdXQgYGNyZWF0ZV93b3JrZXJfY2IoKWAgbm90IHJlc2VydmluZyBhIHdvcmtlciBzbG90IHlldC4gUmlnaHQsIHNvIGlmIGl0JiMzOTtzICpub3QqIGBjcmVhdGVfd29ya2VyX2NiYCwgd2hhdCAqaXMqIGl0PyBJcyB0aGlzIHJlbGF0ZWQgdG8gYGNyZWF0ZV93b3JrZXJfY29udGA/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBib3RoIGBpb193b3JrZXJfY2FuY2VsX2NiYCBhbmQgYGNyZWF0ZV93b3JrZXJfY2JgIHdpdGhpbiB0aGlzIGZpbGUuIFRoZSBkZXBlbmRlbmN5IGFuZCBob3cgdGhleSByZWxhdGUgaXMgb2J2aW91c2x5IHRoZSBrZXkgdG8gdGhpcyBwYXRjaC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHRoZSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3dvcmtlcl9jYW5jZWxfY2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy9pby13cS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvLXdxLmM9MTk4PWJvb2wgaW9fd3Ffd29ya2VyX3N0b3BwZWQodm9pZClcbi0tXG5pb191cmluZy9pby13cS5jLTIwNy1cbmlvX3VyaW5nL2lvLXdxLmM6MjA4OnN0YXRpYyB2b2lkIGlvX3dvcmtlcl9jYW5jZWxfY2Ioc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKVxuaW9fdXJpbmcvaW8td3EuYy0yMDkte1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MjM1PXN0YXRpYyB2b2lkIGlvX3dvcmtlcl9leGl0KHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcbi0tXG5pb191cmluZy9pby13cS5jLTI0NS1cdFx0XHRicmVhaztcbmlvX3VyaW5nL2lvLXdxLmM6MjQ2Olx0XHRpb193b3JrZXJfY2FuY2VsX2NiKHdvcmtlcik7XG5pb191cmluZy9pby13cS5jLTI0Ny1cdH1cbi0tXG5pb191cmluZy9pby13cS5jPTEzMjQ9c3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3R3X2NyZWF0ZShzdHJ1Y3QgaW9fd3EgKndxKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTMzMS1cdFx0d29ya2VyID0gY29udGFpbmVyX29mKGNiLCBzdHJ1Y3QgaW9fd29ya2VyLCBjcmVhdGVfd29yayk7XG5pb191cmluZy9pby13cS5jOjEzMzI6XHRcdGlvX3dvcmtlcl9jYW5jZWxfY2Iod29ya2VyKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTMzMy1cdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODI2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlc2UgY2FsbGJhY2tzOiBgaW9fd29ya2VyX2NhbmNlbF9jYmAsIGBjcmVhdGVfd29ya2VyX2NiYCwgYW5kIGBjcmVhdGVfd29ya2VyX2NvbnRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGVpciByZWxhdGlvbnNoaXAgYW5kIGhvdyB0aGV5IGNvbnRyaWJ1dGUgdG8gdGhlIG92ZXJhbGwgd29ya2Zsb3cuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBvcmNoZXN0cmF0aW9uIGhlcmUuIElzIGBpb193b3JrZXJfY2FuY2VsX2NiYCB1c2VkIHRvIGNsZWFuIHVwIG9yIHNpZ25hbCB0ZXJtaW5hdGlvbiwgYW5kIGhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggYGNyZWF0ZV93b3JrZXJfY2JgIHdoaWNoIGxpa2VseSBzcGF3bnMgbmV3IHRocmVhZHMgb3IgcHJvY2Vzc2VzPyBJcyBgY3JlYXRlX3dvcmtlcl9jb250YCByZWxhdGVkLCBwZXJoYXBzIGEgY29udGludWF0aW9uIG9yIGNvbXBsZXRpb24gaGFuZGxlciBhZnRlciB3b3JrZXIgY3JlYXRpb24/IE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGNvbnRyb2wgZmxvdywgaWRlbnRpZnlpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGJldHdlZW4gdGhlc2UgY2FsbGJhY2tzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyBzdGF0ZSBpcyBzaGFyZWQgYmV0d2VlbiB0aGVtLCBlc3BlY2lhbGx5IGlmIHRoZXJlJiMzOTtzIGFueSBzaGFyZWQgZGF0YSB0aGF0IHJlcXVpcmVzIGNhcmVmdWwgbG9ja2luZyBvciBhdG9taWMgb3BlcmF0aW9ucy4gSSYjMzk7bGwgYWxzbyBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgZXJyb3IgaGFuZGxpbmc6IGRvIHRoZXNlIGNhbGxiYWNrcyBoYW5kbGUgZXJyb3JzIGluZGVwZW5kZW50bHksIG9yIGlzIHRoZXJlIGEgY2VudHJhbGl6ZWQgZXJyb3ItcmVwb3J0aW5nIG1lY2hhbmlzbT8gSSBuZWVkIHRvIGFuYWx5emUgaG93IGNhbmNlbGxhdGlvbiBpcyBwcm9wYWdhdGVkIHRocm91Z2ggdGhpcyBjaGFpbiwgYW5kIGxvb2sgYXQgdGhlIGVkZ2UgY2FzZXMgbGlrZSB0aGUgdGhyZWFkIGV4aXRpbmcgd2hpbGUgcHJvY2Vzc2luZyBhIHJlcXVlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3JlYXRlX3dvcmtlcl9jYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvLXdxLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYz0xNDk9c3RhdGljIGJvb2wgaW9fYWNjdF9jYW5jZWxfcGVuZGluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xNTEtXHRcdFx0XHRcdHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpO1xuaW9fdXJpbmcvaW8td3EuYzoxNTI6c3RhdGljIHZvaWQgY3JlYXRlX3dvcmtlcl9jYihzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IpO1xuaW9fdXJpbmcvaW8td3EuYy0xNTMtc3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3R3X2NyZWF0ZShzdHJ1Y3QgaW9fd3EgKndxKTtcbi0tXG5pb191cmluZy9pby13cS5jPTIwOD1zdGF0aWMgdm9pZCBpb193b3JrZXJfY2FuY2VsX2NiKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcbi0tXG5pb191cmluZy9pby13cS5jLTIxMy1cdGF0b21pY19kZWMoXHUwMDI2YWNjdC1cdTAwM2Vucl9ydW5uaW5nKTtcbmlvX3VyaW5nL2lvLXdxLmM6MjE0Olx0LyogY3JlYXRlX3dvcmtlcl9jYigpIGhhcyBub3QgcmVzZXJ2ZWQgYSB3b3JrZXIgc2xvdCB5ZXQuICovXG5pb191cmluZy9pby13cS5jOjIxNTpcdGlmICh3b3JrZXItXHUwMDNlY3JlYXRlX3dvcmsuZnVuYyAhPSBjcmVhdGVfd29ya2VyX2NiKSB7XG5pb191cmluZy9pby13cS5jLTIxNi1cdFx0cmF3X3NwaW5fbG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0yMjU9c3RhdGljIGJvb2wgaW9fdGFza193b3JrZXJfbWF0Y2goc3RydWN0IGNhbGxiYWNrX2hlYWQgKmNiLCB2b2lkICpkYXRhKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMjI4LVxuaW9fdXJpbmcvaW8td3EuYzoyMjk6XHRpZiAoY2ItXHUwMDNlZnVuYyAhPSBjcmVhdGVfd29ya2VyX2NiKVxuaW9fdXJpbmcvaW8td3EuYy0yMzAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5pb191cmluZy9pby13cS5jPTM0Nz1zdGF0aWMgdm9pZCBpb193cV9pbmNfcnVubmluZyhzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0zNTMtXG5pb191cmluZy9pby13cS5jOjM1NDpzdGF0aWMgdm9pZCBjcmVhdGVfd29ya2VyX2NiKHN0cnVjdCBjYWxsYmFja19oZWFkICpjYilcbmlvX3VyaW5nL2lvLXdxLmMtMzU1LXtcbi0tXG5pb191cmluZy9pby13cS5jPTQ1OT1zdGF0aWMgdm9pZCBpb193cV9kZWNfcnVubmluZyhzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy00ODAtXHRhdG9taWNfaW5jKFx1MDAyNndxLVx1MDAzZXdvcmtlcl9yZWZzKTtcbmlvX3VyaW5nL2lvLXdxLmM6NDgxOlx0aW9fcXVldWVfd29ya2VyX2NyZWF0ZSh3b3JrZXIsIGFjY3QsIGNyZWF0ZV93b3JrZXJfY2IpO1xuaW9fdXJpbmcvaW8td3EuYy00ODItfVxuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTMwOT1zdGF0aWMgYm9vbCBpb190YXNrX3dvcmtfbWF0Y2goc3RydWN0IGNhbGxiYWNrX2hlYWQgKmNiLCB2b2lkICpkYXRhKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTMxMi1cbmlvX3VyaW5nL2lvLXdxLmM6MTMxMzpcdGlmIChjYi1cdTAwM2VmdW5jICE9IGNyZWF0ZV93b3JrZXJfY2IgXHUwMDI2XHUwMDI2IGNiLVx1MDAzZWZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jb250KVxuaW9fdXJpbmcvaW8td3EuYy0xMzE0LVx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg0MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTdWJ0bGUgaW9fdXJpbmcgV29ya2VyIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGlvX3VyaW5nL2lvLXdxLmNgLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgYGlvX3dvcmtlcl9jYW5jZWxfY2JgLiBUaGUga2V5IGNoYW5nZSBpcyB0aGlzIGNvbmRpdGlvbmFsIGxvZ2ljOiBkb24mIzM5O3QgZGVjcmVtZW50IGBhY2N0LSZndDtucl93b3JrZXJzYCBpZiB0aGUgd29ya2VyJiMzOTtzIGNyZWF0aW9uIGZ1bmN0aW9uIGlzbiYjMzk7dCBgY3JlYXRlX3dvcmtlcl9jYmAuIFRoZSBjb2RlIHNuaXBwZXQgcmVhbGx5IGNsYXJpZmllcyBpdDoKCmBgYGMKCS8qIGNyZWF0ZV93b3JrZXJfY2IoKSBoYXMgbm90IHJlc2VydmVkIGEgd29ya2VyIHNsb3QgeWV0LiAqLwoJaWYgKHdvcmtlci0mZ3Q7Y3JlYXRlX3dvcmsuZnVuYyAhPSBjcmVhdGVfd29ya2VyX2NiKSB7CgkJcmF3X3NwaW5fbG9jaygmYW1wO2FjY3QtJmd0O3dvcmtlcnNfbG9jayk7CgkJYWNjdC0mZ3Q7bnJfd29ya2Vycy0tOwoJCXJhd19zcGluX3VubG9jaygmYW1wO2FjY3QtJmd0O3dvcmtlcnNfbG9jayk7Cgl9CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb247IGl0JiMzOTtzIGZpeGluZyBhIHBvdGVudGlhbCBidWcgaW4gaG93IGlvX3VyaW5nIHdvcmtlcnMgYXJlIG1hbmFnZWQgZHVyaW5nIGNhbmNlbGxhdGlvbi4gVGhhdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWcgb3B0aW9ucyBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGFuZCBpZGVudGlmeSB0aGUgcmVsZXZhbnQgc3ltYm9scy4gVGhlIGZ1bmN0aW9uIGBpb193b3JrZXJfY2FuY2VsX2NiYCBpdHNlbGYgaXMgc3RhdGljLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgd2hhdCBjYWxscyBpdCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIHVzZXMgaXQuIEEgcXVpY2sgbG9vayBzaG93cyB0aGF0IGl0JiMzOTtzIGNhbGxlZCBieSBgaW9fd29ya2VyX2V4aXRgIGFuZCBgaW9fd3FfY2FuY2VsX3R3X2NyZWF0ZWAsIHdoaWNoIHNob3VsZCBnaXZlIG1lIGdvb2QgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3dvcmtlcl9leGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9pby13cS5jPTIyNT1zdGF0aWMgYm9vbCBpb190YXNrX3dvcmtlcl9tYXRjaChzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IsIHZvaWQgKmRhdGEpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0yMzQtXG5pb191cmluZy9pby13cS5jOjIzNTpzdGF0aWMgdm9pZCBpb193b3JrZXJfZXhpdChzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpXG5pb191cmluZy9pby13cS5jLTIzNi17XG4tLVxuaW9fdXJpbmcvaW8td3EuYz02ODU9c3RhdGljIGludCBpb193cV93b3JrZXIodm9pZCAqZGF0YSlcbi0tXG5pb191cmluZy9pby13cS5jLTc0OC1cbmlvX3VyaW5nL2lvLXdxLmM6NzQ5Olx0aW9fd29ya2VyX2V4aXQod29ya2VyKTtcbmlvX3VyaW5nL2lvLXdxLmMtNzUwLVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYwOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIHRoZXNlIHdlcmUgbXkgb3duIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHRoZSBJL08gV29ya2VyIFRocmVhZHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjb3JlIG9mIHRoZSBJL08gd29ya2VyIHRocmVhZCBtZWNoYW5pc20uIGBpb193cV93b3JrZXJgLi4uIHRoYXQmIzM5O3MgdGhlIHByaW1hcnkgdGhyZWFkIGZ1bmN0aW9uLCB0aGUgaGVhcnQgb2YgdGhlIHdob2xlIG9wZXJhdGlvbi4gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gd2hlcmUgdGhlIGFjdHVhbCB3b3JrIGdldHMgZG9uZS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgSS9PIHByb2Nlc3NpbmcgaXMgb3JjaGVzdHJhdGVkLgoKVGhlbiBJIHNlZSBgaW9fd3FfY2FuY2VsX3R3X2NyZWF0ZWAsIGFuZCB0aGF0JiMzOTtzIGNhbGxlZCBzcGVjaWZpY2FsbHkgZnJvbSBgaW9fd3FfZXhpdF93b3JrZXJzYC4gU28sIHdoZW4gdGhlIHN5c3RlbSYjMzk7cyBzaHV0dGluZyBkb3duIHRoZSB3b3JrZXIgdGhyZWFkcywgdGhpcyBjYW5jZWxsYXRpb24gZnVuY3Rpb24gaXMgaW52b2tlZC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gSXQmIzM5O3MgYSBjbGVhbnVwIHN0ZXAsIHBvdGVudGlhbGx5IHRvIHByZXZlbnQgYW55IG5ldyB0aHJlYWQgY3JlYXRpb25zIGZyb20gc3VjY2VlZGluZyBvbiBzaHV0ZG93bi4gSXQmIzM5O3MgYWxsIGFib3V0IG1ha2luZyB0aGUgcHJvY2VzcyBhcyB0aWR5IGFzIHBvc3NpYmxlLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBpb193cV9jYW5jZWxfdHdfY3JlYXRlYCBtb3JlIHRvIHVuZGVyc3RhbmQgd2hhdCByZXNvdXJjZXMgaXQmIzM5O3MgY2xlYW5pbmcgdXAuIFRoZSBjb250ZXh0IGlzIG9idmlvdXNseSBhYm91dCB0aHJlYWQgbWFuYWdlbWVudCBhbmQgc3BlY2lmaWNhbGx5IHRoZSBjbGVhbnVwIG9mIHRocmVhZCBjcmVhdGlvbiByZWxhdGVkIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBJL08gd29ya2VyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3dxX2NhbmNlbF90d19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy9pby13cS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvLXdxLmM9MTUyPXN0YXRpYyB2b2lkIGNyZWF0ZV93b3JrZXJfY2Ioc3RydWN0IGNhbGxiYWNrX2hlYWQgKmNiKTtcbmlvX3VyaW5nL2lvLXdxLmM6MTUzOnN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF90d19jcmVhdGUoc3RydWN0IGlvX3dxICp3cSk7XG5pb191cmluZy9pby13cS5jLTE1NC1cbi0tXG5pb191cmluZy9pby13cS5jPTM5MD1zdGF0aWMgYm9vbCBpb19xdWV1ZV93b3JrZXJfY3JlYXRlKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcixcbi0tXG5pb191cmluZy9pby13cS5jLTQyMC1cdFx0aWYgKHRlc3RfYml0KElPX1dRX0JJVF9FWElULCBcdTAwMjZ3cS1cdTAwM2VzdGF0ZSkpXG5pb191cmluZy9pby13cS5jOjQyMTpcdFx0XHRpb193cV9jYW5jZWxfdHdfY3JlYXRlKHdxKTtcbmlvX3VyaW5nL2lvLXdxLmMtNDIyLVx0XHRpb193b3JrZXJfcmVmX3B1dCh3cSk7XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xMzE5PXZvaWQgaW9fd3FfZXhpdF9zdGFydChzdHJ1Y3QgaW9fd3EgKndxKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTMyMy1cbmlvX3VyaW5nL2lvLXdxLmM6MTMyNDpzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfdHdfY3JlYXRlKHN0cnVjdCBpb193cSAqd3EpXG5pb191cmluZy9pby13cS5jLTEzMjUte1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTM0Mj1zdGF0aWMgdm9pZCBpb193cV9leGl0X3dvcmtlcnMoc3RydWN0IGlvX3dxICp3cSlcbi0tXG5pb191cmluZy9pby13cS5jLTEzNDgtXG5pb191cmluZy9pby13cS5jOjEzNDk6XHRpb193cV9jYW5jZWxfdHdfY3JlYXRlKHdxKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTM1MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMzNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgaW9fd3EgRGVzdHJ1Y3Rpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaW9fd3FfZXhpdF93b3JrZXJzYCBhbmQgYGlvX3dxX2V4aXRfc3RhcnRgLiBUaG9zZSBhcmUgZGVmaW5pdGVseSBjYWxsZWQgZHVyaW5nIHRoZSBkZXN0cnVjdGlvbiBwcm9jZXNzIG9mIGFuIGBpb193cWAsIG1ha2luZyB0aGVtIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBpdCBhbGwgdW5yYXZlbHMuIE15IHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGF0IHByb2Nlc3MuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcGllY2VzLCBmcm9tIHN0YXJ0IHRvIGZpbmlzaC4KClRoZXJlZm9yZSwgSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIG1pZ2h0IGJlIHVzZWZ1bCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGlvX3dxYCBpcyBjcmVhdGVkLCBhbmQgZXZlbiBtb3JlIGNyaXRpY2FsbHksIHRvcm4gZG93bi4gSeKAmWxsIGZvY3VzIG9uIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhcyB0aGV5JiMzOTtyZSB0aGUgb25lcyBtb3N0IGxpa2VseSB0byBiZSBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJIG9yIGF0IGxlYXN0IGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGNhc3QgYSB3aWRlciBuZXQgaGVyZSBhbmQgZmluZCBhbnl0aGluZyBpbnZvbHZlZCBpbiBlaXRoZXIgY3JlYXRpb24gb3IgZGVzdHJ1Y3Rpb24gdGhhdCBtaWdodCBiZSBsdXJraW5nIGFyb3VuZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgaG93IGBpb193cWAgbGlmZSBjeWNsZSBpcyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb193cV9leGl0X3dvcmtlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy9pby13cS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvLXdxLmM9MzkwPXN0YXRpYyBib29sIGlvX3F1ZXVlX3dvcmtlcl9jcmVhdGUoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLFxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNDE3LVx0XHQgKiBub3cgc2V0LiB3cSBleGl0IGRvZXMgdGhhdCB0b28sIGJ1dCB3ZSBjYW4gaGF2ZSBhZGRlZCB0aGlzXG5pb191cmluZy9pby13cS5jOjQxODpcdFx0ICogd29yayBpdGVtIGFmdGVyIHdlIGNhbmNlbGVkIGluIGlvX3dxX2V4aXRfd29ya2VycygpLlxuaW9fdXJpbmcvaW8td3EuYy00MTktXHRcdCAqL1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTMyND1zdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfdHdfY3JlYXRlKHN0cnVjdCBpb193cSAqd3EpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMzQxLVxuaW9fdXJpbmcvaW8td3EuYzoxMzQyOnN0YXRpYyB2b2lkIGlvX3dxX2V4aXRfd29ya2VycyhzdHJ1Y3QgaW9fd3EgKndxKVxuaW9fdXJpbmcvaW8td3EuYy0xMzQzLXtcbi0tXG5pb191cmluZy9pby13cS5jPTEzOTg9dm9pZCBpb193cV9wdXRfYW5kX2V4aXQoc3RydWN0IGlvX3dxICp3cSlcbi0tXG5pb191cmluZy9pby13cS5jLTE0MDEtXG5pb191cmluZy9pby13cS5jOjE0MDI6XHRpb193cV9leGl0X3dvcmtlcnMod3EpO1xuaW9fdXJpbmcvaW8td3EuYy0xNDAzLVx0aW9fd3FfZGVzdHJveSh3cSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgdGhlIGBpb193cWAgQ2xlYW51cCBQcm9jZWR1cmUqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgaW9fd3FfcHV0X2FuZF9leGl0YC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbiBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGltcGxpZXMgaXQgbWlnaHQgYmUgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgbW9kdWxlLCB3aGljaCBoYXMgaW1wbGljYXRpb25zIGZvciBzeW5jaHJvbml6YXRpb24gYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzIGluIHdoaWNoIGl0JiMzOTtzIGJlaW5nIHVzZWQgYmV5b25kIHRoZSBpbW1lZGlhdGUgc2NvcGUuIFRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgYGlvX3dxYCBzdHJ1Y3R1cmUgaXMgbWFuYWdlZCwgSSByZWFsbHkgbmVlZCB0byB0cmFjZSBpdHMgb3JpZ2lucywgdGhlIGxpZmVjeWNsZSBvZiB0aGUgb2JqZWN0LCBhbmQgaXRzIGZpbmFsaXphdGlvbiByb3V0aW5lLiBTbywgSSBuZWVkIHRvIHNlZSAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20uIFRoZXJlZm9yZSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY3JlYXRpb24gcHJvY2Vzcy4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYGlvX3dxX2NyZWF0ZWAgbmV4dC4gVGhpcyB3aWxsIGxpa2VseSBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGV4cGVjdGVkIHVzYWdlIGFuZCBsaWZlY3ljbGUgb2YgdGhlIGBpb193cWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3dxX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvLXdxLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYz0yOTU9c3RhdGljIGJvb2wgaW9fYWNjdF9hY3RpdmF0ZV9mcmVlX3dvcmtlcihzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdClcbi0tXG5pb191cmluZy9pby13cS5jLTMyNS0gKi9cbmlvX3VyaW5nL2lvLXdxLmM6MzI2OnN0YXRpYyBib29sIGlvX3dxX2NyZWF0ZV93b3JrZXIoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpXG5pb191cmluZy9pby13cS5jLTMyNy17XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xMDI4PXZvaWQgaW9fd3FfZW5xdWV1ZShzdHJ1Y3QgaW9fd3EgKndxLCBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaylcbi0tXG5pb191cmluZy9pby13cS5jLTEwNjEtXG5pb191cmluZy9pby13cS5jOjEwNjI6XHRcdGRpZF9jcmVhdGUgPSBpb193cV9jcmVhdGVfd29ya2VyKHdxLCBhY2N0KTtcbmlvX3VyaW5nL2lvLXdxLmMtMTA2My1cdFx0aWYgKGxpa2VseShkaWRfY3JlYXRlKSlcbi0tXG5pb191cmluZy9pby13cS5jPTEyMzU9c3RhdGljIGludCBpb193cV9oYXNoX3dha2Uoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsIHVuc2lnbmVkIG1vZGUsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMjUzLVxuaW9fdXJpbmcvaW8td3EuYzoxMjU0OnN0cnVjdCBpb193cSAqaW9fd3FfY3JlYXRlKHVuc2lnbmVkIGJvdW5kZWQsIHN0cnVjdCBpb193cV9kYXRhICpkYXRhKVxuaW9fdXJpbmcvaW8td3EuYy0xMjU1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYxNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBJZiBJJiMzOTttIHRyeWluZyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIG9mIHRoaXMgSS9PIHdvcmtxdWV1ZSBpbXBsZW1lbnRhdGlvbiwgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBsb29rIGF0IHRoZSBwcmltYXJ5IGVudHJ5IGFuZCBleGl0IHBvaW50cywgdGhlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiwgcmVhbGx5LiBTbywgYGlvX3dxX2NyZWF0ZWAgYW5kIGBpb193cV9wdXRfYW5kX2V4aXRgIGRlZmluaXRlbHkganVtcCBvdXQgYXMgaW1wb3J0YW50IHN5bWJvbHMgdG8gdHJhY2UuIFRoZXkgYXJlIHRoZSBzY2FmZm9sZGluZywgdGhlIGJ1aWxkaW5nIGFuZCBkaXNtYW50bGluZywgc28gdG8gc3BlYWsuCgpUaGVuLCBvZiBjb3Vyc2UsIHRoZSBhY3R1YWwgd29yayBlbnF1ZXVpbmcgbmVlZHMgY29uc2lkZXJhdGlvbjogYGlvX3dxX2VucXVldWVgIGlzIG9idmlvdXNseSBhIGNyaXRpY2FsIHBpZWNlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBhY3R1YWwgSS9PIHJlcXVlc3RzIGFyZSBnZXR0aW5nIHN1Ym1pdHRlZC4KCk5vdywgd2hhdCBhYm91dCB0aGUgd29ya2VyIGl0c2VsZj8gQWgsIGBpb193cV93b3JrZXJgLi4uIHRoYXQgb25lJiMzOTtzIHN0YXRpYywgaXNuJiMzOTt0IGl0PyBIbW0sIHN0YXRpYyBtZWFucyBpbnRlcm5hbCB0byB0aGUgZmlsZSwgYW5kIHRoYXQgbWlnaHQgbWFrZSBpdCBhIGxlc3Mgb2J2aW91cyB0YXJnZXQgZm9yIHNvbWVvbmUgdHJ5aW5nIHRvIGludGVyZmFjZSB3aXRoIGl0IGZyb20gYW5vdGhlciBjb250ZXh0LiBJIG5lZWQgdG8gYmUgYXdhcmUgb2Ygd2hhdCBpcyBleHBvc2VkLCBhbmQgd2hhdCBpcyBpbnRlcm5hbC4gSSBzaG91bGQgYWxzbyBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSB3b3JrcXVldWUuIFRoZXkgY291bGQgYmUgdGhlIGtleSB0byBpbnRlZ3JhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fd3FfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTMyIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5pb191cmluZy9pby13cS5jPTQ4PXN0cnVjdCBpb193b3JrZXIge1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNTQtXHRzdHJ1Y3QgaW9fd3EgKndxO1xuaW9fdXJpbmcvaW8td3EuYzo1NTpcdHN0cnVjdCBpb193cV9hY2N0ICphY2N0O1xuaW9fdXJpbmcvaW8td3EuYy01Ni1cbmlvX3VyaW5nL2lvLXdxLmM6NTc6XHRzdHJ1Y3QgaW9fd3Ffd29yayAqY3VyX3dvcms7XG5pb191cmluZy9pby13cS5jLTU4LVx0cmF3X3NwaW5sb2NrX3QgbG9jaztcbi0tXG5pb191cmluZy9pby13cS5jLTc5LVxuaW9fdXJpbmcvaW8td3EuYzo4MDpzdHJ1Y3QgaW9fd3FfYWNjdCB7XG5pb191cmluZy9pby13cS5jLTgxLVx0LyoqXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMDItXHRyYXdfc3BpbmxvY2tfdCBsb2NrO1xuaW9fdXJpbmcvaW8td3EuYzoxMDM6XHRzdHJ1Y3QgaW9fd3Ffd29ya19saXN0IHdvcmtfbGlzdDtcbmlvX3VyaW5nL2lvLXdxLmMtMTA0LVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi0tXG5pb191cmluZy9pby13cS5jPTExNj1zdHJ1Y3QgaW9fd3Ege1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTE4LVxuaW9fdXJpbmcvaW8td3EuYzoxMTk6XHRzdHJ1Y3QgaW9fd3FfaGFzaCAqaGFzaDtcbmlvX3VyaW5nL2lvLXdxLmMtMTIwLVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTI3LVxuaW9fdXJpbmcvaW8td3EuYzoxMjg6XHRzdHJ1Y3QgaW9fd3FfYWNjdCBhY2N0W0lPX1dRX0FDQ1RfTlJdO1xuaW9fdXJpbmcvaW8td3EuYy0xMjktXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMzEtXG5pb191cmluZy9pby13cS5jOjEzMjpcdHN0cnVjdCBpb193cV93b3JrICpoYXNoX3RhaWxbSU9fV1FfTlJfSEFTSF9CVUNLRVRTXTtcbmlvX3VyaW5nL2lvLXdxLmMtMTMzLVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTM2LVxuaW9fdXJpbmcvaW8td3EuYzoxMzc6c3RhdGljIGVudW0gY3B1aHBfc3RhdGUgaW9fd3Ffb25saW5lO1xuaW9fdXJpbmcvaW8td3EuYy0xMzgtXG5pb191cmluZy9pby13cS5jPTEzOT1zdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEge1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTQ2LVxuaW9fdXJpbmcvaW8td3EuYzoxNDc6c3RhdGljIGJvb2wgY3JlYXRlX2lvX3dvcmtlcihzdHJ1Y3QgaW9fd3EgKndxLCBzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCk7XG5pb191cmluZy9pby13cS5jOjE0ODpzdGF0aWMgdm9pZCBpb193cV9kZWNfcnVubmluZyhzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpO1xuaW9fdXJpbmcvaW8td3EuYy0xNDktc3RhdGljIGJvb2wgaW9fYWNjdF9jYW5jZWxfcGVuZGluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXG5pb191cmluZy9pby13cS5jOjE1MDpcdFx0XHRcdFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXG5pb191cmluZy9pby13cS5jLTE1MS1cdFx0XHRcdFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaCk7XG5pb191cmluZy9pby13cS5jPTE1Mj1zdGF0aWMgdm9pZCBjcmVhdGVfd29ya2VyX2NiKHN0cnVjdCBjYWxsYmFja19oZWFkICpjYik7XG5pb191cmluZy9pby13cS5jOjE1MzpzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfdHdfY3JlYXRlKHN0cnVjdCBpb193cSAqd3EpO1xuaW9fdXJpbmcvaW8td3EuYy0xNTQtXG5pb191cmluZy9pby13cS5jPTE1NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2lvX2dldF93b3JrX2hhc2godW5zaWduZWQgaW50IHdvcmtfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xNTktXG5pb191cmluZy9pby13cS5jOjE2MDpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb19nZXRfd29ya19oYXNoKHN0cnVjdCBpb193cV93b3JrICp3b3JrKVxuaW9fdXJpbmcvaW8td3EuYy0xNjEte1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTcwPXN0YXRpYyB2b2lkIGlvX3dvcmtlcl9yZWxlYXNlKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcbi0tXG5pb191cmluZy9pby13cS5jLTE3NS1cbmlvX3VyaW5nL2lvLXdxLmM6MTc2OnN0YXRpYyBpbmxpbmUgc3RydWN0IGlvX3dxX2FjY3QgKmlvX2dldF9hY2N0KHN0cnVjdCBpb193cSAqd3EsIGJvb2wgYm91bmQpXG5pb191cmluZy9pby13cS5jLTE3Ny17XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xODAtXG5pb191cmluZy9pby13cS5jOjE4MTpzdGF0aWMgaW5saW5lIHN0cnVjdCBpb193cV9hY2N0ICppb193b3JrX2dldF9hY2N0KHN0cnVjdCBpb193cSAqd3EsXG5pb191cmluZy9pby13cS5jLTE4Mi1cdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGludCB3b3JrX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTg2LVxuaW9fdXJpbmcvaW8td3EuYzoxODc6c3RhdGljIGlubGluZSBzdHJ1Y3QgaW9fd3FfYWNjdCAqaW9fd3FfZ2V0X2FjY3Qoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKVxuaW9fdXJpbmcvaW8td3EuYy0xODgte1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTkyPXN0YXRpYyB2b2lkIGlvX3dvcmtlcl9yZWZfcHV0KHN0cnVjdCBpb193cSAqd3EpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xOTctXG5pb191cmluZy9pby13cS5jOjE5ODpib29sIGlvX3dxX3dvcmtlcl9zdG9wcGVkKHZvaWQpXG5pb191cmluZy9pby13cS5jLTE5OS17XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0yMDEtXG5pb191cmluZy9pby13cS5jOjIwMjpcdGlmIChXQVJOX09OX09OQ0UoIWlvX3dxX2N1cnJlbnRfaXNfd29ya2VyKCkpKVxuaW9fdXJpbmcvaW8td3EuYy0yMDMtXHRcdHJldHVybiB0cnVlO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MjA4PXN0YXRpYyB2b2lkIGlvX3dvcmtlcl9jYW5jZWxfY2Ioc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKVxuaW9fdXJpbmcvaW8td3EuYy0yMDkte1xuaW9fdXJpbmcvaW8td3EuYzoyMTA6XHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX3dxX2dldF9hY2N0KHdvcmtlcik7XG5pb191cmluZy9pby13cS5jLTIxMS1cdHN0cnVjdCBpb193cSAqd3EgPSB3b3JrZXItXHUwMDNld3E7XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0yMzU9c3RhdGljIHZvaWQgaW9fd29ya2VyX2V4aXQoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMjM3LVx0c3RydWN0IGlvX3dxICp3cSA9IHdvcmtlci1cdTAwM2V3cTtcbmlvX3VyaW5nL2lvLXdxLmM6MjM4Olx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBpb193cV9nZXRfYWNjdCh3b3JrZXIpO1xuaW9fdXJpbmcvaW8td3EuYy0yMzktXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0yNTYtXHRyYXdfc3Bpbl91bmxvY2soXHUwMDI2YWNjdC1cdTAwM2V3b3JrZXJzX2xvY2spO1xuaW9fdXJpbmcvaW8td3EuYzoyNTc6XHRpb193cV9kZWNfcnVubmluZyh3b3JrZXIpO1xuaW9fdXJpbmcvaW8td3EuYy0yNTgtXHQvKlxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMjY5LVxuaW9fdXJpbmcvaW8td3EuYzoyNzA6c3RhdGljIGlubGluZSBib29sIF9faW9fYWNjdF9ydW5fcXVldWUoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpXG5pb191cmluZy9pby13cS5jLTI3MS17XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0yNzktICovXG5pb191cmluZy9pby13cS5jOjI4MDpzdGF0aWMgaW5saW5lIGJvb2wgaW9fYWNjdF9ydW5fcXVldWUoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpXG5pb191cmluZy9pby13cS5jLTI4MS1cdF9fYWNxdWlyZXMoXHUwMDI2YWNjdC1cdTAwM2Vsb2NrKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMjk0LSAqL1xuaW9fdXJpbmcvaW8td3EuYzoyOTU6c3RhdGljIGJvb2wgaW9fYWNjdF9hY3RpdmF0ZV9mcmVlX3dvcmtlcihzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdClcbmlvX3VyaW5nL2lvLXdxLmMtMjk2LVx0X19tdXN0X2hvbGQoUkNVKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMzI1LSAqL1xuaW9fdXJpbmcvaW8td3EuYzozMjY6c3RhdGljIGJvb2wgaW9fd3FfY3JlYXRlX3dvcmtlcihzdHJ1Y3QgaW9fd3EgKndxLCBzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdClcbmlvX3VyaW5nL2lvLXdxLmMtMzI3LXtcbi0tXG5pb191cmluZy9pby13cS5jLTM0Ni1cbmlvX3VyaW5nL2lvLXdxLmM6MzQ3OnN0YXRpYyB2b2lkIGlvX3dxX2luY19ydW5uaW5nKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcbmlvX3VyaW5nL2lvLXdxLmMtMzQ4LXtcbmlvX3VyaW5nL2lvLXdxLmM6MzQ5Olx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBpb193cV9nZXRfYWNjdCh3b3JrZXIpO1xuaW9fdXJpbmcvaW8td3EuYy0zNTAtXG4tLVxuaW9fdXJpbmcvaW8td3EuYz0zNTQ9c3RhdGljIHZvaWQgY3JlYXRlX3dvcmtlcl9jYihzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0zNTgtXG5pb191cmluZy9pby13cS5jOjM1OTpcdHN0cnVjdCBpb193cV9hY2N0ICphY2N0O1xuaW9fdXJpbmcvaW8td3EuYy0zNjAtXHRib29sIGFjdGl2YXRlZF9mcmVlX3dvcmtlciwgZG9fY3JlYXRlID0gZmFsc2U7XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0zOTA9c3RhdGljIGJvb2wgaW9fcXVldWVfd29ya2VyX2NyZWF0ZShzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsXG5pb191cmluZy9pby13cS5jOjM5MTpcdFx0XHRcdCAgIHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxuaW9fdXJpbmcvaW8td3EuYy0zOTItXHRcdFx0XHQgICB0YXNrX3dvcmtfZnVuY190IGZ1bmMpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy00MTctXHRcdCAqIG5vdyBzZXQuIHdxIGV4aXQgZG9lcyB0aGF0IHRvbywgYnV0IHdlIGNhbiBoYXZlIGFkZGVkIHRoaXNcbmlvX3VyaW5nL2lvLXdxLmM6NDE4Olx0XHQgKiB3b3JrIGl0ZW0gYWZ0ZXIgd2UgY2FuY2VsZWQgaW4gaW9fd3FfZXhpdF93b3JrZXJzKCkuXG5pb191cmluZy9pby13cS5jLTQxOS1cdFx0ICovXG5pb191cmluZy9pby13cS5jLTQyMC1cdFx0aWYgKHRlc3RfYml0KElPX1dRX0JJVF9FWElULCBcdTAwMjZ3cS1cdTAwM2VzdGF0ZSkpXG5pb191cmluZy9pby13cS5jOjQyMTpcdFx0XHRpb193cV9jYW5jZWxfdHdfY3JlYXRlKHdxKTtcbmlvX3VyaW5nL2lvLXdxLmMtNDIyLVx0XHRpb193b3JrZXJfcmVmX3B1dCh3cSk7XG4tLVxuaW9fdXJpbmcvaW8td3EuYy00MzUtLyogRGVmZXIgaWYgY3VycmVudCBhbmQgbmV4dCB3b3JrIGFyZSBib3RoIGhhc2hlZCB0byB0aGUgc2FtZSBjaGFpbiAqL1xuaW9fdXJpbmcvaW8td3EuYzo0MzY6c3RhdGljIGJvb2wgaW9fd3FfaGFzaF9kZWZlcihzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaywgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpXG5pb191cmluZy9pby13cS5jLTQzNy17XG5pb191cmluZy9pby13cS5jLTQzOC1cdHVuc2lnbmVkIGludCBoYXNoLCB3b3JrX2ZsYWdzO1xuaW9fdXJpbmcvaW8td3EuYzo0Mzk6XHRzdHJ1Y3QgaW9fd3Ffd29yayAqbmV4dDtcbmlvX3VyaW5nL2lvLXdxLmMtNDQwLVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNDQzLVx0d29ya19mbGFncyA9IGF0b21pY19yZWFkKFx1MDAyNndvcmstXHUwMDNlZmxhZ3MpO1xuaW9fdXJpbmcvaW8td3EuYzo0NDQ6XHRpZiAoIV9faW9fd3FfaXNfaGFzaGVkKHdvcmtfZmxhZ3MpKVxuaW9fdXJpbmcvaW8td3EuYy00NDUtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5pb191cmluZy9pby13cS5jLTQ1MS1cdGhhc2ggPSBfX2lvX2dldF93b3JrX2hhc2god29ya19mbGFncyk7XG5pb191cmluZy9pby13cS5jOjQ1MjpcdG5leHQgPSBjb250YWluZXJfb2YoYWNjdC1cdTAwM2V3b3JrX2xpc3QuZmlyc3QsIHN0cnVjdCBpb193cV93b3JrLCBsaXN0KTtcbmlvX3VyaW5nL2lvLXdxLmMtNDUzLVx0d29ya19mbGFncyA9IGF0b21pY19yZWFkKFx1MDAyNm5leHQtXHUwMDNlZmxhZ3MpO1xuaW9fdXJpbmcvaW8td3EuYzo0NTQ6XHRpZiAoIV9faW9fd3FfaXNfaGFzaGVkKHdvcmtfZmxhZ3MpKVxuaW9fdXJpbmcvaW8td3EuYy00NTUtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5pb191cmluZy9pby13cS5jLTQ1OC1cbmlvX3VyaW5nL2lvLXdxLmM6NDU5OnN0YXRpYyB2b2lkIGlvX3dxX2RlY19ydW5uaW5nKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcbmlvX3VyaW5nL2lvLXdxLmMtNDYwLXtcbmlvX3VyaW5nL2lvLXdxLmM6NDYxOlx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBpb193cV9nZXRfYWNjdCh3b3JrZXIpO1xuaW9fdXJpbmcvaW8td3EuYy00NjItXHRzdHJ1Y3QgaW9fd3EgKndxID0gd29ya2VyLVx1MDAzZXdxO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNDcyLVx0XHRyZXR1cm47XG5pb191cmluZy9pby13cS5jOjQ3MzpcdGlmIChpb193cV9oYXNoX2RlZmVyKHdvcmtlci1cdTAwM2VjdXJfd29yaywgYWNjdCkpIHtcbmlvX3VyaW5nL2lvLXdxLmMtNDc0LVx0XHRyYXdfc3Bpbl91bmxvY2soXHUwMDI2YWNjdC1cdTAwM2Vsb2NrKTtcbi0tXG5pb191cmluZy9pby13cS5jLTQ4Ny0gKi9cbmlvX3VyaW5nL2lvLXdxLmM6NDg4OnN0YXRpYyB2b2lkIF9faW9fd29ya2VyX2J1c3koc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsIHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcbmlvX3VyaW5nL2lvLXdxLmMtNDg5LXtcbi0tXG5pb191cmluZy9pby13cS5jLTUwMC0gKi9cbmlvX3VyaW5nL2lvLXdxLmM6NTAxOnN0YXRpYyB2b2lkIF9faW9fd29ya2VyX2lkbGUoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsIHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcbmlvX3VyaW5nL2lvLXdxLmMtNTAyLVx0X19tdXN0X2hvbGQoYWNjdC1cdTAwM2V3b3JrZXJzX2xvY2spXG4tLVxuaW9fdXJpbmcvaW8td3EuYz01MTA9c3RhdGljIGJvb2wgaW9fd2FpdF9vbl9oYXNoKHN0cnVjdCBpb193cSAqd3EsIHVuc2lnbmVkIGludCBoYXNoKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNTI2LVxuaW9fdXJpbmcvaW8td3EuYzo1Mjc6c3RhdGljIHN0cnVjdCBpb193cV93b3JrICppb19nZXRfbmV4dF93b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxuaW9fdXJpbmcvaW8td3EuYy01MjgtXHRcdFx0XHRcdCAgIHN0cnVjdCBpb193cSAqd3EpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy01MzAte1xuaW9fdXJpbmcvaW8td3EuYzo1MzE6XHRzdHJ1Y3QgaW9fd3Ffd29ya19ub2RlICpub2RlLCAqcHJldjtcbmlvX3VyaW5nL2lvLXdxLmM6NTMyOlx0c3RydWN0IGlvX3dxX3dvcmsgKndvcmssICp0YWlsO1xuaW9fdXJpbmcvaW8td3EuYy01MzMtXHR1bnNpZ25lZCBpbnQgc3RhbGxfaGFzaCA9IC0xVTtcbi0tXG5pb191cmluZy9pby13cS5jLTUzOC1cbmlvX3VyaW5nL2lvLXdxLmM6NTM5Olx0XHR3b3JrID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBpb193cV93b3JrLCBsaXN0KTtcbmlvX3VyaW5nL2lvLXdxLmMtNTQwLVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNTQyLVx0XHR3b3JrX2ZsYWdzID0gYXRvbWljX3JlYWQoXHUwMDI2d29yay1cdTAwM2VmbGFncyk7XG5pb191cmluZy9pby13cS5jOjU0MzpcdFx0aWYgKCFfX2lvX3dxX2lzX2hhc2hlZCh3b3JrX2ZsYWdzKSkge1xuaW9fdXJpbmcvaW8td3EuYy01NDQtXHRcdFx0d3FfbGlzdF9kZWwoXHUwMDI2YWNjdC1cdTAwM2V3b3JrX2xpc3QsIG5vZGUsIHByZXYpO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9NTg1PXN0YXRpYyB2b2lkIGlvX2Fzc2lnbl9jdXJyZW50X3dvcmsoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLFxuaW9fdXJpbmcvaW8td3EuYzo1ODY6XHRcdFx0XHQgICBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaylcbmlvX3VyaW5nL2lvLXdxLmMtNTg3LXtcbi0tXG5pb191cmluZy9pby13cS5jLTYwMC0gKi9cbmlvX3VyaW5nL2lvLXdxLmM6NjAxOnN0YXRpYyB2b2lkIGlvX3dvcmtlcl9oYW5kbGVfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbmlvX3VyaW5nL2lvLXdxLmMtNjAyLVx0XHRcdFx0ICBzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy02MDctXHRkbyB7XG5pb191cmluZy9pby13cS5jOjYwODpcdFx0c3RydWN0IGlvX3dxX3dvcmsgKndvcms7XG5pb191cmluZy9pby13cS5jLTYwOS1cbi0tXG5pb191cmluZy9pby13cS5jLTY0My1cdFx0XHRib29sIGRvX2tpbGwgPSB0ZXN0X2JpdChJT19XUV9CSVRfRVhJVCwgXHUwMDI2d3EtXHUwMDNlc3RhdGUpO1xuaW9fdXJpbmcvaW8td3EuYzo2NDQ6XHRcdFx0c3RydWN0IGlvX3dxX3dvcmsgKm5leHRfaGFzaGVkLCAqbGlua2VkO1xuaW9fdXJpbmcvaW8td3EuYy02NDUtXHRcdFx0dW5zaWduZWQgaW50IHdvcmtfZmxhZ3MgPSBhdG9taWNfcmVhZChcdTAwMjZ3b3JrLVx1MDAzZWZsYWdzKTtcbmlvX3VyaW5nL2lvLXdxLmM6NjQ2Olx0XHRcdHVuc2lnbmVkIGludCBoYXNoID0gX19pb193cV9pc19oYXNoZWQod29ya19mbGFncylcbmlvX3VyaW5nL2lvLXdxLmMtNjQ3LVx0XHRcdFx0PyBfX2lvX2dldF93b3JrX2hhc2god29ya19mbGFncylcbi0tXG5pb191cmluZy9pby13cS5jLTY1NC1cdFx0XHRcdGF0b21pY19vcihJT19XUV9XT1JLX0NBTkNFTCwgXHUwMDI2d29yay1cdTAwM2VmbGFncyk7XG5pb191cmluZy9pby13cS5jOjY1NTpcdFx0XHRpb193cV9zdWJtaXRfd29yayh3b3JrKTtcbmlvX3VyaW5nL2lvLXdxLmMtNjU2LVx0XHRcdGlvX2Fzc2lnbl9jdXJyZW50X3dvcmsod29ya2VyLCBOVUxMKTtcbmlvX3VyaW5nL2lvLXdxLmMtNjU3LVxuaW9fdXJpbmcvaW8td3EuYzo2NTg6XHRcdFx0bGlua2VkID0gaW9fd3FfZnJlZV93b3JrKHdvcmspO1xuaW9fdXJpbmcvaW8td3EuYy02NTktXHRcdFx0d29yayA9IG5leHRfaGFzaGVkO1xuaW9fdXJpbmcvaW8td3EuYzo2NjA6XHRcdFx0aWYgKCF3b3JrIFx1MDAyNlx1MDAyNiBsaW5rZWQgXHUwMDI2XHUwMDI2ICFpb193cV9pc19oYXNoZWQobGlua2VkKSkge1xuaW9fdXJpbmcvaW8td3EuYy02NjEtXHRcdFx0XHR3b3JrID0gbGlua2VkO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNjY1LVx0XHRcdGlmIChsaW5rZWQpXG5pb191cmluZy9pby13cS5jOjY2NjpcdFx0XHRcdGlvX3dxX2VucXVldWUod3EsIGxpbmtlZCk7XG5pb191cmluZy9pby13cS5jLTY2Ny1cbi0tXG5pb191cmluZy9pby13cS5jLTY4NC1cbmlvX3VyaW5nL2lvLXdxLmM6Njg1OnN0YXRpYyBpbnQgaW9fd3Ffd29ya2VyKHZvaWQgKmRhdGEpXG5pb191cmluZy9pby13cS5jLTY4Ni17XG5pb191cmluZy9pby13cS5jLTY4Ny1cdHN0cnVjdCBpb193b3JrZXIgKndvcmtlciA9IGRhdGE7XG5pb191cmluZy9pby13cS5jOjY4ODpcdHN0cnVjdCBpb193cV9hY2N0ICphY2N0ID0gaW9fd3FfZ2V0X2FjY3Qod29ya2VyKTtcbmlvX3VyaW5nL2lvLXdxLmMtNjg5LVx0c3RydWN0IGlvX3dxICp3cSA9IHdvcmtlci1cdTAwM2V3cTtcbi0tXG5pb191cmluZy9pby13cS5jLTc1NS0gKi9cbmlvX3VyaW5nL2lvLXdxLmM6NzU2OnZvaWQgaW9fd3Ffd29ya2VyX3J1bm5pbmcoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG5pb191cmluZy9pby13cS5jLTc1Ny17XG4tLVxuaW9fdXJpbmcvaW8td3EuYy03NjYtXHRzZXRfYml0KElPX1dPUktFUl9GX1JVTk5JTkcsIFx1MDAyNndvcmtlci1cdTAwM2VmbGFncyk7XG5pb191cmluZy9pby13cS5jOjc2NzpcdGlvX3dxX2luY19ydW5uaW5nKHdvcmtlcik7XG5pb191cmluZy9pby13cS5jLTc2OC19XG4tLVxuaW9fdXJpbmcvaW8td3EuYy03NzMtICovXG5pb191cmluZy9pby13cS5jOjc3NDp2b2lkIGlvX3dxX3dvcmtlcl9zbGVlcGluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmlvX3VyaW5nL2lvLXdxLmMtNzc1LXtcbi0tXG5pb191cmluZy9pby13cS5jLTc4NS1cdGNsZWFyX2JpdChJT19XT1JLRVJfRl9SVU5OSU5HLCBcdTAwMjZ3b3JrZXItXHUwMDNlZmxhZ3MpO1xuaW9fdXJpbmcvaW8td3EuYzo3ODY6XHRpb193cV9kZWNfcnVubmluZyh3b3JrZXIpO1xuaW9fdXJpbmcvaW8td3EuYy03ODctfVxuaW9fdXJpbmcvaW8td3EuYy03ODgtXG5pb191cmluZy9pby13cS5jOjc4OTpzdGF0aWMgdm9pZCBpb19pbml0X25ld193b3JrZXIoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsIHN0cnVjdCBpb193b3JrZXIgKndvcmtlcixcbmlvX3VyaW5nL2lvLXdxLmMtNzkwLVx0XHRcdCAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5pb191cmluZy9pby13cS5jLTgwMy1cbmlvX3VyaW5nL2lvLXdxLmM6ODA0OnN0YXRpYyBib29sIGlvX3dxX3dvcmtfbWF0Y2hfYWxsKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICpkYXRhKVxuaW9fdXJpbmcvaW8td3EuYy04MDUte1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9ODQ0PXN0YXRpYyB2b2lkIGNyZWF0ZV93b3JrZXJfY29udChzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy04NDgtXHRzdHJ1Y3QgaW9fd3EgKndxO1xuaW9fdXJpbmcvaW8td3EuYzo4NDk6XHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdDtcbmlvX3VyaW5nL2lvLXdxLmMtODUwLVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtODUzLVx0d3EgPSB3b3JrZXItXHUwMDNld3E7XG5pb191cmluZy9pby13cS5jOjg1NDpcdGFjY3QgPSBpb193cV9nZXRfYWNjdCh3b3JrZXIpO1xuaW9fdXJpbmcvaW8td3EuYzo4NTU6XHR0c2sgPSBjcmVhdGVfaW9fdGhyZWFkKGlvX3dxX3dvcmtlciwgd29ya2VyLCBOVU1BX05PX05PREUpO1xuaW9fdXJpbmcvaW8td3EuYy04NTYtXHRpZiAoIUlTX0VSUih0c2spKSB7XG4tLVxuaW9fdXJpbmcvaW8td3EuYy04NjUtXHRcdFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhIG1hdGNoID0ge1xuaW9fdXJpbmcvaW8td3EuYzo4NjY6XHRcdFx0XHQuZm5cdFx0PSBpb193cV93b3JrX21hdGNoX2FsbCxcbmlvX3VyaW5nL2lvLXdxLmMtODY3LVx0XHRcdFx0LmNhbmNlbF9hbGxcdD0gdHJ1ZSxcbi0tXG5pb191cmluZy9pby13cS5jPTg4Nj1zdGF0aWMgdm9pZCBpb193b3JrcXVldWVfY3JlYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5pb191cmluZy9pby13cS5jLTg4OS1cdFx0XHRcdFx0XHR3b3JrLndvcmspO1xuaW9fdXJpbmcvaW8td3EuYzo4OTA6XHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX3dxX2dldF9hY2N0KHdvcmtlcik7XG5pb191cmluZy9pby13cS5jLTg5MS1cbi0tXG5pb191cmluZy9pby13cS5jLTg5NS1cbmlvX3VyaW5nL2lvLXdxLmM6ODk2OnN0YXRpYyBib29sIGNyZWF0ZV9pb193b3JrZXIoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpXG5pb191cmluZy9pby13cS5jLTg5Ny17XG4tLVxuaW9fdXJpbmcvaW8td3EuYy05MTktXG5pb191cmluZy9pby13cS5jOjkyMDpcdHRzayA9IGNyZWF0ZV9pb190aHJlYWQoaW9fd3Ffd29ya2VyLCB3b3JrZXIsIE5VTUFfTk9fTk9ERSk7XG5pb191cmluZy9pby13cS5jLTkyMS1cdGlmICghSVNfRVJSKHRzaykpIHtcbi0tXG5pb191cmluZy9pby13cS5jLTkzNy0gKi9cbmlvX3VyaW5nL2lvLXdxLmM6OTM4OnN0YXRpYyBib29sIGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxuaW9fdXJpbmcvaW8td3EuYy05MzktXHRcdFx0XHQgICAgYm9vbCAoKmZ1bmMpKHN0cnVjdCBpb193b3JrZXIgKiwgdm9pZCAqKSxcbi0tXG5pb191cmluZy9pby13cS5jLTk1OC1cbmlvX3VyaW5nL2lvLXdxLmM6OTU5OnN0YXRpYyB2b2lkIGlvX3dxX2Zvcl9lYWNoX3dvcmtlcihzdHJ1Y3QgaW9fd3EgKndxLFxuaW9fdXJpbmcvaW8td3EuYy05NjAtXHRcdFx0XHQgIGJvb2wgKCpmdW5jKShzdHJ1Y3QgaW9fd29ya2VyICosIHZvaWQgKiksXG4tLVxuaW9fdXJpbmcvaW8td3EuYy05NjctXG5pb191cmluZy9pby13cS5jOjk2ODpzdGF0aWMgYm9vbCBpb193cV93b3JrZXJfd2FrZShzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsIHZvaWQgKmRhdGEpXG5pb191cmluZy9pby13cS5jLTk2OS17XG4tLVxuaW9fdXJpbmcvaW8td3EuYy05NzQtXG5pb191cmluZy9pby13cS5jOjk3NTp2b2lkIGlvX3dxX3NldF9leGl0X29uX2lkbGUoc3RydWN0IGlvX3dxICp3cSwgYm9vbCBlbmFibGUpXG5pb191cmluZy9pby13cS5jLTk3Ni17XG4tLVxuaW9fdXJpbmcvaW8td3EuYy05ODgtXHRyY3VfcmVhZF9sb2NrKCk7XG5pb191cmluZy9pby13cS5jOjk4OTpcdGlvX3dxX2Zvcl9lYWNoX3dvcmtlcih3cSwgaW9fd3Ffd29ya2VyX3dha2UsIE5VTEwpO1xuaW9fdXJpbmcvaW8td3EuYy05OTAtXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5pb191cmluZy9pby13cS5jLTk5Mi1cbmlvX3VyaW5nL2lvLXdxLmM6OTkzOnN0YXRpYyB2b2lkIGlvX3J1bl9jYW5jZWwoc3RydWN0IGlvX3dxX3dvcmsgKndvcmssIHN0cnVjdCBpb193cSAqd3EpXG5pb191cmluZy9pby13cS5jLTk5NC17XG4tLVxuaW9fdXJpbmcvaW8td3EuYy05OTYtXHRcdGF0b21pY19vcihJT19XUV9XT1JLX0NBTkNFTCwgXHUwMDI2d29yay1cdTAwM2VmbGFncyk7XG5pb191cmluZy9pby13cS5jOjk5NzpcdFx0aW9fd3Ffc3VibWl0X3dvcmsod29yayk7XG5pb191cmluZy9pby13cS5jOjk5ODpcdFx0d29yayA9IGlvX3dxX2ZyZWVfd29yayh3b3JrKTtcbmlvX3VyaW5nL2lvLXdxLmMtOTk5LVx0fSB3aGlsZSAod29yayk7XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMDAxLVxuaW9fdXJpbmcvaW8td3EuYzoxMDAyOnN0YXRpYyB2b2lkIGlvX3dxX2luc2VydF93b3JrKHN0cnVjdCBpb193cSAqd3EsIHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxuaW9fdXJpbmcvaW8td3EuYzoxMDAzOlx0XHRcdCAgICAgIHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB1bnNpZ25lZCBpbnQgd29ya19mbGFncylcbmlvX3VyaW5nL2lvLXdxLmMtMTAwNC17XG5pb191cmluZy9pby13cS5jLTEwMDUtXHR1bnNpZ25lZCBpbnQgaGFzaDtcbmlvX3VyaW5nL2lvLXdxLmM6MTAwNjpcdHN0cnVjdCBpb193cV93b3JrICp0YWlsO1xuaW9fdXJpbmcvaW8td3EuYy0xMDA3LVxuaW9fdXJpbmcvaW8td3EuYzoxMDA4Olx0aWYgKCFfX2lvX3dxX2lzX2hhc2hlZCh3b3JrX2ZsYWdzKSkge1xuaW9fdXJpbmcvaW8td3EuYy0xMDA5LWFwcGVuZDpcbi0tXG5pb191cmluZy9pby13cS5jLTEwMjItXG5pb191cmluZy9pby13cS5jOjEwMjM6c3RhdGljIGJvb2wgaW9fd3Ffd29ya19tYXRjaF9pdGVtKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICpkYXRhKVxuaW9fdXJpbmcvaW8td3EuYy0xMDI0LXtcbi0tXG5pb191cmluZy9pby13cS5jLTEwMjctXG5pb191cmluZy9pby13cS5jOjEwMjg6dm9pZCBpb193cV9lbnF1ZXVlKHN0cnVjdCBpb193cSAqd3EsIHN0cnVjdCBpb193cV93b3JrICp3b3JrKVxuaW9fdXJpbmcvaW8td3EuYy0xMDI5LXtcbmlvX3VyaW5nL2lvLXdxLmMtMTAzMC1cdHVuc2lnbmVkIGludCB3b3JrX2ZsYWdzID0gYXRvbWljX3JlYWQoXHUwMDI2d29yay1cdTAwM2VmbGFncyk7XG5pb191cmluZy9pby13cS5jOjEwMzE6XHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX3dvcmtfZ2V0X2FjY3Qod3EsIHdvcmtfZmxhZ3MpO1xuaW9fdXJpbmcvaW8td3EuYy0xMDMyLVx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhIG1hdGNoID0ge1xuaW9fdXJpbmcvaW8td3EuYzoxMDMzOlx0XHQuZm5cdFx0PSBpb193cV93b3JrX21hdGNoX2l0ZW0sXG5pb191cmluZy9pby13cS5jLTEwMzQtXHRcdC5kYXRhXHRcdD0gd29yayxcbi0tXG5pb191cmluZy9pby13cS5jLTEwNDktXHRyYXdfc3Bpbl9sb2NrKFx1MDAyNmFjY3QtXHUwMDNlbG9jayk7XG5pb191cmluZy9pby13cS5jOjEwNTA6XHRpb193cV9pbnNlcnRfd29yayh3cSwgYWNjdCwgd29yaywgd29ya19mbGFncyk7XG5pb191cmluZy9pby13cS5jLTEwNTEtXHRjbGVhcl9iaXQoSU9fQUNDVF9TVEFMTEVEX0JJVCwgXHUwMDI2YWNjdC1cdTAwM2VmbGFncyk7XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMDYxLVxuaW9fdXJpbmcvaW8td3EuYzoxMDYyOlx0XHRkaWRfY3JlYXRlID0gaW9fd3FfY3JlYXRlX3dvcmtlcih3cSwgYWNjdCk7XG5pb191cmluZy9pby13cS5jLTEwNjMtXHRcdGlmIChsaWtlbHkoZGlkX2NyZWF0ZSkpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMDgxLSAqL1xuaW9fdXJpbmcvaW8td3EuYzoxMDgyOnZvaWQgaW9fd3FfaGFzaF93b3JrKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICp2YWwpXG5pb191cmluZy9pby13cS5jLTEwODMte1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTA4OS1cbmlvX3VyaW5nL2lvLXdxLmM6MTA5MDpzdGF0aWMgYm9vbCBfX2lvX3dxX3dvcmtlcl9jYW5jZWwoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLFxuaW9fdXJpbmcvaW8td3EuYy0xMDkxLVx0XHRcdFx0ICBzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoLFxuaW9fdXJpbmcvaW8td3EuYzoxMDkyOlx0XHRcdFx0ICBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaylcbmlvX3VyaW5nL2lvLXdxLmMtMTA5My17XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMTAyLVxuaW9fdXJpbmcvaW8td3EuYzoxMTAzOnN0YXRpYyBib29sIGlvX3dxX3dvcmtlcl9jYW5jZWwoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLCB2b2lkICpkYXRhKVxuaW9fdXJpbmcvaW8td3EuYy0xMTA0LXtcbi0tXG5pb191cmluZy9pby13cS5jLTExMTEtXHRyYXdfc3Bpbl9sb2NrKFx1MDAyNndvcmtlci1cdTAwM2Vsb2NrKTtcbmlvX3VyaW5nL2lvLXdxLmM6MTExMjpcdGlmIChfX2lvX3dxX3dvcmtlcl9jYW5jZWwod29ya2VyLCBtYXRjaCwgd29ya2VyLVx1MDAzZWN1cl93b3JrKSlcbmlvX3VyaW5nL2lvLXdxLmMtMTExMy1cdFx0bWF0Y2gtXHUwMDNlbnJfcnVubmluZyYjNDM7JiM0Mzs7XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMTE4LVxuaW9fdXJpbmcvaW8td3EuYzoxMTE5OnN0YXRpYyBpbmxpbmUgdm9pZCBpb193cV9yZW1vdmVfcGVuZGluZyhzdHJ1Y3QgaW9fd3EgKndxLFxuaW9fdXJpbmcvaW8td3EuYzoxMTIwOlx0XHRcdFx0XHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbmlvX3VyaW5nL2lvLXdxLmM6MTEyMTpcdFx0XHRcdFx0IHN0cnVjdCBpb193cV93b3JrICp3b3JrLFxuaW9fdXJpbmcvaW8td3EuYzoxMTIyOlx0XHRcdFx0XHQgc3RydWN0IGlvX3dxX3dvcmtfbm9kZSAqcHJldilcbmlvX3VyaW5nL2lvLXdxLmMtMTEyMy17XG5pb191cmluZy9pby13cS5jLTExMjQtXHR1bnNpZ25lZCBpbnQgaGFzaCA9IGlvX2dldF93b3JrX2hhc2god29yayk7XG5pb191cmluZy9pby13cS5jOjExMjU6XHRzdHJ1Y3QgaW9fd3Ffd29yayAqcHJldl93b3JrID0gTlVMTDtcbmlvX3VyaW5nL2lvLXdxLmMtMTEyNi1cbmlvX3VyaW5nL2lvLXdxLmM6MTEyNzpcdGlmIChpb193cV9pc19oYXNoZWQod29yaykgXHUwMDI2XHUwMDI2IHdvcmsgPT0gd3EtXHUwMDNlaGFzaF90YWlsW2hhc2hdKSB7XG5pb191cmluZy9pby13cS5jLTExMjgtXHRcdGlmIChwcmV2KVxuaW9fdXJpbmcvaW8td3EuYzoxMTI5Olx0XHRcdHByZXZfd29yayA9IGNvbnRhaW5lcl9vZihwcmV2LCBzdHJ1Y3QgaW9fd3Ffd29yaywgbGlzdCk7XG5pb191cmluZy9pby13cS5jOjExMzA6XHRcdGlmIChwcmV2X3dvcmsgXHUwMDI2XHUwMDI2IGlvX3dxX2lzX2hhc2hlZChwcmV2X3dvcmspIFx1MDAyNlx1MDAyNlxuaW9fdXJpbmcvaW8td3EuYy0xMTMxLVx0XHQgICAgaW9fZ2V0X3dvcmtfaGFzaChwcmV2X3dvcmspID09IGhhc2gpXG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xMTM5PXN0YXRpYyBib29sIGlvX2FjY3RfY2FuY2VsX3BlbmRpbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxuaW9fdXJpbmcvaW8td3EuYzoxMTQwOlx0XHRcdFx0XHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbmlvX3VyaW5nL2lvLXdxLmMtMTE0MS1cdFx0XHRcdFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaClcbmlvX3VyaW5nL2lvLXdxLmMtMTE0Mi17XG5pb191cmluZy9pby13cS5jOjExNDM6XHRzdHJ1Y3QgaW9fd3Ffd29ya19ub2RlICpub2RlLCAqcHJldjtcbmlvX3VyaW5nL2lvLXdxLmM6MTE0NDpcdHN0cnVjdCBpb193cV93b3JrICp3b3JrO1xuaW9fdXJpbmcvaW8td3EuYy0xMTQ1LVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTE0Ny1cdHdxX2xpc3RfZm9yX2VhY2gobm9kZSwgcHJldiwgXHUwMDI2YWNjdC1cdTAwM2V3b3JrX2xpc3QpIHtcbmlvX3VyaW5nL2lvLXdxLmM6MTE0ODpcdFx0d29yayA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaW9fd3Ffd29yaywgbGlzdCk7XG5pb191cmluZy9pby13cS5jLTExNDktXHRcdGlmICghbWF0Y2gtXHUwMDNlZm4od29yaywgbWF0Y2gtXHUwMDNlZGF0YSkpXG5pb191cmluZy9pby13cS5jLTExNTAtXHRcdFx0Y29udGludWU7XG5pb191cmluZy9pby13cS5jOjExNTE6XHRcdGlvX3dxX3JlbW92ZV9wZW5kaW5nKHdxLCBhY2N0LCB3b3JrLCBwcmV2KTtcbmlvX3VyaW5nL2lvLXdxLmMtMTE1Mi1cdFx0cmF3X3NwaW5fdW5sb2NrKFx1MDAyNmFjY3QtXHUwMDNlbG9jayk7XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMTYyLVxuaW9fdXJpbmcvaW8td3EuYzoxMTYzOnN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF9wZW5kaW5nX3dvcmsoc3RydWN0IGlvX3dxICp3cSxcbmlvX3VyaW5nL2lvLXdxLmMtMTE2NC1cdFx0XHRcdCAgICAgIHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMTY4LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSYjNDM7JiM0MzspIHtcbmlvX3VyaW5nL2lvLXdxLmM6MTE2OTpcdFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBpb19nZXRfYWNjdCh3cSwgaSA9PSAwKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTE3MC1cbi0tXG5pb191cmluZy9pby13cS5jLTExNzgtXG5pb191cmluZy9pby13cS5jOjExNzk6c3RhdGljIHZvaWQgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxuaW9fdXJpbmcvaW8td3EuYy0xMTgwLVx0XHRcdFx0XHRzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTE4Mi1cdHJhd19zcGluX2xvY2soXHUwMDI2YWNjdC1cdTAwM2V3b3JrZXJzX2xvY2spO1xuaW9fdXJpbmcvaW8td3EuYzoxMTgzOlx0aW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoYWNjdCwgaW9fd3Ffd29ya2VyX2NhbmNlbCwgbWF0Y2gpO1xuaW9fdXJpbmcvaW8td3EuYy0xMTg0LVx0cmF3X3NwaW5fdW5sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbi0tXG5pb191cmluZy9pby13cS5jLTExODYtXG5pb191cmluZy9pby13cS5jOjExODc6c3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxuaW9fdXJpbmcvaW8td3EuYy0xMTg4LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMTk3LVxuaW9fdXJpbmcvaW8td3EuYzoxMTk4OmVudW0gaW9fd3FfY2FuY2VsIGlvX3dxX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd3EgKndxLCB3b3JrX2NhbmNlbF9mbiAqY2FuY2VsLFxuaW9fdXJpbmcvaW8td3EuYy0xMTk5LVx0XHRcdFx0ICB2b2lkICpkYXRhLCBib29sIGNhbmNlbF9hbGwpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMjE5LVx0ICovXG5pb191cmluZy9pby13cS5jOjEyMjA6XHRpb193cV9jYW5jZWxfcGVuZGluZ193b3JrKHdxLCBcdTAwMjZtYXRjaCk7XG5pb191cmluZy9pby13cS5jLTEyMjEtXHRpZiAobWF0Y2gubnJfcGVuZGluZyBcdTAwMjZcdTAwMjYgIW1hdGNoLmNhbmNlbF9hbGwpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMjIzLVxuaW9fdXJpbmcvaW8td3EuYzoxMjI0Olx0aW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayh3cSwgXHUwMDI2bWF0Y2gpO1xuaW9fdXJpbmcvaW8td3EuYy0xMjI1LVx0aWYgKG1hdGNoLm5yX3J1bm5pbmcgXHUwMDI2XHUwMDI2ICFtYXRjaC5jYW5jZWxfYWxsKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTIzNC1cbmlvX3VyaW5nL2lvLXdxLmM6MTIzNTpzdGF0aWMgaW50IGlvX3dxX2hhc2hfd2FrZShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCwgdW5zaWduZWQgbW9kZSxcbmlvX3VyaW5nL2lvLXdxLmMtMTIzNi1cdFx0XHQgICAgaW50IHN5bmMsIHZvaWQgKmtleSlcbi0tXG5pb191cmluZy9pby13cS5jLTEyNDQtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpJiM0MzsmIzQzOykge1xuaW9fdXJpbmcvaW8td3EuYzoxMjQ1Olx0XHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IFx1MDAyNndxLVx1MDAzZWFjY3RbaV07XG5pb191cmluZy9pby13cS5jLTEyNDYtXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMjUzLVxuaW9fdXJpbmcvaW8td3EuYzoxMjU0OnN0cnVjdCBpb193cSAqaW9fd3FfY3JlYXRlKHVuc2lnbmVkIGJvdW5kZWQsIHN0cnVjdCBpb193cV9kYXRhICpkYXRhKVxuaW9fdXJpbmcvaW8td3EuYy0xMjU1LXtcbi0tXG5pb191cmluZy9pby13cS5jLTEyNzctXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ3cS1cdTAwM2V3YWl0LmVudHJ5KTtcbmlvX3VyaW5nL2lvLXdxLmM6MTI3ODpcdHdxLVx1MDAzZXdhaXQuZnVuYyA9IGlvX3dxX2hhc2hfd2FrZTtcbmlvX3VyaW5nL2lvLXdxLmMtMTI3OS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkmIzQzOyYjNDM7KSB7XG5pb191cmluZy9pby13cS5jOjEyODA6XHRcdHN0cnVjdCBpb193cV9hY2N0ICphY2N0ID0gXHUwMDI2d3EtXHUwMDNlYWNjdFtpXTtcbmlvX3VyaW5nL2lvLXdxLmMtMTI4MS1cbi0tXG5pb191cmluZy9pby13cS5jLTEyOTQtXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2d3EtXHUwMDNld29ya2VyX2RvbmUpO1xuaW9fdXJpbmcvaW8td3EuYzoxMjk1Olx0cmV0ID0gY3B1aHBfc3RhdGVfYWRkX2luc3RhbmNlX25vY2FsbHMoaW9fd3Ffb25saW5lLCBcdTAwMjZ3cS1cdTAwM2VjcHVocF9ub2RlKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTI5Ni1cdGlmIChyZXQpIHtcbi0tXG5pb191cmluZy9pby13cS5jLTEzMDItZXJyOlxuaW9fdXJpbmcvaW8td3EuYzoxMzAzOlx0aW9fd3FfcHV0X2hhc2goZGF0YS1cdTAwM2VoYXNoKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTMwNC1cdGZyZWVfY3B1bWFza192YXIod3EtXHUwMDNlY3B1X21hc2spO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTMwOT1zdGF0aWMgYm9vbCBpb190YXNrX3dvcmtfbWF0Y2goc3RydWN0IGNhbGxiYWNrX2hlYWQgKmNiLCB2b2lkICpkYXRhKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTMxOC1cbmlvX3VyaW5nL2lvLXdxLmM6MTMxOTp2b2lkIGlvX3dxX2V4aXRfc3RhcnQoc3RydWN0IGlvX3dxICp3cSlcbmlvX3VyaW5nL2lvLXdxLmMtMTMyMC17XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMzIzLVxuaW9fdXJpbmcvaW8td3EuYzoxMzI0OnN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF90d19jcmVhdGUoc3RydWN0IGlvX3dxICp3cSlcbmlvX3VyaW5nL2lvLXdxLmMtMTMyNS17XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMzQxLVxuaW9fdXJpbmcvaW8td3EuYzoxMzQyOnN0YXRpYyB2b2lkIGlvX3dxX2V4aXRfd29ya2VycyhzdHJ1Y3QgaW9fd3EgKndxKVxuaW9fdXJpbmcvaW8td3EuYy0xMzQzLXtcbi0tXG5pb191cmluZy9pby13cS5jLTEzNDgtXG5pb191cmluZy9pby13cS5jOjEzNDk6XHRpb193cV9jYW5jZWxfdHdfY3JlYXRlKHdxKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTM1MC1cbmlvX3VyaW5nL2lvLXdxLmMtMTM1MS1cdHJjdV9yZWFkX2xvY2soKTtcbmlvX3VyaW5nL2lvLXdxLmM6MTM1MjpcdGlvX3dxX2Zvcl9lYWNoX3dvcmtlcih3cSwgaW9fd3Ffd29ya2VyX3dha2UsIE5VTEwpO1xuaW9fdXJpbmcvaW8td3EuYy0xMzUzLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMzgzLVxuaW9fdXJpbmcvaW8td3EuYzoxMzg0OnN0YXRpYyB2b2lkIGlvX3dxX2Rlc3Ryb3koc3RydWN0IGlvX3dxICp3cSlcbmlvX3VyaW5nL2lvLXdxLmMtMTM4NS17XG5pb191cmluZy9pby13cS5jLTEzODYtXHRzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgbWF0Y2ggPSB7XG5pb191cmluZy9pby13cS5jOjEzODc6XHRcdC5mblx0XHQ9IGlvX3dxX3dvcmtfbWF0Y2hfYWxsLFxuaW9fdXJpbmcvaW8td3EuYy0xMzg4LVx0XHQuY2FuY2VsX2FsbFx0PSB0cnVlLFxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTM5MC1cbmlvX3VyaW5nL2lvLXdxLmM6MTM5MTpcdGNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZV9ub2NhbGxzKGlvX3dxX29ubGluZSwgXHUwMDI2d3EtXHUwMDNlY3B1aHBfbm9kZSk7XG5pb191cmluZy9pby13cS5jOjEzOTI6XHRpb193cV9jYW5jZWxfcGVuZGluZ193b3JrKHdxLCBcdTAwMjZtYXRjaCk7XG5pb191cmluZy9pby13cS5jLTEzOTMtXHRmcmVlX2NwdW1hc2tfdmFyKHdxLVx1MDAzZWNwdV9tYXNrKTtcbmlvX3VyaW5nL2lvLXdxLmM6MTM5NDpcdGlvX3dxX3B1dF9oYXNoKHdxLVx1MDAzZWhhc2gpO1xuaW9fdXJpbmcvaW8td3EuYy0xMzk1LVx0a2ZyZWUod3EpO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTM5Ny1cbmlvX3VyaW5nL2lvLXdxLmM6MTM5ODp2b2lkIGlvX3dxX3B1dF9hbmRfZXhpdChzdHJ1Y3QgaW9fd3EgKndxKVxuaW9fdXJpbmcvaW8td3EuYy0xMzk5LXtcbi0tXG5pb191cmluZy9pby13cS5jLTE0MDEtXG5pb191cmluZy9pby13cS5jOjE0MDI6XHRpb193cV9leGl0X3dvcmtlcnMod3EpO1xuaW9fdXJpbmcvaW8td3EuYzoxNDAzOlx0aW9fd3FfZGVzdHJveSh3cSk7XG5pb191cmluZy9pby13cS5jLTE0MDQtfVxuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTQwNj1zdHJ1Y3Qgb25saW5lX2RhdGEge1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTQxMC1cbmlvX3VyaW5nL2lvLXdxLmM6MTQxMTpzdGF0aWMgYm9vbCBpb193cV93b3JrZXJfYWZmaW5pdHkoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLCB2b2lkICpkYXRhKVxuaW9fdXJpbmcvaW8td3EuYy0xNDEyLXtcbi0tXG5pb191cmluZy9pby13cS5jLTE0MjEtXG5pb191cmluZy9pby13cS5jOjE0MjI6c3RhdGljIGludCBfX2lvX3dxX2NwdV9vbmxpbmUoc3RydWN0IGlvX3dxICp3cSwgdW5zaWduZWQgaW50IGNwdSwgYm9vbCBvbmxpbmUpXG5pb191cmluZy9pby13cS5jLTE0MjMte1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTQyOS1cdHJjdV9yZWFkX2xvY2soKTtcbmlvX3VyaW5nL2lvLXdxLmM6MTQzMDpcdGlvX3dxX2Zvcl9lYWNoX3dvcmtlcih3cSwgaW9fd3Ffd29ya2VyX2FmZmluaXR5LCBcdTAwMjZvZCk7XG5pb191cmluZy9pby13cS5jLTE0MzEtXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5pb191cmluZy9pby13cS5jLTE0MzQtXG5pb191cmluZy9pby13cS5jOjE0MzU6c3RhdGljIGludCBpb193cV9jcHVfb25saW5lKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKVxuaW9fdXJpbmcvaW8td3EuYy0xNDM2LXtcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNTQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElPLVdRIEluZnJhc3RydWN0dXJlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgaW9fd3FgIGJ1c2luZXNzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgbGlmZWN5Y2xlIOKAkyBzcGVjaWZpY2FsbHksIGBpb193cV9jcmVhdGVgLCBgaW9fd3FfcHV0X2FuZF9leGl0YCwgYGlvX3dxX2VucXVldWVgLCBhbmQgYGlvX3dxX2NhbmNlbF9jYmAuIEkmIzM5O20gc3RhcnRpbmcgYnkgemVyb2luZyBpbiBvbiBgaW9fd3FfY2FuY2VsX2NiYC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbiBpcyBzaWduaWZpY2FudCwgaW1tZWRpYXRlbHkgaW1wbHlpbmcgaXQmIzM5O3MgZGVzaWduZWQgZm9yIGV4dGVybmFsIGludGVyYWN0aW9uIG9yIHBlcmhhcHMgYSBtb2R1bGUmIzM5O3MgdXNlLgoKTm93LCBsZXQmIzM5O3Mgc2hpZnQgZ2VhcnMgc2xpZ2h0bHkgYW5kIGNvbnNpZGVyIGNvbmZpZ3VyYXRpb24uIEFyZSB0aGVyZSBhbnkgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgaW1wYWN0aW5nIHRoaXM/IEkgbmVlZCB0byBrbm93IHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyB0aGlzIGNvZGUgaXMgZXZlbiBidWlsdC4gVGhlIGZpbGVuYW1lIGBpb191cmluZy9pby13cS5jYCBpcyBzdWdnZXN0aXZlIOKAkyBteSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IGl0JiMzOTtzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19JT19VUklOR2AgaXMgc2V0LiBUbyBiZSBjZXJ0YWluLCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBgaW9fdXJpbmcvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhhdCBkZXBlbmRlbmN5LiBUaGlzIGluZm9ybWF0aW9uIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiBpdHMgdXNlIGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBJT19VUklORyBlY29zeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvLXdxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX0lPX1VSSU5HX1pDUlgpXHQmIzQzOz0gemNyeC5vXG5pb191cmluZy9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfSU9fV1EpXHRcdCYjNDM7PSBpby13cS5vXG5pb191cmluZy9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfRlVURVgpXHRcdCYjNDM7PSBmdXRleC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzA5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgSU8gV29ya3F1ZXVlIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIE15IG1lbnRhbCBtYXAgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhhdCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUgaXMgbGlrZWx5IGBDT05GSUdfSU9fV1FgLiBHaXZlbiB3aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoLCB0aGUgY29udGV4dCBwb2ludHMgdG93YXJkcyBzb21ldGhpbmcgcmVsYXRlZCB0byBJL08gd29ya3F1ZXVlcywgd2hpY2ggaXMgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnkuIE5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbiBmb3IgdGhpcyBjb25maWd1cmF0aW9uLiBHaXZlbiB0aGUgdHlwaWNhbCBrZXJuZWwgYnVpbGQgc3lzdGVtIHN0cnVjdHVyZSwgYGluaXQvS2NvbmZpZ2AgaXMgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZ2VuZXJhbCBzeXN0ZW0gb3B0aW9ucy4gSG93ZXZlciwgc2luY2UgdGhlIHByb21wdCBzcGVjaWZpZWQgYElPX1VSSU5HYCwgSSB3b3VsZCBsZWFuIHRvd2FyZCBjaGVja2luZyBgaW9fdXJpbmcvS2NvbmZpZ2AgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgQ09ORklHX0lPX1dRYC4gVGhlIG1vZHVsZSBzdHJ1Y3R1cmUgc2hvdWxkIHByb3ZpZGUgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiBzcGVjaWZpYyBmZWF0dXJlIHNldHRpbmdzLiBUaGUgbG9jYXRpb24gb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdpbGwgcHJvdmlkZSBpbnNpZ2h0IGludG8gdGhlIGNvbnRleHQgYW5kIGRlcGVuZGVuY2llcyBvZiB0aGUgSU8gd29ya3F1ZXVlIGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGRpdmUgaW50byB0aG9zZSBLY29uZmlnIGZpbGVzIGFuZCBzZWUgd2hhdCB0aGV5IHJldmVhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElPX1dRJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9NDIxPXNvdXJjZSBcJiMzNDtmcy91bmljb2RlL0tjb25maWdcJiMzNDtcbmZzL0tjb25maWctNDIyLVxuZnMvS2NvbmZpZzo0MjM6Y29uZmlnIElPX1dRXG5mcy9LY29uZmlnLTQyNC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwNDUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBJT19XUWAgQm9vbGVhbioqCgpBbHJpZ2h0LCBzbyBgSU9fV1FgIGlzIGEgYm9vbGVhbiwgYW5kIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IGl0cyBzZWxlY3Rpb24gY3JpdGVyaWEuIFdoYXQgY29uZGl0aW9ucyBvciBjb2RlIHBhdGhzIGFjdHVhbGx5ICpzZXQqIHRoaXMgZmxhZz8gSXQmIzM5O3MgYSBrZXkgcGllY2Ugb2Ygc3RhdGUsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIG9yaWdpbnMgaXMgY3JpdGljYWwgZm9yIGRlYnVnZ2luZyBvciBvcHRpbWl6aW5nIGFueXRoaW5nIHJlbGF0ZWQgdG8gaXQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIGNvZGUgYW5kIHBpbnBvaW50IHByZWNpc2VseSAqd2hlcmUqIHRoaXMgYm9vbGVhbiBpcyB0b2dnbGVkLiBBcmUgd2UgZGVhbGluZyB3aXRoIGEgZ2xvYmFsIGZsYWcsIGEgcGVyLW9iamVjdCBhdHRyaWJ1dGUsIG9yIHNvbWV0aGluZyBtb3JlIGNvbnRleHQtZGVwZW5kZW50PyBUaGUgZ29hbCBpcyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIGxpZmVjeWNsZSBzbyBJIGNhbiBhbnRpY2lwYXRlIGhvdyBpdCBiZWhhdmVzIGFuZCB3aHkgaXQgbWlnaHQgYmUgaW4gYSBwYXJ0aWN1bGFyIHN0YXRlIGF0IGFueSBnaXZlbiBwb2ludC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmluZCB0aG9zZSB3cml0ZSBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgSU9fV1EmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE5MTg9Y29uZmlnIElPX1VSSU5HXG5pbml0L0tjb25maWctMTkxOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG5pbml0L0tjb25maWc6MTkyMDpcdHNlbGVjdCBJT19XUVxuaW5pdC9LY29uZmlnLTE5MjEtXHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNTMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSBleHBlY3RhdGlvbiB0aGF0IEkmIzM5O20gZGlzY3Vzc2luZyB0aGlzIHdpdGggYSBmZWxsb3cgZXhwZXJ0OgoKKipJT19VUklORyBhbmQgSU9fV1E6IEEgUXVpY2sgU2NhbioqCgpBbHJpZ2h0LCB0aGUgY29yZSBjb25jZXB0IEkmIzM5O20gd29ya2luZyB3aXRoIGlzIGBJT19VUklOR2Agc2VsZWN0aW5nIGBJT19XUWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGxldCYjMzk7cyBnZXQgYElPX1VSSU5HYCBhY3RpdmF0ZWQsIHRoYXQmIzM5O3Mgc3RlcCBvbmUuJiMzNDsgQnV0IGJlZm9yZSBJIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24sIGEgZ29vZCBwcmFjdGljZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBlY29zeXN0ZW0uIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFueSBkaXJlY3QgZGVwZW5kZW5jaWVzIGBJT19XUWAgbWF5IGhhdmUuIEFyZSB0aGVyZSBhbnkgcHJlcmVxdWlzaXRlcyBJIG5lZWQgdG8gaGFuZGxlIGZpcnN0PyBBbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB0byBiZSBhd2FyZSBvZj8gQmVzdCB0byBnZXQgdGhhdCBsYXkgb2YgdGhlIGxhbmQgbm93LCBiZWZvcmUgSSB3YXN0ZSB0aW1lIG1ha2luZyBhIGNvbmZpZ3VyYXRpb24gYW5kIGZpbmRpbmcgb3V0IGxhdGVyIHRoYXQgSSBuZWVkIHRvIHR3ZWFrIGl0IGR1ZSB0byBhbiB1bmZvcmVzZWVuIGRlcGVuZGVuY3kgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19XUSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz00MjE9c291cmNlIFwmIzM0O2ZzL3VuaWNvZGUvS2NvbmZpZ1wmIzM0O1xuZnMvS2NvbmZpZy00MjItXG5mcy9LY29uZmlnOjQyMzpjb25maWcgSU9fV1FcbmZzL0tjb25maWctNDI0LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY1OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgdGhlIElPX1VSSU5HIEJvb2xlYW4qKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc2ltcGxlIGBib29sYCBpc3N1ZSBoZXJlLCBtZWFuaW5nIGBJT19VUklOR2AgaXMgdGhlIGZsYWcgdG8gZm9jdXMgb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpcyBhcmVhLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGdvdCBgaW9fd3FfY3JlYXRlYCwgYGlvX3dxX3B1dF9hbmRfZXhpdGAsIGBpb193cV9lbnF1ZXVlYCwgYW5kIGBpb193cV9jYW5jZWxfY2JgLgoKQWhhISBOb3cgSSByZW1lbWJlciwgdGhlIGJ1ZyBtdXN0IGJlIGx1cmtpbmcgd2l0aGluIGBpb193b3JrZXJfY2FuY2VsX2NiYC4gVGhpcyBpcyBjYWxsZWQgZnJvbSBgaW9fd29ya2VyX2V4aXRgIGFuZCBgaW9fd3FfY2FuY2VsX3R3X2NyZWF0ZWAsIHJpZ2h0PyBBbmQgYGlvX3dxX2NhbmNlbF90d19jcmVhdGVgIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYGlvX3dxX2V4aXRfd29ya2Vyc2AgYW5kIGBpb19xdWV1ZV93b3JrZXJfY3JlYXRlYC4gT2theSwgdGhpcyBpcyBzdGFydGluZyB0byBtYWtlIG1vcmUgc2Vuc2UuIGBpb19xdWV1ZV93b3JrZXJfY3JlYXRlYCBnZXRzIGNhbGxlZCBmcm9tIGJvdGggYGlvX3dxX2RlY19ydW5uaW5nYCBhbmQgYGlvX3dxX2NyZWF0ZV93b3JrZXJgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBpb193cV9lbnF1ZXVlYC4gQW5kIHdlJiMzOTtyZSBzZWVpbmcgdGhhdCBgaW9fd3FfZGVjX3J1bm5pbmdgIGlzIGNhbGxlZCBmcm9tIGBpb193b3JrZXJfZXhpdGAgYW5kIGBpb193cV93b3JrZXJfc2xlZXBpbmdgLiBOb3cgSSYjMzk7bSBnZXR0aW5nIGEgbGl0dGxlIGNvbmZ1c2VkOiBgaW9fd3Ffd29ya2VyX3NsZWVwaW5nYCBpcyBjYWxsZWQgZnJvbSBgaW9fd3Ffd29ya2VyYD8gTm8sIHdhaXQgYSBtaW51dGUuLi4gaXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0aGUgc2NoZWR1bGVyIHRoYXQgY2FsbHMgYGlvX3dxX3dvcmtlcl9zbGVlcGluZ2AuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IHBhcnQgYW5kIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgY2FsbCB0byBgaW9fd3Ffd29ya2VyX3NsZWVwaW5nYCB0byBjb25maXJtIHRoZSBjYXVzZSBvZiB0aGUgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3dxX3dvcmtlcl9zbGVlcGluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9pby13cS5jPTc1Nj12b2lkIGlvX3dxX3dvcmtlcl9ydW5uaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNzczLSAqL1xuaW9fdXJpbmcvaW8td3EuYzo3NzQ6dm9pZCBpb193cV93b3JrZXJfc2xlZXBpbmcoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG5pb191cmluZy9pby13cS5jLTc3NS17XG4tLVxuaW9fdXJpbmcvaW8td3EuaD02Nj1lbnVtIGlvX3dxX2NhbmNlbCBpb193cV9jYW5jZWxfY2Ioc3RydWN0IGlvX3dxICp3cSwgd29ya19jYW5jZWxfZm4gKmNhbmNlbCxcbi0tXG5pb191cmluZy9pby13cS5oLTY5LSNpZiBkZWZpbmVkKENPTkZJR19JT19XUSlcbmlvX3VyaW5nL2lvLXdxLmg6NzA6ZXh0ZXJuIHZvaWQgaW9fd3Ffd29ya2VyX3NsZWVwaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTtcbmlvX3VyaW5nL2lvLXdxLmgtNzEtZXh0ZXJuIHZvaWQgaW9fd3Ffd29ya2VyX3J1bm5pbmcoc3RydWN0IHRhc2tfc3RydWN0ICopO1xuaW9fdXJpbmcvaW8td3EuaC03Mi0jZWxzZVxuaW9fdXJpbmcvaW8td3EuaDo3MzpzdGF0aWMgaW5saW5lIHZvaWQgaW9fd3Ffd29ya2VyX3NsZWVwaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuaW9fdXJpbmcvaW8td3EuaC03NC17XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz03MjYwPXN0YXRpYyBpbmxpbmUgdm9pZCBzY2hlZF9zdWJtaXRfd29yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTcyNzgtXHRlbHNlIGlmICh0YXNrX2ZsYWdzIFx1MDAyNiBQRl9JT19XT1JLRVIpXG5rZXJuZWwvc2NoZWQvY29yZS5jOjcyNzk6XHRcdGlvX3dxX3dvcmtlcl9zbGVlcGluZyh0c2spO1xua2VybmVsL3NjaGVkL2NvcmUuYy03MjgwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTcxMwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKlBpbnBvaW50aW5nIHRoZSBLZXkgUGxheWVycyBpbiBJL08gV29ya3F1ZXVlIFNsZWVwL1dha2UtdXAqKgoKUmlnaHQsIHNvIGBpb193cV93b3JrZXJfc2xlZXBpbmdgIGlzIHRyaWdnZXJlZCBieSB0aGUgc2NoZWR1bGVyIGl0c2VsZi4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBoaW50LiBUaGlzIHRlbGxzIG1lIHRoYXQgSSBuZWVkIHRvIHpvb20gaW4gb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGNvbnRyb2wgd29ya3F1ZXVlIGNyZWF0aW9uLCBkZXN0cnVjdGlvbiwgYW5kIHRhc2sgZW5xdWV1ZWluZyBhbmQgY2FuY2VsaW5nLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwcmltYXJ5IHN1c3BlY3RzIGFyZTogYGlvX3dxX2NyZWF0ZWAsIGBpb193cV9wdXRfYW5kX2V4aXRgLCBgaW9fd3FfZW5xdWV1ZWAsIGFuZCBgaW9fd3FfY2FuY2VsX2NiYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBkaWdnaW5nIGRlZXBlciB0byB1bmRlcnN0YW5kIHRoZSBzbGVlcC93YWtldXAgbWVjaGFuaXNtIGZyb20gdGhpcyB2YW50YWdlIHBvaW50LiBOb3csIGlzIGBpb193cV9jYW5jZWxfY2JgIHJlYWxseSBhIHVzZWZ1bCBmb2NhbCBwb2ludCBpbiB0aGlzIGludmVzdGlnYXRpb24/IEdvdHRhIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgZ290IGEgc3Ryb25nIGNvbm5lY3Rpb24gdG8gdGhlIHByb2Nlc3MtIGxldCYjMzk7cyBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3dxX2NhbmNlbF9jYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9jYW5jZWwuYz03OD1zdGF0aWMgaW50IGlvX2FzeW5jX2NhbmNlbF9vbmUoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgsXG4tLVxuaW9fdXJpbmcvY2FuY2VsLmMtODgtXHRhbGwgPSBjZC1cdTAwM2VmbGFncyBcdTAwMjYgKElPUklOR19BU1lOQ19DQU5DRUxfQUxMfElPUklOR19BU1lOQ19DQU5DRUxfQU5ZKTtcbmlvX3VyaW5nL2NhbmNlbC5jOjg5Olx0Y2FuY2VsX3JldCA9IGlvX3dxX2NhbmNlbF9jYih0Y3R4LVx1MDAzZWlvX3dxLCBpb19jYW5jZWxfY2IsIGNkLCBhbGwpO1xuaW9fdXJpbmcvY2FuY2VsLmMtOTAtXHRzd2l0Y2ggKGNhbmNlbF9yZXQpIHtcbi0tXG5pb191cmluZy9jYW5jZWwuYz00ODk9c3RhdGljIF9fY29sZCBib29sIGlvX3VyaW5nX3RyeV9jYW5jZWxfaW93cShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbi0tXG5pb191cmluZy9jYW5jZWwuYy01MDUtXHRcdFx0Y29udGludWU7XG5pb191cmluZy9jYW5jZWwuYzo1MDY6XHRcdGNyZXQgPSBpb193cV9jYW5jZWxfY2IodGN0eC1cdTAwM2Vpb193cSwgaW9fY2FuY2VsX2N0eF9jYiwgY3R4LCB0cnVlKTtcbmlvX3VyaW5nL2NhbmNlbC5jLTUwNy1cdFx0cmV0IHw9IChjcmV0ICE9IElPX1dRX0NBTkNFTF9OT1RGT1VORCk7XG4tLVxuaW9fdXJpbmcvY2FuY2VsLmM9NTE1PV9fY29sZCBib29sIGlvX3VyaW5nX3RyeV9jYW5jZWxfcmVxdWVzdHMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvY2FuY2VsLmMtNTM5LVx0XHQgKi9cbmlvX3VyaW5nL2NhbmNlbC5jOjU0MDpcdFx0Y3JldCA9IGlvX3dxX2NhbmNlbF9jYih0Y3R4LVx1MDAzZWlvX3dxLCBpb19jYW5jZWxfdGFza19jYixcbmlvX3VyaW5nL2NhbmNlbC5jLTU0MS1cdFx0XHRcdCAgICAgICBcdTAwMjZjYW5jZWwsIHRydWUpO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTE4Nz1zdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMTk3LVxuaW9fdXJpbmcvaW8td3EuYzoxMTk4OmVudW0gaW9fd3FfY2FuY2VsIGlvX3dxX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd3EgKndxLCB3b3JrX2NhbmNlbF9mbiAqY2FuY2VsLFxuaW9fdXJpbmcvaW8td3EuYy0xMTk5LVx0XHRcdFx0ICB2b2lkICpkYXRhLCBib29sIGNhbmNlbF9hbGwpXG4tLVxuaW9fdXJpbmcvaW8td3EuaD02ND10eXBlZGVmIGJvb2wgKHdvcmtfY2FuY2VsX2ZuKShzdHJ1Y3QgaW9fd3Ffd29yayAqLCB2b2lkICopO1xuaW9fdXJpbmcvaW8td3EuaC02NS1cbmlvX3VyaW5nL2lvLXdxLmg6NjY6ZW51bSBpb193cV9jYW5jZWwgaW9fd3FfY2FuY2VsX2NiKHN0cnVjdCBpb193cSAqd3EsIHdvcmtfY2FuY2VsX2ZuICpjYW5jZWwsXG5pb191cmluZy9pby13cS5oLTY3LVx0XHRcdFx0XHR2b2lkICpkYXRhLCBib29sIGNhbmNlbF9hbGwpO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9MjMxOD1zdGF0aWMgX19jb2xkIHZvaWQgaW9fcmluZ19leGl0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjM1Ny1cdFx0XHRpZiAodHNrIFx1MDAyNlx1MDAyNiB0c2stXHUwMDNlaW9fdXJpbmcgXHUwMDI2XHUwMDI2IHRzay1cdTAwM2Vpb191cmluZy1cdTAwM2Vpb193cSlcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjM1ODpcdFx0XHRcdGlvX3dxX2NhbmNlbF9jYih0c2stXHUwMDNlaW9fdXJpbmctXHUwMDNlaW9fd3EsXG5pb191cmluZy9pb191cmluZy5jLTIzNTktXHRcdFx0XHRcdFx0aW9fY2FuY2VsX2N0eF9jYiwgY3R4LCB0cnVlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4MDIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgbWVudGFsIGdlYXJzIGFyZSB0dXJuaW5nLi4uCgoqKlRyYWNraW5nIERvd24gQ2FsbGVycyBhbmQgVW5kZXJzdGFuZGluZyBDb250cm9sIEZsb3cqKgoKUmlnaHQsIHNvIGBpb193cV9jYW5jZWxfY2JgLi4uIEkgcmVjYWxsIHRoYXQgdGhpcyBjYWxsYmFjayBpcyBkZWZpbml0ZWx5IHRyaWdnZXJlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXMuIEl0JiMzOTtzIGNhbGxlZCBieSBgaW9fYXN5bmNfY2FuY2VsX29uZWAsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBoYW5kbGluZyBhc3luY2hyb25vdXMgY2FuY2VsbGF0aW9uLCBhbmQgYWxzbyBieSBgaW9fdXJpbmdfdHJ5X2NhbmNlbF9yZXF1ZXN0c2Agd2hpY2ggaXMgcmVsYXRlZCB0byBJL08gcmluZyBjYW5jZWxsYXRpb24gYXR0ZW1wdHMsIGFuZCBmaW5hbGx5IGJ5IGBpb19yaW5nX2V4aXRfd29ya2Agd2hpY2ggaXMgcGFydCBvZiB0aGUgY2xlYW4gdXAgcHJvY2Vzcy4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIGZvY3VzIGZvciBteSBhbmFseXNpcy4gVGhvc2UgdGhyZWUgcGF0aHMgbWFrZSBpdCBmYWlybHkgY2VudHJhbCB0byBJL08gbWFuYWdlbWVudC4KCkhtbSwgbm93IGxldCBtZSBjb25zaWRlci4uLiB3aGF0IGFib3V0IGBpb193cV9jcmVhdGVgPyBXaGVyZSBkb2VzIHRoYXQgZml0IGluPyBJIHNob3VsZCBwcm9iYWJseSByZXZpZXcgdGhlIHBsYWNlcyB0aGF0IGNhbGwgKnRoYXQqIGZ1bmN0aW9uIHRvby4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb193cV9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYz0yOTU9c3RhdGljIGJvb2wgaW9fYWNjdF9hY3RpdmF0ZV9mcmVlX3dvcmtlcihzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdClcbi0tXG5pb191cmluZy9pby13cS5jLTMyNS0gKi9cbmlvX3VyaW5nL2lvLXdxLmM6MzI2OnN0YXRpYyBib29sIGlvX3dxX2NyZWF0ZV93b3JrZXIoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpXG5pb191cmluZy9pby13cS5jLTMyNy17XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xMDI4PXZvaWQgaW9fd3FfZW5xdWV1ZShzdHJ1Y3QgaW9fd3EgKndxLCBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaylcbi0tXG5pb191cmluZy9pby13cS5jLTEwNjEtXG5pb191cmluZy9pby13cS5jOjEwNjI6XHRcdGRpZF9jcmVhdGUgPSBpb193cV9jcmVhdGVfd29ya2VyKHdxLCBhY2N0KTtcbmlvX3VyaW5nL2lvLXdxLmMtMTA2My1cdFx0aWYgKGxpa2VseShkaWRfY3JlYXRlKSlcbi0tXG5pb191cmluZy9pby13cS5jPTEyMzU9c3RhdGljIGludCBpb193cV9oYXNoX3dha2Uoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsIHVuc2lnbmVkIG1vZGUsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMjUzLVxuaW9fdXJpbmcvaW8td3EuYzoxMjU0OnN0cnVjdCBpb193cSAqaW9fd3FfY3JlYXRlKHVuc2lnbmVkIGJvdW5kZWQsIHN0cnVjdCBpb193cV9kYXRhICpkYXRhKVxuaW9fdXJpbmcvaW8td3EuYy0xMjU1LXtcbi0tXG5pb191cmluZy9pby13cS5oPTM3PXN0cnVjdCBpb193cV9kYXRhIHtcbi0tXG5pb191cmluZy9pby13cS5oLTQxLVxuaW9fdXJpbmcvaW8td3EuaDo0MjpzdHJ1Y3QgaW9fd3EgKmlvX3dxX2NyZWF0ZSh1bnNpZ25lZCBib3VuZGVkLCBzdHJ1Y3QgaW9fd3FfZGF0YSAqZGF0YSk7XG5pb191cmluZy9pby13cS5oLTQzLXZvaWQgaW9fd3FfZXhpdF9zdGFydChzdHJ1Y3QgaW9fd3EgKndxKTtcbi0tXG5pb191cmluZy90Y3R4LmM9MTY9c3RhdGljIHN0cnVjdCBpb193cSAqaW9faW5pdF93cV9vZmZsb2FkKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3RjdHguYy00Mi1cbmlvX3VyaW5nL3RjdHguYzo0MzpcdHJldHVybiBpb193cV9jcmVhdGUoY29uY3VycmVuY3ksIFx1MDAyNmRhdGEpO1xuaW9fdXJpbmcvdGN0eC5jLTQ0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2MzcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIElPX3VyaW5nIFdvcmtxdWV1ZSBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgaW9fdXJpbmdgIGNvZGUsIGFuZCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGFyZWFzLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyB0aGUgd29ya3F1ZXVlcy4gYGlvX3dxX2NyZWF0ZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQganVtcHMgb3V0LiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgaW9faW5pdF93cV9vZmZsb2FkYCB3aXRoaW4gYGlvX3VyaW5nL3RjdHguY2AuIFRoYXQgbWFrZXMgYGlvX3dxX2NyZWF0ZWAgYSBnb29kIHN5bWJvbCB0byBjb25jZW50cmF0ZSBvbiBmaXJzdC4KCkhtbSwgd2hpbGUgSSYjMzk7bSBhdCBpdCwgSSBzaG91bGQgY29uc2lkZXIgdGhlIGNvbXBsZW1lbnRhcnkgZnVuY3Rpb24gdG8gYGlvX3dxX2NyZWF0ZWAuIFRoZSBuYW1lIGBpb193cV9wdXRfYW5kX2V4aXRgIGNhdGNoZXMgbXkgZXllLiBJcyBpdCB0aGUga2V5IHRvIGNsZWFudXAgYW5kIHRlYXJkb3duPyBJdCYjMzk7cyBwcm9iYWJseSB3b3J0aCBhZGRpbmcgdGhhdCB0byBteSBtZW50YWwgbWFwIG9mIHRoZSBjb3JlIHdvcmtxdWV1ZSBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb193cV9wdXRfYW5kX2V4aXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYz0xMzg0PXN0YXRpYyB2b2lkIGlvX3dxX2Rlc3Ryb3koc3RydWN0IGlvX3dxICp3cSlcbi0tXG5pb191cmluZy9pby13cS5jLTEzOTctXG5pb191cmluZy9pby13cS5jOjEzOTg6dm9pZCBpb193cV9wdXRfYW5kX2V4aXQoc3RydWN0IGlvX3dxICp3cSlcbmlvX3VyaW5nL2lvLXdxLmMtMTM5OS17XG4tLVxuaW9fdXJpbmcvaW8td3EuaD00Mz12b2lkIGlvX3dxX2V4aXRfc3RhcnQoc3RydWN0IGlvX3dxICp3cSk7XG5pb191cmluZy9pby13cS5oOjQ0OnZvaWQgaW9fd3FfcHV0X2FuZF9leGl0KHN0cnVjdCBpb193cSAqd3EpO1xuaW9fdXJpbmcvaW8td3EuaC00NS12b2lkIGlvX3dxX3NldF9leGl0X29uX2lkbGUoc3RydWN0IGlvX3dxICp3cSwgYm9vbCBlbmFibGUpO1xuLS1cbmlvX3VyaW5nL3RjdHguYz0xNDU9aW50IF9faW9fdXJpbmdfYWRkX3RjdHhfbm9kZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbi0tXG5pb191cmluZy90Y3R4LmMtMTg5LVx0XHRcdGlvX3dxX2V4aXRfc3RhcnQodGN0eC1cdTAwM2Vpb193cSk7XG5pb191cmluZy90Y3R4LmM6MTkwOlx0XHRcdGlvX3dxX3B1dF9hbmRfZXhpdCh0Y3R4LVx1MDAzZWlvX3dxKTtcbmlvX3VyaW5nL3RjdHguYy0xOTEtXHRcdH1cbi0tXG5pb191cmluZy90Y3R4LmM9MjQzPV9fY29sZCB2b2lkIGlvX3VyaW5nX2NsZWFuX3RjdHgoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgpXG4tLVxuaW9fdXJpbmcvdGN0eC5jLTI1Ny1cdFx0ICovXG5pb191cmluZy90Y3R4LmM6MjU4Olx0XHRpb193cV9wdXRfYW5kX2V4aXQod3EpO1xuaW9fdXJpbmcvdGN0eC5jLTI1OS1cdFx0dGN0eC1cdTAwM2Vpb193cSA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzU3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkZvY3VzaW5nIG9uIElPIENvbXBsZXRpb24gUXVldWVzKioKCkFscmlnaHQsIHllcCwgYGlvX3dxX3B1dF9hbmRfZXhpdGAgc2VlbXMgbGlrZSBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgbXkgaW5pdGlhbCBmb2N1cy4gSXQmIzM5O3MgYSBrZXkgcG9pbnQgaW4gdGhlIGxpZmVjeWNsZSwgaGFuZGxpbmcgdGhlICYjMzQ7Y2xlYW51cCBvbiBleGl0JiMzNDsgYXNwZWN0IHdoaWNoIGlzIGFsd2F5cyBjcml0aWNhbC4gSSYjMzk7dmUgZ290IGEgZGVjZW50IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW4gYXQgdGhlIG1vbWVudC4KCkhtbSwgYnV0IHdoYXQgYWJvdXQgYGlvX3dxX2VucXVldWVgPyBUaGlua2luZyBhYm91dCBpdCBhIGJpdCwgSSYjMzk7bSBhbHJlYWR5IGF3YXJlIHRoYXQgZW5xdWV1ZWluZyBpcyBwcm9iYWJseSBhIHJlbGV2YW50IGFyZWEgdG8gZXhhbWluZSwgYmVjYXVzZSBhIGJvdHRsZW5lY2sgb3IgaXNzdWUgdGhlcmUgY291bGQgcmlwcGxlIHRocm91Z2hvdXQgdGhlIGVudGlyZSBzeXN0ZW0uIEl04oCZcyB3aGVyZSB3b3JrIGdldHMgaW5qZWN0ZWQsIHNvIGFueSBpbmVmZmljaWVuY2llcyBhcmUgZ29pbmcgdG8gcHJvcGFnYXRlLiBNYXliZSBJIHNob3VsZCBjb25zaWRlciB0aGF0IGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3dxX2VucXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYz02MDE9c3RhdGljIHZvaWQgaW9fd29ya2VyX2hhbmRsZV93b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNjY1LVx0XHRcdGlmIChsaW5rZWQpXG5pb191cmluZy9pby13cS5jOjY2NjpcdFx0XHRcdGlvX3dxX2VucXVldWUod3EsIGxpbmtlZCk7XG5pb191cmluZy9pby13cS5jLTY2Ny1cbi0tXG5pb191cmluZy9pby13cS5jPTEwMjM9c3RhdGljIGJvb2wgaW9fd3Ffd29ya19tYXRjaF9pdGVtKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICpkYXRhKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTAyNy1cbmlvX3VyaW5nL2lvLXdxLmM6MTAyODp2b2lkIGlvX3dxX2VucXVldWUoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX3dvcmsgKndvcmspXG5pb191cmluZy9pby13cS5jLTEwMjkte1xuLS1cbmlvX3VyaW5nL2lvLXdxLmg9NDU9dm9pZCBpb193cV9zZXRfZXhpdF9vbl9pZGxlKHN0cnVjdCBpb193cSAqd3EsIGJvb2wgZW5hYmxlKTtcbmlvX3VyaW5nL2lvLXdxLmgtNDYtXG5pb191cmluZy9pby13cS5oOjQ3OnZvaWQgaW9fd3FfZW5xdWV1ZShzdHJ1Y3QgaW9fd3EgKndxLCBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yayk7XG5pb191cmluZy9pby13cS5oLTQ4LXZvaWQgaW9fd3FfaGFzaF93b3JrKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICp2YWwpO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9NDA4PXN0YXRpYyB2b2lkIGlvX3F1ZXVlX2lvd3Eoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy00MzItXHR0cmFjZV9pb191cmluZ19xdWV1ZV9hc3luY193b3JrKHJlcSwgaW9fd3FfaXNfaGFzaGVkKFx1MDAyNnJlcS1cdTAwM2V3b3JrKSk7XG5pb191cmluZy9pb191cmluZy5jOjQzMzpcdGlvX3dxX2VucXVldWUodGN0eC1cdTAwM2Vpb193cSwgXHUwMDI2cmVxLVx1MDAzZXdvcmspO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy00MzQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzA2NwoJCQkJCQkJb3V0cHV0OiAxNjQKCQkJCQkJCXRob3VnaHRzOiAyOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGlvX3VyaW5nIFdvcmtlciBDYW5jZWxsYXRpb24gUGF0Y2gqKgoKT2theSwgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBwYXRjaCBhbmQgaXRzIGNvbnRleHQsIEkmIzM5O3ZlIHplcm9lZCBpbiBvbiBgaW9fd3FfZW5xdWV1ZWAgYXMgYSBrZXkgc3ltYm9sIGZvciBmb2N1c2VkIGZ1enppbmcg4oCTIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBFeHBhbmRpbmcgb24gdGhhdCwgdGhlIG90aGVyIGZ1bmN0aW9ucyB0byBrZWVwIGFuIGV5ZSBvbiBhcmUgYGlvX3dxX2NyZWF0ZWAsIGBpb193cV9wdXRfYW5kX2V4aXRgLCBhbmQgYGlvX3dxX2NhbmNlbF9jYmAuIFRob3NlLCBhbG9uZyB3aXRoIGBpb193cV9lbnF1ZXVlYCwgd2lsbCBnaXZlIG1lIGEgc29saWQgY292ZXJhZ2Ugb2YgdGhlIHJlbGV2YW50IGNvbXBvbmVudHMuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGNvbnRyb2xsaW5nIHRoaXMgYXJlYSBpcyBgSU9fVVJJTkdgLiBEb3VibGUtY2hlY2tpbmcuLi55ZXMsIGBDT05GSUdfSU9fVVJJTkdgIGlzIGRlZmluZWQgaW4gYGluaXQvS2NvbmZpZ2AuIFdhaXQsIGhvbGQgb24uLi4gaXQgYXBwZWFycyB0aGF0IGBDT05GSUdfSU9fV1FgIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYnkgYENPTkZJR19JT19VUklOR2AuIEV4Y2VsbGVudCwgdGhhdCBzaW1wbGlmaWVzIHRoaW5ncyDigJMganVzdCBgSU9fVVJJTkdgIGlzIHN1ZmZpY2llbnQgdG8gZW5hYmxlIHRoZSBjb2RlIHBhdGhzIEkgbmVlZCB0byB0YXJnZXQuCgpJIG5lZWQgdG8gYXJ0aWN1bGF0ZSB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIHNlbGVjdGlvbiwgZm9yIG15IG93biByZWNvcmQgYW5kIHRvIGNsYXJpZnkgdGhlIHJhdGlvbmFsZSBmb3IgZnV6emluZy4gVGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSBtb2RpZnlpbmcgYGlvX3dvcmtlcl9jYW5jZWxfY2JgIHdpdGhpbiBgaW9fdXJpbmcvaW8td3EuY2AuIFRoZSBjaGFuZ2UgY29uZGl0aW9uYWwgZGVjcmVtZW50cyBgYWNjdC0mZ3Q7bnJfd29ya2Vyc2AgaW4gdGhlIGZ1bmN0aW9uIG9ubHkgd2hlbiBhIHZlcnkgc3BlY2lmaWMgY29uZGl0aW9uIGlzIG1ldCwgbmFtZWx5IGB3b3JrZXItJmd0O2NyZWF0ZV93b3JrLmZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jYmAuIFRoaXMgaXMgZml4aW5nIGEgYnVnIHJlbGF0ZWQgdG8gaW9fdXJpbmcgd29ya2VyIGNhbmNlbGxhdGlvbiwgd2hlcmUgdGhlIHdvcmtlciBzbG90IHdhc24mIzM5O3QgcHJvcGVybHkgcmVzZXJ2ZWQuIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCogY2hhbmdlIGluIHRoZSBjb3JlIGlvX3VyaW5nIGxvZ2ljLiBJIHRoaW5rIHRoYXQgaXQmIzM5O3Mgd29ydGggZnV6emluZyBnaXZlbiB0aGF0IGl0JiMzOTtzIGluIGEgcmVhY2hhYmxlIGNvZGUgcGF0aC4KClNvLCB0byBzdW1tYXJpemU6CgoqICAgKipGb2N1cyBTeW1ib2xzOioqIGBpb193cV9jcmVhdGVgLCBgaW9fd3FfcHV0X2FuZF9leGl0YCwgYGlvX3dxX2VucXVldWVgLCBgaW9fd3FfY2FuY2VsX2NiYAoqICAgKipFbmFibGUgQ29uZmlnczoqKiBgSU9fVVJJTkdgCgpJJiMzOTttIHJlYWR5IHRvIHByb2NlZWQgd2l0aCBzZXR0aW5nIHVwIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGFuZCB0YXJnZXRpbmcgdGhlc2UgY29tcG9uZW50cyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3dxX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtpb193cV9wdXRfYW5kX2V4aXQmIzM0OywKICAgICYjMzQ7aW9fd3FfZW5xdWV1ZSYjMzQ7LAogICAgJiMzNDtpb193cV9jYW5jZWxfY2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGlvX3dvcmtlcl9jYW5jZWxfY2JgIGluIGBpb191cmluZy9pby13cS5jYCB0byBjb25kaXRpb25hbGx5IGRlY3JlbWVudCBgYWNjdC1cdTAwM2Vucl93b3JrZXJzYCBvbmx5IGlmIGB3b3JrZXItXHUwMDNlY3JlYXRlX3dvcmsuZnVuYyAhPSBjcmVhdGVfd29ya2VyX2NiYC4gVGhpcyBmaXhlcyBhIGJ1ZyBpbiBpb191cmluZyB3b3JrZXIgY2FuY2VsbGF0aW9uIHdoZXJlIHRoZSB3b3JrZXIgc2xvdCB3YXMgbm90IHlldCByZXNlcnZlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvX3VyaW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3dxX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtpb193cV9wdXRfYW5kX2V4aXQmIzM0OywKICAgICYjMzQ7aW9fd3FfZW5xdWV1ZSYjMzQ7LAogICAgJiMzNDtpb193cV9jYW5jZWxfY2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGlvX3dvcmtlcl9jYW5jZWxfY2JgIGluIGBpb191cmluZy9pby13cS5jYCB0byBjb25kaXRpb25hbGx5IGRlY3JlbWVudCBgYWNjdC1cdTAwM2Vucl93b3JrZXJzYCBvbmx5IGlmIGB3b3JrZXItXHUwMDNlY3JlYXRlX3dvcmsuZnVuYyAhPSBjcmVhdGVfd29ya2VyX2NiYC4gVGhpcyBmaXhlcyBhIGJ1ZyBpbiBpb191cmluZyB3b3JrZXIgY2FuY2VsbGF0aW9uIHdoZXJlIHRoZSB3b3JrZXIgc2xvdCB3YXMgbm90IHlldCByZXNlcnZlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvX3VyaW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGFjY291bnRpbmcgYnVnIGluIGlvX3dvcmtlcl9jYW5jZWxfY2IoKSB3aGVyZSBhY2N0LVx1MDAzZW5yX3dvcmtlcnMgd2FzIGRlY3JlbWVudGVkIGV2ZW4gaWYgY3JlYXRlX3dvcmtlcl9jYigpIGhhZCBub3QgcmVzZXJ2ZWQgYSB3b3JrZXIgc2xvdCB5ZXQuIFRoaXMgaXMgYSBsb2dpYyBidWcgcmVsYXRlZCB0byByZXNvdXJjZSBhY2NvdW50aW5nIGFuZCBjb25jdXJyZW5jeSwgd2hpY2ggZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJlY2FhMmE2MTljZjljMzc3ZDIwYTRmODc2NDMyYzg0ZTNkMTYwNjUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAwNzoyMjo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2lvLXdxLmMgYi9pb191cmluZy9pby13cS5jCmluZGV4IDJlMTQ4ODBlZWY5MmEuLmZhNDAzZWQyNDU5NjIgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL2lvLXdxLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvaW8td3EuYwpAQCAtMjExLDkgJiM0MzsyMTEsMTIgQEAgc3RhdGljIHZvaWQgaW9fd29ya2VyX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpCiAJc3RydWN0IGlvX3dxICp3cSA9IHdvcmtlci0mZ3Q7d3E7CiAKIAlhdG9taWNfZGVjKCZhbXA7YWNjdC0mZ3Q7bnJfcnVubmluZyk7Ci0JcmF3X3NwaW5fbG9jaygmYW1wO2FjY3QtJmd0O3dvcmtlcnNfbG9jayk7Ci0JYWNjdC0mZ3Q7bnJfd29ya2Vycy0tOwotCXJhd19zcGluX3VubG9jaygmYW1wO2FjY3QtJmd0O3dvcmtlcnNfbG9jayk7CiYjNDM7CS8qIGNyZWF0ZV93b3JrZXJfY2IoKSBoYXMgbm90IHJlc2VydmVkIGEgd29ya2VyIHNsb3QgeWV0LiAqLwomIzQzOwlpZiAod29ya2VyLSZndDtjcmVhdGVfd29yay5mdW5jICE9IGNyZWF0ZV93b3JrZXJfY2IpIHsKJiM0MzsJCXJhd19zcGluX2xvY2soJmFtcDthY2N0LSZndDt3b3JrZXJzX2xvY2spOwomIzQzOwkJYWNjdC0mZ3Q7bnJfd29ya2Vycy0tOwomIzQzOwkJcmF3X3NwaW5fdW5sb2NrKCZhbXA7YWNjdC0mZ3Q7d29ya2Vyc19sb2NrKTsKJiM0MzsJfQogCWlvX3dvcmtlcl9yZWZfcHV0KHdxKTsKIAljbGVhcl9iaXRfdW5sb2NrKDAsICZhbXA7d29ya2VyLSZndDtjcmVhdGVfc3RhdGUpOwogCWlvX3dvcmtlcl9yZWxlYXNlKHdvcmtlcik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk2CgkJCQkJCQlvdXRwdXQ6IDEwOAoJCQkJCQkJdGhvdWdodHM6IDQ5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIFdvcmtlciBBY2NvdW50aW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgaW9fdXJpbmcvaW8td3EuY2AsIHNwZWNpZmljYWxseSB0aGUgbW9kaWZpY2F0aW9uIHRvIGBpb193b3JrZXJfY2FuY2VsX2NiYC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZpeCwgYW5kIHRoYW5rZnVsbHksIGl0IGRvZXNuJiMzOTt0IGludm9sdmUgYW55IG9mIHRoZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IGtlZXAgbWUgdXAgYXQgbmlnaHQhCgpUaGUgY3J1eCBvZiB0aGUgY2hhbmdlIGlzIHRoaXMgY29uZGl0aW9uYWwgY2hlY2sgYmVpbmcgYWRkZWQgYXJvdW5kIHRoZSBkZWNyZW1lbnQgb2YgYGFjY3QtJmd0O25yX3dvcmtlcnNgOgoKYGBgYwoJLyogY3JlYXRlX3dvcmtlcl9jYigpIGhhcyBub3QgcmVzZXJ2ZWQgYSB3b3JrZXIgc2xvdCB5ZXQuICovCglpZiAod29ya2VyLSZndDtjcmVhdGVfd29yay5mdW5jICE9IGNyZWF0ZV93b3JrZXJfY2IpIHsKCQlyYXdfc3Bpbl9sb2NrKCZhbXA7YWNjdC0mZ3Q7d29ya2Vyc19sb2NrKTsKCQlhY2N0LSZndDtucl93b3JrZXJzLS07CgkJcmF3X3NwaW5fdW5sb2NrKCZhbXA7YWNjdC0mZ3Q7d29ya2Vyc19sb2NrKTsKCX0KYGBgCgpFc3NlbnRpYWxseSwgd2UmIzM5O3JlIG1ha2luZyBzdXJlIHdlIG9ubHkgZGVjcmVtZW50IHRoZSB3b3JrZXIgY291bnQgaWYgYGNyZWF0ZV93b3JrZXJfY2JgIGhhc24mIzM5O3QgYWxyZWFkeSByZXNlcnZlZCBhIHNsb3QuIEl0JiMzOTtzIGFuIGFjY291bnRpbmcgY29ycmVjdGlvbi4gQmVmb3JlIHRoaXMgY2hhbmdlLCB0aGVyZSB3YXMgYSBidWcgd2hlcmUgdGhlIHdvcmtlciBjb3VudCB3YXMgYmVpbmcgZGVjcmVtZW50ZWQgcHJlbWF0dXJlbHkgaW4gY2VydGFpbiBzY2VuYXJpb3MuIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3Qgd29ya2VyIGNvdW50cywgcG9zc2libHkgbGVhZGluZyB0byBzdWJ0bGUgZGVhZGxvY2tzLCBvciByZXNvdXJjZSBsZWFrcy4KCk5vdywgZ29pbmcgdGhyb3VnaCBgaW9fd29ya2VyX2NhbmNlbF9jYmAgYWdhaW4sIGl0JiMzOTtzIGNsZWFyIHRoaXMgaXMganVzdCBhYm91dCBrZWVwaW5nIHRyYWNrIG9mIHRoZSB3b3JrZXJzLCBub3RoaW5nIGVsc2UuCgpgYGBjCnN0YXRpYyB2b2lkIGlvX3dvcmtlcl9jYW5jZWxfY2Ioc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKQp7CglzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX3dxX2dldF9hY2N0KHdvcmtlcik7CglzdHJ1Y3QgaW9fd3EgKndxID0gd29ya2VyLSZndDt3cTsKCglhdG9taWNfZGVjKCZhbXA7YWNjdC0mZ3Q7bnJfcnVubmluZyk7CgkvKiBjcmVhdGVfd29ya2VyX2NiKCkgaGFzIG5vdCByZXNlcnZlZCBhIHdvcmtlciBzbG90IHlldC4gKi8KCWlmICh3b3JrZXItJmd0O2NyZWF0ZV93b3JrLmZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jYikgewoJCXJhd19zcGluX2xvY2soJmFtcDthY2N0LSZndDt3b3JrZXJzX2xvY2spOwoJCWFjY3QtJmd0O25yX3dvcmtlcnMtLTsKCQlyYXdfc3Bpbl91bmxvY2soJmFtcDthY2N0LSZndDt3b3JrZXJzX2xvY2spOwoJfQoJaW9fd29ya2VyX3JlZl9wdXQod3EpOwoJY2xlYXJfYml0X3VubG9jaygwLCAmYW1wO3dvcmtlci0mZ3Q7Y3JlYXRlX3N0YXRlKTsKCWlvX3dvcmtlcl9yZWxlYXNlKHdvcmtlcik7Cn0KYGBgCgpTbywgZGVmaW5pdGVseSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBzaGVuYW5pZ2FucyBhcmUgYXQgcGxheSBoZXJlLCB3aGljaCBpcyBhIHJlbGllZi4gSSYjMzk7bSBjb21mb3J0YWJsZSBzYXlpbmcgdGhpcyBkb2VzbiYjMzk7dCBuZWVkIHRvIGJlIGZsYWdnZWQgZm9yIEtNU0FOLCBJJiMzOTtsbCBzZXQgTmVlZHNLTVNBTiB0byBmYWxzZS4gSXQmIzM5O3MgcHVyZWx5IGFuIGFjY291bnRpbmcgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBhY2NvdW50aW5nIGJ1ZyBpbiBpb193b3JrZXJfY2FuY2VsX2NiKCkgd2hlcmUgYWNjdC1cdTAwM2Vucl93b3JrZXJzIHdhcyBkZWNyZW1lbnRlZCBldmVuIGlmIGNyZWF0ZV93b3JrZXJfY2IoKSBoYWQgbm90IHJlc2VydmVkIGEgd29ya2VyIHNsb3QgeWV0LiBUaGlzIGlzIGEgbG9naWMgYnVnIHJlbGF0ZWQgdG8gcmVzb3VyY2UgYWNjb3VudGluZyBhbmQgY29uY3VycmVuY3ksIHdoaWNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gYWNjb3VudGluZyBidWcgaW4gaW9fd29ya2VyX2NhbmNlbF9jYigpIHdoZXJlIGFjY3QtXHUwMDNlbnJfd29ya2VycyB3YXMgZGVjcmVtZW50ZWQgZXZlbiBpZiBjcmVhdGVfd29ya2VyX2NiKCkgaGFkIG5vdCByZXNlcnZlZCBhIHdvcmtlciBzbG90IHlldC4gVGhpcyBpcyBhIGxvZ2ljIGJ1ZyByZWxhdGVkIHRvIHJlc291cmNlIGFjY291bnRpbmcgYW5kIGNvbmN1cnJlbmN5LCB3aGljaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjI6NTAuMTU1NzI3Njc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ1NjE4Nzc4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb193cV9jcmVhdGVcIixcbiAgICBcImlvX3dxX3B1dF9hbmRfZXhpdFwiLFxuICAgIFwiaW9fd3FfZW5xdWV1ZVwiLFxuICAgIFwiaW9fd3FfY2FuY2VsX2NiXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBhY2NvdW50aW5nIGJ1ZyBpbiBpb193b3JrZXJfY2FuY2VsX2NiKCkgd2hlcmUgYWNjdC1cXHUwMDNlbnJfd29ya2VycyB3YXMgZGVjcmVtZW50ZWQgZXZlbiBpZiBjcmVhdGVfd29ya2VyX2NiKCkgaGFkIG5vdCByZXNlcnZlZCBhIHdvcmtlciBzbG90IHlldC4gVGhpcyBpcyBhIGxvZ2ljIGJ1ZyByZWxhdGVkIHRvIHJlc291cmNlIGFjY291bnRpbmcgYW5kIGNvbmN1cnJlbmN5LCB3aGljaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaW9fd29ya2VyX2NhbmNlbF9jYmAgaW4gYGlvX3VyaW5nL2lvLXdxLmNgIHRvIGNvbmRpdGlvbmFsbHkgZGVjcmVtZW50IGBhY2N0LVxcdTAwM2Vucl93b3JrZXJzYCBvbmx5IGlmIGB3b3JrZXItXFx1MDAzZWNyZWF0ZV93b3JrLmZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jYmAuIFRoaXMgZml4ZXMgYSBidWcgaW4gaW9fdXJpbmcgd29ya2VyIGNhbmNlbGxhdGlvbiB3aGVyZSB0aGUgd29ya2VyIHNsb3Qgd2FzIG5vdCB5ZXQgcmVzZXJ2ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBpb191cmluZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjI6NTAuMTU1NzM0MzA0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA0ODA1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyZWNhYTJhNjE5Y2Y5YzM3N2QyMGE0Zjg3NjQzMmM4NGUzZDE2MDY1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDExIDA3OjIyOjQ5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2lvLXdxLmMgYi9pb191cmluZy9pby13cS5jXFxuaW5kZXggMmUxNDg4MGVlZjkyYS4uZmE0MDNlZDI0NTk2MiAxMDA2NDRcXG4tLS0gYS9pb191cmluZy9pby13cS5jXFxuKysrIGIvaW9fdXJpbmcvaW8td3EuY1xcbkBAIC0yMTEsOSArMjExLDEyIEBAIHN0YXRpYyB2b2lkIGlvX3dvcmtlcl9jYW5jZWxfY2Ioc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKVxcbiBcXHRzdHJ1Y3QgaW9fd3EgKndxID0gd29ya2VyLVxcdTAwM2V3cTtcXG4gXFxuIFxcdGF0b21pY19kZWMoXFx1MDAyNmFjY3QtXFx1MDAzZW5yX3J1bm5pbmcpO1xcbi1cXHRyYXdfc3Bpbl9sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbi1cXHRhY2N0LVxcdTAwM2Vucl93b3JrZXJzLS07XFxuLVxcdHJhd19zcGluX3VubG9jayhcXHUwMDI2YWNjdC1cXHUwMDNld29ya2Vyc19sb2NrKTtcXG4rXFx0LyogY3JlYXRlX3dvcmtlcl9jYigpIGhhcyBub3QgcmVzZXJ2ZWQgYSB3b3JrZXIgc2xvdCB5ZXQuICovXFxuK1xcdGlmICh3b3JrZXItXFx1MDAzZWNyZWF0ZV93b3JrLmZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jYikge1xcbitcXHRcXHRyYXdfc3Bpbl9sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbitcXHRcXHRhY2N0LVxcdTAwM2Vucl93b3JrZXJzLS07XFxuK1xcdFxcdHJhd19zcGluX3VubG9jayhcXHUwMDI2YWNjdC1cXHUwMDNld29ya2Vyc19sb2NrKTtcXG4rXFx0fVxcbiBcXHRpb193b3JrZXJfcmVmX3B1dCh3cSk7XFxuIFxcdGNsZWFyX2JpdF91bmxvY2soMCwgXFx1MDAyNndvcmtlci1cXHUwMDNlY3JlYXRlX3N0YXRlKTtcXG4gXFx0aW9fd29ya2VyX3JlbGVhc2Uod29ya2VyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjI6NTAuNTk2OTk0NTk1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODUzNDY5MDcxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb193cV9jcmVhdGVcIixcbiAgICBcImlvX3dxX3B1dF9hbmRfZXhpdFwiLFxuICAgIFwiaW9fd3FfZW5xdWV1ZVwiLFxuICAgIFwiaW9fd3FfY2FuY2VsX2NiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGlvX3dvcmtlcl9jYW5jZWxfY2JgIGluIGBpb191cmluZy9pby13cS5jYCB0byBjb25kaXRpb25hbGx5IGRlY3JlbWVudCBgYWNjdC1cXHUwMDNlbnJfd29ya2Vyc2Agb25seSBpZiBgd29ya2VyLVxcdTAwM2VjcmVhdGVfd29yay5mdW5jICE9IGNyZWF0ZV93b3JrZXJfY2JgLiBUaGlzIGZpeGVzIGEgYnVnIGluIGlvX3VyaW5nIHdvcmtlciBjYW5jZWxsYXRpb24gd2hlcmUgdGhlIHdvcmtlciBzbG90IHdhcyBub3QgeWV0IHJlc2VydmVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9fdXJpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJlY2FhMmE2MTljZjljMzc3ZDIwYTRmODc2NDMyYzg0ZTNkMTYwNjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNzoyMjo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2lvLXdxLmMgYi9pb191cmluZy9pby13cS5jXG5pbmRleCAyZTE0ODgwZWVmOTJhLi5mYTQwM2VkMjQ1OTYyIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvaW8td3EuY1xuKysrIGIvaW9fdXJpbmcvaW8td3EuY1xuQEAgLTIxMSw5ICsyMTEsMTIgQEAgc3RhdGljIHZvaWQgaW9fd29ya2VyX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpXG4gXHRzdHJ1Y3QgaW9fd3EgKndxID0gd29ya2VyLVx1MDAzZXdxO1xuIFxuIFx0YXRvbWljX2RlYyhcdTAwMjZhY2N0LVx1MDAzZW5yX3J1bm5pbmcpO1xuLVx0cmF3X3NwaW5fbG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4tXHRhY2N0LVx1MDAzZW5yX3dvcmtlcnMtLTtcbi1cdHJhd19zcGluX3VubG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4rXHQvKiBjcmVhdGVfd29ya2VyX2NiKCkgaGFzIG5vdCByZXNlcnZlZCBhIHdvcmtlciBzbG90IHlldC4gKi9cbitcdGlmICh3b3JrZXItXHUwMDNlY3JlYXRlX3dvcmsuZnVuYyAhPSBjcmVhdGVfd29ya2VyX2NiKSB7XG4rXHRcdHJhd19zcGluX2xvY2soXHUwMDI2YWNjdC1cdTAwM2V3b3JrZXJzX2xvY2spO1xuK1x0XHRhY2N0LVx1MDAzZW5yX3dvcmtlcnMtLTtcbitcdFx0cmF3X3NwaW5fdW5sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbitcdH1cbiBcdGlvX3dvcmtlcl9yZWZfcHV0KHdxKTtcbiBcdGNsZWFyX2JpdF91bmxvY2soMCwgXHUwMDI2d29ya2VyLVx1MDAzZWNyZWF0ZV9zdGF0ZSk7XG4gXHRpb193b3JrZXJfcmVsZWFzZSh3b3JrZXIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjI6NTAuNTk2OTk1Njk1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5MDg0MjI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBpbiBpb191cmluZy9pby13cS5jKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB3aXRoaW4gYGlvX3VyaW5nL2lvLXdxLmNgLiBJdCBzZWVtcyB0byBiZSB0b3VjaGluZyBgaW9fd29ya2VyX2NhbmNlbF9jYmAuIFRoZSBrZXkgY2hhbmdlIGlzIGFyb3VuZCB0aGlzIGNvbmRpdGlvbmFsOiBhdm9pZGluZyBkZWNyZW1lbnRpbmcgYGFjY3QtXHUwMDNlbnJfd29ya2Vyc2AgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLiBMZXQgbWUgc2VlLi4uIHRoZSBsb2dpYyBoZXJlIGlzIHNraXBwaW5nIHRoZSBkZWNyZW1lbnQgd2hlbiBgd29ya2VyLVx1MDAzZWNyZWF0ZV93b3JrLmZ1bmNgIGlzbid0IGBjcmVhdGVfd29ya2VyX2NiYC4gSG1tLCB0aGUgY29tbWVudCBzYXlzIHNvbWV0aGluZyBhYm91dCBgY3JlYXRlX3dvcmtlcl9jYigpYCBub3QgcmVzZXJ2aW5nIGEgd29ya2VyIHNsb3QgeWV0LiBSaWdodCwgc28gaWYgaXQncyAqbm90KiBgY3JlYXRlX3dvcmtlcl9jYmAsIHdoYXQgKmlzKiBpdD8gSXMgdGhpcyByZWxhdGVkIHRvIGBjcmVhdGVfd29ya2VyX2NvbnRgPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYm90aCBgaW9fd29ya2VyX2NhbmNlbF9jYmAgYW5kIGBjcmVhdGVfd29ya2VyX2NiYCB3aXRoaW4gdGhpcyBmaWxlLiBUaGUgZGVwZW5kZW5jeSBhbmQgaG93IHRoZXkgcmVsYXRlIGlzIG9idmlvdXNseSB0aGUga2V5IHRvIHRoaXMgcGF0Y2guIExldCdzIGRpZyBpbiBhbmQgc2VlIHRoZSBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjI6NTQuNzg3ODQwNTk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMjkwNDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3dvcmtlcl9jYW5jZWxfY2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvaW8td3EuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pby13cS5jPTE5OD1ib29sIGlvX3dxX3dvcmtlcl9zdG9wcGVkKHZvaWQpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTIwNy1cXG5pb191cmluZy9pby13cS5jOjIwODpzdGF0aWMgdm9pZCBpb193b3JrZXJfY2FuY2VsX2NiKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcXG5pb191cmluZy9pby13cS5jLTIwOS17XFxuLS1cXG5pb191cmluZy9pby13cS5jPTIzNT1zdGF0aWMgdm9pZCBpb193b3JrZXJfZXhpdChzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTI0NS1cXHRcXHRcXHRicmVhaztcXG5pb191cmluZy9pby13cS5jOjI0NjpcXHRcXHRpb193b3JrZXJfY2FuY2VsX2NiKHdvcmtlcik7XFxuaW9fdXJpbmcvaW8td3EuYy0yNDctXFx0fVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMzI0PXN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF90d19jcmVhdGUoc3RydWN0IGlvX3dxICp3cSlcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTMzMS1cXHRcXHR3b3JrZXIgPSBjb250YWluZXJfb2YoY2IsIHN0cnVjdCBpb193b3JrZXIsIGNyZWF0ZV93b3JrKTtcXG5pb191cmluZy9pby13cS5jOjEzMzI6XFx0XFx0aW9fd29ya2VyX2NhbmNlbF9jYih3b3JrZXIpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTMzMy1cXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMjo1NC44NDExMzcxNTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzY5OTQxOTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhlc2UgY2FsbGJhY2tzOiBgaW9fd29ya2VyX2NhbmNlbF9jYmAsIGBjcmVhdGVfd29ya2VyX2NiYCwgYW5kIGBjcmVhdGVfd29ya2VyX2NvbnRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGVpciByZWxhdGlvbnNoaXAgYW5kIGhvdyB0aGV5IGNvbnRyaWJ1dGUgdG8gdGhlIG92ZXJhbGwgd29ya2Zsb3cuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBvcmNoZXN0cmF0aW9uIGhlcmUuIElzIGBpb193b3JrZXJfY2FuY2VsX2NiYCB1c2VkIHRvIGNsZWFuIHVwIG9yIHNpZ25hbCB0ZXJtaW5hdGlvbiwgYW5kIGhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggYGNyZWF0ZV93b3JrZXJfY2JgIHdoaWNoIGxpa2VseSBzcGF3bnMgbmV3IHRocmVhZHMgb3IgcHJvY2Vzc2VzPyBJcyBgY3JlYXRlX3dvcmtlcl9jb250YCByZWxhdGVkLCBwZXJoYXBzIGEgY29udGludWF0aW9uIG9yIGNvbXBsZXRpb24gaGFuZGxlciBhZnRlciB3b3JrZXIgY3JlYXRpb24/IE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGNvbnRyb2wgZmxvdywgaWRlbnRpZnlpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGJldHdlZW4gdGhlc2UgY2FsbGJhY2tzLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHN0YXRlIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZW0sIGVzcGVjaWFsbHkgaWYgdGhlcmUncyBhbnkgc2hhcmVkIGRhdGEgdGhhdCByZXF1aXJlcyBjYXJlZnVsIGxvY2tpbmcgb3IgYXRvbWljIG9wZXJhdGlvbnMuIEknbGwgYWxzbyBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgZXJyb3IgaGFuZGxpbmc6IGRvIHRoZXNlIGNhbGxiYWNrcyBoYW5kbGUgZXJyb3JzIGluZGVwZW5kZW50bHksIG9yIGlzIHRoZXJlIGEgY2VudHJhbGl6ZWQgZXJyb3ItcmVwb3J0aW5nIG1lY2hhbmlzbT8gSSBuZWVkIHRvIGFuYWx5emUgaG93IGNhbmNlbGxhdGlvbiBpcyBwcm9wYWdhdGVkIHRocm91Z2ggdGhpcyBjaGFpbiwgYW5kIGxvb2sgYXQgdGhlIGVkZ2UgY2FzZXMgbGlrZSB0aGUgdGhyZWFkIGV4aXRpbmcgd2hpbGUgcHJvY2Vzc2luZyBhIHJlcXVlc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMjo1OS4yMTEwODExMTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAwMjcwNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3JlYXRlX3dvcmtlcl9jYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9pby13cS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2lvLXdxLmM9MTQ5PXN0YXRpYyBib29sIGlvX2FjY3RfY2FuY2VsX3BlbmRpbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xNTEtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaCk7XFxuaW9fdXJpbmcvaW8td3EuYzoxNTI6c3RhdGljIHZvaWQgY3JlYXRlX3dvcmtlcl9jYihzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTUzLXN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF90d19jcmVhdGUoc3RydWN0IGlvX3dxICp3cSk7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTIwOD1zdGF0aWMgdm9pZCBpb193b3JrZXJfY2FuY2VsX2NiKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMjEzLVxcdGF0b21pY19kZWMoXFx1MDAyNmFjY3QtXFx1MDAzZW5yX3J1bm5pbmcpO1xcbmlvX3VyaW5nL2lvLXdxLmM6MjE0OlxcdC8qIGNyZWF0ZV93b3JrZXJfY2IoKSBoYXMgbm90IHJlc2VydmVkIGEgd29ya2VyIHNsb3QgeWV0LiAqL1xcbmlvX3VyaW5nL2lvLXdxLmM6MjE1OlxcdGlmICh3b3JrZXItXFx1MDAzZWNyZWF0ZV93b3JrLmZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jYikge1xcbmlvX3VyaW5nL2lvLXdxLmMtMjE2LVxcdFxcdHJhd19zcGluX2xvY2soXFx1MDAyNmFjY3QtXFx1MDAzZXdvcmtlcnNfbG9jayk7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTIyNT1zdGF0aWMgYm9vbCBpb190YXNrX3dvcmtlcl9tYXRjaChzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IsIHZvaWQgKmRhdGEpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTIyOC1cXG5pb191cmluZy9pby13cS5jOjIyOTpcXHRpZiAoY2ItXFx1MDAzZWZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jYilcXG5pb191cmluZy9pby13cS5jLTIzMC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTM0Nz1zdGF0aWMgdm9pZCBpb193cV9pbmNfcnVubmluZyhzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTM1My1cXG5pb191cmluZy9pby13cS5jOjM1NDpzdGF0aWMgdm9pZCBjcmVhdGVfd29ya2VyX2NiKHN0cnVjdCBjYWxsYmFja19oZWFkICpjYilcXG5pb191cmluZy9pby13cS5jLTM1NS17XFxuLS1cXG5pb191cmluZy9pby13cS5jPTQ1OT1zdGF0aWMgdm9pZCBpb193cV9kZWNfcnVubmluZyhzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTQ4MC1cXHRhdG9taWNfaW5jKFxcdTAwMjZ3cS1cXHUwMDNld29ya2VyX3JlZnMpO1xcbmlvX3VyaW5nL2lvLXdxLmM6NDgxOlxcdGlvX3F1ZXVlX3dvcmtlcl9jcmVhdGUod29ya2VyLCBhY2N0LCBjcmVhdGVfd29ya2VyX2NiKTtcXG5pb191cmluZy9pby13cS5jLTQ4Mi19XFxuLS1cXG5pb191cmluZy9pby13cS5jPTEzMDk9c3RhdGljIGJvb2wgaW9fdGFza193b3JrX21hdGNoKHN0cnVjdCBjYWxsYmFja19oZWFkICpjYiwgdm9pZCAqZGF0YSlcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTMxMi1cXG5pb191cmluZy9pby13cS5jOjEzMTM6XFx0aWYgKGNiLVxcdTAwM2VmdW5jICE9IGNyZWF0ZV93b3JrZXJfY2IgXFx1MDAyNlxcdTAwMjYgY2ItXFx1MDAzZWZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jb250KVxcbmlvX3VyaW5nL2lvLXdxLmMtMTMxNC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjIyOjU5LjI2MTExNDIzMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NzcwMzQ5MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3VidGxlIGlvX3VyaW5nIFdvcmtlciBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgaW9fdXJpbmcvaW8td3EuY2AsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBgaW9fd29ya2VyX2NhbmNlbF9jYmAuIFRoZSBrZXkgY2hhbmdlIGlzIHRoaXMgY29uZGl0aW9uYWwgbG9naWM6IGRvbid0IGRlY3JlbWVudCBgYWNjdC1cdTAwM2Vucl93b3JrZXJzYCBpZiB0aGUgd29ya2VyJ3MgY3JlYXRpb24gZnVuY3Rpb24gaXNuJ3QgYGNyZWF0ZV93b3JrZXJfY2JgLiBUaGUgY29kZSBzbmlwcGV0IHJlYWxseSBjbGFyaWZpZXMgaXQ6XG5cbmBgYGNcblx0LyogY3JlYXRlX3dvcmtlcl9jYigpIGhhcyBub3QgcmVzZXJ2ZWQgYSB3b3JrZXIgc2xvdCB5ZXQuICovXG5cdGlmICh3b3JrZXItXHUwMDNlY3JlYXRlX3dvcmsuZnVuYyAhPSBjcmVhdGVfd29ya2VyX2NiKSB7XG5cdFx0cmF3X3NwaW5fbG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG5cdFx0YWNjdC1cdTAwM2Vucl93b3JrZXJzLS07XG5cdFx0cmF3X3NwaW5fdW5sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcblx0fVxuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uOyBpdCdzIGZpeGluZyBhIHBvdGVudGlhbCBidWcgaW4gaG93IGlvX3VyaW5nIHdvcmtlcnMgYXJlIG1hbmFnZWQgZHVyaW5nIGNhbmNlbGxhdGlvbi4gVGhhdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZyBvcHRpb25zIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkgYW5kIGlkZW50aWZ5IHRoZSByZWxldmFudCBzeW1ib2xzLiBUaGUgZnVuY3Rpb24gYGlvX3dvcmtlcl9jYW5jZWxfY2JgIGl0c2VsZiBpcyBzdGF0aWMsIHNvIEknbGwgbmVlZCB0byBsb29rIGF0IHdoYXQgY2FsbHMgaXQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSB1c2VzIGl0LiBBIHF1aWNrIGxvb2sgc2hvd3MgdGhhdCBpdCdzIGNhbGxlZCBieSBgaW9fd29ya2VyX2V4aXRgIGFuZCBgaW9fd3FfY2FuY2VsX3R3X2NyZWF0ZWAsIHdoaWNoIHNob3VsZCBnaXZlIG1lIGdvb2QgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODQyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjIzOjAzLjkzODE1MTU5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzI4OTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3dvcmtlcl9leGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL2lvLXdxLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW8td3EuYz0yMjU9c3RhdGljIGJvb2wgaW9fdGFza193b3JrZXJfbWF0Y2goc3RydWN0IGNhbGxiYWNrX2hlYWQgKmNiLCB2b2lkICpkYXRhKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0yMzQtXFxuaW9fdXJpbmcvaW8td3EuYzoyMzU6c3RhdGljIHZvaWQgaW9fd29ya2VyX2V4aXQoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKVxcbmlvX3VyaW5nL2lvLXdxLmMtMjM2LXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9Njg1PXN0YXRpYyBpbnQgaW9fd3Ffd29ya2VyKHZvaWQgKmRhdGEpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTc0OC1cXG5pb191cmluZy9pby13cS5jOjc0OTpcXHRpb193b3JrZXJfZXhpdCh3b3JrZXIpO1xcbmlvX3VyaW5nL2lvLXdxLmMtNzUwLVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzowMy45ODU4ODUxMjZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjg0NzU3MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgYXMgaWYgdGhlc2Ugd2VyZSBteSBvd24gdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyB0aGUgSS9PIFdvcmtlciBUaHJlYWRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGNvcmUgb2YgdGhlIEkvTyB3b3JrZXIgdGhyZWFkIG1lY2hhbmlzbS4gYGlvX3dxX3dvcmtlcmAuLi4gdGhhdCdzIHRoZSBwcmltYXJ5IHRocmVhZCBmdW5jdGlvbiwgdGhlIGhlYXJ0IG9mIHRoZSB3aG9sZSBvcGVyYXRpb24uIFRoYXQncyB0aGUgZnVuY3Rpb24gd2hlcmUgdGhlIGFjdHVhbCB3b3JrIGdldHMgZG9uZS4gVGhhdCdzIHdoZXJlIHRoZSBJL08gcHJvY2Vzc2luZyBpcyBvcmNoZXN0cmF0ZWQuXG5cblRoZW4gSSBzZWUgYGlvX3dxX2NhbmNlbF90d19jcmVhdGVgLCBhbmQgdGhhdCdzIGNhbGxlZCBzcGVjaWZpY2FsbHkgZnJvbSBgaW9fd3FfZXhpdF93b3JrZXJzYC4gU28sIHdoZW4gdGhlIHN5c3RlbSdzIHNodXR0aW5nIGRvd24gdGhlIHdvcmtlciB0aHJlYWRzLCB0aGlzIGNhbmNlbGxhdGlvbiBmdW5jdGlvbiBpcyBpbnZva2VkLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBJdCdzIGEgY2xlYW51cCBzdGVwLCBwb3RlbnRpYWxseSB0byBwcmV2ZW50IGFueSBuZXcgdGhyZWFkIGNyZWF0aW9ucyBmcm9tIHN1Y2NlZWRpbmcgb24gc2h1dGRvd24uIEl0J3MgYWxsIGFib3V0IG1ha2luZyB0aGUgcHJvY2VzcyBhcyB0aWR5IGFzIHBvc3NpYmxlLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYGlvX3dxX2NhbmNlbF90d19jcmVhdGVgIG1vcmUgdG8gdW5kZXJzdGFuZCB3aGF0IHJlc291cmNlcyBpdCdzIGNsZWFuaW5nIHVwLiBUaGUgY29udGV4dCBpcyBvYnZpb3VzbHkgYWJvdXQgdGhyZWFkIG1hbmFnZW1lbnQgYW5kIHNwZWNpZmljYWxseSB0aGUgY2xlYW51cCBvZiB0aHJlYWQgY3JlYXRpb24gcmVsYXRlZCBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGUgSS9PIHdvcmtlciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjA5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjM6MDcuMjcwNjQ2OTY2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY0MDU3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb193cV9jYW5jZWxfdHdfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL2lvLXdxLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW8td3EuYz0xNTI9c3RhdGljIHZvaWQgY3JlYXRlX3dvcmtlcl9jYihzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IpO1xcbmlvX3VyaW5nL2lvLXdxLmM6MTUzOnN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF90d19jcmVhdGUoc3RydWN0IGlvX3dxICp3cSk7XFxuaW9fdXJpbmcvaW8td3EuYy0xNTQtXFxuLS1cXG5pb191cmluZy9pby13cS5jPTM5MD1zdGF0aWMgYm9vbCBpb19xdWV1ZV93b3JrZXJfY3JlYXRlKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcixcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNDIwLVxcdFxcdGlmICh0ZXN0X2JpdChJT19XUV9CSVRfRVhJVCwgXFx1MDAyNndxLVxcdTAwM2VzdGF0ZSkpXFxuaW9fdXJpbmcvaW8td3EuYzo0MjE6XFx0XFx0XFx0aW9fd3FfY2FuY2VsX3R3X2NyZWF0ZSh3cSk7XFxuaW9fdXJpbmcvaW8td3EuYy00MjItXFx0XFx0aW9fd29ya2VyX3JlZl9wdXQod3EpO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMzE5PXZvaWQgaW9fd3FfZXhpdF9zdGFydChzdHJ1Y3QgaW9fd3EgKndxKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMzIzLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTMyNDpzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfdHdfY3JlYXRlKHN0cnVjdCBpb193cSAqd3EpXFxuaW9fdXJpbmcvaW8td3EuYy0xMzI1LXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9MTM0Mj1zdGF0aWMgdm9pZCBpb193cV9leGl0X3dvcmtlcnMoc3RydWN0IGlvX3dxICp3cSlcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTM0OC1cXG5pb191cmluZy9pby13cS5jOjEzNDk6XFx0aW9fd3FfY2FuY2VsX3R3X2NyZWF0ZSh3cSk7XFxuaW9fdXJpbmcvaW8td3EuYy0xMzUwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzowNy4zMTcyOTE5NjJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwNzI1NDQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIGlvX3dxIERlc3RydWN0aW9uKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBpb193cV9leGl0X3dvcmtlcnNgIGFuZCBgaW9fd3FfZXhpdF9zdGFydGAuIFRob3NlIGFyZSBkZWZpbml0ZWx5IGNhbGxlZCBkdXJpbmcgdGhlIGRlc3RydWN0aW9uIHByb2Nlc3Mgb2YgYW4gYGlvX3dxYCwgbWFraW5nIHRoZW0ga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IGl0IGFsbCB1bnJhdmVscy4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoYXQgcHJvY2Vzcy4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBwaWVjZXMsIGZyb20gc3RhcnQgdG8gZmluaXNoLlxuXG5UaGVyZWZvcmUsIEkgbmVlZCB0byBzZWUgd2hhdCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBtaWdodCBiZSB1c2VmdWwgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBpb193cWAgaXMgY3JlYXRlZCwgYW5kIGV2ZW4gbW9yZSBjcml0aWNhbGx5LCB0b3JuIGRvd24uIEnigJlsbCBmb2N1cyBvbiBub24tc3RhdGljIGZ1bmN0aW9ucywgYXMgdGhleSdyZSB0aGUgb25lcyBtb3N0IGxpa2VseSB0byBiZSBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJIG9yIGF0IGxlYXN0IGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGNhc3QgYSB3aWRlciBuZXQgaGVyZSBhbmQgZmluZCBhbnl0aGluZyBpbnZvbHZlZCBpbiBlaXRoZXIgY3JlYXRpb24gb3IgZGVzdHJ1Y3Rpb24gdGhhdCBtaWdodCBiZSBsdXJraW5nIGFyb3VuZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgaG93IGBpb193cWAgbGlmZSBjeWNsZSBpcyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzM1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjM6MTEuNjI0NTQ5MDczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc5MDMyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb193cV9leGl0X3dvcmtlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvaW8td3EuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pby13cS5jPTM5MD1zdGF0aWMgYm9vbCBpb19xdWV1ZV93b3JrZXJfY3JlYXRlKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcixcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNDE3LVxcdFxcdCAqIG5vdyBzZXQuIHdxIGV4aXQgZG9lcyB0aGF0IHRvbywgYnV0IHdlIGNhbiBoYXZlIGFkZGVkIHRoaXNcXG5pb191cmluZy9pby13cS5jOjQxODpcXHRcXHQgKiB3b3JrIGl0ZW0gYWZ0ZXIgd2UgY2FuY2VsZWQgaW4gaW9fd3FfZXhpdF93b3JrZXJzKCkuXFxuaW9fdXJpbmcvaW8td3EuYy00MTktXFx0XFx0ICovXFxuLS1cXG5pb191cmluZy9pby13cS5jPTEzMjQ9c3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3R3X2NyZWF0ZShzdHJ1Y3QgaW9fd3EgKndxKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMzQxLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTM0MjpzdGF0aWMgdm9pZCBpb193cV9leGl0X3dvcmtlcnMoc3RydWN0IGlvX3dxICp3cSlcXG5pb191cmluZy9pby13cS5jLTEzNDMte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMzk4PXZvaWQgaW9fd3FfcHV0X2FuZF9leGl0KHN0cnVjdCBpb193cSAqd3EpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTE0MDEtXFxuaW9fdXJpbmcvaW8td3EuYzoxNDAyOlxcdGlvX3dxX2V4aXRfd29ya2Vycyh3cSk7XFxuaW9fdXJpbmcvaW8td3EuYy0xNDAzLVxcdGlvX3dxX2Rlc3Ryb3kod3EpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzoxMS42NjkzNDM2NDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxOTIxODY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgaW9fd3FgIENsZWFudXAgUHJvY2VkdXJlKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IGBpb193cV9wdXRfYW5kX2V4aXRgLiBUaGUgZmFjdCB0aGF0IGl0J3MgKm5vdCogYSBzdGF0aWMgZnVuY3Rpb24gaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBpbXBsaWVzIGl0IG1pZ2h0IGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIG1vZHVsZSwgd2hpY2ggaGFzIGltcGxpY2F0aW9ucyBmb3Igc3luY2hyb25pemF0aW9uIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0cyBpbiB3aGljaCBpdCdzIGJlaW5nIHVzZWQgYmV5b25kIHRoZSBpbW1lZGlhdGUgc2NvcGUuIFRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgYGlvX3dxYCBzdHJ1Y3R1cmUgaXMgbWFuYWdlZCwgSSByZWFsbHkgbmVlZCB0byB0cmFjZSBpdHMgb3JpZ2lucywgdGhlIGxpZmVjeWNsZSBvZiB0aGUgb2JqZWN0LCBhbmQgaXRzIGZpbmFsaXphdGlvbiByb3V0aW5lLiBTbywgSSBuZWVkIHRvIHNlZSAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20uIFRoZXJlZm9yZSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjcmVhdGlvbiBwcm9jZXNzLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBpb193cV9jcmVhdGVgIG5leHQuIFRoaXMgd2lsbCBsaWtlbHkgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBleHBlY3RlZCB1c2FnZSBhbmQgbGlmZWN5Y2xlIG9mIHRoZSBgaW9fd3FgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTc2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjM6MTUuMTg4NTY1MDA4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE3OTQ5OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fd3FfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL2lvLXdxLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW8td3EuYz0yOTU9c3RhdGljIGJvb2wgaW9fYWNjdF9hY3RpdmF0ZV9mcmVlX3dvcmtlcihzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdClcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMzI1LSAqL1xcbmlvX3VyaW5nL2lvLXdxLmM6MzI2OnN0YXRpYyBib29sIGlvX3dxX2NyZWF0ZV93b3JrZXIoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpXFxuaW9fdXJpbmcvaW8td3EuYy0zMjcte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMDI4PXZvaWQgaW9fd3FfZW5xdWV1ZShzdHJ1Y3QgaW9fd3EgKndxLCBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaylcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTA2MS1cXG5pb191cmluZy9pby13cS5jOjEwNjI6XFx0XFx0ZGlkX2NyZWF0ZSA9IGlvX3dxX2NyZWF0ZV93b3JrZXIod3EsIGFjY3QpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTA2My1cXHRcXHRpZiAobGlrZWx5KGRpZF9jcmVhdGUpKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMjM1PXN0YXRpYyBpbnQgaW9fd3FfaGFzaF93YWtlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMjUzLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTI1NDpzdHJ1Y3QgaW9fd3EgKmlvX3dxX2NyZWF0ZSh1bnNpZ25lZCBib3VuZGVkLCBzdHJ1Y3QgaW9fd3FfZGF0YSAqZGF0YSlcXG5pb191cmluZy9pby13cS5jLTEyNTUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzoxNS4zODAzNjYzOTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4NTAyODM4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBJZiBJJ20gdHJ5aW5nIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgb2YgdGhpcyBJL08gd29ya3F1ZXVlIGltcGxlbWVudGF0aW9uLCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIHByaW1hcnkgZW50cnkgYW5kIGV4aXQgcG9pbnRzLCB0aGUgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLCByZWFsbHkuIFNvLCBgaW9fd3FfY3JlYXRlYCBhbmQgYGlvX3dxX3B1dF9hbmRfZXhpdGAgZGVmaW5pdGVseSBqdW1wIG91dCBhcyBpbXBvcnRhbnQgc3ltYm9scyB0byB0cmFjZS4gVGhleSBhcmUgdGhlIHNjYWZmb2xkaW5nLCB0aGUgYnVpbGRpbmcgYW5kIGRpc21hbnRsaW5nLCBzbyB0byBzcGVhay5cblxuVGhlbiwgb2YgY291cnNlLCB0aGUgYWN0dWFsIHdvcmsgZW5xdWV1aW5nIG5lZWRzIGNvbnNpZGVyYXRpb246IGBpb193cV9lbnF1ZXVlYCBpcyBvYnZpb3VzbHkgYSBjcml0aWNhbCBwaWVjZS4gVGhhdCdzIHdoZXJlIHRoZSBhY3R1YWwgSS9PIHJlcXVlc3RzIGFyZSBnZXR0aW5nIHN1Ym1pdHRlZC5cblxuTm93LCB3aGF0IGFib3V0IHRoZSB3b3JrZXIgaXRzZWxmPyBBaCwgYGlvX3dxX3dvcmtlcmAuLi4gdGhhdCBvbmUncyBzdGF0aWMsIGlzbid0IGl0PyBIbW0sIHN0YXRpYyBtZWFucyBpbnRlcm5hbCB0byB0aGUgZmlsZSwgYW5kIHRoYXQgbWlnaHQgbWFrZSBpdCBhIGxlc3Mgb2J2aW91cyB0YXJnZXQgZm9yIHNvbWVvbmUgdHJ5aW5nIHRvIGludGVyZmFjZSB3aXRoIGl0IGZyb20gYW5vdGhlciBjb250ZXh0LiBJIG5lZWQgdG8gYmUgYXdhcmUgb2Ygd2hhdCBpcyBleHBvc2VkLCBhbmQgd2hhdCBpcyBpbnRlcm5hbC4gSSBzaG91bGQgYWxzbyBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSB3b3JrcXVldWUuIFRoZXkgY291bGQgYmUgdGhlIGtleSB0byBpbnRlZ3JhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYxNSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjIzOjE5LjA2NTM5ODA4N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyNDkzNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fd3FfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL2lvLXdxLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MzIgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmlvX3VyaW5nL2lvLXdxLmM9NDg9c3RydWN0IGlvX3dvcmtlciB7XFxuLS1cXG5pb191cmluZy9pby13cS5jLTU0LVxcdHN0cnVjdCBpb193cSAqd3E7XFxuaW9fdXJpbmcvaW8td3EuYzo1NTpcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdDtcXG5pb191cmluZy9pby13cS5jLTU2LVxcbmlvX3VyaW5nL2lvLXdxLmM6NTc6XFx0c3RydWN0IGlvX3dxX3dvcmsgKmN1cl93b3JrO1xcbmlvX3VyaW5nL2lvLXdxLmMtNTgtXFx0cmF3X3NwaW5sb2NrX3QgbG9jaztcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNzktXFxuaW9fdXJpbmcvaW8td3EuYzo4MDpzdHJ1Y3QgaW9fd3FfYWNjdCB7XFxuaW9fdXJpbmcvaW8td3EuYy04MS1cXHQvKipcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTAyLVxcdHJhd19zcGlubG9ja190IGxvY2s7XFxuaW9fdXJpbmcvaW8td3EuYzoxMDM6XFx0c3RydWN0IGlvX3dxX3dvcmtfbGlzdCB3b3JrX2xpc3Q7XFxuaW9fdXJpbmcvaW8td3EuYy0xMDQtXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9MTE2PXN0cnVjdCBpb193cSB7XFxuLS1cXG5pb191cmluZy9pby13cS5jLTExOC1cXG5pb191cmluZy9pby13cS5jOjExOTpcXHRzdHJ1Y3QgaW9fd3FfaGFzaCAqaGFzaDtcXG5pb191cmluZy9pby13cS5jLTEyMC1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTI3LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTI4OlxcdHN0cnVjdCBpb193cV9hY2N0IGFjY3RbSU9fV1FfQUNDVF9OUl07XFxuaW9fdXJpbmcvaW8td3EuYy0xMjktXFxuLS1cXG5pb191cmluZy9pby13cS5jLTEzMS1cXG5pb191cmluZy9pby13cS5jOjEzMjpcXHRzdHJ1Y3QgaW9fd3Ffd29yayAqaGFzaF90YWlsW0lPX1dRX05SX0hBU0hfQlVDS0VUU107XFxuaW9fdXJpbmcvaW8td3EuYy0xMzMtXFxuLS1cXG5pb191cmluZy9pby13cS5jLTEzNi1cXG5pb191cmluZy9pby13cS5jOjEzNzpzdGF0aWMgZW51bSBjcHVocF9zdGF0ZSBpb193cV9vbmxpbmU7XFxuaW9fdXJpbmcvaW8td3EuYy0xMzgtXFxuaW9fdXJpbmcvaW8td3EuYz0xMzk9c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhIHtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTQ2LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTQ3OnN0YXRpYyBib29sIGNyZWF0ZV9pb193b3JrZXIoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpO1xcbmlvX3VyaW5nL2lvLXdxLmM6MTQ4OnN0YXRpYyB2b2lkIGlvX3dxX2RlY19ydW5uaW5nKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcik7XFxuaW9fdXJpbmcvaW8td3EuYy0xNDktc3RhdGljIGJvb2wgaW9fYWNjdF9jYW5jZWxfcGVuZGluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXFxuaW9fdXJpbmcvaW8td3EuYzoxNTA6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXFxuaW9fdXJpbmcvaW8td3EuYy0xNTEtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaCk7XFxuaW9fdXJpbmcvaW8td3EuYz0xNTI9c3RhdGljIHZvaWQgY3JlYXRlX3dvcmtlcl9jYihzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IpO1xcbmlvX3VyaW5nL2lvLXdxLmM6MTUzOnN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF90d19jcmVhdGUoc3RydWN0IGlvX3dxICp3cSk7XFxuaW9fdXJpbmcvaW8td3EuYy0xNTQtXFxuaW9fdXJpbmcvaW8td3EuYz0xNTU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19pb19nZXRfd29ya19oYXNoKHVuc2lnbmVkIGludCB3b3JrX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xNTktXFxuaW9fdXJpbmcvaW8td3EuYzoxNjA6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fZ2V0X3dvcmtfaGFzaChzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaylcXG5pb191cmluZy9pby13cS5jLTE2MS17XFxuLS1cXG5pb191cmluZy9pby13cS5jPTE3MD1zdGF0aWMgdm9pZCBpb193b3JrZXJfcmVsZWFzZShzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTE3NS1cXG5pb191cmluZy9pby13cS5jOjE3NjpzdGF0aWMgaW5saW5lIHN0cnVjdCBpb193cV9hY2N0ICppb19nZXRfYWNjdChzdHJ1Y3QgaW9fd3EgKndxLCBib29sIGJvdW5kKVxcbmlvX3VyaW5nL2lvLXdxLmMtMTc3LXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTgwLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTgxOnN0YXRpYyBpbmxpbmUgc3RydWN0IGlvX3dxX2FjY3QgKmlvX3dvcmtfZ2V0X2FjY3Qoc3RydWN0IGlvX3dxICp3cSxcXG5pb191cmluZy9pby13cS5jLTE4Mi1cXHRcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCB3b3JrX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xODYtXFxuaW9fdXJpbmcvaW8td3EuYzoxODc6c3RhdGljIGlubGluZSBzdHJ1Y3QgaW9fd3FfYWNjdCAqaW9fd3FfZ2V0X2FjY3Qoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKVxcbmlvX3VyaW5nL2lvLXdxLmMtMTg4LXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9MTkyPXN0YXRpYyB2b2lkIGlvX3dvcmtlcl9yZWZfcHV0KHN0cnVjdCBpb193cSAqd3EpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTE5Ny1cXG5pb191cmluZy9pby13cS5jOjE5ODpib29sIGlvX3dxX3dvcmtlcl9zdG9wcGVkKHZvaWQpXFxuaW9fdXJpbmcvaW8td3EuYy0xOTkte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0yMDEtXFxuaW9fdXJpbmcvaW8td3EuYzoyMDI6XFx0aWYgKFdBUk5fT05fT05DRSghaW9fd3FfY3VycmVudF9pc193b3JrZXIoKSkpXFxuaW9fdXJpbmcvaW8td3EuYy0yMDMtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTIwOD1zdGF0aWMgdm9pZCBpb193b3JrZXJfY2FuY2VsX2NiKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcXG5pb191cmluZy9pby13cS5jLTIwOS17XFxuaW9fdXJpbmcvaW8td3EuYzoyMTA6XFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBpb193cV9nZXRfYWNjdCh3b3JrZXIpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMjExLVxcdHN0cnVjdCBpb193cSAqd3EgPSB3b3JrZXItXFx1MDAzZXdxO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0yMzU9c3RhdGljIHZvaWQgaW9fd29ya2VyX2V4aXQoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0yMzctXFx0c3RydWN0IGlvX3dxICp3cSA9IHdvcmtlci1cXHUwMDNld3E7XFxuaW9fdXJpbmcvaW8td3EuYzoyMzg6XFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBpb193cV9nZXRfYWNjdCh3b3JrZXIpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMjM5LVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0yNTYtXFx0cmF3X3NwaW5fdW5sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbmlvX3VyaW5nL2lvLXdxLmM6MjU3OlxcdGlvX3dxX2RlY19ydW5uaW5nKHdvcmtlcik7XFxuaW9fdXJpbmcvaW8td3EuYy0yNTgtXFx0LypcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMjY5LVxcbmlvX3VyaW5nL2lvLXdxLmM6MjcwOnN0YXRpYyBpbmxpbmUgYm9vbCBfX2lvX2FjY3RfcnVuX3F1ZXVlKHN0cnVjdCBpb193cV9hY2N0ICphY2N0KVxcbmlvX3VyaW5nL2lvLXdxLmMtMjcxLXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMjc5LSAqL1xcbmlvX3VyaW5nL2lvLXdxLmM6MjgwOnN0YXRpYyBpbmxpbmUgYm9vbCBpb19hY2N0X3J1bl9xdWV1ZShzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdClcXG5pb191cmluZy9pby13cS5jLTI4MS1cXHRfX2FjcXVpcmVzKFxcdTAwMjZhY2N0LVxcdTAwM2Vsb2NrKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0yOTQtICovXFxuaW9fdXJpbmcvaW8td3EuYzoyOTU6c3RhdGljIGJvb2wgaW9fYWNjdF9hY3RpdmF0ZV9mcmVlX3dvcmtlcihzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdClcXG5pb191cmluZy9pby13cS5jLTI5Ni1cXHRfX211c3RfaG9sZChSQ1UpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTMyNS0gKi9cXG5pb191cmluZy9pby13cS5jOjMyNjpzdGF0aWMgYm9vbCBpb193cV9jcmVhdGVfd29ya2VyKHN0cnVjdCBpb193cSAqd3EsIHN0cnVjdCBpb193cV9hY2N0ICphY2N0KVxcbmlvX3VyaW5nL2lvLXdxLmMtMzI3LXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMzQ2LVxcbmlvX3VyaW5nL2lvLXdxLmM6MzQ3OnN0YXRpYyB2b2lkIGlvX3dxX2luY19ydW5uaW5nKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcXG5pb191cmluZy9pby13cS5jLTM0OC17XFxuaW9fdXJpbmcvaW8td3EuYzozNDk6XFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBpb193cV9nZXRfYWNjdCh3b3JrZXIpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMzUwLVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0zNTQ9c3RhdGljIHZvaWQgY3JlYXRlX3dvcmtlcl9jYihzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTM1OC1cXG5pb191cmluZy9pby13cS5jOjM1OTpcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdDtcXG5pb191cmluZy9pby13cS5jLTM2MC1cXHRib29sIGFjdGl2YXRlZF9mcmVlX3dvcmtlciwgZG9fY3JlYXRlID0gZmFsc2U7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTM5MD1zdGF0aWMgYm9vbCBpb19xdWV1ZV93b3JrZXJfY3JlYXRlKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcixcXG5pb191cmluZy9pby13cS5jOjM5MTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcXG5pb191cmluZy9pby13cS5jLTM5Mi1cXHRcXHRcXHRcXHQgICB0YXNrX3dvcmtfZnVuY190IGZ1bmMpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTQxNy1cXHRcXHQgKiBub3cgc2V0LiB3cSBleGl0IGRvZXMgdGhhdCB0b28sIGJ1dCB3ZSBjYW4gaGF2ZSBhZGRlZCB0aGlzXFxuaW9fdXJpbmcvaW8td3EuYzo0MTg6XFx0XFx0ICogd29yayBpdGVtIGFmdGVyIHdlIGNhbmNlbGVkIGluIGlvX3dxX2V4aXRfd29ya2VycygpLlxcbmlvX3VyaW5nL2lvLXdxLmMtNDE5LVxcdFxcdCAqL1xcbmlvX3VyaW5nL2lvLXdxLmMtNDIwLVxcdFxcdGlmICh0ZXN0X2JpdChJT19XUV9CSVRfRVhJVCwgXFx1MDAyNndxLVxcdTAwM2VzdGF0ZSkpXFxuaW9fdXJpbmcvaW8td3EuYzo0MjE6XFx0XFx0XFx0aW9fd3FfY2FuY2VsX3R3X2NyZWF0ZSh3cSk7XFxuaW9fdXJpbmcvaW8td3EuYy00MjItXFx0XFx0aW9fd29ya2VyX3JlZl9wdXQod3EpO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy00MzUtLyogRGVmZXIgaWYgY3VycmVudCBhbmQgbmV4dCB3b3JrIGFyZSBib3RoIGhhc2hlZCB0byB0aGUgc2FtZSBjaGFpbiAqL1xcbmlvX3VyaW5nL2lvLXdxLmM6NDM2OnN0YXRpYyBib29sIGlvX3dxX2hhc2hfZGVmZXIoc3RydWN0IGlvX3dxX3dvcmsgKndvcmssIHN0cnVjdCBpb193cV9hY2N0ICphY2N0KVxcbmlvX3VyaW5nL2lvLXdxLmMtNDM3LXtcXG5pb191cmluZy9pby13cS5jLTQzOC1cXHR1bnNpZ25lZCBpbnQgaGFzaCwgd29ya19mbGFncztcXG5pb191cmluZy9pby13cS5jOjQzOTpcXHRzdHJ1Y3QgaW9fd3Ffd29yayAqbmV4dDtcXG5pb191cmluZy9pby13cS5jLTQ0MC1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNDQzLVxcdHdvcmtfZmxhZ3MgPSBhdG9taWNfcmVhZChcXHUwMDI2d29yay1cXHUwMDNlZmxhZ3MpO1xcbmlvX3VyaW5nL2lvLXdxLmM6NDQ0OlxcdGlmICghX19pb193cV9pc19oYXNoZWQod29ya19mbGFncykpXFxuaW9fdXJpbmcvaW8td3EuYy00NDUtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy00NTEtXFx0aGFzaCA9IF9faW9fZ2V0X3dvcmtfaGFzaCh3b3JrX2ZsYWdzKTtcXG5pb191cmluZy9pby13cS5jOjQ1MjpcXHRuZXh0ID0gY29udGFpbmVyX29mKGFjY3QtXFx1MDAzZXdvcmtfbGlzdC5maXJzdCwgc3RydWN0IGlvX3dxX3dvcmssIGxpc3QpO1xcbmlvX3VyaW5nL2lvLXdxLmMtNDUzLVxcdHdvcmtfZmxhZ3MgPSBhdG9taWNfcmVhZChcXHUwMDI2bmV4dC1cXHUwMDNlZmxhZ3MpO1xcbmlvX3VyaW5nL2lvLXdxLmM6NDU0OlxcdGlmICghX19pb193cV9pc19oYXNoZWQod29ya19mbGFncykpXFxuaW9fdXJpbmcvaW8td3EuYy00NTUtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy00NTgtXFxuaW9fdXJpbmcvaW8td3EuYzo0NTk6c3RhdGljIHZvaWQgaW9fd3FfZGVjX3J1bm5pbmcoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKVxcbmlvX3VyaW5nL2lvLXdxLmMtNDYwLXtcXG5pb191cmluZy9pby13cS5jOjQ2MTpcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX3dxX2dldF9hY2N0KHdvcmtlcik7XFxuaW9fdXJpbmcvaW8td3EuYy00NjItXFx0c3RydWN0IGlvX3dxICp3cSA9IHdvcmtlci1cXHUwMDNld3E7XFxuLS1cXG5pb191cmluZy9pby13cS5jLTQ3Mi1cXHRcXHRyZXR1cm47XFxuaW9fdXJpbmcvaW8td3EuYzo0NzM6XFx0aWYgKGlvX3dxX2hhc2hfZGVmZXIod29ya2VyLVxcdTAwM2VjdXJfd29yaywgYWNjdCkpIHtcXG5pb191cmluZy9pby13cS5jLTQ3NC1cXHRcXHRyYXdfc3Bpbl91bmxvY2soXFx1MDAyNmFjY3QtXFx1MDAzZWxvY2spO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy00ODctICovXFxuaW9fdXJpbmcvaW8td3EuYzo0ODg6c3RhdGljIHZvaWQgX19pb193b3JrZXJfYnVzeShzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCwgc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKVxcbmlvX3VyaW5nL2lvLXdxLmMtNDg5LXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNTAwLSAqL1xcbmlvX3VyaW5nL2lvLXdxLmM6NTAxOnN0YXRpYyB2b2lkIF9faW9fd29ya2VyX2lkbGUoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsIHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcXG5pb191cmluZy9pby13cS5jLTUwMi1cXHRfX211c3RfaG9sZChhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spXFxuLS1cXG5pb191cmluZy9pby13cS5jPTUxMD1zdGF0aWMgYm9vbCBpb193YWl0X29uX2hhc2goc3RydWN0IGlvX3dxICp3cSwgdW5zaWduZWQgaW50IGhhc2gpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTUyNi1cXG5pb191cmluZy9pby13cS5jOjUyNzpzdGF0aWMgc3RydWN0IGlvX3dxX3dvcmsgKmlvX2dldF9uZXh0X3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXFxuaW9fdXJpbmcvaW8td3EuYy01MjgtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGlvX3dxICp3cSlcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNTMwLXtcXG5pb191cmluZy9pby13cS5jOjUzMTpcXHRzdHJ1Y3QgaW9fd3Ffd29ya19ub2RlICpub2RlLCAqcHJldjtcXG5pb191cmluZy9pby13cS5jOjUzMjpcXHRzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaywgKnRhaWw7XFxuaW9fdXJpbmcvaW8td3EuYy01MzMtXFx0dW5zaWduZWQgaW50IHN0YWxsX2hhc2ggPSAtMVU7XFxuLS1cXG5pb191cmluZy9pby13cS5jLTUzOC1cXG5pb191cmluZy9pby13cS5jOjUzOTpcXHRcXHR3b3JrID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBpb193cV93b3JrLCBsaXN0KTtcXG5pb191cmluZy9pby13cS5jLTU0MC1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNTQyLVxcdFxcdHdvcmtfZmxhZ3MgPSBhdG9taWNfcmVhZChcXHUwMDI2d29yay1cXHUwMDNlZmxhZ3MpO1xcbmlvX3VyaW5nL2lvLXdxLmM6NTQzOlxcdFxcdGlmICghX19pb193cV9pc19oYXNoZWQod29ya19mbGFncykpIHtcXG5pb191cmluZy9pby13cS5jLTU0NC1cXHRcXHRcXHR3cV9saXN0X2RlbChcXHUwMDI2YWNjdC1cXHUwMDNld29ya19saXN0LCBub2RlLCBwcmV2KTtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9NTg1PXN0YXRpYyB2b2lkIGlvX2Fzc2lnbl9jdXJyZW50X3dvcmsoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLFxcbmlvX3VyaW5nL2lvLXdxLmM6NTg2OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpb193cV93b3JrICp3b3JrKVxcbmlvX3VyaW5nL2lvLXdxLmMtNTg3LXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNjAwLSAqL1xcbmlvX3VyaW5nL2lvLXdxLmM6NjAxOnN0YXRpYyB2b2lkIGlvX3dvcmtlcl9oYW5kbGVfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcXG5pb191cmluZy9pby13cS5jLTYwMi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNjA3LVxcdGRvIHtcXG5pb191cmluZy9pby13cS5jOjYwODpcXHRcXHRzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaztcXG5pb191cmluZy9pby13cS5jLTYwOS1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNjQzLVxcdFxcdFxcdGJvb2wgZG9fa2lsbCA9IHRlc3RfYml0KElPX1dRX0JJVF9FWElULCBcXHUwMDI2d3EtXFx1MDAzZXN0YXRlKTtcXG5pb191cmluZy9pby13cS5jOjY0NDpcXHRcXHRcXHRzdHJ1Y3QgaW9fd3Ffd29yayAqbmV4dF9oYXNoZWQsICpsaW5rZWQ7XFxuaW9fdXJpbmcvaW8td3EuYy02NDUtXFx0XFx0XFx0dW5zaWduZWQgaW50IHdvcmtfZmxhZ3MgPSBhdG9taWNfcmVhZChcXHUwMDI2d29yay1cXHUwMDNlZmxhZ3MpO1xcbmlvX3VyaW5nL2lvLXdxLmM6NjQ2OlxcdFxcdFxcdHVuc2lnbmVkIGludCBoYXNoID0gX19pb193cV9pc19oYXNoZWQod29ya19mbGFncylcXG5pb191cmluZy9pby13cS5jLTY0Ny1cXHRcXHRcXHRcXHQ/IF9faW9fZ2V0X3dvcmtfaGFzaCh3b3JrX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy02NTQtXFx0XFx0XFx0XFx0YXRvbWljX29yKElPX1dRX1dPUktfQ0FOQ0VMLCBcXHUwMDI2d29yay1cXHUwMDNlZmxhZ3MpO1xcbmlvX3VyaW5nL2lvLXdxLmM6NjU1OlxcdFxcdFxcdGlvX3dxX3N1Ym1pdF93b3JrKHdvcmspO1xcbmlvX3VyaW5nL2lvLXdxLmMtNjU2LVxcdFxcdFxcdGlvX2Fzc2lnbl9jdXJyZW50X3dvcmsod29ya2VyLCBOVUxMKTtcXG5pb191cmluZy9pby13cS5jLTY1Ny1cXG5pb191cmluZy9pby13cS5jOjY1ODpcXHRcXHRcXHRsaW5rZWQgPSBpb193cV9mcmVlX3dvcmsod29yayk7XFxuaW9fdXJpbmcvaW8td3EuYy02NTktXFx0XFx0XFx0d29yayA9IG5leHRfaGFzaGVkO1xcbmlvX3VyaW5nL2lvLXdxLmM6NjYwOlxcdFxcdFxcdGlmICghd29yayBcXHUwMDI2XFx1MDAyNiBsaW5rZWQgXFx1MDAyNlxcdTAwMjYgIWlvX3dxX2lzX2hhc2hlZChsaW5rZWQpKSB7XFxuaW9fdXJpbmcvaW8td3EuYy02NjEtXFx0XFx0XFx0XFx0d29yayA9IGxpbmtlZDtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNjY1LVxcdFxcdFxcdGlmIChsaW5rZWQpXFxuaW9fdXJpbmcvaW8td3EuYzo2NjY6XFx0XFx0XFx0XFx0aW9fd3FfZW5xdWV1ZSh3cSwgbGlua2VkKTtcXG5pb191cmluZy9pby13cS5jLTY2Ny1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNjg0LVxcbmlvX3VyaW5nL2lvLXdxLmM6Njg1OnN0YXRpYyBpbnQgaW9fd3Ffd29ya2VyKHZvaWQgKmRhdGEpXFxuaW9fdXJpbmcvaW8td3EuYy02ODYte1xcbmlvX3VyaW5nL2lvLXdxLmMtNjg3LVxcdHN0cnVjdCBpb193b3JrZXIgKndvcmtlciA9IGRhdGE7XFxuaW9fdXJpbmcvaW8td3EuYzo2ODg6XFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBpb193cV9nZXRfYWNjdCh3b3JrZXIpO1xcbmlvX3VyaW5nL2lvLXdxLmMtNjg5LVxcdHN0cnVjdCBpb193cSAqd3EgPSB3b3JrZXItXFx1MDAzZXdxO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy03NTUtICovXFxuaW9fdXJpbmcvaW8td3EuYzo3NTY6dm9pZCBpb193cV93b3JrZXJfcnVubmluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG5pb191cmluZy9pby13cS5jLTc1Ny17XFxuLS1cXG5pb191cmluZy9pby13cS5jLTc2Ni1cXHRzZXRfYml0KElPX1dPUktFUl9GX1JVTk5JTkcsIFxcdTAwMjZ3b3JrZXItXFx1MDAzZWZsYWdzKTtcXG5pb191cmluZy9pby13cS5jOjc2NzpcXHRpb193cV9pbmNfcnVubmluZyh3b3JrZXIpO1xcbmlvX3VyaW5nL2lvLXdxLmMtNzY4LX1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNzczLSAqL1xcbmlvX3VyaW5nL2lvLXdxLmM6Nzc0OnZvaWQgaW9fd3Ffd29ya2VyX3NsZWVwaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmlvX3VyaW5nL2lvLXdxLmMtNzc1LXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNzg1LVxcdGNsZWFyX2JpdChJT19XT1JLRVJfRl9SVU5OSU5HLCBcXHUwMDI2d29ya2VyLVxcdTAwM2VmbGFncyk7XFxuaW9fdXJpbmcvaW8td3EuYzo3ODY6XFx0aW9fd3FfZGVjX3J1bm5pbmcod29ya2VyKTtcXG5pb191cmluZy9pby13cS5jLTc4Ny19XFxuaW9fdXJpbmcvaW8td3EuYy03ODgtXFxuaW9fdXJpbmcvaW8td3EuYzo3ODk6c3RhdGljIHZvaWQgaW9faW5pdF9uZXdfd29ya2VyKHN0cnVjdCBpb193cSAqd3EsIHN0cnVjdCBpb193cV9hY2N0ICphY2N0LCBzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsXFxuaW9fdXJpbmcvaW8td3EuYy03OTAtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy04MDMtXFxuaW9fdXJpbmcvaW8td3EuYzo4MDQ6c3RhdGljIGJvb2wgaW9fd3Ffd29ya19tYXRjaF9hbGwoc3RydWN0IGlvX3dxX3dvcmsgKndvcmssIHZvaWQgKmRhdGEpXFxuaW9fdXJpbmcvaW8td3EuYy04MDUte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz04NDQ9c3RhdGljIHZvaWQgY3JlYXRlX3dvcmtlcl9jb250KHN0cnVjdCBjYWxsYmFja19oZWFkICpjYilcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtODQ4LVxcdHN0cnVjdCBpb193cSAqd3E7XFxuaW9fdXJpbmcvaW8td3EuYzo4NDk6XFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3Q7XFxuaW9fdXJpbmcvaW8td3EuYy04NTAtXFxuLS1cXG5pb191cmluZy9pby13cS5jLTg1My1cXHR3cSA9IHdvcmtlci1cXHUwMDNld3E7XFxuaW9fdXJpbmcvaW8td3EuYzo4NTQ6XFx0YWNjdCA9IGlvX3dxX2dldF9hY2N0KHdvcmtlcik7XFxuaW9fdXJpbmcvaW8td3EuYzo4NTU6XFx0dHNrID0gY3JlYXRlX2lvX3RocmVhZChpb193cV93b3JrZXIsIHdvcmtlciwgTlVNQV9OT19OT0RFKTtcXG5pb191cmluZy9pby13cS5jLTg1Ni1cXHRpZiAoIUlTX0VSUih0c2spKSB7XFxuLS1cXG5pb191cmluZy9pby13cS5jLTg2NS1cXHRcXHRcXHRzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgbWF0Y2ggPSB7XFxuaW9fdXJpbmcvaW8td3EuYzo4NjY6XFx0XFx0XFx0XFx0LmZuXFx0XFx0PSBpb193cV93b3JrX21hdGNoX2FsbCxcXG5pb191cmluZy9pby13cS5jLTg2Ny1cXHRcXHRcXHRcXHQuY2FuY2VsX2FsbFxcdD0gdHJ1ZSxcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9ODg2PXN0YXRpYyB2b2lkIGlvX3dvcmtxdWV1ZV9jcmVhdGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy04ODktXFx0XFx0XFx0XFx0XFx0XFx0d29yay53b3JrKTtcXG5pb191cmluZy9pby13cS5jOjg5MDpcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX3dxX2dldF9hY2N0KHdvcmtlcik7XFxuaW9fdXJpbmcvaW8td3EuYy04OTEtXFxuLS1cXG5pb191cmluZy9pby13cS5jLTg5NS1cXG5pb191cmluZy9pby13cS5jOjg5NjpzdGF0aWMgYm9vbCBjcmVhdGVfaW9fd29ya2VyKHN0cnVjdCBpb193cSAqd3EsIHN0cnVjdCBpb193cV9hY2N0ICphY2N0KVxcbmlvX3VyaW5nL2lvLXdxLmMtODk3LXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtOTE5LVxcbmlvX3VyaW5nL2lvLXdxLmM6OTIwOlxcdHRzayA9IGNyZWF0ZV9pb190aHJlYWQoaW9fd3Ffd29ya2VyLCB3b3JrZXIsIE5VTUFfTk9fTk9ERSk7XFxuaW9fdXJpbmcvaW8td3EuYy05MjEtXFx0aWYgKCFJU19FUlIodHNrKSkge1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy05MzctICovXFxuaW9fdXJpbmcvaW8td3EuYzo5Mzg6c3RhdGljIGJvb2wgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXFxuaW9fdXJpbmcvaW8td3EuYy05MzktXFx0XFx0XFx0XFx0ICAgIGJvb2wgKCpmdW5jKShzdHJ1Y3QgaW9fd29ya2VyICosIHZvaWQgKiksXFxuLS1cXG5pb191cmluZy9pby13cS5jLTk1OC1cXG5pb191cmluZy9pby13cS5jOjk1OTpzdGF0aWMgdm9pZCBpb193cV9mb3JfZWFjaF93b3JrZXIoc3RydWN0IGlvX3dxICp3cSxcXG5pb191cmluZy9pby13cS5jLTk2MC1cXHRcXHRcXHRcXHQgIGJvb2wgKCpmdW5jKShzdHJ1Y3QgaW9fd29ya2VyICosIHZvaWQgKiksXFxuLS1cXG5pb191cmluZy9pby13cS5jLTk2Ny1cXG5pb191cmluZy9pby13cS5jOjk2ODpzdGF0aWMgYm9vbCBpb193cV93b3JrZXJfd2FrZShzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsIHZvaWQgKmRhdGEpXFxuaW9fdXJpbmcvaW8td3EuYy05Njkte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy05NzQtXFxuaW9fdXJpbmcvaW8td3EuYzo5NzU6dm9pZCBpb193cV9zZXRfZXhpdF9vbl9pZGxlKHN0cnVjdCBpb193cSAqd3EsIGJvb2wgZW5hYmxlKVxcbmlvX3VyaW5nL2lvLXdxLmMtOTc2LXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtOTg4LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5pb191cmluZy9pby13cS5jOjk4OTpcXHRpb193cV9mb3JfZWFjaF93b3JrZXIod3EsIGlvX3dxX3dvcmtlcl93YWtlLCBOVUxMKTtcXG5pb191cmluZy9pby13cS5jLTk5MC1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtOTkyLVxcbmlvX3VyaW5nL2lvLXdxLmM6OTkzOnN0YXRpYyB2b2lkIGlvX3J1bl9jYW5jZWwoc3RydWN0IGlvX3dxX3dvcmsgKndvcmssIHN0cnVjdCBpb193cSAqd3EpXFxuaW9fdXJpbmcvaW8td3EuYy05OTQte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy05OTYtXFx0XFx0YXRvbWljX29yKElPX1dRX1dPUktfQ0FOQ0VMLCBcXHUwMDI2d29yay1cXHUwMDNlZmxhZ3MpO1xcbmlvX3VyaW5nL2lvLXdxLmM6OTk3OlxcdFxcdGlvX3dxX3N1Ym1pdF93b3JrKHdvcmspO1xcbmlvX3VyaW5nL2lvLXdxLmM6OTk4OlxcdFxcdHdvcmsgPSBpb193cV9mcmVlX3dvcmsod29yayk7XFxuaW9fdXJpbmcvaW8td3EuYy05OTktXFx0fSB3aGlsZSAod29yayk7XFxuLS1cXG5pb191cmluZy9pby13cS5jLTEwMDEtXFxuaW9fdXJpbmcvaW8td3EuYzoxMDAyOnN0YXRpYyB2b2lkIGlvX3dxX2luc2VydF93b3JrKHN0cnVjdCBpb193cSAqd3EsIHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxcbmlvX3VyaW5nL2lvLXdxLmM6MTAwMzpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaywgdW5zaWduZWQgaW50IHdvcmtfZmxhZ3MpXFxuaW9fdXJpbmcvaW8td3EuYy0xMDA0LXtcXG5pb191cmluZy9pby13cS5jLTEwMDUtXFx0dW5zaWduZWQgaW50IGhhc2g7XFxuaW9fdXJpbmcvaW8td3EuYzoxMDA2OlxcdHN0cnVjdCBpb193cV93b3JrICp0YWlsO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTAwNy1cXG5pb191cmluZy9pby13cS5jOjEwMDg6XFx0aWYgKCFfX2lvX3dxX2lzX2hhc2hlZCh3b3JrX2ZsYWdzKSkge1xcbmlvX3VyaW5nL2lvLXdxLmMtMTAwOS1hcHBlbmQ6XFxuLS1cXG5pb191cmluZy9pby13cS5jLTEwMjItXFxuaW9fdXJpbmcvaW8td3EuYzoxMDIzOnN0YXRpYyBib29sIGlvX3dxX3dvcmtfbWF0Y2hfaXRlbShzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaywgdm9pZCAqZGF0YSlcXG5pb191cmluZy9pby13cS5jLTEwMjQte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMDI3LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTAyODp2b2lkIGlvX3dxX2VucXVldWUoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX3dvcmsgKndvcmspXFxuaW9fdXJpbmcvaW8td3EuYy0xMDI5LXtcXG5pb191cmluZy9pby13cS5jLTEwMzAtXFx0dW5zaWduZWQgaW50IHdvcmtfZmxhZ3MgPSBhdG9taWNfcmVhZChcXHUwMDI2d29yay1cXHUwMDNlZmxhZ3MpO1xcbmlvX3VyaW5nL2lvLXdxLmM6MTAzMTpcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX3dvcmtfZ2V0X2FjY3Qod3EsIHdvcmtfZmxhZ3MpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTAzMi1cXHRzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgbWF0Y2ggPSB7XFxuaW9fdXJpbmcvaW8td3EuYzoxMDMzOlxcdFxcdC5mblxcdFxcdD0gaW9fd3Ffd29ya19tYXRjaF9pdGVtLFxcbmlvX3VyaW5nL2lvLXdxLmMtMTAzNC1cXHRcXHQuZGF0YVxcdFxcdD0gd29yayxcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTA0OS1cXHRyYXdfc3Bpbl9sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2Vsb2NrKTtcXG5pb191cmluZy9pby13cS5jOjEwNTA6XFx0aW9fd3FfaW5zZXJ0X3dvcmsod3EsIGFjY3QsIHdvcmssIHdvcmtfZmxhZ3MpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTA1MS1cXHRjbGVhcl9iaXQoSU9fQUNDVF9TVEFMTEVEX0JJVCwgXFx1MDAyNmFjY3QtXFx1MDAzZWZsYWdzKTtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTA2MS1cXG5pb191cmluZy9pby13cS5jOjEwNjI6XFx0XFx0ZGlkX2NyZWF0ZSA9IGlvX3dxX2NyZWF0ZV93b3JrZXIod3EsIGFjY3QpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTA2My1cXHRcXHRpZiAobGlrZWx5KGRpZF9jcmVhdGUpKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMDgxLSAqL1xcbmlvX3VyaW5nL2lvLXdxLmM6MTA4Mjp2b2lkIGlvX3dxX2hhc2hfd29yayhzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaywgdm9pZCAqdmFsKVxcbmlvX3VyaW5nL2lvLXdxLmMtMTA4My17XFxuLS1cXG5pb191cmluZy9pby13cS5jLTEwODktXFxuaW9fdXJpbmcvaW8td3EuYzoxMDkwOnN0YXRpYyBib29sIF9faW9fd3Ffd29ya2VyX2NhbmNlbChzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsXFxuaW9fdXJpbmcvaW8td3EuYy0xMDkxLVxcdFxcdFxcdFxcdCAgc3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaCxcXG5pb191cmluZy9pby13cS5jOjEwOTI6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaylcXG5pb191cmluZy9pby13cS5jLTEwOTMte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTAyLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTEwMzpzdGF0aWMgYm9vbCBpb193cV93b3JrZXJfY2FuY2VsKHN0cnVjdCBpb193b3JrZXIgKndvcmtlciwgdm9pZCAqZGF0YSlcXG5pb191cmluZy9pby13cS5jLTExMDQte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTExLVxcdHJhd19zcGluX2xvY2soXFx1MDAyNndvcmtlci1cXHUwMDNlbG9jayk7XFxuaW9fdXJpbmcvaW8td3EuYzoxMTEyOlxcdGlmIChfX2lvX3dxX3dvcmtlcl9jYW5jZWwod29ya2VyLCBtYXRjaCwgd29ya2VyLVxcdTAwM2VjdXJfd29yaykpXFxuaW9fdXJpbmcvaW8td3EuYy0xMTEzLVxcdFxcdG1hdGNoLVxcdTAwM2Vucl9ydW5uaW5nKys7XFxuLS1cXG5pb191cmluZy9pby13cS5jLTExMTgtXFxuaW9fdXJpbmcvaW8td3EuYzoxMTE5OnN0YXRpYyBpbmxpbmUgdm9pZCBpb193cV9yZW1vdmVfcGVuZGluZyhzdHJ1Y3QgaW9fd3EgKndxLFxcbmlvX3VyaW5nL2lvLXdxLmM6MTEyMDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcXG5pb191cmluZy9pby13cS5jOjExMjE6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBpb193cV93b3JrICp3b3JrLFxcbmlvX3VyaW5nL2lvLXdxLmM6MTEyMjpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGlvX3dxX3dvcmtfbm9kZSAqcHJldilcXG5pb191cmluZy9pby13cS5jLTExMjMte1xcbmlvX3VyaW5nL2lvLXdxLmMtMTEyNC1cXHR1bnNpZ25lZCBpbnQgaGFzaCA9IGlvX2dldF93b3JrX2hhc2god29yayk7XFxuaW9fdXJpbmcvaW8td3EuYzoxMTI1OlxcdHN0cnVjdCBpb193cV93b3JrICpwcmV2X3dvcmsgPSBOVUxMO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTEyNi1cXG5pb191cmluZy9pby13cS5jOjExMjc6XFx0aWYgKGlvX3dxX2lzX2hhc2hlZCh3b3JrKSBcXHUwMDI2XFx1MDAyNiB3b3JrID09IHdxLVxcdTAwM2VoYXNoX3RhaWxbaGFzaF0pIHtcXG5pb191cmluZy9pby13cS5jLTExMjgtXFx0XFx0aWYgKHByZXYpXFxuaW9fdXJpbmcvaW8td3EuYzoxMTI5OlxcdFxcdFxcdHByZXZfd29yayA9IGNvbnRhaW5lcl9vZihwcmV2LCBzdHJ1Y3QgaW9fd3Ffd29yaywgbGlzdCk7XFxuaW9fdXJpbmcvaW8td3EuYzoxMTMwOlxcdFxcdGlmIChwcmV2X3dvcmsgXFx1MDAyNlxcdTAwMjYgaW9fd3FfaXNfaGFzaGVkKHByZXZfd29yaykgXFx1MDAyNlxcdTAwMjZcXG5pb191cmluZy9pby13cS5jLTExMzEtXFx0XFx0ICAgIGlvX2dldF93b3JrX2hhc2gocHJldl93b3JrKSA9PSBoYXNoKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMTM5PXN0YXRpYyBib29sIGlvX2FjY3RfY2FuY2VsX3BlbmRpbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxcbmlvX3VyaW5nL2lvLXdxLmM6MTE0MDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcXG5pb191cmluZy9pby13cS5jLTExNDEtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaClcXG5pb191cmluZy9pby13cS5jLTExNDIte1xcbmlvX3VyaW5nL2lvLXdxLmM6MTE0MzpcXHRzdHJ1Y3QgaW9fd3Ffd29ya19ub2RlICpub2RlLCAqcHJldjtcXG5pb191cmluZy9pby13cS5jOjExNDQ6XFx0c3RydWN0IGlvX3dxX3dvcmsgKndvcms7XFxuaW9fdXJpbmcvaW8td3EuYy0xMTQ1LVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTQ3LVxcdHdxX2xpc3RfZm9yX2VhY2gobm9kZSwgcHJldiwgXFx1MDAyNmFjY3QtXFx1MDAzZXdvcmtfbGlzdCkge1xcbmlvX3VyaW5nL2lvLXdxLmM6MTE0ODpcXHRcXHR3b3JrID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBpb193cV93b3JrLCBsaXN0KTtcXG5pb191cmluZy9pby13cS5jLTExNDktXFx0XFx0aWYgKCFtYXRjaC1cXHUwMDNlZm4od29yaywgbWF0Y2gtXFx1MDAzZWRhdGEpKVxcbmlvX3VyaW5nL2lvLXdxLmMtMTE1MC1cXHRcXHRcXHRjb250aW51ZTtcXG5pb191cmluZy9pby13cS5jOjExNTE6XFx0XFx0aW9fd3FfcmVtb3ZlX3BlbmRpbmcod3EsIGFjY3QsIHdvcmssIHByZXYpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTE1Mi1cXHRcXHRyYXdfc3Bpbl91bmxvY2soXFx1MDAyNmFjY3QtXFx1MDAzZWxvY2spO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTYyLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTE2MzpzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcGVuZGluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXFxuaW9fdXJpbmcvaW8td3EuYy0xMTY0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTExNjgtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkrKykge1xcbmlvX3VyaW5nL2lvLXdxLmM6MTE2OTpcXHRcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX2dldF9hY2N0KHdxLCBpID09IDApO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTE3MC1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTE3OC1cXG5pb191cmluZy9pby13cS5jOjExNzk6c3RhdGljIHZvaWQgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxcbmlvX3VyaW5nL2lvLXdxLmMtMTE4MC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTgyLVxcdHJhd19zcGluX2xvY2soXFx1MDAyNmFjY3QtXFx1MDAzZXdvcmtlcnNfbG9jayk7XFxuaW9fdXJpbmcvaW8td3EuYzoxMTgzOlxcdGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTtcXG5pb191cmluZy9pby13cS5jLTExODQtXFx0cmF3X3NwaW5fdW5sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTg2LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTE4NzpzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXFxuaW9fdXJpbmcvaW8td3EuYy0xMTg4LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTk3LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTE5ODplbnVtIGlvX3dxX2NhbmNlbCBpb193cV9jYW5jZWxfY2Ioc3RydWN0IGlvX3dxICp3cSwgd29ya19jYW5jZWxfZm4gKmNhbmNlbCxcXG5pb191cmluZy9pby13cS5jLTExOTktXFx0XFx0XFx0XFx0ICB2b2lkICpkYXRhLCBib29sIGNhbmNlbF9hbGwpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTEyMTktXFx0ICovXFxuaW9fdXJpbmcvaW8td3EuYzoxMjIwOlxcdGlvX3dxX2NhbmNlbF9wZW5kaW5nX3dvcmsod3EsIFxcdTAwMjZtYXRjaCk7XFxuaW9fdXJpbmcvaW8td3EuYy0xMjIxLVxcdGlmIChtYXRjaC5ucl9wZW5kaW5nIFxcdTAwMjZcXHUwMDI2ICFtYXRjaC5jYW5jZWxfYWxsKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMjIzLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTIyNDpcXHRpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHdxLCBcXHUwMDI2bWF0Y2gpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTIyNS1cXHRpZiAobWF0Y2gubnJfcnVubmluZyBcXHUwMDI2XFx1MDAyNiAhbWF0Y2guY2FuY2VsX2FsbClcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTIzNC1cXG5pb191cmluZy9pby13cS5jOjEyMzU6c3RhdGljIGludCBpb193cV9oYXNoX3dha2Uoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsIHVuc2lnbmVkIG1vZGUsXFxuaW9fdXJpbmcvaW8td3EuYy0xMjM2LVxcdFxcdFxcdCAgICBpbnQgc3luYywgdm9pZCAqa2V5KVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMjQ0LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpKyspIHtcXG5pb191cmluZy9pby13cS5jOjEyNDU6XFx0XFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBcXHUwMDI2d3EtXFx1MDAzZWFjY3RbaV07XFxuaW9fdXJpbmcvaW8td3EuYy0xMjQ2LVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMjUzLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTI1NDpzdHJ1Y3QgaW9fd3EgKmlvX3dxX2NyZWF0ZSh1bnNpZ25lZCBib3VuZGVkLCBzdHJ1Y3QgaW9fd3FfZGF0YSAqZGF0YSlcXG5pb191cmluZy9pby13cS5jLTEyNTUte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMjc3LVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ3cS1cXHUwMDNld2FpdC5lbnRyeSk7XFxuaW9fdXJpbmcvaW8td3EuYzoxMjc4OlxcdHdxLVxcdTAwM2V3YWl0LmZ1bmMgPSBpb193cV9oYXNoX3dha2U7XFxuaW9fdXJpbmcvaW8td3EuYy0xMjc5LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpKyspIHtcXG5pb191cmluZy9pby13cS5jOjEyODA6XFx0XFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBcXHUwMDI2d3EtXFx1MDAzZWFjY3RbaV07XFxuaW9fdXJpbmcvaW8td3EuYy0xMjgxLVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMjk0LVxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2d3EtXFx1MDAzZXdvcmtlcl9kb25lKTtcXG5pb191cmluZy9pby13cS5jOjEyOTU6XFx0cmV0ID0gY3B1aHBfc3RhdGVfYWRkX2luc3RhbmNlX25vY2FsbHMoaW9fd3Ffb25saW5lLCBcXHUwMDI2d3EtXFx1MDAzZWNwdWhwX25vZGUpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTI5Ni1cXHRpZiAocmV0KSB7XFxuLS1cXG5pb191cmluZy9pby13cS5jLTEzMDItZXJyOlxcbmlvX3VyaW5nL2lvLXdxLmM6MTMwMzpcXHRpb193cV9wdXRfaGFzaChkYXRhLVxcdTAwM2VoYXNoKTtcXG5pb191cmluZy9pby13cS5jLTEzMDQtXFx0ZnJlZV9jcHVtYXNrX3Zhcih3cS1cXHUwMDNlY3B1X21hc2spO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMzA5PXN0YXRpYyBib29sIGlvX3Rhc2tfd29ya19tYXRjaChzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IsIHZvaWQgKmRhdGEpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTEzMTgtXFxuaW9fdXJpbmcvaW8td3EuYzoxMzE5OnZvaWQgaW9fd3FfZXhpdF9zdGFydChzdHJ1Y3QgaW9fd3EgKndxKVxcbmlvX3VyaW5nL2lvLXdxLmMtMTMyMC17XFxuLS1cXG5pb191cmluZy9pby13cS5jLTEzMjMtXFxuaW9fdXJpbmcvaW8td3EuYzoxMzI0OnN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF90d19jcmVhdGUoc3RydWN0IGlvX3dxICp3cSlcXG5pb191cmluZy9pby13cS5jLTEzMjUte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMzQxLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTM0MjpzdGF0aWMgdm9pZCBpb193cV9leGl0X3dvcmtlcnMoc3RydWN0IGlvX3dxICp3cSlcXG5pb191cmluZy9pby13cS5jLTEzNDMte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMzQ4LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTM0OTpcXHRpb193cV9jYW5jZWxfdHdfY3JlYXRlKHdxKTtcXG5pb191cmluZy9pby13cS5jLTEzNTAtXFxuaW9fdXJpbmcvaW8td3EuYy0xMzUxLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5pb191cmluZy9pby13cS5jOjEzNTI6XFx0aW9fd3FfZm9yX2VhY2hfd29ya2VyKHdxLCBpb193cV93b3JrZXJfd2FrZSwgTlVMTCk7XFxuaW9fdXJpbmcvaW8td3EuYy0xMzUzLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMzgzLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTM4NDpzdGF0aWMgdm9pZCBpb193cV9kZXN0cm95KHN0cnVjdCBpb193cSAqd3EpXFxuaW9fdXJpbmcvaW8td3EuYy0xMzg1LXtcXG5pb191cmluZy9pby13cS5jLTEzODYtXFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhIG1hdGNoID0ge1xcbmlvX3VyaW5nL2lvLXdxLmM6MTM4NzpcXHRcXHQuZm5cXHRcXHQ9IGlvX3dxX3dvcmtfbWF0Y2hfYWxsLFxcbmlvX3VyaW5nL2lvLXdxLmMtMTM4OC1cXHRcXHQuY2FuY2VsX2FsbFxcdD0gdHJ1ZSxcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTM5MC1cXG5pb191cmluZy9pby13cS5jOjEzOTE6XFx0Y3B1aHBfc3RhdGVfcmVtb3ZlX2luc3RhbmNlX25vY2FsbHMoaW9fd3Ffb25saW5lLCBcXHUwMDI2d3EtXFx1MDAzZWNwdWhwX25vZGUpO1xcbmlvX3VyaW5nL2lvLXdxLmM6MTM5MjpcXHRpb193cV9jYW5jZWxfcGVuZGluZ193b3JrKHdxLCBcXHUwMDI2bWF0Y2gpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTM5My1cXHRmcmVlX2NwdW1hc2tfdmFyKHdxLVxcdTAwM2VjcHVfbWFzayk7XFxuaW9fdXJpbmcvaW8td3EuYzoxMzk0OlxcdGlvX3dxX3B1dF9oYXNoKHdxLVxcdTAwM2VoYXNoKTtcXG5pb191cmluZy9pby13cS5jLTEzOTUtXFx0a2ZyZWUod3EpO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMzk3LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTM5ODp2b2lkIGlvX3dxX3B1dF9hbmRfZXhpdChzdHJ1Y3QgaW9fd3EgKndxKVxcbmlvX3VyaW5nL2lvLXdxLmMtMTM5OS17XFxuLS1cXG5pb191cmluZy9pby13cS5jLTE0MDEtXFxuaW9fdXJpbmcvaW8td3EuYzoxNDAyOlxcdGlvX3dxX2V4aXRfd29ya2Vycyh3cSk7XFxuaW9fdXJpbmcvaW8td3EuYzoxNDAzOlxcdGlvX3dxX2Rlc3Ryb3kod3EpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTQwNC19XFxuLS1cXG5pb191cmluZy9pby13cS5jPTE0MDY9c3RydWN0IG9ubGluZV9kYXRhIHtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTQxMC1cXG5pb191cmluZy9pby13cS5jOjE0MTE6c3RhdGljIGJvb2wgaW9fd3Ffd29ya2VyX2FmZmluaXR5KHN0cnVjdCBpb193b3JrZXIgKndvcmtlciwgdm9pZCAqZGF0YSlcXG5pb191cmluZy9pby13cS5jLTE0MTIte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xNDIxLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTQyMjpzdGF0aWMgaW50IF9faW9fd3FfY3B1X29ubGluZShzdHJ1Y3QgaW9fd3EgKndxLCB1bnNpZ25lZCBpbnQgY3B1LCBib29sIG9ubGluZSlcXG5pb191cmluZy9pby13cS5jLTE0MjMte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xNDI5LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5pb191cmluZy9pby13cS5jOjE0MzA6XFx0aW9fd3FfZm9yX2VhY2hfd29ya2VyKHdxLCBpb193cV93b3JrZXJfYWZmaW5pdHksIFxcdTAwMjZvZCk7XFxuaW9fdXJpbmcvaW8td3EuYy0xNDMxLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xNDM0LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTQzNTpzdGF0aWMgaW50IGlvX3dxX2NwdV9vbmxpbmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXFxuaW9fdXJpbmcvaW8td3EuYy0xNDM2LXtcXG4tLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzoxOS4xMTA2NTI1MTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExODUxODA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElPLVdRIEluZnJhc3RydWN0dXJlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGlvX3dxYCBidXNpbmVzcy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIGxpZmVjeWNsZSDigJMgc3BlY2lmaWNhbGx5LCBgaW9fd3FfY3JlYXRlYCwgYGlvX3dxX3B1dF9hbmRfZXhpdGAsIGBpb193cV9lbnF1ZXVlYCwgYW5kIGBpb193cV9jYW5jZWxfY2JgLiBJJ20gc3RhcnRpbmcgYnkgemVyb2luZyBpbiBvbiBgaW9fd3FfY2FuY2VsX2NiYC4gVGhlIGZhY3QgdGhhdCBpdCdzICpub3QqIGEgc3RhdGljIGZ1bmN0aW9uIGlzIHNpZ25pZmljYW50LCBpbW1lZGlhdGVseSBpbXBseWluZyBpdCdzIGRlc2lnbmVkIGZvciBleHRlcm5hbCBpbnRlcmFjdGlvbiBvciBwZXJoYXBzIGEgbW9kdWxlJ3MgdXNlLlxuXG5Ob3csIGxldCdzIHNoaWZ0IGdlYXJzIHNsaWdodGx5IGFuZCBjb25zaWRlciBjb25maWd1cmF0aW9uLiBBcmUgdGhlcmUgYW55IHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGltcGFjdGluZyB0aGlzPyBJIG5lZWQgdG8ga25vdyB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgdGhpcyBjb2RlIGlzIGV2ZW4gYnVpbHQuIFRoZSBmaWxlbmFtZSBgaW9fdXJpbmcvaW8td3EuY2AgaXMgc3VnZ2VzdGl2ZSDigJMgbXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCBpdCdzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19JT19VUklOR2AgaXMgc2V0LiBUbyBiZSBjZXJ0YWluLCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIGBpb191cmluZy9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGF0IGRlcGVuZGVuY3kuIFRoaXMgaW5mb3JtYXRpb24gaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIGl0cyB1c2UgYW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIElPX1VSSU5HIGVjb3N5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNTQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzoyMy4yMjkxNzMzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM1NjYxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpby13cVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfSU9fVVJJTkdfWkNSWClcXHQrPSB6Y3J4Lm9cXG5pb191cmluZy9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfSU9fV1EpXFx0XFx0Kz0gaW8td3Eub1xcbmlvX3VyaW5nL01ha2VmaWxlLTIxLW9iai0kKENPTkZJR19GVVRFWClcXHRcXHQrPSBmdXRleC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjIzOjIzLjI3NTUzNTU2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg5MDM2ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJTyBXb3JrcXVldWUgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBzZWUuIE15IG1lbnRhbCBtYXAgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhhdCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUgaXMgbGlrZWx5IGBDT05GSUdfSU9fV1FgLiBHaXZlbiB3aGF0IEknbSBkZWFsaW5nIHdpdGgsIHRoZSBjb250ZXh0IHBvaW50cyB0b3dhcmRzIHNvbWV0aGluZyByZWxhdGVkIHRvIEkvTyB3b3JrcXVldWVzLCB3aGljaCBpcyBwcmV0dHkgc2VsZi1leHBsYW5hdG9yeS4gTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uIGZvciB0aGlzIGNvbmZpZ3VyYXRpb24uIEdpdmVuIHRoZSB0eXBpY2FsIGtlcm5lbCBidWlsZCBzeXN0ZW0gc3RydWN0dXJlLCBgaW5pdC9LY29uZmlnYCBpcyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBnZW5lcmFsIHN5c3RlbSBvcHRpb25zLiBIb3dldmVyLCBzaW5jZSB0aGUgcHJvbXB0IHNwZWNpZmllZCBgSU9fVVJJTkdgLCBJIHdvdWxkIGxlYW4gdG93YXJkIGNoZWNraW5nIGBpb191cmluZy9LY29uZmlnYCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGBDT05GSUdfSU9fV1FgLiBUaGUgbW9kdWxlIHN0cnVjdHVyZSBzaG91bGQgcHJvdmlkZSBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHNwZWNpZmljIGZlYXR1cmUgc2V0dGluZ3MuIFRoZSBsb2NhdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gd2lsbCBwcm92aWRlIGluc2lnaHQgaW50byB0aGUgY29udGV4dCBhbmQgZGVwZW5kZW5jaWVzIG9mIHRoZSBJTyB3b3JrcXVldWUgaW1wbGVtZW50YXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRob3NlIEtjb25maWcgZmlsZXMgYW5kIHNlZSB3aGF0IHRoZXkgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzcwOSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjIzOjI2Ljk2NDU3NTQyMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3OTI2MjYyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU9fV1FcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9NDIxPXNvdXJjZSBcXFwiZnMvdW5pY29kZS9LY29uZmlnXFxcIlxcbmZzL0tjb25maWctNDIyLVxcbmZzL0tjb25maWc6NDIzOmNvbmZpZyBJT19XUVxcbmZzL0tjb25maWctNDI0LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjM6MjguNzQzODQ0NDE0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNjQ3MDU2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYElPX1dRYCBCb29sZWFuKipcblxuQWxyaWdodCwgc28gYElPX1dRYCBpcyBhIGJvb2xlYW4sIGFuZCBteSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZmlndXJlIG91dCBpdHMgc2VsZWN0aW9uIGNyaXRlcmlhLiBXaGF0IGNvbmRpdGlvbnMgb3IgY29kZSBwYXRocyBhY3R1YWxseSAqc2V0KiB0aGlzIGZsYWc/IEl0J3MgYSBrZXkgcGllY2Ugb2Ygc3RhdGUsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIG9yaWdpbnMgaXMgY3JpdGljYWwgZm9yIGRlYnVnZ2luZyBvciBvcHRpbWl6aW5nIGFueXRoaW5nIHJlbGF0ZWQgdG8gaXQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIGNvZGUgYW5kIHBpbnBvaW50IHByZWNpc2VseSAqd2hlcmUqIHRoaXMgYm9vbGVhbiBpcyB0b2dnbGVkLiBBcmUgd2UgZGVhbGluZyB3aXRoIGEgZ2xvYmFsIGZsYWcsIGEgcGVyLW9iamVjdCBhdHRyaWJ1dGUsIG9yIHNvbWV0aGluZyBtb3JlIGNvbnRleHQtZGVwZW5kZW50PyBUaGUgZ29hbCBpcyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIGxpZmVjeWNsZSBzbyBJIGNhbiBhbnRpY2lwYXRlIGhvdyBpdCBiZWhhdmVzIGFuZCB3aHkgaXQgbWlnaHQgYmUgaW4gYSBwYXJ0aWN1bGFyIHN0YXRlIGF0IGFueSBnaXZlbiBwb2ludC4gTGV0J3MgZGlnIGluIGFuZCBmaW5kIHRob3NlIHdyaXRlIG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDQ1LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjM6MzIuOTA4NTUyNTU3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkwMTY4NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBJT19XUVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5MTg9Y29uZmlnIElPX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5MTktXFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbmluaXQvS2NvbmZpZzoxOTIwOlxcdHNlbGVjdCBJT19XUVxcbmluaXQvS2NvbmZpZy0xOTIxLVxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzozNC41OTg3MjYwODhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg2OTA3MzY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgSSdtIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDpcblxuKipJT19VUklORyBhbmQgSU9fV1E6IEEgUXVpY2sgU2NhbioqXG5cbkFscmlnaHQsIHRoZSBjb3JlIGNvbmNlcHQgSSdtIHdvcmtpbmcgd2l0aCBpcyBgSU9fVVJJTkdgIHNlbGVjdGluZyBgSU9fV1FgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCBsZXQncyBnZXQgYElPX1VSSU5HYCBhY3RpdmF0ZWQsIHRoYXQncyBzdGVwIG9uZS5cIiBCdXQgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiwgYSBnb29kIHByYWN0aWNlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGVjb3N5c3RlbS4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IGRpcmVjdCBkZXBlbmRlbmNpZXMgYElPX1dRYCBtYXkgaGF2ZS4gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzIEkgbmVlZCB0byBoYW5kbGUgZmlyc3Q/IEFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHRvIGJlIGF3YXJlIG9mPyBCZXN0IHRvIGdldCB0aGF0IGxheSBvZiB0aGUgbGFuZCBub3csIGJlZm9yZSBJIHdhc3RlIHRpbWUgbWFraW5nIGEgY29uZmlndXJhdGlvbiBhbmQgZmluZGluZyBvdXQgbGF0ZXIgdGhhdCBJIG5lZWQgdG8gdHdlYWsgaXQgZHVlIHRvIGFuIHVuZm9yZXNlZW4gZGVwZW5kZW5jeSBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzNTMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzo0MC40Njc4MDI0MjFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTYxMjkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU9fV1FcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTQyMT1zb3VyY2UgXFxcImZzL3VuaWNvZGUvS2NvbmZpZ1xcXCJcXG5mcy9LY29uZmlnLTQyMi1cXG5mcy9LY29uZmlnOjQyMzpjb25maWcgSU9fV1FcXG5mcy9LY29uZmlnLTQyNC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjIzOjQwLjY5OTQyMDZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg2MDM2ODMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgdGhlIElPX1VSSU5HIEJvb2xlYW4qKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNpbXBsZSBgYm9vbGAgaXNzdWUgaGVyZSwgbWVhbmluZyBgSU9fVVJJTkdgIGlzIHRoZSBmbGFnIHRvIGZvY3VzIG9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkIGluIHRoaXMgYXJlYS4gTGV0J3Mgc2VlLi4uIEkndmUgZ290IGBpb193cV9jcmVhdGVgLCBgaW9fd3FfcHV0X2FuZF9leGl0YCwgYGlvX3dxX2VucXVldWVgLCBhbmQgYGlvX3dxX2NhbmNlbF9jYmAuXG5cbkFoYSEgTm93IEkgcmVtZW1iZXIsIHRoZSBidWcgbXVzdCBiZSBsdXJraW5nIHdpdGhpbiBgaW9fd29ya2VyX2NhbmNlbF9jYmAuIFRoaXMgaXMgY2FsbGVkIGZyb20gYGlvX3dvcmtlcl9leGl0YCBhbmQgYGlvX3dxX2NhbmNlbF90d19jcmVhdGVgLCByaWdodD8gQW5kIGBpb193cV9jYW5jZWxfdHdfY3JlYXRlYCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBpb193cV9leGl0X3dvcmtlcnNgIGFuZCBgaW9fcXVldWVfd29ya2VyX2NyZWF0ZWAuIE9rYXksIHRoaXMgaXMgc3RhcnRpbmcgdG8gbWFrZSBtb3JlIHNlbnNlLiBgaW9fcXVldWVfd29ya2VyX2NyZWF0ZWAgZ2V0cyBjYWxsZWQgZnJvbSBib3RoIGBpb193cV9kZWNfcnVubmluZ2AgYW5kIGBpb193cV9jcmVhdGVfd29ya2VyYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgaW9fd3FfZW5xdWV1ZWAuIEFuZCB3ZSdyZSBzZWVpbmcgdGhhdCBgaW9fd3FfZGVjX3J1bm5pbmdgIGlzIGNhbGxlZCBmcm9tIGBpb193b3JrZXJfZXhpdGAgYW5kIGBpb193cV93b3JrZXJfc2xlZXBpbmdgLiBOb3cgSSdtIGdldHRpbmcgYSBsaXR0bGUgY29uZnVzZWQ6IGBpb193cV93b3JrZXJfc2xlZXBpbmdgIGlzIGNhbGxlZCBmcm9tIGBpb193cV93b3JrZXJgPyBObywgd2FpdCBhIG1pbnV0ZS4uLiBpdCBsb29rcyBsaWtlIGl0J3MgdGhlIHNjaGVkdWxlciB0aGF0IGNhbGxzIGBpb193cV93b3JrZXJfc2xlZXBpbmdgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBwYXJ0IGFuZCBzdGFydCBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGNhbGwgdG8gYGlvX3dxX3dvcmtlcl9zbGVlcGluZ2AgdG8gY29uZmlybSB0aGUgY2F1c2Ugb2YgdGhlIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODY1OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzo0Ny41NTk3OTEzNzZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTE5NDYyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fd3Ffd29ya2VyX3NsZWVwaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pby13cS5jPTc1Nj12b2lkIGlvX3dxX3dvcmtlcl9ydW5uaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy03NzMtICovXFxuaW9fdXJpbmcvaW8td3EuYzo3NzQ6dm9pZCBpb193cV93b3JrZXJfc2xlZXBpbmcoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuaW9fdXJpbmcvaW8td3EuYy03NzUte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuaD02Nj1lbnVtIGlvX3dxX2NhbmNlbCBpb193cV9jYW5jZWxfY2Ioc3RydWN0IGlvX3dxICp3cSwgd29ya19jYW5jZWxfZm4gKmNhbmNlbCxcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmgtNjktI2lmIGRlZmluZWQoQ09ORklHX0lPX1dRKVxcbmlvX3VyaW5nL2lvLXdxLmg6NzA6ZXh0ZXJuIHZvaWQgaW9fd3Ffd29ya2VyX3NsZWVwaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTtcXG5pb191cmluZy9pby13cS5oLTcxLWV4dGVybiB2b2lkIGlvX3dxX3dvcmtlcl9ydW5uaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTtcXG5pb191cmluZy9pby13cS5oLTcyLSNlbHNlXFxuaW9fdXJpbmcvaW8td3EuaDo3MzpzdGF0aWMgaW5saW5lIHZvaWQgaW9fd3Ffd29ya2VyX3NsZWVwaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmlvX3VyaW5nL2lvLXdxLmgtNzQte1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz03MjYwPXN0YXRpYyBpbmxpbmUgdm9pZCBzY2hlZF9zdWJtaXRfd29yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzI3OC1cXHRlbHNlIGlmICh0YXNrX2ZsYWdzIFxcdTAwMjYgUEZfSU9fV09SS0VSKVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzI3OTpcXHRcXHRpb193cV93b3JrZXJfc2xlZXBpbmcodHNrKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTcyODAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjIzOjQ5LjE1MTc0Mjg5NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njc2MjY4NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipQaW5wb2ludGluZyB0aGUgS2V5IFBsYXllcnMgaW4gSS9PIFdvcmtxdWV1ZSBTbGVlcC9XYWtlLXVwKipcblxuUmlnaHQsIHNvIGBpb193cV93b3JrZXJfc2xlZXBpbmdgIGlzIHRyaWdnZXJlZCBieSB0aGUgc2NoZWR1bGVyIGl0c2VsZi4gVGhhdCdzIHRoZSBjcnVjaWFsIGhpbnQuIFRoaXMgdGVsbHMgbWUgdGhhdCBJIG5lZWQgdG8gem9vbSBpbiBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgY29udHJvbCB3b3JrcXVldWUgY3JlYXRpb24sIGRlc3RydWN0aW9uLCBhbmQgdGFzayBlbnF1ZXVlaW5nIGFuZCBjYW5jZWxpbmcuIExldCdzIHNlZS4uLiB0aGUgcHJpbWFyeSBzdXNwZWN0cyBhcmU6IGBpb193cV9jcmVhdGVgLCBgaW9fd3FfcHV0X2FuZF9leGl0YCwgYGlvX3dxX2VucXVldWVgLCBhbmQgYGlvX3dxX2NhbmNlbF9jYmAuIFRob3NlIHNlZW0gbGlrZSB0aGUgbG9naWNhbCBwbGFjZXMgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB0aGUgc2xlZXAvd2FrZXVwIG1lY2hhbmlzbSBmcm9tIHRoaXMgdmFudGFnZSBwb2ludC4gTm93LCBpcyBgaW9fd3FfY2FuY2VsX2NiYCByZWFsbHkgYSB1c2VmdWwgZm9jYWwgcG9pbnQgaW4gdGhpcyBpbnZlc3RpZ2F0aW9uPyBHb3R0YSBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgc3Ryb25nIGNvbm5lY3Rpb24gdG8gdGhlIHByb2Nlc3MtIGxldCdzIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MTMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzo1My44MjgwMTQzNTRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Njk3NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3dxX2NhbmNlbF9jYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvY2FuY2VsLmM9Nzg9c3RhdGljIGludCBpb19hc3luY19jYW5jZWxfb25lKHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmMtODgtXFx0YWxsID0gY2QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKElPUklOR19BU1lOQ19DQU5DRUxfQUxMfElPUklOR19BU1lOQ19DQU5DRUxfQU5ZKTtcXG5pb191cmluZy9jYW5jZWwuYzo4OTpcXHRjYW5jZWxfcmV0ID0gaW9fd3FfY2FuY2VsX2NiKHRjdHgtXFx1MDAzZWlvX3dxLCBpb19jYW5jZWxfY2IsIGNkLCBhbGwpO1xcbmlvX3VyaW5nL2NhbmNlbC5jLTkwLVxcdHN3aXRjaCAoY2FuY2VsX3JldCkge1xcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmM9NDg5PXN0YXRpYyBfX2NvbGQgYm9vbCBpb191cmluZ190cnlfY2FuY2VsX2lvd3Eoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYy01MDUtXFx0XFx0XFx0Y29udGludWU7XFxuaW9fdXJpbmcvY2FuY2VsLmM6NTA2OlxcdFxcdGNyZXQgPSBpb193cV9jYW5jZWxfY2IodGN0eC1cXHUwMDNlaW9fd3EsIGlvX2NhbmNlbF9jdHhfY2IsIGN0eCwgdHJ1ZSk7XFxuaW9fdXJpbmcvY2FuY2VsLmMtNTA3LVxcdFxcdHJldCB8PSAoY3JldCAhPSBJT19XUV9DQU5DRUxfTk9URk9VTkQpO1xcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmM9NTE1PV9fY29sZCBib29sIGlvX3VyaW5nX3RyeV9jYW5jZWxfcmVxdWVzdHMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYy01MzktXFx0XFx0ICovXFxuaW9fdXJpbmcvY2FuY2VsLmM6NTQwOlxcdFxcdGNyZXQgPSBpb193cV9jYW5jZWxfY2IodGN0eC1cXHUwMDNlaW9fd3EsIGlvX2NhbmNlbF90YXNrX2NiLFxcbmlvX3VyaW5nL2NhbmNlbC5jLTU0MS1cXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmNhbmNlbCwgdHJ1ZSk7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTExODc9c3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTk3LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTE5ODplbnVtIGlvX3dxX2NhbmNlbCBpb193cV9jYW5jZWxfY2Ioc3RydWN0IGlvX3dxICp3cSwgd29ya19jYW5jZWxfZm4gKmNhbmNlbCxcXG5pb191cmluZy9pby13cS5jLTExOTktXFx0XFx0XFx0XFx0ICB2b2lkICpkYXRhLCBib29sIGNhbmNlbF9hbGwpXFxuLS1cXG5pb191cmluZy9pby13cS5oPTY0PXR5cGVkZWYgYm9vbCAod29ya19jYW5jZWxfZm4pKHN0cnVjdCBpb193cV93b3JrICosIHZvaWQgKik7XFxuaW9fdXJpbmcvaW8td3EuaC02NS1cXG5pb191cmluZy9pby13cS5oOjY2OmVudW0gaW9fd3FfY2FuY2VsIGlvX3dxX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd3EgKndxLCB3b3JrX2NhbmNlbF9mbiAqY2FuY2VsLFxcbmlvX3VyaW5nL2lvLXdxLmgtNjctXFx0XFx0XFx0XFx0XFx0dm9pZCAqZGF0YSwgYm9vbCBjYW5jZWxfYWxsKTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9MjMxOD1zdGF0aWMgX19jb2xkIHZvaWQgaW9fcmluZ19leGl0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMzU3LVxcdFxcdFxcdGlmICh0c2sgXFx1MDAyNlxcdTAwMjYgdHNrLVxcdTAwM2Vpb191cmluZyBcXHUwMDI2XFx1MDAyNiB0c2stXFx1MDAzZWlvX3VyaW5nLVxcdTAwM2Vpb193cSlcXG5pb191cmluZy9pb191cmluZy5jOjIzNTg6XFx0XFx0XFx0XFx0aW9fd3FfY2FuY2VsX2NiKHRzay1cXHUwMDNlaW9fdXJpbmctXFx1MDAzZWlvX3dxLFxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjM1OS1cXHRcXHRcXHRcXHRcXHRcXHRpb19jYW5jZWxfY3R4X2NiLCBjdHgsIHRydWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzo1My44NzU3MTg3OTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExNjQzODU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBtZW50YWwgZ2VhcnMgYXJlIHR1cm5pbmcuLi5cblxuKipUcmFja2luZyBEb3duIENhbGxlcnMgYW5kIFVuZGVyc3RhbmRpbmcgQ29udHJvbCBGbG93KipcblxuUmlnaHQsIHNvIGBpb193cV9jYW5jZWxfY2JgLi4uIEkgcmVjYWxsIHRoYXQgdGhpcyBjYWxsYmFjayBpcyBkZWZpbml0ZWx5IHRyaWdnZXJlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXMuIEl0J3MgY2FsbGVkIGJ5IGBpb19hc3luY19jYW5jZWxfb25lYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGhhbmRsaW5nIGFzeW5jaHJvbm91cyBjYW5jZWxsYXRpb24sIGFuZCBhbHNvIGJ5IGBpb191cmluZ190cnlfY2FuY2VsX3JlcXVlc3RzYCB3aGljaCBpcyByZWxhdGVkIHRvIEkvTyByaW5nIGNhbmNlbGxhdGlvbiBhdHRlbXB0cywgYW5kIGZpbmFsbHkgYnkgYGlvX3JpbmdfZXhpdF93b3JrYCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBjbGVhbiB1cCBwcm9jZXNzLiBUaGF0IG1ha2VzIGl0IGEgc29saWQgZm9jdXMgZm9yIG15IGFuYWx5c2lzLiBUaG9zZSB0aHJlZSBwYXRocyBtYWtlIGl0IGZhaXJseSBjZW50cmFsIHRvIEkvTyBtYW5hZ2VtZW50LlxuXG5IbW0sIG5vdyBsZXQgbWUgY29uc2lkZXIuLi4gd2hhdCBhYm91dCBgaW9fd3FfY3JlYXRlYD8gV2hlcmUgZG9lcyB0aGF0IGZpdCBpbj8gSSBzaG91bGQgcHJvYmFibHkgcmV2aWV3IHRoZSBwbGFjZXMgdGhhdCBjYWxsICp0aGF0KiBmdW5jdGlvbiB0b28uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MDIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzo1Ny45OTIxNjEwNjdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMzAzMTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3dxX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW8td3EuYz0yOTU9c3RhdGljIGJvb2wgaW9fYWNjdF9hY3RpdmF0ZV9mcmVlX3dvcmtlcihzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdClcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMzI1LSAqL1xcbmlvX3VyaW5nL2lvLXdxLmM6MzI2OnN0YXRpYyBib29sIGlvX3dxX2NyZWF0ZV93b3JrZXIoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpXFxuaW9fdXJpbmcvaW8td3EuYy0zMjcte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMDI4PXZvaWQgaW9fd3FfZW5xdWV1ZShzdHJ1Y3QgaW9fd3EgKndxLCBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaylcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTA2MS1cXG5pb191cmluZy9pby13cS5jOjEwNjI6XFx0XFx0ZGlkX2NyZWF0ZSA9IGlvX3dxX2NyZWF0ZV93b3JrZXIod3EsIGFjY3QpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTA2My1cXHRcXHRpZiAobGlrZWx5KGRpZF9jcmVhdGUpKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMjM1PXN0YXRpYyBpbnQgaW9fd3FfaGFzaF93YWtlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMjUzLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTI1NDpzdHJ1Y3QgaW9fd3EgKmlvX3dxX2NyZWF0ZSh1bnNpZ25lZCBib3VuZGVkLCBzdHJ1Y3QgaW9fd3FfZGF0YSAqZGF0YSlcXG5pb191cmluZy9pby13cS5jLTEyNTUte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuaD0zNz1zdHJ1Y3QgaW9fd3FfZGF0YSB7XFxuLS1cXG5pb191cmluZy9pby13cS5oLTQxLVxcbmlvX3VyaW5nL2lvLXdxLmg6NDI6c3RydWN0IGlvX3dxICppb193cV9jcmVhdGUodW5zaWduZWQgYm91bmRlZCwgc3RydWN0IGlvX3dxX2RhdGEgKmRhdGEpO1xcbmlvX3VyaW5nL2lvLXdxLmgtNDMtdm9pZCBpb193cV9leGl0X3N0YXJ0KHN0cnVjdCBpb193cSAqd3EpO1xcbi0tXFxuaW9fdXJpbmcvdGN0eC5jPTE2PXN0YXRpYyBzdHJ1Y3QgaW9fd3EgKmlvX2luaXRfd3Ffb2ZmbG9hZChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL3RjdHguYy00Mi1cXG5pb191cmluZy90Y3R4LmM6NDM6XFx0cmV0dXJuIGlvX3dxX2NyZWF0ZShjb25jdXJyZW5jeSwgXFx1MDAyNmRhdGEpO1xcbmlvX3VyaW5nL3RjdHguYy00NC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjIzOjU4LjA1MzQ2ODA1MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTcyNjQ5OTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIElPX3VyaW5nIFdvcmtxdWV1ZSBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGlvX3VyaW5nYCBjb2RlLCBhbmQgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBhcmVhcywgZXNwZWNpYWxseSByZWdhcmRpbmcgdGhlIHdvcmtxdWV1ZXMuIGBpb193cV9jcmVhdGVgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGp1bXBzIG91dC4gSSBzZWUgaXQncyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgaW9faW5pdF93cV9vZmZsb2FkYCB3aXRoaW4gYGlvX3VyaW5nL3RjdHguY2AuIFRoYXQgbWFrZXMgYGlvX3dxX2NyZWF0ZWAgYSBnb29kIHN5bWJvbCB0byBjb25jZW50cmF0ZSBvbiBmaXJzdC5cblxuSG1tLCB3aGlsZSBJJ20gYXQgaXQsIEkgc2hvdWxkIGNvbnNpZGVyIHRoZSBjb21wbGVtZW50YXJ5IGZ1bmN0aW9uIHRvIGBpb193cV9jcmVhdGVgLiBUaGUgbmFtZSBgaW9fd3FfcHV0X2FuZF9leGl0YCBjYXRjaGVzIG15IGV5ZS4gSXMgaXQgdGhlIGtleSB0byBjbGVhbnVwIGFuZCB0ZWFyZG93bj8gSXQncyBwcm9iYWJseSB3b3J0aCBhZGRpbmcgdGhhdCB0byBteSBtZW50YWwgbWFwIG9mIHRoZSBjb3JlIHdvcmtxdWV1ZSBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTYzNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjI0OjA1LjAyNjEyMjM0N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxOTkzNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3dxX3B1dF9hbmRfZXhpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW8td3EuYz0xMzg0PXN0YXRpYyB2b2lkIGlvX3dxX2Rlc3Ryb3koc3RydWN0IGlvX3dxICp3cSlcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTM5Ny1cXG5pb191cmluZy9pby13cS5jOjEzOTg6dm9pZCBpb193cV9wdXRfYW5kX2V4aXQoc3RydWN0IGlvX3dxICp3cSlcXG5pb191cmluZy9pby13cS5jLTEzOTkte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuaD00Mz12b2lkIGlvX3dxX2V4aXRfc3RhcnQoc3RydWN0IGlvX3dxICp3cSk7XFxuaW9fdXJpbmcvaW8td3EuaDo0NDp2b2lkIGlvX3dxX3B1dF9hbmRfZXhpdChzdHJ1Y3QgaW9fd3EgKndxKTtcXG5pb191cmluZy9pby13cS5oLTQ1LXZvaWQgaW9fd3Ffc2V0X2V4aXRfb25faWRsZShzdHJ1Y3QgaW9fd3EgKndxLCBib29sIGVuYWJsZSk7XFxuLS1cXG5pb191cmluZy90Y3R4LmM9MTQ1PWludCBfX2lvX3VyaW5nX2FkZF90Y3R4X25vZGUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXFxuLS1cXG5pb191cmluZy90Y3R4LmMtMTg5LVxcdFxcdFxcdGlvX3dxX2V4aXRfc3RhcnQodGN0eC1cXHUwMDNlaW9fd3EpO1xcbmlvX3VyaW5nL3RjdHguYzoxOTA6XFx0XFx0XFx0aW9fd3FfcHV0X2FuZF9leGl0KHRjdHgtXFx1MDAzZWlvX3dxKTtcXG5pb191cmluZy90Y3R4LmMtMTkxLVxcdFxcdH1cXG4tLVxcbmlvX3VyaW5nL3RjdHguYz0yNDM9X19jb2xkIHZvaWQgaW9fdXJpbmdfY2xlYW5fdGN0eChzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eClcXG4tLVxcbmlvX3VyaW5nL3RjdHguYy0yNTctXFx0XFx0ICovXFxuaW9fdXJpbmcvdGN0eC5jOjI1ODpcXHRcXHRpb193cV9wdXRfYW5kX2V4aXQod3EpO1xcbmlvX3VyaW5nL3RjdHguYy0yNTktXFx0XFx0dGN0eC1cXHUwMDNlaW9fd3EgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyNDowNS4yNDgxMjI2MTdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNDU0NzE5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRm9jdXNpbmcgb24gSU8gQ29tcGxldGlvbiBRdWV1ZXMqKlxuXG5BbHJpZ2h0LCB5ZXAsIGBpb193cV9wdXRfYW5kX2V4aXRgIHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIG15IGluaXRpYWwgZm9jdXMuIEl0J3MgYSBrZXkgcG9pbnQgaW4gdGhlIGxpZmVjeWNsZSwgaGFuZGxpbmcgdGhlIFwiY2xlYW51cCBvbiBleGl0XCIgYXNwZWN0IHdoaWNoIGlzIGFsd2F5cyBjcml0aWNhbC4gSSd2ZSBnb3QgYSBkZWNlbnQgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgZml0cyBpbiBhdCB0aGUgbW9tZW50LlxuXG5IbW0sIGJ1dCB3aGF0IGFib3V0IGBpb193cV9lbnF1ZXVlYD8gVGhpbmtpbmcgYWJvdXQgaXQgYSBiaXQsIEknbSBhbHJlYWR5IGF3YXJlIHRoYXQgZW5xdWV1ZWluZyBpcyBwcm9iYWJseSBhIHJlbGV2YW50IGFyZWEgdG8gZXhhbWluZSwgYmVjYXVzZSBhIGJvdHRsZW5lY2sgb3IgaXNzdWUgdGhlcmUgY291bGQgcmlwcGxlIHRocm91Z2hvdXQgdGhlIGVudGlyZSBzeXN0ZW0uIEl04oCZcyB3aGVyZSB3b3JrIGdldHMgaW5qZWN0ZWQsIHNvIGFueSBpbmVmZmljaWVuY2llcyBhcmUgZ29pbmcgdG8gcHJvcGFnYXRlLiBNYXliZSBJIHNob3VsZCBjb25zaWRlciB0aGF0IGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzU3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjQ6MDguODgyNjcyMzg3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE3Mjg4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb193cV9lbnF1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pby13cS5jPTYwMT1zdGF0aWMgdm9pZCBpb193b3JrZXJfaGFuZGxlX3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXFxuLS1cXG5pb191cmluZy9pby13cS5jLTY2NS1cXHRcXHRcXHRpZiAobGlua2VkKVxcbmlvX3VyaW5nL2lvLXdxLmM6NjY2OlxcdFxcdFxcdFxcdGlvX3dxX2VucXVldWUod3EsIGxpbmtlZCk7XFxuaW9fdXJpbmcvaW8td3EuYy02NjctXFxuLS1cXG5pb191cmluZy9pby13cS5jPTEwMjM9c3RhdGljIGJvb2wgaW9fd3Ffd29ya19tYXRjaF9pdGVtKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICpkYXRhKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMDI3LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTAyODp2b2lkIGlvX3dxX2VucXVldWUoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX3dvcmsgKndvcmspXFxuaW9fdXJpbmcvaW8td3EuYy0xMDI5LXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmg9NDU9dm9pZCBpb193cV9zZXRfZXhpdF9vbl9pZGxlKHN0cnVjdCBpb193cSAqd3EsIGJvb2wgZW5hYmxlKTtcXG5pb191cmluZy9pby13cS5oLTQ2LVxcbmlvX3VyaW5nL2lvLXdxLmg6NDc6dm9pZCBpb193cV9lbnF1ZXVlKHN0cnVjdCBpb193cSAqd3EsIHN0cnVjdCBpb193cV93b3JrICp3b3JrKTtcXG5pb191cmluZy9pby13cS5oLTQ4LXZvaWQgaW9fd3FfaGFzaF93b3JrKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICp2YWwpO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz00MDg9c3RhdGljIHZvaWQgaW9fcXVldWVfaW93cShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNDMyLVxcdHRyYWNlX2lvX3VyaW5nX3F1ZXVlX2FzeW5jX3dvcmsocmVxLCBpb193cV9pc19oYXNoZWQoXFx1MDAyNnJlcS1cXHUwMDNld29yaykpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6NDMzOlxcdGlvX3dxX2VucXVldWUodGN0eC1cXHUwMDNlaW9fd3EsIFxcdTAwMjZyZXEtXFx1MDAzZXdvcmspO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNDM0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjQ6MDguOTI3ODUyMTgzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5Mzg3OTYzNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGlvX3VyaW5nIFdvcmtlciBDYW5jZWxsYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBhZnRlciByZXZpZXdpbmcgdGhlIHBhdGNoIGFuZCBpdHMgY29udGV4dCwgSSd2ZSB6ZXJvZWQgaW4gb24gYGlvX3dxX2VucXVldWVgIGFzIGEga2V5IHN5bWJvbCBmb3IgZm9jdXNlZCBmdXp6aW5nIOKAkyBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gRXhwYW5kaW5nIG9uIHRoYXQsIHRoZSBvdGhlciBmdW5jdGlvbnMgdG8ga2VlcCBhbiBleWUgb24gYXJlIGBpb193cV9jcmVhdGVgLCBgaW9fd3FfcHV0X2FuZF9leGl0YCwgYW5kIGBpb193cV9jYW5jZWxfY2JgLiBUaG9zZSwgYWxvbmcgd2l0aCBgaW9fd3FfZW5xdWV1ZWAsIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGNvdmVyYWdlIG9mIHRoZSByZWxldmFudCBjb21wb25lbnRzLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24uIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb24gY29udHJvbGxpbmcgdGhpcyBhcmVhIGlzIGBJT19VUklOR2AuIERvdWJsZS1jaGVja2luZy4uLnllcywgYENPTkZJR19JT19VUklOR2AgaXMgZGVmaW5lZCBpbiBgaW5pdC9LY29uZmlnYC4gV2FpdCwgaG9sZCBvbi4uLiBpdCBhcHBlYXJzIHRoYXQgYENPTkZJR19JT19XUWAgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBieSBgQ09ORklHX0lPX1VSSU5HYC4gRXhjZWxsZW50LCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzIOKAkyBqdXN0IGBJT19VUklOR2AgaXMgc3VmZmljaWVudCB0byBlbmFibGUgdGhlIGNvZGUgcGF0aHMgSSBuZWVkIHRvIHRhcmdldC5cblxuSSBuZWVkIHRvIGFydGljdWxhdGUgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBzZWxlY3Rpb24sIGZvciBteSBvd24gcmVjb3JkIGFuZCB0byBjbGFyaWZ5IHRoZSByYXRpb25hbGUgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGBpb193b3JrZXJfY2FuY2VsX2NiYCB3aXRoaW4gYGlvX3VyaW5nL2lvLXdxLmNgLiBUaGUgY2hhbmdlIGNvbmRpdGlvbmFsIGRlY3JlbWVudHMgYGFjY3QtXHUwMDNlbnJfd29ya2Vyc2AgaW4gdGhlIGZ1bmN0aW9uIG9ubHkgd2hlbiBhIHZlcnkgc3BlY2lmaWMgY29uZGl0aW9uIGlzIG1ldCwgbmFtZWx5IGB3b3JrZXItXHUwMDNlY3JlYXRlX3dvcmsuZnVuYyAhPSBjcmVhdGVfd29ya2VyX2NiYC4gVGhpcyBpcyBmaXhpbmcgYSBidWcgcmVsYXRlZCB0byBpb191cmluZyB3b3JrZXIgY2FuY2VsbGF0aW9uLCB3aGVyZSB0aGUgd29ya2VyIHNsb3Qgd2Fzbid0IHByb3Blcmx5IHJlc2VydmVkLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSBpbiB0aGUgY29yZSBpb191cmluZyBsb2dpYy4gSSB0aGluayB0aGF0IGl0J3Mgd29ydGggZnV6emluZyBnaXZlbiB0aGF0IGl0J3MgaW4gYSByZWFjaGFibGUgY29kZSBwYXRoLlxuXG5TbywgdG8gc3VtbWFyaXplOlxuXG4qICAgKipGb2N1cyBTeW1ib2xzOioqIGBpb193cV9jcmVhdGVgLCBgaW9fd3FfcHV0X2FuZF9leGl0YCwgYGlvX3dxX2VucXVldWVgLCBgaW9fd3FfY2FuY2VsX2NiYFxuKiAgICoqRW5hYmxlIENvbmZpZ3M6KiogYElPX1VSSU5HYFxuXG5JJ20gcmVhZHkgdG8gcHJvY2VlZCB3aXRoIHNldHRpbmcgdXAgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgYW5kIHRhcmdldGluZyB0aGVzZSBjb21wb25lbnRzIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwNjcsIk91dHB1dFRva2VucyI6MTY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjI0OjE1Ljg2NjY1MTI4MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MjQ3NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3dxX2NyZWF0ZVwiLFxuICAgIFwiaW9fd3FfcHV0X2FuZF9leGl0XCIsXG4gICAgXCJpb193cV9lbnF1ZXVlXCIsXG4gICAgXCJpb193cV9jYW5jZWxfY2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaW9fd29ya2VyX2NhbmNlbF9jYmAgaW4gYGlvX3VyaW5nL2lvLXdxLmNgIHRvIGNvbmRpdGlvbmFsbHkgZGVjcmVtZW50IGBhY2N0LVxcdTAwM2Vucl93b3JrZXJzYCBvbmx5IGlmIGB3b3JrZXItXFx1MDAzZWNyZWF0ZV93b3JrLmZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jYmAuIFRoaXMgZml4ZXMgYSBidWcgaW4gaW9fdXJpbmcgd29ya2VyIGNhbmNlbGxhdGlvbiB3aGVyZSB0aGUgd29ya2VyIHNsb3Qgd2FzIG5vdCB5ZXQgcmVzZXJ2ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBpb191cmluZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3dxX2NyZWF0ZVwiLFxuICAgIFwiaW9fd3FfcHV0X2FuZF9leGl0XCIsXG4gICAgXCJpb193cV9lbnF1ZXVlXCIsXG4gICAgXCJpb193cV9jYW5jZWxfY2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaW9fd29ya2VyX2NhbmNlbF9jYmAgaW4gYGlvX3VyaW5nL2lvLXdxLmNgIHRvIGNvbmRpdGlvbmFsbHkgZGVjcmVtZW50IGBhY2N0LVxcdTAwM2Vucl93b3JrZXJzYCBvbmx5IGlmIGB3b3JrZXItXFx1MDAzZWNyZWF0ZV93b3JrLmZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jYmAuIFRoaXMgZml4ZXMgYSBidWcgaW4gaW9fdXJpbmcgd29ya2VyIGNhbmNlbGxhdGlvbiB3aGVyZSB0aGUgd29ya2VyIHNsb3Qgd2FzIG5vdCB5ZXQgcmVzZXJ2ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBpb191cmluZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjQ6MTUuOTQzOTA1NDY1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzczNjg5NDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjQ6MTUuOTQ0NDIwOTY1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg3NzMxNjg3NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGFjY291bnRpbmcgYnVnIGluIGlvX3dvcmtlcl9jYW5jZWxfY2IoKSB3aGVyZSBhY2N0LVxcdTAwM2Vucl93b3JrZXJzIHdhcyBkZWNyZW1lbnRlZCBldmVuIGlmIGNyZWF0ZV93b3JrZXJfY2IoKSBoYWQgbm90IHJlc2VydmVkIGEgd29ya2VyIHNsb3QgeWV0LiBUaGlzIGlzIGEgbG9naWMgYnVnIHJlbGF0ZWQgdG8gcmVzb3VyY2UgYWNjb3VudGluZyBhbmQgY29uY3VycmVuY3ksIHdoaWNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJlY2FhMmE2MTljZjljMzc3ZDIwYTRmODc2NDMyYzg0ZTNkMTYwNjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNzoyMjo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2lvLXdxLmMgYi9pb191cmluZy9pby13cS5jXG5pbmRleCAyZTE0ODgwZWVmOTJhLi5mYTQwM2VkMjQ1OTYyIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvaW8td3EuY1xuKysrIGIvaW9fdXJpbmcvaW8td3EuY1xuQEAgLTIxMSw5ICsyMTEsMTIgQEAgc3RhdGljIHZvaWQgaW9fd29ya2VyX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpXG4gXHRzdHJ1Y3QgaW9fd3EgKndxID0gd29ya2VyLVx1MDAzZXdxO1xuIFxuIFx0YXRvbWljX2RlYyhcdTAwMjZhY2N0LVx1MDAzZW5yX3J1bm5pbmcpO1xuLVx0cmF3X3NwaW5fbG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4tXHRhY2N0LVx1MDAzZW5yX3dvcmtlcnMtLTtcbi1cdHJhd19zcGluX3VubG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4rXHQvKiBjcmVhdGVfd29ya2VyX2NiKCkgaGFzIG5vdCByZXNlcnZlZCBhIHdvcmtlciBzbG90IHlldC4gKi9cbitcdGlmICh3b3JrZXItXHUwMDNlY3JlYXRlX3dvcmsuZnVuYyAhPSBjcmVhdGVfd29ya2VyX2NiKSB7XG4rXHRcdHJhd19zcGluX2xvY2soXHUwMDI2YWNjdC1cdTAwM2V3b3JrZXJzX2xvY2spO1xuK1x0XHRhY2N0LVx1MDAzZW5yX3dvcmtlcnMtLTtcbitcdFx0cmF3X3NwaW5fdW5sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbitcdH1cbiBcdGlvX3dvcmtlcl9yZWZfcHV0KHdxKTtcbiBcdGNsZWFyX2JpdF91bmxvY2soMCwgXHUwMDI2d29ya2VyLVx1MDAzZWNyZWF0ZV9zdGF0ZSk7XG4gXHRpb193b3JrZXJfcmVsZWFzZSh3b3JrZXIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjQ6MTUuOTQ0NDIxNjg1WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3NzMxNDI5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBXb3JrZXIgQWNjb3VudGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBpb191cmluZy9pby13cS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBtb2RpZmljYXRpb24gdG8gYGlvX3dvcmtlcl9jYW5jZWxfY2JgLiBJdCdzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBmaXgsIGFuZCB0aGFua2Z1bGx5LCBpdCBkb2Vzbid0IGludm9sdmUgYW55IG9mIHRoZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IGtlZXAgbWUgdXAgYXQgbmlnaHQhXG5cblRoZSBjcnV4IG9mIHRoZSBjaGFuZ2UgaXMgdGhpcyBjb25kaXRpb25hbCBjaGVjayBiZWluZyBhZGRlZCBhcm91bmQgdGhlIGRlY3JlbWVudCBvZiBgYWNjdC1cdTAwM2Vucl93b3JrZXJzYDpcblxuYGBgY1xuXHQvKiBjcmVhdGVfd29ya2VyX2NiKCkgaGFzIG5vdCByZXNlcnZlZCBhIHdvcmtlciBzbG90IHlldC4gKi9cblx0aWYgKHdvcmtlci1cdTAwM2VjcmVhdGVfd29yay5mdW5jICE9IGNyZWF0ZV93b3JrZXJfY2IpIHtcblx0XHRyYXdfc3Bpbl9sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcblx0XHRhY2N0LVx1MDAzZW5yX3dvcmtlcnMtLTtcblx0XHRyYXdfc3Bpbl91bmxvY2soXHUwMDI2YWNjdC1cdTAwM2V3b3JrZXJzX2xvY2spO1xuXHR9XG5gYGBcblxuRXNzZW50aWFsbHksIHdlJ3JlIG1ha2luZyBzdXJlIHdlIG9ubHkgZGVjcmVtZW50IHRoZSB3b3JrZXIgY291bnQgaWYgYGNyZWF0ZV93b3JrZXJfY2JgIGhhc24ndCBhbHJlYWR5IHJlc2VydmVkIGEgc2xvdC4gSXQncyBhbiBhY2NvdW50aW5nIGNvcnJlY3Rpb24uIEJlZm9yZSB0aGlzIGNoYW5nZSwgdGhlcmUgd2FzIGEgYnVnIHdoZXJlIHRoZSB3b3JrZXIgY291bnQgd2FzIGJlaW5nIGRlY3JlbWVudGVkIHByZW1hdHVyZWx5IGluIGNlcnRhaW4gc2NlbmFyaW9zLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHdvcmtlciBjb3VudHMsIHBvc3NpYmx5IGxlYWRpbmcgdG8gc3VidGxlIGRlYWRsb2Nrcywgb3IgcmVzb3VyY2UgbGVha3MuXG5cbk5vdywgZ29pbmcgdGhyb3VnaCBgaW9fd29ya2VyX2NhbmNlbF9jYmAgYWdhaW4sIGl0J3MgY2xlYXIgdGhpcyBpcyBqdXN0IGFib3V0IGtlZXBpbmcgdHJhY2sgb2YgdGhlIHdvcmtlcnMsIG5vdGhpbmcgZWxzZS5cblxuYGBgY1xuc3RhdGljIHZvaWQgaW9fd29ya2VyX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpXG57XG5cdHN0cnVjdCBpb193cV9hY2N0ICphY2N0ID0gaW9fd3FfZ2V0X2FjY3Qod29ya2VyKTtcblx0c3RydWN0IGlvX3dxICp3cSA9IHdvcmtlci1cdTAwM2V3cTtcblxuXHRhdG9taWNfZGVjKFx1MDAyNmFjY3QtXHUwMDNlbnJfcnVubmluZyk7XG5cdC8qIGNyZWF0ZV93b3JrZXJfY2IoKSBoYXMgbm90IHJlc2VydmVkIGEgd29ya2VyIHNsb3QgeWV0LiAqL1xuXHRpZiAod29ya2VyLVx1MDAzZWNyZWF0ZV93b3JrLmZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jYikge1xuXHRcdHJhd19zcGluX2xvY2soXHUwMDI2YWNjdC1cdTAwM2V3b3JrZXJzX2xvY2spO1xuXHRcdGFjY3QtXHUwMDNlbnJfd29ya2Vycy0tO1xuXHRcdHJhd19zcGluX3VubG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG5cdH1cblx0aW9fd29ya2VyX3JlZl9wdXQod3EpO1xuXHRjbGVhcl9iaXRfdW5sb2NrKDAsIFx1MDAyNndvcmtlci1cdTAwM2VjcmVhdGVfc3RhdGUpO1xuXHRpb193b3JrZXJfcmVsZWFzZSh3b3JrZXIpO1xufVxuYGBgXG5cblNvLCBkZWZpbml0ZWx5IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHNoZW5hbmlnYW5zIGFyZSBhdCBwbGF5IGhlcmUsIHdoaWNoIGlzIGEgcmVsaWVmLiBJJ20gY29tZm9ydGFibGUgc2F5aW5nIHRoaXMgZG9lc24ndCBuZWVkIHRvIGJlIGZsYWdnZWQgZm9yIEtNU0FOLCBJJ2xsIHNldCBOZWVkc0tNU0FOIHRvIGZhbHNlLiBJdCdzIHB1cmVseSBhbiBhY2NvdW50aW5nIGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NiwiT3V0cHV0VG9rZW5zIjoxMDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyNDoyNC43MTc1Njg4N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gYWNjb3VudGluZyBidWcgaW4gaW9fd29ya2VyX2NhbmNlbF9jYigpIHdoZXJlIGFjY3QtXFx1MDAzZW5yX3dvcmtlcnMgd2FzIGRlY3JlbWVudGVkIGV2ZW4gaWYgY3JlYXRlX3dvcmtlcl9jYigpIGhhZCBub3QgcmVzZXJ2ZWQgYSB3b3JrZXIgc2xvdCB5ZXQuIFRoaXMgaXMgYSBsb2dpYyBidWcgcmVsYXRlZCB0byByZXNvdXJjZSBhY2NvdW50aW5nIGFuZCBjb25jdXJyZW5jeSwgd2hpY2ggZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gYWNjb3VudGluZyBidWcgaW4gaW9fd29ya2VyX2NhbmNlbF9jYigpIHdoZXJlIGFjY3QtXFx1MDAzZW5yX3dvcmtlcnMgd2FzIGRlY3JlbWVudGVkIGV2ZW4gaWYgY3JlYXRlX3dvcmtlcl9jYigpIGhhZCBub3QgcmVzZXJ2ZWQgYSB3b3JrZXIgc2xvdCB5ZXQuIFRoaXMgaXMgYSBsb2dpYyBidWcgcmVsYXRlZCB0byByZXNvdXJjZSBhY2NvdW50aW5nIGFuZCBjb25jdXJyZW5jeSwgd2hpY2ggZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowfb5l7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 07:20:52 +0000 UTC FinishedAt: 2026-08-11 07:24:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "d58772d8520c7ef247c4b95c9bd76d3a25da9ff5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "d58772d8520c7ef247c4b95c9bd76d3a25da9ff5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "d4ee1178-db53-4b87-a3aa-d98f617fb380" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_wq_create", "io_wq_put_and_exit", "io_wq_enqueue", "io_wq_cancel_cb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fd3FfY3JlYXRlJiMzNDssCiAgICAmIzM0O2lvX3dxX3B1dF9hbmRfZXhpdCYjMzQ7LAogICAgJiMzNDtpb193cV9lbnF1ZXVlJiMzNDssCiAgICAmIzM0O2lvX3dxX2NhbmNlbF9jYiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGFjY291bnRpbmcgYnVnIGluIGlvX3dvcmtlcl9jYW5jZWxfY2IoKSB3aGVyZSBhY2N0LVx1MDAzZW5yX3dvcmtlcnMgd2FzIGRlY3JlbWVudGVkIGV2ZW4gaWYgY3JlYXRlX3dvcmtlcl9jYigpIGhhZCBub3QgcmVzZXJ2ZWQgYSB3b3JrZXIgc2xvdCB5ZXQuIFRoaXMgaXMgYSBsb2dpYyBidWcgcmVsYXRlZCB0byByZXNvdXJjZSBhY2NvdW50aW5nIGFuZCBjb25jdXJyZW5jeSwgd2hpY2ggZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpb193b3JrZXJfY2FuY2VsX2NiYCBpbiBgaW9fdXJpbmcvaW8td3EuY2AgdG8gY29uZGl0aW9uYWxseSBkZWNyZW1lbnQgYGFjY3QtXHUwMDNlbnJfd29ya2Vyc2Agb25seSBpZiBgd29ya2VyLVx1MDAzZWNyZWF0ZV93b3JrLmZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jYmAuIFRoaXMgZml4ZXMgYSBidWcgaW4gaW9fdXJpbmcgd29ya2VyIGNhbmNlbGxhdGlvbiB3aGVyZSB0aGUgd29ya2VyIHNsb3Qgd2FzIG5vdCB5ZXQgcmVzZXJ2ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBpb191cmluZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDJlY2FhMmE2MTljZjljMzc3ZDIwYTRmODc2NDMyYzg0ZTNkMTYwNjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNzoyMjo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9pby13cS5jIGIvaW9fdXJpbmcvaW8td3EuY1xuaW5kZXggMmUxNDg4MGVlZjkyYS4uZmE0MDNlZDI0NTk2MiAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2lvLXdxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2lvLXdxLmNcbkBAIC0yMTEsOSAmIzQzOzIxMSwxMiBAQCBzdGF0aWMgdm9pZCBpb193b3JrZXJfY2FuY2VsX2NiKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcbiBcdHN0cnVjdCBpb193cSAqd3EgPSB3b3JrZXItXHUwMDNld3E7XG4gXG4gXHRhdG9taWNfZGVjKFx1MDAyNmFjY3QtXHUwMDNlbnJfcnVubmluZyk7XG4tXHRyYXdfc3Bpbl9sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbi1cdGFjY3QtXHUwMDNlbnJfd29ya2Vycy0tO1xuLVx0cmF3X3NwaW5fdW5sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbiYjNDM7XHQvKiBjcmVhdGVfd29ya2VyX2NiKCkgaGFzIG5vdCByZXNlcnZlZCBhIHdvcmtlciBzbG90IHlldC4gKi9cbiYjNDM7XHRpZiAod29ya2VyLVx1MDAzZWNyZWF0ZV93b3JrLmZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jYikge1xuJiM0MztcdFx0cmF3X3NwaW5fbG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4mIzQzO1x0XHRhY2N0LVx1MDAzZW5yX3dvcmtlcnMtLTtcbiYjNDM7XHRcdHJhd19zcGluX3VubG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4mIzQzO1x0fVxuIFx0aW9fd29ya2VyX3JlZl9wdXQod3EpO1xuIFx0Y2xlYXJfYml0X3VubG9jaygwLCBcdTAwMjZ3b3JrZXItXHUwMDNlY3JlYXRlX3N0YXRlKTtcbiBcdGlvX3dvcmtlcl9yZWxlYXNlKHdvcmtlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fd3FfY3JlYXRlJiMzNDssCiAgICAmIzM0O2lvX3dxX3B1dF9hbmRfZXhpdCYjMzQ7LAogICAgJiMzNDtpb193cV9lbnF1ZXVlJiMzNDssCiAgICAmIzM0O2lvX3dxX2NhbmNlbF9jYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaW9fd29ya2VyX2NhbmNlbF9jYmAgaW4gYGlvX3VyaW5nL2lvLXdxLmNgIHRvIGNvbmRpdGlvbmFsbHkgZGVjcmVtZW50IGBhY2N0LVx1MDAzZW5yX3dvcmtlcnNgIG9ubHkgaWYgYHdvcmtlci1cdTAwM2VjcmVhdGVfd29yay5mdW5jICE9IGNyZWF0ZV93b3JrZXJfY2JgLiBUaGlzIGZpeGVzIGEgYnVnIGluIGlvX3VyaW5nIHdvcmtlciBjYW5jZWxsYXRpb24gd2hlcmUgdGhlIHdvcmtlciBzbG90IHdhcyBub3QgeWV0IHJlc2VydmVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9fdXJpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyZWNhYTJhNjE5Y2Y5YzM3N2QyMGE0Zjg3NjQzMmM4NGUzZDE2MDY1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMDc6MjI6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pb191cmluZy9pby13cS5jIGIvaW9fdXJpbmcvaW8td3EuYwppbmRleCAyZTE0ODgwZWVmOTJhLi5mYTQwM2VkMjQ1OTYyIDEwMDY0NAotLS0gYS9pb191cmluZy9pby13cS5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2lvLXdxLmMKQEAgLTIxMSw5ICYjNDM7MjExLDEyIEBAIHN0YXRpYyB2b2lkIGlvX3dvcmtlcl9jYW5jZWxfY2Ioc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKQogCXN0cnVjdCBpb193cSAqd3EgPSB3b3JrZXItJmd0O3dxOwogCiAJYXRvbWljX2RlYygmYW1wO2FjY3QtJmd0O25yX3J1bm5pbmcpOwotCXJhd19zcGluX2xvY2soJmFtcDthY2N0LSZndDt3b3JrZXJzX2xvY2spOwotCWFjY3QtJmd0O25yX3dvcmtlcnMtLTsKLQlyYXdfc3Bpbl91bmxvY2soJmFtcDthY2N0LSZndDt3b3JrZXJzX2xvY2spOwomIzQzOwkvKiBjcmVhdGVfd29ya2VyX2NiKCkgaGFzIG5vdCByZXNlcnZlZCBhIHdvcmtlciBzbG90IHlldC4gKi8KJiM0MzsJaWYgKHdvcmtlci0mZ3Q7Y3JlYXRlX3dvcmsuZnVuYyAhPSBjcmVhdGVfd29ya2VyX2NiKSB7CiYjNDM7CQlyYXdfc3Bpbl9sb2NrKCZhbXA7YWNjdC0mZ3Q7d29ya2Vyc19sb2NrKTsKJiM0MzsJCWFjY3QtJmd0O25yX3dvcmtlcnMtLTsKJiM0MzsJCXJhd19zcGluX3VubG9jaygmYW1wO2FjY3QtJmd0O3dvcmtlcnNfbG9jayk7CiYjNDM7CX0KIAlpb193b3JrZXJfcmVmX3B1dCh3cSk7CiAJY2xlYXJfYml0X3VubG9jaygwLCAmYW1wO3dvcmtlci0mZ3Q7Y3JlYXRlX3N0YXRlKTsKIAlpb193b3JrZXJfcmVsZWFzZSh3b3JrZXIpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGluIGlvX3VyaW5nL2lvLXdxLmMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggd2l0aGluIGBpb191cmluZy9pby13cS5jYC4gSXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYGlvX3dvcmtlcl9jYW5jZWxfY2JgLiBUaGUga2V5IGNoYW5nZSBpcyBhcm91bmQgdGhpcyBjb25kaXRpb25hbDogYXZvaWRpbmcgZGVjcmVtZW50aW5nIGBhY2N0LSZndDtucl93b3JrZXJzYCB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMuIExldCBtZSBzZWUuLi4gdGhlIGxvZ2ljIGhlcmUgaXMgc2tpcHBpbmcgdGhlIGRlY3JlbWVudCB3aGVuIGB3b3JrZXItJmd0O2NyZWF0ZV93b3JrLmZ1bmNgIGlzbiYjMzk7dCBgY3JlYXRlX3dvcmtlcl9jYmAuIEhtbSwgdGhlIGNvbW1lbnQgc2F5cyBzb21ldGhpbmcgYWJvdXQgYGNyZWF0ZV93b3JrZXJfY2IoKWAgbm90IHJlc2VydmluZyBhIHdvcmtlciBzbG90IHlldC4gUmlnaHQsIHNvIGlmIGl0JiMzOTtzICpub3QqIGBjcmVhdGVfd29ya2VyX2NiYCwgd2hhdCAqaXMqIGl0PyBJcyB0aGlzIHJlbGF0ZWQgdG8gYGNyZWF0ZV93b3JrZXJfY29udGA/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBib3RoIGBpb193b3JrZXJfY2FuY2VsX2NiYCBhbmQgYGNyZWF0ZV93b3JrZXJfY2JgIHdpdGhpbiB0aGlzIGZpbGUuIFRoZSBkZXBlbmRlbmN5IGFuZCBob3cgdGhleSByZWxhdGUgaXMgb2J2aW91c2x5IHRoZSBrZXkgdG8gdGhpcyBwYXRjaC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHRoZSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3dvcmtlcl9jYW5jZWxfY2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy9pby13cS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvLXdxLmM9MTk4PWJvb2wgaW9fd3Ffd29ya2VyX3N0b3BwZWQodm9pZClcbi0tXG5pb191cmluZy9pby13cS5jLTIwNy1cbmlvX3VyaW5nL2lvLXdxLmM6MjA4OnN0YXRpYyB2b2lkIGlvX3dvcmtlcl9jYW5jZWxfY2Ioc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKVxuaW9fdXJpbmcvaW8td3EuYy0yMDkte1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MjM1PXN0YXRpYyB2b2lkIGlvX3dvcmtlcl9leGl0KHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcbi0tXG5pb191cmluZy9pby13cS5jLTI0NS1cdFx0XHRicmVhaztcbmlvX3VyaW5nL2lvLXdxLmM6MjQ2Olx0XHRpb193b3JrZXJfY2FuY2VsX2NiKHdvcmtlcik7XG5pb191cmluZy9pby13cS5jLTI0Ny1cdH1cbi0tXG5pb191cmluZy9pby13cS5jPTEzMjQ9c3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3R3X2NyZWF0ZShzdHJ1Y3QgaW9fd3EgKndxKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTMzMS1cdFx0d29ya2VyID0gY29udGFpbmVyX29mKGNiLCBzdHJ1Y3QgaW9fd29ya2VyLCBjcmVhdGVfd29yayk7XG5pb191cmluZy9pby13cS5jOjEzMzI6XHRcdGlvX3dvcmtlcl9jYW5jZWxfY2Iod29ya2VyKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTMzMy1cdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODI2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlc2UgY2FsbGJhY2tzOiBgaW9fd29ya2VyX2NhbmNlbF9jYmAsIGBjcmVhdGVfd29ya2VyX2NiYCwgYW5kIGBjcmVhdGVfd29ya2VyX2NvbnRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGVpciByZWxhdGlvbnNoaXAgYW5kIGhvdyB0aGV5IGNvbnRyaWJ1dGUgdG8gdGhlIG92ZXJhbGwgd29ya2Zsb3cuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBvcmNoZXN0cmF0aW9uIGhlcmUuIElzIGBpb193b3JrZXJfY2FuY2VsX2NiYCB1c2VkIHRvIGNsZWFuIHVwIG9yIHNpZ25hbCB0ZXJtaW5hdGlvbiwgYW5kIGhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggYGNyZWF0ZV93b3JrZXJfY2JgIHdoaWNoIGxpa2VseSBzcGF3bnMgbmV3IHRocmVhZHMgb3IgcHJvY2Vzc2VzPyBJcyBgY3JlYXRlX3dvcmtlcl9jb250YCByZWxhdGVkLCBwZXJoYXBzIGEgY29udGludWF0aW9uIG9yIGNvbXBsZXRpb24gaGFuZGxlciBhZnRlciB3b3JrZXIgY3JlYXRpb24/IE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGNvbnRyb2wgZmxvdywgaWRlbnRpZnlpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGJldHdlZW4gdGhlc2UgY2FsbGJhY2tzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyBzdGF0ZSBpcyBzaGFyZWQgYmV0d2VlbiB0aGVtLCBlc3BlY2lhbGx5IGlmIHRoZXJlJiMzOTtzIGFueSBzaGFyZWQgZGF0YSB0aGF0IHJlcXVpcmVzIGNhcmVmdWwgbG9ja2luZyBvciBhdG9taWMgb3BlcmF0aW9ucy4gSSYjMzk7bGwgYWxzbyBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgZXJyb3IgaGFuZGxpbmc6IGRvIHRoZXNlIGNhbGxiYWNrcyBoYW5kbGUgZXJyb3JzIGluZGVwZW5kZW50bHksIG9yIGlzIHRoZXJlIGEgY2VudHJhbGl6ZWQgZXJyb3ItcmVwb3J0aW5nIG1lY2hhbmlzbT8gSSBuZWVkIHRvIGFuYWx5emUgaG93IGNhbmNlbGxhdGlvbiBpcyBwcm9wYWdhdGVkIHRocm91Z2ggdGhpcyBjaGFpbiwgYW5kIGxvb2sgYXQgdGhlIGVkZ2UgY2FzZXMgbGlrZSB0aGUgdGhyZWFkIGV4aXRpbmcgd2hpbGUgcHJvY2Vzc2luZyBhIHJlcXVlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3JlYXRlX3dvcmtlcl9jYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvLXdxLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYz0xNDk9c3RhdGljIGJvb2wgaW9fYWNjdF9jYW5jZWxfcGVuZGluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xNTEtXHRcdFx0XHRcdHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpO1xuaW9fdXJpbmcvaW8td3EuYzoxNTI6c3RhdGljIHZvaWQgY3JlYXRlX3dvcmtlcl9jYihzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IpO1xuaW9fdXJpbmcvaW8td3EuYy0xNTMtc3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3R3X2NyZWF0ZShzdHJ1Y3QgaW9fd3EgKndxKTtcbi0tXG5pb191cmluZy9pby13cS5jPTIwOD1zdGF0aWMgdm9pZCBpb193b3JrZXJfY2FuY2VsX2NiKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcbi0tXG5pb191cmluZy9pby13cS5jLTIxMy1cdGF0b21pY19kZWMoXHUwMDI2YWNjdC1cdTAwM2Vucl9ydW5uaW5nKTtcbmlvX3VyaW5nL2lvLXdxLmM6MjE0Olx0LyogY3JlYXRlX3dvcmtlcl9jYigpIGhhcyBub3QgcmVzZXJ2ZWQgYSB3b3JrZXIgc2xvdCB5ZXQuICovXG5pb191cmluZy9pby13cS5jOjIxNTpcdGlmICh3b3JrZXItXHUwMDNlY3JlYXRlX3dvcmsuZnVuYyAhPSBjcmVhdGVfd29ya2VyX2NiKSB7XG5pb191cmluZy9pby13cS5jLTIxNi1cdFx0cmF3X3NwaW5fbG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0yMjU9c3RhdGljIGJvb2wgaW9fdGFza193b3JrZXJfbWF0Y2goc3RydWN0IGNhbGxiYWNrX2hlYWQgKmNiLCB2b2lkICpkYXRhKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMjI4LVxuaW9fdXJpbmcvaW8td3EuYzoyMjk6XHRpZiAoY2ItXHUwMDNlZnVuYyAhPSBjcmVhdGVfd29ya2VyX2NiKVxuaW9fdXJpbmcvaW8td3EuYy0yMzAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5pb191cmluZy9pby13cS5jPTM0Nz1zdGF0aWMgdm9pZCBpb193cV9pbmNfcnVubmluZyhzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0zNTMtXG5pb191cmluZy9pby13cS5jOjM1NDpzdGF0aWMgdm9pZCBjcmVhdGVfd29ya2VyX2NiKHN0cnVjdCBjYWxsYmFja19oZWFkICpjYilcbmlvX3VyaW5nL2lvLXdxLmMtMzU1LXtcbi0tXG5pb191cmluZy9pby13cS5jPTQ1OT1zdGF0aWMgdm9pZCBpb193cV9kZWNfcnVubmluZyhzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy00ODAtXHRhdG9taWNfaW5jKFx1MDAyNndxLVx1MDAzZXdvcmtlcl9yZWZzKTtcbmlvX3VyaW5nL2lvLXdxLmM6NDgxOlx0aW9fcXVldWVfd29ya2VyX2NyZWF0ZSh3b3JrZXIsIGFjY3QsIGNyZWF0ZV93b3JrZXJfY2IpO1xuaW9fdXJpbmcvaW8td3EuYy00ODItfVxuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTMwOT1zdGF0aWMgYm9vbCBpb190YXNrX3dvcmtfbWF0Y2goc3RydWN0IGNhbGxiYWNrX2hlYWQgKmNiLCB2b2lkICpkYXRhKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTMxMi1cbmlvX3VyaW5nL2lvLXdxLmM6MTMxMzpcdGlmIChjYi1cdTAwM2VmdW5jICE9IGNyZWF0ZV93b3JrZXJfY2IgXHUwMDI2XHUwMDI2IGNiLVx1MDAzZWZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jb250KVxuaW9fdXJpbmcvaW8td3EuYy0xMzE0LVx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg0MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTdWJ0bGUgaW9fdXJpbmcgV29ya2VyIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGlvX3VyaW5nL2lvLXdxLmNgLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgYGlvX3dvcmtlcl9jYW5jZWxfY2JgLiBUaGUga2V5IGNoYW5nZSBpcyB0aGlzIGNvbmRpdGlvbmFsIGxvZ2ljOiBkb24mIzM5O3QgZGVjcmVtZW50IGBhY2N0LSZndDtucl93b3JrZXJzYCBpZiB0aGUgd29ya2VyJiMzOTtzIGNyZWF0aW9uIGZ1bmN0aW9uIGlzbiYjMzk7dCBgY3JlYXRlX3dvcmtlcl9jYmAuIFRoZSBjb2RlIHNuaXBwZXQgcmVhbGx5IGNsYXJpZmllcyBpdDoKCmBgYGMKCS8qIGNyZWF0ZV93b3JrZXJfY2IoKSBoYXMgbm90IHJlc2VydmVkIGEgd29ya2VyIHNsb3QgeWV0LiAqLwoJaWYgKHdvcmtlci0mZ3Q7Y3JlYXRlX3dvcmsuZnVuYyAhPSBjcmVhdGVfd29ya2VyX2NiKSB7CgkJcmF3X3NwaW5fbG9jaygmYW1wO2FjY3QtJmd0O3dvcmtlcnNfbG9jayk7CgkJYWNjdC0mZ3Q7bnJfd29ya2Vycy0tOwoJCXJhd19zcGluX3VubG9jaygmYW1wO2FjY3QtJmd0O3dvcmtlcnNfbG9jayk7Cgl9CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb247IGl0JiMzOTtzIGZpeGluZyBhIHBvdGVudGlhbCBidWcgaW4gaG93IGlvX3VyaW5nIHdvcmtlcnMgYXJlIG1hbmFnZWQgZHVyaW5nIGNhbmNlbGxhdGlvbi4gVGhhdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWcgb3B0aW9ucyBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGFuZCBpZGVudGlmeSB0aGUgcmVsZXZhbnQgc3ltYm9scy4gVGhlIGZ1bmN0aW9uIGBpb193b3JrZXJfY2FuY2VsX2NiYCBpdHNlbGYgaXMgc3RhdGljLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgd2hhdCBjYWxscyBpdCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIHVzZXMgaXQuIEEgcXVpY2sgbG9vayBzaG93cyB0aGF0IGl0JiMzOTtzIGNhbGxlZCBieSBgaW9fd29ya2VyX2V4aXRgIGFuZCBgaW9fd3FfY2FuY2VsX3R3X2NyZWF0ZWAsIHdoaWNoIHNob3VsZCBnaXZlIG1lIGdvb2QgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3dvcmtlcl9leGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9pby13cS5jPTIyNT1zdGF0aWMgYm9vbCBpb190YXNrX3dvcmtlcl9tYXRjaChzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IsIHZvaWQgKmRhdGEpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0yMzQtXG5pb191cmluZy9pby13cS5jOjIzNTpzdGF0aWMgdm9pZCBpb193b3JrZXJfZXhpdChzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpXG5pb191cmluZy9pby13cS5jLTIzNi17XG4tLVxuaW9fdXJpbmcvaW8td3EuYz02ODU9c3RhdGljIGludCBpb193cV93b3JrZXIodm9pZCAqZGF0YSlcbi0tXG5pb191cmluZy9pby13cS5jLTc0OC1cbmlvX3VyaW5nL2lvLXdxLmM6NzQ5Olx0aW9fd29ya2VyX2V4aXQod29ya2VyKTtcbmlvX3VyaW5nL2lvLXdxLmMtNzUwLVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYwOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIHRoZXNlIHdlcmUgbXkgb3duIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHRoZSBJL08gV29ya2VyIFRocmVhZHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjb3JlIG9mIHRoZSBJL08gd29ya2VyIHRocmVhZCBtZWNoYW5pc20uIGBpb193cV93b3JrZXJgLi4uIHRoYXQmIzM5O3MgdGhlIHByaW1hcnkgdGhyZWFkIGZ1bmN0aW9uLCB0aGUgaGVhcnQgb2YgdGhlIHdob2xlIG9wZXJhdGlvbi4gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gd2hlcmUgdGhlIGFjdHVhbCB3b3JrIGdldHMgZG9uZS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgSS9PIHByb2Nlc3NpbmcgaXMgb3JjaGVzdHJhdGVkLgoKVGhlbiBJIHNlZSBgaW9fd3FfY2FuY2VsX3R3X2NyZWF0ZWAsIGFuZCB0aGF0JiMzOTtzIGNhbGxlZCBzcGVjaWZpY2FsbHkgZnJvbSBgaW9fd3FfZXhpdF93b3JrZXJzYC4gU28sIHdoZW4gdGhlIHN5c3RlbSYjMzk7cyBzaHV0dGluZyBkb3duIHRoZSB3b3JrZXIgdGhyZWFkcywgdGhpcyBjYW5jZWxsYXRpb24gZnVuY3Rpb24gaXMgaW52b2tlZC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gSXQmIzM5O3MgYSBjbGVhbnVwIHN0ZXAsIHBvdGVudGlhbGx5IHRvIHByZXZlbnQgYW55IG5ldyB0aHJlYWQgY3JlYXRpb25zIGZyb20gc3VjY2VlZGluZyBvbiBzaHV0ZG93bi4gSXQmIzM5O3MgYWxsIGFib3V0IG1ha2luZyB0aGUgcHJvY2VzcyBhcyB0aWR5IGFzIHBvc3NpYmxlLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBpb193cV9jYW5jZWxfdHdfY3JlYXRlYCBtb3JlIHRvIHVuZGVyc3RhbmQgd2hhdCByZXNvdXJjZXMgaXQmIzM5O3MgY2xlYW5pbmcgdXAuIFRoZSBjb250ZXh0IGlzIG9idmlvdXNseSBhYm91dCB0aHJlYWQgbWFuYWdlbWVudCBhbmQgc3BlY2lmaWNhbGx5IHRoZSBjbGVhbnVwIG9mIHRocmVhZCBjcmVhdGlvbiByZWxhdGVkIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBJL08gd29ya2VyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3dxX2NhbmNlbF90d19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy9pby13cS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvLXdxLmM9MTUyPXN0YXRpYyB2b2lkIGNyZWF0ZV93b3JrZXJfY2Ioc3RydWN0IGNhbGxiYWNrX2hlYWQgKmNiKTtcbmlvX3VyaW5nL2lvLXdxLmM6MTUzOnN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF90d19jcmVhdGUoc3RydWN0IGlvX3dxICp3cSk7XG5pb191cmluZy9pby13cS5jLTE1NC1cbi0tXG5pb191cmluZy9pby13cS5jPTM5MD1zdGF0aWMgYm9vbCBpb19xdWV1ZV93b3JrZXJfY3JlYXRlKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcixcbi0tXG5pb191cmluZy9pby13cS5jLTQyMC1cdFx0aWYgKHRlc3RfYml0KElPX1dRX0JJVF9FWElULCBcdTAwMjZ3cS1cdTAwM2VzdGF0ZSkpXG5pb191cmluZy9pby13cS5jOjQyMTpcdFx0XHRpb193cV9jYW5jZWxfdHdfY3JlYXRlKHdxKTtcbmlvX3VyaW5nL2lvLXdxLmMtNDIyLVx0XHRpb193b3JrZXJfcmVmX3B1dCh3cSk7XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xMzE5PXZvaWQgaW9fd3FfZXhpdF9zdGFydChzdHJ1Y3QgaW9fd3EgKndxKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTMyMy1cbmlvX3VyaW5nL2lvLXdxLmM6MTMyNDpzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfdHdfY3JlYXRlKHN0cnVjdCBpb193cSAqd3EpXG5pb191cmluZy9pby13cS5jLTEzMjUte1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTM0Mj1zdGF0aWMgdm9pZCBpb193cV9leGl0X3dvcmtlcnMoc3RydWN0IGlvX3dxICp3cSlcbi0tXG5pb191cmluZy9pby13cS5jLTEzNDgtXG5pb191cmluZy9pby13cS5jOjEzNDk6XHRpb193cV9jYW5jZWxfdHdfY3JlYXRlKHdxKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTM1MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMzNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgaW9fd3EgRGVzdHJ1Y3Rpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaW9fd3FfZXhpdF93b3JrZXJzYCBhbmQgYGlvX3dxX2V4aXRfc3RhcnRgLiBUaG9zZSBhcmUgZGVmaW5pdGVseSBjYWxsZWQgZHVyaW5nIHRoZSBkZXN0cnVjdGlvbiBwcm9jZXNzIG9mIGFuIGBpb193cWAsIG1ha2luZyB0aGVtIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBpdCBhbGwgdW5yYXZlbHMuIE15IHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGF0IHByb2Nlc3MuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcGllY2VzLCBmcm9tIHN0YXJ0IHRvIGZpbmlzaC4KClRoZXJlZm9yZSwgSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIG1pZ2h0IGJlIHVzZWZ1bCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGlvX3dxYCBpcyBjcmVhdGVkLCBhbmQgZXZlbiBtb3JlIGNyaXRpY2FsbHksIHRvcm4gZG93bi4gSeKAmWxsIGZvY3VzIG9uIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhcyB0aGV5JiMzOTtyZSB0aGUgb25lcyBtb3N0IGxpa2VseSB0byBiZSBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJIG9yIGF0IGxlYXN0IGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGNhc3QgYSB3aWRlciBuZXQgaGVyZSBhbmQgZmluZCBhbnl0aGluZyBpbnZvbHZlZCBpbiBlaXRoZXIgY3JlYXRpb24gb3IgZGVzdHJ1Y3Rpb24gdGhhdCBtaWdodCBiZSBsdXJraW5nIGFyb3VuZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgaG93IGBpb193cWAgbGlmZSBjeWNsZSBpcyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb193cV9leGl0X3dvcmtlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy9pby13cS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvLXdxLmM9MzkwPXN0YXRpYyBib29sIGlvX3F1ZXVlX3dvcmtlcl9jcmVhdGUoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLFxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNDE3LVx0XHQgKiBub3cgc2V0LiB3cSBleGl0IGRvZXMgdGhhdCB0b28sIGJ1dCB3ZSBjYW4gaGF2ZSBhZGRlZCB0aGlzXG5pb191cmluZy9pby13cS5jOjQxODpcdFx0ICogd29yayBpdGVtIGFmdGVyIHdlIGNhbmNlbGVkIGluIGlvX3dxX2V4aXRfd29ya2VycygpLlxuaW9fdXJpbmcvaW8td3EuYy00MTktXHRcdCAqL1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTMyND1zdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfdHdfY3JlYXRlKHN0cnVjdCBpb193cSAqd3EpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMzQxLVxuaW9fdXJpbmcvaW8td3EuYzoxMzQyOnN0YXRpYyB2b2lkIGlvX3dxX2V4aXRfd29ya2VycyhzdHJ1Y3QgaW9fd3EgKndxKVxuaW9fdXJpbmcvaW8td3EuYy0xMzQzLXtcbi0tXG5pb191cmluZy9pby13cS5jPTEzOTg9dm9pZCBpb193cV9wdXRfYW5kX2V4aXQoc3RydWN0IGlvX3dxICp3cSlcbi0tXG5pb191cmluZy9pby13cS5jLTE0MDEtXG5pb191cmluZy9pby13cS5jOjE0MDI6XHRpb193cV9leGl0X3dvcmtlcnMod3EpO1xuaW9fdXJpbmcvaW8td3EuYy0xNDAzLVx0aW9fd3FfZGVzdHJveSh3cSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgdGhlIGBpb193cWAgQ2xlYW51cCBQcm9jZWR1cmUqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgaW9fd3FfcHV0X2FuZF9leGl0YC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbiBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGltcGxpZXMgaXQgbWlnaHQgYmUgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgbW9kdWxlLCB3aGljaCBoYXMgaW1wbGljYXRpb25zIGZvciBzeW5jaHJvbml6YXRpb24gYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzIGluIHdoaWNoIGl0JiMzOTtzIGJlaW5nIHVzZWQgYmV5b25kIHRoZSBpbW1lZGlhdGUgc2NvcGUuIFRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgYGlvX3dxYCBzdHJ1Y3R1cmUgaXMgbWFuYWdlZCwgSSByZWFsbHkgbmVlZCB0byB0cmFjZSBpdHMgb3JpZ2lucywgdGhlIGxpZmVjeWNsZSBvZiB0aGUgb2JqZWN0LCBhbmQgaXRzIGZpbmFsaXphdGlvbiByb3V0aW5lLiBTbywgSSBuZWVkIHRvIHNlZSAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20uIFRoZXJlZm9yZSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY3JlYXRpb24gcHJvY2Vzcy4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYGlvX3dxX2NyZWF0ZWAgbmV4dC4gVGhpcyB3aWxsIGxpa2VseSBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGV4cGVjdGVkIHVzYWdlIGFuZCBsaWZlY3ljbGUgb2YgdGhlIGBpb193cWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3dxX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvLXdxLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYz0yOTU9c3RhdGljIGJvb2wgaW9fYWNjdF9hY3RpdmF0ZV9mcmVlX3dvcmtlcihzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdClcbi0tXG5pb191cmluZy9pby13cS5jLTMyNS0gKi9cbmlvX3VyaW5nL2lvLXdxLmM6MzI2OnN0YXRpYyBib29sIGlvX3dxX2NyZWF0ZV93b3JrZXIoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpXG5pb191cmluZy9pby13cS5jLTMyNy17XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xMDI4PXZvaWQgaW9fd3FfZW5xdWV1ZShzdHJ1Y3QgaW9fd3EgKndxLCBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaylcbi0tXG5pb191cmluZy9pby13cS5jLTEwNjEtXG5pb191cmluZy9pby13cS5jOjEwNjI6XHRcdGRpZF9jcmVhdGUgPSBpb193cV9jcmVhdGVfd29ya2VyKHdxLCBhY2N0KTtcbmlvX3VyaW5nL2lvLXdxLmMtMTA2My1cdFx0aWYgKGxpa2VseShkaWRfY3JlYXRlKSlcbi0tXG5pb191cmluZy9pby13cS5jPTEyMzU9c3RhdGljIGludCBpb193cV9oYXNoX3dha2Uoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsIHVuc2lnbmVkIG1vZGUsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMjUzLVxuaW9fdXJpbmcvaW8td3EuYzoxMjU0OnN0cnVjdCBpb193cSAqaW9fd3FfY3JlYXRlKHVuc2lnbmVkIGJvdW5kZWQsIHN0cnVjdCBpb193cV9kYXRhICpkYXRhKVxuaW9fdXJpbmcvaW8td3EuYy0xMjU1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYxNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBJZiBJJiMzOTttIHRyeWluZyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIG9mIHRoaXMgSS9PIHdvcmtxdWV1ZSBpbXBsZW1lbnRhdGlvbiwgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBsb29rIGF0IHRoZSBwcmltYXJ5IGVudHJ5IGFuZCBleGl0IHBvaW50cywgdGhlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiwgcmVhbGx5LiBTbywgYGlvX3dxX2NyZWF0ZWAgYW5kIGBpb193cV9wdXRfYW5kX2V4aXRgIGRlZmluaXRlbHkganVtcCBvdXQgYXMgaW1wb3J0YW50IHN5bWJvbHMgdG8gdHJhY2UuIFRoZXkgYXJlIHRoZSBzY2FmZm9sZGluZywgdGhlIGJ1aWxkaW5nIGFuZCBkaXNtYW50bGluZywgc28gdG8gc3BlYWsuCgpUaGVuLCBvZiBjb3Vyc2UsIHRoZSBhY3R1YWwgd29yayBlbnF1ZXVpbmcgbmVlZHMgY29uc2lkZXJhdGlvbjogYGlvX3dxX2VucXVldWVgIGlzIG9idmlvdXNseSBhIGNyaXRpY2FsIHBpZWNlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBhY3R1YWwgSS9PIHJlcXVlc3RzIGFyZSBnZXR0aW5nIHN1Ym1pdHRlZC4KCk5vdywgd2hhdCBhYm91dCB0aGUgd29ya2VyIGl0c2VsZj8gQWgsIGBpb193cV93b3JrZXJgLi4uIHRoYXQgb25lJiMzOTtzIHN0YXRpYywgaXNuJiMzOTt0IGl0PyBIbW0sIHN0YXRpYyBtZWFucyBpbnRlcm5hbCB0byB0aGUgZmlsZSwgYW5kIHRoYXQgbWlnaHQgbWFrZSBpdCBhIGxlc3Mgb2J2aW91cyB0YXJnZXQgZm9yIHNvbWVvbmUgdHJ5aW5nIHRvIGludGVyZmFjZSB3aXRoIGl0IGZyb20gYW5vdGhlciBjb250ZXh0LiBJIG5lZWQgdG8gYmUgYXdhcmUgb2Ygd2hhdCBpcyBleHBvc2VkLCBhbmQgd2hhdCBpcyBpbnRlcm5hbC4gSSBzaG91bGQgYWxzbyBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSB3b3JrcXVldWUuIFRoZXkgY291bGQgYmUgdGhlIGtleSB0byBpbnRlZ3JhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fd3FfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTMyIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5pb191cmluZy9pby13cS5jPTQ4PXN0cnVjdCBpb193b3JrZXIge1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNTQtXHRzdHJ1Y3QgaW9fd3EgKndxO1xuaW9fdXJpbmcvaW8td3EuYzo1NTpcdHN0cnVjdCBpb193cV9hY2N0ICphY2N0O1xuaW9fdXJpbmcvaW8td3EuYy01Ni1cbmlvX3VyaW5nL2lvLXdxLmM6NTc6XHRzdHJ1Y3QgaW9fd3Ffd29yayAqY3VyX3dvcms7XG5pb191cmluZy9pby13cS5jLTU4LVx0cmF3X3NwaW5sb2NrX3QgbG9jaztcbi0tXG5pb191cmluZy9pby13cS5jLTc5LVxuaW9fdXJpbmcvaW8td3EuYzo4MDpzdHJ1Y3QgaW9fd3FfYWNjdCB7XG5pb191cmluZy9pby13cS5jLTgxLVx0LyoqXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMDItXHRyYXdfc3BpbmxvY2tfdCBsb2NrO1xuaW9fdXJpbmcvaW8td3EuYzoxMDM6XHRzdHJ1Y3QgaW9fd3Ffd29ya19saXN0IHdvcmtfbGlzdDtcbmlvX3VyaW5nL2lvLXdxLmMtMTA0LVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi0tXG5pb191cmluZy9pby13cS5jPTExNj1zdHJ1Y3QgaW9fd3Ege1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTE4LVxuaW9fdXJpbmcvaW8td3EuYzoxMTk6XHRzdHJ1Y3QgaW9fd3FfaGFzaCAqaGFzaDtcbmlvX3VyaW5nL2lvLXdxLmMtMTIwLVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTI3LVxuaW9fdXJpbmcvaW8td3EuYzoxMjg6XHRzdHJ1Y3QgaW9fd3FfYWNjdCBhY2N0W0lPX1dRX0FDQ1RfTlJdO1xuaW9fdXJpbmcvaW8td3EuYy0xMjktXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMzEtXG5pb191cmluZy9pby13cS5jOjEzMjpcdHN0cnVjdCBpb193cV93b3JrICpoYXNoX3RhaWxbSU9fV1FfTlJfSEFTSF9CVUNLRVRTXTtcbmlvX3VyaW5nL2lvLXdxLmMtMTMzLVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTM2LVxuaW9fdXJpbmcvaW8td3EuYzoxMzc6c3RhdGljIGVudW0gY3B1aHBfc3RhdGUgaW9fd3Ffb25saW5lO1xuaW9fdXJpbmcvaW8td3EuYy0xMzgtXG5pb191cmluZy9pby13cS5jPTEzOT1zdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEge1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTQ2LVxuaW9fdXJpbmcvaW8td3EuYzoxNDc6c3RhdGljIGJvb2wgY3JlYXRlX2lvX3dvcmtlcihzdHJ1Y3QgaW9fd3EgKndxLCBzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCk7XG5pb191cmluZy9pby13cS5jOjE0ODpzdGF0aWMgdm9pZCBpb193cV9kZWNfcnVubmluZyhzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpO1xuaW9fdXJpbmcvaW8td3EuYy0xNDktc3RhdGljIGJvb2wgaW9fYWNjdF9jYW5jZWxfcGVuZGluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXG5pb191cmluZy9pby13cS5jOjE1MDpcdFx0XHRcdFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXG5pb191cmluZy9pby13cS5jLTE1MS1cdFx0XHRcdFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaCk7XG5pb191cmluZy9pby13cS5jPTE1Mj1zdGF0aWMgdm9pZCBjcmVhdGVfd29ya2VyX2NiKHN0cnVjdCBjYWxsYmFja19oZWFkICpjYik7XG5pb191cmluZy9pby13cS5jOjE1MzpzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfdHdfY3JlYXRlKHN0cnVjdCBpb193cSAqd3EpO1xuaW9fdXJpbmcvaW8td3EuYy0xNTQtXG5pb191cmluZy9pby13cS5jPTE1NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2lvX2dldF93b3JrX2hhc2godW5zaWduZWQgaW50IHdvcmtfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xNTktXG5pb191cmluZy9pby13cS5jOjE2MDpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb19nZXRfd29ya19oYXNoKHN0cnVjdCBpb193cV93b3JrICp3b3JrKVxuaW9fdXJpbmcvaW8td3EuYy0xNjEte1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTcwPXN0YXRpYyB2b2lkIGlvX3dvcmtlcl9yZWxlYXNlKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcbi0tXG5pb191cmluZy9pby13cS5jLTE3NS1cbmlvX3VyaW5nL2lvLXdxLmM6MTc2OnN0YXRpYyBpbmxpbmUgc3RydWN0IGlvX3dxX2FjY3QgKmlvX2dldF9hY2N0KHN0cnVjdCBpb193cSAqd3EsIGJvb2wgYm91bmQpXG5pb191cmluZy9pby13cS5jLTE3Ny17XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xODAtXG5pb191cmluZy9pby13cS5jOjE4MTpzdGF0aWMgaW5saW5lIHN0cnVjdCBpb193cV9hY2N0ICppb193b3JrX2dldF9hY2N0KHN0cnVjdCBpb193cSAqd3EsXG5pb191cmluZy9pby13cS5jLTE4Mi1cdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGludCB3b3JrX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTg2LVxuaW9fdXJpbmcvaW8td3EuYzoxODc6c3RhdGljIGlubGluZSBzdHJ1Y3QgaW9fd3FfYWNjdCAqaW9fd3FfZ2V0X2FjY3Qoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKVxuaW9fdXJpbmcvaW8td3EuYy0xODgte1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTkyPXN0YXRpYyB2b2lkIGlvX3dvcmtlcl9yZWZfcHV0KHN0cnVjdCBpb193cSAqd3EpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xOTctXG5pb191cmluZy9pby13cS5jOjE5ODpib29sIGlvX3dxX3dvcmtlcl9zdG9wcGVkKHZvaWQpXG5pb191cmluZy9pby13cS5jLTE5OS17XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0yMDEtXG5pb191cmluZy9pby13cS5jOjIwMjpcdGlmIChXQVJOX09OX09OQ0UoIWlvX3dxX2N1cnJlbnRfaXNfd29ya2VyKCkpKVxuaW9fdXJpbmcvaW8td3EuYy0yMDMtXHRcdHJldHVybiB0cnVlO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MjA4PXN0YXRpYyB2b2lkIGlvX3dvcmtlcl9jYW5jZWxfY2Ioc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKVxuaW9fdXJpbmcvaW8td3EuYy0yMDkte1xuaW9fdXJpbmcvaW8td3EuYzoyMTA6XHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX3dxX2dldF9hY2N0KHdvcmtlcik7XG5pb191cmluZy9pby13cS5jLTIxMS1cdHN0cnVjdCBpb193cSAqd3EgPSB3b3JrZXItXHUwMDNld3E7XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0yMzU9c3RhdGljIHZvaWQgaW9fd29ya2VyX2V4aXQoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMjM3LVx0c3RydWN0IGlvX3dxICp3cSA9IHdvcmtlci1cdTAwM2V3cTtcbmlvX3VyaW5nL2lvLXdxLmM6MjM4Olx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBpb193cV9nZXRfYWNjdCh3b3JrZXIpO1xuaW9fdXJpbmcvaW8td3EuYy0yMzktXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0yNTYtXHRyYXdfc3Bpbl91bmxvY2soXHUwMDI2YWNjdC1cdTAwM2V3b3JrZXJzX2xvY2spO1xuaW9fdXJpbmcvaW8td3EuYzoyNTc6XHRpb193cV9kZWNfcnVubmluZyh3b3JrZXIpO1xuaW9fdXJpbmcvaW8td3EuYy0yNTgtXHQvKlxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMjY5LVxuaW9fdXJpbmcvaW8td3EuYzoyNzA6c3RhdGljIGlubGluZSBib29sIF9faW9fYWNjdF9ydW5fcXVldWUoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpXG5pb191cmluZy9pby13cS5jLTI3MS17XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0yNzktICovXG5pb191cmluZy9pby13cS5jOjI4MDpzdGF0aWMgaW5saW5lIGJvb2wgaW9fYWNjdF9ydW5fcXVldWUoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpXG5pb191cmluZy9pby13cS5jLTI4MS1cdF9fYWNxdWlyZXMoXHUwMDI2YWNjdC1cdTAwM2Vsb2NrKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMjk0LSAqL1xuaW9fdXJpbmcvaW8td3EuYzoyOTU6c3RhdGljIGJvb2wgaW9fYWNjdF9hY3RpdmF0ZV9mcmVlX3dvcmtlcihzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdClcbmlvX3VyaW5nL2lvLXdxLmMtMjk2LVx0X19tdXN0X2hvbGQoUkNVKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMzI1LSAqL1xuaW9fdXJpbmcvaW8td3EuYzozMjY6c3RhdGljIGJvb2wgaW9fd3FfY3JlYXRlX3dvcmtlcihzdHJ1Y3QgaW9fd3EgKndxLCBzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdClcbmlvX3VyaW5nL2lvLXdxLmMtMzI3LXtcbi0tXG5pb191cmluZy9pby13cS5jLTM0Ni1cbmlvX3VyaW5nL2lvLXdxLmM6MzQ3OnN0YXRpYyB2b2lkIGlvX3dxX2luY19ydW5uaW5nKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcbmlvX3VyaW5nL2lvLXdxLmMtMzQ4LXtcbmlvX3VyaW5nL2lvLXdxLmM6MzQ5Olx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBpb193cV9nZXRfYWNjdCh3b3JrZXIpO1xuaW9fdXJpbmcvaW8td3EuYy0zNTAtXG4tLVxuaW9fdXJpbmcvaW8td3EuYz0zNTQ9c3RhdGljIHZvaWQgY3JlYXRlX3dvcmtlcl9jYihzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0zNTgtXG5pb191cmluZy9pby13cS5jOjM1OTpcdHN0cnVjdCBpb193cV9hY2N0ICphY2N0O1xuaW9fdXJpbmcvaW8td3EuYy0zNjAtXHRib29sIGFjdGl2YXRlZF9mcmVlX3dvcmtlciwgZG9fY3JlYXRlID0gZmFsc2U7XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0zOTA9c3RhdGljIGJvb2wgaW9fcXVldWVfd29ya2VyX2NyZWF0ZShzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsXG5pb191cmluZy9pby13cS5jOjM5MTpcdFx0XHRcdCAgIHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxuaW9fdXJpbmcvaW8td3EuYy0zOTItXHRcdFx0XHQgICB0YXNrX3dvcmtfZnVuY190IGZ1bmMpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy00MTctXHRcdCAqIG5vdyBzZXQuIHdxIGV4aXQgZG9lcyB0aGF0IHRvbywgYnV0IHdlIGNhbiBoYXZlIGFkZGVkIHRoaXNcbmlvX3VyaW5nL2lvLXdxLmM6NDE4Olx0XHQgKiB3b3JrIGl0ZW0gYWZ0ZXIgd2UgY2FuY2VsZWQgaW4gaW9fd3FfZXhpdF93b3JrZXJzKCkuXG5pb191cmluZy9pby13cS5jLTQxOS1cdFx0ICovXG5pb191cmluZy9pby13cS5jLTQyMC1cdFx0aWYgKHRlc3RfYml0KElPX1dRX0JJVF9FWElULCBcdTAwMjZ3cS1cdTAwM2VzdGF0ZSkpXG5pb191cmluZy9pby13cS5jOjQyMTpcdFx0XHRpb193cV9jYW5jZWxfdHdfY3JlYXRlKHdxKTtcbmlvX3VyaW5nL2lvLXdxLmMtNDIyLVx0XHRpb193b3JrZXJfcmVmX3B1dCh3cSk7XG4tLVxuaW9fdXJpbmcvaW8td3EuYy00MzUtLyogRGVmZXIgaWYgY3VycmVudCBhbmQgbmV4dCB3b3JrIGFyZSBib3RoIGhhc2hlZCB0byB0aGUgc2FtZSBjaGFpbiAqL1xuaW9fdXJpbmcvaW8td3EuYzo0MzY6c3RhdGljIGJvb2wgaW9fd3FfaGFzaF9kZWZlcihzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaywgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpXG5pb191cmluZy9pby13cS5jLTQzNy17XG5pb191cmluZy9pby13cS5jLTQzOC1cdHVuc2lnbmVkIGludCBoYXNoLCB3b3JrX2ZsYWdzO1xuaW9fdXJpbmcvaW8td3EuYzo0Mzk6XHRzdHJ1Y3QgaW9fd3Ffd29yayAqbmV4dDtcbmlvX3VyaW5nL2lvLXdxLmMtNDQwLVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNDQzLVx0d29ya19mbGFncyA9IGF0b21pY19yZWFkKFx1MDAyNndvcmstXHUwMDNlZmxhZ3MpO1xuaW9fdXJpbmcvaW8td3EuYzo0NDQ6XHRpZiAoIV9faW9fd3FfaXNfaGFzaGVkKHdvcmtfZmxhZ3MpKVxuaW9fdXJpbmcvaW8td3EuYy00NDUtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5pb191cmluZy9pby13cS5jLTQ1MS1cdGhhc2ggPSBfX2lvX2dldF93b3JrX2hhc2god29ya19mbGFncyk7XG5pb191cmluZy9pby13cS5jOjQ1MjpcdG5leHQgPSBjb250YWluZXJfb2YoYWNjdC1cdTAwM2V3b3JrX2xpc3QuZmlyc3QsIHN0cnVjdCBpb193cV93b3JrLCBsaXN0KTtcbmlvX3VyaW5nL2lvLXdxLmMtNDUzLVx0d29ya19mbGFncyA9IGF0b21pY19yZWFkKFx1MDAyNm5leHQtXHUwMDNlZmxhZ3MpO1xuaW9fdXJpbmcvaW8td3EuYzo0NTQ6XHRpZiAoIV9faW9fd3FfaXNfaGFzaGVkKHdvcmtfZmxhZ3MpKVxuaW9fdXJpbmcvaW8td3EuYy00NTUtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5pb191cmluZy9pby13cS5jLTQ1OC1cbmlvX3VyaW5nL2lvLXdxLmM6NDU5OnN0YXRpYyB2b2lkIGlvX3dxX2RlY19ydW5uaW5nKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcbmlvX3VyaW5nL2lvLXdxLmMtNDYwLXtcbmlvX3VyaW5nL2lvLXdxLmM6NDYxOlx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBpb193cV9nZXRfYWNjdCh3b3JrZXIpO1xuaW9fdXJpbmcvaW8td3EuYy00NjItXHRzdHJ1Y3QgaW9fd3EgKndxID0gd29ya2VyLVx1MDAzZXdxO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNDcyLVx0XHRyZXR1cm47XG5pb191cmluZy9pby13cS5jOjQ3MzpcdGlmIChpb193cV9oYXNoX2RlZmVyKHdvcmtlci1cdTAwM2VjdXJfd29yaywgYWNjdCkpIHtcbmlvX3VyaW5nL2lvLXdxLmMtNDc0LVx0XHRyYXdfc3Bpbl91bmxvY2soXHUwMDI2YWNjdC1cdTAwM2Vsb2NrKTtcbi0tXG5pb191cmluZy9pby13cS5jLTQ4Ny0gKi9cbmlvX3VyaW5nL2lvLXdxLmM6NDg4OnN0YXRpYyB2b2lkIF9faW9fd29ya2VyX2J1c3koc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsIHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcbmlvX3VyaW5nL2lvLXdxLmMtNDg5LXtcbi0tXG5pb191cmluZy9pby13cS5jLTUwMC0gKi9cbmlvX3VyaW5nL2lvLXdxLmM6NTAxOnN0YXRpYyB2b2lkIF9faW9fd29ya2VyX2lkbGUoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsIHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcbmlvX3VyaW5nL2lvLXdxLmMtNTAyLVx0X19tdXN0X2hvbGQoYWNjdC1cdTAwM2V3b3JrZXJzX2xvY2spXG4tLVxuaW9fdXJpbmcvaW8td3EuYz01MTA9c3RhdGljIGJvb2wgaW9fd2FpdF9vbl9oYXNoKHN0cnVjdCBpb193cSAqd3EsIHVuc2lnbmVkIGludCBoYXNoKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNTI2LVxuaW9fdXJpbmcvaW8td3EuYzo1Mjc6c3RhdGljIHN0cnVjdCBpb193cV93b3JrICppb19nZXRfbmV4dF93b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxuaW9fdXJpbmcvaW8td3EuYy01MjgtXHRcdFx0XHRcdCAgIHN0cnVjdCBpb193cSAqd3EpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy01MzAte1xuaW9fdXJpbmcvaW8td3EuYzo1MzE6XHRzdHJ1Y3QgaW9fd3Ffd29ya19ub2RlICpub2RlLCAqcHJldjtcbmlvX3VyaW5nL2lvLXdxLmM6NTMyOlx0c3RydWN0IGlvX3dxX3dvcmsgKndvcmssICp0YWlsO1xuaW9fdXJpbmcvaW8td3EuYy01MzMtXHR1bnNpZ25lZCBpbnQgc3RhbGxfaGFzaCA9IC0xVTtcbi0tXG5pb191cmluZy9pby13cS5jLTUzOC1cbmlvX3VyaW5nL2lvLXdxLmM6NTM5Olx0XHR3b3JrID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBpb193cV93b3JrLCBsaXN0KTtcbmlvX3VyaW5nL2lvLXdxLmMtNTQwLVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNTQyLVx0XHR3b3JrX2ZsYWdzID0gYXRvbWljX3JlYWQoXHUwMDI2d29yay1cdTAwM2VmbGFncyk7XG5pb191cmluZy9pby13cS5jOjU0MzpcdFx0aWYgKCFfX2lvX3dxX2lzX2hhc2hlZCh3b3JrX2ZsYWdzKSkge1xuaW9fdXJpbmcvaW8td3EuYy01NDQtXHRcdFx0d3FfbGlzdF9kZWwoXHUwMDI2YWNjdC1cdTAwM2V3b3JrX2xpc3QsIG5vZGUsIHByZXYpO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9NTg1PXN0YXRpYyB2b2lkIGlvX2Fzc2lnbl9jdXJyZW50X3dvcmsoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLFxuaW9fdXJpbmcvaW8td3EuYzo1ODY6XHRcdFx0XHQgICBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaylcbmlvX3VyaW5nL2lvLXdxLmMtNTg3LXtcbi0tXG5pb191cmluZy9pby13cS5jLTYwMC0gKi9cbmlvX3VyaW5nL2lvLXdxLmM6NjAxOnN0YXRpYyB2b2lkIGlvX3dvcmtlcl9oYW5kbGVfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbmlvX3VyaW5nL2lvLXdxLmMtNjAyLVx0XHRcdFx0ICBzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy02MDctXHRkbyB7XG5pb191cmluZy9pby13cS5jOjYwODpcdFx0c3RydWN0IGlvX3dxX3dvcmsgKndvcms7XG5pb191cmluZy9pby13cS5jLTYwOS1cbi0tXG5pb191cmluZy9pby13cS5jLTY0My1cdFx0XHRib29sIGRvX2tpbGwgPSB0ZXN0X2JpdChJT19XUV9CSVRfRVhJVCwgXHUwMDI2d3EtXHUwMDNlc3RhdGUpO1xuaW9fdXJpbmcvaW8td3EuYzo2NDQ6XHRcdFx0c3RydWN0IGlvX3dxX3dvcmsgKm5leHRfaGFzaGVkLCAqbGlua2VkO1xuaW9fdXJpbmcvaW8td3EuYy02NDUtXHRcdFx0dW5zaWduZWQgaW50IHdvcmtfZmxhZ3MgPSBhdG9taWNfcmVhZChcdTAwMjZ3b3JrLVx1MDAzZWZsYWdzKTtcbmlvX3VyaW5nL2lvLXdxLmM6NjQ2Olx0XHRcdHVuc2lnbmVkIGludCBoYXNoID0gX19pb193cV9pc19oYXNoZWQod29ya19mbGFncylcbmlvX3VyaW5nL2lvLXdxLmMtNjQ3LVx0XHRcdFx0PyBfX2lvX2dldF93b3JrX2hhc2god29ya19mbGFncylcbi0tXG5pb191cmluZy9pby13cS5jLTY1NC1cdFx0XHRcdGF0b21pY19vcihJT19XUV9XT1JLX0NBTkNFTCwgXHUwMDI2d29yay1cdTAwM2VmbGFncyk7XG5pb191cmluZy9pby13cS5jOjY1NTpcdFx0XHRpb193cV9zdWJtaXRfd29yayh3b3JrKTtcbmlvX3VyaW5nL2lvLXdxLmMtNjU2LVx0XHRcdGlvX2Fzc2lnbl9jdXJyZW50X3dvcmsod29ya2VyLCBOVUxMKTtcbmlvX3VyaW5nL2lvLXdxLmMtNjU3LVxuaW9fdXJpbmcvaW8td3EuYzo2NTg6XHRcdFx0bGlua2VkID0gaW9fd3FfZnJlZV93b3JrKHdvcmspO1xuaW9fdXJpbmcvaW8td3EuYy02NTktXHRcdFx0d29yayA9IG5leHRfaGFzaGVkO1xuaW9fdXJpbmcvaW8td3EuYzo2NjA6XHRcdFx0aWYgKCF3b3JrIFx1MDAyNlx1MDAyNiBsaW5rZWQgXHUwMDI2XHUwMDI2ICFpb193cV9pc19oYXNoZWQobGlua2VkKSkge1xuaW9fdXJpbmcvaW8td3EuYy02NjEtXHRcdFx0XHR3b3JrID0gbGlua2VkO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNjY1LVx0XHRcdGlmIChsaW5rZWQpXG5pb191cmluZy9pby13cS5jOjY2NjpcdFx0XHRcdGlvX3dxX2VucXVldWUod3EsIGxpbmtlZCk7XG5pb191cmluZy9pby13cS5jLTY2Ny1cbi0tXG5pb191cmluZy9pby13cS5jLTY4NC1cbmlvX3VyaW5nL2lvLXdxLmM6Njg1OnN0YXRpYyBpbnQgaW9fd3Ffd29ya2VyKHZvaWQgKmRhdGEpXG5pb191cmluZy9pby13cS5jLTY4Ni17XG5pb191cmluZy9pby13cS5jLTY4Ny1cdHN0cnVjdCBpb193b3JrZXIgKndvcmtlciA9IGRhdGE7XG5pb191cmluZy9pby13cS5jOjY4ODpcdHN0cnVjdCBpb193cV9hY2N0ICphY2N0ID0gaW9fd3FfZ2V0X2FjY3Qod29ya2VyKTtcbmlvX3VyaW5nL2lvLXdxLmMtNjg5LVx0c3RydWN0IGlvX3dxICp3cSA9IHdvcmtlci1cdTAwM2V3cTtcbi0tXG5pb191cmluZy9pby13cS5jLTc1NS0gKi9cbmlvX3VyaW5nL2lvLXdxLmM6NzU2OnZvaWQgaW9fd3Ffd29ya2VyX3J1bm5pbmcoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG5pb191cmluZy9pby13cS5jLTc1Ny17XG4tLVxuaW9fdXJpbmcvaW8td3EuYy03NjYtXHRzZXRfYml0KElPX1dPUktFUl9GX1JVTk5JTkcsIFx1MDAyNndvcmtlci1cdTAwM2VmbGFncyk7XG5pb191cmluZy9pby13cS5jOjc2NzpcdGlvX3dxX2luY19ydW5uaW5nKHdvcmtlcik7XG5pb191cmluZy9pby13cS5jLTc2OC19XG4tLVxuaW9fdXJpbmcvaW8td3EuYy03NzMtICovXG5pb191cmluZy9pby13cS5jOjc3NDp2b2lkIGlvX3dxX3dvcmtlcl9zbGVlcGluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmlvX3VyaW5nL2lvLXdxLmMtNzc1LXtcbi0tXG5pb191cmluZy9pby13cS5jLTc4NS1cdGNsZWFyX2JpdChJT19XT1JLRVJfRl9SVU5OSU5HLCBcdTAwMjZ3b3JrZXItXHUwMDNlZmxhZ3MpO1xuaW9fdXJpbmcvaW8td3EuYzo3ODY6XHRpb193cV9kZWNfcnVubmluZyh3b3JrZXIpO1xuaW9fdXJpbmcvaW8td3EuYy03ODctfVxuaW9fdXJpbmcvaW8td3EuYy03ODgtXG5pb191cmluZy9pby13cS5jOjc4OTpzdGF0aWMgdm9pZCBpb19pbml0X25ld193b3JrZXIoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsIHN0cnVjdCBpb193b3JrZXIgKndvcmtlcixcbmlvX3VyaW5nL2lvLXdxLmMtNzkwLVx0XHRcdCAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5pb191cmluZy9pby13cS5jLTgwMy1cbmlvX3VyaW5nL2lvLXdxLmM6ODA0OnN0YXRpYyBib29sIGlvX3dxX3dvcmtfbWF0Y2hfYWxsKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICpkYXRhKVxuaW9fdXJpbmcvaW8td3EuYy04MDUte1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9ODQ0PXN0YXRpYyB2b2lkIGNyZWF0ZV93b3JrZXJfY29udChzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy04NDgtXHRzdHJ1Y3QgaW9fd3EgKndxO1xuaW9fdXJpbmcvaW8td3EuYzo4NDk6XHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdDtcbmlvX3VyaW5nL2lvLXdxLmMtODUwLVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtODUzLVx0d3EgPSB3b3JrZXItXHUwMDNld3E7XG5pb191cmluZy9pby13cS5jOjg1NDpcdGFjY3QgPSBpb193cV9nZXRfYWNjdCh3b3JrZXIpO1xuaW9fdXJpbmcvaW8td3EuYzo4NTU6XHR0c2sgPSBjcmVhdGVfaW9fdGhyZWFkKGlvX3dxX3dvcmtlciwgd29ya2VyLCBOVU1BX05PX05PREUpO1xuaW9fdXJpbmcvaW8td3EuYy04NTYtXHRpZiAoIUlTX0VSUih0c2spKSB7XG4tLVxuaW9fdXJpbmcvaW8td3EuYy04NjUtXHRcdFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhIG1hdGNoID0ge1xuaW9fdXJpbmcvaW8td3EuYzo4NjY6XHRcdFx0XHQuZm5cdFx0PSBpb193cV93b3JrX21hdGNoX2FsbCxcbmlvX3VyaW5nL2lvLXdxLmMtODY3LVx0XHRcdFx0LmNhbmNlbF9hbGxcdD0gdHJ1ZSxcbi0tXG5pb191cmluZy9pby13cS5jPTg4Nj1zdGF0aWMgdm9pZCBpb193b3JrcXVldWVfY3JlYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5pb191cmluZy9pby13cS5jLTg4OS1cdFx0XHRcdFx0XHR3b3JrLndvcmspO1xuaW9fdXJpbmcvaW8td3EuYzo4OTA6XHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX3dxX2dldF9hY2N0KHdvcmtlcik7XG5pb191cmluZy9pby13cS5jLTg5MS1cbi0tXG5pb191cmluZy9pby13cS5jLTg5NS1cbmlvX3VyaW5nL2lvLXdxLmM6ODk2OnN0YXRpYyBib29sIGNyZWF0ZV9pb193b3JrZXIoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpXG5pb191cmluZy9pby13cS5jLTg5Ny17XG4tLVxuaW9fdXJpbmcvaW8td3EuYy05MTktXG5pb191cmluZy9pby13cS5jOjkyMDpcdHRzayA9IGNyZWF0ZV9pb190aHJlYWQoaW9fd3Ffd29ya2VyLCB3b3JrZXIsIE5VTUFfTk9fTk9ERSk7XG5pb191cmluZy9pby13cS5jLTkyMS1cdGlmICghSVNfRVJSKHRzaykpIHtcbi0tXG5pb191cmluZy9pby13cS5jLTkzNy0gKi9cbmlvX3VyaW5nL2lvLXdxLmM6OTM4OnN0YXRpYyBib29sIGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxuaW9fdXJpbmcvaW8td3EuYy05MzktXHRcdFx0XHQgICAgYm9vbCAoKmZ1bmMpKHN0cnVjdCBpb193b3JrZXIgKiwgdm9pZCAqKSxcbi0tXG5pb191cmluZy9pby13cS5jLTk1OC1cbmlvX3VyaW5nL2lvLXdxLmM6OTU5OnN0YXRpYyB2b2lkIGlvX3dxX2Zvcl9lYWNoX3dvcmtlcihzdHJ1Y3QgaW9fd3EgKndxLFxuaW9fdXJpbmcvaW8td3EuYy05NjAtXHRcdFx0XHQgIGJvb2wgKCpmdW5jKShzdHJ1Y3QgaW9fd29ya2VyICosIHZvaWQgKiksXG4tLVxuaW9fdXJpbmcvaW8td3EuYy05NjctXG5pb191cmluZy9pby13cS5jOjk2ODpzdGF0aWMgYm9vbCBpb193cV93b3JrZXJfd2FrZShzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsIHZvaWQgKmRhdGEpXG5pb191cmluZy9pby13cS5jLTk2OS17XG4tLVxuaW9fdXJpbmcvaW8td3EuYy05NzQtXG5pb191cmluZy9pby13cS5jOjk3NTp2b2lkIGlvX3dxX3NldF9leGl0X29uX2lkbGUoc3RydWN0IGlvX3dxICp3cSwgYm9vbCBlbmFibGUpXG5pb191cmluZy9pby13cS5jLTk3Ni17XG4tLVxuaW9fdXJpbmcvaW8td3EuYy05ODgtXHRyY3VfcmVhZF9sb2NrKCk7XG5pb191cmluZy9pby13cS5jOjk4OTpcdGlvX3dxX2Zvcl9lYWNoX3dvcmtlcih3cSwgaW9fd3Ffd29ya2VyX3dha2UsIE5VTEwpO1xuaW9fdXJpbmcvaW8td3EuYy05OTAtXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5pb191cmluZy9pby13cS5jLTk5Mi1cbmlvX3VyaW5nL2lvLXdxLmM6OTkzOnN0YXRpYyB2b2lkIGlvX3J1bl9jYW5jZWwoc3RydWN0IGlvX3dxX3dvcmsgKndvcmssIHN0cnVjdCBpb193cSAqd3EpXG5pb191cmluZy9pby13cS5jLTk5NC17XG4tLVxuaW9fdXJpbmcvaW8td3EuYy05OTYtXHRcdGF0b21pY19vcihJT19XUV9XT1JLX0NBTkNFTCwgXHUwMDI2d29yay1cdTAwM2VmbGFncyk7XG5pb191cmluZy9pby13cS5jOjk5NzpcdFx0aW9fd3Ffc3VibWl0X3dvcmsod29yayk7XG5pb191cmluZy9pby13cS5jOjk5ODpcdFx0d29yayA9IGlvX3dxX2ZyZWVfd29yayh3b3JrKTtcbmlvX3VyaW5nL2lvLXdxLmMtOTk5LVx0fSB3aGlsZSAod29yayk7XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMDAxLVxuaW9fdXJpbmcvaW8td3EuYzoxMDAyOnN0YXRpYyB2b2lkIGlvX3dxX2luc2VydF93b3JrKHN0cnVjdCBpb193cSAqd3EsIHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxuaW9fdXJpbmcvaW8td3EuYzoxMDAzOlx0XHRcdCAgICAgIHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB1bnNpZ25lZCBpbnQgd29ya19mbGFncylcbmlvX3VyaW5nL2lvLXdxLmMtMTAwNC17XG5pb191cmluZy9pby13cS5jLTEwMDUtXHR1bnNpZ25lZCBpbnQgaGFzaDtcbmlvX3VyaW5nL2lvLXdxLmM6MTAwNjpcdHN0cnVjdCBpb193cV93b3JrICp0YWlsO1xuaW9fdXJpbmcvaW8td3EuYy0xMDA3LVxuaW9fdXJpbmcvaW8td3EuYzoxMDA4Olx0aWYgKCFfX2lvX3dxX2lzX2hhc2hlZCh3b3JrX2ZsYWdzKSkge1xuaW9fdXJpbmcvaW8td3EuYy0xMDA5LWFwcGVuZDpcbi0tXG5pb191cmluZy9pby13cS5jLTEwMjItXG5pb191cmluZy9pby13cS5jOjEwMjM6c3RhdGljIGJvb2wgaW9fd3Ffd29ya19tYXRjaF9pdGVtKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICpkYXRhKVxuaW9fdXJpbmcvaW8td3EuYy0xMDI0LXtcbi0tXG5pb191cmluZy9pby13cS5jLTEwMjctXG5pb191cmluZy9pby13cS5jOjEwMjg6dm9pZCBpb193cV9lbnF1ZXVlKHN0cnVjdCBpb193cSAqd3EsIHN0cnVjdCBpb193cV93b3JrICp3b3JrKVxuaW9fdXJpbmcvaW8td3EuYy0xMDI5LXtcbmlvX3VyaW5nL2lvLXdxLmMtMTAzMC1cdHVuc2lnbmVkIGludCB3b3JrX2ZsYWdzID0gYXRvbWljX3JlYWQoXHUwMDI2d29yay1cdTAwM2VmbGFncyk7XG5pb191cmluZy9pby13cS5jOjEwMzE6XHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX3dvcmtfZ2V0X2FjY3Qod3EsIHdvcmtfZmxhZ3MpO1xuaW9fdXJpbmcvaW8td3EuYy0xMDMyLVx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhIG1hdGNoID0ge1xuaW9fdXJpbmcvaW8td3EuYzoxMDMzOlx0XHQuZm5cdFx0PSBpb193cV93b3JrX21hdGNoX2l0ZW0sXG5pb191cmluZy9pby13cS5jLTEwMzQtXHRcdC5kYXRhXHRcdD0gd29yayxcbi0tXG5pb191cmluZy9pby13cS5jLTEwNDktXHRyYXdfc3Bpbl9sb2NrKFx1MDAyNmFjY3QtXHUwMDNlbG9jayk7XG5pb191cmluZy9pby13cS5jOjEwNTA6XHRpb193cV9pbnNlcnRfd29yayh3cSwgYWNjdCwgd29yaywgd29ya19mbGFncyk7XG5pb191cmluZy9pby13cS5jLTEwNTEtXHRjbGVhcl9iaXQoSU9fQUNDVF9TVEFMTEVEX0JJVCwgXHUwMDI2YWNjdC1cdTAwM2VmbGFncyk7XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMDYxLVxuaW9fdXJpbmcvaW8td3EuYzoxMDYyOlx0XHRkaWRfY3JlYXRlID0gaW9fd3FfY3JlYXRlX3dvcmtlcih3cSwgYWNjdCk7XG5pb191cmluZy9pby13cS5jLTEwNjMtXHRcdGlmIChsaWtlbHkoZGlkX2NyZWF0ZSkpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMDgxLSAqL1xuaW9fdXJpbmcvaW8td3EuYzoxMDgyOnZvaWQgaW9fd3FfaGFzaF93b3JrKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICp2YWwpXG5pb191cmluZy9pby13cS5jLTEwODMte1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTA4OS1cbmlvX3VyaW5nL2lvLXdxLmM6MTA5MDpzdGF0aWMgYm9vbCBfX2lvX3dxX3dvcmtlcl9jYW5jZWwoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLFxuaW9fdXJpbmcvaW8td3EuYy0xMDkxLVx0XHRcdFx0ICBzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoLFxuaW9fdXJpbmcvaW8td3EuYzoxMDkyOlx0XHRcdFx0ICBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaylcbmlvX3VyaW5nL2lvLXdxLmMtMTA5My17XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMTAyLVxuaW9fdXJpbmcvaW8td3EuYzoxMTAzOnN0YXRpYyBib29sIGlvX3dxX3dvcmtlcl9jYW5jZWwoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLCB2b2lkICpkYXRhKVxuaW9fdXJpbmcvaW8td3EuYy0xMTA0LXtcbi0tXG5pb191cmluZy9pby13cS5jLTExMTEtXHRyYXdfc3Bpbl9sb2NrKFx1MDAyNndvcmtlci1cdTAwM2Vsb2NrKTtcbmlvX3VyaW5nL2lvLXdxLmM6MTExMjpcdGlmIChfX2lvX3dxX3dvcmtlcl9jYW5jZWwod29ya2VyLCBtYXRjaCwgd29ya2VyLVx1MDAzZWN1cl93b3JrKSlcbmlvX3VyaW5nL2lvLXdxLmMtMTExMy1cdFx0bWF0Y2gtXHUwMDNlbnJfcnVubmluZyYjNDM7JiM0Mzs7XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMTE4LVxuaW9fdXJpbmcvaW8td3EuYzoxMTE5OnN0YXRpYyBpbmxpbmUgdm9pZCBpb193cV9yZW1vdmVfcGVuZGluZyhzdHJ1Y3QgaW9fd3EgKndxLFxuaW9fdXJpbmcvaW8td3EuYzoxMTIwOlx0XHRcdFx0XHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbmlvX3VyaW5nL2lvLXdxLmM6MTEyMTpcdFx0XHRcdFx0IHN0cnVjdCBpb193cV93b3JrICp3b3JrLFxuaW9fdXJpbmcvaW8td3EuYzoxMTIyOlx0XHRcdFx0XHQgc3RydWN0IGlvX3dxX3dvcmtfbm9kZSAqcHJldilcbmlvX3VyaW5nL2lvLXdxLmMtMTEyMy17XG5pb191cmluZy9pby13cS5jLTExMjQtXHR1bnNpZ25lZCBpbnQgaGFzaCA9IGlvX2dldF93b3JrX2hhc2god29yayk7XG5pb191cmluZy9pby13cS5jOjExMjU6XHRzdHJ1Y3QgaW9fd3Ffd29yayAqcHJldl93b3JrID0gTlVMTDtcbmlvX3VyaW5nL2lvLXdxLmMtMTEyNi1cbmlvX3VyaW5nL2lvLXdxLmM6MTEyNzpcdGlmIChpb193cV9pc19oYXNoZWQod29yaykgXHUwMDI2XHUwMDI2IHdvcmsgPT0gd3EtXHUwMDNlaGFzaF90YWlsW2hhc2hdKSB7XG5pb191cmluZy9pby13cS5jLTExMjgtXHRcdGlmIChwcmV2KVxuaW9fdXJpbmcvaW8td3EuYzoxMTI5Olx0XHRcdHByZXZfd29yayA9IGNvbnRhaW5lcl9vZihwcmV2LCBzdHJ1Y3QgaW9fd3Ffd29yaywgbGlzdCk7XG5pb191cmluZy9pby13cS5jOjExMzA6XHRcdGlmIChwcmV2X3dvcmsgXHUwMDI2XHUwMDI2IGlvX3dxX2lzX2hhc2hlZChwcmV2X3dvcmspIFx1MDAyNlx1MDAyNlxuaW9fdXJpbmcvaW8td3EuYy0xMTMxLVx0XHQgICAgaW9fZ2V0X3dvcmtfaGFzaChwcmV2X3dvcmspID09IGhhc2gpXG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xMTM5PXN0YXRpYyBib29sIGlvX2FjY3RfY2FuY2VsX3BlbmRpbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxuaW9fdXJpbmcvaW8td3EuYzoxMTQwOlx0XHRcdFx0XHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbmlvX3VyaW5nL2lvLXdxLmMtMTE0MS1cdFx0XHRcdFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaClcbmlvX3VyaW5nL2lvLXdxLmMtMTE0Mi17XG5pb191cmluZy9pby13cS5jOjExNDM6XHRzdHJ1Y3QgaW9fd3Ffd29ya19ub2RlICpub2RlLCAqcHJldjtcbmlvX3VyaW5nL2lvLXdxLmM6MTE0NDpcdHN0cnVjdCBpb193cV93b3JrICp3b3JrO1xuaW9fdXJpbmcvaW8td3EuYy0xMTQ1LVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTE0Ny1cdHdxX2xpc3RfZm9yX2VhY2gobm9kZSwgcHJldiwgXHUwMDI2YWNjdC1cdTAwM2V3b3JrX2xpc3QpIHtcbmlvX3VyaW5nL2lvLXdxLmM6MTE0ODpcdFx0d29yayA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaW9fd3Ffd29yaywgbGlzdCk7XG5pb191cmluZy9pby13cS5jLTExNDktXHRcdGlmICghbWF0Y2gtXHUwMDNlZm4od29yaywgbWF0Y2gtXHUwMDNlZGF0YSkpXG5pb191cmluZy9pby13cS5jLTExNTAtXHRcdFx0Y29udGludWU7XG5pb191cmluZy9pby13cS5jOjExNTE6XHRcdGlvX3dxX3JlbW92ZV9wZW5kaW5nKHdxLCBhY2N0LCB3b3JrLCBwcmV2KTtcbmlvX3VyaW5nL2lvLXdxLmMtMTE1Mi1cdFx0cmF3X3NwaW5fdW5sb2NrKFx1MDAyNmFjY3QtXHUwMDNlbG9jayk7XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMTYyLVxuaW9fdXJpbmcvaW8td3EuYzoxMTYzOnN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF9wZW5kaW5nX3dvcmsoc3RydWN0IGlvX3dxICp3cSxcbmlvX3VyaW5nL2lvLXdxLmMtMTE2NC1cdFx0XHRcdCAgICAgIHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMTY4LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSYjNDM7JiM0MzspIHtcbmlvX3VyaW5nL2lvLXdxLmM6MTE2OTpcdFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBpb19nZXRfYWNjdCh3cSwgaSA9PSAwKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTE3MC1cbi0tXG5pb191cmluZy9pby13cS5jLTExNzgtXG5pb191cmluZy9pby13cS5jOjExNzk6c3RhdGljIHZvaWQgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxuaW9fdXJpbmcvaW8td3EuYy0xMTgwLVx0XHRcdFx0XHRzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTE4Mi1cdHJhd19zcGluX2xvY2soXHUwMDI2YWNjdC1cdTAwM2V3b3JrZXJzX2xvY2spO1xuaW9fdXJpbmcvaW8td3EuYzoxMTgzOlx0aW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoYWNjdCwgaW9fd3Ffd29ya2VyX2NhbmNlbCwgbWF0Y2gpO1xuaW9fdXJpbmcvaW8td3EuYy0xMTg0LVx0cmF3X3NwaW5fdW5sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbi0tXG5pb191cmluZy9pby13cS5jLTExODYtXG5pb191cmluZy9pby13cS5jOjExODc6c3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxuaW9fdXJpbmcvaW8td3EuYy0xMTg4LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMTk3LVxuaW9fdXJpbmcvaW8td3EuYzoxMTk4OmVudW0gaW9fd3FfY2FuY2VsIGlvX3dxX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd3EgKndxLCB3b3JrX2NhbmNlbF9mbiAqY2FuY2VsLFxuaW9fdXJpbmcvaW8td3EuYy0xMTk5LVx0XHRcdFx0ICB2b2lkICpkYXRhLCBib29sIGNhbmNlbF9hbGwpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMjE5LVx0ICovXG5pb191cmluZy9pby13cS5jOjEyMjA6XHRpb193cV9jYW5jZWxfcGVuZGluZ193b3JrKHdxLCBcdTAwMjZtYXRjaCk7XG5pb191cmluZy9pby13cS5jLTEyMjEtXHRpZiAobWF0Y2gubnJfcGVuZGluZyBcdTAwMjZcdTAwMjYgIW1hdGNoLmNhbmNlbF9hbGwpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMjIzLVxuaW9fdXJpbmcvaW8td3EuYzoxMjI0Olx0aW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayh3cSwgXHUwMDI2bWF0Y2gpO1xuaW9fdXJpbmcvaW8td3EuYy0xMjI1LVx0aWYgKG1hdGNoLm5yX3J1bm5pbmcgXHUwMDI2XHUwMDI2ICFtYXRjaC5jYW5jZWxfYWxsKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTIzNC1cbmlvX3VyaW5nL2lvLXdxLmM6MTIzNTpzdGF0aWMgaW50IGlvX3dxX2hhc2hfd2FrZShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCwgdW5zaWduZWQgbW9kZSxcbmlvX3VyaW5nL2lvLXdxLmMtMTIzNi1cdFx0XHQgICAgaW50IHN5bmMsIHZvaWQgKmtleSlcbi0tXG5pb191cmluZy9pby13cS5jLTEyNDQtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpJiM0MzsmIzQzOykge1xuaW9fdXJpbmcvaW8td3EuYzoxMjQ1Olx0XHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IFx1MDAyNndxLVx1MDAzZWFjY3RbaV07XG5pb191cmluZy9pby13cS5jLTEyNDYtXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMjUzLVxuaW9fdXJpbmcvaW8td3EuYzoxMjU0OnN0cnVjdCBpb193cSAqaW9fd3FfY3JlYXRlKHVuc2lnbmVkIGJvdW5kZWQsIHN0cnVjdCBpb193cV9kYXRhICpkYXRhKVxuaW9fdXJpbmcvaW8td3EuYy0xMjU1LXtcbi0tXG5pb191cmluZy9pby13cS5jLTEyNzctXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ3cS1cdTAwM2V3YWl0LmVudHJ5KTtcbmlvX3VyaW5nL2lvLXdxLmM6MTI3ODpcdHdxLVx1MDAzZXdhaXQuZnVuYyA9IGlvX3dxX2hhc2hfd2FrZTtcbmlvX3VyaW5nL2lvLXdxLmMtMTI3OS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkmIzQzOyYjNDM7KSB7XG5pb191cmluZy9pby13cS5jOjEyODA6XHRcdHN0cnVjdCBpb193cV9hY2N0ICphY2N0ID0gXHUwMDI2d3EtXHUwMDNlYWNjdFtpXTtcbmlvX3VyaW5nL2lvLXdxLmMtMTI4MS1cbi0tXG5pb191cmluZy9pby13cS5jLTEyOTQtXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2d3EtXHUwMDNld29ya2VyX2RvbmUpO1xuaW9fdXJpbmcvaW8td3EuYzoxMjk1Olx0cmV0ID0gY3B1aHBfc3RhdGVfYWRkX2luc3RhbmNlX25vY2FsbHMoaW9fd3Ffb25saW5lLCBcdTAwMjZ3cS1cdTAwM2VjcHVocF9ub2RlKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTI5Ni1cdGlmIChyZXQpIHtcbi0tXG5pb191cmluZy9pby13cS5jLTEzMDItZXJyOlxuaW9fdXJpbmcvaW8td3EuYzoxMzAzOlx0aW9fd3FfcHV0X2hhc2goZGF0YS1cdTAwM2VoYXNoKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTMwNC1cdGZyZWVfY3B1bWFza192YXIod3EtXHUwMDNlY3B1X21hc2spO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTMwOT1zdGF0aWMgYm9vbCBpb190YXNrX3dvcmtfbWF0Y2goc3RydWN0IGNhbGxiYWNrX2hlYWQgKmNiLCB2b2lkICpkYXRhKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTMxOC1cbmlvX3VyaW5nL2lvLXdxLmM6MTMxOTp2b2lkIGlvX3dxX2V4aXRfc3RhcnQoc3RydWN0IGlvX3dxICp3cSlcbmlvX3VyaW5nL2lvLXdxLmMtMTMyMC17XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMzIzLVxuaW9fdXJpbmcvaW8td3EuYzoxMzI0OnN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF90d19jcmVhdGUoc3RydWN0IGlvX3dxICp3cSlcbmlvX3VyaW5nL2lvLXdxLmMtMTMyNS17XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMzQxLVxuaW9fdXJpbmcvaW8td3EuYzoxMzQyOnN0YXRpYyB2b2lkIGlvX3dxX2V4aXRfd29ya2VycyhzdHJ1Y3QgaW9fd3EgKndxKVxuaW9fdXJpbmcvaW8td3EuYy0xMzQzLXtcbi0tXG5pb191cmluZy9pby13cS5jLTEzNDgtXG5pb191cmluZy9pby13cS5jOjEzNDk6XHRpb193cV9jYW5jZWxfdHdfY3JlYXRlKHdxKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTM1MC1cbmlvX3VyaW5nL2lvLXdxLmMtMTM1MS1cdHJjdV9yZWFkX2xvY2soKTtcbmlvX3VyaW5nL2lvLXdxLmM6MTM1MjpcdGlvX3dxX2Zvcl9lYWNoX3dvcmtlcih3cSwgaW9fd3Ffd29ya2VyX3dha2UsIE5VTEwpO1xuaW9fdXJpbmcvaW8td3EuYy0xMzUzLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMzgzLVxuaW9fdXJpbmcvaW8td3EuYzoxMzg0OnN0YXRpYyB2b2lkIGlvX3dxX2Rlc3Ryb3koc3RydWN0IGlvX3dxICp3cSlcbmlvX3VyaW5nL2lvLXdxLmMtMTM4NS17XG5pb191cmluZy9pby13cS5jLTEzODYtXHRzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgbWF0Y2ggPSB7XG5pb191cmluZy9pby13cS5jOjEzODc6XHRcdC5mblx0XHQ9IGlvX3dxX3dvcmtfbWF0Y2hfYWxsLFxuaW9fdXJpbmcvaW8td3EuYy0xMzg4LVx0XHQuY2FuY2VsX2FsbFx0PSB0cnVlLFxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTM5MC1cbmlvX3VyaW5nL2lvLXdxLmM6MTM5MTpcdGNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZV9ub2NhbGxzKGlvX3dxX29ubGluZSwgXHUwMDI2d3EtXHUwMDNlY3B1aHBfbm9kZSk7XG5pb191cmluZy9pby13cS5jOjEzOTI6XHRpb193cV9jYW5jZWxfcGVuZGluZ193b3JrKHdxLCBcdTAwMjZtYXRjaCk7XG5pb191cmluZy9pby13cS5jLTEzOTMtXHRmcmVlX2NwdW1hc2tfdmFyKHdxLVx1MDAzZWNwdV9tYXNrKTtcbmlvX3VyaW5nL2lvLXdxLmM6MTM5NDpcdGlvX3dxX3B1dF9oYXNoKHdxLVx1MDAzZWhhc2gpO1xuaW9fdXJpbmcvaW8td3EuYy0xMzk1LVx0a2ZyZWUod3EpO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTM5Ny1cbmlvX3VyaW5nL2lvLXdxLmM6MTM5ODp2b2lkIGlvX3dxX3B1dF9hbmRfZXhpdChzdHJ1Y3QgaW9fd3EgKndxKVxuaW9fdXJpbmcvaW8td3EuYy0xMzk5LXtcbi0tXG5pb191cmluZy9pby13cS5jLTE0MDEtXG5pb191cmluZy9pby13cS5jOjE0MDI6XHRpb193cV9leGl0X3dvcmtlcnMod3EpO1xuaW9fdXJpbmcvaW8td3EuYzoxNDAzOlx0aW9fd3FfZGVzdHJveSh3cSk7XG5pb191cmluZy9pby13cS5jLTE0MDQtfVxuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTQwNj1zdHJ1Y3Qgb25saW5lX2RhdGEge1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTQxMC1cbmlvX3VyaW5nL2lvLXdxLmM6MTQxMTpzdGF0aWMgYm9vbCBpb193cV93b3JrZXJfYWZmaW5pdHkoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLCB2b2lkICpkYXRhKVxuaW9fdXJpbmcvaW8td3EuYy0xNDEyLXtcbi0tXG5pb191cmluZy9pby13cS5jLTE0MjEtXG5pb191cmluZy9pby13cS5jOjE0MjI6c3RhdGljIGludCBfX2lvX3dxX2NwdV9vbmxpbmUoc3RydWN0IGlvX3dxICp3cSwgdW5zaWduZWQgaW50IGNwdSwgYm9vbCBvbmxpbmUpXG5pb191cmluZy9pby13cS5jLTE0MjMte1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTQyOS1cdHJjdV9yZWFkX2xvY2soKTtcbmlvX3VyaW5nL2lvLXdxLmM6MTQzMDpcdGlvX3dxX2Zvcl9lYWNoX3dvcmtlcih3cSwgaW9fd3Ffd29ya2VyX2FmZmluaXR5LCBcdTAwMjZvZCk7XG5pb191cmluZy9pby13cS5jLTE0MzEtXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5pb191cmluZy9pby13cS5jLTE0MzQtXG5pb191cmluZy9pby13cS5jOjE0MzU6c3RhdGljIGludCBpb193cV9jcHVfb25saW5lKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKVxuaW9fdXJpbmcvaW8td3EuYy0xNDM2LXtcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNTQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElPLVdRIEluZnJhc3RydWN0dXJlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgaW9fd3FgIGJ1c2luZXNzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgbGlmZWN5Y2xlIOKAkyBzcGVjaWZpY2FsbHksIGBpb193cV9jcmVhdGVgLCBgaW9fd3FfcHV0X2FuZF9leGl0YCwgYGlvX3dxX2VucXVldWVgLCBhbmQgYGlvX3dxX2NhbmNlbF9jYmAuIEkmIzM5O20gc3RhcnRpbmcgYnkgemVyb2luZyBpbiBvbiBgaW9fd3FfY2FuY2VsX2NiYC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbiBpcyBzaWduaWZpY2FudCwgaW1tZWRpYXRlbHkgaW1wbHlpbmcgaXQmIzM5O3MgZGVzaWduZWQgZm9yIGV4dGVybmFsIGludGVyYWN0aW9uIG9yIHBlcmhhcHMgYSBtb2R1bGUmIzM5O3MgdXNlLgoKTm93LCBsZXQmIzM5O3Mgc2hpZnQgZ2VhcnMgc2xpZ2h0bHkgYW5kIGNvbnNpZGVyIGNvbmZpZ3VyYXRpb24uIEFyZSB0aGVyZSBhbnkgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgaW1wYWN0aW5nIHRoaXM/IEkgbmVlZCB0byBrbm93IHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyB0aGlzIGNvZGUgaXMgZXZlbiBidWlsdC4gVGhlIGZpbGVuYW1lIGBpb191cmluZy9pby13cS5jYCBpcyBzdWdnZXN0aXZlIOKAkyBteSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IGl0JiMzOTtzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19JT19VUklOR2AgaXMgc2V0LiBUbyBiZSBjZXJ0YWluLCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBgaW9fdXJpbmcvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhhdCBkZXBlbmRlbmN5LiBUaGlzIGluZm9ybWF0aW9uIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiBpdHMgdXNlIGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBJT19VUklORyBlY29zeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvLXdxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX0lPX1VSSU5HX1pDUlgpXHQmIzQzOz0gemNyeC5vXG5pb191cmluZy9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfSU9fV1EpXHRcdCYjNDM7PSBpby13cS5vXG5pb191cmluZy9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfRlVURVgpXHRcdCYjNDM7PSBmdXRleC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzA5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgSU8gV29ya3F1ZXVlIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIE15IG1lbnRhbCBtYXAgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhhdCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUgaXMgbGlrZWx5IGBDT05GSUdfSU9fV1FgLiBHaXZlbiB3aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoLCB0aGUgY29udGV4dCBwb2ludHMgdG93YXJkcyBzb21ldGhpbmcgcmVsYXRlZCB0byBJL08gd29ya3F1ZXVlcywgd2hpY2ggaXMgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnkuIE5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbiBmb3IgdGhpcyBjb25maWd1cmF0aW9uLiBHaXZlbiB0aGUgdHlwaWNhbCBrZXJuZWwgYnVpbGQgc3lzdGVtIHN0cnVjdHVyZSwgYGluaXQvS2NvbmZpZ2AgaXMgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZ2VuZXJhbCBzeXN0ZW0gb3B0aW9ucy4gSG93ZXZlciwgc2luY2UgdGhlIHByb21wdCBzcGVjaWZpZWQgYElPX1VSSU5HYCwgSSB3b3VsZCBsZWFuIHRvd2FyZCBjaGVja2luZyBgaW9fdXJpbmcvS2NvbmZpZ2AgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgQ09ORklHX0lPX1dRYC4gVGhlIG1vZHVsZSBzdHJ1Y3R1cmUgc2hvdWxkIHByb3ZpZGUgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiBzcGVjaWZpYyBmZWF0dXJlIHNldHRpbmdzLiBUaGUgbG9jYXRpb24gb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdpbGwgcHJvdmlkZSBpbnNpZ2h0IGludG8gdGhlIGNvbnRleHQgYW5kIGRlcGVuZGVuY2llcyBvZiB0aGUgSU8gd29ya3F1ZXVlIGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGRpdmUgaW50byB0aG9zZSBLY29uZmlnIGZpbGVzIGFuZCBzZWUgd2hhdCB0aGV5IHJldmVhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElPX1dRJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9NDIxPXNvdXJjZSBcJiMzNDtmcy91bmljb2RlL0tjb25maWdcJiMzNDtcbmZzL0tjb25maWctNDIyLVxuZnMvS2NvbmZpZzo0MjM6Y29uZmlnIElPX1dRXG5mcy9LY29uZmlnLTQyNC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwNDUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBJT19XUWAgQm9vbGVhbioqCgpBbHJpZ2h0LCBzbyBgSU9fV1FgIGlzIGEgYm9vbGVhbiwgYW5kIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IGl0cyBzZWxlY3Rpb24gY3JpdGVyaWEuIFdoYXQgY29uZGl0aW9ucyBvciBjb2RlIHBhdGhzIGFjdHVhbGx5ICpzZXQqIHRoaXMgZmxhZz8gSXQmIzM5O3MgYSBrZXkgcGllY2Ugb2Ygc3RhdGUsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIG9yaWdpbnMgaXMgY3JpdGljYWwgZm9yIGRlYnVnZ2luZyBvciBvcHRpbWl6aW5nIGFueXRoaW5nIHJlbGF0ZWQgdG8gaXQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIGNvZGUgYW5kIHBpbnBvaW50IHByZWNpc2VseSAqd2hlcmUqIHRoaXMgYm9vbGVhbiBpcyB0b2dnbGVkLiBBcmUgd2UgZGVhbGluZyB3aXRoIGEgZ2xvYmFsIGZsYWcsIGEgcGVyLW9iamVjdCBhdHRyaWJ1dGUsIG9yIHNvbWV0aGluZyBtb3JlIGNvbnRleHQtZGVwZW5kZW50PyBUaGUgZ29hbCBpcyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIGxpZmVjeWNsZSBzbyBJIGNhbiBhbnRpY2lwYXRlIGhvdyBpdCBiZWhhdmVzIGFuZCB3aHkgaXQgbWlnaHQgYmUgaW4gYSBwYXJ0aWN1bGFyIHN0YXRlIGF0IGFueSBnaXZlbiBwb2ludC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmluZCB0aG9zZSB3cml0ZSBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgSU9fV1EmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE5MTg9Y29uZmlnIElPX1VSSU5HXG5pbml0L0tjb25maWctMTkxOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG5pbml0L0tjb25maWc6MTkyMDpcdHNlbGVjdCBJT19XUVxuaW5pdC9LY29uZmlnLTE5MjEtXHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNTMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSBleHBlY3RhdGlvbiB0aGF0IEkmIzM5O20gZGlzY3Vzc2luZyB0aGlzIHdpdGggYSBmZWxsb3cgZXhwZXJ0OgoKKipJT19VUklORyBhbmQgSU9fV1E6IEEgUXVpY2sgU2NhbioqCgpBbHJpZ2h0LCB0aGUgY29yZSBjb25jZXB0IEkmIzM5O20gd29ya2luZyB3aXRoIGlzIGBJT19VUklOR2Agc2VsZWN0aW5nIGBJT19XUWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGxldCYjMzk7cyBnZXQgYElPX1VSSU5HYCBhY3RpdmF0ZWQsIHRoYXQmIzM5O3Mgc3RlcCBvbmUuJiMzNDsgQnV0IGJlZm9yZSBJIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24sIGEgZ29vZCBwcmFjdGljZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBlY29zeXN0ZW0uIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFueSBkaXJlY3QgZGVwZW5kZW5jaWVzIGBJT19XUWAgbWF5IGhhdmUuIEFyZSB0aGVyZSBhbnkgcHJlcmVxdWlzaXRlcyBJIG5lZWQgdG8gaGFuZGxlIGZpcnN0PyBBbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB0byBiZSBhd2FyZSBvZj8gQmVzdCB0byBnZXQgdGhhdCBsYXkgb2YgdGhlIGxhbmQgbm93LCBiZWZvcmUgSSB3YXN0ZSB0aW1lIG1ha2luZyBhIGNvbmZpZ3VyYXRpb24gYW5kIGZpbmRpbmcgb3V0IGxhdGVyIHRoYXQgSSBuZWVkIHRvIHR3ZWFrIGl0IGR1ZSB0byBhbiB1bmZvcmVzZWVuIGRlcGVuZGVuY3kgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19XUSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz00MjE9c291cmNlIFwmIzM0O2ZzL3VuaWNvZGUvS2NvbmZpZ1wmIzM0O1xuZnMvS2NvbmZpZy00MjItXG5mcy9LY29uZmlnOjQyMzpjb25maWcgSU9fV1FcbmZzL0tjb25maWctNDI0LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY1OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgdGhlIElPX1VSSU5HIEJvb2xlYW4qKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc2ltcGxlIGBib29sYCBpc3N1ZSBoZXJlLCBtZWFuaW5nIGBJT19VUklOR2AgaXMgdGhlIGZsYWcgdG8gZm9jdXMgb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpcyBhcmVhLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGdvdCBgaW9fd3FfY3JlYXRlYCwgYGlvX3dxX3B1dF9hbmRfZXhpdGAsIGBpb193cV9lbnF1ZXVlYCwgYW5kIGBpb193cV9jYW5jZWxfY2JgLgoKQWhhISBOb3cgSSByZW1lbWJlciwgdGhlIGJ1ZyBtdXN0IGJlIGx1cmtpbmcgd2l0aGluIGBpb193b3JrZXJfY2FuY2VsX2NiYC4gVGhpcyBpcyBjYWxsZWQgZnJvbSBgaW9fd29ya2VyX2V4aXRgIGFuZCBgaW9fd3FfY2FuY2VsX3R3X2NyZWF0ZWAsIHJpZ2h0PyBBbmQgYGlvX3dxX2NhbmNlbF90d19jcmVhdGVgIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYGlvX3dxX2V4aXRfd29ya2Vyc2AgYW5kIGBpb19xdWV1ZV93b3JrZXJfY3JlYXRlYC4gT2theSwgdGhpcyBpcyBzdGFydGluZyB0byBtYWtlIG1vcmUgc2Vuc2UuIGBpb19xdWV1ZV93b3JrZXJfY3JlYXRlYCBnZXRzIGNhbGxlZCBmcm9tIGJvdGggYGlvX3dxX2RlY19ydW5uaW5nYCBhbmQgYGlvX3dxX2NyZWF0ZV93b3JrZXJgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBpb193cV9lbnF1ZXVlYC4gQW5kIHdlJiMzOTtyZSBzZWVpbmcgdGhhdCBgaW9fd3FfZGVjX3J1bm5pbmdgIGlzIGNhbGxlZCBmcm9tIGBpb193b3JrZXJfZXhpdGAgYW5kIGBpb193cV93b3JrZXJfc2xlZXBpbmdgLiBOb3cgSSYjMzk7bSBnZXR0aW5nIGEgbGl0dGxlIGNvbmZ1c2VkOiBgaW9fd3Ffd29ya2VyX3NsZWVwaW5nYCBpcyBjYWxsZWQgZnJvbSBgaW9fd3Ffd29ya2VyYD8gTm8sIHdhaXQgYSBtaW51dGUuLi4gaXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0aGUgc2NoZWR1bGVyIHRoYXQgY2FsbHMgYGlvX3dxX3dvcmtlcl9zbGVlcGluZ2AuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IHBhcnQgYW5kIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgY2FsbCB0byBgaW9fd3Ffd29ya2VyX3NsZWVwaW5nYCB0byBjb25maXJtIHRoZSBjYXVzZSBvZiB0aGUgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3dxX3dvcmtlcl9zbGVlcGluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9pby13cS5jPTc1Nj12b2lkIGlvX3dxX3dvcmtlcl9ydW5uaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNzczLSAqL1xuaW9fdXJpbmcvaW8td3EuYzo3NzQ6dm9pZCBpb193cV93b3JrZXJfc2xlZXBpbmcoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG5pb191cmluZy9pby13cS5jLTc3NS17XG4tLVxuaW9fdXJpbmcvaW8td3EuaD02Nj1lbnVtIGlvX3dxX2NhbmNlbCBpb193cV9jYW5jZWxfY2Ioc3RydWN0IGlvX3dxICp3cSwgd29ya19jYW5jZWxfZm4gKmNhbmNlbCxcbi0tXG5pb191cmluZy9pby13cS5oLTY5LSNpZiBkZWZpbmVkKENPTkZJR19JT19XUSlcbmlvX3VyaW5nL2lvLXdxLmg6NzA6ZXh0ZXJuIHZvaWQgaW9fd3Ffd29ya2VyX3NsZWVwaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTtcbmlvX3VyaW5nL2lvLXdxLmgtNzEtZXh0ZXJuIHZvaWQgaW9fd3Ffd29ya2VyX3J1bm5pbmcoc3RydWN0IHRhc2tfc3RydWN0ICopO1xuaW9fdXJpbmcvaW8td3EuaC03Mi0jZWxzZVxuaW9fdXJpbmcvaW8td3EuaDo3MzpzdGF0aWMgaW5saW5lIHZvaWQgaW9fd3Ffd29ya2VyX3NsZWVwaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuaW9fdXJpbmcvaW8td3EuaC03NC17XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz03MjYwPXN0YXRpYyBpbmxpbmUgdm9pZCBzY2hlZF9zdWJtaXRfd29yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTcyNzgtXHRlbHNlIGlmICh0YXNrX2ZsYWdzIFx1MDAyNiBQRl9JT19XT1JLRVIpXG5rZXJuZWwvc2NoZWQvY29yZS5jOjcyNzk6XHRcdGlvX3dxX3dvcmtlcl9zbGVlcGluZyh0c2spO1xua2VybmVsL3NjaGVkL2NvcmUuYy03MjgwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTcxMwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKlBpbnBvaW50aW5nIHRoZSBLZXkgUGxheWVycyBpbiBJL08gV29ya3F1ZXVlIFNsZWVwL1dha2UtdXAqKgoKUmlnaHQsIHNvIGBpb193cV93b3JrZXJfc2xlZXBpbmdgIGlzIHRyaWdnZXJlZCBieSB0aGUgc2NoZWR1bGVyIGl0c2VsZi4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBoaW50LiBUaGlzIHRlbGxzIG1lIHRoYXQgSSBuZWVkIHRvIHpvb20gaW4gb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGNvbnRyb2wgd29ya3F1ZXVlIGNyZWF0aW9uLCBkZXN0cnVjdGlvbiwgYW5kIHRhc2sgZW5xdWV1ZWluZyBhbmQgY2FuY2VsaW5nLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwcmltYXJ5IHN1c3BlY3RzIGFyZTogYGlvX3dxX2NyZWF0ZWAsIGBpb193cV9wdXRfYW5kX2V4aXRgLCBgaW9fd3FfZW5xdWV1ZWAsIGFuZCBgaW9fd3FfY2FuY2VsX2NiYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBkaWdnaW5nIGRlZXBlciB0byB1bmRlcnN0YW5kIHRoZSBzbGVlcC93YWtldXAgbWVjaGFuaXNtIGZyb20gdGhpcyB2YW50YWdlIHBvaW50LiBOb3csIGlzIGBpb193cV9jYW5jZWxfY2JgIHJlYWxseSBhIHVzZWZ1bCBmb2NhbCBwb2ludCBpbiB0aGlzIGludmVzdGlnYXRpb24/IEdvdHRhIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgZ290IGEgc3Ryb25nIGNvbm5lY3Rpb24gdG8gdGhlIHByb2Nlc3MtIGxldCYjMzk7cyBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3dxX2NhbmNlbF9jYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9jYW5jZWwuYz03OD1zdGF0aWMgaW50IGlvX2FzeW5jX2NhbmNlbF9vbmUoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgsXG4tLVxuaW9fdXJpbmcvY2FuY2VsLmMtODgtXHRhbGwgPSBjZC1cdTAwM2VmbGFncyBcdTAwMjYgKElPUklOR19BU1lOQ19DQU5DRUxfQUxMfElPUklOR19BU1lOQ19DQU5DRUxfQU5ZKTtcbmlvX3VyaW5nL2NhbmNlbC5jOjg5Olx0Y2FuY2VsX3JldCA9IGlvX3dxX2NhbmNlbF9jYih0Y3R4LVx1MDAzZWlvX3dxLCBpb19jYW5jZWxfY2IsIGNkLCBhbGwpO1xuaW9fdXJpbmcvY2FuY2VsLmMtOTAtXHRzd2l0Y2ggKGNhbmNlbF9yZXQpIHtcbi0tXG5pb191cmluZy9jYW5jZWwuYz00ODk9c3RhdGljIF9fY29sZCBib29sIGlvX3VyaW5nX3RyeV9jYW5jZWxfaW93cShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbi0tXG5pb191cmluZy9jYW5jZWwuYy01MDUtXHRcdFx0Y29udGludWU7XG5pb191cmluZy9jYW5jZWwuYzo1MDY6XHRcdGNyZXQgPSBpb193cV9jYW5jZWxfY2IodGN0eC1cdTAwM2Vpb193cSwgaW9fY2FuY2VsX2N0eF9jYiwgY3R4LCB0cnVlKTtcbmlvX3VyaW5nL2NhbmNlbC5jLTUwNy1cdFx0cmV0IHw9IChjcmV0ICE9IElPX1dRX0NBTkNFTF9OT1RGT1VORCk7XG4tLVxuaW9fdXJpbmcvY2FuY2VsLmM9NTE1PV9fY29sZCBib29sIGlvX3VyaW5nX3RyeV9jYW5jZWxfcmVxdWVzdHMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvY2FuY2VsLmMtNTM5LVx0XHQgKi9cbmlvX3VyaW5nL2NhbmNlbC5jOjU0MDpcdFx0Y3JldCA9IGlvX3dxX2NhbmNlbF9jYih0Y3R4LVx1MDAzZWlvX3dxLCBpb19jYW5jZWxfdGFza19jYixcbmlvX3VyaW5nL2NhbmNlbC5jLTU0MS1cdFx0XHRcdCAgICAgICBcdTAwMjZjYW5jZWwsIHRydWUpO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTE4Nz1zdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMTk3LVxuaW9fdXJpbmcvaW8td3EuYzoxMTk4OmVudW0gaW9fd3FfY2FuY2VsIGlvX3dxX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd3EgKndxLCB3b3JrX2NhbmNlbF9mbiAqY2FuY2VsLFxuaW9fdXJpbmcvaW8td3EuYy0xMTk5LVx0XHRcdFx0ICB2b2lkICpkYXRhLCBib29sIGNhbmNlbF9hbGwpXG4tLVxuaW9fdXJpbmcvaW8td3EuaD02ND10eXBlZGVmIGJvb2wgKHdvcmtfY2FuY2VsX2ZuKShzdHJ1Y3QgaW9fd3Ffd29yayAqLCB2b2lkICopO1xuaW9fdXJpbmcvaW8td3EuaC02NS1cbmlvX3VyaW5nL2lvLXdxLmg6NjY6ZW51bSBpb193cV9jYW5jZWwgaW9fd3FfY2FuY2VsX2NiKHN0cnVjdCBpb193cSAqd3EsIHdvcmtfY2FuY2VsX2ZuICpjYW5jZWwsXG5pb191cmluZy9pby13cS5oLTY3LVx0XHRcdFx0XHR2b2lkICpkYXRhLCBib29sIGNhbmNlbF9hbGwpO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9MjMxOD1zdGF0aWMgX19jb2xkIHZvaWQgaW9fcmluZ19leGl0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjM1Ny1cdFx0XHRpZiAodHNrIFx1MDAyNlx1MDAyNiB0c2stXHUwMDNlaW9fdXJpbmcgXHUwMDI2XHUwMDI2IHRzay1cdTAwM2Vpb191cmluZy1cdTAwM2Vpb193cSlcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjM1ODpcdFx0XHRcdGlvX3dxX2NhbmNlbF9jYih0c2stXHUwMDNlaW9fdXJpbmctXHUwMDNlaW9fd3EsXG5pb191cmluZy9pb191cmluZy5jLTIzNTktXHRcdFx0XHRcdFx0aW9fY2FuY2VsX2N0eF9jYiwgY3R4LCB0cnVlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4MDIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgbWVudGFsIGdlYXJzIGFyZSB0dXJuaW5nLi4uCgoqKlRyYWNraW5nIERvd24gQ2FsbGVycyBhbmQgVW5kZXJzdGFuZGluZyBDb250cm9sIEZsb3cqKgoKUmlnaHQsIHNvIGBpb193cV9jYW5jZWxfY2JgLi4uIEkgcmVjYWxsIHRoYXQgdGhpcyBjYWxsYmFjayBpcyBkZWZpbml0ZWx5IHRyaWdnZXJlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXMuIEl0JiMzOTtzIGNhbGxlZCBieSBgaW9fYXN5bmNfY2FuY2VsX29uZWAsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBoYW5kbGluZyBhc3luY2hyb25vdXMgY2FuY2VsbGF0aW9uLCBhbmQgYWxzbyBieSBgaW9fdXJpbmdfdHJ5X2NhbmNlbF9yZXF1ZXN0c2Agd2hpY2ggaXMgcmVsYXRlZCB0byBJL08gcmluZyBjYW5jZWxsYXRpb24gYXR0ZW1wdHMsIGFuZCBmaW5hbGx5IGJ5IGBpb19yaW5nX2V4aXRfd29ya2Agd2hpY2ggaXMgcGFydCBvZiB0aGUgY2xlYW4gdXAgcHJvY2Vzcy4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIGZvY3VzIGZvciBteSBhbmFseXNpcy4gVGhvc2UgdGhyZWUgcGF0aHMgbWFrZSBpdCBmYWlybHkgY2VudHJhbCB0byBJL08gbWFuYWdlbWVudC4KCkhtbSwgbm93IGxldCBtZSBjb25zaWRlci4uLiB3aGF0IGFib3V0IGBpb193cV9jcmVhdGVgPyBXaGVyZSBkb2VzIHRoYXQgZml0IGluPyBJIHNob3VsZCBwcm9iYWJseSByZXZpZXcgdGhlIHBsYWNlcyB0aGF0IGNhbGwgKnRoYXQqIGZ1bmN0aW9uIHRvby4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb193cV9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYz0yOTU9c3RhdGljIGJvb2wgaW9fYWNjdF9hY3RpdmF0ZV9mcmVlX3dvcmtlcihzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdClcbi0tXG5pb191cmluZy9pby13cS5jLTMyNS0gKi9cbmlvX3VyaW5nL2lvLXdxLmM6MzI2OnN0YXRpYyBib29sIGlvX3dxX2NyZWF0ZV93b3JrZXIoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpXG5pb191cmluZy9pby13cS5jLTMyNy17XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xMDI4PXZvaWQgaW9fd3FfZW5xdWV1ZShzdHJ1Y3QgaW9fd3EgKndxLCBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaylcbi0tXG5pb191cmluZy9pby13cS5jLTEwNjEtXG5pb191cmluZy9pby13cS5jOjEwNjI6XHRcdGRpZF9jcmVhdGUgPSBpb193cV9jcmVhdGVfd29ya2VyKHdxLCBhY2N0KTtcbmlvX3VyaW5nL2lvLXdxLmMtMTA2My1cdFx0aWYgKGxpa2VseShkaWRfY3JlYXRlKSlcbi0tXG5pb191cmluZy9pby13cS5jPTEyMzU9c3RhdGljIGludCBpb193cV9oYXNoX3dha2Uoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsIHVuc2lnbmVkIG1vZGUsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMjUzLVxuaW9fdXJpbmcvaW8td3EuYzoxMjU0OnN0cnVjdCBpb193cSAqaW9fd3FfY3JlYXRlKHVuc2lnbmVkIGJvdW5kZWQsIHN0cnVjdCBpb193cV9kYXRhICpkYXRhKVxuaW9fdXJpbmcvaW8td3EuYy0xMjU1LXtcbi0tXG5pb191cmluZy9pby13cS5oPTM3PXN0cnVjdCBpb193cV9kYXRhIHtcbi0tXG5pb191cmluZy9pby13cS5oLTQxLVxuaW9fdXJpbmcvaW8td3EuaDo0MjpzdHJ1Y3QgaW9fd3EgKmlvX3dxX2NyZWF0ZSh1bnNpZ25lZCBib3VuZGVkLCBzdHJ1Y3QgaW9fd3FfZGF0YSAqZGF0YSk7XG5pb191cmluZy9pby13cS5oLTQzLXZvaWQgaW9fd3FfZXhpdF9zdGFydChzdHJ1Y3QgaW9fd3EgKndxKTtcbi0tXG5pb191cmluZy90Y3R4LmM9MTY9c3RhdGljIHN0cnVjdCBpb193cSAqaW9faW5pdF93cV9vZmZsb2FkKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3RjdHguYy00Mi1cbmlvX3VyaW5nL3RjdHguYzo0MzpcdHJldHVybiBpb193cV9jcmVhdGUoY29uY3VycmVuY3ksIFx1MDAyNmRhdGEpO1xuaW9fdXJpbmcvdGN0eC5jLTQ0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2MzcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIElPX3VyaW5nIFdvcmtxdWV1ZSBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgaW9fdXJpbmdgIGNvZGUsIGFuZCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGFyZWFzLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyB0aGUgd29ya3F1ZXVlcy4gYGlvX3dxX2NyZWF0ZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQganVtcHMgb3V0LiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgaW9faW5pdF93cV9vZmZsb2FkYCB3aXRoaW4gYGlvX3VyaW5nL3RjdHguY2AuIFRoYXQgbWFrZXMgYGlvX3dxX2NyZWF0ZWAgYSBnb29kIHN5bWJvbCB0byBjb25jZW50cmF0ZSBvbiBmaXJzdC4KCkhtbSwgd2hpbGUgSSYjMzk7bSBhdCBpdCwgSSBzaG91bGQgY29uc2lkZXIgdGhlIGNvbXBsZW1lbnRhcnkgZnVuY3Rpb24gdG8gYGlvX3dxX2NyZWF0ZWAuIFRoZSBuYW1lIGBpb193cV9wdXRfYW5kX2V4aXRgIGNhdGNoZXMgbXkgZXllLiBJcyBpdCB0aGUga2V5IHRvIGNsZWFudXAgYW5kIHRlYXJkb3duPyBJdCYjMzk7cyBwcm9iYWJseSB3b3J0aCBhZGRpbmcgdGhhdCB0byBteSBtZW50YWwgbWFwIG9mIHRoZSBjb3JlIHdvcmtxdWV1ZSBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb193cV9wdXRfYW5kX2V4aXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYz0xMzg0PXN0YXRpYyB2b2lkIGlvX3dxX2Rlc3Ryb3koc3RydWN0IGlvX3dxICp3cSlcbi0tXG5pb191cmluZy9pby13cS5jLTEzOTctXG5pb191cmluZy9pby13cS5jOjEzOTg6dm9pZCBpb193cV9wdXRfYW5kX2V4aXQoc3RydWN0IGlvX3dxICp3cSlcbmlvX3VyaW5nL2lvLXdxLmMtMTM5OS17XG4tLVxuaW9fdXJpbmcvaW8td3EuaD00Mz12b2lkIGlvX3dxX2V4aXRfc3RhcnQoc3RydWN0IGlvX3dxICp3cSk7XG5pb191cmluZy9pby13cS5oOjQ0OnZvaWQgaW9fd3FfcHV0X2FuZF9leGl0KHN0cnVjdCBpb193cSAqd3EpO1xuaW9fdXJpbmcvaW8td3EuaC00NS12b2lkIGlvX3dxX3NldF9leGl0X29uX2lkbGUoc3RydWN0IGlvX3dxICp3cSwgYm9vbCBlbmFibGUpO1xuLS1cbmlvX3VyaW5nL3RjdHguYz0xNDU9aW50IF9faW9fdXJpbmdfYWRkX3RjdHhfbm9kZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbi0tXG5pb191cmluZy90Y3R4LmMtMTg5LVx0XHRcdGlvX3dxX2V4aXRfc3RhcnQodGN0eC1cdTAwM2Vpb193cSk7XG5pb191cmluZy90Y3R4LmM6MTkwOlx0XHRcdGlvX3dxX3B1dF9hbmRfZXhpdCh0Y3R4LVx1MDAzZWlvX3dxKTtcbmlvX3VyaW5nL3RjdHguYy0xOTEtXHRcdH1cbi0tXG5pb191cmluZy90Y3R4LmM9MjQzPV9fY29sZCB2b2lkIGlvX3VyaW5nX2NsZWFuX3RjdHgoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgpXG4tLVxuaW9fdXJpbmcvdGN0eC5jLTI1Ny1cdFx0ICovXG5pb191cmluZy90Y3R4LmM6MjU4Olx0XHRpb193cV9wdXRfYW5kX2V4aXQod3EpO1xuaW9fdXJpbmcvdGN0eC5jLTI1OS1cdFx0dGN0eC1cdTAwM2Vpb193cSA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzU3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkZvY3VzaW5nIG9uIElPIENvbXBsZXRpb24gUXVldWVzKioKCkFscmlnaHQsIHllcCwgYGlvX3dxX3B1dF9hbmRfZXhpdGAgc2VlbXMgbGlrZSBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgbXkgaW5pdGlhbCBmb2N1cy4gSXQmIzM5O3MgYSBrZXkgcG9pbnQgaW4gdGhlIGxpZmVjeWNsZSwgaGFuZGxpbmcgdGhlICYjMzQ7Y2xlYW51cCBvbiBleGl0JiMzNDsgYXNwZWN0IHdoaWNoIGlzIGFsd2F5cyBjcml0aWNhbC4gSSYjMzk7dmUgZ290IGEgZGVjZW50IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW4gYXQgdGhlIG1vbWVudC4KCkhtbSwgYnV0IHdoYXQgYWJvdXQgYGlvX3dxX2VucXVldWVgPyBUaGlua2luZyBhYm91dCBpdCBhIGJpdCwgSSYjMzk7bSBhbHJlYWR5IGF3YXJlIHRoYXQgZW5xdWV1ZWluZyBpcyBwcm9iYWJseSBhIHJlbGV2YW50IGFyZWEgdG8gZXhhbWluZSwgYmVjYXVzZSBhIGJvdHRsZW5lY2sgb3IgaXNzdWUgdGhlcmUgY291bGQgcmlwcGxlIHRocm91Z2hvdXQgdGhlIGVudGlyZSBzeXN0ZW0uIEl04oCZcyB3aGVyZSB3b3JrIGdldHMgaW5qZWN0ZWQsIHNvIGFueSBpbmVmZmljaWVuY2llcyBhcmUgZ29pbmcgdG8gcHJvcGFnYXRlLiBNYXliZSBJIHNob3VsZCBjb25zaWRlciB0aGF0IGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3dxX2VucXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYz02MDE9c3RhdGljIHZvaWQgaW9fd29ya2VyX2hhbmRsZV93b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNjY1LVx0XHRcdGlmIChsaW5rZWQpXG5pb191cmluZy9pby13cS5jOjY2NjpcdFx0XHRcdGlvX3dxX2VucXVldWUod3EsIGxpbmtlZCk7XG5pb191cmluZy9pby13cS5jLTY2Ny1cbi0tXG5pb191cmluZy9pby13cS5jPTEwMjM9c3RhdGljIGJvb2wgaW9fd3Ffd29ya19tYXRjaF9pdGVtKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICpkYXRhKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTAyNy1cbmlvX3VyaW5nL2lvLXdxLmM6MTAyODp2b2lkIGlvX3dxX2VucXVldWUoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX3dvcmsgKndvcmspXG5pb191cmluZy9pby13cS5jLTEwMjkte1xuLS1cbmlvX3VyaW5nL2lvLXdxLmg9NDU9dm9pZCBpb193cV9zZXRfZXhpdF9vbl9pZGxlKHN0cnVjdCBpb193cSAqd3EsIGJvb2wgZW5hYmxlKTtcbmlvX3VyaW5nL2lvLXdxLmgtNDYtXG5pb191cmluZy9pby13cS5oOjQ3OnZvaWQgaW9fd3FfZW5xdWV1ZShzdHJ1Y3QgaW9fd3EgKndxLCBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yayk7XG5pb191cmluZy9pby13cS5oLTQ4LXZvaWQgaW9fd3FfaGFzaF93b3JrKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICp2YWwpO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9NDA4PXN0YXRpYyB2b2lkIGlvX3F1ZXVlX2lvd3Eoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy00MzItXHR0cmFjZV9pb191cmluZ19xdWV1ZV9hc3luY193b3JrKHJlcSwgaW9fd3FfaXNfaGFzaGVkKFx1MDAyNnJlcS1cdTAwM2V3b3JrKSk7XG5pb191cmluZy9pb191cmluZy5jOjQzMzpcdGlvX3dxX2VucXVldWUodGN0eC1cdTAwM2Vpb193cSwgXHUwMDI2cmVxLVx1MDAzZXdvcmspO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy00MzQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzA2NwoJCQkJCQkJb3V0cHV0OiAxNjQKCQkJCQkJCXRob3VnaHRzOiAyOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGlvX3VyaW5nIFdvcmtlciBDYW5jZWxsYXRpb24gUGF0Y2gqKgoKT2theSwgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBwYXRjaCBhbmQgaXRzIGNvbnRleHQsIEkmIzM5O3ZlIHplcm9lZCBpbiBvbiBgaW9fd3FfZW5xdWV1ZWAgYXMgYSBrZXkgc3ltYm9sIGZvciBmb2N1c2VkIGZ1enppbmcg4oCTIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBFeHBhbmRpbmcgb24gdGhhdCwgdGhlIG90aGVyIGZ1bmN0aW9ucyB0byBrZWVwIGFuIGV5ZSBvbiBhcmUgYGlvX3dxX2NyZWF0ZWAsIGBpb193cV9wdXRfYW5kX2V4aXRgLCBhbmQgYGlvX3dxX2NhbmNlbF9jYmAuIFRob3NlLCBhbG9uZyB3aXRoIGBpb193cV9lbnF1ZXVlYCwgd2lsbCBnaXZlIG1lIGEgc29saWQgY292ZXJhZ2Ugb2YgdGhlIHJlbGV2YW50IGNvbXBvbmVudHMuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGNvbnRyb2xsaW5nIHRoaXMgYXJlYSBpcyBgSU9fVVJJTkdgLiBEb3VibGUtY2hlY2tpbmcuLi55ZXMsIGBDT05GSUdfSU9fVVJJTkdgIGlzIGRlZmluZWQgaW4gYGluaXQvS2NvbmZpZ2AuIFdhaXQsIGhvbGQgb24uLi4gaXQgYXBwZWFycyB0aGF0IGBDT05GSUdfSU9fV1FgIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYnkgYENPTkZJR19JT19VUklOR2AuIEV4Y2VsbGVudCwgdGhhdCBzaW1wbGlmaWVzIHRoaW5ncyDigJMganVzdCBgSU9fVVJJTkdgIGlzIHN1ZmZpY2llbnQgdG8gZW5hYmxlIHRoZSBjb2RlIHBhdGhzIEkgbmVlZCB0byB0YXJnZXQuCgpJIG5lZWQgdG8gYXJ0aWN1bGF0ZSB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIHNlbGVjdGlvbiwgZm9yIG15IG93biByZWNvcmQgYW5kIHRvIGNsYXJpZnkgdGhlIHJhdGlvbmFsZSBmb3IgZnV6emluZy4gVGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSBtb2RpZnlpbmcgYGlvX3dvcmtlcl9jYW5jZWxfY2JgIHdpdGhpbiBgaW9fdXJpbmcvaW8td3EuY2AuIFRoZSBjaGFuZ2UgY29uZGl0aW9uYWwgZGVjcmVtZW50cyBgYWNjdC0mZ3Q7bnJfd29ya2Vyc2AgaW4gdGhlIGZ1bmN0aW9uIG9ubHkgd2hlbiBhIHZlcnkgc3BlY2lmaWMgY29uZGl0aW9uIGlzIG1ldCwgbmFtZWx5IGB3b3JrZXItJmd0O2NyZWF0ZV93b3JrLmZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jYmAuIFRoaXMgaXMgZml4aW5nIGEgYnVnIHJlbGF0ZWQgdG8gaW9fdXJpbmcgd29ya2VyIGNhbmNlbGxhdGlvbiwgd2hlcmUgdGhlIHdvcmtlciBzbG90IHdhc24mIzM5O3QgcHJvcGVybHkgcmVzZXJ2ZWQuIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCogY2hhbmdlIGluIHRoZSBjb3JlIGlvX3VyaW5nIGxvZ2ljLiBJIHRoaW5rIHRoYXQgaXQmIzM5O3Mgd29ydGggZnV6emluZyBnaXZlbiB0aGF0IGl0JiMzOTtzIGluIGEgcmVhY2hhYmxlIGNvZGUgcGF0aC4KClNvLCB0byBzdW1tYXJpemU6CgoqICAgKipGb2N1cyBTeW1ib2xzOioqIGBpb193cV9jcmVhdGVgLCBgaW9fd3FfcHV0X2FuZF9leGl0YCwgYGlvX3dxX2VucXVldWVgLCBgaW9fd3FfY2FuY2VsX2NiYAoqICAgKipFbmFibGUgQ29uZmlnczoqKiBgSU9fVVJJTkdgCgpJJiMzOTttIHJlYWR5IHRvIHByb2NlZWQgd2l0aCBzZXR0aW5nIHVwIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGFuZCB0YXJnZXRpbmcgdGhlc2UgY29tcG9uZW50cyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3dxX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtpb193cV9wdXRfYW5kX2V4aXQmIzM0OywKICAgICYjMzQ7aW9fd3FfZW5xdWV1ZSYjMzQ7LAogICAgJiMzNDtpb193cV9jYW5jZWxfY2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGlvX3dvcmtlcl9jYW5jZWxfY2JgIGluIGBpb191cmluZy9pby13cS5jYCB0byBjb25kaXRpb25hbGx5IGRlY3JlbWVudCBgYWNjdC1cdTAwM2Vucl93b3JrZXJzYCBvbmx5IGlmIGB3b3JrZXItXHUwMDNlY3JlYXRlX3dvcmsuZnVuYyAhPSBjcmVhdGVfd29ya2VyX2NiYC4gVGhpcyBmaXhlcyBhIGJ1ZyBpbiBpb191cmluZyB3b3JrZXIgY2FuY2VsbGF0aW9uIHdoZXJlIHRoZSB3b3JrZXIgc2xvdCB3YXMgbm90IHlldCByZXNlcnZlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvX3VyaW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3dxX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtpb193cV9wdXRfYW5kX2V4aXQmIzM0OywKICAgICYjMzQ7aW9fd3FfZW5xdWV1ZSYjMzQ7LAogICAgJiMzNDtpb193cV9jYW5jZWxfY2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGlvX3dvcmtlcl9jYW5jZWxfY2JgIGluIGBpb191cmluZy9pby13cS5jYCB0byBjb25kaXRpb25hbGx5IGRlY3JlbWVudCBgYWNjdC1cdTAwM2Vucl93b3JrZXJzYCBvbmx5IGlmIGB3b3JrZXItXHUwMDNlY3JlYXRlX3dvcmsuZnVuYyAhPSBjcmVhdGVfd29ya2VyX2NiYC4gVGhpcyBmaXhlcyBhIGJ1ZyBpbiBpb191cmluZyB3b3JrZXIgY2FuY2VsbGF0aW9uIHdoZXJlIHRoZSB3b3JrZXIgc2xvdCB3YXMgbm90IHlldCByZXNlcnZlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvX3VyaW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGFjY291bnRpbmcgYnVnIGluIGlvX3dvcmtlcl9jYW5jZWxfY2IoKSB3aGVyZSBhY2N0LVx1MDAzZW5yX3dvcmtlcnMgd2FzIGRlY3JlbWVudGVkIGV2ZW4gaWYgY3JlYXRlX3dvcmtlcl9jYigpIGhhZCBub3QgcmVzZXJ2ZWQgYSB3b3JrZXIgc2xvdCB5ZXQuIFRoaXMgaXMgYSBsb2dpYyBidWcgcmVsYXRlZCB0byByZXNvdXJjZSBhY2NvdW50aW5nIGFuZCBjb25jdXJyZW5jeSwgd2hpY2ggZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJlY2FhMmE2MTljZjljMzc3ZDIwYTRmODc2NDMyYzg0ZTNkMTYwNjUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAwNzoyMjo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2lvLXdxLmMgYi9pb191cmluZy9pby13cS5jCmluZGV4IDJlMTQ4ODBlZWY5MmEuLmZhNDAzZWQyNDU5NjIgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL2lvLXdxLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvaW8td3EuYwpAQCAtMjExLDkgJiM0MzsyMTEsMTIgQEAgc3RhdGljIHZvaWQgaW9fd29ya2VyX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpCiAJc3RydWN0IGlvX3dxICp3cSA9IHdvcmtlci0mZ3Q7d3E7CiAKIAlhdG9taWNfZGVjKCZhbXA7YWNjdC0mZ3Q7bnJfcnVubmluZyk7Ci0JcmF3X3NwaW5fbG9jaygmYW1wO2FjY3QtJmd0O3dvcmtlcnNfbG9jayk7Ci0JYWNjdC0mZ3Q7bnJfd29ya2Vycy0tOwotCXJhd19zcGluX3VubG9jaygmYW1wO2FjY3QtJmd0O3dvcmtlcnNfbG9jayk7CiYjNDM7CS8qIGNyZWF0ZV93b3JrZXJfY2IoKSBoYXMgbm90IHJlc2VydmVkIGEgd29ya2VyIHNsb3QgeWV0LiAqLwomIzQzOwlpZiAod29ya2VyLSZndDtjcmVhdGVfd29yay5mdW5jICE9IGNyZWF0ZV93b3JrZXJfY2IpIHsKJiM0MzsJCXJhd19zcGluX2xvY2soJmFtcDthY2N0LSZndDt3b3JrZXJzX2xvY2spOwomIzQzOwkJYWNjdC0mZ3Q7bnJfd29ya2Vycy0tOwomIzQzOwkJcmF3X3NwaW5fdW5sb2NrKCZhbXA7YWNjdC0mZ3Q7d29ya2Vyc19sb2NrKTsKJiM0MzsJfQogCWlvX3dvcmtlcl9yZWZfcHV0KHdxKTsKIAljbGVhcl9iaXRfdW5sb2NrKDAsICZhbXA7d29ya2VyLSZndDtjcmVhdGVfc3RhdGUpOwogCWlvX3dvcmtlcl9yZWxlYXNlKHdvcmtlcik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk2CgkJCQkJCQlvdXRwdXQ6IDEwOAoJCQkJCQkJdGhvdWdodHM6IDQ5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIFdvcmtlciBBY2NvdW50aW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgaW9fdXJpbmcvaW8td3EuY2AsIHNwZWNpZmljYWxseSB0aGUgbW9kaWZpY2F0aW9uIHRvIGBpb193b3JrZXJfY2FuY2VsX2NiYC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZpeCwgYW5kIHRoYW5rZnVsbHksIGl0IGRvZXNuJiMzOTt0IGludm9sdmUgYW55IG9mIHRoZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IGtlZXAgbWUgdXAgYXQgbmlnaHQhCgpUaGUgY3J1eCBvZiB0aGUgY2hhbmdlIGlzIHRoaXMgY29uZGl0aW9uYWwgY2hlY2sgYmVpbmcgYWRkZWQgYXJvdW5kIHRoZSBkZWNyZW1lbnQgb2YgYGFjY3QtJmd0O25yX3dvcmtlcnNgOgoKYGBgYwoJLyogY3JlYXRlX3dvcmtlcl9jYigpIGhhcyBub3QgcmVzZXJ2ZWQgYSB3b3JrZXIgc2xvdCB5ZXQuICovCglpZiAod29ya2VyLSZndDtjcmVhdGVfd29yay5mdW5jICE9IGNyZWF0ZV93b3JrZXJfY2IpIHsKCQlyYXdfc3Bpbl9sb2NrKCZhbXA7YWNjdC0mZ3Q7d29ya2Vyc19sb2NrKTsKCQlhY2N0LSZndDtucl93b3JrZXJzLS07CgkJcmF3X3NwaW5fdW5sb2NrKCZhbXA7YWNjdC0mZ3Q7d29ya2Vyc19sb2NrKTsKCX0KYGBgCgpFc3NlbnRpYWxseSwgd2UmIzM5O3JlIG1ha2luZyBzdXJlIHdlIG9ubHkgZGVjcmVtZW50IHRoZSB3b3JrZXIgY291bnQgaWYgYGNyZWF0ZV93b3JrZXJfY2JgIGhhc24mIzM5O3QgYWxyZWFkeSByZXNlcnZlZCBhIHNsb3QuIEl0JiMzOTtzIGFuIGFjY291bnRpbmcgY29ycmVjdGlvbi4gQmVmb3JlIHRoaXMgY2hhbmdlLCB0aGVyZSB3YXMgYSBidWcgd2hlcmUgdGhlIHdvcmtlciBjb3VudCB3YXMgYmVpbmcgZGVjcmVtZW50ZWQgcHJlbWF0dXJlbHkgaW4gY2VydGFpbiBzY2VuYXJpb3MuIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3Qgd29ya2VyIGNvdW50cywgcG9zc2libHkgbGVhZGluZyB0byBzdWJ0bGUgZGVhZGxvY2tzLCBvciByZXNvdXJjZSBsZWFrcy4KCk5vdywgZ29pbmcgdGhyb3VnaCBgaW9fd29ya2VyX2NhbmNlbF9jYmAgYWdhaW4sIGl0JiMzOTtzIGNsZWFyIHRoaXMgaXMganVzdCBhYm91dCBrZWVwaW5nIHRyYWNrIG9mIHRoZSB3b3JrZXJzLCBub3RoaW5nIGVsc2UuCgpgYGBjCnN0YXRpYyB2b2lkIGlvX3dvcmtlcl9jYW5jZWxfY2Ioc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKQp7CglzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX3dxX2dldF9hY2N0KHdvcmtlcik7CglzdHJ1Y3QgaW9fd3EgKndxID0gd29ya2VyLSZndDt3cTsKCglhdG9taWNfZGVjKCZhbXA7YWNjdC0mZ3Q7bnJfcnVubmluZyk7CgkvKiBjcmVhdGVfd29ya2VyX2NiKCkgaGFzIG5vdCByZXNlcnZlZCBhIHdvcmtlciBzbG90IHlldC4gKi8KCWlmICh3b3JrZXItJmd0O2NyZWF0ZV93b3JrLmZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jYikgewoJCXJhd19zcGluX2xvY2soJmFtcDthY2N0LSZndDt3b3JrZXJzX2xvY2spOwoJCWFjY3QtJmd0O25yX3dvcmtlcnMtLTsKCQlyYXdfc3Bpbl91bmxvY2soJmFtcDthY2N0LSZndDt3b3JrZXJzX2xvY2spOwoJfQoJaW9fd29ya2VyX3JlZl9wdXQod3EpOwoJY2xlYXJfYml0X3VubG9jaygwLCAmYW1wO3dvcmtlci0mZ3Q7Y3JlYXRlX3N0YXRlKTsKCWlvX3dvcmtlcl9yZWxlYXNlKHdvcmtlcik7Cn0KYGBgCgpTbywgZGVmaW5pdGVseSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBzaGVuYW5pZ2FucyBhcmUgYXQgcGxheSBoZXJlLCB3aGljaCBpcyBhIHJlbGllZi4gSSYjMzk7bSBjb21mb3J0YWJsZSBzYXlpbmcgdGhpcyBkb2VzbiYjMzk7dCBuZWVkIHRvIGJlIGZsYWdnZWQgZm9yIEtNU0FOLCBJJiMzOTtsbCBzZXQgTmVlZHNLTVNBTiB0byBmYWxzZS4gSXQmIzM5O3MgcHVyZWx5IGFuIGFjY291bnRpbmcgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBhY2NvdW50aW5nIGJ1ZyBpbiBpb193b3JrZXJfY2FuY2VsX2NiKCkgd2hlcmUgYWNjdC1cdTAwM2Vucl93b3JrZXJzIHdhcyBkZWNyZW1lbnRlZCBldmVuIGlmIGNyZWF0ZV93b3JrZXJfY2IoKSBoYWQgbm90IHJlc2VydmVkIGEgd29ya2VyIHNsb3QgeWV0LiBUaGlzIGlzIGEgbG9naWMgYnVnIHJlbGF0ZWQgdG8gcmVzb3VyY2UgYWNjb3VudGluZyBhbmQgY29uY3VycmVuY3ksIHdoaWNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gYWNjb3VudGluZyBidWcgaW4gaW9fd29ya2VyX2NhbmNlbF9jYigpIHdoZXJlIGFjY3QtXHUwMDNlbnJfd29ya2VycyB3YXMgZGVjcmVtZW50ZWQgZXZlbiBpZiBjcmVhdGVfd29ya2VyX2NiKCkgaGFkIG5vdCByZXNlcnZlZCBhIHdvcmtlciBzbG90IHlldC4gVGhpcyBpcyBhIGxvZ2ljIGJ1ZyByZWxhdGVkIHRvIHJlc291cmNlIGFjY291bnRpbmcgYW5kIGNvbmN1cnJlbmN5LCB3aGljaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjI6NTAuMTU1NzI3Njc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ1NjE4Nzc4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb193cV9jcmVhdGVcIixcbiAgICBcImlvX3dxX3B1dF9hbmRfZXhpdFwiLFxuICAgIFwiaW9fd3FfZW5xdWV1ZVwiLFxuICAgIFwiaW9fd3FfY2FuY2VsX2NiXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBhY2NvdW50aW5nIGJ1ZyBpbiBpb193b3JrZXJfY2FuY2VsX2NiKCkgd2hlcmUgYWNjdC1cXHUwMDNlbnJfd29ya2VycyB3YXMgZGVjcmVtZW50ZWQgZXZlbiBpZiBjcmVhdGVfd29ya2VyX2NiKCkgaGFkIG5vdCByZXNlcnZlZCBhIHdvcmtlciBzbG90IHlldC4gVGhpcyBpcyBhIGxvZ2ljIGJ1ZyByZWxhdGVkIHRvIHJlc291cmNlIGFjY291bnRpbmcgYW5kIGNvbmN1cnJlbmN5LCB3aGljaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaW9fd29ya2VyX2NhbmNlbF9jYmAgaW4gYGlvX3VyaW5nL2lvLXdxLmNgIHRvIGNvbmRpdGlvbmFsbHkgZGVjcmVtZW50IGBhY2N0LVxcdTAwM2Vucl93b3JrZXJzYCBvbmx5IGlmIGB3b3JrZXItXFx1MDAzZWNyZWF0ZV93b3JrLmZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jYmAuIFRoaXMgZml4ZXMgYSBidWcgaW4gaW9fdXJpbmcgd29ya2VyIGNhbmNlbGxhdGlvbiB3aGVyZSB0aGUgd29ya2VyIHNsb3Qgd2FzIG5vdCB5ZXQgcmVzZXJ2ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBpb191cmluZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjI6NTAuMTU1NzM0MzA0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA0ODA1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyZWNhYTJhNjE5Y2Y5YzM3N2QyMGE0Zjg3NjQzMmM4NGUzZDE2MDY1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDExIDA3OjIyOjQ5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2lvLXdxLmMgYi9pb191cmluZy9pby13cS5jXFxuaW5kZXggMmUxNDg4MGVlZjkyYS4uZmE0MDNlZDI0NTk2MiAxMDA2NDRcXG4tLS0gYS9pb191cmluZy9pby13cS5jXFxuKysrIGIvaW9fdXJpbmcvaW8td3EuY1xcbkBAIC0yMTEsOSArMjExLDEyIEBAIHN0YXRpYyB2b2lkIGlvX3dvcmtlcl9jYW5jZWxfY2Ioc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKVxcbiBcXHRzdHJ1Y3QgaW9fd3EgKndxID0gd29ya2VyLVxcdTAwM2V3cTtcXG4gXFxuIFxcdGF0b21pY19kZWMoXFx1MDAyNmFjY3QtXFx1MDAzZW5yX3J1bm5pbmcpO1xcbi1cXHRyYXdfc3Bpbl9sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbi1cXHRhY2N0LVxcdTAwM2Vucl93b3JrZXJzLS07XFxuLVxcdHJhd19zcGluX3VubG9jayhcXHUwMDI2YWNjdC1cXHUwMDNld29ya2Vyc19sb2NrKTtcXG4rXFx0LyogY3JlYXRlX3dvcmtlcl9jYigpIGhhcyBub3QgcmVzZXJ2ZWQgYSB3b3JrZXIgc2xvdCB5ZXQuICovXFxuK1xcdGlmICh3b3JrZXItXFx1MDAzZWNyZWF0ZV93b3JrLmZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jYikge1xcbitcXHRcXHRyYXdfc3Bpbl9sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbitcXHRcXHRhY2N0LVxcdTAwM2Vucl93b3JrZXJzLS07XFxuK1xcdFxcdHJhd19zcGluX3VubG9jayhcXHUwMDI2YWNjdC1cXHUwMDNld29ya2Vyc19sb2NrKTtcXG4rXFx0fVxcbiBcXHRpb193b3JrZXJfcmVmX3B1dCh3cSk7XFxuIFxcdGNsZWFyX2JpdF91bmxvY2soMCwgXFx1MDAyNndvcmtlci1cXHUwMDNlY3JlYXRlX3N0YXRlKTtcXG4gXFx0aW9fd29ya2VyX3JlbGVhc2Uod29ya2VyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjI6NTAuNTk2OTk0NTk1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODUzNDY5MDcxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb193cV9jcmVhdGVcIixcbiAgICBcImlvX3dxX3B1dF9hbmRfZXhpdFwiLFxuICAgIFwiaW9fd3FfZW5xdWV1ZVwiLFxuICAgIFwiaW9fd3FfY2FuY2VsX2NiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGlvX3dvcmtlcl9jYW5jZWxfY2JgIGluIGBpb191cmluZy9pby13cS5jYCB0byBjb25kaXRpb25hbGx5IGRlY3JlbWVudCBgYWNjdC1cXHUwMDNlbnJfd29ya2Vyc2Agb25seSBpZiBgd29ya2VyLVxcdTAwM2VjcmVhdGVfd29yay5mdW5jICE9IGNyZWF0ZV93b3JrZXJfY2JgLiBUaGlzIGZpeGVzIGEgYnVnIGluIGlvX3VyaW5nIHdvcmtlciBjYW5jZWxsYXRpb24gd2hlcmUgdGhlIHdvcmtlciBzbG90IHdhcyBub3QgeWV0IHJlc2VydmVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9fdXJpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJlY2FhMmE2MTljZjljMzc3ZDIwYTRmODc2NDMyYzg0ZTNkMTYwNjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNzoyMjo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2lvLXdxLmMgYi9pb191cmluZy9pby13cS5jXG5pbmRleCAyZTE0ODgwZWVmOTJhLi5mYTQwM2VkMjQ1OTYyIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvaW8td3EuY1xuKysrIGIvaW9fdXJpbmcvaW8td3EuY1xuQEAgLTIxMSw5ICsyMTEsMTIgQEAgc3RhdGljIHZvaWQgaW9fd29ya2VyX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpXG4gXHRzdHJ1Y3QgaW9fd3EgKndxID0gd29ya2VyLVx1MDAzZXdxO1xuIFxuIFx0YXRvbWljX2RlYyhcdTAwMjZhY2N0LVx1MDAzZW5yX3J1bm5pbmcpO1xuLVx0cmF3X3NwaW5fbG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4tXHRhY2N0LVx1MDAzZW5yX3dvcmtlcnMtLTtcbi1cdHJhd19zcGluX3VubG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4rXHQvKiBjcmVhdGVfd29ya2VyX2NiKCkgaGFzIG5vdCByZXNlcnZlZCBhIHdvcmtlciBzbG90IHlldC4gKi9cbitcdGlmICh3b3JrZXItXHUwMDNlY3JlYXRlX3dvcmsuZnVuYyAhPSBjcmVhdGVfd29ya2VyX2NiKSB7XG4rXHRcdHJhd19zcGluX2xvY2soXHUwMDI2YWNjdC1cdTAwM2V3b3JrZXJzX2xvY2spO1xuK1x0XHRhY2N0LVx1MDAzZW5yX3dvcmtlcnMtLTtcbitcdFx0cmF3X3NwaW5fdW5sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbitcdH1cbiBcdGlvX3dvcmtlcl9yZWZfcHV0KHdxKTtcbiBcdGNsZWFyX2JpdF91bmxvY2soMCwgXHUwMDI2d29ya2VyLVx1MDAzZWNyZWF0ZV9zdGF0ZSk7XG4gXHRpb193b3JrZXJfcmVsZWFzZSh3b3JrZXIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjI6NTAuNTk2OTk1Njk1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5MDg0MjI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBpbiBpb191cmluZy9pby13cS5jKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB3aXRoaW4gYGlvX3VyaW5nL2lvLXdxLmNgLiBJdCBzZWVtcyB0byBiZSB0b3VjaGluZyBgaW9fd29ya2VyX2NhbmNlbF9jYmAuIFRoZSBrZXkgY2hhbmdlIGlzIGFyb3VuZCB0aGlzIGNvbmRpdGlvbmFsOiBhdm9pZGluZyBkZWNyZW1lbnRpbmcgYGFjY3QtXHUwMDNlbnJfd29ya2Vyc2AgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLiBMZXQgbWUgc2VlLi4uIHRoZSBsb2dpYyBoZXJlIGlzIHNraXBwaW5nIHRoZSBkZWNyZW1lbnQgd2hlbiBgd29ya2VyLVx1MDAzZWNyZWF0ZV93b3JrLmZ1bmNgIGlzbid0IGBjcmVhdGVfd29ya2VyX2NiYC4gSG1tLCB0aGUgY29tbWVudCBzYXlzIHNvbWV0aGluZyBhYm91dCBgY3JlYXRlX3dvcmtlcl9jYigpYCBub3QgcmVzZXJ2aW5nIGEgd29ya2VyIHNsb3QgeWV0LiBSaWdodCwgc28gaWYgaXQncyAqbm90KiBgY3JlYXRlX3dvcmtlcl9jYmAsIHdoYXQgKmlzKiBpdD8gSXMgdGhpcyByZWxhdGVkIHRvIGBjcmVhdGVfd29ya2VyX2NvbnRgPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYm90aCBgaW9fd29ya2VyX2NhbmNlbF9jYmAgYW5kIGBjcmVhdGVfd29ya2VyX2NiYCB3aXRoaW4gdGhpcyBmaWxlLiBUaGUgZGVwZW5kZW5jeSBhbmQgaG93IHRoZXkgcmVsYXRlIGlzIG9idmlvdXNseSB0aGUga2V5IHRvIHRoaXMgcGF0Y2guIExldCdzIGRpZyBpbiBhbmQgc2VlIHRoZSBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjI6NTQuNzg3ODQwNTk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMjkwNDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3dvcmtlcl9jYW5jZWxfY2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvaW8td3EuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pby13cS5jPTE5OD1ib29sIGlvX3dxX3dvcmtlcl9zdG9wcGVkKHZvaWQpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTIwNy1cXG5pb191cmluZy9pby13cS5jOjIwODpzdGF0aWMgdm9pZCBpb193b3JrZXJfY2FuY2VsX2NiKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcXG5pb191cmluZy9pby13cS5jLTIwOS17XFxuLS1cXG5pb191cmluZy9pby13cS5jPTIzNT1zdGF0aWMgdm9pZCBpb193b3JrZXJfZXhpdChzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTI0NS1cXHRcXHRcXHRicmVhaztcXG5pb191cmluZy9pby13cS5jOjI0NjpcXHRcXHRpb193b3JrZXJfY2FuY2VsX2NiKHdvcmtlcik7XFxuaW9fdXJpbmcvaW8td3EuYy0yNDctXFx0fVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMzI0PXN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF90d19jcmVhdGUoc3RydWN0IGlvX3dxICp3cSlcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTMzMS1cXHRcXHR3b3JrZXIgPSBjb250YWluZXJfb2YoY2IsIHN0cnVjdCBpb193b3JrZXIsIGNyZWF0ZV93b3JrKTtcXG5pb191cmluZy9pby13cS5jOjEzMzI6XFx0XFx0aW9fd29ya2VyX2NhbmNlbF9jYih3b3JrZXIpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTMzMy1cXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMjo1NC44NDExMzcxNTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzY5OTQxOTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhlc2UgY2FsbGJhY2tzOiBgaW9fd29ya2VyX2NhbmNlbF9jYmAsIGBjcmVhdGVfd29ya2VyX2NiYCwgYW5kIGBjcmVhdGVfd29ya2VyX2NvbnRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGVpciByZWxhdGlvbnNoaXAgYW5kIGhvdyB0aGV5IGNvbnRyaWJ1dGUgdG8gdGhlIG92ZXJhbGwgd29ya2Zsb3cuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBvcmNoZXN0cmF0aW9uIGhlcmUuIElzIGBpb193b3JrZXJfY2FuY2VsX2NiYCB1c2VkIHRvIGNsZWFuIHVwIG9yIHNpZ25hbCB0ZXJtaW5hdGlvbiwgYW5kIGhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggYGNyZWF0ZV93b3JrZXJfY2JgIHdoaWNoIGxpa2VseSBzcGF3bnMgbmV3IHRocmVhZHMgb3IgcHJvY2Vzc2VzPyBJcyBgY3JlYXRlX3dvcmtlcl9jb250YCByZWxhdGVkLCBwZXJoYXBzIGEgY29udGludWF0aW9uIG9yIGNvbXBsZXRpb24gaGFuZGxlciBhZnRlciB3b3JrZXIgY3JlYXRpb24/IE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGNvbnRyb2wgZmxvdywgaWRlbnRpZnlpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGJldHdlZW4gdGhlc2UgY2FsbGJhY2tzLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHN0YXRlIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZW0sIGVzcGVjaWFsbHkgaWYgdGhlcmUncyBhbnkgc2hhcmVkIGRhdGEgdGhhdCByZXF1aXJlcyBjYXJlZnVsIGxvY2tpbmcgb3IgYXRvbWljIG9wZXJhdGlvbnMuIEknbGwgYWxzbyBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgZXJyb3IgaGFuZGxpbmc6IGRvIHRoZXNlIGNhbGxiYWNrcyBoYW5kbGUgZXJyb3JzIGluZGVwZW5kZW50bHksIG9yIGlzIHRoZXJlIGEgY2VudHJhbGl6ZWQgZXJyb3ItcmVwb3J0aW5nIG1lY2hhbmlzbT8gSSBuZWVkIHRvIGFuYWx5emUgaG93IGNhbmNlbGxhdGlvbiBpcyBwcm9wYWdhdGVkIHRocm91Z2ggdGhpcyBjaGFpbiwgYW5kIGxvb2sgYXQgdGhlIGVkZ2UgY2FzZXMgbGlrZSB0aGUgdGhyZWFkIGV4aXRpbmcgd2hpbGUgcHJvY2Vzc2luZyBhIHJlcXVlc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMjo1OS4yMTEwODExMTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAwMjcwNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3JlYXRlX3dvcmtlcl9jYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9pby13cS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2lvLXdxLmM9MTQ5PXN0YXRpYyBib29sIGlvX2FjY3RfY2FuY2VsX3BlbmRpbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xNTEtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaCk7XFxuaW9fdXJpbmcvaW8td3EuYzoxNTI6c3RhdGljIHZvaWQgY3JlYXRlX3dvcmtlcl9jYihzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTUzLXN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF90d19jcmVhdGUoc3RydWN0IGlvX3dxICp3cSk7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTIwOD1zdGF0aWMgdm9pZCBpb193b3JrZXJfY2FuY2VsX2NiKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMjEzLVxcdGF0b21pY19kZWMoXFx1MDAyNmFjY3QtXFx1MDAzZW5yX3J1bm5pbmcpO1xcbmlvX3VyaW5nL2lvLXdxLmM6MjE0OlxcdC8qIGNyZWF0ZV93b3JrZXJfY2IoKSBoYXMgbm90IHJlc2VydmVkIGEgd29ya2VyIHNsb3QgeWV0LiAqL1xcbmlvX3VyaW5nL2lvLXdxLmM6MjE1OlxcdGlmICh3b3JrZXItXFx1MDAzZWNyZWF0ZV93b3JrLmZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jYikge1xcbmlvX3VyaW5nL2lvLXdxLmMtMjE2LVxcdFxcdHJhd19zcGluX2xvY2soXFx1MDAyNmFjY3QtXFx1MDAzZXdvcmtlcnNfbG9jayk7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTIyNT1zdGF0aWMgYm9vbCBpb190YXNrX3dvcmtlcl9tYXRjaChzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IsIHZvaWQgKmRhdGEpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTIyOC1cXG5pb191cmluZy9pby13cS5jOjIyOTpcXHRpZiAoY2ItXFx1MDAzZWZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jYilcXG5pb191cmluZy9pby13cS5jLTIzMC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTM0Nz1zdGF0aWMgdm9pZCBpb193cV9pbmNfcnVubmluZyhzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTM1My1cXG5pb191cmluZy9pby13cS5jOjM1NDpzdGF0aWMgdm9pZCBjcmVhdGVfd29ya2VyX2NiKHN0cnVjdCBjYWxsYmFja19oZWFkICpjYilcXG5pb191cmluZy9pby13cS5jLTM1NS17XFxuLS1cXG5pb191cmluZy9pby13cS5jPTQ1OT1zdGF0aWMgdm9pZCBpb193cV9kZWNfcnVubmluZyhzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTQ4MC1cXHRhdG9taWNfaW5jKFxcdTAwMjZ3cS1cXHUwMDNld29ya2VyX3JlZnMpO1xcbmlvX3VyaW5nL2lvLXdxLmM6NDgxOlxcdGlvX3F1ZXVlX3dvcmtlcl9jcmVhdGUod29ya2VyLCBhY2N0LCBjcmVhdGVfd29ya2VyX2NiKTtcXG5pb191cmluZy9pby13cS5jLTQ4Mi19XFxuLS1cXG5pb191cmluZy9pby13cS5jPTEzMDk9c3RhdGljIGJvb2wgaW9fdGFza193b3JrX21hdGNoKHN0cnVjdCBjYWxsYmFja19oZWFkICpjYiwgdm9pZCAqZGF0YSlcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTMxMi1cXG5pb191cmluZy9pby13cS5jOjEzMTM6XFx0aWYgKGNiLVxcdTAwM2VmdW5jICE9IGNyZWF0ZV93b3JrZXJfY2IgXFx1MDAyNlxcdTAwMjYgY2ItXFx1MDAzZWZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jb250KVxcbmlvX3VyaW5nL2lvLXdxLmMtMTMxNC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjIyOjU5LjI2MTExNDIzMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NzcwMzQ5MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3VidGxlIGlvX3VyaW5nIFdvcmtlciBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgaW9fdXJpbmcvaW8td3EuY2AsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBgaW9fd29ya2VyX2NhbmNlbF9jYmAuIFRoZSBrZXkgY2hhbmdlIGlzIHRoaXMgY29uZGl0aW9uYWwgbG9naWM6IGRvbid0IGRlY3JlbWVudCBgYWNjdC1cdTAwM2Vucl93b3JrZXJzYCBpZiB0aGUgd29ya2VyJ3MgY3JlYXRpb24gZnVuY3Rpb24gaXNuJ3QgYGNyZWF0ZV93b3JrZXJfY2JgLiBUaGUgY29kZSBzbmlwcGV0IHJlYWxseSBjbGFyaWZpZXMgaXQ6XG5cbmBgYGNcblx0LyogY3JlYXRlX3dvcmtlcl9jYigpIGhhcyBub3QgcmVzZXJ2ZWQgYSB3b3JrZXIgc2xvdCB5ZXQuICovXG5cdGlmICh3b3JrZXItXHUwMDNlY3JlYXRlX3dvcmsuZnVuYyAhPSBjcmVhdGVfd29ya2VyX2NiKSB7XG5cdFx0cmF3X3NwaW5fbG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG5cdFx0YWNjdC1cdTAwM2Vucl93b3JrZXJzLS07XG5cdFx0cmF3X3NwaW5fdW5sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcblx0fVxuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uOyBpdCdzIGZpeGluZyBhIHBvdGVudGlhbCBidWcgaW4gaG93IGlvX3VyaW5nIHdvcmtlcnMgYXJlIG1hbmFnZWQgZHVyaW5nIGNhbmNlbGxhdGlvbi4gVGhhdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZyBvcHRpb25zIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkgYW5kIGlkZW50aWZ5IHRoZSByZWxldmFudCBzeW1ib2xzLiBUaGUgZnVuY3Rpb24gYGlvX3dvcmtlcl9jYW5jZWxfY2JgIGl0c2VsZiBpcyBzdGF0aWMsIHNvIEknbGwgbmVlZCB0byBsb29rIGF0IHdoYXQgY2FsbHMgaXQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSB1c2VzIGl0LiBBIHF1aWNrIGxvb2sgc2hvd3MgdGhhdCBpdCdzIGNhbGxlZCBieSBgaW9fd29ya2VyX2V4aXRgIGFuZCBgaW9fd3FfY2FuY2VsX3R3X2NyZWF0ZWAsIHdoaWNoIHNob3VsZCBnaXZlIG1lIGdvb2QgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODQyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjIzOjAzLjkzODE1MTU5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzI4OTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3dvcmtlcl9leGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL2lvLXdxLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW8td3EuYz0yMjU9c3RhdGljIGJvb2wgaW9fdGFza193b3JrZXJfbWF0Y2goc3RydWN0IGNhbGxiYWNrX2hlYWQgKmNiLCB2b2lkICpkYXRhKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0yMzQtXFxuaW9fdXJpbmcvaW8td3EuYzoyMzU6c3RhdGljIHZvaWQgaW9fd29ya2VyX2V4aXQoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKVxcbmlvX3VyaW5nL2lvLXdxLmMtMjM2LXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9Njg1PXN0YXRpYyBpbnQgaW9fd3Ffd29ya2VyKHZvaWQgKmRhdGEpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTc0OC1cXG5pb191cmluZy9pby13cS5jOjc0OTpcXHRpb193b3JrZXJfZXhpdCh3b3JrZXIpO1xcbmlvX3VyaW5nL2lvLXdxLmMtNzUwLVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzowMy45ODU4ODUxMjZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjg0NzU3MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgYXMgaWYgdGhlc2Ugd2VyZSBteSBvd24gdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyB0aGUgSS9PIFdvcmtlciBUaHJlYWRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGNvcmUgb2YgdGhlIEkvTyB3b3JrZXIgdGhyZWFkIG1lY2hhbmlzbS4gYGlvX3dxX3dvcmtlcmAuLi4gdGhhdCdzIHRoZSBwcmltYXJ5IHRocmVhZCBmdW5jdGlvbiwgdGhlIGhlYXJ0IG9mIHRoZSB3aG9sZSBvcGVyYXRpb24uIFRoYXQncyB0aGUgZnVuY3Rpb24gd2hlcmUgdGhlIGFjdHVhbCB3b3JrIGdldHMgZG9uZS4gVGhhdCdzIHdoZXJlIHRoZSBJL08gcHJvY2Vzc2luZyBpcyBvcmNoZXN0cmF0ZWQuXG5cblRoZW4gSSBzZWUgYGlvX3dxX2NhbmNlbF90d19jcmVhdGVgLCBhbmQgdGhhdCdzIGNhbGxlZCBzcGVjaWZpY2FsbHkgZnJvbSBgaW9fd3FfZXhpdF93b3JrZXJzYC4gU28sIHdoZW4gdGhlIHN5c3RlbSdzIHNodXR0aW5nIGRvd24gdGhlIHdvcmtlciB0aHJlYWRzLCB0aGlzIGNhbmNlbGxhdGlvbiBmdW5jdGlvbiBpcyBpbnZva2VkLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBJdCdzIGEgY2xlYW51cCBzdGVwLCBwb3RlbnRpYWxseSB0byBwcmV2ZW50IGFueSBuZXcgdGhyZWFkIGNyZWF0aW9ucyBmcm9tIHN1Y2NlZWRpbmcgb24gc2h1dGRvd24uIEl0J3MgYWxsIGFib3V0IG1ha2luZyB0aGUgcHJvY2VzcyBhcyB0aWR5IGFzIHBvc3NpYmxlLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYGlvX3dxX2NhbmNlbF90d19jcmVhdGVgIG1vcmUgdG8gdW5kZXJzdGFuZCB3aGF0IHJlc291cmNlcyBpdCdzIGNsZWFuaW5nIHVwLiBUaGUgY29udGV4dCBpcyBvYnZpb3VzbHkgYWJvdXQgdGhyZWFkIG1hbmFnZW1lbnQgYW5kIHNwZWNpZmljYWxseSB0aGUgY2xlYW51cCBvZiB0aHJlYWQgY3JlYXRpb24gcmVsYXRlZCBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGUgSS9PIHdvcmtlciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjA5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjM6MDcuMjcwNjQ2OTY2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY0MDU3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb193cV9jYW5jZWxfdHdfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL2lvLXdxLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW8td3EuYz0xNTI9c3RhdGljIHZvaWQgY3JlYXRlX3dvcmtlcl9jYihzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IpO1xcbmlvX3VyaW5nL2lvLXdxLmM6MTUzOnN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF90d19jcmVhdGUoc3RydWN0IGlvX3dxICp3cSk7XFxuaW9fdXJpbmcvaW8td3EuYy0xNTQtXFxuLS1cXG5pb191cmluZy9pby13cS5jPTM5MD1zdGF0aWMgYm9vbCBpb19xdWV1ZV93b3JrZXJfY3JlYXRlKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcixcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNDIwLVxcdFxcdGlmICh0ZXN0X2JpdChJT19XUV9CSVRfRVhJVCwgXFx1MDAyNndxLVxcdTAwM2VzdGF0ZSkpXFxuaW9fdXJpbmcvaW8td3EuYzo0MjE6XFx0XFx0XFx0aW9fd3FfY2FuY2VsX3R3X2NyZWF0ZSh3cSk7XFxuaW9fdXJpbmcvaW8td3EuYy00MjItXFx0XFx0aW9fd29ya2VyX3JlZl9wdXQod3EpO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMzE5PXZvaWQgaW9fd3FfZXhpdF9zdGFydChzdHJ1Y3QgaW9fd3EgKndxKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMzIzLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTMyNDpzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfdHdfY3JlYXRlKHN0cnVjdCBpb193cSAqd3EpXFxuaW9fdXJpbmcvaW8td3EuYy0xMzI1LXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9MTM0Mj1zdGF0aWMgdm9pZCBpb193cV9leGl0X3dvcmtlcnMoc3RydWN0IGlvX3dxICp3cSlcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTM0OC1cXG5pb191cmluZy9pby13cS5jOjEzNDk6XFx0aW9fd3FfY2FuY2VsX3R3X2NyZWF0ZSh3cSk7XFxuaW9fdXJpbmcvaW8td3EuYy0xMzUwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzowNy4zMTcyOTE5NjJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwNzI1NDQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIGlvX3dxIERlc3RydWN0aW9uKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBpb193cV9leGl0X3dvcmtlcnNgIGFuZCBgaW9fd3FfZXhpdF9zdGFydGAuIFRob3NlIGFyZSBkZWZpbml0ZWx5IGNhbGxlZCBkdXJpbmcgdGhlIGRlc3RydWN0aW9uIHByb2Nlc3Mgb2YgYW4gYGlvX3dxYCwgbWFraW5nIHRoZW0ga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IGl0IGFsbCB1bnJhdmVscy4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoYXQgcHJvY2Vzcy4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBwaWVjZXMsIGZyb20gc3RhcnQgdG8gZmluaXNoLlxuXG5UaGVyZWZvcmUsIEkgbmVlZCB0byBzZWUgd2hhdCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBtaWdodCBiZSB1c2VmdWwgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBpb193cWAgaXMgY3JlYXRlZCwgYW5kIGV2ZW4gbW9yZSBjcml0aWNhbGx5LCB0b3JuIGRvd24uIEnigJlsbCBmb2N1cyBvbiBub24tc3RhdGljIGZ1bmN0aW9ucywgYXMgdGhleSdyZSB0aGUgb25lcyBtb3N0IGxpa2VseSB0byBiZSBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJIG9yIGF0IGxlYXN0IGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGNhc3QgYSB3aWRlciBuZXQgaGVyZSBhbmQgZmluZCBhbnl0aGluZyBpbnZvbHZlZCBpbiBlaXRoZXIgY3JlYXRpb24gb3IgZGVzdHJ1Y3Rpb24gdGhhdCBtaWdodCBiZSBsdXJraW5nIGFyb3VuZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgaG93IGBpb193cWAgbGlmZSBjeWNsZSBpcyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzM1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjM6MTEuNjI0NTQ5MDczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc5MDMyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb193cV9leGl0X3dvcmtlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvaW8td3EuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pby13cS5jPTM5MD1zdGF0aWMgYm9vbCBpb19xdWV1ZV93b3JrZXJfY3JlYXRlKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcixcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNDE3LVxcdFxcdCAqIG5vdyBzZXQuIHdxIGV4aXQgZG9lcyB0aGF0IHRvbywgYnV0IHdlIGNhbiBoYXZlIGFkZGVkIHRoaXNcXG5pb191cmluZy9pby13cS5jOjQxODpcXHRcXHQgKiB3b3JrIGl0ZW0gYWZ0ZXIgd2UgY2FuY2VsZWQgaW4gaW9fd3FfZXhpdF93b3JrZXJzKCkuXFxuaW9fdXJpbmcvaW8td3EuYy00MTktXFx0XFx0ICovXFxuLS1cXG5pb191cmluZy9pby13cS5jPTEzMjQ9c3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3R3X2NyZWF0ZShzdHJ1Y3QgaW9fd3EgKndxKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMzQxLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTM0MjpzdGF0aWMgdm9pZCBpb193cV9leGl0X3dvcmtlcnMoc3RydWN0IGlvX3dxICp3cSlcXG5pb191cmluZy9pby13cS5jLTEzNDMte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMzk4PXZvaWQgaW9fd3FfcHV0X2FuZF9leGl0KHN0cnVjdCBpb193cSAqd3EpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTE0MDEtXFxuaW9fdXJpbmcvaW8td3EuYzoxNDAyOlxcdGlvX3dxX2V4aXRfd29ya2Vycyh3cSk7XFxuaW9fdXJpbmcvaW8td3EuYy0xNDAzLVxcdGlvX3dxX2Rlc3Ryb3kod3EpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzoxMS42NjkzNDM2NDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxOTIxODY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgaW9fd3FgIENsZWFudXAgUHJvY2VkdXJlKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IGBpb193cV9wdXRfYW5kX2V4aXRgLiBUaGUgZmFjdCB0aGF0IGl0J3MgKm5vdCogYSBzdGF0aWMgZnVuY3Rpb24gaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBpbXBsaWVzIGl0IG1pZ2h0IGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIG1vZHVsZSwgd2hpY2ggaGFzIGltcGxpY2F0aW9ucyBmb3Igc3luY2hyb25pemF0aW9uIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0cyBpbiB3aGljaCBpdCdzIGJlaW5nIHVzZWQgYmV5b25kIHRoZSBpbW1lZGlhdGUgc2NvcGUuIFRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgYGlvX3dxYCBzdHJ1Y3R1cmUgaXMgbWFuYWdlZCwgSSByZWFsbHkgbmVlZCB0byB0cmFjZSBpdHMgb3JpZ2lucywgdGhlIGxpZmVjeWNsZSBvZiB0aGUgb2JqZWN0LCBhbmQgaXRzIGZpbmFsaXphdGlvbiByb3V0aW5lLiBTbywgSSBuZWVkIHRvIHNlZSAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20uIFRoZXJlZm9yZSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjcmVhdGlvbiBwcm9jZXNzLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBpb193cV9jcmVhdGVgIG5leHQuIFRoaXMgd2lsbCBsaWtlbHkgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBleHBlY3RlZCB1c2FnZSBhbmQgbGlmZWN5Y2xlIG9mIHRoZSBgaW9fd3FgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTc2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjM6MTUuMTg4NTY1MDA4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE3OTQ5OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fd3FfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL2lvLXdxLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW8td3EuYz0yOTU9c3RhdGljIGJvb2wgaW9fYWNjdF9hY3RpdmF0ZV9mcmVlX3dvcmtlcihzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdClcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMzI1LSAqL1xcbmlvX3VyaW5nL2lvLXdxLmM6MzI2OnN0YXRpYyBib29sIGlvX3dxX2NyZWF0ZV93b3JrZXIoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpXFxuaW9fdXJpbmcvaW8td3EuYy0zMjcte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMDI4PXZvaWQgaW9fd3FfZW5xdWV1ZShzdHJ1Y3QgaW9fd3EgKndxLCBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaylcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTA2MS1cXG5pb191cmluZy9pby13cS5jOjEwNjI6XFx0XFx0ZGlkX2NyZWF0ZSA9IGlvX3dxX2NyZWF0ZV93b3JrZXIod3EsIGFjY3QpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTA2My1cXHRcXHRpZiAobGlrZWx5KGRpZF9jcmVhdGUpKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMjM1PXN0YXRpYyBpbnQgaW9fd3FfaGFzaF93YWtlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMjUzLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTI1NDpzdHJ1Y3QgaW9fd3EgKmlvX3dxX2NyZWF0ZSh1bnNpZ25lZCBib3VuZGVkLCBzdHJ1Y3QgaW9fd3FfZGF0YSAqZGF0YSlcXG5pb191cmluZy9pby13cS5jLTEyNTUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzoxNS4zODAzNjYzOTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4NTAyODM4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBJZiBJJ20gdHJ5aW5nIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgb2YgdGhpcyBJL08gd29ya3F1ZXVlIGltcGxlbWVudGF0aW9uLCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIHByaW1hcnkgZW50cnkgYW5kIGV4aXQgcG9pbnRzLCB0aGUgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLCByZWFsbHkuIFNvLCBgaW9fd3FfY3JlYXRlYCBhbmQgYGlvX3dxX3B1dF9hbmRfZXhpdGAgZGVmaW5pdGVseSBqdW1wIG91dCBhcyBpbXBvcnRhbnQgc3ltYm9scyB0byB0cmFjZS4gVGhleSBhcmUgdGhlIHNjYWZmb2xkaW5nLCB0aGUgYnVpbGRpbmcgYW5kIGRpc21hbnRsaW5nLCBzbyB0byBzcGVhay5cblxuVGhlbiwgb2YgY291cnNlLCB0aGUgYWN0dWFsIHdvcmsgZW5xdWV1aW5nIG5lZWRzIGNvbnNpZGVyYXRpb246IGBpb193cV9lbnF1ZXVlYCBpcyBvYnZpb3VzbHkgYSBjcml0aWNhbCBwaWVjZS4gVGhhdCdzIHdoZXJlIHRoZSBhY3R1YWwgSS9PIHJlcXVlc3RzIGFyZSBnZXR0aW5nIHN1Ym1pdHRlZC5cblxuTm93LCB3aGF0IGFib3V0IHRoZSB3b3JrZXIgaXRzZWxmPyBBaCwgYGlvX3dxX3dvcmtlcmAuLi4gdGhhdCBvbmUncyBzdGF0aWMsIGlzbid0IGl0PyBIbW0sIHN0YXRpYyBtZWFucyBpbnRlcm5hbCB0byB0aGUgZmlsZSwgYW5kIHRoYXQgbWlnaHQgbWFrZSBpdCBhIGxlc3Mgb2J2aW91cyB0YXJnZXQgZm9yIHNvbWVvbmUgdHJ5aW5nIHRvIGludGVyZmFjZSB3aXRoIGl0IGZyb20gYW5vdGhlciBjb250ZXh0LiBJIG5lZWQgdG8gYmUgYXdhcmUgb2Ygd2hhdCBpcyBleHBvc2VkLCBhbmQgd2hhdCBpcyBpbnRlcm5hbC4gSSBzaG91bGQgYWxzbyBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSB3b3JrcXVldWUuIFRoZXkgY291bGQgYmUgdGhlIGtleSB0byBpbnRlZ3JhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYxNSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjIzOjE5LjA2NTM5ODA4N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyNDkzNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fd3FfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL2lvLXdxLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MzIgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmlvX3VyaW5nL2lvLXdxLmM9NDg9c3RydWN0IGlvX3dvcmtlciB7XFxuLS1cXG5pb191cmluZy9pby13cS5jLTU0LVxcdHN0cnVjdCBpb193cSAqd3E7XFxuaW9fdXJpbmcvaW8td3EuYzo1NTpcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdDtcXG5pb191cmluZy9pby13cS5jLTU2LVxcbmlvX3VyaW5nL2lvLXdxLmM6NTc6XFx0c3RydWN0IGlvX3dxX3dvcmsgKmN1cl93b3JrO1xcbmlvX3VyaW5nL2lvLXdxLmMtNTgtXFx0cmF3X3NwaW5sb2NrX3QgbG9jaztcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNzktXFxuaW9fdXJpbmcvaW8td3EuYzo4MDpzdHJ1Y3QgaW9fd3FfYWNjdCB7XFxuaW9fdXJpbmcvaW8td3EuYy04MS1cXHQvKipcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTAyLVxcdHJhd19zcGlubG9ja190IGxvY2s7XFxuaW9fdXJpbmcvaW8td3EuYzoxMDM6XFx0c3RydWN0IGlvX3dxX3dvcmtfbGlzdCB3b3JrX2xpc3Q7XFxuaW9fdXJpbmcvaW8td3EuYy0xMDQtXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9MTE2PXN0cnVjdCBpb193cSB7XFxuLS1cXG5pb191cmluZy9pby13cS5jLTExOC1cXG5pb191cmluZy9pby13cS5jOjExOTpcXHRzdHJ1Y3QgaW9fd3FfaGFzaCAqaGFzaDtcXG5pb191cmluZy9pby13cS5jLTEyMC1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTI3LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTI4OlxcdHN0cnVjdCBpb193cV9hY2N0IGFjY3RbSU9fV1FfQUNDVF9OUl07XFxuaW9fdXJpbmcvaW8td3EuYy0xMjktXFxuLS1cXG5pb191cmluZy9pby13cS5jLTEzMS1cXG5pb191cmluZy9pby13cS5jOjEzMjpcXHRzdHJ1Y3QgaW9fd3Ffd29yayAqaGFzaF90YWlsW0lPX1dRX05SX0hBU0hfQlVDS0VUU107XFxuaW9fdXJpbmcvaW8td3EuYy0xMzMtXFxuLS1cXG5pb191cmluZy9pby13cS5jLTEzNi1cXG5pb191cmluZy9pby13cS5jOjEzNzpzdGF0aWMgZW51bSBjcHVocF9zdGF0ZSBpb193cV9vbmxpbmU7XFxuaW9fdXJpbmcvaW8td3EuYy0xMzgtXFxuaW9fdXJpbmcvaW8td3EuYz0xMzk9c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhIHtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTQ2LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTQ3OnN0YXRpYyBib29sIGNyZWF0ZV9pb193b3JrZXIoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpO1xcbmlvX3VyaW5nL2lvLXdxLmM6MTQ4OnN0YXRpYyB2b2lkIGlvX3dxX2RlY19ydW5uaW5nKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcik7XFxuaW9fdXJpbmcvaW8td3EuYy0xNDktc3RhdGljIGJvb2wgaW9fYWNjdF9jYW5jZWxfcGVuZGluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXFxuaW9fdXJpbmcvaW8td3EuYzoxNTA6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXFxuaW9fdXJpbmcvaW8td3EuYy0xNTEtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaCk7XFxuaW9fdXJpbmcvaW8td3EuYz0xNTI9c3RhdGljIHZvaWQgY3JlYXRlX3dvcmtlcl9jYihzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IpO1xcbmlvX3VyaW5nL2lvLXdxLmM6MTUzOnN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF90d19jcmVhdGUoc3RydWN0IGlvX3dxICp3cSk7XFxuaW9fdXJpbmcvaW8td3EuYy0xNTQtXFxuaW9fdXJpbmcvaW8td3EuYz0xNTU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19pb19nZXRfd29ya19oYXNoKHVuc2lnbmVkIGludCB3b3JrX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xNTktXFxuaW9fdXJpbmcvaW8td3EuYzoxNjA6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fZ2V0X3dvcmtfaGFzaChzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaylcXG5pb191cmluZy9pby13cS5jLTE2MS17XFxuLS1cXG5pb191cmluZy9pby13cS5jPTE3MD1zdGF0aWMgdm9pZCBpb193b3JrZXJfcmVsZWFzZShzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTE3NS1cXG5pb191cmluZy9pby13cS5jOjE3NjpzdGF0aWMgaW5saW5lIHN0cnVjdCBpb193cV9hY2N0ICppb19nZXRfYWNjdChzdHJ1Y3QgaW9fd3EgKndxLCBib29sIGJvdW5kKVxcbmlvX3VyaW5nL2lvLXdxLmMtMTc3LXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTgwLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTgxOnN0YXRpYyBpbmxpbmUgc3RydWN0IGlvX3dxX2FjY3QgKmlvX3dvcmtfZ2V0X2FjY3Qoc3RydWN0IGlvX3dxICp3cSxcXG5pb191cmluZy9pby13cS5jLTE4Mi1cXHRcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCB3b3JrX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xODYtXFxuaW9fdXJpbmcvaW8td3EuYzoxODc6c3RhdGljIGlubGluZSBzdHJ1Y3QgaW9fd3FfYWNjdCAqaW9fd3FfZ2V0X2FjY3Qoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKVxcbmlvX3VyaW5nL2lvLXdxLmMtMTg4LXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9MTkyPXN0YXRpYyB2b2lkIGlvX3dvcmtlcl9yZWZfcHV0KHN0cnVjdCBpb193cSAqd3EpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTE5Ny1cXG5pb191cmluZy9pby13cS5jOjE5ODpib29sIGlvX3dxX3dvcmtlcl9zdG9wcGVkKHZvaWQpXFxuaW9fdXJpbmcvaW8td3EuYy0xOTkte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0yMDEtXFxuaW9fdXJpbmcvaW8td3EuYzoyMDI6XFx0aWYgKFdBUk5fT05fT05DRSghaW9fd3FfY3VycmVudF9pc193b3JrZXIoKSkpXFxuaW9fdXJpbmcvaW8td3EuYy0yMDMtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTIwOD1zdGF0aWMgdm9pZCBpb193b3JrZXJfY2FuY2VsX2NiKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcXG5pb191cmluZy9pby13cS5jLTIwOS17XFxuaW9fdXJpbmcvaW8td3EuYzoyMTA6XFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBpb193cV9nZXRfYWNjdCh3b3JrZXIpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMjExLVxcdHN0cnVjdCBpb193cSAqd3EgPSB3b3JrZXItXFx1MDAzZXdxO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0yMzU9c3RhdGljIHZvaWQgaW9fd29ya2VyX2V4aXQoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0yMzctXFx0c3RydWN0IGlvX3dxICp3cSA9IHdvcmtlci1cXHUwMDNld3E7XFxuaW9fdXJpbmcvaW8td3EuYzoyMzg6XFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBpb193cV9nZXRfYWNjdCh3b3JrZXIpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMjM5LVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0yNTYtXFx0cmF3X3NwaW5fdW5sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbmlvX3VyaW5nL2lvLXdxLmM6MjU3OlxcdGlvX3dxX2RlY19ydW5uaW5nKHdvcmtlcik7XFxuaW9fdXJpbmcvaW8td3EuYy0yNTgtXFx0LypcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMjY5LVxcbmlvX3VyaW5nL2lvLXdxLmM6MjcwOnN0YXRpYyBpbmxpbmUgYm9vbCBfX2lvX2FjY3RfcnVuX3F1ZXVlKHN0cnVjdCBpb193cV9hY2N0ICphY2N0KVxcbmlvX3VyaW5nL2lvLXdxLmMtMjcxLXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMjc5LSAqL1xcbmlvX3VyaW5nL2lvLXdxLmM6MjgwOnN0YXRpYyBpbmxpbmUgYm9vbCBpb19hY2N0X3J1bl9xdWV1ZShzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdClcXG5pb191cmluZy9pby13cS5jLTI4MS1cXHRfX2FjcXVpcmVzKFxcdTAwMjZhY2N0LVxcdTAwM2Vsb2NrKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0yOTQtICovXFxuaW9fdXJpbmcvaW8td3EuYzoyOTU6c3RhdGljIGJvb2wgaW9fYWNjdF9hY3RpdmF0ZV9mcmVlX3dvcmtlcihzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdClcXG5pb191cmluZy9pby13cS5jLTI5Ni1cXHRfX211c3RfaG9sZChSQ1UpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTMyNS0gKi9cXG5pb191cmluZy9pby13cS5jOjMyNjpzdGF0aWMgYm9vbCBpb193cV9jcmVhdGVfd29ya2VyKHN0cnVjdCBpb193cSAqd3EsIHN0cnVjdCBpb193cV9hY2N0ICphY2N0KVxcbmlvX3VyaW5nL2lvLXdxLmMtMzI3LXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMzQ2LVxcbmlvX3VyaW5nL2lvLXdxLmM6MzQ3OnN0YXRpYyB2b2lkIGlvX3dxX2luY19ydW5uaW5nKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcXG5pb191cmluZy9pby13cS5jLTM0OC17XFxuaW9fdXJpbmcvaW8td3EuYzozNDk6XFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBpb193cV9nZXRfYWNjdCh3b3JrZXIpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMzUwLVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0zNTQ9c3RhdGljIHZvaWQgY3JlYXRlX3dvcmtlcl9jYihzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTM1OC1cXG5pb191cmluZy9pby13cS5jOjM1OTpcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdDtcXG5pb191cmluZy9pby13cS5jLTM2MC1cXHRib29sIGFjdGl2YXRlZF9mcmVlX3dvcmtlciwgZG9fY3JlYXRlID0gZmFsc2U7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTM5MD1zdGF0aWMgYm9vbCBpb19xdWV1ZV93b3JrZXJfY3JlYXRlKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcixcXG5pb191cmluZy9pby13cS5jOjM5MTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcXG5pb191cmluZy9pby13cS5jLTM5Mi1cXHRcXHRcXHRcXHQgICB0YXNrX3dvcmtfZnVuY190IGZ1bmMpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTQxNy1cXHRcXHQgKiBub3cgc2V0LiB3cSBleGl0IGRvZXMgdGhhdCB0b28sIGJ1dCB3ZSBjYW4gaGF2ZSBhZGRlZCB0aGlzXFxuaW9fdXJpbmcvaW8td3EuYzo0MTg6XFx0XFx0ICogd29yayBpdGVtIGFmdGVyIHdlIGNhbmNlbGVkIGluIGlvX3dxX2V4aXRfd29ya2VycygpLlxcbmlvX3VyaW5nL2lvLXdxLmMtNDE5LVxcdFxcdCAqL1xcbmlvX3VyaW5nL2lvLXdxLmMtNDIwLVxcdFxcdGlmICh0ZXN0X2JpdChJT19XUV9CSVRfRVhJVCwgXFx1MDAyNndxLVxcdTAwM2VzdGF0ZSkpXFxuaW9fdXJpbmcvaW8td3EuYzo0MjE6XFx0XFx0XFx0aW9fd3FfY2FuY2VsX3R3X2NyZWF0ZSh3cSk7XFxuaW9fdXJpbmcvaW8td3EuYy00MjItXFx0XFx0aW9fd29ya2VyX3JlZl9wdXQod3EpO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy00MzUtLyogRGVmZXIgaWYgY3VycmVudCBhbmQgbmV4dCB3b3JrIGFyZSBib3RoIGhhc2hlZCB0byB0aGUgc2FtZSBjaGFpbiAqL1xcbmlvX3VyaW5nL2lvLXdxLmM6NDM2OnN0YXRpYyBib29sIGlvX3dxX2hhc2hfZGVmZXIoc3RydWN0IGlvX3dxX3dvcmsgKndvcmssIHN0cnVjdCBpb193cV9hY2N0ICphY2N0KVxcbmlvX3VyaW5nL2lvLXdxLmMtNDM3LXtcXG5pb191cmluZy9pby13cS5jLTQzOC1cXHR1bnNpZ25lZCBpbnQgaGFzaCwgd29ya19mbGFncztcXG5pb191cmluZy9pby13cS5jOjQzOTpcXHRzdHJ1Y3QgaW9fd3Ffd29yayAqbmV4dDtcXG5pb191cmluZy9pby13cS5jLTQ0MC1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNDQzLVxcdHdvcmtfZmxhZ3MgPSBhdG9taWNfcmVhZChcXHUwMDI2d29yay1cXHUwMDNlZmxhZ3MpO1xcbmlvX3VyaW5nL2lvLXdxLmM6NDQ0OlxcdGlmICghX19pb193cV9pc19oYXNoZWQod29ya19mbGFncykpXFxuaW9fdXJpbmcvaW8td3EuYy00NDUtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy00NTEtXFx0aGFzaCA9IF9faW9fZ2V0X3dvcmtfaGFzaCh3b3JrX2ZsYWdzKTtcXG5pb191cmluZy9pby13cS5jOjQ1MjpcXHRuZXh0ID0gY29udGFpbmVyX29mKGFjY3QtXFx1MDAzZXdvcmtfbGlzdC5maXJzdCwgc3RydWN0IGlvX3dxX3dvcmssIGxpc3QpO1xcbmlvX3VyaW5nL2lvLXdxLmMtNDUzLVxcdHdvcmtfZmxhZ3MgPSBhdG9taWNfcmVhZChcXHUwMDI2bmV4dC1cXHUwMDNlZmxhZ3MpO1xcbmlvX3VyaW5nL2lvLXdxLmM6NDU0OlxcdGlmICghX19pb193cV9pc19oYXNoZWQod29ya19mbGFncykpXFxuaW9fdXJpbmcvaW8td3EuYy00NTUtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy00NTgtXFxuaW9fdXJpbmcvaW8td3EuYzo0NTk6c3RhdGljIHZvaWQgaW9fd3FfZGVjX3J1bm5pbmcoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKVxcbmlvX3VyaW5nL2lvLXdxLmMtNDYwLXtcXG5pb191cmluZy9pby13cS5jOjQ2MTpcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX3dxX2dldF9hY2N0KHdvcmtlcik7XFxuaW9fdXJpbmcvaW8td3EuYy00NjItXFx0c3RydWN0IGlvX3dxICp3cSA9IHdvcmtlci1cXHUwMDNld3E7XFxuLS1cXG5pb191cmluZy9pby13cS5jLTQ3Mi1cXHRcXHRyZXR1cm47XFxuaW9fdXJpbmcvaW8td3EuYzo0NzM6XFx0aWYgKGlvX3dxX2hhc2hfZGVmZXIod29ya2VyLVxcdTAwM2VjdXJfd29yaywgYWNjdCkpIHtcXG5pb191cmluZy9pby13cS5jLTQ3NC1cXHRcXHRyYXdfc3Bpbl91bmxvY2soXFx1MDAyNmFjY3QtXFx1MDAzZWxvY2spO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy00ODctICovXFxuaW9fdXJpbmcvaW8td3EuYzo0ODg6c3RhdGljIHZvaWQgX19pb193b3JrZXJfYnVzeShzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCwgc3RydWN0IGlvX3dvcmtlciAqd29ya2VyKVxcbmlvX3VyaW5nL2lvLXdxLmMtNDg5LXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNTAwLSAqL1xcbmlvX3VyaW5nL2lvLXdxLmM6NTAxOnN0YXRpYyB2b2lkIF9faW9fd29ya2VyX2lkbGUoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsIHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcXG5pb191cmluZy9pby13cS5jLTUwMi1cXHRfX211c3RfaG9sZChhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spXFxuLS1cXG5pb191cmluZy9pby13cS5jPTUxMD1zdGF0aWMgYm9vbCBpb193YWl0X29uX2hhc2goc3RydWN0IGlvX3dxICp3cSwgdW5zaWduZWQgaW50IGhhc2gpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTUyNi1cXG5pb191cmluZy9pby13cS5jOjUyNzpzdGF0aWMgc3RydWN0IGlvX3dxX3dvcmsgKmlvX2dldF9uZXh0X3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXFxuaW9fdXJpbmcvaW8td3EuYy01MjgtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGlvX3dxICp3cSlcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNTMwLXtcXG5pb191cmluZy9pby13cS5jOjUzMTpcXHRzdHJ1Y3QgaW9fd3Ffd29ya19ub2RlICpub2RlLCAqcHJldjtcXG5pb191cmluZy9pby13cS5jOjUzMjpcXHRzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaywgKnRhaWw7XFxuaW9fdXJpbmcvaW8td3EuYy01MzMtXFx0dW5zaWduZWQgaW50IHN0YWxsX2hhc2ggPSAtMVU7XFxuLS1cXG5pb191cmluZy9pby13cS5jLTUzOC1cXG5pb191cmluZy9pby13cS5jOjUzOTpcXHRcXHR3b3JrID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBpb193cV93b3JrLCBsaXN0KTtcXG5pb191cmluZy9pby13cS5jLTU0MC1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNTQyLVxcdFxcdHdvcmtfZmxhZ3MgPSBhdG9taWNfcmVhZChcXHUwMDI2d29yay1cXHUwMDNlZmxhZ3MpO1xcbmlvX3VyaW5nL2lvLXdxLmM6NTQzOlxcdFxcdGlmICghX19pb193cV9pc19oYXNoZWQod29ya19mbGFncykpIHtcXG5pb191cmluZy9pby13cS5jLTU0NC1cXHRcXHRcXHR3cV9saXN0X2RlbChcXHUwMDI2YWNjdC1cXHUwMDNld29ya19saXN0LCBub2RlLCBwcmV2KTtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9NTg1PXN0YXRpYyB2b2lkIGlvX2Fzc2lnbl9jdXJyZW50X3dvcmsoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLFxcbmlvX3VyaW5nL2lvLXdxLmM6NTg2OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpb193cV93b3JrICp3b3JrKVxcbmlvX3VyaW5nL2lvLXdxLmMtNTg3LXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNjAwLSAqL1xcbmlvX3VyaW5nL2lvLXdxLmM6NjAxOnN0YXRpYyB2b2lkIGlvX3dvcmtlcl9oYW5kbGVfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcXG5pb191cmluZy9pby13cS5jLTYwMi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBpb193b3JrZXIgKndvcmtlcilcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNjA3LVxcdGRvIHtcXG5pb191cmluZy9pby13cS5jOjYwODpcXHRcXHRzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaztcXG5pb191cmluZy9pby13cS5jLTYwOS1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNjQzLVxcdFxcdFxcdGJvb2wgZG9fa2lsbCA9IHRlc3RfYml0KElPX1dRX0JJVF9FWElULCBcXHUwMDI2d3EtXFx1MDAzZXN0YXRlKTtcXG5pb191cmluZy9pby13cS5jOjY0NDpcXHRcXHRcXHRzdHJ1Y3QgaW9fd3Ffd29yayAqbmV4dF9oYXNoZWQsICpsaW5rZWQ7XFxuaW9fdXJpbmcvaW8td3EuYy02NDUtXFx0XFx0XFx0dW5zaWduZWQgaW50IHdvcmtfZmxhZ3MgPSBhdG9taWNfcmVhZChcXHUwMDI2d29yay1cXHUwMDNlZmxhZ3MpO1xcbmlvX3VyaW5nL2lvLXdxLmM6NjQ2OlxcdFxcdFxcdHVuc2lnbmVkIGludCBoYXNoID0gX19pb193cV9pc19oYXNoZWQod29ya19mbGFncylcXG5pb191cmluZy9pby13cS5jLTY0Ny1cXHRcXHRcXHRcXHQ/IF9faW9fZ2V0X3dvcmtfaGFzaCh3b3JrX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy02NTQtXFx0XFx0XFx0XFx0YXRvbWljX29yKElPX1dRX1dPUktfQ0FOQ0VMLCBcXHUwMDI2d29yay1cXHUwMDNlZmxhZ3MpO1xcbmlvX3VyaW5nL2lvLXdxLmM6NjU1OlxcdFxcdFxcdGlvX3dxX3N1Ym1pdF93b3JrKHdvcmspO1xcbmlvX3VyaW5nL2lvLXdxLmMtNjU2LVxcdFxcdFxcdGlvX2Fzc2lnbl9jdXJyZW50X3dvcmsod29ya2VyLCBOVUxMKTtcXG5pb191cmluZy9pby13cS5jLTY1Ny1cXG5pb191cmluZy9pby13cS5jOjY1ODpcXHRcXHRcXHRsaW5rZWQgPSBpb193cV9mcmVlX3dvcmsod29yayk7XFxuaW9fdXJpbmcvaW8td3EuYy02NTktXFx0XFx0XFx0d29yayA9IG5leHRfaGFzaGVkO1xcbmlvX3VyaW5nL2lvLXdxLmM6NjYwOlxcdFxcdFxcdGlmICghd29yayBcXHUwMDI2XFx1MDAyNiBsaW5rZWQgXFx1MDAyNlxcdTAwMjYgIWlvX3dxX2lzX2hhc2hlZChsaW5rZWQpKSB7XFxuaW9fdXJpbmcvaW8td3EuYy02NjEtXFx0XFx0XFx0XFx0d29yayA9IGxpbmtlZDtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNjY1LVxcdFxcdFxcdGlmIChsaW5rZWQpXFxuaW9fdXJpbmcvaW8td3EuYzo2NjY6XFx0XFx0XFx0XFx0aW9fd3FfZW5xdWV1ZSh3cSwgbGlua2VkKTtcXG5pb191cmluZy9pby13cS5jLTY2Ny1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNjg0LVxcbmlvX3VyaW5nL2lvLXdxLmM6Njg1OnN0YXRpYyBpbnQgaW9fd3Ffd29ya2VyKHZvaWQgKmRhdGEpXFxuaW9fdXJpbmcvaW8td3EuYy02ODYte1xcbmlvX3VyaW5nL2lvLXdxLmMtNjg3LVxcdHN0cnVjdCBpb193b3JrZXIgKndvcmtlciA9IGRhdGE7XFxuaW9fdXJpbmcvaW8td3EuYzo2ODg6XFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBpb193cV9nZXRfYWNjdCh3b3JrZXIpO1xcbmlvX3VyaW5nL2lvLXdxLmMtNjg5LVxcdHN0cnVjdCBpb193cSAqd3EgPSB3b3JrZXItXFx1MDAzZXdxO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy03NTUtICovXFxuaW9fdXJpbmcvaW8td3EuYzo3NTY6dm9pZCBpb193cV93b3JrZXJfcnVubmluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG5pb191cmluZy9pby13cS5jLTc1Ny17XFxuLS1cXG5pb191cmluZy9pby13cS5jLTc2Ni1cXHRzZXRfYml0KElPX1dPUktFUl9GX1JVTk5JTkcsIFxcdTAwMjZ3b3JrZXItXFx1MDAzZWZsYWdzKTtcXG5pb191cmluZy9pby13cS5jOjc2NzpcXHRpb193cV9pbmNfcnVubmluZyh3b3JrZXIpO1xcbmlvX3VyaW5nL2lvLXdxLmMtNzY4LX1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNzczLSAqL1xcbmlvX3VyaW5nL2lvLXdxLmM6Nzc0OnZvaWQgaW9fd3Ffd29ya2VyX3NsZWVwaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmlvX3VyaW5nL2lvLXdxLmMtNzc1LXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNzg1LVxcdGNsZWFyX2JpdChJT19XT1JLRVJfRl9SVU5OSU5HLCBcXHUwMDI2d29ya2VyLVxcdTAwM2VmbGFncyk7XFxuaW9fdXJpbmcvaW8td3EuYzo3ODY6XFx0aW9fd3FfZGVjX3J1bm5pbmcod29ya2VyKTtcXG5pb191cmluZy9pby13cS5jLTc4Ny19XFxuaW9fdXJpbmcvaW8td3EuYy03ODgtXFxuaW9fdXJpbmcvaW8td3EuYzo3ODk6c3RhdGljIHZvaWQgaW9faW5pdF9uZXdfd29ya2VyKHN0cnVjdCBpb193cSAqd3EsIHN0cnVjdCBpb193cV9hY2N0ICphY2N0LCBzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsXFxuaW9fdXJpbmcvaW8td3EuYy03OTAtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy04MDMtXFxuaW9fdXJpbmcvaW8td3EuYzo4MDQ6c3RhdGljIGJvb2wgaW9fd3Ffd29ya19tYXRjaF9hbGwoc3RydWN0IGlvX3dxX3dvcmsgKndvcmssIHZvaWQgKmRhdGEpXFxuaW9fdXJpbmcvaW8td3EuYy04MDUte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz04NDQ9c3RhdGljIHZvaWQgY3JlYXRlX3dvcmtlcl9jb250KHN0cnVjdCBjYWxsYmFja19oZWFkICpjYilcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtODQ4LVxcdHN0cnVjdCBpb193cSAqd3E7XFxuaW9fdXJpbmcvaW8td3EuYzo4NDk6XFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3Q7XFxuaW9fdXJpbmcvaW8td3EuYy04NTAtXFxuLS1cXG5pb191cmluZy9pby13cS5jLTg1My1cXHR3cSA9IHdvcmtlci1cXHUwMDNld3E7XFxuaW9fdXJpbmcvaW8td3EuYzo4NTQ6XFx0YWNjdCA9IGlvX3dxX2dldF9hY2N0KHdvcmtlcik7XFxuaW9fdXJpbmcvaW8td3EuYzo4NTU6XFx0dHNrID0gY3JlYXRlX2lvX3RocmVhZChpb193cV93b3JrZXIsIHdvcmtlciwgTlVNQV9OT19OT0RFKTtcXG5pb191cmluZy9pby13cS5jLTg1Ni1cXHRpZiAoIUlTX0VSUih0c2spKSB7XFxuLS1cXG5pb191cmluZy9pby13cS5jLTg2NS1cXHRcXHRcXHRzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgbWF0Y2ggPSB7XFxuaW9fdXJpbmcvaW8td3EuYzo4NjY6XFx0XFx0XFx0XFx0LmZuXFx0XFx0PSBpb193cV93b3JrX21hdGNoX2FsbCxcXG5pb191cmluZy9pby13cS5jLTg2Ny1cXHRcXHRcXHRcXHQuY2FuY2VsX2FsbFxcdD0gdHJ1ZSxcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9ODg2PXN0YXRpYyB2b2lkIGlvX3dvcmtxdWV1ZV9jcmVhdGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy04ODktXFx0XFx0XFx0XFx0XFx0XFx0d29yay53b3JrKTtcXG5pb191cmluZy9pby13cS5jOjg5MDpcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX3dxX2dldF9hY2N0KHdvcmtlcik7XFxuaW9fdXJpbmcvaW8td3EuYy04OTEtXFxuLS1cXG5pb191cmluZy9pby13cS5jLTg5NS1cXG5pb191cmluZy9pby13cS5jOjg5NjpzdGF0aWMgYm9vbCBjcmVhdGVfaW9fd29ya2VyKHN0cnVjdCBpb193cSAqd3EsIHN0cnVjdCBpb193cV9hY2N0ICphY2N0KVxcbmlvX3VyaW5nL2lvLXdxLmMtODk3LXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtOTE5LVxcbmlvX3VyaW5nL2lvLXdxLmM6OTIwOlxcdHRzayA9IGNyZWF0ZV9pb190aHJlYWQoaW9fd3Ffd29ya2VyLCB3b3JrZXIsIE5VTUFfTk9fTk9ERSk7XFxuaW9fdXJpbmcvaW8td3EuYy05MjEtXFx0aWYgKCFJU19FUlIodHNrKSkge1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy05MzctICovXFxuaW9fdXJpbmcvaW8td3EuYzo5Mzg6c3RhdGljIGJvb2wgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXFxuaW9fdXJpbmcvaW8td3EuYy05MzktXFx0XFx0XFx0XFx0ICAgIGJvb2wgKCpmdW5jKShzdHJ1Y3QgaW9fd29ya2VyICosIHZvaWQgKiksXFxuLS1cXG5pb191cmluZy9pby13cS5jLTk1OC1cXG5pb191cmluZy9pby13cS5jOjk1OTpzdGF0aWMgdm9pZCBpb193cV9mb3JfZWFjaF93b3JrZXIoc3RydWN0IGlvX3dxICp3cSxcXG5pb191cmluZy9pby13cS5jLTk2MC1cXHRcXHRcXHRcXHQgIGJvb2wgKCpmdW5jKShzdHJ1Y3QgaW9fd29ya2VyICosIHZvaWQgKiksXFxuLS1cXG5pb191cmluZy9pby13cS5jLTk2Ny1cXG5pb191cmluZy9pby13cS5jOjk2ODpzdGF0aWMgYm9vbCBpb193cV93b3JrZXJfd2FrZShzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsIHZvaWQgKmRhdGEpXFxuaW9fdXJpbmcvaW8td3EuYy05Njkte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy05NzQtXFxuaW9fdXJpbmcvaW8td3EuYzo5NzU6dm9pZCBpb193cV9zZXRfZXhpdF9vbl9pZGxlKHN0cnVjdCBpb193cSAqd3EsIGJvb2wgZW5hYmxlKVxcbmlvX3VyaW5nL2lvLXdxLmMtOTc2LXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtOTg4LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5pb191cmluZy9pby13cS5jOjk4OTpcXHRpb193cV9mb3JfZWFjaF93b3JrZXIod3EsIGlvX3dxX3dvcmtlcl93YWtlLCBOVUxMKTtcXG5pb191cmluZy9pby13cS5jLTk5MC1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtOTkyLVxcbmlvX3VyaW5nL2lvLXdxLmM6OTkzOnN0YXRpYyB2b2lkIGlvX3J1bl9jYW5jZWwoc3RydWN0IGlvX3dxX3dvcmsgKndvcmssIHN0cnVjdCBpb193cSAqd3EpXFxuaW9fdXJpbmcvaW8td3EuYy05OTQte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy05OTYtXFx0XFx0YXRvbWljX29yKElPX1dRX1dPUktfQ0FOQ0VMLCBcXHUwMDI2d29yay1cXHUwMDNlZmxhZ3MpO1xcbmlvX3VyaW5nL2lvLXdxLmM6OTk3OlxcdFxcdGlvX3dxX3N1Ym1pdF93b3JrKHdvcmspO1xcbmlvX3VyaW5nL2lvLXdxLmM6OTk4OlxcdFxcdHdvcmsgPSBpb193cV9mcmVlX3dvcmsod29yayk7XFxuaW9fdXJpbmcvaW8td3EuYy05OTktXFx0fSB3aGlsZSAod29yayk7XFxuLS1cXG5pb191cmluZy9pby13cS5jLTEwMDEtXFxuaW9fdXJpbmcvaW8td3EuYzoxMDAyOnN0YXRpYyB2b2lkIGlvX3dxX2luc2VydF93b3JrKHN0cnVjdCBpb193cSAqd3EsIHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxcbmlvX3VyaW5nL2lvLXdxLmM6MTAwMzpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaywgdW5zaWduZWQgaW50IHdvcmtfZmxhZ3MpXFxuaW9fdXJpbmcvaW8td3EuYy0xMDA0LXtcXG5pb191cmluZy9pby13cS5jLTEwMDUtXFx0dW5zaWduZWQgaW50IGhhc2g7XFxuaW9fdXJpbmcvaW8td3EuYzoxMDA2OlxcdHN0cnVjdCBpb193cV93b3JrICp0YWlsO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTAwNy1cXG5pb191cmluZy9pby13cS5jOjEwMDg6XFx0aWYgKCFfX2lvX3dxX2lzX2hhc2hlZCh3b3JrX2ZsYWdzKSkge1xcbmlvX3VyaW5nL2lvLXdxLmMtMTAwOS1hcHBlbmQ6XFxuLS1cXG5pb191cmluZy9pby13cS5jLTEwMjItXFxuaW9fdXJpbmcvaW8td3EuYzoxMDIzOnN0YXRpYyBib29sIGlvX3dxX3dvcmtfbWF0Y2hfaXRlbShzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaywgdm9pZCAqZGF0YSlcXG5pb191cmluZy9pby13cS5jLTEwMjQte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMDI3LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTAyODp2b2lkIGlvX3dxX2VucXVldWUoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX3dvcmsgKndvcmspXFxuaW9fdXJpbmcvaW8td3EuYy0xMDI5LXtcXG5pb191cmluZy9pby13cS5jLTEwMzAtXFx0dW5zaWduZWQgaW50IHdvcmtfZmxhZ3MgPSBhdG9taWNfcmVhZChcXHUwMDI2d29yay1cXHUwMDNlZmxhZ3MpO1xcbmlvX3VyaW5nL2lvLXdxLmM6MTAzMTpcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX3dvcmtfZ2V0X2FjY3Qod3EsIHdvcmtfZmxhZ3MpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTAzMi1cXHRzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgbWF0Y2ggPSB7XFxuaW9fdXJpbmcvaW8td3EuYzoxMDMzOlxcdFxcdC5mblxcdFxcdD0gaW9fd3Ffd29ya19tYXRjaF9pdGVtLFxcbmlvX3VyaW5nL2lvLXdxLmMtMTAzNC1cXHRcXHQuZGF0YVxcdFxcdD0gd29yayxcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTA0OS1cXHRyYXdfc3Bpbl9sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2Vsb2NrKTtcXG5pb191cmluZy9pby13cS5jOjEwNTA6XFx0aW9fd3FfaW5zZXJ0X3dvcmsod3EsIGFjY3QsIHdvcmssIHdvcmtfZmxhZ3MpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTA1MS1cXHRjbGVhcl9iaXQoSU9fQUNDVF9TVEFMTEVEX0JJVCwgXFx1MDAyNmFjY3QtXFx1MDAzZWZsYWdzKTtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTA2MS1cXG5pb191cmluZy9pby13cS5jOjEwNjI6XFx0XFx0ZGlkX2NyZWF0ZSA9IGlvX3dxX2NyZWF0ZV93b3JrZXIod3EsIGFjY3QpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTA2My1cXHRcXHRpZiAobGlrZWx5KGRpZF9jcmVhdGUpKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMDgxLSAqL1xcbmlvX3VyaW5nL2lvLXdxLmM6MTA4Mjp2b2lkIGlvX3dxX2hhc2hfd29yayhzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaywgdm9pZCAqdmFsKVxcbmlvX3VyaW5nL2lvLXdxLmMtMTA4My17XFxuLS1cXG5pb191cmluZy9pby13cS5jLTEwODktXFxuaW9fdXJpbmcvaW8td3EuYzoxMDkwOnN0YXRpYyBib29sIF9faW9fd3Ffd29ya2VyX2NhbmNlbChzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsXFxuaW9fdXJpbmcvaW8td3EuYy0xMDkxLVxcdFxcdFxcdFxcdCAgc3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaCxcXG5pb191cmluZy9pby13cS5jOjEwOTI6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaylcXG5pb191cmluZy9pby13cS5jLTEwOTMte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTAyLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTEwMzpzdGF0aWMgYm9vbCBpb193cV93b3JrZXJfY2FuY2VsKHN0cnVjdCBpb193b3JrZXIgKndvcmtlciwgdm9pZCAqZGF0YSlcXG5pb191cmluZy9pby13cS5jLTExMDQte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTExLVxcdHJhd19zcGluX2xvY2soXFx1MDAyNndvcmtlci1cXHUwMDNlbG9jayk7XFxuaW9fdXJpbmcvaW8td3EuYzoxMTEyOlxcdGlmIChfX2lvX3dxX3dvcmtlcl9jYW5jZWwod29ya2VyLCBtYXRjaCwgd29ya2VyLVxcdTAwM2VjdXJfd29yaykpXFxuaW9fdXJpbmcvaW8td3EuYy0xMTEzLVxcdFxcdG1hdGNoLVxcdTAwM2Vucl9ydW5uaW5nKys7XFxuLS1cXG5pb191cmluZy9pby13cS5jLTExMTgtXFxuaW9fdXJpbmcvaW8td3EuYzoxMTE5OnN0YXRpYyBpbmxpbmUgdm9pZCBpb193cV9yZW1vdmVfcGVuZGluZyhzdHJ1Y3QgaW9fd3EgKndxLFxcbmlvX3VyaW5nL2lvLXdxLmM6MTEyMDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcXG5pb191cmluZy9pby13cS5jOjExMjE6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBpb193cV93b3JrICp3b3JrLFxcbmlvX3VyaW5nL2lvLXdxLmM6MTEyMjpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGlvX3dxX3dvcmtfbm9kZSAqcHJldilcXG5pb191cmluZy9pby13cS5jLTExMjMte1xcbmlvX3VyaW5nL2lvLXdxLmMtMTEyNC1cXHR1bnNpZ25lZCBpbnQgaGFzaCA9IGlvX2dldF93b3JrX2hhc2god29yayk7XFxuaW9fdXJpbmcvaW8td3EuYzoxMTI1OlxcdHN0cnVjdCBpb193cV93b3JrICpwcmV2X3dvcmsgPSBOVUxMO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTEyNi1cXG5pb191cmluZy9pby13cS5jOjExMjc6XFx0aWYgKGlvX3dxX2lzX2hhc2hlZCh3b3JrKSBcXHUwMDI2XFx1MDAyNiB3b3JrID09IHdxLVxcdTAwM2VoYXNoX3RhaWxbaGFzaF0pIHtcXG5pb191cmluZy9pby13cS5jLTExMjgtXFx0XFx0aWYgKHByZXYpXFxuaW9fdXJpbmcvaW8td3EuYzoxMTI5OlxcdFxcdFxcdHByZXZfd29yayA9IGNvbnRhaW5lcl9vZihwcmV2LCBzdHJ1Y3QgaW9fd3Ffd29yaywgbGlzdCk7XFxuaW9fdXJpbmcvaW8td3EuYzoxMTMwOlxcdFxcdGlmIChwcmV2X3dvcmsgXFx1MDAyNlxcdTAwMjYgaW9fd3FfaXNfaGFzaGVkKHByZXZfd29yaykgXFx1MDAyNlxcdTAwMjZcXG5pb191cmluZy9pby13cS5jLTExMzEtXFx0XFx0ICAgIGlvX2dldF93b3JrX2hhc2gocHJldl93b3JrKSA9PSBoYXNoKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMTM5PXN0YXRpYyBib29sIGlvX2FjY3RfY2FuY2VsX3BlbmRpbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxcbmlvX3VyaW5nL2lvLXdxLmM6MTE0MDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcXG5pb191cmluZy9pby13cS5jLTExNDEtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaClcXG5pb191cmluZy9pby13cS5jLTExNDIte1xcbmlvX3VyaW5nL2lvLXdxLmM6MTE0MzpcXHRzdHJ1Y3QgaW9fd3Ffd29ya19ub2RlICpub2RlLCAqcHJldjtcXG5pb191cmluZy9pby13cS5jOjExNDQ6XFx0c3RydWN0IGlvX3dxX3dvcmsgKndvcms7XFxuaW9fdXJpbmcvaW8td3EuYy0xMTQ1LVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTQ3LVxcdHdxX2xpc3RfZm9yX2VhY2gobm9kZSwgcHJldiwgXFx1MDAyNmFjY3QtXFx1MDAzZXdvcmtfbGlzdCkge1xcbmlvX3VyaW5nL2lvLXdxLmM6MTE0ODpcXHRcXHR3b3JrID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBpb193cV93b3JrLCBsaXN0KTtcXG5pb191cmluZy9pby13cS5jLTExNDktXFx0XFx0aWYgKCFtYXRjaC1cXHUwMDNlZm4od29yaywgbWF0Y2gtXFx1MDAzZWRhdGEpKVxcbmlvX3VyaW5nL2lvLXdxLmMtMTE1MC1cXHRcXHRcXHRjb250aW51ZTtcXG5pb191cmluZy9pby13cS5jOjExNTE6XFx0XFx0aW9fd3FfcmVtb3ZlX3BlbmRpbmcod3EsIGFjY3QsIHdvcmssIHByZXYpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTE1Mi1cXHRcXHRyYXdfc3Bpbl91bmxvY2soXFx1MDAyNmFjY3QtXFx1MDAzZWxvY2spO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTYyLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTE2MzpzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcGVuZGluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXFxuaW9fdXJpbmcvaW8td3EuYy0xMTY0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTExNjgtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkrKykge1xcbmlvX3VyaW5nL2lvLXdxLmM6MTE2OTpcXHRcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX2dldF9hY2N0KHdxLCBpID09IDApO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTE3MC1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTE3OC1cXG5pb191cmluZy9pby13cS5jOjExNzk6c3RhdGljIHZvaWQgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxcbmlvX3VyaW5nL2lvLXdxLmMtMTE4MC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTgyLVxcdHJhd19zcGluX2xvY2soXFx1MDAyNmFjY3QtXFx1MDAzZXdvcmtlcnNfbG9jayk7XFxuaW9fdXJpbmcvaW8td3EuYzoxMTgzOlxcdGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTtcXG5pb191cmluZy9pby13cS5jLTExODQtXFx0cmF3X3NwaW5fdW5sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTg2LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTE4NzpzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXFxuaW9fdXJpbmcvaW8td3EuYy0xMTg4LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTk3LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTE5ODplbnVtIGlvX3dxX2NhbmNlbCBpb193cV9jYW5jZWxfY2Ioc3RydWN0IGlvX3dxICp3cSwgd29ya19jYW5jZWxfZm4gKmNhbmNlbCxcXG5pb191cmluZy9pby13cS5jLTExOTktXFx0XFx0XFx0XFx0ICB2b2lkICpkYXRhLCBib29sIGNhbmNlbF9hbGwpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTEyMTktXFx0ICovXFxuaW9fdXJpbmcvaW8td3EuYzoxMjIwOlxcdGlvX3dxX2NhbmNlbF9wZW5kaW5nX3dvcmsod3EsIFxcdTAwMjZtYXRjaCk7XFxuaW9fdXJpbmcvaW8td3EuYy0xMjIxLVxcdGlmIChtYXRjaC5ucl9wZW5kaW5nIFxcdTAwMjZcXHUwMDI2ICFtYXRjaC5jYW5jZWxfYWxsKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMjIzLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTIyNDpcXHRpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHdxLCBcXHUwMDI2bWF0Y2gpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTIyNS1cXHRpZiAobWF0Y2gubnJfcnVubmluZyBcXHUwMDI2XFx1MDAyNiAhbWF0Y2guY2FuY2VsX2FsbClcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTIzNC1cXG5pb191cmluZy9pby13cS5jOjEyMzU6c3RhdGljIGludCBpb193cV9oYXNoX3dha2Uoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsIHVuc2lnbmVkIG1vZGUsXFxuaW9fdXJpbmcvaW8td3EuYy0xMjM2LVxcdFxcdFxcdCAgICBpbnQgc3luYywgdm9pZCAqa2V5KVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMjQ0LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpKyspIHtcXG5pb191cmluZy9pby13cS5jOjEyNDU6XFx0XFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBcXHUwMDI2d3EtXFx1MDAzZWFjY3RbaV07XFxuaW9fdXJpbmcvaW8td3EuYy0xMjQ2LVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMjUzLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTI1NDpzdHJ1Y3QgaW9fd3EgKmlvX3dxX2NyZWF0ZSh1bnNpZ25lZCBib3VuZGVkLCBzdHJ1Y3QgaW9fd3FfZGF0YSAqZGF0YSlcXG5pb191cmluZy9pby13cS5jLTEyNTUte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMjc3LVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ3cS1cXHUwMDNld2FpdC5lbnRyeSk7XFxuaW9fdXJpbmcvaW8td3EuYzoxMjc4OlxcdHdxLVxcdTAwM2V3YWl0LmZ1bmMgPSBpb193cV9oYXNoX3dha2U7XFxuaW9fdXJpbmcvaW8td3EuYy0xMjc5LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpKyspIHtcXG5pb191cmluZy9pby13cS5jOjEyODA6XFx0XFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBcXHUwMDI2d3EtXFx1MDAzZWFjY3RbaV07XFxuaW9fdXJpbmcvaW8td3EuYy0xMjgxLVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMjk0LVxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2d3EtXFx1MDAzZXdvcmtlcl9kb25lKTtcXG5pb191cmluZy9pby13cS5jOjEyOTU6XFx0cmV0ID0gY3B1aHBfc3RhdGVfYWRkX2luc3RhbmNlX25vY2FsbHMoaW9fd3Ffb25saW5lLCBcXHUwMDI2d3EtXFx1MDAzZWNwdWhwX25vZGUpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTI5Ni1cXHRpZiAocmV0KSB7XFxuLS1cXG5pb191cmluZy9pby13cS5jLTEzMDItZXJyOlxcbmlvX3VyaW5nL2lvLXdxLmM6MTMwMzpcXHRpb193cV9wdXRfaGFzaChkYXRhLVxcdTAwM2VoYXNoKTtcXG5pb191cmluZy9pby13cS5jLTEzMDQtXFx0ZnJlZV9jcHVtYXNrX3Zhcih3cS1cXHUwMDNlY3B1X21hc2spO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMzA5PXN0YXRpYyBib29sIGlvX3Rhc2tfd29ya19tYXRjaChzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IsIHZvaWQgKmRhdGEpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTEzMTgtXFxuaW9fdXJpbmcvaW8td3EuYzoxMzE5OnZvaWQgaW9fd3FfZXhpdF9zdGFydChzdHJ1Y3QgaW9fd3EgKndxKVxcbmlvX3VyaW5nL2lvLXdxLmMtMTMyMC17XFxuLS1cXG5pb191cmluZy9pby13cS5jLTEzMjMtXFxuaW9fdXJpbmcvaW8td3EuYzoxMzI0OnN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF90d19jcmVhdGUoc3RydWN0IGlvX3dxICp3cSlcXG5pb191cmluZy9pby13cS5jLTEzMjUte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMzQxLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTM0MjpzdGF0aWMgdm9pZCBpb193cV9leGl0X3dvcmtlcnMoc3RydWN0IGlvX3dxICp3cSlcXG5pb191cmluZy9pby13cS5jLTEzNDMte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMzQ4LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTM0OTpcXHRpb193cV9jYW5jZWxfdHdfY3JlYXRlKHdxKTtcXG5pb191cmluZy9pby13cS5jLTEzNTAtXFxuaW9fdXJpbmcvaW8td3EuYy0xMzUxLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5pb191cmluZy9pby13cS5jOjEzNTI6XFx0aW9fd3FfZm9yX2VhY2hfd29ya2VyKHdxLCBpb193cV93b3JrZXJfd2FrZSwgTlVMTCk7XFxuaW9fdXJpbmcvaW8td3EuYy0xMzUzLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMzgzLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTM4NDpzdGF0aWMgdm9pZCBpb193cV9kZXN0cm95KHN0cnVjdCBpb193cSAqd3EpXFxuaW9fdXJpbmcvaW8td3EuYy0xMzg1LXtcXG5pb191cmluZy9pby13cS5jLTEzODYtXFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhIG1hdGNoID0ge1xcbmlvX3VyaW5nL2lvLXdxLmM6MTM4NzpcXHRcXHQuZm5cXHRcXHQ9IGlvX3dxX3dvcmtfbWF0Y2hfYWxsLFxcbmlvX3VyaW5nL2lvLXdxLmMtMTM4OC1cXHRcXHQuY2FuY2VsX2FsbFxcdD0gdHJ1ZSxcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTM5MC1cXG5pb191cmluZy9pby13cS5jOjEzOTE6XFx0Y3B1aHBfc3RhdGVfcmVtb3ZlX2luc3RhbmNlX25vY2FsbHMoaW9fd3Ffb25saW5lLCBcXHUwMDI2d3EtXFx1MDAzZWNwdWhwX25vZGUpO1xcbmlvX3VyaW5nL2lvLXdxLmM6MTM5MjpcXHRpb193cV9jYW5jZWxfcGVuZGluZ193b3JrKHdxLCBcXHUwMDI2bWF0Y2gpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTM5My1cXHRmcmVlX2NwdW1hc2tfdmFyKHdxLVxcdTAwM2VjcHVfbWFzayk7XFxuaW9fdXJpbmcvaW8td3EuYzoxMzk0OlxcdGlvX3dxX3B1dF9oYXNoKHdxLVxcdTAwM2VoYXNoKTtcXG5pb191cmluZy9pby13cS5jLTEzOTUtXFx0a2ZyZWUod3EpO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMzk3LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTM5ODp2b2lkIGlvX3dxX3B1dF9hbmRfZXhpdChzdHJ1Y3QgaW9fd3EgKndxKVxcbmlvX3VyaW5nL2lvLXdxLmMtMTM5OS17XFxuLS1cXG5pb191cmluZy9pby13cS5jLTE0MDEtXFxuaW9fdXJpbmcvaW8td3EuYzoxNDAyOlxcdGlvX3dxX2V4aXRfd29ya2Vycyh3cSk7XFxuaW9fdXJpbmcvaW8td3EuYzoxNDAzOlxcdGlvX3dxX2Rlc3Ryb3kod3EpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTQwNC19XFxuLS1cXG5pb191cmluZy9pby13cS5jPTE0MDY9c3RydWN0IG9ubGluZV9kYXRhIHtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTQxMC1cXG5pb191cmluZy9pby13cS5jOjE0MTE6c3RhdGljIGJvb2wgaW9fd3Ffd29ya2VyX2FmZmluaXR5KHN0cnVjdCBpb193b3JrZXIgKndvcmtlciwgdm9pZCAqZGF0YSlcXG5pb191cmluZy9pby13cS5jLTE0MTIte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xNDIxLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTQyMjpzdGF0aWMgaW50IF9faW9fd3FfY3B1X29ubGluZShzdHJ1Y3QgaW9fd3EgKndxLCB1bnNpZ25lZCBpbnQgY3B1LCBib29sIG9ubGluZSlcXG5pb191cmluZy9pby13cS5jLTE0MjMte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xNDI5LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5pb191cmluZy9pby13cS5jOjE0MzA6XFx0aW9fd3FfZm9yX2VhY2hfd29ya2VyKHdxLCBpb193cV93b3JrZXJfYWZmaW5pdHksIFxcdTAwMjZvZCk7XFxuaW9fdXJpbmcvaW8td3EuYy0xNDMxLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xNDM0LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTQzNTpzdGF0aWMgaW50IGlvX3dxX2NwdV9vbmxpbmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXFxuaW9fdXJpbmcvaW8td3EuYy0xNDM2LXtcXG4tLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzoxOS4xMTA2NTI1MTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExODUxODA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElPLVdRIEluZnJhc3RydWN0dXJlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGlvX3dxYCBidXNpbmVzcy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIGxpZmVjeWNsZSDigJMgc3BlY2lmaWNhbGx5LCBgaW9fd3FfY3JlYXRlYCwgYGlvX3dxX3B1dF9hbmRfZXhpdGAsIGBpb193cV9lbnF1ZXVlYCwgYW5kIGBpb193cV9jYW5jZWxfY2JgLiBJJ20gc3RhcnRpbmcgYnkgemVyb2luZyBpbiBvbiBgaW9fd3FfY2FuY2VsX2NiYC4gVGhlIGZhY3QgdGhhdCBpdCdzICpub3QqIGEgc3RhdGljIGZ1bmN0aW9uIGlzIHNpZ25pZmljYW50LCBpbW1lZGlhdGVseSBpbXBseWluZyBpdCdzIGRlc2lnbmVkIGZvciBleHRlcm5hbCBpbnRlcmFjdGlvbiBvciBwZXJoYXBzIGEgbW9kdWxlJ3MgdXNlLlxuXG5Ob3csIGxldCdzIHNoaWZ0IGdlYXJzIHNsaWdodGx5IGFuZCBjb25zaWRlciBjb25maWd1cmF0aW9uLiBBcmUgdGhlcmUgYW55IHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGltcGFjdGluZyB0aGlzPyBJIG5lZWQgdG8ga25vdyB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgdGhpcyBjb2RlIGlzIGV2ZW4gYnVpbHQuIFRoZSBmaWxlbmFtZSBgaW9fdXJpbmcvaW8td3EuY2AgaXMgc3VnZ2VzdGl2ZSDigJMgbXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCBpdCdzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19JT19VUklOR2AgaXMgc2V0LiBUbyBiZSBjZXJ0YWluLCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIGBpb191cmluZy9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGF0IGRlcGVuZGVuY3kuIFRoaXMgaW5mb3JtYXRpb24gaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIGl0cyB1c2UgYW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIElPX1VSSU5HIGVjb3N5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNTQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzoyMy4yMjkxNzMzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM1NjYxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpby13cVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfSU9fVVJJTkdfWkNSWClcXHQrPSB6Y3J4Lm9cXG5pb191cmluZy9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfSU9fV1EpXFx0XFx0Kz0gaW8td3Eub1xcbmlvX3VyaW5nL01ha2VmaWxlLTIxLW9iai0kKENPTkZJR19GVVRFWClcXHRcXHQrPSBmdXRleC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjIzOjIzLjI3NTUzNTU2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg5MDM2ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJTyBXb3JrcXVldWUgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBzZWUuIE15IG1lbnRhbCBtYXAgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhhdCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUgaXMgbGlrZWx5IGBDT05GSUdfSU9fV1FgLiBHaXZlbiB3aGF0IEknbSBkZWFsaW5nIHdpdGgsIHRoZSBjb250ZXh0IHBvaW50cyB0b3dhcmRzIHNvbWV0aGluZyByZWxhdGVkIHRvIEkvTyB3b3JrcXVldWVzLCB3aGljaCBpcyBwcmV0dHkgc2VsZi1leHBsYW5hdG9yeS4gTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uIGZvciB0aGlzIGNvbmZpZ3VyYXRpb24uIEdpdmVuIHRoZSB0eXBpY2FsIGtlcm5lbCBidWlsZCBzeXN0ZW0gc3RydWN0dXJlLCBgaW5pdC9LY29uZmlnYCBpcyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBnZW5lcmFsIHN5c3RlbSBvcHRpb25zLiBIb3dldmVyLCBzaW5jZSB0aGUgcHJvbXB0IHNwZWNpZmllZCBgSU9fVVJJTkdgLCBJIHdvdWxkIGxlYW4gdG93YXJkIGNoZWNraW5nIGBpb191cmluZy9LY29uZmlnYCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGBDT05GSUdfSU9fV1FgLiBUaGUgbW9kdWxlIHN0cnVjdHVyZSBzaG91bGQgcHJvdmlkZSBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHNwZWNpZmljIGZlYXR1cmUgc2V0dGluZ3MuIFRoZSBsb2NhdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gd2lsbCBwcm92aWRlIGluc2lnaHQgaW50byB0aGUgY29udGV4dCBhbmQgZGVwZW5kZW5jaWVzIG9mIHRoZSBJTyB3b3JrcXVldWUgaW1wbGVtZW50YXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRob3NlIEtjb25maWcgZmlsZXMgYW5kIHNlZSB3aGF0IHRoZXkgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzcwOSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjIzOjI2Ljk2NDU3NTQyMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3OTI2MjYyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU9fV1FcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9NDIxPXNvdXJjZSBcXFwiZnMvdW5pY29kZS9LY29uZmlnXFxcIlxcbmZzL0tjb25maWctNDIyLVxcbmZzL0tjb25maWc6NDIzOmNvbmZpZyBJT19XUVxcbmZzL0tjb25maWctNDI0LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjM6MjguNzQzODQ0NDE0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNjQ3MDU2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYElPX1dRYCBCb29sZWFuKipcblxuQWxyaWdodCwgc28gYElPX1dRYCBpcyBhIGJvb2xlYW4sIGFuZCBteSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZmlndXJlIG91dCBpdHMgc2VsZWN0aW9uIGNyaXRlcmlhLiBXaGF0IGNvbmRpdGlvbnMgb3IgY29kZSBwYXRocyBhY3R1YWxseSAqc2V0KiB0aGlzIGZsYWc/IEl0J3MgYSBrZXkgcGllY2Ugb2Ygc3RhdGUsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIG9yaWdpbnMgaXMgY3JpdGljYWwgZm9yIGRlYnVnZ2luZyBvciBvcHRpbWl6aW5nIGFueXRoaW5nIHJlbGF0ZWQgdG8gaXQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIGNvZGUgYW5kIHBpbnBvaW50IHByZWNpc2VseSAqd2hlcmUqIHRoaXMgYm9vbGVhbiBpcyB0b2dnbGVkLiBBcmUgd2UgZGVhbGluZyB3aXRoIGEgZ2xvYmFsIGZsYWcsIGEgcGVyLW9iamVjdCBhdHRyaWJ1dGUsIG9yIHNvbWV0aGluZyBtb3JlIGNvbnRleHQtZGVwZW5kZW50PyBUaGUgZ29hbCBpcyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIGxpZmVjeWNsZSBzbyBJIGNhbiBhbnRpY2lwYXRlIGhvdyBpdCBiZWhhdmVzIGFuZCB3aHkgaXQgbWlnaHQgYmUgaW4gYSBwYXJ0aWN1bGFyIHN0YXRlIGF0IGFueSBnaXZlbiBwb2ludC4gTGV0J3MgZGlnIGluIGFuZCBmaW5kIHRob3NlIHdyaXRlIG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDQ1LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjM6MzIuOTA4NTUyNTU3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkwMTY4NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBJT19XUVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5MTg9Y29uZmlnIElPX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5MTktXFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbmluaXQvS2NvbmZpZzoxOTIwOlxcdHNlbGVjdCBJT19XUVxcbmluaXQvS2NvbmZpZy0xOTIxLVxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzozNC41OTg3MjYwODhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg2OTA3MzY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgSSdtIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDpcblxuKipJT19VUklORyBhbmQgSU9fV1E6IEEgUXVpY2sgU2NhbioqXG5cbkFscmlnaHQsIHRoZSBjb3JlIGNvbmNlcHQgSSdtIHdvcmtpbmcgd2l0aCBpcyBgSU9fVVJJTkdgIHNlbGVjdGluZyBgSU9fV1FgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCBsZXQncyBnZXQgYElPX1VSSU5HYCBhY3RpdmF0ZWQsIHRoYXQncyBzdGVwIG9uZS5cIiBCdXQgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiwgYSBnb29kIHByYWN0aWNlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGVjb3N5c3RlbS4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IGRpcmVjdCBkZXBlbmRlbmNpZXMgYElPX1dRYCBtYXkgaGF2ZS4gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzIEkgbmVlZCB0byBoYW5kbGUgZmlyc3Q/IEFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHRvIGJlIGF3YXJlIG9mPyBCZXN0IHRvIGdldCB0aGF0IGxheSBvZiB0aGUgbGFuZCBub3csIGJlZm9yZSBJIHdhc3RlIHRpbWUgbWFraW5nIGEgY29uZmlndXJhdGlvbiBhbmQgZmluZGluZyBvdXQgbGF0ZXIgdGhhdCBJIG5lZWQgdG8gdHdlYWsgaXQgZHVlIHRvIGFuIHVuZm9yZXNlZW4gZGVwZW5kZW5jeSBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzNTMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzo0MC40Njc4MDI0MjFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTYxMjkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU9fV1FcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTQyMT1zb3VyY2UgXFxcImZzL3VuaWNvZGUvS2NvbmZpZ1xcXCJcXG5mcy9LY29uZmlnLTQyMi1cXG5mcy9LY29uZmlnOjQyMzpjb25maWcgSU9fV1FcXG5mcy9LY29uZmlnLTQyNC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjIzOjQwLjY5OTQyMDZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg2MDM2ODMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgdGhlIElPX1VSSU5HIEJvb2xlYW4qKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNpbXBsZSBgYm9vbGAgaXNzdWUgaGVyZSwgbWVhbmluZyBgSU9fVVJJTkdgIGlzIHRoZSBmbGFnIHRvIGZvY3VzIG9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkIGluIHRoaXMgYXJlYS4gTGV0J3Mgc2VlLi4uIEkndmUgZ290IGBpb193cV9jcmVhdGVgLCBgaW9fd3FfcHV0X2FuZF9leGl0YCwgYGlvX3dxX2VucXVldWVgLCBhbmQgYGlvX3dxX2NhbmNlbF9jYmAuXG5cbkFoYSEgTm93IEkgcmVtZW1iZXIsIHRoZSBidWcgbXVzdCBiZSBsdXJraW5nIHdpdGhpbiBgaW9fd29ya2VyX2NhbmNlbF9jYmAuIFRoaXMgaXMgY2FsbGVkIGZyb20gYGlvX3dvcmtlcl9leGl0YCBhbmQgYGlvX3dxX2NhbmNlbF90d19jcmVhdGVgLCByaWdodD8gQW5kIGBpb193cV9jYW5jZWxfdHdfY3JlYXRlYCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBpb193cV9leGl0X3dvcmtlcnNgIGFuZCBgaW9fcXVldWVfd29ya2VyX2NyZWF0ZWAuIE9rYXksIHRoaXMgaXMgc3RhcnRpbmcgdG8gbWFrZSBtb3JlIHNlbnNlLiBgaW9fcXVldWVfd29ya2VyX2NyZWF0ZWAgZ2V0cyBjYWxsZWQgZnJvbSBib3RoIGBpb193cV9kZWNfcnVubmluZ2AgYW5kIGBpb193cV9jcmVhdGVfd29ya2VyYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgaW9fd3FfZW5xdWV1ZWAuIEFuZCB3ZSdyZSBzZWVpbmcgdGhhdCBgaW9fd3FfZGVjX3J1bm5pbmdgIGlzIGNhbGxlZCBmcm9tIGBpb193b3JrZXJfZXhpdGAgYW5kIGBpb193cV93b3JrZXJfc2xlZXBpbmdgLiBOb3cgSSdtIGdldHRpbmcgYSBsaXR0bGUgY29uZnVzZWQ6IGBpb193cV93b3JrZXJfc2xlZXBpbmdgIGlzIGNhbGxlZCBmcm9tIGBpb193cV93b3JrZXJgPyBObywgd2FpdCBhIG1pbnV0ZS4uLiBpdCBsb29rcyBsaWtlIGl0J3MgdGhlIHNjaGVkdWxlciB0aGF0IGNhbGxzIGBpb193cV93b3JrZXJfc2xlZXBpbmdgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBwYXJ0IGFuZCBzdGFydCBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGNhbGwgdG8gYGlvX3dxX3dvcmtlcl9zbGVlcGluZ2AgdG8gY29uZmlybSB0aGUgY2F1c2Ugb2YgdGhlIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODY1OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzo0Ny41NTk3OTEzNzZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTE5NDYyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fd3Ffd29ya2VyX3NsZWVwaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pby13cS5jPTc1Nj12b2lkIGlvX3dxX3dvcmtlcl9ydW5uaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy03NzMtICovXFxuaW9fdXJpbmcvaW8td3EuYzo3NzQ6dm9pZCBpb193cV93b3JrZXJfc2xlZXBpbmcoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuaW9fdXJpbmcvaW8td3EuYy03NzUte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuaD02Nj1lbnVtIGlvX3dxX2NhbmNlbCBpb193cV9jYW5jZWxfY2Ioc3RydWN0IGlvX3dxICp3cSwgd29ya19jYW5jZWxfZm4gKmNhbmNlbCxcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmgtNjktI2lmIGRlZmluZWQoQ09ORklHX0lPX1dRKVxcbmlvX3VyaW5nL2lvLXdxLmg6NzA6ZXh0ZXJuIHZvaWQgaW9fd3Ffd29ya2VyX3NsZWVwaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTtcXG5pb191cmluZy9pby13cS5oLTcxLWV4dGVybiB2b2lkIGlvX3dxX3dvcmtlcl9ydW5uaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTtcXG5pb191cmluZy9pby13cS5oLTcyLSNlbHNlXFxuaW9fdXJpbmcvaW8td3EuaDo3MzpzdGF0aWMgaW5saW5lIHZvaWQgaW9fd3Ffd29ya2VyX3NsZWVwaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmlvX3VyaW5nL2lvLXdxLmgtNzQte1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz03MjYwPXN0YXRpYyBpbmxpbmUgdm9pZCBzY2hlZF9zdWJtaXRfd29yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzI3OC1cXHRlbHNlIGlmICh0YXNrX2ZsYWdzIFxcdTAwMjYgUEZfSU9fV09SS0VSKVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzI3OTpcXHRcXHRpb193cV93b3JrZXJfc2xlZXBpbmcodHNrKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTcyODAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjIzOjQ5LjE1MTc0Mjg5NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njc2MjY4NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipQaW5wb2ludGluZyB0aGUgS2V5IFBsYXllcnMgaW4gSS9PIFdvcmtxdWV1ZSBTbGVlcC9XYWtlLXVwKipcblxuUmlnaHQsIHNvIGBpb193cV93b3JrZXJfc2xlZXBpbmdgIGlzIHRyaWdnZXJlZCBieSB0aGUgc2NoZWR1bGVyIGl0c2VsZi4gVGhhdCdzIHRoZSBjcnVjaWFsIGhpbnQuIFRoaXMgdGVsbHMgbWUgdGhhdCBJIG5lZWQgdG8gem9vbSBpbiBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgY29udHJvbCB3b3JrcXVldWUgY3JlYXRpb24sIGRlc3RydWN0aW9uLCBhbmQgdGFzayBlbnF1ZXVlaW5nIGFuZCBjYW5jZWxpbmcuIExldCdzIHNlZS4uLiB0aGUgcHJpbWFyeSBzdXNwZWN0cyBhcmU6IGBpb193cV9jcmVhdGVgLCBgaW9fd3FfcHV0X2FuZF9leGl0YCwgYGlvX3dxX2VucXVldWVgLCBhbmQgYGlvX3dxX2NhbmNlbF9jYmAuIFRob3NlIHNlZW0gbGlrZSB0aGUgbG9naWNhbCBwbGFjZXMgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB0aGUgc2xlZXAvd2FrZXVwIG1lY2hhbmlzbSBmcm9tIHRoaXMgdmFudGFnZSBwb2ludC4gTm93LCBpcyBgaW9fd3FfY2FuY2VsX2NiYCByZWFsbHkgYSB1c2VmdWwgZm9jYWwgcG9pbnQgaW4gdGhpcyBpbnZlc3RpZ2F0aW9uPyBHb3R0YSBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgc3Ryb25nIGNvbm5lY3Rpb24gdG8gdGhlIHByb2Nlc3MtIGxldCdzIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MTMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzo1My44MjgwMTQzNTRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Njk3NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3dxX2NhbmNlbF9jYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvY2FuY2VsLmM9Nzg9c3RhdGljIGludCBpb19hc3luY19jYW5jZWxfb25lKHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmMtODgtXFx0YWxsID0gY2QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKElPUklOR19BU1lOQ19DQU5DRUxfQUxMfElPUklOR19BU1lOQ19DQU5DRUxfQU5ZKTtcXG5pb191cmluZy9jYW5jZWwuYzo4OTpcXHRjYW5jZWxfcmV0ID0gaW9fd3FfY2FuY2VsX2NiKHRjdHgtXFx1MDAzZWlvX3dxLCBpb19jYW5jZWxfY2IsIGNkLCBhbGwpO1xcbmlvX3VyaW5nL2NhbmNlbC5jLTkwLVxcdHN3aXRjaCAoY2FuY2VsX3JldCkge1xcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmM9NDg5PXN0YXRpYyBfX2NvbGQgYm9vbCBpb191cmluZ190cnlfY2FuY2VsX2lvd3Eoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYy01MDUtXFx0XFx0XFx0Y29udGludWU7XFxuaW9fdXJpbmcvY2FuY2VsLmM6NTA2OlxcdFxcdGNyZXQgPSBpb193cV9jYW5jZWxfY2IodGN0eC1cXHUwMDNlaW9fd3EsIGlvX2NhbmNlbF9jdHhfY2IsIGN0eCwgdHJ1ZSk7XFxuaW9fdXJpbmcvY2FuY2VsLmMtNTA3LVxcdFxcdHJldCB8PSAoY3JldCAhPSBJT19XUV9DQU5DRUxfTk9URk9VTkQpO1xcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmM9NTE1PV9fY29sZCBib29sIGlvX3VyaW5nX3RyeV9jYW5jZWxfcmVxdWVzdHMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYy01MzktXFx0XFx0ICovXFxuaW9fdXJpbmcvY2FuY2VsLmM6NTQwOlxcdFxcdGNyZXQgPSBpb193cV9jYW5jZWxfY2IodGN0eC1cXHUwMDNlaW9fd3EsIGlvX2NhbmNlbF90YXNrX2NiLFxcbmlvX3VyaW5nL2NhbmNlbC5jLTU0MS1cXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmNhbmNlbCwgdHJ1ZSk7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTExODc9c3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTk3LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTE5ODplbnVtIGlvX3dxX2NhbmNlbCBpb193cV9jYW5jZWxfY2Ioc3RydWN0IGlvX3dxICp3cSwgd29ya19jYW5jZWxfZm4gKmNhbmNlbCxcXG5pb191cmluZy9pby13cS5jLTExOTktXFx0XFx0XFx0XFx0ICB2b2lkICpkYXRhLCBib29sIGNhbmNlbF9hbGwpXFxuLS1cXG5pb191cmluZy9pby13cS5oPTY0PXR5cGVkZWYgYm9vbCAod29ya19jYW5jZWxfZm4pKHN0cnVjdCBpb193cV93b3JrICosIHZvaWQgKik7XFxuaW9fdXJpbmcvaW8td3EuaC02NS1cXG5pb191cmluZy9pby13cS5oOjY2OmVudW0gaW9fd3FfY2FuY2VsIGlvX3dxX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd3EgKndxLCB3b3JrX2NhbmNlbF9mbiAqY2FuY2VsLFxcbmlvX3VyaW5nL2lvLXdxLmgtNjctXFx0XFx0XFx0XFx0XFx0dm9pZCAqZGF0YSwgYm9vbCBjYW5jZWxfYWxsKTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9MjMxOD1zdGF0aWMgX19jb2xkIHZvaWQgaW9fcmluZ19leGl0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMzU3LVxcdFxcdFxcdGlmICh0c2sgXFx1MDAyNlxcdTAwMjYgdHNrLVxcdTAwM2Vpb191cmluZyBcXHUwMDI2XFx1MDAyNiB0c2stXFx1MDAzZWlvX3VyaW5nLVxcdTAwM2Vpb193cSlcXG5pb191cmluZy9pb191cmluZy5jOjIzNTg6XFx0XFx0XFx0XFx0aW9fd3FfY2FuY2VsX2NiKHRzay1cXHUwMDNlaW9fdXJpbmctXFx1MDAzZWlvX3dxLFxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjM1OS1cXHRcXHRcXHRcXHRcXHRcXHRpb19jYW5jZWxfY3R4X2NiLCBjdHgsIHRydWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzo1My44NzU3MTg3OTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExNjQzODU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBtZW50YWwgZ2VhcnMgYXJlIHR1cm5pbmcuLi5cblxuKipUcmFja2luZyBEb3duIENhbGxlcnMgYW5kIFVuZGVyc3RhbmRpbmcgQ29udHJvbCBGbG93KipcblxuUmlnaHQsIHNvIGBpb193cV9jYW5jZWxfY2JgLi4uIEkgcmVjYWxsIHRoYXQgdGhpcyBjYWxsYmFjayBpcyBkZWZpbml0ZWx5IHRyaWdnZXJlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXMuIEl0J3MgY2FsbGVkIGJ5IGBpb19hc3luY19jYW5jZWxfb25lYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGhhbmRsaW5nIGFzeW5jaHJvbm91cyBjYW5jZWxsYXRpb24sIGFuZCBhbHNvIGJ5IGBpb191cmluZ190cnlfY2FuY2VsX3JlcXVlc3RzYCB3aGljaCBpcyByZWxhdGVkIHRvIEkvTyByaW5nIGNhbmNlbGxhdGlvbiBhdHRlbXB0cywgYW5kIGZpbmFsbHkgYnkgYGlvX3JpbmdfZXhpdF93b3JrYCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBjbGVhbiB1cCBwcm9jZXNzLiBUaGF0IG1ha2VzIGl0IGEgc29saWQgZm9jdXMgZm9yIG15IGFuYWx5c2lzLiBUaG9zZSB0aHJlZSBwYXRocyBtYWtlIGl0IGZhaXJseSBjZW50cmFsIHRvIEkvTyBtYW5hZ2VtZW50LlxuXG5IbW0sIG5vdyBsZXQgbWUgY29uc2lkZXIuLi4gd2hhdCBhYm91dCBgaW9fd3FfY3JlYXRlYD8gV2hlcmUgZG9lcyB0aGF0IGZpdCBpbj8gSSBzaG91bGQgcHJvYmFibHkgcmV2aWV3IHRoZSBwbGFjZXMgdGhhdCBjYWxsICp0aGF0KiBmdW5jdGlvbiB0b28uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MDIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyMzo1Ny45OTIxNjEwNjdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMzAzMTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3dxX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW8td3EuYz0yOTU9c3RhdGljIGJvb2wgaW9fYWNjdF9hY3RpdmF0ZV9mcmVlX3dvcmtlcihzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdClcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMzI1LSAqL1xcbmlvX3VyaW5nL2lvLXdxLmM6MzI2OnN0YXRpYyBib29sIGlvX3dxX2NyZWF0ZV93b3JrZXIoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpXFxuaW9fdXJpbmcvaW8td3EuYy0zMjcte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMDI4PXZvaWQgaW9fd3FfZW5xdWV1ZShzdHJ1Y3QgaW9fd3EgKndxLCBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaylcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTA2MS1cXG5pb191cmluZy9pby13cS5jOjEwNjI6XFx0XFx0ZGlkX2NyZWF0ZSA9IGlvX3dxX2NyZWF0ZV93b3JrZXIod3EsIGFjY3QpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTA2My1cXHRcXHRpZiAobGlrZWx5KGRpZF9jcmVhdGUpKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMjM1PXN0YXRpYyBpbnQgaW9fd3FfaGFzaF93YWtlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMjUzLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTI1NDpzdHJ1Y3QgaW9fd3EgKmlvX3dxX2NyZWF0ZSh1bnNpZ25lZCBib3VuZGVkLCBzdHJ1Y3QgaW9fd3FfZGF0YSAqZGF0YSlcXG5pb191cmluZy9pby13cS5jLTEyNTUte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuaD0zNz1zdHJ1Y3QgaW9fd3FfZGF0YSB7XFxuLS1cXG5pb191cmluZy9pby13cS5oLTQxLVxcbmlvX3VyaW5nL2lvLXdxLmg6NDI6c3RydWN0IGlvX3dxICppb193cV9jcmVhdGUodW5zaWduZWQgYm91bmRlZCwgc3RydWN0IGlvX3dxX2RhdGEgKmRhdGEpO1xcbmlvX3VyaW5nL2lvLXdxLmgtNDMtdm9pZCBpb193cV9leGl0X3N0YXJ0KHN0cnVjdCBpb193cSAqd3EpO1xcbi0tXFxuaW9fdXJpbmcvdGN0eC5jPTE2PXN0YXRpYyBzdHJ1Y3QgaW9fd3EgKmlvX2luaXRfd3Ffb2ZmbG9hZChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL3RjdHguYy00Mi1cXG5pb191cmluZy90Y3R4LmM6NDM6XFx0cmV0dXJuIGlvX3dxX2NyZWF0ZShjb25jdXJyZW5jeSwgXFx1MDAyNmRhdGEpO1xcbmlvX3VyaW5nL3RjdHguYy00NC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjIzOjU4LjA1MzQ2ODA1MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTcyNjQ5OTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIElPX3VyaW5nIFdvcmtxdWV1ZSBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGlvX3VyaW5nYCBjb2RlLCBhbmQgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBhcmVhcywgZXNwZWNpYWxseSByZWdhcmRpbmcgdGhlIHdvcmtxdWV1ZXMuIGBpb193cV9jcmVhdGVgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGp1bXBzIG91dC4gSSBzZWUgaXQncyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgaW9faW5pdF93cV9vZmZsb2FkYCB3aXRoaW4gYGlvX3VyaW5nL3RjdHguY2AuIFRoYXQgbWFrZXMgYGlvX3dxX2NyZWF0ZWAgYSBnb29kIHN5bWJvbCB0byBjb25jZW50cmF0ZSBvbiBmaXJzdC5cblxuSG1tLCB3aGlsZSBJJ20gYXQgaXQsIEkgc2hvdWxkIGNvbnNpZGVyIHRoZSBjb21wbGVtZW50YXJ5IGZ1bmN0aW9uIHRvIGBpb193cV9jcmVhdGVgLiBUaGUgbmFtZSBgaW9fd3FfcHV0X2FuZF9leGl0YCBjYXRjaGVzIG15IGV5ZS4gSXMgaXQgdGhlIGtleSB0byBjbGVhbnVwIGFuZCB0ZWFyZG93bj8gSXQncyBwcm9iYWJseSB3b3J0aCBhZGRpbmcgdGhhdCB0byBteSBtZW50YWwgbWFwIG9mIHRoZSBjb3JlIHdvcmtxdWV1ZSBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTYzNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjI0OjA1LjAyNjEyMjM0N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxOTkzNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3dxX3B1dF9hbmRfZXhpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW8td3EuYz0xMzg0PXN0YXRpYyB2b2lkIGlvX3dxX2Rlc3Ryb3koc3RydWN0IGlvX3dxICp3cSlcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTM5Ny1cXG5pb191cmluZy9pby13cS5jOjEzOTg6dm9pZCBpb193cV9wdXRfYW5kX2V4aXQoc3RydWN0IGlvX3dxICp3cSlcXG5pb191cmluZy9pby13cS5jLTEzOTkte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuaD00Mz12b2lkIGlvX3dxX2V4aXRfc3RhcnQoc3RydWN0IGlvX3dxICp3cSk7XFxuaW9fdXJpbmcvaW8td3EuaDo0NDp2b2lkIGlvX3dxX3B1dF9hbmRfZXhpdChzdHJ1Y3QgaW9fd3EgKndxKTtcXG5pb191cmluZy9pby13cS5oLTQ1LXZvaWQgaW9fd3Ffc2V0X2V4aXRfb25faWRsZShzdHJ1Y3QgaW9fd3EgKndxLCBib29sIGVuYWJsZSk7XFxuLS1cXG5pb191cmluZy90Y3R4LmM9MTQ1PWludCBfX2lvX3VyaW5nX2FkZF90Y3R4X25vZGUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXFxuLS1cXG5pb191cmluZy90Y3R4LmMtMTg5LVxcdFxcdFxcdGlvX3dxX2V4aXRfc3RhcnQodGN0eC1cXHUwMDNlaW9fd3EpO1xcbmlvX3VyaW5nL3RjdHguYzoxOTA6XFx0XFx0XFx0aW9fd3FfcHV0X2FuZF9leGl0KHRjdHgtXFx1MDAzZWlvX3dxKTtcXG5pb191cmluZy90Y3R4LmMtMTkxLVxcdFxcdH1cXG4tLVxcbmlvX3VyaW5nL3RjdHguYz0yNDM9X19jb2xkIHZvaWQgaW9fdXJpbmdfY2xlYW5fdGN0eChzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eClcXG4tLVxcbmlvX3VyaW5nL3RjdHguYy0yNTctXFx0XFx0ICovXFxuaW9fdXJpbmcvdGN0eC5jOjI1ODpcXHRcXHRpb193cV9wdXRfYW5kX2V4aXQod3EpO1xcbmlvX3VyaW5nL3RjdHguYy0yNTktXFx0XFx0dGN0eC1cXHUwMDNlaW9fd3EgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyNDowNS4yNDgxMjI2MTdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNDU0NzE5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRm9jdXNpbmcgb24gSU8gQ29tcGxldGlvbiBRdWV1ZXMqKlxuXG5BbHJpZ2h0LCB5ZXAsIGBpb193cV9wdXRfYW5kX2V4aXRgIHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIG15IGluaXRpYWwgZm9jdXMuIEl0J3MgYSBrZXkgcG9pbnQgaW4gdGhlIGxpZmVjeWNsZSwgaGFuZGxpbmcgdGhlIFwiY2xlYW51cCBvbiBleGl0XCIgYXNwZWN0IHdoaWNoIGlzIGFsd2F5cyBjcml0aWNhbC4gSSd2ZSBnb3QgYSBkZWNlbnQgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgZml0cyBpbiBhdCB0aGUgbW9tZW50LlxuXG5IbW0sIGJ1dCB3aGF0IGFib3V0IGBpb193cV9lbnF1ZXVlYD8gVGhpbmtpbmcgYWJvdXQgaXQgYSBiaXQsIEknbSBhbHJlYWR5IGF3YXJlIHRoYXQgZW5xdWV1ZWluZyBpcyBwcm9iYWJseSBhIHJlbGV2YW50IGFyZWEgdG8gZXhhbWluZSwgYmVjYXVzZSBhIGJvdHRsZW5lY2sgb3IgaXNzdWUgdGhlcmUgY291bGQgcmlwcGxlIHRocm91Z2hvdXQgdGhlIGVudGlyZSBzeXN0ZW0uIEl04oCZcyB3aGVyZSB3b3JrIGdldHMgaW5qZWN0ZWQsIHNvIGFueSBpbmVmZmljaWVuY2llcyBhcmUgZ29pbmcgdG8gcHJvcGFnYXRlLiBNYXliZSBJIHNob3VsZCBjb25zaWRlciB0aGF0IGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzU3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjQ6MDguODgyNjcyMzg3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE3Mjg4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb193cV9lbnF1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pby13cS5jPTYwMT1zdGF0aWMgdm9pZCBpb193b3JrZXJfaGFuZGxlX3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXFxuLS1cXG5pb191cmluZy9pby13cS5jLTY2NS1cXHRcXHRcXHRpZiAobGlua2VkKVxcbmlvX3VyaW5nL2lvLXdxLmM6NjY2OlxcdFxcdFxcdFxcdGlvX3dxX2VucXVldWUod3EsIGxpbmtlZCk7XFxuaW9fdXJpbmcvaW8td3EuYy02NjctXFxuLS1cXG5pb191cmluZy9pby13cS5jPTEwMjM9c3RhdGljIGJvb2wgaW9fd3Ffd29ya19tYXRjaF9pdGVtKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICpkYXRhKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMDI3LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTAyODp2b2lkIGlvX3dxX2VucXVldWUoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX3dvcmsgKndvcmspXFxuaW9fdXJpbmcvaW8td3EuYy0xMDI5LXtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmg9NDU9dm9pZCBpb193cV9zZXRfZXhpdF9vbl9pZGxlKHN0cnVjdCBpb193cSAqd3EsIGJvb2wgZW5hYmxlKTtcXG5pb191cmluZy9pby13cS5oLTQ2LVxcbmlvX3VyaW5nL2lvLXdxLmg6NDc6dm9pZCBpb193cV9lbnF1ZXVlKHN0cnVjdCBpb193cSAqd3EsIHN0cnVjdCBpb193cV93b3JrICp3b3JrKTtcXG5pb191cmluZy9pby13cS5oLTQ4LXZvaWQgaW9fd3FfaGFzaF93b3JrKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICp2YWwpO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz00MDg9c3RhdGljIHZvaWQgaW9fcXVldWVfaW93cShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNDMyLVxcdHRyYWNlX2lvX3VyaW5nX3F1ZXVlX2FzeW5jX3dvcmsocmVxLCBpb193cV9pc19oYXNoZWQoXFx1MDAyNnJlcS1cXHUwMDNld29yaykpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6NDMzOlxcdGlvX3dxX2VucXVldWUodGN0eC1cXHUwMDNlaW9fd3EsIFxcdTAwMjZyZXEtXFx1MDAzZXdvcmspO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNDM0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjQ6MDguOTI3ODUyMTgzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5Mzg3OTYzNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGlvX3VyaW5nIFdvcmtlciBDYW5jZWxsYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBhZnRlciByZXZpZXdpbmcgdGhlIHBhdGNoIGFuZCBpdHMgY29udGV4dCwgSSd2ZSB6ZXJvZWQgaW4gb24gYGlvX3dxX2VucXVldWVgIGFzIGEga2V5IHN5bWJvbCBmb3IgZm9jdXNlZCBmdXp6aW5nIOKAkyBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gRXhwYW5kaW5nIG9uIHRoYXQsIHRoZSBvdGhlciBmdW5jdGlvbnMgdG8ga2VlcCBhbiBleWUgb24gYXJlIGBpb193cV9jcmVhdGVgLCBgaW9fd3FfcHV0X2FuZF9leGl0YCwgYW5kIGBpb193cV9jYW5jZWxfY2JgLiBUaG9zZSwgYWxvbmcgd2l0aCBgaW9fd3FfZW5xdWV1ZWAsIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGNvdmVyYWdlIG9mIHRoZSByZWxldmFudCBjb21wb25lbnRzLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24uIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb24gY29udHJvbGxpbmcgdGhpcyBhcmVhIGlzIGBJT19VUklOR2AuIERvdWJsZS1jaGVja2luZy4uLnllcywgYENPTkZJR19JT19VUklOR2AgaXMgZGVmaW5lZCBpbiBgaW5pdC9LY29uZmlnYC4gV2FpdCwgaG9sZCBvbi4uLiBpdCBhcHBlYXJzIHRoYXQgYENPTkZJR19JT19XUWAgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBieSBgQ09ORklHX0lPX1VSSU5HYC4gRXhjZWxsZW50LCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzIOKAkyBqdXN0IGBJT19VUklOR2AgaXMgc3VmZmljaWVudCB0byBlbmFibGUgdGhlIGNvZGUgcGF0aHMgSSBuZWVkIHRvIHRhcmdldC5cblxuSSBuZWVkIHRvIGFydGljdWxhdGUgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBzZWxlY3Rpb24sIGZvciBteSBvd24gcmVjb3JkIGFuZCB0byBjbGFyaWZ5IHRoZSByYXRpb25hbGUgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGBpb193b3JrZXJfY2FuY2VsX2NiYCB3aXRoaW4gYGlvX3VyaW5nL2lvLXdxLmNgLiBUaGUgY2hhbmdlIGNvbmRpdGlvbmFsIGRlY3JlbWVudHMgYGFjY3QtXHUwMDNlbnJfd29ya2Vyc2AgaW4gdGhlIGZ1bmN0aW9uIG9ubHkgd2hlbiBhIHZlcnkgc3BlY2lmaWMgY29uZGl0aW9uIGlzIG1ldCwgbmFtZWx5IGB3b3JrZXItXHUwMDNlY3JlYXRlX3dvcmsuZnVuYyAhPSBjcmVhdGVfd29ya2VyX2NiYC4gVGhpcyBpcyBmaXhpbmcgYSBidWcgcmVsYXRlZCB0byBpb191cmluZyB3b3JrZXIgY2FuY2VsbGF0aW9uLCB3aGVyZSB0aGUgd29ya2VyIHNsb3Qgd2Fzbid0IHByb3Blcmx5IHJlc2VydmVkLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSBpbiB0aGUgY29yZSBpb191cmluZyBsb2dpYy4gSSB0aGluayB0aGF0IGl0J3Mgd29ydGggZnV6emluZyBnaXZlbiB0aGF0IGl0J3MgaW4gYSByZWFjaGFibGUgY29kZSBwYXRoLlxuXG5TbywgdG8gc3VtbWFyaXplOlxuXG4qICAgKipGb2N1cyBTeW1ib2xzOioqIGBpb193cV9jcmVhdGVgLCBgaW9fd3FfcHV0X2FuZF9leGl0YCwgYGlvX3dxX2VucXVldWVgLCBgaW9fd3FfY2FuY2VsX2NiYFxuKiAgICoqRW5hYmxlIENvbmZpZ3M6KiogYElPX1VSSU5HYFxuXG5JJ20gcmVhZHkgdG8gcHJvY2VlZCB3aXRoIHNldHRpbmcgdXAgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgYW5kIHRhcmdldGluZyB0aGVzZSBjb21wb25lbnRzIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwNjcsIk91dHB1dFRva2VucyI6MTY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjI0OjE1Ljg2NjY1MTI4MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MjQ3NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3dxX2NyZWF0ZVwiLFxuICAgIFwiaW9fd3FfcHV0X2FuZF9leGl0XCIsXG4gICAgXCJpb193cV9lbnF1ZXVlXCIsXG4gICAgXCJpb193cV9jYW5jZWxfY2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaW9fd29ya2VyX2NhbmNlbF9jYmAgaW4gYGlvX3VyaW5nL2lvLXdxLmNgIHRvIGNvbmRpdGlvbmFsbHkgZGVjcmVtZW50IGBhY2N0LVxcdTAwM2Vucl93b3JrZXJzYCBvbmx5IGlmIGB3b3JrZXItXFx1MDAzZWNyZWF0ZV93b3JrLmZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jYmAuIFRoaXMgZml4ZXMgYSBidWcgaW4gaW9fdXJpbmcgd29ya2VyIGNhbmNlbGxhdGlvbiB3aGVyZSB0aGUgd29ya2VyIHNsb3Qgd2FzIG5vdCB5ZXQgcmVzZXJ2ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBpb191cmluZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3dxX2NyZWF0ZVwiLFxuICAgIFwiaW9fd3FfcHV0X2FuZF9leGl0XCIsXG4gICAgXCJpb193cV9lbnF1ZXVlXCIsXG4gICAgXCJpb193cV9jYW5jZWxfY2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaW9fd29ya2VyX2NhbmNlbF9jYmAgaW4gYGlvX3VyaW5nL2lvLXdxLmNgIHRvIGNvbmRpdGlvbmFsbHkgZGVjcmVtZW50IGBhY2N0LVxcdTAwM2Vucl93b3JrZXJzYCBvbmx5IGlmIGB3b3JrZXItXFx1MDAzZWNyZWF0ZV93b3JrLmZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jYmAuIFRoaXMgZml4ZXMgYSBidWcgaW4gaW9fdXJpbmcgd29ya2VyIGNhbmNlbGxhdGlvbiB3aGVyZSB0aGUgd29ya2VyIHNsb3Qgd2FzIG5vdCB5ZXQgcmVzZXJ2ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBpb191cmluZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjQ6MTUuOTQzOTA1NDY1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzczNjg5NDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjQ6MTUuOTQ0NDIwOTY1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg3NzMxNjg3NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGFjY291bnRpbmcgYnVnIGluIGlvX3dvcmtlcl9jYW5jZWxfY2IoKSB3aGVyZSBhY2N0LVxcdTAwM2Vucl93b3JrZXJzIHdhcyBkZWNyZW1lbnRlZCBldmVuIGlmIGNyZWF0ZV93b3JrZXJfY2IoKSBoYWQgbm90IHJlc2VydmVkIGEgd29ya2VyIHNsb3QgeWV0LiBUaGlzIGlzIGEgbG9naWMgYnVnIHJlbGF0ZWQgdG8gcmVzb3VyY2UgYWNjb3VudGluZyBhbmQgY29uY3VycmVuY3ksIHdoaWNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJlY2FhMmE2MTljZjljMzc3ZDIwYTRmODc2NDMyYzg0ZTNkMTYwNjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNzoyMjo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2lvLXdxLmMgYi9pb191cmluZy9pby13cS5jXG5pbmRleCAyZTE0ODgwZWVmOTJhLi5mYTQwM2VkMjQ1OTYyIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvaW8td3EuY1xuKysrIGIvaW9fdXJpbmcvaW8td3EuY1xuQEAgLTIxMSw5ICsyMTEsMTIgQEAgc3RhdGljIHZvaWQgaW9fd29ya2VyX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpXG4gXHRzdHJ1Y3QgaW9fd3EgKndxID0gd29ya2VyLVx1MDAzZXdxO1xuIFxuIFx0YXRvbWljX2RlYyhcdTAwMjZhY2N0LVx1MDAzZW5yX3J1bm5pbmcpO1xuLVx0cmF3X3NwaW5fbG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4tXHRhY2N0LVx1MDAzZW5yX3dvcmtlcnMtLTtcbi1cdHJhd19zcGluX3VubG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4rXHQvKiBjcmVhdGVfd29ya2VyX2NiKCkgaGFzIG5vdCByZXNlcnZlZCBhIHdvcmtlciBzbG90IHlldC4gKi9cbitcdGlmICh3b3JrZXItXHUwMDNlY3JlYXRlX3dvcmsuZnVuYyAhPSBjcmVhdGVfd29ya2VyX2NiKSB7XG4rXHRcdHJhd19zcGluX2xvY2soXHUwMDI2YWNjdC1cdTAwM2V3b3JrZXJzX2xvY2spO1xuK1x0XHRhY2N0LVx1MDAzZW5yX3dvcmtlcnMtLTtcbitcdFx0cmF3X3NwaW5fdW5sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbitcdH1cbiBcdGlvX3dvcmtlcl9yZWZfcHV0KHdxKTtcbiBcdGNsZWFyX2JpdF91bmxvY2soMCwgXHUwMDI2d29ya2VyLVx1MDAzZWNyZWF0ZV9zdGF0ZSk7XG4gXHRpb193b3JrZXJfcmVsZWFzZSh3b3JrZXIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MjQ6MTUuOTQ0NDIxNjg1WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3NzMxNDI5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBXb3JrZXIgQWNjb3VudGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBpb191cmluZy9pby13cS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBtb2RpZmljYXRpb24gdG8gYGlvX3dvcmtlcl9jYW5jZWxfY2JgLiBJdCdzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBmaXgsIGFuZCB0aGFua2Z1bGx5LCBpdCBkb2Vzbid0IGludm9sdmUgYW55IG9mIHRoZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IGtlZXAgbWUgdXAgYXQgbmlnaHQhXG5cblRoZSBjcnV4IG9mIHRoZSBjaGFuZ2UgaXMgdGhpcyBjb25kaXRpb25hbCBjaGVjayBiZWluZyBhZGRlZCBhcm91bmQgdGhlIGRlY3JlbWVudCBvZiBgYWNjdC1cdTAwM2Vucl93b3JrZXJzYDpcblxuYGBgY1xuXHQvKiBjcmVhdGVfd29ya2VyX2NiKCkgaGFzIG5vdCByZXNlcnZlZCBhIHdvcmtlciBzbG90IHlldC4gKi9cblx0aWYgKHdvcmtlci1cdTAwM2VjcmVhdGVfd29yay5mdW5jICE9IGNyZWF0ZV93b3JrZXJfY2IpIHtcblx0XHRyYXdfc3Bpbl9sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcblx0XHRhY2N0LVx1MDAzZW5yX3dvcmtlcnMtLTtcblx0XHRyYXdfc3Bpbl91bmxvY2soXHUwMDI2YWNjdC1cdTAwM2V3b3JrZXJzX2xvY2spO1xuXHR9XG5gYGBcblxuRXNzZW50aWFsbHksIHdlJ3JlIG1ha2luZyBzdXJlIHdlIG9ubHkgZGVjcmVtZW50IHRoZSB3b3JrZXIgY291bnQgaWYgYGNyZWF0ZV93b3JrZXJfY2JgIGhhc24ndCBhbHJlYWR5IHJlc2VydmVkIGEgc2xvdC4gSXQncyBhbiBhY2NvdW50aW5nIGNvcnJlY3Rpb24uIEJlZm9yZSB0aGlzIGNoYW5nZSwgdGhlcmUgd2FzIGEgYnVnIHdoZXJlIHRoZSB3b3JrZXIgY291bnQgd2FzIGJlaW5nIGRlY3JlbWVudGVkIHByZW1hdHVyZWx5IGluIGNlcnRhaW4gc2NlbmFyaW9zLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHdvcmtlciBjb3VudHMsIHBvc3NpYmx5IGxlYWRpbmcgdG8gc3VidGxlIGRlYWRsb2Nrcywgb3IgcmVzb3VyY2UgbGVha3MuXG5cbk5vdywgZ29pbmcgdGhyb3VnaCBgaW9fd29ya2VyX2NhbmNlbF9jYmAgYWdhaW4sIGl0J3MgY2xlYXIgdGhpcyBpcyBqdXN0IGFib3V0IGtlZXBpbmcgdHJhY2sgb2YgdGhlIHdvcmtlcnMsIG5vdGhpbmcgZWxzZS5cblxuYGBgY1xuc3RhdGljIHZvaWQgaW9fd29ya2VyX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpXG57XG5cdHN0cnVjdCBpb193cV9hY2N0ICphY2N0ID0gaW9fd3FfZ2V0X2FjY3Qod29ya2VyKTtcblx0c3RydWN0IGlvX3dxICp3cSA9IHdvcmtlci1cdTAwM2V3cTtcblxuXHRhdG9taWNfZGVjKFx1MDAyNmFjY3QtXHUwMDNlbnJfcnVubmluZyk7XG5cdC8qIGNyZWF0ZV93b3JrZXJfY2IoKSBoYXMgbm90IHJlc2VydmVkIGEgd29ya2VyIHNsb3QgeWV0LiAqL1xuXHRpZiAod29ya2VyLVx1MDAzZWNyZWF0ZV93b3JrLmZ1bmMgIT0gY3JlYXRlX3dvcmtlcl9jYikge1xuXHRcdHJhd19zcGluX2xvY2soXHUwMDI2YWNjdC1cdTAwM2V3b3JrZXJzX2xvY2spO1xuXHRcdGFjY3QtXHUwMDNlbnJfd29ya2Vycy0tO1xuXHRcdHJhd19zcGluX3VubG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG5cdH1cblx0aW9fd29ya2VyX3JlZl9wdXQod3EpO1xuXHRjbGVhcl9iaXRfdW5sb2NrKDAsIFx1MDAyNndvcmtlci1cdTAwM2VjcmVhdGVfc3RhdGUpO1xuXHRpb193b3JrZXJfcmVsZWFzZSh3b3JrZXIpO1xufVxuYGBgXG5cblNvLCBkZWZpbml0ZWx5IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHNoZW5hbmlnYW5zIGFyZSBhdCBwbGF5IGhlcmUsIHdoaWNoIGlzIGEgcmVsaWVmLiBJJ20gY29tZm9ydGFibGUgc2F5aW5nIHRoaXMgZG9lc24ndCBuZWVkIHRvIGJlIGZsYWdnZWQgZm9yIEtNU0FOLCBJJ2xsIHNldCBOZWVkc0tNU0FOIHRvIGZhbHNlLiBJdCdzIHB1cmVseSBhbiBhY2NvdW50aW5nIGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NiwiT3V0cHV0VG9rZW5zIjoxMDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzoyNDoyNC43MTc1Njg4N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gYWNjb3VudGluZyBidWcgaW4gaW9fd29ya2VyX2NhbmNlbF9jYigpIHdoZXJlIGFjY3QtXFx1MDAzZW5yX3dvcmtlcnMgd2FzIGRlY3JlbWVudGVkIGV2ZW4gaWYgY3JlYXRlX3dvcmtlcl9jYigpIGhhZCBub3QgcmVzZXJ2ZWQgYSB3b3JrZXIgc2xvdCB5ZXQuIFRoaXMgaXMgYSBsb2dpYyBidWcgcmVsYXRlZCB0byByZXNvdXJjZSBhY2NvdW50aW5nIGFuZCBjb25jdXJyZW5jeSwgd2hpY2ggZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gYWNjb3VudGluZyBidWcgaW4gaW9fd29ya2VyX2NhbmNlbF9jYigpIHdoZXJlIGFjY3QtXFx1MDAzZW5yX3dvcmtlcnMgd2FzIGRlY3JlbWVudGVkIGV2ZW4gaWYgY3JlYXRlX3dvcmtlcl9jYigpIGhhZCBub3QgcmVzZXJ2ZWQgYSB3b3JrZXIgc2xvdCB5ZXQuIFRoaXMgaXMgYSBsb2dpYyBidWcgcmVsYXRlZCB0byByZXNvdXJjZSBhY2NvdW50aW5nIGFuZCBjb25jdXJyZW5jeSwgd2hpY2ggZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowfb5l7[1] Phase: Succeeded StartedAt: 2026-08-11 07:24:36 +0000 UTC FinishedAt: 2026-08-11 07:24:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfb5l7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 07:24:36 +0000 UTC FinishedAt: 2026-08-11 07:24:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfb5l7[2] Phase: Succeeded StartedAt: 2026-08-11 07:24:36 +0000 UTC FinishedAt: 2026-08-11 11:06:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-11 07:24:36 +0000 UTC FinishedAt: 2026-08-11 11:06:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-11 07:24:36 +0000 UTC FinishedAt: 2026-08-11 07:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-11 07:24:36 +0000 UTC FinishedAt: 2026-08-11 07:24:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfb5l7/series-workflowfb5l7-convert-artifact-1995444991/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-11 07:24:46 +0000 UTC FinishedAt: 2026-08-11 07:41:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-11 07:24:46 +0000 UTC FinishedAt: 2026-08-11 07:41:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*51101daa-62b2-47bf-ae53-0f9ce97720a3,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-workflowfb5l7/series-workflowfb5l7-convert-artifact-1995444991/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": "aae3f4ab-91d8-4b4c-b6fc-d26508fa2590", "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-workflowfb5l7/series-workflowfb5l7-build-action-3966168453/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-11 07:24:46 +0000 UTC FinishedAt: 2026-08-11 07:41:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*51101daa-62b2-47bf-ae53-0f9ce97720a3,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-workflowfb5l7/series-workflowfb5l7-convert-artifact-1995444991/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": "aae3f4ab-91d8-4b4c-b6fc-d26508fa2590", "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-workflowfb5l7/series-workflowfb5l7-build-action-3966168453/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-11 07:41:14 +0000 UTC FinishedAt: 2026-08-11 07:41:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-11 07:41:14 +0000 UTC FinishedAt: 2026-08-11 07:41:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-11 07:41:14 +0000 UTC FinishedAt: 2026-08-11 07:41:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-11 07:41:14 +0000 UTC FinishedAt: 2026-08-11 07:41:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfb5l7/series-workflowfb5l7-convert-artifact-886657806/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-11 07:41:35 +0000 UTC FinishedAt: 2026-08-11 07:43:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-11 07:41:35 +0000 UTC FinishedAt: 2026-08-11 07:43:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*aae3f4ab-91d8-4b4c-b6fc-d26508fa2590,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-workflowfb5l7/series-workflowfb5l7-build-action-3966168453/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-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-11 07:43:58 +0000 UTC FinishedAt: 2026-08-11 07:43:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-11 07:43:58 +0000 UTC FinishedAt: 2026-08-11 07:43:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-11 07:43:58 +0000 UTC FinishedAt: 2026-08-11 08:00:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-11 07:43:58 +0000 UTC FinishedAt: 2026-08-11 08:00:08 +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:*51101daa-62b2-47bf-ae53-0f9ce97720a3,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-workflowfb5l7/series-workflowfb5l7-convert-artifact-886657806/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": "0d96d4c2-80cc-4a19-a5cd-be6e5e03dff8", "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-workflowfb5l7/series-workflowfb5l7-build-action-3685001378/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-11 07:43:58 +0000 UTC FinishedAt: 2026-08-11 07:59:58 +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:*51101daa-62b2-47bf-ae53-0f9ce97720a3,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-workflowfb5l7/series-workflowfb5l7-convert-artifact-886657806/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": "0d96d4c2-80cc-4a19-a5cd-be6e5e03dff8", "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-workflowfb5l7/series-workflowfb5l7-build-action-3685001378/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-11 08:00:08 +0000 UTC FinishedAt: 2026-08-11 08:00:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-11 08:00:08 +0000 UTC FinishedAt: 2026-08-11 08:00:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-11 08:00:08 +0000 UTC FinishedAt: 2026-08-11 08:02:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-11 08:00:08 +0000 UTC FinishedAt: 2026-08-11 08:02:01 +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:*0d96d4c2-80cc-4a19-a5cd-be6e5e03dff8,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-workflowfb5l7/series-workflowfb5l7-build-action-3685001378/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-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-11 08:02:12 +0000 UTC FinishedAt: 2026-08-11 11:06:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-11 08:02:12 +0000 UTC FinishedAt: 2026-08-11 11:06:43 +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":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*aae3f4ab-91d8-4b4c-b6fc-d26508fa2590,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0d96d4c2-80cc-4a19-a5cd-be6e5e03dff8,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-workflowfb5l7/series-workflowfb5l7-build-action-3966168453/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-workflowfb5l7/series-workflowfb5l7-build-action-3685001378/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-11 08:02:12 +0000 UTC FinishedAt: 2026-08-11 08:02:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-11 08:02:12 +0000 UTC FinishedAt: 2026-08-11 08:02:17 +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":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfb5l7/series-workflowfb5l7-convert-artifact-1869038387/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-11 08:02:12 +0000 UTC FinishedAt: 2026-08-11 08:02:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-11 08:02:12 +0000 UTC FinishedAt: 2026-08-11 08:02:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-11 08:02:12 +0000 UTC FinishedAt: 2026-08-11 08:02:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-11 08:02:23 +0000 UTC FinishedAt: 2026-08-11 11:06:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfb5l7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_wq_create","io_wq_put_and_exit","io_wq_enqueue","io_wq_cancel_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4ee1178-db53-4b87-a3aa-d98f617fb380","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-11 08:02:23 +0000 UTC FinishedAt: 2026-08-11 11:06:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*aae3f4ab-91d8-4b4c-b6fc-d26508fa2590,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0d96d4c2-80cc-4a19-a5cd-be6e5e03dff8,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-workflowfb5l7/series-workflowfb5l7-build-action-3966168453/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-workflowfb5l7/series-workflowfb5l7-build-action-3685001378/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-workflowfb5l7/series-workflowfb5l7-convert-artifact-1869038387/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,}