Name: series-workflowt4gtd Phase: Succeeded StartedAt: 2026-09-03 20:09:03 +0000 UTC FinishedAt: 2026-09-03 21:56:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4gtd[0] Phase: Succeeded StartedAt: 2026-09-03 20:09:03 +0000 UTC FinishedAt: 2026-09-03 20:27:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4gtd[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 20:09:03 +0000 UTC FinishedAt: 2026-09-03 20:27:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c300d74d44c27064768a8dea90e67684b00681de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c300d74d44c27064768a8dea90e67684b00681de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "e644497a-cbe9-4012-8f1b-a867da292ced" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_do_iopoll", "io_iopoll_check" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fZG9faW9wb2xsJiMzNDssCiAgICAmIzM0O2lvX2lvcG9sbF9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpb19kb19pb3BvbGwoKWAgaW4gYGlvX3VyaW5nL3J3LmNgIGJ5IGNoYW5naW5nIGByZXEtXHUwMDNlY3FlLmZsYWdzID0gaW9fcHV0X2tidWYoLi4uKWAgdG8gYHJlcS1cdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYoLi4uKWAuIFRoaXMgaXMgYSBvbmUtbGluZSBsb2dpY2FsIGZpeCBlbnN1cmluZyB0aGF0IGZsYWdzIGFscmVhZHkgc2V0IG9uIGByZXEtXHUwMDNlY3FlLmZsYWdzYCAoc3VjaCBhcyBgSU9SSU5HX0NRRV9GXzMyYCkgYXJlIHByZXNlcnZlZCB3aGVuIGFwcGVuZGluZyBjb21wbGV0aW9uIGZsYWdzIGZvciBwcm92aWRlZCBidWZmZXIgcmVsZWFzZSBkdXJpbmcgSU8gcG9sbGluZy5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZGFyeSBjYWxjdWxhdGlvbnMgaW4gd2F5cyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBnZW5lcmFsIHRlc3Rpbmcgc3VmZmljZSBmb3IgdmVyaWZ5aW5nIGlvX3VyaW5nIHJlcXVlc3QgbGlmZWN5Y2xlIGNvcnJlY3RuZXNzLCBhbmQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpb19kb19pb3BvbGwoKSB0byBiaXR3aXNlLU9SIHRoZSBmbGFncyByZXR1cm5lZCBieSBpb19wdXRfa2J1ZigpIGludG8gcmVxLVx1MDAzZWNxZS5mbGFncyBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIHRoZW0sIHByZXZlbnRpbmcgdGhlIGxvc3Mgb2YgZXhpc3RpbmcgQ1FFIGZsYWdzIGR1cmluZyBwb2xsZWQgSS9PIGNvbXBsZXRpb24uIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBpb191cmluZyBjb21wbGV0aW9uIGxvZ2ljLCB3YXJyYW50aW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxZGMxZmJjOTExNDUxZjJlOTdmN2IwNDdhNWM3ZTkxOTJiMGU5NWEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAyMDoyNTo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9ydy5jIGIvaW9fdXJpbmcvcncuY1xuaW5kZXggOTUxMDZkZDFkN2ViOS4uZjJiYmIwYjFjMzBhMSAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3J3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3J3LmNcbkBAIC0xMzczLDcgJiM0MzsxMzczLDcgQEAgaW50IGlvX2RvX2lvcG9sbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBmb3JjZV9ub25zcGluKVxuIFx0XHRsaXN0X2RlbChcdTAwMjZyZXEtXHUwMDNlaW9wb2xsX25vZGUpO1xuIFx0XHR3cV9saXN0X2FkZF90YWlsKFx1MDAyNnJlcS1cdTAwM2Vjb21wX2xpc3QsIFx1MDAyNmN0eC1cdTAwM2VzdWJtaXRfc3RhdGUuY29tcGxfcmVxcyk7XG4gXHRcdG5yX2V2ZW50cyYjNDM7JiM0Mzs7XG4tXHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO1xuJiM0MztcdFx0cmVxLVx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO1xuIFx0XHRpZiAoIWlvX2lzX3VyaW5nX2NtZChyZXEpKVxuIFx0XHRcdGlvX3JlcV9yd19jbGVhbnVwKHJlcSwgMCk7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19kb19pb3BvbGwmIzM0OywKICAgICYjMzQ7aW9faW9wb2xsX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGlvX2RvX2lvcG9sbCgpIHRvIGJpdHdpc2UtT1IgdGhlIGZsYWdzIHJldHVybmVkIGJ5IGlvX3B1dF9rYnVmKCkgaW50byByZXEtXHUwMDNlY3FlLmZsYWdzIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmcgdGhlbSwgcHJldmVudGluZyB0aGUgbG9zcyBvZiBleGlzdGluZyBDUUUgZmxhZ3MgZHVyaW5nIHBvbGxlZCBJL08gY29tcGxldGlvbi4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIGlvX3VyaW5nIGNvbXBsZXRpb24gbG9naWMsIHdhcnJhbnRpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFkYzFmYmM5MTE0NTFmMmU5N2Y3YjA0N2E1YzdlOTE5MmIwZTk1YTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDIwOjI1OjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcncuYyBiL2lvX3VyaW5nL3J3LmMKaW5kZXggOTUxMDZkZDFkN2ViOS4uZjJiYmIwYjFjMzBhMSAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvcncuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9ydy5jCkBAIC0xMzczLDcgJiM0MzsxMzczLDcgQEAgaW50IGlvX2RvX2lvcG9sbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBmb3JjZV9ub25zcGluKQogCQlsaXN0X2RlbCgmYW1wO3JlcS0mZ3Q7aW9wb2xsX25vZGUpOwogCQl3cV9saXN0X2FkZF90YWlsKCZhbXA7cmVxLSZndDtjb21wX2xpc3QsICZhbXA7Y3R4LSZndDtzdWJtaXRfc3RhdGUuY29tcGxfcmVxcyk7CiAJCW5yX2V2ZW50cyYjNDM7JiM0Mzs7Ci0JCXJlcS0mZ3Q7Y3FlLmZsYWdzID0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLSZndDtjcWUucmVzLCAwKSwgTlVMTCk7CiYjNDM7CQlyZXEtJmd0O2NxZS5mbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtJmd0O2NxZS5yZXMsIDApLCBOVUxMKTsKIAkJaWYgKCFpb19pc191cmluZ19jbWQocmVxKSkKIAkJCWlvX3JlcV9yd19jbGVhbnVwKHJlcSwgMCk7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTMxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhlIGlvX3VyaW5nIFBhdGNoIGZvciBGdXp6aW5nIHdpdGggc3l6a2FsbGVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7dmUgZ290IGEgbmV3IHBhdGNoIGZvciB0aGUgTGludXgga2VybmVsIHRoYXQgSSBuZWVkIHRvIGFzc2VzcyBmb3IgZnV6emluZyBwb3RlbnRpYWwgdXNpbmcgc3l6a2FsbGVyLiBUaGlzIGlzIHByZXR0eSBzdGFuZGFyZCBzdHVmZiDigJMgcGFydCBvZiB0aGUgcmVndWxhciBrZXJuZWwgcmV2aWV3IGFuZCB0cmlhZ2UgcHJvY2Vzcywgd2hldGhlciBpdCYjMzk7cyBiZW5pZ24gZGV2ZWxvcGVyIFFBIG9yIHNlY3VyaXR5IGVuZ2luZWVyaW5nLiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhIGp1aWN5IHRhcmdldCBmb3IgZnV6emluZy4KCkkmIzM5O3ZlIGdvdCB0aGUgcGF0Y2ggaW4gZnJvbnQgb2YgbWU6IGBjb21taXQgMWRjMWZiYzkxMTQ1MWYyZTk3ZjdiMDQ3YTVjN2U5MTkyYjBlOTVhM2AuIExvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgYGlvX3VyaW5nL3J3LmNgLiBTcGVjaWZpY2FsbHksIHRoZSBkaWZmIG1vZGlmaWVzIGEgbGluZSBpbiBgaW9fZG9faW9wb2xsYDoKCmBgYGRpZmYKLQkJcmVxLSZndDtjcWUuZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtJmd0O2NxZS5yZXMsIDApLCBOVUxMKTsKJiM0MzsJCXJlcS0mZ3Q7Y3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS0mZ3Q7Y3FlLnJlcywgMCksIE5VTEwpOwpgYGAKCk9rYXksIHNvIHRoZXkmIzM5O3JlIGNoYW5naW5nIHRoZSBhc3NpZ25tZW50IG9mIGByZXEtJmd0O2NxZS5mbGFnc2AgdG8gYSBiaXR3aXNlIE9SLiBUaGlzIGlzIHRoZSBrZXkgbGluZSB0byBpbnZlc3RpZ2F0ZS4gTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gZGl2ZSBkZWVwZXIuIEkmIzM5O20gZ29pbmcgdG8gdXNlIG15IHN0YW5kYXJkIHRvb2xzIOKAkyBsaWtlbHkgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gYGlvX3VyaW5nL3J3LmNgIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBpb19wdXRfa2J1ZmAgZG9lcywgaG93IGByZXEtJmd0O2NxZS5mbGFnc2AgaXMgdXNlZCwgYW5kIHdoYXQgZWZmZWN0IHRoaXMgY2hhbmdlIG1pZ2h0IGhhdmUgb24gdGhlIG92ZXJhbGwgZmxvdy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoaXMgY2hhbmdlIGFmZmVjdHMgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGJvdW5kYXJ5IGNvbmRpdGlvbnMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9ydy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzUwOlx0XHRcdGlmIChjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9IWUJSSURfSU9QT0xMKVxuMTM1MTpcdFx0XHRcdHJldCA9IGlvX3VyaW5nX2h5YnJpZF9wb2xsKHJlcSwgXHUwMDI2aW9iLCBwb2xsX2ZsYWdzKTtcbjEzNTI6XHRcdFx0ZWxzZVxuMTM1MzpcdFx0XHRcdHJldCA9IGlvX3VyaW5nX2NsYXNzaWNfcG9sbChyZXEsIFx1MDAyNmlvYiwgcG9sbF9mbGFncyk7XG4xMzU0Olx0XG4xMzU1Olx0XHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKVxuMTM1NjpcdFx0XHRcdHJldHVybiByZXQ7XG4xMzU3Olx0XHRcdGVsc2UgaWYgKHJldClcbjEzNTg6XHRcdFx0XHRwb2xsX2ZsYWdzIHw9IEJMS19QT0xMX09ORVNIT1Q7XG4xMzU5Olx0XG4xMzYwOlx0XHRcdC8qIGlvcG9sbCBtYXkgaGF2ZSBjb21wbGV0ZWQgY3VycmVudCByZXEgKi9cbjEzNjE6XHRcdFx0aWYgKCFycV9saXN0X2VtcHR5KFx1MDAyNmlvYi5yZXFfbGlzdCkgfHxcbjEzNjI6XHRcdFx0ICAgIFJFQURfT05DRShyZXEtXHUwMDNlaW9wb2xsX2NvbXBsZXRlZCkpXG4xMzYzOlx0XHRcdFx0YnJlYWs7XG4xMzY0Olx0XHR9XG4xMzY1Olx0XG4xMzY2Olx0XHRpZiAoIXJxX2xpc3RfZW1wdHkoXHUwMDI2aW9iLnJlcV9saXN0KSlcbjEzNjc6XHRcdFx0aW9iLmNvbXBsZXRlKFx1MDAyNmlvYik7XG4xMzY4Olx0XG4xMzY5Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCB0bXAsIFx1MDAyNmN0eC1cdTAwM2Vpb3BvbGxfbGlzdCwgaW9wb2xsX25vZGUpIHtcbjEzNzA6XHRcdFx0Lyogb3JkZXIgd2l0aCBpb19jb21wbGV0ZV9yd19pb3BvbGwoKSwgZS5nLiAtXHUwMDNlcmVzdWx0IHVwZGF0ZXMgKi9cbjEzNzE6XHRcdFx0aWYgKCFzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnJlcS1cdTAwM2Vpb3BvbGxfY29tcGxldGVkKSlcbjEzNzI6XHRcdFx0XHRjb250aW51ZTtcbjEzNzM6XHRcdFx0bGlzdF9kZWwoXHUwMDI2cmVxLVx1MDAzZWlvcG9sbF9ub2RlKTtcbjEzNzQ6XHRcdFx0d3FfbGlzdF9hZGRfdGFpbChcdTAwMjZyZXEtXHUwMDNlY29tcF9saXN0LCBcdTAwMjZjdHgtXHUwMDNlc3VibWl0X3N0YXRlLmNvbXBsX3JlcXMpO1xuMTM3NTpcdFx0XHRucl9ldmVudHMmIzQzOyYjNDM7O1xuMTM3NjpcdFx0XHRyZXEtXHUwMDNlY3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS1cdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XG4xMzc3Olx0XHRcdGlmICghaW9faXNfdXJpbmdfY21kKHJlcSkpXG4xMzc4Olx0XHRcdFx0aW9fcmVxX3J3X2NsZWFudXAocmVxLCAwKTtcbjEzNzk6XHRcdH1cbjEzODA6XHRcdGlmIChucl9ldmVudHMpXG4xMzgxOlx0XHRcdF9faW9fc3VibWl0X2ZsdXNoX2NvbXBsZXRpb25zKGN0eCk7XG4xMzgyOlx0XHRyZXR1cm4gbnJfZXZlbnRzO1xuMTM4MzpcdH1cbjEzODQ6XHRcbjEzODU6XHR2b2lkIGlvX3J3X2NhY2hlX2ZyZWUoY29uc3Qgdm9pZCAqZW50cnkpXG4xMzg2Olx0e1xuMTM4NzpcdFx0c3RydWN0IGlvX2FzeW5jX3J3ICpydyA9IChzdHJ1Y3QgaW9fYXN5bmNfcncgKikgZW50cnk7XG4xMzg4Olx0XG4xMzg5Olx0XHRpb192ZWNfZnJlZShcdTAwMjZydy1cdTAwM2V2ZWMpO1xuMTM5MDpcdFx0a2ZyZWUocncpO1xuMTM5MTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDg2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBpb191cmluZyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdGhpcyBzb3J0ZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbihzKSB0aGF0IGVuYWJsZSBpb191cmluZywgYW5kIHNwZWNpZmljYWxseSwgdGhlIGBpb19kb19pb3BvbGxgIGZlYXR1cmUuIEkmIzM5O20gcHJldHR5IHN1cmUgaXQmIzM5O3MgY29udHJvbGxlZCB0aHJvdWdoIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgc28gSSBzaG91bGQgYmUgYWJsZSB0byB0cmFjayBpdCBkb3duIGluIEtjb25maWcuIFRoZSBzb3VyY2UgY29kZSBpcyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gTGV0IG1lIGhlYWQgdGhlcmUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuIFNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lPX1VSSU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3MzAgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmlvX3VyaW5nL0tjb25maWctNS1cbmlvX3VyaW5nL0tjb25maWc6Njpjb25maWcgSU9fVVJJTkdfWkNSWFxuaW9fdXJpbmcvS2NvbmZpZy03LVx0ZGVmX2Jvb2wgeVxuaW9fdXJpbmcvS2NvbmZpZzo4Olx0ZGVwZW5kcyBvbiBJT19VUklOR1xuaW9fdXJpbmcvS2NvbmZpZy05LVx0ZGVwZW5kcyBvbiBQQUdFX1BPT0xcbi0tXG5pb191cmluZy9LY29uZmlnLTEyLVxuaW9fdXJpbmcvS2NvbmZpZzoxMzpjb25maWcgSU9fVVJJTkdfQlBGXG5pb191cmluZy9LY29uZmlnLTE0LVx0ZGVmX2Jvb2wgeVxuLS1cbmlvX3VyaW5nL0tjb25maWctMTctXG5pb191cmluZy9LY29uZmlnOjE4OmNvbmZpZyBJT19VUklOR19CUEZfT1BTXG5pb191cmluZy9LY29uZmlnLTE5LVx0ZGVmX2Jvb2wgeVxuaW9fdXJpbmcvS2NvbmZpZzoyMDpcdGRlcGVuZHMgb24gSU9fVVJJTkdcbmlvX3VyaW5nL0tjb25maWctMjEtXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBCUEZfSklUIFx1MDAyNlx1MDAyNiBERUJVR19JTkZPX0JURlxuLS1cbmlvX3VyaW5nL01ha2VmaWxlPTc9ZW5kaWZcbmlvX3VyaW5nL01ha2VmaWxlLTgtXG5pb191cmluZy9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19JT19VUklORylcdFx0JiM0Mzs9IGlvX3VyaW5nLm8gb3BkZWYubyBrYnVmLm8gcnNyYy5vIG5vdGlmLm8gXFxcbmlvX3VyaW5nL01ha2VmaWxlLTEwLVx0XHRcdFx0XHR0Y3R4Lm8gZmlsZXRhYmxlLm8gcncubyBwb2xsLm8gXFxcbi0tXG5pb191cmluZy9NYWtlZmlsZS0xOC1cbmlvX3VyaW5nL01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19JT19VUklOR19aQ1JYKVx0JiM0Mzs9IHpjcngub1xuaW9fdXJpbmcvTWFrZWZpbGUtMjAtb2JqLSQoQ09ORklHX0lPX1dRKVx0XHQmIzQzOz0gaW8td3Eub1xuLS1cbmlvX3VyaW5nL01ha2VmaWxlPTI1PW9iai0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gZmRpbmZvLm9cbmlvX3VyaW5nL01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19JT19VUklOR19NT0NLX0ZJTEUpICYjNDM7PSBtb2NrX2ZpbGUub1xuaW9fdXJpbmcvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0lPX1VSSU5HX0JQRikgJiM0Mzs9IGJwZl9maWx0ZXIub1xuaW9fdXJpbmcvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0lPX1VSSU5HX0JQRl9PUFMpICYjNDM7PSBicGYtb3BzLm9cbi0tXG5pb191cmluZy9hZHZpc2UuYz01MT1pbnQgaW9fbWFkdmlzZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL2FkdmlzZS5jLTU2LVxuaW9fdXJpbmcvYWR2aXNlLmM6NTc6XHRXQVJOX09OX09OQ0UoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spO1xuaW9fdXJpbmcvYWR2aXNlLmMtNTgtXG4tLVxuaW9fdXJpbmcvYWR2aXNlLmM9OTY9aW50IGlvX2ZhZHZpc2Uoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9hZHZpc2UuYy0xMDAtXG5pb191cmluZy9hZHZpc2UuYzoxMDE6XHRXQVJOX09OX09OQ0UoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0sgXHUwMDI2XHUwMDI2IGlvX2ZhZHZpc2VfZm9yY2VfYXN5bmMoZmEpKTtcbmlvX3VyaW5nL2FkdmlzZS5jLTEwMi1cbi0tXG5pb191cmluZy9icGYtb3BzLmg9MTM9c3RydWN0IGlvX3VyaW5nX2JwZl9vcHMge1xuLS1cbmlvX3VyaW5nL2JwZi1vcHMuaC0xOS1cbmlvX3VyaW5nL2JwZi1vcHMuaDoyMDojaWZkZWYgQ09ORklHX0lPX1VSSU5HX0JQRl9PUFNcbmlvX3VyaW5nL2JwZi1vcHMuaC0yMS12b2lkIGlvX3VucmVnaXN0ZXJfYnBmX29wcyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jPTI2Nj1zdGF0aWMgc3RydWN0IGlvX2JwZl9maWx0ZXJzICppb19icGZfZmlsdGVyX2NvdyhzdHJ1Y3QgaW9fcmVzdHJpY3Rpb24gKnNyYylcbi0tXG5pb191cmluZy9icGZfZmlsdGVyLmMtMzA5LVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jOjMxMDojZGVmaW5lIElPX1VSSU5HX0JQRl9GSUxURVJfRkxBR1NcdChJT19VUklOR19CUEZfRklMVEVSX0RFTllfUkVTVCB8IFxcXG5pb191cmluZy9icGZfZmlsdGVyLmM6MzExOlx0XHRcdFx0XHQgSU9fVVJJTkdfQlBGX0ZJTFRFUl9TWl9TVFJJQ1QpXG5pb191cmluZy9icGZfZmlsdGVyLmMtMzEyLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jPTMxMz1zdGF0aWMgaW50IGlvX2JwZl9maWx0ZXJfaW1wb3J0KHN0cnVjdCBpb191cmluZ19icGYgKnJlZyxcbi0tXG5pb191cmluZy9icGZfZmlsdGVyLmMtMzIwLVx0XHRyZXR1cm4gLUVGQVVMVDtcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYzozMjE6XHRpZiAocmVnLVx1MDAzZWNtZF90eXBlICE9IElPX1VSSU5HX0JQRl9DTURfRklMVEVSKVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTMyMi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTMyNy1cdFx0cmV0dXJuIC1FSU5WQUw7XG5pb191cmluZy9icGZfZmlsdGVyLmM6MzI4Olx0aWYgKHJlZy1cdTAwM2VmaWx0ZXIuZmxhZ3MgXHUwMDI2IH5JT19VUklOR19CUEZfRklMVEVSX0ZMQUdTKVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTMyOS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTM0NC1cdC8qIHNpemUgZGlmZmVycywgZmFpbCBpbiBzdHJpY3QgbW9kZSAqL1xuaW9fdXJpbmcvYnBmX2ZpbHRlci5jOjM0NTpcdGVsc2UgaWYgKHJlZy1cdTAwM2VmaWx0ZXIuZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0JQRl9GSUxURVJfU1pfU1RSSUNUKVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTM0Ni1cdFx0cmV0ID0gLUVNU0dTSVpFO1xuLS1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuYz0zNTk9aW50IGlvX3JlZ2lzdGVyX2JwZl9maWx0ZXIoc3RydWN0IGlvX3Jlc3RyaWN0aW9uICpyZXMsXG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTQzMy1cdC8qXG5pb191cmluZy9icGZfZmlsdGVyLmM6NDM0Olx0ICogSWYgSU9fVVJJTkdfQlBGX0ZJTFRFUl9ERU5ZX1JFU1QgaXMgc2V0LCBmaWxsIGFueSB1bnJlZ2lzdGVyZWRcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy00MzUtXHQgKiBvcGNvZGUgd2l0aCB0aGUgZHVtbXkgZmlsdGVyLiBUaGF0IHdpbGwgY2F1c2UgdGhlbSB0byBiZSBkZW5pZWQuXG5pb191cmluZy9icGZfZmlsdGVyLmMtNDM2LVx0ICovXG5pb191cmluZy9icGZfZmlsdGVyLmM6NDM3Olx0aWYgKHJlZy5maWx0ZXIuZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0JQRl9GSUxURVJfREVOWV9SRVNUKSB7XG5pb191cmluZy9icGZfZmlsdGVyLmMtNDM4LVx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgSU9SSU5HX09QX0xBU1Q7IGkmIzQzOyYjNDM7KSB7XG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaDoyOiNpZm5kZWYgSU9fVVJJTkdfQlBGX0ZJTFRFUl9IXG5pb191cmluZy9icGZfZmlsdGVyLmg6MzojZGVmaW5lIElPX1VSSU5HX0JQRl9GSUxURVJfSFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTQtXG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTYtXG5pb191cmluZy9icGZfZmlsdGVyLmg6NzojaWZkZWYgQ09ORklHX0lPX1VSSU5HX0JQRlxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTgtXG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oPTQyPXN0YXRpYyBpbmxpbmUgdm9pZCBpb19icGZfZmlsdGVyX2Nsb25lKHN0cnVjdCBpb19yZXN0cmljdGlvbiAqZHN0LFxuLS1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC00NS19XG5pb191cmluZy9icGZfZmlsdGVyLmg6NDY6I2VuZGlmIC8qIENPTkZJR19JT19VUklOR19CUEYgKi9cbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC00Ny1cbi0tXG5pb191cmluZy9jbWRfbmV0LmM9MjU9c3RhdGljIGlubGluZSBpbnQgaW9fdXJpbmdfY21kX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5pb191cmluZy9jbWRfbmV0LmMtMjktXHRjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUgPSBjbWQtXHUwMDNlc3FlO1xuaW9fdXJpbmcvY21kX25ldC5jOjMwOlx0Ym9vbCBjb21wYXQgPSAhIShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9DT01QQVQpO1xuaW9fdXJpbmcvY21kX25ldC5jLTMxLVx0aW50IG9wdGxlbiwgb3B0bmFtZSwgbGV2ZWwsIGVycjtcbi0tXG5pb191cmluZy9jbWRfbmV0LmM9NTI9c3RhdGljIGlubGluZSBpbnQgaW9fdXJpbmdfY21kX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5pb191cmluZy9jbWRfbmV0LmMtNTYtXHRjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUgPSBjbWQtXHUwMDNlc3FlO1xuaW9fdXJpbmcvY21kX25ldC5jOjU3Olx0Ym9vbCBjb21wYXQgPSAhIShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9DT01QQVQpO1xuaW9fdXJpbmcvY21kX25ldC5jLTU4LVx0aW50IG9wdG5hbWUsIG9wdGxlbiwgbGV2ZWw7XG4tLVxuaW9fdXJpbmcvY21kX25ldC5jPTEwND1zdGF0aWMgaW50IGlvX3VyaW5nX2NtZF90aW1lc3RhbXAoc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5pb191cmluZy9jbWRfbmV0LmMtMTEzLVxuaW9fdXJpbmcvY21kX25ldC5jOjExNDpcdGlmICghKGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX0NRRTMyKSlcbmlvX3VyaW5nL2NtZF9uZXQuYy0xMTUtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmlvX3VyaW5nL2Vwb2xsLmM9NTE9aW50IGlvX2Vwb2xsX2N0bChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL2Vwb2xsLmMtNTMtXHRzdHJ1Y3QgaW9fZXBvbGwgKmllID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2Vwb2xsKTtcbmlvX3VyaW5nL2Vwb2xsLmM6NTQ6XHRib29sIGZvcmNlX25vbmJsb2NrID0gaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0s7XG5pb191cmluZy9lcG9sbC5jLTU1LVx0c3RydWN0IGVwb2xsX2tleSBrZXk7XG4tLVxuaW9fdXJpbmcvZmRpbmZvLmM9MzQ9c3RhdGljIF9fY29sZCB2b2lkIG5hcGlfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvZmRpbmZvLmMtMzktXHRzd2l0Y2ggKG1vZGUpIHtcbmlvX3VyaW5nL2ZkaW5mby5jOjQwOlx0Y2FzZSBJT19VUklOR19OQVBJX1RSQUNLSU5HX0lOQUNUSVZFOlxuaW9fdXJpbmcvZmRpbmZvLmMtNDEtXHRcdHNlcV9wdXRzKG0sIFwmIzM0O05BUEk6XFx0ZGlzYWJsZWRcXG5cJiMzNDspO1xuaW9fdXJpbmcvZmRpbmZvLmMtNDItXHRcdGJyZWFrO1xuaW9fdXJpbmcvZmRpbmZvLmM6NDM6XHRjYXNlIElPX1VSSU5HX05BUElfVFJBQ0tJTkdfRFlOQU1JQzpcbmlvX3VyaW5nL2ZkaW5mby5jLTQ0LVx0XHRjb21tb25fdHJhY2tpbmdfc2hvd19mZGluZm8oY3R4LCBtLCBcJiMzNDtkeW5hbWljXCYjMzQ7KTtcbmlvX3VyaW5nL2ZkaW5mby5jLTQ1LVx0XHRicmVhaztcbmlvX3VyaW5nL2ZkaW5mby5jOjQ2Olx0Y2FzZSBJT19VUklOR19OQVBJX1RSQUNLSU5HX1NUQVRJQzpcbmlvX3VyaW5nL2ZkaW5mby5jLTQ3LVx0XHRjb21tb25fdHJhY2tpbmdfc2hvd19mZGluZm8oY3R4LCBtLCBcJiMzNDtzdGF0aWNcJiMzNDspO1xuLS1cbmlvX3VyaW5nL2ZzLmM9ODI9aW50IGlvX3JlbmFtZWF0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvZnMuYy04OC1cbmlvX3VyaW5nL2ZzLmM6ODk6XHRXQVJOX09OX09OQ0UoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spO1xuaW9fdXJpbmcvZnMuYy05MC1cbi0tXG5pb191cmluZy9mcy5jPTEzNT1pbnQgaW9fdW5saW5rYXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9mcy5jLTE0MC1cbmlvX3VyaW5nL2ZzLmM6MTQxOlx0V0FSTl9PTl9PTkNFKGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKTtcbmlvX3VyaW5nL2ZzLmMtMTQyLVxuLS1cbmlvX3VyaW5nL2ZzLmM9MTg0PWludCBpb19ta2RpcmF0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvZnMuYy0xODktXG5pb191cmluZy9mcy5jOjE5MDpcdFdBUk5fT05fT05DRShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSyk7XG5pb191cmluZy9mcy5jLTE5MS1cbi0tXG5pb191cmluZy9mcy5jPTIzNj1pbnQgaW9fc3ltbGlua2F0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvZnMuYy0yNDItXG5pb191cmluZy9mcy5jOjI0MzpcdFdBUk5fT05fT05DRShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSyk7XG5pb191cmluZy9mcy5jLTI0NC1cbi0tXG5pb191cmluZy9mcy5jPTI4ND1pbnQgaW9fbGlua2F0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvZnMuYy0yOTAtXG5pb191cmluZy9mcy5jOjI5MTpcdFdBUk5fT05fT05DRShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSyk7XG5pb191cmluZy9mcy5jLTI5Mi1cbi0tXG5pb191cmluZy9pby13cS5jPTEzNDc9c3RhdGljIHZvaWQgaW9fd3FfZXhpdF93b3JrZXJzKHN0cnVjdCBpb193cSAqd3EpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMzY4LVx0ICogdW5pbnRlcnJ1cHRpYmx5IGZvciBoYWxmIHRoYXQgdGltZSwgYW5kIHdhcm4gaWYgd2UgZXhjZWVkZWQgZW5kXG5pb191cmluZy9pby13cS5jOjEzNjk6XHQgKiB1cCB3YWl0aW5nIG1vcmUgdGhhbiBJT19VUklOR19FWElUX1dBSVRfTUFYLlxuaW9fdXJpbmcvaW8td3EuYy0xMzcwLVx0ICovXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMzczLVx0XHR0aW1lb3V0ID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7XG5pb191cmluZy9pby13cS5jOjEzNzQ6XHR3YXJuX3RpbWVvdXQgPSBqaWZmaWVzICYjNDM7IElPX1VSSU5HX0VYSVRfV0FJVF9NQVg7XG5pb191cmluZy9pby13cS5jLTEzNzUtXHRkbyB7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNTQ9c3RhdGljIHZvaWQgaW9fcG9pc29uX2NhY2hlZF9yZXEoc3RydWN0IGlvX2tpb2NiICpyZXEpXG5pb191cmluZy9pb191cmluZy5jLTE1NS17XG5pb191cmluZy9pb191cmluZy5jOjE1NjpcdHJlcS1cdTAwM2VjdHggPSBJT19VUklOR19QVFJfUE9JU09OO1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNTc6XHRyZXEtXHUwMDNldGN0eCA9IElPX1VSSU5HX1BUUl9QT0lTT047XG5pb191cmluZy9pb191cmluZy5jOjE1ODpcdHJlcS1cdTAwM2VmaWxlID0gSU9fVVJJTkdfUFRSX1BPSVNPTjtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTU5Olx0cmVxLVx1MDAzZWNyZWRzID0gSU9fVVJJTkdfUFRSX1BPSVNPTjtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTYwOlx0cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gSU9fVVJJTkdfUFRSX1BPSVNPTjtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTYxOlx0cmVxLVx1MDAzZWFwb2xsID0gSU9fVVJJTkdfUFRSX1BPSVNPTjtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTYyLX1cbi0tXG5pb191cmluZy9pb191cmluZy5jPTE2ND12b2lkIGlvX3BvaXNvbl9yZXEoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNjYtXHRpb19wb2lzb25fY2FjaGVkX3JlcShyZXEpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNjc6XHRyZXEtXHUwMDNlYXN5bmNfZGF0YSA9IElPX1VSSU5HX1BUUl9QT0lTT047XG5pb191cmluZy9pb191cmluZy5jOjE2ODpcdHJlcS1cdTAwM2VrYnVmID0gSU9fVVJJTkdfUFRSX1BPSVNPTjtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTY5Olx0cmVxLVx1MDAzZWNvbXBfbGlzdC5uZXh0ID0gSU9fVVJJTkdfUFRSX1BPSVNPTjtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTcwOlx0cmVxLVx1MDAzZWZpbGVfbm9kZSA9IElPX1VSSU5HX1BUUl9QT0lTT047XG5pb191cmluZy9pb191cmluZy5jOjE3MTpcdHJlcS1cdTAwM2VsaW5rID0gSU9fVVJJTkdfUFRSX1BPSVNPTjtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTcyLX1cbi0tXG5pb191cmluZy9pb191cmluZy5jPTg0MD12b2lkIGlvX2FkZF9hdXhfY3FlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1NjQgdXNlcl9kYXRhLCBzMzIgcmVzLCB1MzIgY2ZsYWdzKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtODU0LSAqIEEgaGVscGVyIGZvciBtdWx0aXNob3QgcmVxdWVzdHMgcG9zdGluZyBhZGRpdGlvbmFsIENRRXMuXG5pb191cmluZy9pb191cmluZy5jOjg1NTogKiBTaG91bGQgb25seSBiZSB1c2VkIGZyb20gYSB0YXNrX3dvcmsgaW5jbHVkaW5nIElPX1VSSU5HX0ZfTVVMVElTSE9ULlxuaW9fdXJpbmcvaW9fdXJpbmcuYy04NTYtICovXG5pb191cmluZy9pb191cmluZy5jPTg1Nz1ib29sIGlvX3JlcV9wb3N0X2NxZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgczMyIHJlcywgdTMyIGNmbGFncylcbi0tXG5pb191cmluZy9pb191cmluZy5jLTg4Ni0gKiBBIGhlbHBlciBmb3IgbXVsdGlzaG90IHJlcXVlc3RzIHBvc3RpbmcgYWRkaXRpb25hbCBDUUVzLlxuaW9fdXJpbmcvaW9fdXJpbmcuYzo4ODc6ICogU2hvdWxkIG9ubHkgYmUgdXNlZCBmcm9tIGEgdGFza193b3JrIGluY2x1ZGluZyBJT19VUklOR19GX01VTFRJU0hPVC5cbmlvX3VyaW5nL2lvX3VyaW5nLmMtODg4LSAqL1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9OTEwPXN0YXRpYyB2b2lkIGlvX3JlcV9jb21wbGV0ZV9wb3N0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9pb191cmluZy5jLTkxNi1cdCAqIEFsbCBleGVjdXRpb24gcGF0aHMgYnV0IGlvLXdxIHVzZSB0aGUgZGVmZXJyZWQgY29tcGxldGlvbnMgYnlcbmlvX3VyaW5nL2lvX3VyaW5nLmM6OTE3Olx0ICogcGFzc2luZyBJT19VUklOR19GX0NPTVBMRVRFX0RFRkVSIGFuZCB0aHVzIHNob3VsZCBub3QgZW5kIHVwIGhlcmUuXG5pb191cmluZy9pb191cmluZy5jLTkxOC1cdCAqL1xuaW9fdXJpbmcvaW9fdXJpbmcuYzo5MTk6XHRpZiAoV0FSTl9PTl9PTkNFKCEoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfSU9XUSkpKVxuaW9fdXJpbmcvaW9fdXJpbmcuYy05MjAtXHRcdHJldHVybjtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTEyNzQ9c3RhdGljIHZvaWQgaW9faW9wb2xsX3JlcV9pc3N1ZWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9pb191cmluZy5jLTEyNzYtXHRzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCA9IHJlcS1cdTAwM2VjdHg7XG5pb191cmluZy9pb191cmluZy5jOjEyNzc6XHRjb25zdCBib29sIG5lZWRzX2xvY2sgPSBpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRDtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTI3OC1cbi0tXG5pb191cmluZy9pb191cmluZy5jPTE0MDE9c3RhdGljIGludCBpb19pc3N1ZV9zcWUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9pb191cmluZy5jLTE0MTEtXHRpZiAocmV0ID09IElPVV9DT01QTEVURSkge1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNDEyOlx0XHRpZiAoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfQ09NUExFVEVfREVGRVIpXG5pb191cmluZy9pb191cmluZy5jLTE0MTMtXHRcdFx0aW9fcmVxX2NvbXBsZXRlX2RlZmVyKHJlcSk7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNDI5PWludCBpb19wb2xsX2lzc3VlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpb190d190b2tlbl90IHR3KVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNDMwLXtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTQzMTpcdGNvbnN0IHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyA9IElPX1VSSU5HX0ZfTk9OQkxPQ0sgfFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNDMyOlx0XHRcdFx0XHQgSU9fVVJJTkdfRl9NVUxUSVNIT1QgfFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNDMzOlx0XHRcdFx0XHQgSU9fVVJJTkdfRl9DT01QTEVURV9ERUZFUjtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTQzNC1cdGludCByZXQ7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNDY2PXZvaWQgaW9fd3Ffc3VibWl0X3dvcmsoc3RydWN0IGlvX3dxX3dvcmsgKndvcmspXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNDY5LVx0Y29uc3Qgc3RydWN0IGlvX2lzc3VlX2RlZiAqZGVmID0gXHUwMDI2aW9faXNzdWVfZGVmc1tyZXEtXHUwMDNlb3Bjb2RlXTtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTQ3MDpcdHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyA9IElPX1VSSU5HX0ZfVU5MT0NLRUQgfCBJT19VUklOR19GX0lPV1E7XG5pb191cmluZy9pb191cmluZy5jLTE0NzEtXHRib29sIG5lZWRzX3BvbGwgPSBmYWxzZTtcbi0tXG5pb191cmluZy9pb191cmluZy5jLTE1MTktXHRcdFx0bmVlZHNfcG9sbCA9IHRydWU7XG5pb191cmluZy9pb191cmluZy5jOjE1MjA6XHRcdFx0aXNzdWVfZmxhZ3MgfD0gSU9fVVJJTkdfRl9OT05CTE9DSztcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTUyMS1cdFx0fVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTU1My1cdFx0bmVlZHNfcG9sbCA9IGZhbHNlO1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNTU0Olx0XHRpc3N1ZV9mbGFncyBcdTAwMjY9IH5JT19VUklOR19GX05PTkJMT0NLO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNTU1LVx0fSB3aGlsZSAoMSk7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNTkzPXN0YXRpYyBpbnQgaW9fcmVxX3NxZV9jb3B5KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNjAxLVx0XHRyZXR1cm4gMDtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTYwMjpcdGlmIChXQVJOX09OX09OQ0UoIShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9JTkxJTkUpKSlcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTYwMy1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNjMzPXN0YXRpYyBpbmxpbmUgdm9pZCBpb19xdWV1ZV9zcWUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBleHRyYV9mbGFncylcbi0tXG5pb191cmluZy9pb191cmluZy5jLTE2MzUte1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNjM2Olx0dW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzID0gSU9fVVJJTkdfRl9OT05CTE9DSyB8XG5pb191cmluZy9pb191cmluZy5jOjE2Mzc6XHRcdFx0XHQgICBJT19VUklOR19GX0NPTVBMRVRFX0RFRkVSIHwgZXh0cmFfZmxhZ3M7XG5pb191cmluZy9pb191cmluZy5jLTE2MzgtXHRpbnQgcmV0O1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9MTY1MD1zdGF0aWMgdm9pZCBpb19xdWV1ZV9zcWVfZmFsbGJhY2soc3RydWN0IGlvX2tpb2NiICpyZXEpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNjYxLVx0fSBlbHNlIHtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTY2MjpcdFx0LyogY2FuJiMzOTt0IGZhaWwgd2l0aCBJT19VUklOR19GX0lOTElORSAqL1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNjYzOlx0XHRpb19yZXFfc3FlX2NvcHkocmVxLCBJT19VUklOR19GX0lOTElORSk7XG5pb191cmluZy9pb191cmluZy5jLTE2NjQtXHRcdGlmICh1bmxpa2VseShyZXEtXHUwMDNlY3R4LVx1MDAzZWludF9mbGFncyBcdTAwMjYgSU9fUklOR19GX0RSQUlOX0FDVElWRSkpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xODczPXN0YXRpYyBpbmxpbmUgaW50IGlvX3N1Ym1pdF9zcWUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19raW9jYiAqcmVxLFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTkwMC1cdFx0dHJhY2VfaW9fdXJpbmdfbGluayhyZXEsIGxpbmstXHUwMDNlbGFzdCk7XG5pb191cmluZy9pb191cmluZy5jOjE5MDE6XHRcdGlvX3JlcV9zcWVfY29weShyZXEsIElPX1VSSU5HX0ZfSU5MSU5FKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTkwMi1cdFx0bGluay1cdTAwM2VsYXN0LVx1MDAzZWxpbmsgPSByZXE7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xOTI0LVxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxOTI1Olx0aW9fcXVldWVfc3FlKHJlcSwgSU9fVVJJTkdfRl9JTkxJTkUpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0xOTI2LVx0cmV0dXJuIDA7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yMzA5PXN0YXRpYyBfX2NvbGQgdm9pZCBpb19yaW5nX2V4aXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMzExLVx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGlvX3JpbmdfY3R4LCBleGl0X3dvcmspO1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMzEyOlx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyAmIzQzOyBJT19VUklOR19FWElUX1dBSVRfTUFYO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMzEzLVx0dW5zaWduZWQgbG9uZyBpbnRlcnZhbCA9IEhaIC8gMjA7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaD0zMD1zdHJ1Y3QgaW9fY3R4X2NvbmZpZyB7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0xMDAtICovXG5pb191cmluZy9pb191cmluZy5oOjEwMTojZGVmaW5lIElPX1VSSU5HX0VYSVRfV0FJVF9NQVhcdChIWiAqIDYwICogNSlcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMTAyLVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmg9MzkyPXN0YXRpYyBpbmxpbmUgdm9pZCBpb19yaW5nX3N1Ym1pdF91bmxvY2soc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zOTUtXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmN0eC1cdTAwM2V1cmluZ19sb2NrKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmg6Mzk2Olx0aWYgKHVubGlrZWx5KGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX1VOTE9DS0VEKSlcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzk3LVx0XHRtdXRleF91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZXVyaW5nX2xvY2spO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmg9NDAwPXN0YXRpYyBpbmxpbmUgdm9pZCBpb19yaW5nX3N1Ym1pdF9sb2NrKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmgtNDA4LVx0ICovXG5pb191cmluZy9pb191cmluZy5oOjQwOTpcdGlmICh1bmxpa2VseShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkpXG5pb191cmluZy9pb191cmluZy5oLTQxMC1cdFx0bXV0ZXhfbG9jayhcdTAwMjZjdHgtXHUwMDNldXJpbmdfbG9jayk7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaD00Nzk9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fc3FyaW5nX2VudHJpZXMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC00ODctICogUHJvdGVjdGVkIGJ5IC1cdTAwM2V1cmluZ19sb2NrIGFuZCBjYW4gb25seSBiZSB1c2VkIGVpdGhlciB3aXRoXG5pb191cmluZy9pb191cmluZy5oOjQ4ODogKiBJT19VUklOR19GX0NPTVBMRVRFX0RFRkVSIG9yIGluc2lkZSBhIHR3IGhhbmRsZXIgaG9sZGluZyB0aGUgbXV0ZXguXG5pb191cmluZy9pb191cmluZy5oLTQ4OS0gKi9cbi0tXG5pb191cmluZy9rYnVmLmM9MTcyPXN0YXRpYyBib29sIGlvX3Nob3VsZF9jb21taXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9rYnVmLmMtMTgzLVx0Ki9cbmlvX3VyaW5nL2tidWYuYzoxODQ6XHRpZiAoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfVU5MT0NLRUQpXG5pb191cmluZy9rYnVmLmMtMTg1LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5pb191cmluZy9rYnVmLmM9MzQ1PWludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTM3My1vdXRfdW5sb2NrOlxuaW9fdXJpbmcva2J1Zi5jOjM3NDpcdGlmIChpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkge1xuaW9fdXJpbmcva2J1Zi5jLTM3NS1cdFx0c2VsLVx1MDAzZWJ1Zl9saXN0ID0gTlVMTDtcbi0tXG5pb191cmluZy9tZW1tYXAuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG5pb191cmluZy9tZW1tYXAuaDoyOiNpZm5kZWYgSU9fVVJJTkdfTUVNTUFQX0hcbmlvX3VyaW5nL21lbW1hcC5oOjM6I2RlZmluZSBJT19VUklOR19NRU1NQVBfSFxuaW9fdXJpbmcvbWVtbWFwLmgtNC1cbi0tXG5pb191cmluZy9tc2dfcmluZy5jPTQwPXN0YXRpYyBpbnQgaW9fbG9ja19leHRlcm5hbF9jdHgoc3RydWN0IGlvX3JpbmdfY3R4ICpvY3R4LFxuLS1cbmlvX3VyaW5nL21zZ19yaW5nLmMtNDctXHQgKi9cbmlvX3VyaW5nL21zZ19yaW5nLmM6NDg6XHRpZiAoIShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkpIHtcbmlvX3VyaW5nL21zZ19yaW5nLmMtNDktXHRcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZvY3R4LVx1MDAzZXVyaW5nX2xvY2spKVxuLS1cbmlvX3VyaW5nL21zZ19yaW5nLmM9MjI4PXN0YXRpYyB2b2lkIGlvX21zZ190d19mZF9jb21wbGV0ZShzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqaGVhZClcbi0tXG5pb191cmluZy9tc2dfcmluZy5jLTIzNC1cdGlmICghKGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX0VYSVRJTkcpKVxuaW9fdXJpbmcvbXNnX3JpbmcuYzoyMzU6XHRcdHJldCA9IGlvX21zZ19pbnN0YWxsX2NvbXBsZXRlKHJlcSwgSU9fVVJJTkdfRl9VTkxPQ0tFRCk7XG5pb191cmluZy9tc2dfcmluZy5jLTIzNi1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuaW9fdXJpbmcvbXNnX3JpbmcuYz0zMzU9aW50IGlvX3VyaW5nX3N5bmNfbXNnX3Jpbmcoc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuLS1cbmlvX3VyaW5nL21zZ19yaW5nLmMtMzU2LVx0cmV0dXJuICBfX2lvX21zZ19yaW5nX2RhdGEoZmRfZmlsZShmKS1cdTAwM2Vwcml2YXRlX2RhdGEsXG5pb191cmluZy9tc2dfcmluZy5jOjM1NzpcdFx0XHRcdCAgIFx1MDAyNmlvX21zZywgSU9fVVJJTkdfRl9VTkxPQ0tFRCk7XG5pb191cmluZy9tc2dfcmluZy5jLTM1OC19XG4tLVxuaW9fdXJpbmcvbmFwaS5jPTIwMT1fX2lvX25hcGlfZG9fYnVzeV9sb29wKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL25hcGkuYy0yMDUtXHRzd2l0Y2ggKFJFQURfT05DRShjdHgtXHUwMDNlbmFwaV90cmFja19tb2RlKSkge1xuaW9fdXJpbmcvbmFwaS5jOjIwNjpcdGNhc2UgSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19TVEFUSUM6XG5pb191cmluZy9uYXBpLmMtMjA3LVx0XHRyZXR1cm4gc3RhdGljX3RyYWNraW5nX2RvX2J1c3lfbG9vcChjdHgsIGxvb3BfZW5kLCBsb29wX2VuZF9hcmcpO1xuaW9fdXJpbmcvbmFwaS5jOjIwODpcdGNhc2UgSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19EWU5BTUlDOlxuaW9fdXJpbmcvbmFwaS5jLTIwOS1cdFx0cmV0dXJuIGR5bmFtaWNfdHJhY2tpbmdfZG9fYnVzeV9sb29wKGN0eCwgbG9vcF9lbmQsIGxvb3BfZW5kX2FyZyk7XG4tLVxuaW9fdXJpbmcvbmFwaS5jPTI0OD12b2lkIGlvX25hcGlfaW5pdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbi0tXG5pb191cmluZy9uYXBpLmMtMjU1LVx0Y3R4LVx1MDAzZW5hcGlfYnVzeV9wb2xsX2R0ID0gbnNfdG9fa3RpbWUoc3lzX2R0KTtcbmlvX3VyaW5nL25hcGkuYzoyNTY6XHRjdHgtXHUwMDNlbmFwaV90cmFja19tb2RlID0gSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19JTkFDVElWRTtcbmlvX3VyaW5nL25hcGkuYy0yNTctfVxuLS1cbmlvX3VyaW5nL25hcGkuYz0yNzc9c3RhdGljIGludCBpb19uYXBpX3JlZ2lzdGVyX25hcGkoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvbmFwaS5jLTI4MC1cdHN3aXRjaCAobmFwaS1cdTAwM2VvcF9wYXJhbSkge1xuaW9fdXJpbmcvbmFwaS5jOjI4MTpcdGNhc2UgSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19EWU5BTUlDOlxuaW9fdXJpbmcvbmFwaS5jOjI4MjpcdGNhc2UgSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19TVEFUSUM6XG5pb191cmluZy9uYXBpLmMtMjgzLVx0XHRicmVhaztcbi0tXG5pb191cmluZy9uYXBpLmMtMjg2LVx0fVxuaW9fdXJpbmcvbmFwaS5jOjI4NzpcdFdSSVRFX09OQ0UoY3R4LVx1MDAzZW5hcGlfdHJhY2tfbW9kZSwgSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19JTkFDVElWRSk7XG5pb191cmluZy9uYXBpLmMtMjg4LVx0aW9fbmFwaV9mcmVlKGN0eCk7XG4tLVxuaW9fdXJpbmcvbmFwaS5jPTMwND1pbnQgaW9fcmVnaXN0ZXJfbmFwaShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5pb191cmluZy9uYXBpLmMtMzIzLVx0c3dpdGNoIChuYXBpLm9wY29kZSkge1xuaW9fdXJpbmcvbmFwaS5jOjMyNDpcdGNhc2UgSU9fVVJJTkdfTkFQSV9SRUdJU1RFUl9PUDpcbmlvX3VyaW5nL25hcGkuYy0zMjUtXHRcdHJldHVybiBpb19uYXBpX3JlZ2lzdGVyX25hcGkoY3R4LCBcdTAwMjZuYXBpKTtcbmlvX3VyaW5nL25hcGkuYzozMjY6XHRjYXNlIElPX1VSSU5HX05BUElfU1RBVElDX0FERF9JRDpcbmlvX3VyaW5nL25hcGkuYzozMjc6XHRcdGlmIChjdXJyLm9wX3BhcmFtICE9IElPX1VSSU5HX05BUElfVFJBQ0tJTkdfU1RBVElDKVxuaW9fdXJpbmcvbmFwaS5jLTMyOC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmlvX3VyaW5nL25hcGkuYy0zMjktXHRcdHJldHVybiBfX2lvX25hcGlfYWRkX2lkKGN0eCwgbmFwaS5vcF9wYXJhbSxcbmlvX3VyaW5nL25hcGkuYzozMzA6XHRcdFx0XHRcdElPX1VSSU5HX05BUElfVFJBQ0tJTkdfU1RBVElDKTtcbmlvX3VyaW5nL25hcGkuYzozMzE6XHRjYXNlIElPX1VSSU5HX05BUElfU1RBVElDX0RFTF9JRDpcbmlvX3VyaW5nL25hcGkuYzozMzI6XHRcdGlmIChjdXJyLm9wX3BhcmFtICE9IElPX1VSSU5HX05BUElfVFJBQ0tJTkdfU1RBVElDKVxuaW9fdXJpbmcvbmFwaS5jLTMzMy1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5pb191cmluZy9uYXBpLmM9MzQ4PWludCBpb191bnJlZ2lzdGVyX25hcGkoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXG4tLVxuaW9fdXJpbmcvbmFwaS5jLTM1Ny1cbmlvX3VyaW5nL25hcGkuYzozNTg6XHRXUklURV9PTkNFKGN0eC1cdTAwM2VuYXBpX3RyYWNrX21vZGUsIElPX1VSSU5HX05BUElfVFJBQ0tJTkdfSU5BQ1RJVkUpO1xuaW9fdXJpbmcvbmFwaS5jLTM1OS1cdFdSSVRFX09OQ0UoY3R4LVx1MDAzZW5hcGlfYnVzeV9wb2xsX2R0LCAwKTtcbi0tXG5pb191cmluZy9uYXBpLmg9NDM9c3RhdGljIGlubGluZSB2b2lkIGlvX25hcGlfYWRkKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuLS1cbmlvX3VyaW5nL25hcGkuaC00Ni1cdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG5pb191cmluZy9uYXBpLmg6NDc6XHR1bnNpZ25lZCBpbnQgbW9kZSA9IElPX1VSSU5HX05BUElfVFJBQ0tJTkdfRFlOQU1JQztcbmlvX3VyaW5nL25hcGkuaC00OC1cbi0tXG5pb191cmluZy9uZXQuYz0xMzc9aW50IGlvX3NodXRkb3duKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTQyLVxuaW9fdXJpbmcvbmV0LmM6MTQzOlx0V0FSTl9PTl9PTkNFKGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKTtcbmlvX3VyaW5nL25ldC5jLTE0NC1cbi0tXG5pb191cmluZy9uZXQuYz0xNjc9c3RhdGljIHZvaWQgaW9fbmV0bXNnX3JlY3ljbGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy0xNzEtXHQvKiBjYW4mIzM5O3QgcmVjeWNsZSwgZW5zdXJlIHdlIGZyZWUgdGhlIGlvdmVjIGlmIHdlIGhhdmUgb25lICovXG5pb191cmluZy9uZXQuYzoxNzI6XHRpZiAodW5saWtlbHkoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfVU5MT0NLRUQpKSB7XG5pb191cmluZy9uZXQuYy0xNzMtXHRcdGlvX25ldG1zZ19pb3ZlY19mcmVlKGhkcik7XG4tLVxuaW9fdXJpbmcvbmV0LmM9NTI5PWludCBpb19zZW5kbXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtNTQ2LVx0ZmxhZ3MgPSBzci1cdTAwM2Vtc2dfZmxhZ3M7XG5pb191cmluZy9uZXQuYzo1NDc6XHRpZiAoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spXG5pb191cmluZy9uZXQuYy01NDgtXHRcdGZsYWdzIHw9IE1TR19ET05UV0FJVDtcbi0tXG5pb191cmluZy9uZXQuYy01NTYtXHRpZiAocmV0IFx1MDAzYyBtaW5fcmV0KSB7XG5pb191cmluZy9uZXQuYzo1NTc6XHRcdGlmIChyZXQgPT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgKGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKSlcbmlvX3VyaW5nL25ldC5jLTU1OC1cdFx0XHRyZXR1cm4gLUVBR0FJTjtcbi0tXG5pb191cmluZy9uZXQuYz02MjY9aW50IGlvX3NlbmQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy02NTMtXHRmbGFncyA9IHNyLVx1MDAzZW1zZ19mbGFncztcbmlvX3VyaW5nL25ldC5jOjY1NDpcdGlmIChpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSylcbmlvX3VyaW5nL25ldC5jLTY1NS1cdFx0ZmxhZ3MgfD0gTVNHX0RPTlRXQUlUO1xuLS1cbmlvX3VyaW5nL25ldC5jLTY3Ni1cdGlmIChyZXQgXHUwMDNjIG1pbl9yZXQpIHtcbmlvX3VyaW5nL25ldC5jOjY3NzpcdFx0aWYgKHJldCA9PSAtRUFHQUlOIFx1MDAyNlx1MDAyNiAoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spKVxuaW9fdXJpbmcvbmV0LmMtNjc4LVx0XHRcdHJldHVybiAtRUFHQUlOO1xuLS1cbmlvX3VyaW5nL25ldC5jPTg1Mz1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtOTIxLVx0XHRcdHNyLVx1MDAzZWZsYWdzIFx1MDAyNj0gfklPUklOR19SRUNWX01TSE9UX0NBUDtcbmlvX3VyaW5nL25ldC5jOjkyMjpcdFx0XHRpZiAoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTVVMVElTSE9UKVxuaW9fdXJpbmcvbmV0LmMtOTIzLVx0XHRcdFx0c2VsLVx1MDAzZXZhbCA9IElPVV9SRVFVRVVFO1xuLS1cbmlvX3VyaW5nL25ldC5jPTEwMjA9aW50IGlvX3JlY3Ztc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy0xMDI3LVx0aW50IHJldCwgbWluX3JldCA9IDA7XG5pb191cmluZy9uZXQuYzoxMDI4Olx0Ym9vbCBmb3JjZV9ub25ibG9jayA9IGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLO1xuaW9fdXJpbmcvbmV0LmMtMTAyOS1cdGJvb2wgbXNob3RfZmluaXNoZWQgPSB0cnVlO1xuLS1cbmlvX3VyaW5nL25ldC5jPTExMDc9c3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTExNy1cdCAqL1xuaW9fdXJpbmcvbmV0LmM6MTExODpcdGlmICghKGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX1VOTE9DS0VEKSBcdTAwMjZcdTAwMjZcbmlvX3VyaW5nL25ldC5jLTExMTktXHQgICAgc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpIHtcbi0tXG5pb191cmluZy9uZXQuYz0xMTc5PWludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTE4Ni1cdGludCByZXQsIG1pbl9yZXQgPSAwO1xuaW9fdXJpbmcvbmV0LmM6MTE4NzpcdGJvb2wgZm9yY2Vfbm9uYmxvY2sgPSBpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSztcbmlvX3VyaW5nL25ldC5jLTExODgtXHRib29sIG1zaG90X2ZpbmlzaGVkO1xuLS1cbmlvX3VyaW5nL25ldC5jPTE1MDA9aW50IGlvX3NlbmRtc2dfemMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy0xNTIzLVx0bXNnX2ZsYWdzID0gc3ItXHUwMDNlbXNnX2ZsYWdzO1xuaW9fdXJpbmcvbmV0LmM6MTUyNDpcdGlmIChpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSylcbmlvX3VyaW5nL25ldC5jLTE1MjUtXHRcdG1zZ19mbGFncyB8PSBNU0dfRE9OVFdBSVQ7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTU0MC1cdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIG1pbl9yZXQpKSB7XG5pb191cmluZy9uZXQuYzoxNTQxOlx0XHRpZiAocmV0ID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IChpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSykpXG5pb191cmluZy9uZXQuYy0xNTQyLVx0XHRcdHJldHVybiAtRUFHQUlOO1xuLS1cbmlvX3VyaW5nL25ldC5jLTE1NjEtXHQgKi9cbmlvX3VyaW5nL25ldC5jOjE1NjI6XHRpZiAoIShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkpIHtcbmlvX3VyaW5nL25ldC5jLTE1NjMtXHRcdGlvX25vdGlmX2ZsdXNoKHNyLVx1MDAzZW5vdGlmKTtcbi0tXG5pb191cmluZy9uZXQuYz0xNjIwPWludCBpb19hY2NlcHQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy0xNjIyLVx0c3RydWN0IGlvX2FjY2VwdCAqYWNjZXB0ID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2FjY2VwdCk7XG5pb191cmluZy9uZXQuYzoxNjIzOlx0Ym9vbCBmb3JjZV9ub25ibG9jayA9IGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLO1xuaW9fdXJpbmcvbmV0LmMtMTYyNC1cdGJvb2wgZml4ZWQgPSAhIWFjY2VwdC1cdTAwM2VmaWxlX3Nsb3Q7XG4tLVxuaW9fdXJpbmcvbmV0LmM9MTc1MT1pbnQgaW9fc29ja2V0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTc2Ny1cdFx0cmV0ID0gUFRSX0VSUihmaWxlKTtcbmlvX3VyaW5nL25ldC5jOjE3Njg6XHRcdGlmIChyZXQgPT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgKGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKSlcbmlvX3VyaW5nL25ldC5jLTE3NjktXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4tLVxuaW9fdXJpbmcvbmV0LmM9MTgwMz1pbnQgaW9fY29ubmVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTE4MDgtXHRpbnQgcmV0O1xuaW9fdXJpbmcvbmV0LmM6MTgwOTpcdGJvb2wgZm9yY2Vfbm9uYmxvY2sgPSBpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSztcbmlvX3VyaW5nL25ldC5jLTE4MTAtXG4tLVxuaW9fdXJpbmcvb3BlbmNsb3NlLmM9MTIzPWludCBpb19vcGVuYXQyKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvb3BlbmNsb3NlLmMtMTM3LVx0cmVzb2x2ZV9ub25ibG9jayA9IG9wZW4tXHUwMDNlaG93LnJlc29sdmUgXHUwMDI2IFJFU09MVkVfQ0FDSEVEO1xuaW9fdXJpbmcvb3BlbmNsb3NlLmM6MTM4Olx0aWYgKGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKSB7XG5pb191cmluZy9vcGVuY2xvc2UuYy0xMzktXHRcdFdBUk5fT05fT05DRShpb19vcGVuYXRfZm9yY2VfYXN5bmMob3BlbikpO1xuLS1cbmlvX3VyaW5nL29wZW5jbG9zZS5jLTE2Mi1cdFx0aWYgKHJldCA9PSAtRUFHQUlOIFx1MDAyNlx1MDAyNiAhcmVzb2x2ZV9ub25ibG9jayBcdTAwMjZcdTAwMjZcbmlvX3VyaW5nL29wZW5jbG9zZS5jOjE2MzpcdFx0ICAgIChpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSykpIHtcbmlvX3VyaW5nL29wZW5jbG9zZS5jLTE2NC1cdFx0XHRyZXQgPSBwdXRuYW1lX3RvX2RlbGF5ZWQoXHUwMDI2b3Blbi1cdTAwM2VmaWxlbmFtZSxcbi0tXG5pb191cmluZy9vcGVuY2xvc2UuYy0xNzEtXG5pb191cmluZy9vcGVuY2xvc2UuYzoxNzI6XHRpZiAoKGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKSBcdTAwMjZcdTAwMjYgIW5vbmJsb2NrX3NldClcbmlvX3VyaW5nL29wZW5jbG9zZS5jLTE3My1cdFx0ZmlsZS1cdTAwM2VmX2ZsYWdzIFx1MDAyNj0gfk9fTk9OQkxPQ0s7XG4tLVxuaW9fdXJpbmcvb3BlbmNsb3NlLmM9MjM2PWludCBpb19jbG9zZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL29wZW5jbG9zZS5jLTI1NS1cdC8qIGlmIHRoZSBmaWxlIGhhcyBhIGZsdXNoIG1ldGhvZCwgYmUgc2FmZSBhbmQgcHVudCB0byBhc3luYyAqL1xuaW9fdXJpbmcvb3BlbmNsb3NlLmM6MjU2Olx0aWYgKGZpbGUtXHUwMDNlZl9vcC1cdTAwM2VmbHVzaCBcdTAwMjZcdTAwMjYgKGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKSkge1xuaW9fdXJpbmcvb3BlbmNsb3NlLmMtMjU3LVx0XHRzcGluX3VubG9jayhcdTAwMjZmaWxlcy1cdTAwM2VmaWxlX2xvY2spO1xuLS1cbmlvX3VyaW5nL3BvbGwuYz01NTM9c3RhdGljIGludCBfX2lvX2FybV9wb2xsX2hhbmRsZXIoc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvcG9sbC5jLTU3Ny1cdCAqL1xuaW9fdXJpbmcvcG9sbC5jOjU3ODpcdGlwdC1cdTAwM2Vvd25pbmcgPSBpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRDtcbmlvX3VyaW5nL3BvbGwuYy01NzktXHRhdG9taWNfc2V0KFx1MDAyNnJlcS1cdTAwM2Vwb2xsX3JlZnMsIChpbnQpaXB0LVx1MDAzZW93bmluZyk7XG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4NjQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIElPX1VSSU5HIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gZXhhY3RseSB3aGVyZSBgQ09ORklHX0lPX1VSSU5HYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUgS2NvbmZpZyBzeXN0ZW0uIFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgaXQmIzM5O3MganVzdCBhIG1hdHRlciBvZiBxdWlja2x5IGdyZXBwaW5nIG9yIG5hdmlnYXRpbmcgdGhlIEtjb25maWcgZmlsZXMgZGlyZWN0bHkuIEtub3dpbmcgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSwgdGhlIGRlcGVuZGVuY3kgc3RydWN0dXJlIHRoYXQgS2NvbmZpZyBsZXZlcmFnZXMsIHRoZSBjb250ZXh0IG9mIHRoZSBzZXR0aW5nIGluIHRoZSBicm9hZGVyIGZpbGUgc3lzdGVtIG9yIG5ldHdvcmtpbmcgc3RhY2suLi4gdGhpcyBpbmZvcm1zIG15IGRlY2lzaW9uIG9uIGEgZ29vZCBzZWFyY2ggc3RyYXRlZ3kgaGVyZS4gSeKAmWxsIHN0YXJ0IGJ5IGRvaW5nIGEgYmFzaWMgc2VhcmNoIHRvIGZpbmQgdGhlIGVudHJ5IHBvaW50LCBvciBhdCBsZWFzdCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlKHMpLiBGcm9tIHRoZXJlLCBJIGNhbiBleGFtaW5lIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBoZWxwIHRleHQsIGFuZCBhbnl0aGluZyBlbHNlIHJlbGV2YW50IHRvIHRoZSBzZXR0aW5nLiBLbm93aW5nIHRoZSBwb3NzaWJsZSBoYXJkd2FyZSBvciBzb2Z0d2FyZSBjb250ZXh0cyB0aGF0IHRyaWdnZXIgdGhpcyBzZXR0aW5nIGlzIHZhbHVhYmxlIHRvIHVuZGVyc3RhbmRpbmcgaXRzIHVzYWdlLCBhbmQgcG90ZW50aWFsIGltcGFjdC4gVGhlbiwgSSBjYW4gcXVpY2tseSBjb25maXJtIGFueSByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHF1aWNrbHkgdW5kZXJzdGFuZCBpdHMgaW50ZW5kZWQgdXNlIGFuZCBhbnkgaW1wbGljYXRpb25zIGl0IGhhcy4gVGhpcyBpbmZvcm1hdGlvbiBpcyBrZXkgaWYgSSYjMzk7bSB0cnlpbmcgdG8sIGZvciBleGFtcGxlLCBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIGZlYXR1cmUsIG9yIGRlYnVnIGEgcmVsYXRlZCBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU9fVVJJTkdcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTk1Mj1jb25maWcgQUlPXG4tLVxuaW5pdC9LY29uZmlnLTE5NTktXG5pbml0L0tjb25maWc6MTk2MDpjb25maWcgSU9fVVJJTkdcbmluaXQvS2NvbmZpZy0xOTYxLVx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIyNgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IGlvX3VyaW5nIGFuZCB0aGUgU2lnbmlmaWNhbmNlIG9mIGEgU2ltcGxlIENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggZm9jdXNlcyBvbiBhIG1vZGlmaWNhdGlvbiB3aXRoaW4gYGlvX2RvX2lvcG9sbGAsIGFuZCBteSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IGhvbmVzIGluIG9uIHRoYXQgbGluZTogYHJlcS0mZ3Q7Y3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS0mZ3Q7Y3FlLnJlcywgMCksIE5VTEwpO2AKClRoZSBxdWVzdGlvbiBwb3BzIHVwIOKAkyB3aHkgdGhlIGNoYW5nZSBmcm9tIGFzc2lnbm1lbnQgKGA9YCkgdG8gYSBiaXR3aXNlIE9SIChgfD1gKT8gSXQmIzM5O3MgZWxlbWVudGFyeSwgcmVhbGx5LiBJZiBgcmVxLSZndDtjcWUuZmxhZ3NgIGFscmVhZHkgY29udGFpbnMgZXhpc3RpbmcgZmxhZ3Mg4oCTIHNheSwgYElPUklOR19DUUVfRl9NT1JFYCwgYnVmZmVyIGZsYWdzLCBvciBvdGhlciBjb21wbGV0aW9uIHF1ZXVlIGVudHJ5IChDUUUpIGZsYWdzIOKAkyBhIHNpbXBsZSBhc3NpZ25tZW50IHdvdWxkIG92ZXJ3cml0ZSB0aG9zZSB2aXRhbCBleGlzdGluZyBmbGFncy4gVXNpbmcgYSBiaXR3aXNlIE9SIGlzIGVzc2VudGlhbCBmb3IgKnByZXNlcnZpbmcqIHRob3NlIHByZS1leGlzdGluZyBmbGFncyB3aGlsZSAqYWRkaW5nKiB0aGUgbmV3IGZsYWdzIHJldHVybmVkIGZyb20gYGlvX3B1dF9rYnVmYC4gT3IsIGlmIGl0IGlzIHRoZSBjYXNlIHRoYXQgYGlvX3B1dF9rYnVmYCBpcyB0aGUgc291cmNlIG9mIHRoZSBmbGFncy4gVGhpcyBpcyBjb3JlIGBpb191cmluZ2AgbG9naWMgZm9yIGhhbmRsaW5nIGNvbXBsZXRpb25zIGR1cmluZyBwb2xsZWQgSS9PIG9wZXJhdGlvbnMgKHRoZSBgSU9SSU5HX1NFVFVQX0lPUE9MTGAgc2V0dGluZykuIFRoaXMgaXMgZGVlcCBpbnNpZGUgdGhlIGtlcm5lbCYjMzk7cyBgaW9fdXJpbmdgIHN1YnN5c3RlbSwgcmVhY2hhYmxlIHRocm91Z2ggdGhlIHVzdWFsIHN1c3BlY3RzIGxpa2UgYGlvX3VyaW5nX3NldHVwYCwgYGlvX3VyaW5nX2VudGVyYCwgYW5kIHNvIG9uLiBBbnkgY2hhbmdlIGhlcmUgZGlyZWN0bHkgYWZmZWN0cyBleGVjdXRhYmxlIGtlcm5lbCBjb2RlLCBzbyBpdCBpcyBoaWdoLXZhbHVlLgoKTm93LCBhcyBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgdGhlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs/IEdpdmVuIG15IGVzdGFibGlzaGVkIGNyaXRlcmlhLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAmIzM0O1llcyYjMzQ7LiBJdCB0aWNrcyBhbGwgdGhlIGJveGVzLiBGaXJzdCwgdGhpcyBpcyBhIG1vZGlmaWNhdGlvbiB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbSDigJMgYGlvX3VyaW5nYC4gVGhlIGxvZ2ljIGNoYW5nZSBpcyBpbiBgaW9fZG9faW9wb2xsYCwgd2hpY2ggaXMgZGlyZWN0bHkgcmVsYXRlZCB0byBJL08gcG9sbGluZyB3aXRoIGBpb191cmluZ2AgdmlhIGBJT1JJTkdfU0VUVVBfSU9QT0xMYCwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUgbW9kZXJuIGtlcm5lbC4gRnV6emluZyB3aXRoIHRvb2xzIGxpa2Ugc3l6a2FsbGVyIHdvdWxkIGFsbG93IGZvciBleHRlbnNpdmUgdGVzdGluZyBvZiBgaW9fdXJpbmdgIHVuZGVyIHZhcmlvdXMgY29uZGl0aW9ucywgaW5jbHVkaW5nIGBJT1BPTExgLCBidWZmZXIgbWFuYWdlbWVudCwgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb25zLgoKRmluYWxseSwgcmVnYXJkaW5nIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgaW52b2x2ZWQsIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBpb19kb19pb3BvbGxgIChkZWZpbmVkIHNvbWV3aGVyZSBhcm91bmQgbGluZSAxMzczIGluIGBpb191cmluZy9ydy5jYCwgSSBiZWxpZXZlIOKAkyBJJiMzOTtsbCB2ZXJpZnkgdGhhdCkgYW5kIGFueSBvdGhlciBmdW5jdGlvbnMgZGlyZWN0bHkgaW50ZXJhY3Rpbmcgd2l0aCBpdC4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGxvZ2ljIGluIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fZG9faW9wb2xsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvX3VyaW5nLmM9MTE2OD1fX2NvbGQgdm9pZCBpb19pb3BvbGxfdHJ5X3JlYXBfZXZlbnRzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTE3NS1cdFx0LyogbGV0IGl0IHNsZWVwIGFuZCByZXBlYXQgbGF0ZXIgaWYgY2FuJiMzOTt0IGNvbXBsZXRlIGEgcmVxdWVzdCAqL1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoxMTc2Olx0XHRpZiAoaW9fZG9faW9wb2xsKGN0eCwgdHJ1ZSkgPT0gMClcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTE3Ny1cdFx0XHRicmVhaztcbi0tXG5pb191cmluZy9pb191cmluZy5jPTExOTU9c3RhdGljIGludCBpb19pb3BvbGxfY2hlY2soc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHVuc2lnbmVkIGludCBtaW5fZXZlbnRzKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTI0OS1cdFx0fVxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxMjUwOlx0XHRyZXQgPSBpb19kb19pb3BvbGwoY3R4LCAhbWluX2V2ZW50cyk7XG5pb191cmluZy9pb191cmluZy5jLTEyNTEtXHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9MTI2Mz12b2lkIGlvX3JlcV90YXNrX2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTI3MC0gKiBBZGRpbmcgdGhlIGtpb2NiIHRvIHRoZSBsaXN0IEFGVEVSIHN1Ym1pc3Npb24gZW5zdXJlcyB0aGF0IHdlIGRvbiYjMzk7dFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxMjcxOiAqIGZpbmQgaXQgZnJvbSBhIGlvX2RvX2lvcG9sbCgpIHRocmVhZCBiZWZvcmUgdGhlIGlzc3VlciBpcyBkb25lXG5pb191cmluZy9pb191cmluZy5jLTEyNzItICogYWNjZXNzaW5nIHRoZSBraW9jYiBjb29raWUuXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaD0yMDI9aW50IGlvX3N1Ym1pdF9zcWVzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBpbnQgbnIpO1xuaW9fdXJpbmcvaW9fdXJpbmcuaDoyMDM6aW50IGlvX2RvX2lvcG9sbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBmb3JjZV9ub25zcGluKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjA0LV9fY29sZCB2b2lkIGlvX2lvcG9sbF90cnlfcmVhcF9ldmVudHMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpO1xuLS1cbmlvX3VyaW5nL3J3LmM9MTI5Nz1zdGF0aWMgaW50IGlvX3VyaW5nX2h5YnJpZF9wb2xsKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuLS1cbmlvX3VyaW5nL3J3LmMtMTMxOC1cbmlvX3VyaW5nL3J3LmM6MTMxOTppbnQgaW9fZG9faW9wb2xsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGZvcmNlX25vbnNwaW4pXG5pb191cmluZy9ydy5jLTEzMjAte1xuLS1cbmlvX3VyaW5nL3NxcG9sbC5jPTIwNT1zdGF0aWMgaW50IF9faW9fc3FfdGhyZWFkKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fc3FfZGF0YSAqc3FkLFxuLS1cbmlvX3VyaW5nL3NxcG9sbC5jLTIyNS1cdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmN0eC1cdTAwM2Vpb3BvbGxfbGlzdCkpXG5pb191cmluZy9zcXBvbGwuYzoyMjY6XHRcdFx0aW9fZG9faW9wb2xsKGN0eCwgdHJ1ZSk7XG5pb191cmluZy9zcXBvbGwuYy0yMjctXG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmM9MTUyPXZvaWQgX19pb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsIHMzMiByZXQsIHU2NCByZXMyLFxuLS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTE3Mi1cdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0lPUE9MTCkge1xuaW9fdXJpbmcvdXJpbmdfY21kLmM6MTczOlx0XHQvKiBvcmRlciB3aXRoIGlvX2RvX2lvcG9sbCgpIGNoZWNraW5nIC1cdTAwM2Vpb3BvbGxfY29tcGxldGVkICovXG5pb191cmluZy91cmluZ19jbWQuYy0xNzQtXHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnJlcS1cdTAwM2Vpb3BvbGxfY29tcGxldGVkLCAxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMjQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJuYWwgd29ya2luZ3Mgb2YgdGhpcyBhc3luY2hyb25vdXMgSS9PIGltcGxlbWVudGF0aW9uLiBGaXJzdCwgSSB3YW50IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdywgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvcmUgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoZSBJL08gcG9sbGluZyBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBgaW9faW9wb2xsX2NoZWNrYCwgYW5kIGBpb19kb19pb3BvbGxgIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gbW9uaXRvcnMgZm9yIGNvbXBsZXRlZCBJL08gb3BlcmF0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBJL08gbWVjaGFuaXNtIGlzIGFjdHVhbGx5IHRyaWdnZXJlZC4KCkFmdGVyIHVuZGVyc3RhbmRpbmcgdGhlIHBvbGxpbmcgbWVjaGFuaXNtLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgZ2V0cyBwdXQgaW50byB0aGUgaW9fdXJpbmcgc3lzdGVtLiBTbyBuZXh0LCBsZXQmIzM5O3Mgc2VlIGhvdyBgaW9fcHV0X2tidWZgIGludGVncmF0ZXMgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZSB0byBnZXQgdGhlIGRhdGEgd2hlcmUgaXQgbmVlZHMgdG8gZ28gd2l0aGluIHRoZSBpb191cmluZyByaW5nIGJ1ZmZlci4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgZGF0YSBmbG93cyB0aHJvdWdoIHRoZSBJL08gc3lzdGVtIGZyb20gdGhlIGFwcGxpY2F0aW9uLCB0aHJvdWdoIGtlcm5lbCBzdHJ1Y3R1cmVzLCBhbmQgYmFjayB0byB0aGUgYXBwbGljYXRpb24uIEkgYWxzbyBuZWVkIHRvIGNoZWNrIHRoaXMgZnVuY3Rpb24gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaXNzdWVzIHdoaWNoIGNvdWxkIGFmZmVjdCBwZXJmb3JtYW5jZSBvciBzZWN1cml0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fcHV0X2tidWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW9fdXJpbmcuYz05NDg9dm9pZCBpb19yZXFfZGVmZXJfZmFpbGVkKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzMzIgcmVzKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTU1LVx0cmVxX3NldF9mYWlsKHJlcSk7XG5pb191cmluZy9pb191cmluZy5jOjk1NjpcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmVzLCBpb19wdXRfa2J1ZihyZXEsIHJlcywgTlVMTCkpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy05NTctXHRpZiAoZGVmLVx1MDAzZWZhaWwpXG4tLVxuaW9fdXJpbmcva2J1Zi5jPTM4MT1pbnQgaW9fYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbi0tXG5pb191cmluZy9rYnVmLmMtNDA2LVxuaW9fdXJpbmcva2J1Zi5jOjQwNzpzdGF0aWMgaW5saW5lIGJvb2wgX19pb19wdXRfa2J1Zl9yaW5nKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcva2J1Zi5jLTQwOC1cdFx0XHRcdCAgICAgIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsIGludCBsZW4sIGludCBucilcbi0tXG5pb191cmluZy9rYnVmLmMtNDIwLVxuaW9fdXJpbmcva2J1Zi5jOjQyMTp1bnNpZ25lZCBpbnQgX19pb19wdXRfa2J1ZnMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXG5pb191cmluZy9rYnVmLmMtNDIyLVx0XHRcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTQzMi1cbmlvX3VyaW5nL2tidWYuYzo0MzM6XHRpZiAoIV9faW9fcHV0X2tidWZfcmluZyhyZXEsIGJsLCBsZW4sIG5idWZzKSlcbmlvX3VyaW5nL2tidWYuYy00MzQtXHRcdHJldCB8PSBJT1JJTkdfQ1FFX0ZfQlVGX01PUkU7XG4tLVxuaW9fdXJpbmcva2J1Zi5oPTg3PXZvaWQgaW9fa2J1Zl9kcm9wX2xlZ2FjeShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSk7XG5pb191cmluZy9rYnVmLmgtODgtXG5pb191cmluZy9rYnVmLmg6ODk6dW5zaWduZWQgaW50IF9faW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxuaW9fdXJpbmcva2J1Zi5oLTkwLVx0XHRcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpO1xuLS1cbmlvX3VyaW5nL2tidWYuaD0xMTQ9c3RhdGljIGlubGluZSBib29sIGlvX2tidWZfcmVjeWNsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbi0tXG5pb191cmluZy9rYnVmLmgtMTI1LVxuaW9fdXJpbmcva2J1Zi5oOjEyNjpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb19wdXRfa2J1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IGxlbixcbmlvX3VyaW5nL2tidWYuaC0xMjctXHRcdFx0XHQgICAgICAgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibClcbi0tXG5pb191cmluZy9rYnVmLmgtMTMwLVx0XHRyZXR1cm4gMDtcbmlvX3VyaW5nL2tidWYuaDoxMzE6XHRyZXR1cm4gX19pb19wdXRfa2J1ZnMocmVxLCBibCwgbGVuLCAxKTtcbmlvX3VyaW5nL2tidWYuaC0xMzItfVxuaW9fdXJpbmcva2J1Zi5oLTEzMy1cbmlvX3VyaW5nL2tidWYuaDoxMzQ6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgbGVuLFxuaW9fdXJpbmcva2J1Zi5oLTEzNS1cdFx0XHRcdFx0c3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCwgaW50IG5idWZzKVxuLS1cbmlvX3VyaW5nL2tidWYuaC0xMzgtXHRcdHJldHVybiAwO1xuaW9fdXJpbmcva2J1Zi5oOjEzOTpcdHJldHVybiBfX2lvX3B1dF9rYnVmcyhyZXEsIGJsLCBsZW4sIG5idWZzKTtcbmlvX3VyaW5nL2tidWYuaC0xNDAtfVxuLS1cbmlvX3VyaW5nL25ldC5jPTQ5MT1zdGF0aWMgaW5saW5lIGJvb2wgaW9fc2VuZF9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtNDk5LVx0aWYgKCEoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpKSB7XG5pb191cmluZy9uZXQuYzo1MDA6XHRcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgc2VsLVx1MDAzZXZhbCwgc2VsLVx1MDAzZWJ1Zl9saXN0KTtcbmlvX3VyaW5nL25ldC5jLTUwMS1cdFx0Z290byBmaW5pc2g7XG4tLVxuaW9fdXJpbmcvbmV0LmMtNTAzLVxuaW9fdXJpbmcvbmV0LmM6NTA0Olx0Y2ZsYWdzID0gaW9fcHV0X2tidWZzKHJlcSwgc2VsLVx1MDAzZXZhbCwgc2VsLVx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLVx1MDAzZXZhbCkpO1xuaW9fdXJpbmcvbmV0LmMtNTA1LVxuLS1cbmlvX3VyaW5nL25ldC5jPTg1Mz1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtODc5LVxuaW9fdXJpbmcvbmV0LmM6ODgwOlx0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHRoaXNfcmV0KSk7XG5pb191cmluZy9uZXQuYy04ODEtXHRcdGlmIChzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfUkVUUlkpXG4tLVxuaW9fdXJpbmcvbmV0LmMtOTAxLVx0fSBlbHNlIHtcbmlvX3VyaW5nL25ldC5jOjkwMjpcdFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgc2VsLVx1MDAzZXZhbCwgc2VsLVx1MDAzZWJ1Zl9saXN0KTtcbmlvX3VyaW5nL25ldC5jLTkwMy1cdH1cbi0tXG5pb191cmluZy9ydy5jPTU2Mj12b2lkIGlvX3JlcV9yd19jb21wbGV0ZShzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbi0tXG5pb191cmluZy9ydy5jLTU2OC1cdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IChSRVFfRl9CVUZGRVJfU0VMRUNURUR8UkVRX0ZfQlVGRkVSX1JJTkcpKVxuaW9fdXJpbmcvcncuYzo1Njk6XHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLVx1MDAzZWNxZS5yZXMsIDApLCBOVUxMKTtcbmlvX3VyaW5nL3J3LmMtNTcwLVxuLS1cbmlvX3VyaW5nL3J3LmM9NjQwPXN0YXRpYyBpbnQga2lvY2JfZG9uZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3NpemVfdCByZXQsXG4tLVxuaW9fdXJpbmcvcncuYy02NTctXHRcdGlmIChzZWwpXG5pb191cmluZy9ydy5jOjY1ODpcdFx0XHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHJldCwgc2VsLVx1MDAzZWJ1Zl9saXN0KTtcbmlvX3VyaW5nL3J3LmMtNjU5LVx0XHRpb19yZXFfc2V0X3JlcyhyZXEsIGZpbmFsX3JldCwgY2ZsYWdzKTtcbi0tXG5pb191cmluZy9ydy5jPTEwMzI9aW50IGlvX3JlYWRfbXNob3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9ydy5jLTEwNjctXHR9IGVsc2UgaWYgKCEocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9BUE9MTF9NVUxUSVNIT1QpKSB7XG5pb191cmluZy9ydy5jOjEwNjg6XHRcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgcmV0LCBzZWwuYnVmX2xpc3QpO1xuaW9fdXJpbmcvcncuYy0xMDY5LVx0fSBlbHNlIHtcbi0tXG5pb191cmluZy9ydy5jLTEwNzUtXHRcdCAqL1xuaW9fdXJpbmcvcncuYzoxMDc2Olx0XHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHJldCwgc2VsLmJ1Zl9saXN0KTtcbmlvX3VyaW5nL3J3LmMtMTA3Ny1cdFx0cnctXHUwMDNlbGVuID0gMDsgLyogc2ltaWxhcmx5IHRvIGFib3ZlLCByZXNldCBsZW4gdG8gMCAqL1xuLS1cbmlvX3VyaW5nL3J3LmM9MTMxOT1pbnQgaW9fZG9faW9wb2xsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGZvcmNlX25vbnNwaW4pXG4tLVxuaW9fdXJpbmcvcncuYy0xMzc1LVx0XHRucl9ldmVudHMmIzQzOyYjNDM7O1xuaW9fdXJpbmcvcncuYzoxMzc2Olx0XHRyZXEtXHUwMDNlY3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS1cdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XG5pb191cmluZy9ydy5jLTEzNzctXHRcdGlmICghaW9faXNfdXJpbmdfY21kKHJlcSkpXG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmM9Mzg3PWJvb2wgaW9fdXJpbmdfbXNob3RfY21kX3Bvc3RfY3FlKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbi0tXG5pb191cmluZy91cmluZ19jbWQuYy0zOTYtXHRpZiAoc2VsLVx1MDAzZXZhbCBcdTAwM2UgMCkge1xuaW9fdXJpbmcvdXJpbmdfY21kLmM6Mzk3Olx0XHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHNlbC1cdTAwM2V2YWwsIHNlbC1cdTAwM2VidWZfbGlzdCk7XG5pb191cmluZy91cmluZ19jbWQuYy0zOTgtXHRcdGlmIChpb19yZXFfcG9zdF9jcWUocmVxLCBzZWwtXHUwMDNldmFsLCBjZmxhZ3MgfCBJT1JJTkdfQ1FFX0ZfTU9SRSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTUxCgkJCQkJCQlvdXRwdXQ6IDEyMgoJCQkJCQkJdGhvdWdodHM6IDMxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBgaW9fcmVxX3J3X2NvbXBsZXRlYCBhbmQgYGlvX2RvX2lvcG9sbGAgRmxhZyBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIGhvdyB0aGUgYHJlcS0mZ3Q7Y3FlLmZsYWdzYCBmaWVsZCBpcyBiZWluZyBtYW5hZ2VkLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGNvbXBsZXRpb24gaGFuZGxpbmcuIEluIGBpb19yZXFfcndfY29tcGxldGVgLCB3ZSBoYXZlOgoKYHJlcS0mZ3Q7Y3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS0mZ3Q7Y3FlLnJlcywgMCksIE5VTEwpO2AKCndoaWNoIGlzIHVzaW5nIGEgYml0d2lzZSBPUiB0byBzZXQgdGhlIGZsYWdzIGFmdGVyIGEgcmVhZC93cml0ZSBvcGVyYXRpb24uIEJ1dCBJJiMzOTt2ZSBnb3QgYSBmbGFnLXNldHRpbmcgc2l0dWF0aW9uIGdvaW5nIG9uIGluIGBpb19kb19pb3BvbGxgLCBhbmQgdGhlcmU6CgpgcmVxLSZndDtjcWUuZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtJmd0O2NxZS5yZXMsIDApLCBOVUxMKTtgCgpUaGF0JiMzOTtzIGFuIGFzc2lnbm1lbnQsIG1lYW5pbmcgYGlvX2RvX2lvcG9sbGAgaXMgY2xvYmJlcmluZyB3aGF0ZXZlciB3YXMgcHJldmlvdXNseSBpbiBgcmVxLSZndDtjcWUuZmxhZ3NgLiBUaGF0JiMzOTtzIGJhZC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gYW5kIGl0IGNhbiBjYXVzZSBzb21lIHByZXR0eSBuYXN0eSBidWdzIGlmIHRoZSB2YWx1ZXMgYXJlIG5vdCBzZXQgY29ycmVjdGx5LiBUaGUgYml0d2lzZSBvciBpbiBgaW9fcmVxX3J3X2NvbXBsZXRlYCBtYWtlcyBzZW5zZTsgdXNpbmcgYW4gYXNzaWdubWVudCBpbiBgaW9fZG9faW9wb2xsYCBkb2VzbiYjMzk7dC4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHJlbGV2YW50IGJpdHMgb2YgdGhpcyBpbnZlc3RpZ2F0aW9uLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgZm9jdXMgc3ltYm9scy4gYGlvX2RvX2lvcG9sbGAgaXMgZGVmaW5pdGVseSB0aGUgbW9kaWZpZWQgZnVuY3Rpb24sIGFuZCBpdCBsb29rcyBsaWtlIGBpb19pb3BvbGxfY2hlY2tgIGNhbGxzIGl0IGFuZCB0aGVuIGBfX2lvX3B1dF9rYnVmc2AgaXMgY2FsbGVkIGJ5IGBpb19wdXRfa2J1ZmAuCgpPa2F5LCBuZXh0IEkmIzM5O2xsIGNoZWNrIHRoZSBFbmFibGVDb25maWdzLiBUaGUgcmVsZXZhbnQgY29uZmlnIGZsYWcgaXMgYElPX1VSSU5HYCwgc28gd2UgYXJlIGRlYWxpbmcgd2l0aCBhIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBpb191cmluZy4KCk5vdywgbGV0IG1lIHJldmlldyBldmVyeXRoaW5nLiBBY2NvcmRpbmcgdG8gdGhlIGNoZWNrbGlzdCBwcm92aWRlZCwgdGhlIHZlcmRpY3Qgc2hvdWxkIGJlIGBXb3J0aEZ1enppbmc6IHRydWVgLCB0aGUgcmVhc29uaW5nIG5lZWRzIHRvIGJlIGNvbmNpc2UgKHBvdGVudGlhbCBmbGFnIGNsb2JiZXJpbmcpLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBgWyYjMzQ7SU9fVVJJTkcmIzM0O11gLCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBgWyYjMzQ7aW9fZG9faW9wb2xsJiMzNDssICYjMzQ7aW9faW9wb2xsX2NoZWNrJiMzNDtdYCBvciBwb3RlbnRpYWxseSBqdXN0IGBbJiMzNDtpb19kb19pb3BvbGwmIzM0O11gLgoKQWxyaWdodCwgSSYjMzk7bSBjb21mb3J0YWJsZSB3aXRoIGFsbCBvZiB0aGF0LiBUaGUgYXJndW1lbnRzIGZvciBgc2V0LXJlc3VsdHNgIGFyZSBhbHNvIGNvcnJlY3Q6IGEgYm9vbGVhbiBmb3IgZnV6emluZywgYSBzdHJpbmcgZm9yIHRoZSByZWFzb25pbmcsIGFuIGFycmF5IG9mIHN0cmluZ3MgZm9yIHRoZSBjb25maWcsIGFuZCBhbiBhcnJheSBvZiBzdHJpbmdzIGZvciB0aGUgc3ltYm9scy4KCkFsbCBzZXQsIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX2RvX2lvcG9sbCYjMzQ7LAogICAgJiMzNDtpb19pb3BvbGxfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW9fZG9faW9wb2xsKCkgdG8gYml0d2lzZS1PUiB0aGUgZmxhZ3MgcmV0dXJuZWQgYnkgaW9fcHV0X2tidWYoKSBpbnRvIHJlcS1cdTAwM2VjcWUuZmxhZ3MgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyB0aGVtLCBwcmV2ZW50aW5nIHRoZSBsb3NzIG9mIGV4aXN0aW5nIENRRSBmbGFncyBkdXJpbmcgcG9sbGVkIEkvTyBjb21wbGV0aW9uLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgaW9fdXJpbmcgY29tcGxldGlvbiBsb2dpYywgd2FycmFudGluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX2RvX2lvcG9sbCYjMzQ7LAogICAgJiMzNDtpb19pb3BvbGxfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW9fZG9faW9wb2xsKCkgdG8gYml0d2lzZS1PUiB0aGUgZmxhZ3MgcmV0dXJuZWQgYnkgaW9fcHV0X2tidWYoKSBpbnRvIHJlcS1cdTAwM2VjcWUuZmxhZ3MgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyB0aGVtLCBwcmV2ZW50aW5nIHRoZSBsb3NzIG9mIGV4aXN0aW5nIENRRSBmbGFncyBkdXJpbmcgcG9sbGVkIEkvTyBjb21wbGV0aW9uLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgaW9fdXJpbmcgY29tcGxldGlvbiBsb2dpYywgd2FycmFudGluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGlvX2RvX2lvcG9sbCgpYCBpbiBgaW9fdXJpbmcvcncuY2AgYnkgY2hhbmdpbmcgYHJlcS1cdTAwM2VjcWUuZmxhZ3MgPSBpb19wdXRfa2J1ZiguLi4pYCB0byBgcmVxLVx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZiguLi4pYC4gVGhpcyBpcyBhIG9uZS1saW5lIGxvZ2ljYWwgZml4IGVuc3VyaW5nIHRoYXQgZmxhZ3MgYWxyZWFkeSBzZXQgb24gYHJlcS1cdTAwM2VjcWUuZmxhZ3NgIChzdWNoIGFzIGBJT1JJTkdfQ1FFX0ZfMzJgKSBhcmUgcHJlc2VydmVkIHdoZW4gYXBwZW5kaW5nIGNvbXBsZXRpb24gZmxhZ3MgZm9yIHByb3ZpZGVkIGJ1ZmZlciByZWxlYXNlIGR1cmluZyBJTyBwb2xsaW5nLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kYXJ5IGNhbGN1bGF0aW9ucyBpbiB3YXlzIHRoYXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIGRvZXMgbm90IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIGdlbmVyYWwgdGVzdGluZyBzdWZmaWNlIGZvciB2ZXJpZnlpbmcgaW9fdXJpbmcgcmVxdWVzdCBsaWZlY3ljbGUgY29ycmVjdG5lc3MsIGFuZCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZGMxZmJjOTExNDUxZjJlOTdmN2IwNDdhNWM3ZTkxOTJiMGU5NWEzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAyMDoyNTo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3J3LmMgYi9pb191cmluZy9ydy5jCmluZGV4IDk1MTA2ZGQxZDdlYjkuLmYyYmJiMGIxYzMwYTEgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3J3LmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvcncuYwpAQCAtMTM3Myw3ICYjNDM7MTM3Myw3IEBAIGludCBpb19kb19pb3BvbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgZm9yY2Vfbm9uc3BpbikKIAkJbGlzdF9kZWwoJmFtcDtyZXEtJmd0O2lvcG9sbF9ub2RlKTsKIAkJd3FfbGlzdF9hZGRfdGFpbCgmYW1wO3JlcS0mZ3Q7Y29tcF9saXN0LCAmYW1wO2N0eC0mZ3Q7c3VibWl0X3N0YXRlLmNvbXBsX3JlcXMpOwogCQlucl9ldmVudHMmIzQzOyYjNDM7OwotCQlyZXEtJmd0O2NxZS5mbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS0mZ3Q7Y3FlLnJlcywgMCksIE5VTEwpOwomIzQzOwkJcmVxLSZndDtjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLSZndDtjcWUucmVzLCAwKSwgTlVMTCk7CiAJCWlmICghaW9faXNfdXJpbmdfY21kKHJlcSkpCiAJCQlpb19yZXFfcndfY2xlYW51cChyZXEsIDApOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBicmVhayBkb3duIHRoZSBjaGFuZ2VzIGxpbmUgYnkgbGluZSwgZm9jdXNpbmcgb24gdGhlaXIgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBjb250ZXh0LiBMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBzZWVtcyB0aGUgY29yZSBjaGFuZ2UgaXMgd2l0aGluIGBpb19kb19pb3BvbGxgIGFuZCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBgcmVxLSZndDtjcWUuZmxhZ3NgIGlzIGhhbmRsZWQgaW4gcmVsYXRpb24gdG8gYGlvX3B1dF9rYnVmYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVyYWN0LgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGF0JiMzOTtzIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhlIGB8PWAgb3BlcmF0b3IgaGVyZSwgYW5kIHdoeSB3YXMgaXQgY2hhbmdlZCBmcm9tIGEgc2ltcGxlIGFzc2lnbm1lbnQgYD1gPyBDbGVhcmx5LCB0aGUgb3JpZ2luYWwgY29kZSBhc3N1bWVkIGV4Y2x1c2l2ZSBjb250cm9sIG92ZXIgdGhvc2UgZmxhZ3MuIFRoZSBjaGFuZ2UgdG8gYHw9YCBpbXBsaWVzIHRoYXQgdGhlcmUgbWF5IGhhdmUgYmVlbiBvdGhlciBmbGFncyBhbHJlYWR5IHNldCB0aGF0IHdlIG5vdyBpbnRlbmQgdG8gKnByZXNlcnZlKi4gQnV0IHdoYXQgYXJlIHRoZXNlIG90aGVyIGZsYWdzPyBXaGF0IGRvZXMgYGlvX3B1dF9rYnVmYCBjb250cmlidXRlLCBhbmQgaXMgdGhpcyBjaGFuZ2UgcmVsYXRlZCB0byBidWZmZXIgbWFuYWdlbWVudCBvciBjb21wbGV0aW9uIHNpZ25hbGluZz8KCkkmIzM5O2xsIG5lZWQgdG8gZ28gZGVlcGVyLiBUaW1lIHRvIHB1bGwgdXAgYGlvX2RvX2lvcG9sbGAgYW5kIGBpb19wdXRfa2J1ZmAgdXNpbmcgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCBzZWUgd2hhdCB0aGUgZmxhZyBmaWVsZCBpcyB1c2VkIGZvciBhbmQgaWYgdGhlIGNoYW5nZSBoYXMgaW1wbGljYXRpb25zIGZvciBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIGhhdmUgdG8gbG9vayBpbnRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdyB0aGF0IGJvdGggb2YgdGhvc2UgZnVuY3Rpb25zIHVzZSB0byBzZWUgd2hhdCB0aGUgc3RhdGUgb2YgZmxhZ3MgbWlnaHQgYmUgcHJpb3IgdG8gdGhpcyBvcGVyYXRpb24uIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IGNvbXBsZXRpb24gcXVldWVzIGFyZSB1cGRhdGVkIGFuZCBob3cgdGhlIHN5c3RlbSBzaWduYWxzIGV2ZW50cyB0byB1c2VyIHNwYWNlLiBVbmRlcnN0YW5kaW5nIHRoZSBwb3NzaWJsZSBmbGFnIGNvbWJpbmF0aW9ucyBoZXJlIGlzIHRoZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvcncuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM1MDpcdFx0XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfSFlCUklEX0lPUE9MTClcbjEzNTE6XHRcdFx0XHRyZXQgPSBpb191cmluZ19oeWJyaWRfcG9sbChyZXEsIFx1MDAyNmlvYiwgcG9sbF9mbGFncyk7XG4xMzUyOlx0XHRcdGVsc2VcbjEzNTM6XHRcdFx0XHRyZXQgPSBpb191cmluZ19jbGFzc2ljX3BvbGwocmVxLCBcdTAwMjZpb2IsIHBvbGxfZmxhZ3MpO1xuMTM1NDpcdFxuMTM1NTpcdFx0XHRpZiAodW5saWtlbHkocmV0IFx1MDAzYyAwKSlcbjEzNTY6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTM1NzpcdFx0XHRlbHNlIGlmIChyZXQpXG4xMzU4Olx0XHRcdFx0cG9sbF9mbGFncyB8PSBCTEtfUE9MTF9PTkVTSE9UO1xuMTM1OTpcdFxuMTM2MDpcdFx0XHQvKiBpb3BvbGwgbWF5IGhhdmUgY29tcGxldGVkIGN1cnJlbnQgcmVxICovXG4xMzYxOlx0XHRcdGlmICghcnFfbGlzdF9lbXB0eShcdTAwMjZpb2IucmVxX2xpc3QpIHx8XG4xMzYyOlx0XHRcdCAgICBSRUFEX09OQ0UocmVxLVx1MDAzZWlvcG9sbF9jb21wbGV0ZWQpKVxuMTM2MzpcdFx0XHRcdGJyZWFrO1xuMTM2NDpcdFx0fVxuMTM2NTpcdFxuMTM2NjpcdFx0aWYgKCFycV9saXN0X2VtcHR5KFx1MDAyNmlvYi5yZXFfbGlzdCkpXG4xMzY3Olx0XHRcdGlvYi5jb21wbGV0ZShcdTAwMjZpb2IpO1xuMTM2ODpcdFxuMTM2OTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgdG1wLCBcdTAwMjZjdHgtXHUwMDNlaW9wb2xsX2xpc3QsIGlvcG9sbF9ub2RlKSB7XG4xMzcwOlx0XHRcdC8qIG9yZGVyIHdpdGggaW9fY29tcGxldGVfcndfaW9wb2xsKCksIGUuZy4gLVx1MDAzZXJlc3VsdCB1cGRhdGVzICovXG4xMzcxOlx0XHRcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZyZXEtXHUwMDNlaW9wb2xsX2NvbXBsZXRlZCkpXG4xMzcyOlx0XHRcdFx0Y29udGludWU7XG4xMzczOlx0XHRcdGxpc3RfZGVsKFx1MDAyNnJlcS1cdTAwM2Vpb3BvbGxfbm9kZSk7XG4xMzc0Olx0XHRcdHdxX2xpc3RfYWRkX3RhaWwoXHUwMDI2cmVxLVx1MDAzZWNvbXBfbGlzdCwgXHUwMDI2Y3R4LVx1MDAzZXN1Ym1pdF9zdGF0ZS5jb21wbF9yZXFzKTtcbjEzNzU6XHRcdFx0bnJfZXZlbnRzJiM0MzsmIzQzOztcbjEzNzY6XHRcdFx0cmVxLVx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO1xuMTM3NzpcdFx0XHRpZiAoIWlvX2lzX3VyaW5nX2NtZChyZXEpKVxuMTM3ODpcdFx0XHRcdGlvX3JlcV9yd19jbGVhbnVwKHJlcSwgMCk7XG4xMzc5Olx0XHR9XG4xMzgwOlx0XHRpZiAobnJfZXZlbnRzKVxuMTM4MTpcdFx0XHRfX2lvX3N1Ym1pdF9mbHVzaF9jb21wbGV0aW9ucyhjdHgpO1xuMTM4MjpcdFx0cmV0dXJuIG5yX2V2ZW50cztcbjEzODM6XHR9XG4xMzg0Olx0XG4xMzg1Olx0dm9pZCBpb19yd19jYWNoZV9mcmVlKGNvbnN0IHZvaWQgKmVudHJ5KVxuMTM4NjpcdHtcbjEzODc6XHRcdHN0cnVjdCBpb19hc3luY19ydyAqcncgPSAoc3RydWN0IGlvX2FzeW5jX3J3ICopIGVudHJ5O1xuMTM4ODpcdFxuMTM4OTpcdFx0aW9fdmVjX2ZyZWUoXHUwMDI2cnctXHUwMDNldmVjKTtcbjEzOTA6XHRcdGtmcmVlKHJ3KTtcbjEzOTE6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MzEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipEaXZpbmcgRGVlcCBpbnRvIENvbXBsZXRpb24gUXVldWUgRW50cmllcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2UgdGhlIGxpZmVjeWNsZSBvZiBgcmVxLSZndDtjcWVgLiBJdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBJL08gb3BlcmF0aW9ucyBhcmUgY29tcGxldGVkIGFuZCBoYW5kbGVkLCBlc3BlY2lhbGx5IGluIGFzeW5jaHJvbm91cyBzY2VuYXJpb3MuIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIHRoZSBgcndgIGNvbW1hbmQsIGJ1dCBJIHNob3VsZCBhbHNvIGtlZXAgYW4gZXllIG91dCBmb3Igb3RoZXIgaW9wb2xsLWJhc2VkIGNvbW1hbmRzLCBqdXN0IGluIGNhc2UuIFRoZXkgbWlnaHQgc2hhcmUgc29tZSBvZiB0aGUgc2FtZSBtZWNoYW5pc21zLgoKTXkgaW5pdGlhbCBhcHByb2FjaCB3aWxsIGJlIHRvIHBpbnBvaW50IHdoZXJlIGByZXEtJmd0O2NxZWAgaXMgKmZpcnN0KiBpbml0aWFsaXplZC4gVGhpcyB3aWxsIGxpa2VseSBzaGVkIGxpZ2h0IG9uIHRoZSBpbml0aWFsIGNvbnRleHQgYW5kIGV4cGVjdGVkIHVzZS4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgdHJhY2sgaXRzIGpvdXJuZXkgdGhyb3VnaCB0aGUgc3lzdGVtLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcGF0aCB0aGUgY29udHJvbCBmbG93IHRha2VzIHRocm91Z2ggdGhlIHByb2dyYW0uCgpJJiMzOTtsbCBzdGFydCBieSBzZWFyY2hpbmcgZm9yIGtleSBmdW5jdGlvbiBuYW1lczogYGlvcG9sbGAsIGBpb19jb21wbGV0ZV9yd19pb3BvbGxgLCBhbmQgYGlvX3B1dF9rYnVmYC4gVGhlc2UgZnVuY3Rpb25zIHNvdW5kIGxpa2UgbGlrZWx5IGNhbmRpZGF0ZXMgaW52b2x2ZWQgaW4gbWFuYWdpbmcgdGhlIGNvbXBsZXRpb24gcXVldWUgZW50cmllcyBhbmQgaGFuZGxpbmcgdGhlaXIgZGF0YS4gVGhlIHJlc3VsdHMgc2hvdWxkIHByb3ZpZGUgbWUgd2l0aCBhbiBpbml0aWFsIG1hcCBvZiByZWxhdGVkIGZ1bmN0aW9ucy4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgbGVhZCBtZSB0byB0aGUgcmlnaHQgcGxhY2UgYW5kIGFsbG93IG1lIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVudHJpZXMgYXJlIG1hbmlwdWxhdGVkIGFuZCBldmVudHVhbGx5IHJlbGVhc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19jb21wbGV0ZV9yd19pb3BvbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9ydy5jPTI2PXN0YXRpYyB2b2lkIGlvX2NvbXBsZXRlX3J3KHN0cnVjdCBraW9jYiAqa2lvY2IsIGxvbmcgcmVzKTtcbmlvX3VyaW5nL3J3LmM6Mjc6c3RhdGljIHZvaWQgaW9fY29tcGxldGVfcndfaW9wb2xsKHN0cnVjdCBraW9jYiAqa2lvY2IsIGxvbmcgcmVzKTtcbmlvX3VyaW5nL3J3LmMtMjgtXG4tLVxuaW9fdXJpbmcvcncuYz0yNDU9c3RhdGljIGludCBfX2lvX3ByZXBfcncoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSxcbi0tXG5pb191cmluZy9ydy5jLTI3Ni1cdGlmIChyZXEtXHUwMDNlY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfSU9QT0xMKVxuaW9fdXJpbmcvcncuYzoyNzc6XHRcdHJ3LVx1MDAzZWtpb2NiLmtpX2NvbXBsZXRlID0gaW9fY29tcGxldGVfcndfaW9wb2xsO1xuaW9fdXJpbmcvcncuYy0yNzgtXHRlbHNlXG4tLVxuaW9fdXJpbmcvcncuYz01NzU9c3RhdGljIHZvaWQgaW9fY29tcGxldGVfcncoc3RydWN0IGtpb2NiICpraW9jYiwgbG9uZyByZXMpXG4tLVxuaW9fdXJpbmcvcncuYy01ODUtXG5pb191cmluZy9ydy5jOjU4NjpzdGF0aWMgdm9pZCBpb19jb21wbGV0ZV9yd19pb3BvbGwoc3RydWN0IGtpb2NiICpraW9jYiwgbG9uZyByZXMpXG5pb191cmluZy9ydy5jLTU4Ny17XG4tLVxuaW9fdXJpbmcvcncuYz02MjI9c3RhdGljIGlubGluZSB2b2lkIGlvX3J3X2RvbmUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHNzaXplX3QgcmV0KVxuLS1cbmlvX3VyaW5nL3J3LmMtNjM0LVx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfSU9QT0xMKVxuaW9fdXJpbmcvcncuYzo2MzU6XHRcdGlvX2NvbXBsZXRlX3J3X2lvcG9sbChcdTAwMjZydy1cdTAwM2VraW9jYiwgcmV0KTtcbmlvX3VyaW5nL3J3LmMtNjM2LVx0ZWxzZVxuLS1cbmlvX3VyaW5nL3J3LmM9MTMxOT1pbnQgaW9fZG9faW9wb2xsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGZvcmNlX25vbnNwaW4pXG4tLVxuaW9fdXJpbmcvcncuYy0xMzY5LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgdG1wLCBcdTAwMjZjdHgtXHUwMDNlaW9wb2xsX2xpc3QsIGlvcG9sbF9ub2RlKSB7XG5pb191cmluZy9ydy5jOjEzNzA6XHRcdC8qIG9yZGVyIHdpdGggaW9fY29tcGxldGVfcndfaW9wb2xsKCksIGUuZy4gLVx1MDAzZXJlc3VsdCB1cGRhdGVzICovXG5pb191cmluZy9ydy5jLTEzNzEtXHRcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZyZXEtXHUwMDNlaW9wb2xsX2NvbXBsZXRlZCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NjIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBgaW9fY29tcGxldGVfcndfaW9wb2xsYCBmdW5jdGlvbiBpbiBgaW9fdXJpbmcvcncuY2AsIGFzIGlmIEkmIzM5O20gd2Fsa2luZyB0aHJvdWdoIGl0IG15c2VsZjoKCioqRGl2aW5nIGludG8gYGlvX2NvbXBsZXRlX3J3X2lvcG9sbGAqKgoKT2theSwgdGltZSB0byBkaWcgaW50byBgaW9fY29tcGxldGVfcndfaW9wb2xsYC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGNvbXBsZXRpbmcgcmVhZC93cml0ZSBvcGVyYXRpb25zIHdoZW4gdGhlIGBJT1BPTGAgZmxhZyBpcyBpbnZvbHZlZCBpbiBgaW9fdXJpbmdgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIHRoZSBhc3luY2hyb25vdXMgY29tcGxldGlvbiBpbiBhIHBvbGxlZCBjb250ZXh0LiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBuZWVkIHRvIGNoZWNrIGZvciBwZW5kaW5nIGV2ZW50cyBhbmQgaGFuZGxlIHZhcmlvdXMgZWRnZSBjYXNlcyDigJMgdGhpcyBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBhbmQgY29ycmVjdG5lc3MgaW4gdGhlIGFzeW5jaHJvbm91cyBJL08gd29ybGQuCgpGaXJzdCwgSSBleHBlY3QgdG8gc2VlIGFuIGV4YW1pbmF0aW9uIG9mIHRoZSBgaW9fdXJpbmdfc3FlYCBzdHJ1Y3R1cmUgKFNRRSkgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb21wbGV0ZWQgcmVxdWVzdC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGxvb2sgZm9yIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdHVzIG9mIHRoZSBvcGVyYXRpb24g4oCTIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgY29kZSwgYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGJvdGggc3VjY2Vzc2Z1bCBhbmQgZXJyb3Igc2NlbmFyaW9zLgoKTmV4dCwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcG9sbCBpbmZyYXN0cnVjdHVyZS4gSXMgaXQgY2hlY2tpbmcgdGhlIHN0YXR1cyBvZiB0aGUgSS9PIGV2ZW50IGFnYWluc3QgYSBwb2xsaW5nIHN0cnVjdHVyZSAocHJvYmFibHkgYW4gYGVwb2xsX2V2ZW50YCBvciBzaW1pbGFyKT8gSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhvdyBpdCBzeW5jaHJvbml6ZXMgd2l0aCB0aGUgcG9sbGluZyBtZWNoYW5pc20sIGVuc3VyaW5nIHRoYXQgdGhlIGNvbXBsZXRpb24gaXMgYWNrbm93bGVkZ2VkIGNvcnJlY3RseSBhbmQgdGhlIHdhaXRpbmcgcHJvY2VzcyBpcyBub3RpZmllZC4gVGhpcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBlZmZpY2llbnQgbWFuYWdlbWVudCBvZiBJL08gcmVzb3VyY2VzIHdoZW4gdGhlIGtlcm5lbCBpcyBtYW5hZ2luZyB0aGUgcG9sbGluZyBzaWRlLgoKVGhlIHVzZSBvZiBgSU9QT0xgIHN1Z2dlc3RzIHRoYXQgdGhlcmUgbWlnaHQgYmUgc29tZSBmb3JtIG9mIG9wdGltaXphdGlvbiBvciBzaG9ydC1jaXJjdWl0aW5nIGluIHNwZWNpZmljIHNpdHVhdGlvbnMuIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgY29uZGl0aW9uYWwgY2hlY2tzIGJhc2VkIG9uIHRoZSBgSU9QT0xgIGZsYWcmIzM5O3MgdmFsdWUuIEkmIzM5O20gdGhpbmtpbmcgd2UgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGVpdGhlciBhZ2dyZXNzaXZlIHBvbGxpbmcsIG9yIGEgbW9yZSBkZWxheWVkIGNvbXBsZXRpb24gbWVjaGFuaXNtLCBkZXBlbmRlbnQgb24gaG93IHRoZSBrZXJuZWwgc2VlcyB0aGUgZGF0YSBpcyBhdmFpbGFibGUuCgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgcG90ZW50aWFsIGZvciBoYW5kbGluZyBwYXJ0aWFsIGNvbXBsZXRpb25zLiBEb2VzIHRoZSBjb2RlIGFjY291bnQgZm9yIHNjZW5hcmlvcyB3aGVyZSBhIHJlYWQgb3Igd3JpdGUgb3BlcmF0aW9uIG1pZ2h0IG9ubHkgdHJhbnNmZXIgYSBzdWJzZXQgb2YgdGhlIHJlcXVlc3RlZCBkYXRhLCBwZXJoYXBzIGR1ZSB0byBhIHNob3J0IHJlYWQgb3IgYSByZXNvdXJjZSBsaW1pdGF0aW9uPyBJJiMzOTttIGhvcGluZyB0byBzZWUgaG93IHRoZSByZW1haW5pbmcgYnl0ZXMsIGlmIGFueSwgYXJlIG1hbmFnZWQgYW5kIGhhbmRsZWQuIEFyZSB3ZSByZXNjaGVkdWxpbmcgaXQgd2l0aCBhIG5ldyBTUUU/CgpGaW5hbGx5LCB0aGUgY29udGV4dC4gSSYjMzk7bGwgYmUgbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgY29tcGxldGlvbiBoYW5kbGluZyBhbmQgdGhlIHVzZXItc3BhY2Ugc3VibWlzc2lvbi4gSG93IGlzIHRoZSBjb21wbGV0ZWQgZXZlbnQgY29tbXVuaWNhdGVkIGJhY2sgdG8gdGhlIGFwcGxpY2F0aW9uPyBJcyB0aGVyZSBzb21lIGZvcm0gb2YgbWVtb3J5IGJhcnJpZXIgaW52b2x2ZWQ/IERvZXMgdGhpcyBjb2RlIGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGlvX3VyaW5nIHN5c3RlbSwgbGlrZSB0aGUgQ1FFIChDb21wbGV0aW9uIFF1ZXVlIEVudHJ5KSBoYW5kbGluZz8gVGhhdCYjMzk7cyB3aGF0IEkmIzM5O2xsIGJlIHdhdGNoaW5nIGZvci4gUmlnaHQsIGxldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvcncuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTgwOlx0XHRfX2lvX2NvbXBsZXRlX3J3X2NvbW1vbihyZXEsIHJlcyk7XG4gNTgxOlx0XHRpb19yZXFfc2V0X3JlcyhyZXEsIGlvX2ZpeHVwX3J3X3JlcyhyZXEsIHJlcyksIDApO1xuIDU4MjpcdFx0cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fcmVxX3J3X2NvbXBsZXRlO1xuIDU4MzpcdFx0X19pb19yZXFfdGFza193b3JrX2FkZChyZXEsIElPVV9GX1RXUV9MQVpZX1dBS0UpO1xuIDU4NDpcdH1cbiA1ODU6XHRcbiA1ODY6XHRzdGF0aWMgdm9pZCBpb19jb21wbGV0ZV9yd19pb3BvbGwoc3RydWN0IGtpb2NiICpraW9jYiwgbG9uZyByZXMpXG4gNTg3Olx0e1xuIDU4ODpcdFx0c3RydWN0IGlvX3J3ICpydyA9IGNvbnRhaW5lcl9vZihraW9jYiwgc3RydWN0IGlvX3J3LCBraW9jYik7XG4gNTg5Olx0XHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSA9IGNtZF90b19pb19raW9jYihydyk7XG4gNTkwOlx0XHRpbnQgZmluYWxfcmVzID0gaW9fZml4dXBfcndfcmVzKHJlcSwgcmVzKTtcbiA1OTE6XHRcbiA1OTI6XHRcdGlmIChraW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9XUklURSlcbiA1OTM6XHRcdFx0aW9fcmVxX2VuZF93cml0ZShyZXEpO1xuIDU5NDpcdFxuIDU5NTpcdFx0aWYgKHJlcyA9PSAtRUFHQUlOIFx1MDAyNlx1MDAyNiBpb19yd19zaG91bGRfcmVpc3N1ZShyZXEpKVxuIDU5NjpcdFx0XHRyZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfUkVJU1NVRSB8IFJFUV9GX0JMX05PX1JFQ1lDTEU7XG4gNTk3Olx0XHRlbHNlIGlmICh1bmxpa2VseShmaW5hbF9yZXMgIT0gcmVxLVx1MDAzZWNxZS5yZXMpKVxuIDU5ODpcdFx0XHRyZXEtXHUwMDNlY3FlLnJlcyA9IGZpbmFsX3JlcztcbiA1OTk6XHRcbiA2MDA6XHRcdC8qIG9yZGVyIHdpdGggaW9faW9wb2xsX2NvbXBsZXRlKCkgY2hlY2tpbmcgLVx1MDAzZWlvcG9sbF9jb21wbGV0ZWQgKi9cbiA2MDE6XHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnJlcS1cdTAwM2Vpb3BvbGxfY29tcGxldGVkLCAxKTtcbiA2MDI6XHR9XG4gNjAzOlx0XG4gNjA0Olx0c3RhdGljIGlubGluZSBzc2l6ZV90IGlvX2ZpeHVwX3Jlc3RhcnRfcmVzKHNzaXplX3QgcmV0KVxuIDYwNTpcdHtcbiA2MDY6XHRcdHN3aXRjaCAocmV0KSB7XG4gNjA3Olx0XHRjYXNlIC1FUkVTVEFSVFNZUzpcbiA2MDg6XHRcdGNhc2UgLUVSRVNUQVJUTk9JTlRSOlxuIDYwOTpcdFx0Y2FzZSAtRVJFU1RBUlROT0hBTkQ6XG4gNjEwOlx0XHRjYXNlIC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0s6XG4gNjExOlx0XHRcdC8qXG4gNjEyOlx0XHRcdCAqIFdlIGNhbiYjMzk7dCBqdXN0IHJlc3RhcnQgdGhlIHN5c2NhbGwsIHNpbmNlIHByZXZpb3VzbHlcbiA2MTM6XHRcdFx0ICogc3VibWl0dGVkIHNxZXMgbWF5IGFscmVhZHkgYmUgaW4gcHJvZ3Jlc3MuIEp1c3QgZmFpbFxuIDYxNDpcdFx0XHQgKiB0aGlzIElPIHdpdGggRUlOVFIuXG4gNjE1Olx0XHRcdCAqL1xuIDYxNjpcdFx0XHRyZXR1cm4gLUVJTlRSO1xuIDYxNzpcdFx0ZGVmYXVsdDpcbiA2MTg6XHRcdFx0cmV0dXJuIHJldDtcbiA2MTk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc5NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBpb191cmluZyBGbGFnIFVzYWdlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHJlcS0mZ3Q7Y3FlLmZsYWdzYCBmaWVsZCBpbiBgaW9fdXJpbmdgIGlzIGJlaW5nIG1hbmlwdWxhdGVkIGFuZCB1c2VkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgbGlmZWN5Y2xlLiBJIHdhbnQgdG8gc2VlICp3aGVyZSogaW4gdGhlIGNvZGUgdGhlc2UgZmxhZ3MgYXJlIGJlaW5nIHNldCAob3IgY2xlYXJlZCkuIFRoaXMgbWVhbnMgbG9va2luZyBhdCB0aGUgaGFuZGxlcnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSB0b3VjaCB0aGlzIGZpZWxkLCBlc3BlY2lhbGx5IHRob3NlIHJlbGF0ZWQgdG8gdGhlIGNvbW1hbmQgcXVldWUgZW50cnkgKGBjcWVgKS4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcnBsYXkgd2l0aCB0aGUgYGlvX2lzX3VyaW5nX2NtZChyZXEpYCBmdW5jdGlvbiwgYXMgdGhhdCBwcm9iYWJseSBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFdoYXQgZGVjaXNpb25zIGFyZSBtYWRlIGJhc2VkIG9uIHRoZSBmbGFnJiMzOTtzIGN1cnJlbnQgc3RhdGU/IFdoYXQgb3RoZXIgZnVuY3Rpb25zIG9yIGNvbXBvbmVudHMgcmVseSBvbiB0aGVzZSBmbGFncyB0byBwZXJmb3JtIHRoZWlyIHRhc2tzIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBmcmFtZXdvcms/CgpJJiMzOTtsbCBhbHNvIGV4cGFuZCB0aGlzIHNlYXJjaCB0byBpbmNsdWRlIGFueSBvdGhlciBoYW5kbGVycyBvciBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudDsgSSBjYW4mIzM5O3QgYmUgdG9vIG5hcnJvdyBoZXJlLCBzbyBJIG5lZWQgdG8gY2FzdCBhIHdpZGUgbmV0LiBCYXNpY2FsbHksIEkgd2lsbCBoYXZlIHRvIHNlYXJjaCBmb3IgZXZlcnkgdXNlIG9mIGByZXEtJmd0O2NxZS5mbGFnc2AgaW4gdGhlIGBpb191cmluZ2AgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NxZVxcLmZsYWdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW9fdXJpbmcuYz01MTU9c3RhdGljIHZvaWQgX19pb19jcXJpbmdfb3ZlcmZsb3dfZmx1c2goc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgZHlpbmcpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy01MzEtXHRcdFx0XHRcdHN0cnVjdCBpb19vdmVyZmxvd19jcWUsIGxpc3QpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYzo1MzI6XHRcdGlmIChvY3FlLVx1MDAzZWNxZS5mbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8XG5pb191cmluZy9pb191cmluZy5jLTUzMy1cdFx0ICAgIGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSB7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz02NTI9c3RhdGljIHN0cnVjdCBpb19vdmVyZmxvd19jcWUgKmlvX2FsbG9jX29jcWUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy02NjktXHRcdG9jcWUtXHUwMDNlY3FlLnJlcyA9IGNxZS1cdTAwM2VyZXM7XG5pb191cmluZy9pb191cmluZy5jOjY3MDpcdFx0b2NxZS1cdTAwM2VjcWUuZmxhZ3MgPSBjcWUtXHUwMDNlZmxhZ3M7XG5pb191cmluZy9pb191cmluZy5jLTY3MS1cdFx0aWYgKGlzX2NxZTMyIFx1MDAyNlx1MDAyNiBiaWdfY3FlKSB7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaD0yOTc9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlvX2ZpbGxfY3FlX3JlcShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9pb191cmluZy5oLTI5OS17XG5pb191cmluZy9pb191cmluZy5oOjMwMDpcdGJvb2wgaXNfY3FlMzIgPSByZXEtXHUwMDNlY3FlLmZsYWdzIFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzI7XG5pb191cmluZy9pb191cmluZy5oLTMwMS1cdHN0cnVjdCBpb191cmluZ19jcWUgKmNxZTtcbi0tXG5pb191cmluZy9pb191cmluZy5oPTMzMD1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcmVxX3NldF9yZXMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHMzMiByZXMsIHUzMiBjZmxhZ3MpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zMzItXHRyZXEtXHUwMDNlY3FlLnJlcyA9IHJlcztcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MzMzOlx0cmVxLVx1MDAzZWNxZS5mbGFncyA9IGNmbGFncztcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzM0LX1cbi0tXG5pb191cmluZy9pb191cmluZy5oPTM0Mz1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcmVxX3NldF9yZXMzMihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgczMyIHJlcywgdTMyIGNmbGFncyxcbi0tXG5pb191cmluZy9pb191cmluZy5oLTM0Ni1cdHJlcS1cdTAwM2VjcWUucmVzID0gcmVzO1xuaW9fdXJpbmcvaW9fdXJpbmcuaDozNDc6XHRyZXEtXHUwMDNlY3FlLmZsYWdzID0gY2ZsYWdzIHwgY3R4X2NxZTMyX2ZsYWdzKHJlcS1cdTAwM2VjdHgpO1xuaW9fdXJpbmcvaW9fdXJpbmcuaC0zNDgtXHRyZXEtXHUwMDNlYmlnX2NxZS5leHRyYTEgPSBleHRyYTE7XG4tLVxuaW9fdXJpbmcvbXNnX3JpbmcuYz03Mz1zdGF0aWMgdm9pZCBpb19tc2dfdHdfY29tcGxldGUoc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4tLVxuaW9fdXJpbmcvbXNnX3JpbmcuYy03Ny1cbmlvX3VyaW5nL21zZ19yaW5nLmM6Nzg6XHRpb19hZGRfYXV4X2NxZShjdHgsIHJlcS1cdTAwM2VjcWUudXNlcl9kYXRhLCByZXEtXHUwMDNlY3FlLnJlcywgcmVxLVx1MDAzZWNxZS5mbGFncyk7XG5pb191cmluZy9tc2dfcmluZy5jLTc5LVx0a2ZyZWVfcmN1KHJlcSwgcmN1X2hlYWQpO1xuLS1cbmlvX3VyaW5nL25ldC5jPTg1Mz1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtODgxLVx0XHRpZiAoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWX1JFVFJZKVxuaW9fdXJpbmcvbmV0LmM6ODgyOlx0XHRcdGNmbGFncyA9IHJlcS1cdTAwM2VjcWUuZmxhZ3MgfCAoY2ZsYWdzIFx1MDAyNiBDUUVfRl9NQVNLKTtcbmlvX3VyaW5nL25ldC5jLTg4My1cdFx0aWYgKHNyLVx1MDAzZW1zaG90X2xlbiBcdTAwMjZcdTAwMjYgc2VsLVx1MDAzZXZhbCBcdTAwM2U9IHNyLVx1MDAzZW1zaG90X2xlbilcbi0tXG5pb191cmluZy9uZXQuYy04OTQtXHRcdCAgICAhaW92X2l0ZXJfY291bnQoXHUwMDI2a21zZy1cdTAwM2Vtc2cubXNnX2l0ZXIpKSB7XG5pb191cmluZy9uZXQuYzo4OTU6XHRcdFx0cmVxLVx1MDAzZWNxZS5mbGFncyA9IGNmbGFncyBcdTAwMjYgfkNRRV9GX01BU0s7XG5pb191cmluZy9uZXQuYy04OTYtXHRcdFx0c3ItXHUwMDNlbGVuID0ga21zZy1cdTAwM2Vtc2cubXNnX2lucTtcbi0tXG5pb191cmluZy9uZXQuYz0xMzQ3PWludCBpb19zZW5kX3pjX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbi0tXG5pb191cmluZy9uZXQuYy0xMzcyLVx0bm90aWYtXHUwMDNlY3FlLnJlcyA9IDA7XG5pb191cmluZy9uZXQuYzoxMzczOlx0bm90aWYtXHUwMDNlY3FlLmZsYWdzID0gSU9SSU5HX0NRRV9GX05PVElGO1xuaW9fdXJpbmcvbmV0LmMtMTM3NC1cdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9ORUVEX0NMRUFOVVAgfCBSRVFfRl9QT0xMX05PX0xBWlk7XG4tLVxuaW9fdXJpbmcvbmV0LmM9MTU3MT12b2lkIGlvX3NlbmRyZWN2X2ZhaWwoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTU3OS1cdCAgICAocmVxLVx1MDAzZW9wY29kZSA9PSBJT1JJTkdfT1BfU0VORF9aQyB8fCByZXEtXHUwMDNlb3Bjb2RlID09IElPUklOR19PUF9TRU5ETVNHX1pDKSlcbmlvX3VyaW5nL25ldC5jOjE1ODA6XHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgfD0gSU9SSU5HX0NRRV9GX01PUkU7XG5pb191cmluZy9uZXQuYy0xNTgxLX1cbi0tXG5pb191cmluZy9ydy5jPTU2Mj12b2lkIGlvX3JlcV9yd19jb21wbGV0ZShzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbi0tXG5pb191cmluZy9ydy5jLTU2OC1cdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IChSRVFfRl9CVUZGRVJfU0VMRUNURUR8UkVRX0ZfQlVGRkVSX1JJTkcpKVxuaW9fdXJpbmcvcncuYzo1Njk6XHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLVx1MDAzZWNxZS5yZXMsIDApLCBOVUxMKTtcbmlvX3VyaW5nL3J3LmMtNTcwLVxuLS1cbmlvX3VyaW5nL3J3LmM9MTIzOD12b2lkIGlvX3J3X2ZhaWwoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4tLVxuaW9fdXJpbmcvcncuYy0xMjQyLVx0cmVzID0gaW9fZml4dXBfcndfcmVzKHJlcSwgcmVxLVx1MDAzZWNxZS5yZXMpO1xuaW9fdXJpbmcvcncuYzoxMjQzOlx0aW9fcmVxX3NldF9yZXMocmVxLCByZXMsIHJlcS1cdTAwM2VjcWUuZmxhZ3MpO1xuaW9fdXJpbmcvcncuYy0xMjQ0LX1cbi0tXG5pb191cmluZy9ydy5jPTEzMTk9aW50IGlvX2RvX2lvcG9sbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBmb3JjZV9ub25zcGluKVxuLS1cbmlvX3VyaW5nL3J3LmMtMTM3NS1cdFx0bnJfZXZlbnRzJiM0MzsmIzQzOztcbmlvX3VyaW5nL3J3LmM6MTM3NjpcdFx0cmVxLVx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO1xuaW9fdXJpbmcvcncuYy0xMzc3LVx0XHRpZiAoIWlvX2lzX3VyaW5nX2NtZChyZXEpKVxuLS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jPTE1Mj12b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LCB1NjQgcmVzMixcbi0tXG5pb191cmluZy91cmluZ19jbWQuYy0xNjctXHRcdGlmIChyZXEtXHUwMDNlY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKVxuaW9fdXJpbmcvdXJpbmdfY21kLmM6MTY4Olx0XHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgfD0gSU9SSU5HX0NRRV9GXzMyO1xuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTY5LVx0XHRpb19yZXFfc2V0X2NxZTMyX2V4dHJhKHJlcSwgcmVzMiwgMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5OTIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGbGFnIE1vZGlmaWNhdGlvbiBpbiBgaW9fZG9faW9wb2xsYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGNoYW5nZSBpbiBgaW9fZG9faW9wb2xsYC4gUHJldmlvdXNseSwgdGhlIGNvZGUgd2FzIHNldHRpbmcgYHJlcS0mZ3Q7Y3FlLmZsYWdzYCBkaXJlY3RseSB3aXRoIGBpb19wdXRfa2J1ZiguLi4pYDogYHJlcS0mZ3Q7Y3FlLmZsYWdzID0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLSZndDtjcWUucmVzLCAwKSwgTlVMTCk7YC4gTm93LCBpdCYjMzk7cyBhbiBPUiBhc3NpZ25tZW50OiBgcmVxLSZndDtjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYoLi4uKWAuCgpUaGUgcXVlc3Rpb24gaXMsIHdoeSB0aGUgY2hhbmdlIGZyb20gYSBzaW1wbGUgYXNzaWdubWVudCB0byBhIGJpdHdpc2UgT1I/IEl0IGxvb2tzIGxpa2UgdGhlIGtleSBsaWVzIGluIHVuZGVyc3RhbmRpbmcgaG93IGByZXEtJmd0O2NxZS5mbGFnc2AgaXMgdXNlZCBhbmQgbW9kaWZpZWQgZWxzZXdoZXJlLiBMb29raW5nIGF0IGBfX2lvX3VyaW5nX2NtZF9kb25lYCwgSSBzZWUgdGhhdCBgSU9SSU5HX0NRRV9GXzMyYCBhbmQgb3RoZXIgZmxhZ3MgYXJlIGJlaW5nIHNldCB1c2luZyBhbiBPUiBhc3NpZ25tZW50LCB3aGljaCBtZWFucyB0aGF0IHRoZSBpbnRlbnRpb24gaXMgZm9yIHRoZXNlIGZsYWdzIHRvIHBlcnNpc3QuIFRoZSBwcmV2aW91cyBhc3NpZ25tZW50IGluIGBpb19kb19pb3BvbGxgIHdhcyAqb3ZlcndyaXRpbmcqIHRoZXNlIGV4aXN0aW5nIGZsYWdzLiBTbywgaWYgYGlvX2RvX2lvcG9sbGAgcmFuIGFmdGVyIHNvbWV0aGluZyBsaWtlIGBpb191cmluZ19jbWRgIG9yIGBpb19yZXFfcndfY29tcGxldGVgLCBpdCB3YXMgY2xlYXJpbmcgdGhlbSwgd2hpY2ggaXNuJiMzOTt0IHRoZSBkZXNpcmVkIGJlaGF2aW9yLiBUaGUgZWFybGllciBjYWxscywgYXQgbGluZSA1NjksIHdvdWxkIGhhdmUgd3JpdHRlbiB0aGUgcmVsZXZhbnQgZmxhZy4KClRoZSBjaGFuZ2UgdG8gdGhlIE9SIGFzc2lnbm1lbnQgZml4ZXMgdGhpcy4KClRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSBzaG91bGQgdmVyaWZ5IHRoYXQgYHJlcWAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgb3IgemVyb2VkIHVwb24gYWxsb2NhdGlvbi4gSWYgaXQgaXNuJiMzOTt0LCB0aGVyZSYjMzk7cyBhIGNoYW5jZSBgcmVxLSZndDtjcWUuZmxhZ3NgIGNvdWxkIGNvbnRhaW4gZ2FyYmFnZSwgYW5kIHRoYXQgd291bGQgaW50cm9kdWNlIGEgbmV3IGNsYXNzIG9mIHByb2JsZW1zLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgaW9fa2lvY2JgIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHdpdGhpbiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtIHRvIGNvbmZpcm0gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fYWxsb2NfcmVxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW9fdXJpbmcuYz05NDg9dm9pZCBpb19yZXFfZGVmZXJfZmFpbGVkKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzMzIgcmVzKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTY0LSAqIGhhbmRsZXJzIGFuZCBpb19pc3N1ZV9zcWUoKSBhcmUgZG9uZSB3aXRoIGl0LCBlLmcuIGlubGluZSBjb21wbGV0aW9uIHBhdGguXG5pb191cmluZy9pb191cmluZy5jOjk2NTogKiBCZWNhdXNlIG9mIHRoYXQsIGlvX2FsbG9jX3JlcSgpIHNob3VsZCBiZSBjYWxsZWQgb25seSB1bmRlciAtXHUwMDNldXJpbmdfbG9ja1xuaW9fdXJpbmcvaW9fdXJpbmcuYy05NjYtICogYW5kIHdpdGggZXh0cmEgY2F1dGlvbiB0byBub3QgZ2V0IGEgcmVxdWVzdCB0aGF0IGlzIHN0aWxsIHdvcmtlZCBvbi5cbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTY3LSAqL1xuaW9fdXJpbmcvaW9fdXJpbmcuYzo5Njg6X19jb2xkIGJvb2wgX19pb19hbGxvY19yZXFfcmVmaWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxuaW9fdXJpbmcvaW9fdXJpbmcuYy05NjktXHRfX211c3RfaG9sZChcdTAwMjZjdHgtXHUwMDNldXJpbmdfbG9jaylcbi0tXG5pb191cmluZy9pb191cmluZy5jPTIwMTM9aW50IGlvX3N1Ym1pdF9zcWVzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBpbnQgbnIpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMDM2LVxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMDM3Olx0XHRpZiAodW5saWtlbHkoIWlvX2FsbG9jX3JlcShjdHgsIFx1MDAyNnJlcSkpKVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMDM4LVx0XHRcdGJyZWFrO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmg9MjEyPXZvaWQgaW9fdGFza19yZWZzX3JlZmlsbChzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCk7XG5pb191cmluZy9pb191cmluZy5oOjIxMzpib29sIF9faW9fYWxsb2NfcmVxX3JlZmlsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XG5pb191cmluZy9pb191cmluZy5oLTIxNC1cbi0tXG5pb191cmluZy9pb191cmluZy5oPTUyNT1zdGF0aWMgaW5saW5lIHN0cnVjdCBpb19raW9jYiAqaW9fZXh0cmFjdF9yZXEoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC01MzMtXG5pb191cmluZy9pb191cmluZy5oOjUzNDpzdGF0aWMgaW5saW5lIGJvb2wgaW9fYWxsb2NfcmVxKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fa2lvY2IgKipyZXEpXG5pb191cmluZy9pb191cmluZy5oLTUzNS17XG5pb191cmluZy9pb191cmluZy5oLTUzNi1cdGlmICh1bmxpa2VseShpb19yZXFfY2FjaGVfZW1wdHkoY3R4KSkpIHtcbmlvX3VyaW5nL2lvX3VyaW5nLmg6NTM3Olx0XHRpZiAoIV9faW9fYWxsb2NfcmVxX3JlZmlsbChjdHgpKVxuaW9fdXJpbmcvaW9fdXJpbmcuaC01MzgtXHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmlvX3VyaW5nL25vdGlmLmM9MTE0PXN0cnVjdCBpb19raW9jYiAqaW9fYWxsb2Nfbm90aWYoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4tLVxuaW9fdXJpbmcvbm90aWYuYy0xMTktXG5pb191cmluZy9ub3RpZi5jOjEyMDpcdGlmICh1bmxpa2VseSghaW9fYWxsb2NfcmVxKGN0eCwgXHUwMDI2bm90aWYpKSlcbmlvX3VyaW5nL25vdGlmLmMtMTIxLVx0XHRyZXR1cm4gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ1OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdHJhaW4gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgSS9PIEFsbG9jYXRpb24gYW5kIEluaXRpYWxpemF0aW9uKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHpvb20gaW4gb24gaG93IHRoZXNlIEkvTyByZXF1ZXN0cyBhcmUgYmVpbmcgaGFuZGxlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgX19pb19hbGxvY19yZXFfcmVmaWxsYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHJlZmlsbGluZyBtZWNoYW5pc20gZm9yIHRoZXNlIHJlcXVlc3RzLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBtZW1vcnkgbWFuYWdlbWVudC4gSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIGluZWZmaWNpZW5jaWVzIG9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyB0aGVyZSwgZ2l2ZW4gdGhlIHNjYWxlIHdlJiMzOTtyZSBwcm9iYWJseSBkZWFsaW5nIHdpdGguIFRoZW4sIEkgbmVlZCB0byBpbW1lZGlhdGVseSB0aWUgdGhhdCB0byB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBpb19pbml0X3JlcWAsIHNwZWNpZmljYWxseSBob3cgdGhlIEkvTyByZXF1ZXN0cyBhcmUgaW5pdGlhbGl6ZWQgaW4gY29uanVuY3Rpb24gd2l0aCBzbGFiIGluaXRpYWxpemF0aW9uLiBBcmUgd2UgZG9pbmcgdGhpcyBlZmZlY3RpdmVseT8gQXJlIHdlIHBvdGVudGlhbGx5IG92ZXItYWxsb2NhdGluZywgb3IgdW5kZXItYWxsb2NhdGluZywgc2xhYnMgaGVyZT8gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSYjMzk7cmUga2VlcGluZyBpdCBlZmZpY2llbnQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBwcm9ibGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NjU6XHQgKiBCZWNhdXNlIG9mIHRoYXQsIGlvX2FsbG9jX3JlcSgpIHNob3VsZCBiZSBjYWxsZWQgb25seSB1bmRlciAtXHUwMDNldXJpbmdfbG9ja1xuIDk2NjpcdCAqIGFuZCB3aXRoIGV4dHJhIGNhdXRpb24gdG8gbm90IGdldCBhIHJlcXVlc3QgdGhhdCBpcyBzdGlsbCB3b3JrZWQgb24uXG4gOTY3Olx0ICovXG4gOTY4Olx0X19jb2xkIGJvb2wgX19pb19hbGxvY19yZXFfcmVmaWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxuIDk2OTpcdFx0X19tdXN0X2hvbGQoXHUwMDI2Y3R4LVx1MDAzZXVyaW5nX2xvY2spXG4gOTcwOlx0e1xuIDk3MTpcdFx0Z2ZwX3QgZ2ZwID0gR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX1pFUk87XG4gOTcyOlx0XHR2b2lkICpyZXFzW0lPX1JFUV9BTExPQ19CQVRDSF07XG4gOTczOlx0XHRpbnQgbnJfcmVxcyA9IEFSUkFZX1NJWkUocmVxcyk7XG4gOTc0Olx0XG4gOTc1Olx0XHQvKlxuIDk3NjpcdFx0ICogQnVsayBhbGxvYyBpcyBhbGwtb3Itbm90aGluZy4gSWYgd2UgZmFpbCB0byBnZXQgYSBiYXRjaCwgcmV0cnkgYVxuIDk3NzpcdFx0ICogc2luZ2xlIGFsbG9jYXRpb24gdG8gYmUgb24gdGhlIHNhZmUgc2lkZS5cbiA5Nzg6XHRcdCAqL1xuIDk3OTpcdFx0aWYgKCFrbWVtX2NhY2hlX2FsbG9jX2J1bGsocmVxX2NhY2hlcCwgZ2ZwLCBucl9yZXFzLCByZXFzKSkge1xuIDk4MDpcdFx0XHRyZXFzWzBdID0ga21lbV9jYWNoZV9hbGxvYyhyZXFfY2FjaGVwLCBnZnApO1xuIDk4MTpcdFx0XHRpZiAoIXJlcXNbMF0pXG4gOTgyOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDk4MzpcdFx0XHRucl9yZXFzID0gMTtcbiA5ODQ6XHRcdH1cbiA5ODU6XHRcbiA5ODY6XHRcdHBlcmNwdV9yZWZfZ2V0X21hbnkoXHUwMDI2Y3R4LVx1MDAzZXJlZnMsIG5yX3JlcXMpO1xuIDk4NzpcdFx0Y3R4LVx1MDAzZW5yX3JlcV9hbGxvY2F0ZWQgJiM0Mzs9IG5yX3JlcXM7XG4gOTg4Olx0XG4gOTg5Olx0XHR3aGlsZSAobnJfcmVxcy0tKVxuIDk5MDpcdFx0XHRpb19yZXFfYWRkX3RvX2NhY2hlKHJlcXNbbnJfcmVxc10sIGN0eCk7XG4gOTkxOlx0XHRyZXR1cm4gdHJ1ZTtcbiA5OTI6XHR9XG4gOTkzOlx0XG4gOTk0Olx0X19jb2xkIHZvaWQgaW9fZnJlZV9yZXEoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4gOTk1Olx0e1xuIDk5NjpcdFx0LyogcmVmcyB3ZXJlIGFscmVhZHkgcHV0LCByZXN0b3JlIHRoZW0gZm9yIGlvX3JlcV90YXNrX2NvbXBsZXRlKCkgKi9cbiA5OTc6XHRcdHJlcS1cdTAwM2VmbGFncyBcdTAwMjY9IH5SRVFfRl9SRUZDT1VOVDtcbiA5OTg6XHRcdC8qIHdlIG9ubHkgd2FudCB0byBmcmVlIGl0LCBkb24mIzM5O3QgcG9zdCBDUUVzICovXG4gOTk5Olx0XHRyZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQ1FFX1NLSVA7XG4xMDAwOlx0XHRyZXEtXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19yZXFfdGFza19jb21wbGV0ZTtcbjEwMDE6XHRcdGlvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSk7XG4xMDAyOlx0fVxuMTAwMzpcdFxuMTAwNDpcdHN0YXRpYyB2b2lkIF9faW9fcmVxX2ZpbmRfbmV4dF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQwOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgYGlvX2luaXRfcmVxYCBpbiBgaW9fdXJpbmcvaW9fdXJpbmcuY2AqKgoKT2theSwgc28gd2UmIzM5O3JlIGRpdmluZyBpbnRvIHRoZSBgaW9fdXJpbmdgIGltcGxlbWVudGF0aW9uLCBhbmQgaXQmIzM5O3MgdGltZSB0byB6ZXJvIGluIG9uIGEgY3JpdGljYWwgZnVuY3Rpb246IGBpb19pbml0X3JlcWAuIE15IG1lbnRhbCBjaGVja2xpc3QgaXMgaW1tZWRpYXRlbHkgZW5nYWdlZDogJiMzNDtXaGF0IGlzIHRoaXMgZnVuY3Rpb24gZG9pbmc/IFdoZXJlIGRvZXMgaXQgZml0IGludG8gdGhlIHJlcXVlc3QgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcz8gQXJlIHRoZXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGdpdmVuIHRoYXQgdGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgYXN5bmMgSU8gc3lzdGVtPyYjMzQ7IEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgaXMgd2hlcmUgdGhlIGdyb3VuZHdvcmsgaXMgbGFpZCBmb3IgdGhlIG5ldyByZXF1ZXN0LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBsaWtlbHkgaW5pdGlhbGl6ZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGxvb2tpbmcgZm9yIGFueSBwb2ludHMgb2YgY29udGVudGlvbiBvciBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgZHVyaW5nIHRoZSByZXF1ZXN0IHByZXBhcmF0aW9uIHBoYXNlLiBXZSBhbGwga25vdyBwZXJmb3JtYW5jZSBpcyBrZXkgaW4gdGhlc2UgdGhpbmdzLiBTbywgSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IHZpZ2lsYW50IGFib3V0IG1lbW9yeSBhbGxvY2F0aW9uLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgb3ZlcmFsbCBlZmZpY2llbmN5IG9mIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSSYjMzk7bSByZWFkeSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgbmV3IHJlcXVlc3RzIGFyZSBiZWluZyBwcmVwYXJlZCBhbmQgaW50ZWdyYXRlZCBpbnRvIHRoZSBgaW9fdXJpbmdgIG1hY2hpbmVyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9faW5pdF9yZXEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9icGZfZmlsdGVyLmM9NTc9aW50IF9faW9fdXJpbmdfcnVuX2JwZl9maWx0ZXJzKHN0cnVjdCBpb19icGZfZmlsdGVyIF9fcmN1ICoqZmlsdGVycyxcbi0tXG5pb191cmluZy9icGZfZmlsdGVyLmMtNjktXHQgKiByZXEtXHUwMDNlb3Bjb2RlIGhhcyBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIHRvIGJlIHdpdGhpbiB0aGUgcmFuZ2VcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYzo3MDpcdCAqIG9mIHdoYXQgd2UgZXhwZWN0LCBpb19pbml0X3JlcSgpIGRvZXMgdGhpcy5cbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy03MS1cdCAqL1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9MTcxND1zdGF0aWMgX19jb2xkIGludCBpb19pbml0X2ZhaWxfcmVxKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgZXJyKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTcyMC1cbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTcyMTpzdGF0aWMgaW50IGlvX2luaXRfcmVxKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTcyMi1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSwgdW5zaWduZWQgaW50ICpsZWZ0KVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9MTg3Mz1zdGF0aWMgaW5saW5lIGludCBpb19zdWJtaXRfc3FlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbi0tXG5pb191cmluZy9pb191cmluZy5jLTE4NzktXG5pb191cmluZy9pb191cmluZy5jOjE4ODA6XHRyZXQgPSBpb19pbml0X3JlcShjdHgsIHJlcSwgc3FlLCBsZWZ0KTtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTg4MS1cdGlmICh1bmxpa2VseShyZXQpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA3NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBpb19pbml0X3JlcWAgaW4gYGlvX3VyaW5nLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBpb191cmluZy5jYCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIHRoZSBgaW9faW5pdF9yZXFgIGZ1bmN0aW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBpbml0aWFsaXppbmcgSS9PIHJlcXVlc3RzLiBMZXQmIzM5O3MgaG9tZSBpbiBvbiBsaW5lcyAxNzIxIHRvIDE3NzA7IHRoYXQmIzM5O3MgcHJvYmFibHkgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhpcyBmdW5jdGlvbiByZXNpZGVzLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGluaXRpYWwgc2V0dXAsIHZhbGlkYXRpb24sIGFuZCBwb3RlbnRpYWxseSBxdWV1ZWluZyBoYXBwZW4uIE5lZWQgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgZWFjaCBzZWN0aW9uIG9mIHRoaXMgY29kZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgYXJndW1lbnQgdmFsaWRhdGlvbiwgbWVtb3J5IGFsbG9jYXRpb24gKGlmIGFueSksIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFN1Ym1pc3Npb24gUXVldWUgYW5kIENvbXBsZXRpb24gUXVldWUuIFRoaXMgYXJlYSBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCByZXF1ZXN0IGxpZmVjeWNsZSBpbiBpb191cmluZywgc28gSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbi4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHBsdW1iaW5nIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzIwOlx0XG4xNzIxOlx0c3RhdGljIGludCBpb19pbml0X3JlcShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX2tpb2NiICpyZXEsXG4xNzIyOlx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUsIHVuc2lnbmVkIGludCAqbGVmdClcbjE3MjM6XHRcdF9fbXVzdF9ob2xkKFx1MDAyNmN0eC1cdTAwM2V1cmluZ19sb2NrKVxuMTcyNDpcdHtcbjE3MjU6XHRcdGNvbnN0IHN0cnVjdCBpb19pc3N1ZV9kZWYgKmRlZjtcbjE3MjY6XHRcdHVuc2lnbmVkIGludCBzcWVfZmxhZ3M7XG4xNzI3Olx0XHRpbnQgcGVyc29uYWxpdHk7XG4xNzI4Olx0XG4xNzI5Olx0XHRyZXEtXHUwMDNlY3R4ID0gY3R4O1xuMTczMDpcdFx0cmVxLVx1MDAzZW9wY29kZSA9IFJFQURfT05DRShzcWUtXHUwMDNlb3Bjb2RlKTtcbjE3MzE6XHRcdC8qIHNhbWUgbnVtZXJpY2FsIHZhbHVlcyB3aXRoIGNvcnJlc3BvbmRpbmcgUkVRX0ZfKiwgc2FmZSB0byBjb3B5ICovXG4xNzMyOlx0XHRzcWVfZmxhZ3MgPSBSRUFEX09OQ0Uoc3FlLVx1MDAzZWZsYWdzKTtcbjE3MzM6XHRcdHJlcS1cdTAwM2VmbGFncyA9IChfX2ZvcmNlIGlvX3JlcV9mbGFnc190KSBzcWVfZmxhZ3M7XG4xNzM0Olx0XHRyZXEtXHUwMDNlY3FlLnVzZXJfZGF0YSA9IFJFQURfT05DRShzcWUtXHUwMDNldXNlcl9kYXRhKTtcbjE3MzU6XHRcdHJlcS1cdTAwM2VmaWxlID0gTlVMTDtcbjE3MzY6XHRcdHJlcS1cdTAwM2V0Y3R4ID0gY3VycmVudC1cdTAwM2Vpb191cmluZztcbjE3Mzc6XHRcdHJlcS1cdTAwM2VjYW5jZWxfc2VxX3NldCA9IGZhbHNlO1xuMTczODpcdFx0cmVxLVx1MDAzZWFzeW5jX2RhdGEgPSBOVUxMO1xuMTczOTpcdFxuMTc0MDpcdFx0aWYgKHVubGlrZWx5KHJlcS1cdTAwM2VvcGNvZGUgXHUwMDNlPSBJT1JJTkdfT1BfTEFTVCkpIHtcbjE3NDE6XHRcdFx0cmVxLVx1MDAzZW9wY29kZSA9IDA7XG4xNzQyOlx0XHRcdHJldHVybiBpb19pbml0X2ZhaWxfcmVxKHJlcSwgLUVJTlZBTCk7XG4xNzQzOlx0XHR9XG4xNzQ0Olx0XHRyZXEtXHUwMDNlb3Bjb2RlID0gYXJyYXlfaW5kZXhfbm9zcGVjKHJlcS1cdTAwM2VvcGNvZGUsIElPUklOR19PUF9MQVNUKTtcbjE3NDU6XHRcbjE3NDY6XHRcdGRlZiA9IFx1MDAyNmlvX2lzc3VlX2RlZnNbcmVxLVx1MDAzZW9wY29kZV07XG4xNzQ3Olx0XHRpZiAoZGVmLVx1MDAzZWlzXzEyOCBcdTAwMjZcdTAwMjYgIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9TUUUxMjgpKSB7XG4xNzQ4Olx0XHRcdC8qXG4xNzQ5Olx0XHRcdCAqIEEgMTI4YiBvcCBvbiBhIG5vbi0xMjhiIFNRIHJlcXVpcmVzIG1peGVkIFNRRSBzdXBwb3J0IGFzXG4xNzUwOlx0XHRcdCAqIHdlbGwgYXMgMiBjb250aWd1b3VzIGVudHJpZXMuXG4xNzUxOlx0XHRcdCAqL1xuMTc1MjpcdFx0XHRpZiAoIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9TUUVfTUlYRUQpIHx8ICpsZWZ0IFx1MDAzYyAyIHx8XG4xNzUzOlx0XHRcdCAgICAodW5zaWduZWQpKHNxZSAtIGN0eC1cdTAwM2VzcV9zcWVzKSBcdTAwM2U9IGN0eC1cdTAwM2VzcV9lbnRyaWVzIC0gMSlcbjE3NTQ6XHRcdFx0XHRyZXR1cm4gaW9faW5pdF9mYWlsX3JlcShyZXEsIC1FSU5WQUwpO1xuMTc1NTpcdFx0XHQvKlxuMTc1NjpcdFx0XHQgKiBBIDEyOGIgb3BlcmF0aW9uIG9uIGEgbWl4ZWQgU1EgdXNlcyB0d28gZW50cmllcywgc28gd2UgaGF2ZVxuMTc1NzpcdFx0XHQgKiB0byBpbmNyZW1lbnQgdGhlIGhlYWQgYW5kIGNhY2hlZCByZWZzLCBhbmQgZGVjcmVtZW50IHdoYXQmIzM5O3NcbjE3NTg6XHRcdFx0ICogbGVmdC5cbjE3NTk6XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDgxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIFJlcXVlc3QgTGlmZWN5Y2xlIGFuZCBGbGFnIE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIHJlcXVlc3QgbGlmZWN5Y2xlLCBzcGVjaWZpY2FsbHkgaG93IHdlIGhhbmRsZSByZXF1ZXN0cyBwdWxsZWQgZnJvbSB0aGUgY29udGV4dCBjYWNoZS4gSXQmIzM5O3MgdGltZSB0byB6ZXJvIGluIG9uIGhvdyB3ZSYjMzk7cmUgc2V0dGluZyBhbmQgY2xlYXJpbmcgdGhvc2UgYHJlcS0mZ3Q7Y3FlLmZsYWdzYCBiaXRzIHdoZW4gcmVjeWNsaW5nIHJlcXVlc3RzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgY2Fycnlpbmcgb3ZlciBhbnkgc3RhbGUgZmxhZ3MgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgZXJyb3JzIGRvd24gdGhlIGxpbmUuIFdlIGNhbiYjMzk7dCBoYXZlIGFueSByZW1uYW50cyBmcm9tIGEgcHJldmlvdXMgb3BlcmF0aW9uIGNvcnJ1cHRpbmcgdGhlIGN1cnJlbnQgb25lLiBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYSBmb3IgZW5zdXJpbmcgcmVxdWVzdCBpbnRlZ3JpdHkgYW5kIHByZXZlbnRpbmcgYW55IHN1YnRsZSwgaGFyZC10by1kZWJ1ZyBpc3N1ZXMgcmVsYXRlZCB0byBjb250ZXh0IHJldXNlLiBVbmRlcnN0YW5kaW5nIHdoZXJlIHRoZSBmbGFncyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHJlc2V0IGlzIHRoZSBrZXkgdG8gbWFuYWdpbmcgb3VyIHJlcXVlc3QgcmVzb3VyY2UgcmVzcG9uc2libHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3JlcV9hZGRfdG9fY2FjaGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5jPTE3ND1zdGF0aWMgaW5saW5lIHZvaWQgcmVxX2ZhaWxfbGlua19ub2RlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmVzKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTc5LVxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxODA6c3RhdGljIGlubGluZSB2b2lkIGlvX3JlcV9hZGRfdG9fY2FjaGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xODEte1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9OTY4PV9fY29sZCBib29sIF9faW9fYWxsb2NfcmVxX3JlZmlsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbi0tXG5pb191cmluZy9pb191cmluZy5jLTk4OS1cdHdoaWxlIChucl9yZXFzLS0pXG5pb191cmluZy9pb191cmluZy5jOjk5MDpcdFx0aW9fcmVxX2FkZF90b19jYWNoZShyZXFzW25yX3JlcXNdLCBjdHgpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy05OTEtXHRyZXR1cm4gdHJ1ZTtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTEwODU9c3RhdGljIHZvaWQgaW9fZnJlZV9iYXRjaF9saXN0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTEyMi1cdFx0bm9kZSA9IHJlcS1cdTAwM2Vjb21wX2xpc3QubmV4dDtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTEyMzpcdFx0aW9fcmVxX2FkZF90b19jYWNoZShyZXEsIGN0eCk7XG5pb191cmluZy9pb191cmluZy5jLTExMjQtXHR9IHdoaWxlIChub2RlKTtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTIwMTM9aW50IGlvX3N1Ym1pdF9zcWVzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBpbnQgbnIpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMDM5LVx0XHRpZiAodW5saWtlbHkoIWlvX2dldF9zcWUoY3R4LCBcdTAwMjZzcWUpKSkge1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMDQwOlx0XHRcdGlvX3JlcV9hZGRfdG9fY2FjaGUocmVxLCBjdHgpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMDQxLVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgwNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElPUG9sbCBSZXF1ZXN0IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgaW9fcHV0X2tidWZgIGlzIHJldHVybmluZyBhbiBgdTMyYCAob3IgdW5zaWduZWQgaW50KSB0aGF0IHJlcHJlc2VudHMgZmxhZ3MsIHBvdGVudGlhbGx5IGluY2x1ZGluZyBgSU9SSU5HX0NRRV9GX0JVRkZFUmAgd2l0aCBpdHMgYnVmZmVyIElELCBjcml0aWNhbCBmb3IgaW91cmluZyBvcGVyYXRpb25zLiBOb3csIGxvb2tpbmcgYXQgdGhlIGNvbnRleHQsIHNwZWNpZmljYWxseSB3aXRoaW4gYGlvX2RvX2lvcG9sbGAgd2hlbiBoYW5kbGluZyBhbiBpb3BvbGwgcmVxdWVzdCBjb21wbGV0aW9uLCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gaG93IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGByZXEtJmd0O2NxZS5mbGFnc2AgZmllbGQuIFByZXZpb3VzbHksIHRoZSBsaW5lIHdhcyBzZXR0aW5nIGByZXEtJmd0O2NxZS5mbGFnc2AgKmVxdWFsIHRvKiB0aGUgcmVzdWx0IG9mIGBpb19wdXRfa2J1ZmAuIFRoZSBwYXRjaCBjbGV2ZXJseSBzd2FwcyB0aGlzIHRvIGEgKmJpdHdpc2UgT1IqIG9wZXJhdGlvbiAoYHw9YCkuIFRoaXMgaXMgYSBrZXkgZGV0YWlsLiBUaGlzIG1lYW5zIHRoYXQgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyBhbnkgZXhpc3RpbmcgZmxhZ3MgaW4gYHJlcS0mZ3Q7Y3FlLmZsYWdzYCwgd2UmIzM5O3JlIG5vdyAqYWRkaW5nKiB0aGUgZmxhZ3MgcmV0dXJuZWQgYnkgYGlvX3B1dF9rYnVmYC4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHByZXNlcnZpbmcgZXhpc3RpbmcgZmxhZyBzZXR0aW5ncy4gVGhlIGBtYXgocmVxLSZndDtjcWUucmVzLCAwKWAgY2FsbCBpcyBjb3JyZWN0bHkgaGFuZGxpbmcgcG90ZW50aWFsIG5lZ2F0aXZlIHJlc3VsdHMuIEl0JiMzOTtzIGEgdHlwaWNhbCBhcHByb2FjaCwgYWx0aG91Z2ggaW4gdGhpcyBpbnN0YW5jZSwgaXQmIzM5O3MgYSBnb29kIGlkZWEgdG8gY29uZmlybSBpZiBgcmVxLSZndDtjcWUucmVzYCBjb3VsZCBldmVyIGdlbnVpbmVseSBiZSBuZWdhdGl2ZSBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGlvX3B1dF9rYnVmYCBpdHNlbGYsIHNvIEkgbmVlZCB0byBjaGVjayBpdHMgZGVmaW5pdGlvbiBhbmQgdmVyaWZ5IGV4YWN0bHkgaG93IGl0cyByZXR1cm4gdmFsdWUgaW50ZXJhY3RzIHdpdGggdGhlIGZsYWdzLiBUaGlzIHdpbGwgY2xhcmlmeSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCB3aGV0aGVyIHRoaXMgYXBwcm9hY2ggdG8gZmxhZ3MgbWFuYWdlbWVudCBpcyBzb3VuZCBpbiB0aGUgY3VycmVudCBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3B1dF9rYnVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW9fdXJpbmcuYz05NDg9dm9pZCBpb19yZXFfZGVmZXJfZmFpbGVkKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzMzIgcmVzKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTU1LVx0cmVxX3NldF9mYWlsKHJlcSk7XG5pb191cmluZy9pb191cmluZy5jOjk1NjpcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmVzLCBpb19wdXRfa2J1ZihyZXEsIHJlcywgTlVMTCkpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy05NTctXHRpZiAoZGVmLVx1MDAzZWZhaWwpXG4tLVxuaW9fdXJpbmcva2J1Zi5jPTM4MT1pbnQgaW9fYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbi0tXG5pb191cmluZy9rYnVmLmMtNDA2LVxuaW9fdXJpbmcva2J1Zi5jOjQwNzpzdGF0aWMgaW5saW5lIGJvb2wgX19pb19wdXRfa2J1Zl9yaW5nKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcva2J1Zi5jLTQwOC1cdFx0XHRcdCAgICAgIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsIGludCBsZW4sIGludCBucilcbi0tXG5pb191cmluZy9rYnVmLmMtNDIwLVxuaW9fdXJpbmcva2J1Zi5jOjQyMTp1bnNpZ25lZCBpbnQgX19pb19wdXRfa2J1ZnMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXG5pb191cmluZy9rYnVmLmMtNDIyLVx0XHRcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTQzMi1cbmlvX3VyaW5nL2tidWYuYzo0MzM6XHRpZiAoIV9faW9fcHV0X2tidWZfcmluZyhyZXEsIGJsLCBsZW4sIG5idWZzKSlcbmlvX3VyaW5nL2tidWYuYy00MzQtXHRcdHJldCB8PSBJT1JJTkdfQ1FFX0ZfQlVGX01PUkU7XG4tLVxuaW9fdXJpbmcva2J1Zi5oPTg3PXZvaWQgaW9fa2J1Zl9kcm9wX2xlZ2FjeShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSk7XG5pb191cmluZy9rYnVmLmgtODgtXG5pb191cmluZy9rYnVmLmg6ODk6dW5zaWduZWQgaW50IF9faW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxuaW9fdXJpbmcva2J1Zi5oLTkwLVx0XHRcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpO1xuLS1cbmlvX3VyaW5nL2tidWYuaD0xMTQ9c3RhdGljIGlubGluZSBib29sIGlvX2tidWZfcmVjeWNsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbi0tXG5pb191cmluZy9rYnVmLmgtMTI1LVxuaW9fdXJpbmcva2J1Zi5oOjEyNjpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb19wdXRfa2J1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IGxlbixcbmlvX3VyaW5nL2tidWYuaC0xMjctXHRcdFx0XHQgICAgICAgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibClcbi0tXG5pb191cmluZy9rYnVmLmgtMTMwLVx0XHRyZXR1cm4gMDtcbmlvX3VyaW5nL2tidWYuaDoxMzE6XHRyZXR1cm4gX19pb19wdXRfa2J1ZnMocmVxLCBibCwgbGVuLCAxKTtcbmlvX3VyaW5nL2tidWYuaC0xMzItfVxuaW9fdXJpbmcva2J1Zi5oLTEzMy1cbmlvX3VyaW5nL2tidWYuaDoxMzQ6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgbGVuLFxuaW9fdXJpbmcva2J1Zi5oLTEzNS1cdFx0XHRcdFx0c3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCwgaW50IG5idWZzKVxuLS1cbmlvX3VyaW5nL2tidWYuaC0xMzgtXHRcdHJldHVybiAwO1xuaW9fdXJpbmcva2J1Zi5oOjEzOTpcdHJldHVybiBfX2lvX3B1dF9rYnVmcyhyZXEsIGJsLCBsZW4sIG5idWZzKTtcbmlvX3VyaW5nL2tidWYuaC0xNDAtfVxuLS1cbmlvX3VyaW5nL25ldC5jPTQ5MT1zdGF0aWMgaW5saW5lIGJvb2wgaW9fc2VuZF9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtNDk5LVx0aWYgKCEoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpKSB7XG5pb191cmluZy9uZXQuYzo1MDA6XHRcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgc2VsLVx1MDAzZXZhbCwgc2VsLVx1MDAzZWJ1Zl9saXN0KTtcbmlvX3VyaW5nL25ldC5jLTUwMS1cdFx0Z290byBmaW5pc2g7XG4tLVxuaW9fdXJpbmcvbmV0LmMtNTAzLVxuaW9fdXJpbmcvbmV0LmM6NTA0Olx0Y2ZsYWdzID0gaW9fcHV0X2tidWZzKHJlcSwgc2VsLVx1MDAzZXZhbCwgc2VsLVx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLVx1MDAzZXZhbCkpO1xuaW9fdXJpbmcvbmV0LmMtNTA1LVxuLS1cbmlvX3VyaW5nL25ldC5jPTg1Mz1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtODc5LVxuaW9fdXJpbmcvbmV0LmM6ODgwOlx0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHRoaXNfcmV0KSk7XG5pb191cmluZy9uZXQuYy04ODEtXHRcdGlmIChzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfUkVUUlkpXG4tLVxuaW9fdXJpbmcvbmV0LmMtOTAxLVx0fSBlbHNlIHtcbmlvX3VyaW5nL25ldC5jOjkwMjpcdFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgc2VsLVx1MDAzZXZhbCwgc2VsLVx1MDAzZWJ1Zl9saXN0KTtcbmlvX3VyaW5nL25ldC5jLTkwMy1cdH1cbi0tXG5pb191cmluZy9ydy5jPTU2Mj12b2lkIGlvX3JlcV9yd19jb21wbGV0ZShzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbi0tXG5pb191cmluZy9ydy5jLTU2OC1cdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IChSRVFfRl9CVUZGRVJfU0VMRUNURUR8UkVRX0ZfQlVGRkVSX1JJTkcpKVxuaW9fdXJpbmcvcncuYzo1Njk6XHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLVx1MDAzZWNxZS5yZXMsIDApLCBOVUxMKTtcbmlvX3VyaW5nL3J3LmMtNTcwLVxuLS1cbmlvX3VyaW5nL3J3LmM9NjQwPXN0YXRpYyBpbnQga2lvY2JfZG9uZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3NpemVfdCByZXQsXG4tLVxuaW9fdXJpbmcvcncuYy02NTctXHRcdGlmIChzZWwpXG5pb191cmluZy9ydy5jOjY1ODpcdFx0XHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHJldCwgc2VsLVx1MDAzZWJ1Zl9saXN0KTtcbmlvX3VyaW5nL3J3LmMtNjU5LVx0XHRpb19yZXFfc2V0X3JlcyhyZXEsIGZpbmFsX3JldCwgY2ZsYWdzKTtcbi0tXG5pb191cmluZy9ydy5jPTEwMzI9aW50IGlvX3JlYWRfbXNob3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9ydy5jLTEwNjctXHR9IGVsc2UgaWYgKCEocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9BUE9MTF9NVUxUSVNIT1QpKSB7XG5pb191cmluZy9ydy5jOjEwNjg6XHRcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgcmV0LCBzZWwuYnVmX2xpc3QpO1xuaW9fdXJpbmcvcncuYy0xMDY5LVx0fSBlbHNlIHtcbi0tXG5pb191cmluZy9ydy5jLTEwNzUtXHRcdCAqL1xuaW9fdXJpbmcvcncuYzoxMDc2Olx0XHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHJldCwgc2VsLmJ1Zl9saXN0KTtcbmlvX3VyaW5nL3J3LmMtMTA3Ny1cdFx0cnctXHUwMDNlbGVuID0gMDsgLyogc2ltaWxhcmx5IHRvIGFib3ZlLCByZXNldCBsZW4gdG8gMCAqL1xuLS1cbmlvX3VyaW5nL3J3LmM9MTMxOT1pbnQgaW9fZG9faW9wb2xsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGZvcmNlX25vbnNwaW4pXG4tLVxuaW9fdXJpbmcvcncuYy0xMzc1LVx0XHRucl9ldmVudHMmIzQzOyYjNDM7O1xuaW9fdXJpbmcvcncuYzoxMzc2Olx0XHRyZXEtXHUwMDNlY3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS1cdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XG5pb191cmluZy9ydy5jLTEzNzctXHRcdGlmICghaW9faXNfdXJpbmdfY21kKHJlcSkpXG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmM9Mzg3PWJvb2wgaW9fdXJpbmdfbXNob3RfY21kX3Bvc3RfY3FlKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbi0tXG5pb191cmluZy91cmluZ19jbWQuYy0zOTYtXHRpZiAoc2VsLVx1MDAzZXZhbCBcdTAwM2UgMCkge1xuaW9fdXJpbmcvdXJpbmdfY21kLmM6Mzk3Olx0XHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHNlbC1cdTAwM2V2YWwsIHNlbC1cdTAwM2VidWZfbGlzdCk7XG5pb191cmluZy91cmluZ19jbWQuYy0zOTgtXHRcdGlmIChpb19yZXFfcG9zdF9jcWUocmVxLCBzZWwtXHUwMDNldmFsLCBjZmxhZ3MgfCBJT1JJTkdfQ1FFX0ZfTU9SRSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzY4CgkJCQkJCQlvdXRwdXQ6IDIwNwoJCQkJCQkJdGhvdWdodHM6IDMzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYGlvX2RvX2lvcG9sbGAgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGlvX2RvX2lvcG9sbGAsIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgc3dpdGNoaW5nIGZyb20gYHJlcS0mZ3Q7Y3FlLmZsYWdzID0gaW9fcHV0X2tidWYoLi4uKWAgdG8gYHJlcS0mZ3Q7Y3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKC4uLilgLiBFc3NlbnRpYWxseSwgd2UmIzM5O3JlIG5vdyBwcmVzZXJ2aW5nIGFueSBleGlzdGluZyBmbGFncyB3aXRoaW4gYHJlcS0mZ3Q7Y3FlLmZsYWdzYCB3aGVuIGFkZGluZyBidWZmZXIgZmxhZ3MgZHVyaW5nIGlvcG9sbCBjb21wbGV0aW9uLiBUaGUgY3J1Y2lhbCB0aGluZyBoZXJlIGlzIG1ha2luZyBzdXJlIHRoYXQgd2UgYXJlbiYjMzk7dCBpbmFkdmVydGVudGx5IHdpcGluZyBvdXQgb3RoZXIsIHBvc3NpYmx5IGltcG9ydGFudCwgZmxhZ3MgdGhhdCBtaWdodCBhbHJlYWR5IGJlIHNldC4gVGhpcyBpcyBhIGNvbW1vbiBhbmQgdXN1YWxseSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGJ1ZyBmaXguCgpOb3csIHRoZSBLTVNBTiBhcHBsaWNhYmlsaXR5LiBEb2VzIHRoaXMgcGF0Y2ggb3BlbiBhbnkgZG9vcnMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBMZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LiBJJiMzOTttIG5vdCBzZWVpbmcgYW55IGtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbnMgdGhhdCBhcmUgdW5pbml0aWFsaXplZCBkdWUgdG8gdGhpcyBjaGFuZ2UuIE5vIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcyBvciBmaWVsZHMgYXJlIGludHJvZHVjZWQsIHRoYXQgd291bGQgYmUgYSByZWQgZmxhZy4gVGhlIGByZXEtJmd0O2NxZS5mbGFnc2AgZmllbGQgaXRzZWxmIGlzIGluaXRpYWxpemVkIGFuZCBkZWZpbmVkIGZyb20gdGhlIG1vbWVudCB0aGUgYHJlcWAgaXMgY3JlYXRlZC4gVGhlIGZpeCBpcyBhIHNpbXBsZSwgc2luZ2xlIGNoYXJhY3RlciBjaGFuZ2UsIHN3YXBwaW5nIGFuIGFzc2lnbm1lbnQgYD1gIHdpdGggYSBiaXR3aXNlIE9SIG9wZXJhdG9yIGB8PWAgb24gYW4gaW50ZWdlciBmaWVsZCAoYHJlcS0mZ3Q7Y3FlLmZsYWdzYCkuIFRoaXMgbWVhbnMgd2UgYXJlbiYjMzk7dCBjaGFuZ2luZyB0aGUgZnVuZGFtZW50YWwgbmF0dXJlIG9mIGhvdyB0aGlzIGZpZWxkIGlzIGhhbmRsZWQ7IGp1c3QgbW9kaWZ5aW5nIHRoZSB1cGRhdGUgcHJvY2Vzcy4gVGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBkYXRhIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBicmFuY2hpbmcgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgbm8gbWlzc2luZyBgbWVtc2V0YCBjYWxscywgd2hpY2ggYXJlIGFsbCB1c3VhbCBLTVNBTiBjb25jZXJucy4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGZpbmFsIHJldmlldyBvZiB0aGUgY3JpdGVyaWEuIEkgbmVlZCB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgY2FsbCBpdCBleGFjdGx5IG9uY2UuIFRoZSBkb2N1bWVudGF0aW9uIGVtcGhhc2l6ZXMgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYFRydWVgICpvbmx5KiBpZiB0aGVyZSBhcmUgY2hhbmdlcyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU2luY2UgdGhhdCYjMzk7cyBjbGVhcmx5IG5vdCB0aGUgY2FzZSBoZXJlLCBJJiMzOTttIGNvbmZpZGVudC4gSSBzaG91bGQgYWxzbyBiZSBjbGVhciBpbiBteSBgS01TQU5SZWFzb25pbmdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaW9fZG9faW9wb2xsKClgIGluIGBpb191cmluZy9ydy5jYCBieSBjaGFuZ2luZyBgcmVxLVx1MDAzZWNxZS5mbGFncyA9IGlvX3B1dF9rYnVmKC4uLilgIHRvIGByZXEtXHUwMDNlY3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKC4uLilgLiBUaGlzIGlzIGEgb25lLWxpbmUgbG9naWNhbCBmaXggZW5zdXJpbmcgdGhhdCBmbGFncyBhbHJlYWR5IHNldCBvbiBgcmVxLVx1MDAzZWNxZS5mbGFnc2AgKHN1Y2ggYXMgYElPUklOR19DUUVfRl8zMmApIGFyZSBwcmVzZXJ2ZWQgd2hlbiBhcHBlbmRpbmcgY29tcGxldGlvbiBmbGFncyBmb3IgcHJvdmlkZWQgYnVmZmVyIHJlbGVhc2UgZHVyaW5nIElPIHBvbGxpbmcuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGgvYm91bmRhcnkgY2FsY3VsYXRpb25zIGluIHdheXMgdGhhdCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgZG9lcyBub3QgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgZ2VuZXJhbCB0ZXN0aW5nIHN1ZmZpY2UgZm9yIHZlcmlmeWluZyBpb191cmluZyByZXF1ZXN0IGxpZmVjeWNsZSBjb3JyZWN0bmVzcywgYW5kIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpb19kb19pb3BvbGwoKWAgaW4gYGlvX3VyaW5nL3J3LmNgIGJ5IGNoYW5naW5nIGByZXEtXHUwMDNlY3FlLmZsYWdzID0gaW9fcHV0X2tidWYoLi4uKWAgdG8gYHJlcS1cdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYoLi4uKWAuIFRoaXMgaXMgYSBvbmUtbGluZSBsb2dpY2FsIGZpeCBlbnN1cmluZyB0aGF0IGZsYWdzIGFscmVhZHkgc2V0IG9uIGByZXEtXHUwMDNlY3FlLmZsYWdzYCAoc3VjaCBhcyBgSU9SSU5HX0NRRV9GXzMyYCkgYXJlIHByZXNlcnZlZCB3aGVuIGFwcGVuZGluZyBjb21wbGV0aW9uIGZsYWdzIGZvciBwcm92aWRlZCBidWZmZXIgcmVsZWFzZSBkdXJpbmcgSU8gcG9sbGluZy5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZGFyeSBjYWxjdWxhdGlvbnMgaW4gd2F5cyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBnZW5lcmFsIHRlc3Rpbmcgc3VmZmljZSBmb3IgdmVyaWZ5aW5nIGlvX3VyaW5nIHJlcXVlc3QgbGlmZWN5Y2xlIGNvcnJlY3RuZXNzLCBhbmQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjowMC43MDM4ODU5NjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjY3ODE0MDM3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX2RvX2lvcG9sbFwiLFxuICAgIFwiaW9faW9wb2xsX2NoZWNrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaW9fZG9faW9wb2xsKClgIGluIGBpb191cmluZy9ydy5jYCBieSBjaGFuZ2luZyBgcmVxLVxcdTAwM2VjcWUuZmxhZ3MgPSBpb19wdXRfa2J1ZiguLi4pYCB0byBgcmVxLVxcdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYoLi4uKWAuIFRoaXMgaXMgYSBvbmUtbGluZSBsb2dpY2FsIGZpeCBlbnN1cmluZyB0aGF0IGZsYWdzIGFscmVhZHkgc2V0IG9uIGByZXEtXFx1MDAzZWNxZS5mbGFnc2AgKHN1Y2ggYXMgYElPUklOR19DUUVfRl8zMmApIGFyZSBwcmVzZXJ2ZWQgd2hlbiBhcHBlbmRpbmcgY29tcGxldGlvbiBmbGFncyBmb3IgcHJvdmlkZWQgYnVmZmVyIHJlbGVhc2UgZHVyaW5nIElPIHBvbGxpbmcuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZGFyeSBjYWxjdWxhdGlvbnMgaW4gd2F5cyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBnZW5lcmFsIHRlc3Rpbmcgc3VmZmljZSBmb3IgdmVyaWZ5aW5nIGlvX3VyaW5nIHJlcXVlc3QgbGlmZWN5Y2xlIGNvcnJlY3RuZXNzLCBhbmQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGlvX2RvX2lvcG9sbCgpIHRvIGJpdHdpc2UtT1IgdGhlIGZsYWdzIHJldHVybmVkIGJ5IGlvX3B1dF9rYnVmKCkgaW50byByZXEtXFx1MDAzZWNxZS5mbGFncyBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIHRoZW0sIHByZXZlbnRpbmcgdGhlIGxvc3Mgb2YgZXhpc3RpbmcgQ1FFIGZsYWdzIGR1cmluZyBwb2xsZWQgSS9PIGNvbXBsZXRpb24uIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBpb191cmluZyBjb21wbGV0aW9uIGxvZ2ljLCB3YXJyYW50aW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjAwLjcwMzg5MDc1M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIyMTcyODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWRjMWZiYzkxMTQ1MWYyZTk3ZjdiMDQ3YTVjN2U5MTkyYjBlOTVhM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDIwOjI1OjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3J3LmMgYi9pb191cmluZy9ydy5jXFxuaW5kZXggOTUxMDZkZDFkN2ViOS4uZjJiYmIwYjFjMzBhMSAxMDA2NDRcXG4tLS0gYS9pb191cmluZy9ydy5jXFxuKysrIGIvaW9fdXJpbmcvcncuY1xcbkBAIC0xMzczLDcgKzEzNzMsNyBAQCBpbnQgaW9fZG9faW9wb2xsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGZvcmNlX25vbnNwaW4pXFxuIFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZyZXEtXFx1MDAzZWlvcG9sbF9ub2RlKTtcXG4gXFx0XFx0d3FfbGlzdF9hZGRfdGFpbChcXHUwMDI2cmVxLVxcdTAwM2Vjb21wX2xpc3QsIFxcdTAwMjZjdHgtXFx1MDAzZXN1Ym1pdF9zdGF0ZS5jb21wbF9yZXFzKTtcXG4gXFx0XFx0bnJfZXZlbnRzKys7XFxuLVxcdFxcdHJlcS1cXHUwMDNlY3FlLmZsYWdzID0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLVxcdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XFxuK1xcdFxcdHJlcS1cXHUwMDNlY3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS1cXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO1xcbiBcXHRcXHRpZiAoIWlvX2lzX3VyaW5nX2NtZChyZXEpKVxcbiBcXHRcXHRcXHRpb19yZXFfcndfY2xlYW51cChyZXEsIDApO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjAxLjEyNjc4NzU3NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzI4NjI2NjcyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19kb19pb3BvbGxcIixcbiAgICBcImlvX2lvcG9sbF9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGlvX2RvX2lvcG9sbCgpIHRvIGJpdHdpc2UtT1IgdGhlIGZsYWdzIHJldHVybmVkIGJ5IGlvX3B1dF9rYnVmKCkgaW50byByZXEtXFx1MDAzZWNxZS5mbGFncyBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIHRoZW0sIHByZXZlbnRpbmcgdGhlIGxvc3Mgb2YgZXhpc3RpbmcgQ1FFIGZsYWdzIGR1cmluZyBwb2xsZWQgSS9PIGNvbXBsZXRpb24uIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBpb191cmluZyBjb21wbGV0aW9uIGxvZ2ljLCB3YXJyYW50aW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWRjMWZiYzkxMTQ1MWYyZTk3ZjdiMDQ3YTVjN2U5MTkyYjBlOTVhM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjA6MjU6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9ydy5jIGIvaW9fdXJpbmcvcncuY1xuaW5kZXggOTUxMDZkZDFkN2ViOS4uZjJiYmIwYjFjMzBhMSAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3J3LmNcbisrKyBiL2lvX3VyaW5nL3J3LmNcbkBAIC0xMzczLDcgKzEzNzMsNyBAQCBpbnQgaW9fZG9faW9wb2xsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGZvcmNlX25vbnNwaW4pXG4gXHRcdGxpc3RfZGVsKFx1MDAyNnJlcS1cdTAwM2Vpb3BvbGxfbm9kZSk7XG4gXHRcdHdxX2xpc3RfYWRkX3RhaWwoXHUwMDI2cmVxLVx1MDAzZWNvbXBfbGlzdCwgXHUwMDI2Y3R4LVx1MDAzZXN1Ym1pdF9zdGF0ZS5jb21wbF9yZXFzKTtcbiBcdFx0bnJfZXZlbnRzKys7XG4tXHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO1xuK1x0XHRyZXEtXHUwMDNlY3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS1cdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XG4gXHRcdGlmICghaW9faXNfdXJpbmdfY21kKHJlcSkpXG4gXHRcdFx0aW9fcmVxX3J3X2NsZWFudXAocmVxLCAwKTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjAxLjEyNjc5MDUwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1NDgwMzcwMTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgdGhlIGlvX3VyaW5nIFBhdGNoIGZvciBGdXp6aW5nIHdpdGggc3l6a2FsbGVyKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkndmUgZ290IGEgbmV3IHBhdGNoIGZvciB0aGUgTGludXgga2VybmVsIHRoYXQgSSBuZWVkIHRvIGFzc2VzcyBmb3IgZnV6emluZyBwb3RlbnRpYWwgdXNpbmcgc3l6a2FsbGVyLiBUaGlzIGlzIHByZXR0eSBzdGFuZGFyZCBzdHVmZiDigJMgcGFydCBvZiB0aGUgcmVndWxhciBrZXJuZWwgcmV2aWV3IGFuZCB0cmlhZ2UgcHJvY2Vzcywgd2hldGhlciBpdCdzIGJlbmlnbiBkZXZlbG9wZXIgUUEgb3Igc2VjdXJpdHkgZW5naW5lZXJpbmcuIFRoZSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGEganVpY3kgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5JJ3ZlIGdvdCB0aGUgcGF0Y2ggaW4gZnJvbnQgb2YgbWU6IGBjb21taXQgMWRjMWZiYzkxMTQ1MWYyZTk3ZjdiMDQ3YTVjN2U5MTkyYjBlOTVhM2AuIExvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBgaW9fdXJpbmcvcncuY2AuIFNwZWNpZmljYWxseSwgdGhlIGRpZmYgbW9kaWZpZXMgYSBsaW5lIGluIGBpb19kb19pb3BvbGxgOlxuXG5gYGBkaWZmXG4tXHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO1xuK1x0XHRyZXEtXHUwMDNlY3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS1cdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XG5gYGBcblxuT2theSwgc28gdGhleSdyZSBjaGFuZ2luZyB0aGUgYXNzaWdubWVudCBvZiBgcmVxLVx1MDAzZWNxZS5mbGFnc2AgdG8gYSBiaXR3aXNlIE9SLiBUaGlzIGlzIHRoZSBrZXkgbGluZSB0byBpbnZlc3RpZ2F0ZS4gTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gZGl2ZSBkZWVwZXIuIEknbSBnb2luZyB0byB1c2UgbXkgc3RhbmRhcmQgdG9vbHMg4oCTIGxpa2VseSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAg4oCTIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gd2hhdCdzIGdvaW5nIG9uIGluIGBpb191cmluZy9ydy5jYCBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaW9fcHV0X2tidWZgIGRvZXMsIGhvdyBgcmVxLVx1MDAzZWNxZS5mbGFnc2AgaXMgdXNlZCwgYW5kIHdoYXQgZWZmZWN0IHRoaXMgY2hhbmdlIG1pZ2h0IGhhdmUgb24gdGhlIG92ZXJhbGwgZmxvdy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBjaGFuZ2UgYWZmZWN0cyBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYm91bmRhcnkgY29uZGl0aW9ucywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjkzMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjE2LjYwNzE2MzIyOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL3J3LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM1MDpcXHRcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9IWUJSSURfSU9QT0xMKVxcbjEzNTE6XFx0XFx0XFx0XFx0cmV0ID0gaW9fdXJpbmdfaHlicmlkX3BvbGwocmVxLCBcXHUwMDI2aW9iLCBwb2xsX2ZsYWdzKTtcXG4xMzUyOlxcdFxcdFxcdGVsc2VcXG4xMzUzOlxcdFxcdFxcdFxcdHJldCA9IGlvX3VyaW5nX2NsYXNzaWNfcG9sbChyZXEsIFxcdTAwMjZpb2IsIHBvbGxfZmxhZ3MpO1xcbjEzNTQ6XFx0XFxuMTM1NTpcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpXFxuMTM1NjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzNTc6XFx0XFx0XFx0ZWxzZSBpZiAocmV0KVxcbjEzNTg6XFx0XFx0XFx0XFx0cG9sbF9mbGFncyB8PSBCTEtfUE9MTF9PTkVTSE9UO1xcbjEzNTk6XFx0XFxuMTM2MDpcXHRcXHRcXHQvKiBpb3BvbGwgbWF5IGhhdmUgY29tcGxldGVkIGN1cnJlbnQgcmVxICovXFxuMTM2MTpcXHRcXHRcXHRpZiAoIXJxX2xpc3RfZW1wdHkoXFx1MDAyNmlvYi5yZXFfbGlzdCkgfHxcXG4xMzYyOlxcdFxcdFxcdCAgICBSRUFEX09OQ0UocmVxLVxcdTAwM2Vpb3BvbGxfY29tcGxldGVkKSlcXG4xMzYzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEzNjQ6XFx0XFx0fVxcbjEzNjU6XFx0XFxuMTM2NjpcXHRcXHRpZiAoIXJxX2xpc3RfZW1wdHkoXFx1MDAyNmlvYi5yZXFfbGlzdCkpXFxuMTM2NzpcXHRcXHRcXHRpb2IuY29tcGxldGUoXFx1MDAyNmlvYik7XFxuMTM2ODpcXHRcXG4xMzY5OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHRtcCwgXFx1MDAyNmN0eC1cXHUwMDNlaW9wb2xsX2xpc3QsIGlvcG9sbF9ub2RlKSB7XFxuMTM3MDpcXHRcXHRcXHQvKiBvcmRlciB3aXRoIGlvX2NvbXBsZXRlX3J3X2lvcG9sbCgpLCBlLmcuIC1cXHUwMDNlcmVzdWx0IHVwZGF0ZXMgKi9cXG4xMzcxOlxcdFxcdFxcdGlmICghc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2cmVxLVxcdTAwM2Vpb3BvbGxfY29tcGxldGVkKSlcXG4xMzcyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEzNzM6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnJlcS1cXHUwMDNlaW9wb2xsX25vZGUpO1xcbjEzNzQ6XFx0XFx0XFx0d3FfbGlzdF9hZGRfdGFpbChcXHUwMDI2cmVxLVxcdTAwM2Vjb21wX2xpc3QsIFxcdTAwMjZjdHgtXFx1MDAzZXN1Ym1pdF9zdGF0ZS5jb21wbF9yZXFzKTtcXG4xMzc1OlxcdFxcdFxcdG5yX2V2ZW50cysrO1xcbjEzNzY6XFx0XFx0XFx0cmVxLVxcdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLVxcdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XFxuMTM3NzpcXHRcXHRcXHRpZiAoIWlvX2lzX3VyaW5nX2NtZChyZXEpKVxcbjEzNzg6XFx0XFx0XFx0XFx0aW9fcmVxX3J3X2NsZWFudXAocmVxLCAwKTtcXG4xMzc5OlxcdFxcdH1cXG4xMzgwOlxcdFxcdGlmIChucl9ldmVudHMpXFxuMTM4MTpcXHRcXHRcXHRfX2lvX3N1Ym1pdF9mbHVzaF9jb21wbGV0aW9ucyhjdHgpO1xcbjEzODI6XFx0XFx0cmV0dXJuIG5yX2V2ZW50cztcXG4xMzgzOlxcdH1cXG4xMzg0OlxcdFxcbjEzODU6XFx0dm9pZCBpb19yd19jYWNoZV9mcmVlKGNvbnN0IHZvaWQgKmVudHJ5KVxcbjEzODY6XFx0e1xcbjEzODc6XFx0XFx0c3RydWN0IGlvX2FzeW5jX3J3ICpydyA9IChzdHJ1Y3QgaW9fYXN5bmNfcncgKikgZW50cnk7XFxuMTM4ODpcXHRcXG4xMzg5OlxcdFxcdGlvX3ZlY19mcmVlKFxcdTAwMjZydy1cXHUwMDNldmVjKTtcXG4xMzkwOlxcdFxcdGtmcmVlKHJ3KTtcXG4xMzkxOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MTYuNjA3MjU5NTU5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk3OTY3NzI1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBpb191cmluZyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0aGlzIHNvcnRlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uKHMpIHRoYXQgZW5hYmxlIGlvX3VyaW5nLCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgYGlvX2RvX2lvcG9sbGAgZmVhdHVyZS4gSSdtIHByZXR0eSBzdXJlIGl0J3MgY29udHJvbGxlZCB0aHJvdWdoIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgc28gSSBzaG91bGQgYmUgYWJsZSB0byB0cmFjayBpdCBkb3duIGluIEtjb25maWcuIFRoZSBzb3VyY2UgY29kZSBpcyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gTGV0IG1lIGhlYWQgdGhlcmUgYW5kIHNlZSB3aGF0J3Mgd2hhdC4gU2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0ODYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjE4LjU4NjkzOTE1NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI2MTU3ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU9fVVJJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzMwIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5pb191cmluZy9LY29uZmlnLTUtXFxuaW9fdXJpbmcvS2NvbmZpZzo2OmNvbmZpZyBJT19VUklOR19aQ1JYXFxuaW9fdXJpbmcvS2NvbmZpZy03LVxcdGRlZl9ib29sIHlcXG5pb191cmluZy9LY29uZmlnOjg6XFx0ZGVwZW5kcyBvbiBJT19VUklOR1xcbmlvX3VyaW5nL0tjb25maWctOS1cXHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cXG5pb191cmluZy9LY29uZmlnOjEzOmNvbmZpZyBJT19VUklOR19CUEZcXG5pb191cmluZy9LY29uZmlnLTE0LVxcdGRlZl9ib29sIHlcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctMTctXFxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xcbmlvX3VyaW5nL0tjb25maWctMTktXFx0ZGVmX2Jvb2wgeVxcbmlvX3VyaW5nL0tjb25maWc6MjA6XFx0ZGVwZW5kcyBvbiBJT19VUklOR1xcbmlvX3VyaW5nL0tjb25maWctMjEtXFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUIFxcdTAwMjZcXHUwMDI2IERFQlVHX0lORk9fQlRGXFxuLS1cXG5pb191cmluZy9NYWtlZmlsZT03PWVuZGlmXFxuaW9fdXJpbmcvTWFrZWZpbGUtOC1cXG5pb191cmluZy9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19JT19VUklORylcXHRcXHQrPSBpb191cmluZy5vIG9wZGVmLm8ga2J1Zi5vIHJzcmMubyBub3RpZi5vIFxcXFxcXG5pb191cmluZy9NYWtlZmlsZS0xMC1cXHRcXHRcXHRcXHRcXHR0Y3R4Lm8gZmlsZXRhYmxlLm8gcncubyBwb2xsLm8gXFxcXFxcbi0tXFxuaW9fdXJpbmcvTWFrZWZpbGUtMTgtXFxuaW9fdXJpbmcvTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX0lPX1VSSU5HX1pDUlgpXFx0Kz0gemNyeC5vXFxuaW9fdXJpbmcvTWFrZWZpbGUtMjAtb2JqLSQoQ09ORklHX0lPX1dRKVxcdFxcdCs9IGlvLXdxLm9cXG4tLVxcbmlvX3VyaW5nL01ha2VmaWxlPTI1PW9iai0kKENPTkZJR19QUk9DX0ZTKSArPSBmZGluZm8ub1xcbmlvX3VyaW5nL01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19JT19VUklOR19NT0NLX0ZJTEUpICs9IG1vY2tfZmlsZS5vXFxuaW9fdXJpbmcvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0lPX1VSSU5HX0JQRikgKz0gYnBmX2ZpbHRlci5vXFxuaW9fdXJpbmcvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0lPX1VSSU5HX0JQRl9PUFMpICs9IGJwZi1vcHMub1xcbi0tXFxuaW9fdXJpbmcvYWR2aXNlLmM9NTE9aW50IGlvX21hZHZpc2Uoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL2FkdmlzZS5jLTU2LVxcbmlvX3VyaW5nL2FkdmlzZS5jOjU3OlxcdFdBUk5fT05fT05DRShpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spO1xcbmlvX3VyaW5nL2FkdmlzZS5jLTU4LVxcbi0tXFxuaW9fdXJpbmcvYWR2aXNlLmM9OTY9aW50IGlvX2ZhZHZpc2Uoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL2FkdmlzZS5jLTEwMC1cXG5pb191cmluZy9hZHZpc2UuYzoxMDE6XFx0V0FSTl9PTl9PTkNFKGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSyBcXHUwMDI2XFx1MDAyNiBpb19mYWR2aXNlX2ZvcmNlX2FzeW5jKGZhKSk7XFxuaW9fdXJpbmcvYWR2aXNlLmMtMTAyLVxcbi0tXFxuaW9fdXJpbmcvYnBmLW9wcy5oPTEzPXN0cnVjdCBpb191cmluZ19icGZfb3BzIHtcXG4tLVxcbmlvX3VyaW5nL2JwZi1vcHMuaC0xOS1cXG5pb191cmluZy9icGYtb3BzLmg6MjA6I2lmZGVmIENPTkZJR19JT19VUklOR19CUEZfT1BTXFxuaW9fdXJpbmcvYnBmLW9wcy5oLTIxLXZvaWQgaW9fdW5yZWdpc3Rlcl9icGZfb3BzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KTtcXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYz0yNjY9c3RhdGljIHN0cnVjdCBpb19icGZfZmlsdGVycyAqaW9fYnBmX2ZpbHRlcl9jb3coc3RydWN0IGlvX3Jlc3RyaWN0aW9uICpzcmMpXFxuLS1cXG5pb191cmluZy9icGZfZmlsdGVyLmMtMzA5LVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYzozMTA6I2RlZmluZSBJT19VUklOR19CUEZfRklMVEVSX0ZMQUdTXFx0KElPX1VSSU5HX0JQRl9GSUxURVJfREVOWV9SRVNUIHwgXFxcXFxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYzozMTE6XFx0XFx0XFx0XFx0XFx0IElPX1VSSU5HX0JQRl9GSUxURVJfU1pfU1RSSUNUKVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy0zMTItXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jPTMxMz1zdGF0aWMgaW50IGlvX2JwZl9maWx0ZXJfaW1wb3J0KHN0cnVjdCBpb191cmluZ19icGYgKnJlZyxcXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy0zMjAtXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jOjMyMTpcXHRpZiAocmVnLVxcdTAwM2VjbWRfdHlwZSAhPSBJT19VUklOR19CUEZfQ01EX0ZJTFRFUilcXG5pb191cmluZy9icGZfZmlsdGVyLmMtMzIyLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTMyNy1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5pb191cmluZy9icGZfZmlsdGVyLmM6MzI4OlxcdGlmIChyZWctXFx1MDAzZWZpbHRlci5mbGFncyBcXHUwMDI2IH5JT19VUklOR19CUEZfRklMVEVSX0ZMQUdTKVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy0zMjktXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5pb191cmluZy9icGZfZmlsdGVyLmMtMzQ0LVxcdC8qIHNpemUgZGlmZmVycywgZmFpbCBpbiBzdHJpY3QgbW9kZSAqL1xcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYzozNDU6XFx0ZWxzZSBpZiAocmVnLVxcdTAwM2VmaWx0ZXIuZmxhZ3MgXFx1MDAyNiBJT19VUklOR19CUEZfRklMVEVSX1NaX1NUUklDVClcXG5pb191cmluZy9icGZfZmlsdGVyLmMtMzQ2LVxcdFxcdHJldCA9IC1FTVNHU0laRTtcXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYz0zNTk9aW50IGlvX3JlZ2lzdGVyX2JwZl9maWx0ZXIoc3RydWN0IGlvX3Jlc3RyaWN0aW9uICpyZXMsXFxuLS1cXG5pb191cmluZy9icGZfZmlsdGVyLmMtNDMzLVxcdC8qXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jOjQzNDpcXHQgKiBJZiBJT19VUklOR19CUEZfRklMVEVSX0RFTllfUkVTVCBpcyBzZXQsIGZpbGwgYW55IHVucmVnaXN0ZXJlZFxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy00MzUtXFx0ICogb3Bjb2RlIHdpdGggdGhlIGR1bW15IGZpbHRlci4gVGhhdCB3aWxsIGNhdXNlIHRoZW0gdG8gYmUgZGVuaWVkLlxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy00MzYtXFx0ICovXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jOjQzNzpcXHRpZiAocmVnLmZpbHRlci5mbGFncyBcXHUwMDI2IElPX1VSSU5HX0JQRl9GSUxURVJfREVOWV9SRVNUKSB7XFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTQzOC1cXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIElPUklOR19PUF9MQVNUOyBpKyspIHtcXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oOjI6I2lmbmRlZiBJT19VUklOR19CUEZfRklMVEVSX0hcXG5pb191cmluZy9icGZfZmlsdGVyLmg6MzojZGVmaW5lIElPX1VSSU5HX0JQRl9GSUxURVJfSFxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC00LVxcbi0tXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTYtXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oOjc6I2lmZGVmIENPTkZJR19JT19VUklOR19CUEZcXG5pb191cmluZy9icGZfZmlsdGVyLmgtOC1cXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaD00Mj1zdGF0aWMgaW5saW5lIHZvaWQgaW9fYnBmX2ZpbHRlcl9jbG9uZShzdHJ1Y3QgaW9fcmVzdHJpY3Rpb24gKmRzdCxcXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC00NS19XFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oOjQ2OiNlbmRpZiAvKiBDT05GSUdfSU9fVVJJTkdfQlBGICovXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTQ3LVxcbi0tXFxuaW9fdXJpbmcvY21kX25ldC5jPTI1PXN0YXRpYyBpbmxpbmUgaW50IGlvX3VyaW5nX2NtZF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5pb191cmluZy9jbWRfbmV0LmMtMjktXFx0Y29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlID0gY21kLVxcdTAwM2VzcWU7XFxuaW9fdXJpbmcvY21kX25ldC5jOjMwOlxcdGJvb2wgY29tcGF0ID0gISEoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX0NPTVBBVCk7XFxuaW9fdXJpbmcvY21kX25ldC5jLTMxLVxcdGludCBvcHRsZW4sIG9wdG5hbWUsIGxldmVsLCBlcnI7XFxuLS1cXG5pb191cmluZy9jbWRfbmV0LmM9NTI9c3RhdGljIGlubGluZSBpbnQgaW9fdXJpbmdfY21kX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbmlvX3VyaW5nL2NtZF9uZXQuYy01Ni1cXHRjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUgPSBjbWQtXFx1MDAzZXNxZTtcXG5pb191cmluZy9jbWRfbmV0LmM6NTc6XFx0Ym9vbCBjb21wYXQgPSAhIShpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfQ09NUEFUKTtcXG5pb191cmluZy9jbWRfbmV0LmMtNTgtXFx0aW50IG9wdG5hbWUsIG9wdGxlbiwgbGV2ZWw7XFxuLS1cXG5pb191cmluZy9jbWRfbmV0LmM9MTA0PXN0YXRpYyBpbnQgaW9fdXJpbmdfY21kX3RpbWVzdGFtcChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxuaW9fdXJpbmcvY21kX25ldC5jLTExMy1cXG5pb191cmluZy9jbWRfbmV0LmM6MTE0OlxcdGlmICghKGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9DUUUzMikpXFxuaW9fdXJpbmcvY21kX25ldC5jLTExNS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmlvX3VyaW5nL2Vwb2xsLmM9NTE9aW50IGlvX2Vwb2xsX2N0bChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvZXBvbGwuYy01My1cXHRzdHJ1Y3QgaW9fZXBvbGwgKmllID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2Vwb2xsKTtcXG5pb191cmluZy9lcG9sbC5jOjU0OlxcdGJvb2wgZm9yY2Vfbm9uYmxvY2sgPSBpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0s7XFxuaW9fdXJpbmcvZXBvbGwuYy01NS1cXHRzdHJ1Y3QgZXBvbGxfa2V5IGtleTtcXG4tLVxcbmlvX3VyaW5nL2ZkaW5mby5jPTM0PXN0YXRpYyBfX2NvbGQgdm9pZCBuYXBpX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvZmRpbmZvLmMtMzktXFx0c3dpdGNoIChtb2RlKSB7XFxuaW9fdXJpbmcvZmRpbmZvLmM6NDA6XFx0Y2FzZSBJT19VUklOR19OQVBJX1RSQUNLSU5HX0lOQUNUSVZFOlxcbmlvX3VyaW5nL2ZkaW5mby5jLTQxLVxcdFxcdHNlcV9wdXRzKG0sIFxcXCJOQVBJOlxcXFx0ZGlzYWJsZWRcXFxcblxcXCIpO1xcbmlvX3VyaW5nL2ZkaW5mby5jLTQyLVxcdFxcdGJyZWFrO1xcbmlvX3VyaW5nL2ZkaW5mby5jOjQzOlxcdGNhc2UgSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19EWU5BTUlDOlxcbmlvX3VyaW5nL2ZkaW5mby5jLTQ0LVxcdFxcdGNvbW1vbl90cmFja2luZ19zaG93X2ZkaW5mbyhjdHgsIG0sIFxcXCJkeW5hbWljXFxcIik7XFxuaW9fdXJpbmcvZmRpbmZvLmMtNDUtXFx0XFx0YnJlYWs7XFxuaW9fdXJpbmcvZmRpbmZvLmM6NDY6XFx0Y2FzZSBJT19VUklOR19OQVBJX1RSQUNLSU5HX1NUQVRJQzpcXG5pb191cmluZy9mZGluZm8uYy00Ny1cXHRcXHRjb21tb25fdHJhY2tpbmdfc2hvd19mZGluZm8oY3R4LCBtLCBcXFwic3RhdGljXFxcIik7XFxuLS1cXG5pb191cmluZy9mcy5jPTgyPWludCBpb19yZW5hbWVhdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvZnMuYy04OC1cXG5pb191cmluZy9mcy5jOjg5OlxcdFdBUk5fT05fT05DRShpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spO1xcbmlvX3VyaW5nL2ZzLmMtOTAtXFxuLS1cXG5pb191cmluZy9mcy5jPTEzNT1pbnQgaW9fdW5saW5rYXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL2ZzLmMtMTQwLVxcbmlvX3VyaW5nL2ZzLmM6MTQxOlxcdFdBUk5fT05fT05DRShpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spO1xcbmlvX3VyaW5nL2ZzLmMtMTQyLVxcbi0tXFxuaW9fdXJpbmcvZnMuYz0xODQ9aW50IGlvX21rZGlyYXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL2ZzLmMtMTg5LVxcbmlvX3VyaW5nL2ZzLmM6MTkwOlxcdFdBUk5fT05fT05DRShpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spO1xcbmlvX3VyaW5nL2ZzLmMtMTkxLVxcbi0tXFxuaW9fdXJpbmcvZnMuYz0yMzY9aW50IGlvX3N5bWxpbmthdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvZnMuYy0yNDItXFxuaW9fdXJpbmcvZnMuYzoyNDM6XFx0V0FSTl9PTl9PTkNFKGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSyk7XFxuaW9fdXJpbmcvZnMuYy0yNDQtXFxuLS1cXG5pb191cmluZy9mcy5jPTI4ND1pbnQgaW9fbGlua2F0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9mcy5jLTI5MC1cXG5pb191cmluZy9mcy5jOjI5MTpcXHRXQVJOX09OX09OQ0UoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKTtcXG5pb191cmluZy9mcy5jLTI5Mi1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9MTM0Nz1zdGF0aWMgdm9pZCBpb193cV9leGl0X3dvcmtlcnMoc3RydWN0IGlvX3dxICp3cSlcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTM2OC1cXHQgKiB1bmludGVycnVwdGlibHkgZm9yIGhhbGYgdGhhdCB0aW1lLCBhbmQgd2FybiBpZiB3ZSBleGNlZWRlZCBlbmRcXG5pb191cmluZy9pby13cS5jOjEzNjk6XFx0ICogdXAgd2FpdGluZyBtb3JlIHRoYW4gSU9fVVJJTkdfRVhJVF9XQUlUX01BWC5cXG5pb191cmluZy9pby13cS5jLTEzNzAtXFx0ICovXFxuLS1cXG5pb191cmluZy9pby13cS5jLTEzNzMtXFx0XFx0dGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUO1xcbmlvX3VyaW5nL2lvLXdxLmM6MTM3NDpcXHR3YXJuX3RpbWVvdXQgPSBqaWZmaWVzICsgSU9fVVJJTkdfRVhJVF9XQUlUX01BWDtcXG5pb191cmluZy9pby13cS5jLTEzNzUtXFx0ZG8ge1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNTQ9c3RhdGljIHZvaWQgaW9fcG9pc29uX2NhY2hlZF9yZXEoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNTUte1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTU2OlxcdHJlcS1cXHUwMDNlY3R4ID0gSU9fVVJJTkdfUFRSX1BPSVNPTjtcXG5pb191cmluZy9pb191cmluZy5jOjE1NzpcXHRyZXEtXFx1MDAzZXRjdHggPSBJT19VUklOR19QVFJfUE9JU09OO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTU4OlxcdHJlcS1cXHUwMDNlZmlsZSA9IElPX1VSSU5HX1BUUl9QT0lTT047XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNTk6XFx0cmVxLVxcdTAwM2VjcmVkcyA9IElPX1VSSU5HX1BUUl9QT0lTT047XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNjA6XFx0cmVxLVxcdTAwM2Vpb190YXNrX3dvcmsuZnVuYyA9IElPX1VSSU5HX1BUUl9QT0lTT047XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNjE6XFx0cmVxLVxcdTAwM2VhcG9sbCA9IElPX1VSSU5HX1BUUl9QT0lTT047XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNjItfVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNjQ9dm9pZCBpb19wb2lzb25fcmVxKHN0cnVjdCBpb19raW9jYiAqcmVxKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNjYtXFx0aW9fcG9pc29uX2NhY2hlZF9yZXEocmVxKTtcXG5pb191cmluZy9pb191cmluZy5jOjE2NzpcXHRyZXEtXFx1MDAzZWFzeW5jX2RhdGEgPSBJT19VUklOR19QVFJfUE9JU09OO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTY4OlxcdHJlcS1cXHUwMDNla2J1ZiA9IElPX1VSSU5HX1BUUl9QT0lTT047XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNjk6XFx0cmVxLVxcdTAwM2Vjb21wX2xpc3QubmV4dCA9IElPX1VSSU5HX1BUUl9QT0lTT047XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNzA6XFx0cmVxLVxcdTAwM2VmaWxlX25vZGUgPSBJT19VUklOR19QVFJfUE9JU09OO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTcxOlxcdHJlcS1cXHUwMDNlbGluayA9IElPX1VSSU5HX1BUUl9QT0lTT047XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNzItfVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz04NDA9dm9pZCBpb19hZGRfYXV4X2NxZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdTY0IHVzZXJfZGF0YSwgczMyIHJlcywgdTMyIGNmbGFncylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtODU0LSAqIEEgaGVscGVyIGZvciBtdWx0aXNob3QgcmVxdWVzdHMgcG9zdGluZyBhZGRpdGlvbmFsIENRRXMuXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo4NTU6ICogU2hvdWxkIG9ubHkgYmUgdXNlZCBmcm9tIGEgdGFza193b3JrIGluY2x1ZGluZyBJT19VUklOR19GX01VTFRJU0hPVC5cXG5pb191cmluZy9pb191cmluZy5jLTg1Ni0gKi9cXG5pb191cmluZy9pb191cmluZy5jPTg1Nz1ib29sIGlvX3JlcV9wb3N0X2NxZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgczMyIHJlcywgdTMyIGNmbGFncylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtODg2LSAqIEEgaGVscGVyIGZvciBtdWx0aXNob3QgcmVxdWVzdHMgcG9zdGluZyBhZGRpdGlvbmFsIENRRXMuXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo4ODc6ICogU2hvdWxkIG9ubHkgYmUgdXNlZCBmcm9tIGEgdGFza193b3JrIGluY2x1ZGluZyBJT19VUklOR19GX01VTFRJU0hPVC5cXG5pb191cmluZy9pb191cmluZy5jLTg4OC0gKi9cXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9OTEwPXN0YXRpYyB2b2lkIGlvX3JlcV9jb21wbGV0ZV9wb3N0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTE2LVxcdCAqIEFsbCBleGVjdXRpb24gcGF0aHMgYnV0IGlvLXdxIHVzZSB0aGUgZGVmZXJyZWQgY29tcGxldGlvbnMgYnlcXG5pb191cmluZy9pb191cmluZy5jOjkxNzpcXHQgKiBwYXNzaW5nIElPX1VSSU5HX0ZfQ09NUExFVEVfREVGRVIgYW5kIHRodXMgc2hvdWxkIG5vdCBlbmQgdXAgaGVyZS5cXG5pb191cmluZy9pb191cmluZy5jLTkxOC1cXHQgKi9cXG5pb191cmluZy9pb191cmluZy5jOjkxOTpcXHRpZiAoV0FSTl9PTl9PTkNFKCEoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX0lPV1EpKSlcXG5pb191cmluZy9pb191cmluZy5jLTkyMC1cXHRcXHRyZXR1cm47XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTEyNzQ9c3RhdGljIHZvaWQgaW9faW9wb2xsX3JlcV9pc3N1ZWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTI3Ni1cXHRzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCA9IHJlcS1cXHUwMDNlY3R4O1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTI3NzpcXHRjb25zdCBib29sIG5lZWRzX2xvY2sgPSBpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfVU5MT0NLRUQ7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xMjc4LVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNDAxPXN0YXRpYyBpbnQgaW9faXNzdWVfc3FlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTE0MTEtXFx0aWYgKHJldCA9PSBJT1VfQ09NUExFVEUpIHtcXG5pb191cmluZy9pb191cmluZy5jOjE0MTI6XFx0XFx0aWYgKGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9DT01QTEVURV9ERUZFUilcXG5pb191cmluZy9pb191cmluZy5jLTE0MTMtXFx0XFx0XFx0aW9fcmVxX2NvbXBsZXRlX2RlZmVyKHJlcSk7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTE0Mjk9aW50IGlvX3BvbGxfaXNzdWUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGlvX3R3X3Rva2VuX3QgdHcpXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNDMwLXtcXG5pb191cmluZy9pb191cmluZy5jOjE0MzE6XFx0Y29uc3QgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzID0gSU9fVVJJTkdfRl9OT05CTE9DSyB8XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNDMyOlxcdFxcdFxcdFxcdFxcdCBJT19VUklOR19GX01VTFRJU0hPVCB8XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNDMzOlxcdFxcdFxcdFxcdFxcdCBJT19VUklOR19GX0NPTVBMRVRFX0RFRkVSO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTQzNC1cXHRpbnQgcmV0O1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNDY2PXZvaWQgaW9fd3Ffc3VibWl0X3dvcmsoc3RydWN0IGlvX3dxX3dvcmsgKndvcmspXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTE0NjktXFx0Y29uc3Qgc3RydWN0IGlvX2lzc3VlX2RlZiAqZGVmID0gXFx1MDAyNmlvX2lzc3VlX2RlZnNbcmVxLVxcdTAwM2VvcGNvZGVdO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTQ3MDpcXHR1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MgPSBJT19VUklOR19GX1VOTE9DS0VEIHwgSU9fVVJJTkdfRl9JT1dRO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTQ3MS1cXHRib29sIG5lZWRzX3BvbGwgPSBmYWxzZTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTUxOS1cXHRcXHRcXHRuZWVkc19wb2xsID0gdHJ1ZTtcXG5pb191cmluZy9pb191cmluZy5jOjE1MjA6XFx0XFx0XFx0aXNzdWVfZmxhZ3MgfD0gSU9fVVJJTkdfRl9OT05CTE9DSztcXG5pb191cmluZy9pb191cmluZy5jLTE1MjEtXFx0XFx0fVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNTUzLVxcdFxcdG5lZWRzX3BvbGwgPSBmYWxzZTtcXG5pb191cmluZy9pb191cmluZy5jOjE1NTQ6XFx0XFx0aXNzdWVfZmxhZ3MgXFx1MDAyNj0gfklPX1VSSU5HX0ZfTk9OQkxPQ0s7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNTU1LVxcdH0gd2hpbGUgKDEpO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNTkzPXN0YXRpYyBpbnQgaW9fcmVxX3NxZV9jb3B5KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTE2MDEtXFx0XFx0cmV0dXJuIDA7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNjAyOlxcdGlmIChXQVJOX09OX09OQ0UoIShpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfSU5MSU5FKSkpXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNjAzLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNjMzPXN0YXRpYyBpbmxpbmUgdm9pZCBpb19xdWV1ZV9zcWUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBleHRyYV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTYzNS17XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNjM2OlxcdHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyA9IElPX1VSSU5HX0ZfTk9OQkxPQ0sgfFxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTYzNzpcXHRcXHRcXHRcXHQgICBJT19VUklOR19GX0NPTVBMRVRFX0RFRkVSIHwgZXh0cmFfZmxhZ3M7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNjM4LVxcdGludCByZXQ7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTE2NTA9c3RhdGljIHZvaWQgaW9fcXVldWVfc3FlX2ZhbGxiYWNrKHN0cnVjdCBpb19raW9jYiAqcmVxKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNjYxLVxcdH0gZWxzZSB7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNjYyOlxcdFxcdC8qIGNhbid0IGZhaWwgd2l0aCBJT19VUklOR19GX0lOTElORSAqL1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTY2MzpcXHRcXHRpb19yZXFfc3FlX2NvcHkocmVxLCBJT19VUklOR19GX0lOTElORSk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNjY0LVxcdFxcdGlmICh1bmxpa2VseShyZXEtXFx1MDAzZWN0eC1cXHUwMDNlaW50X2ZsYWdzIFxcdTAwMjYgSU9fUklOR19GX0RSQUlOX0FDVElWRSkpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTE4NzM9c3RhdGljIGlubGluZSBpbnQgaW9fc3VibWl0X3NxZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTE5MDAtXFx0XFx0dHJhY2VfaW9fdXJpbmdfbGluayhyZXEsIGxpbmstXFx1MDAzZWxhc3QpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTkwMTpcXHRcXHRpb19yZXFfc3FlX2NvcHkocmVxLCBJT19VUklOR19GX0lOTElORSk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xOTAyLVxcdFxcdGxpbmstXFx1MDAzZWxhc3QtXFx1MDAzZWxpbmsgPSByZXE7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTE5MjQtXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxOTI1OlxcdGlvX3F1ZXVlX3NxZShyZXEsIElPX1VSSU5HX0ZfSU5MSU5FKTtcXG5pb191cmluZy9pb191cmluZy5jLTE5MjYtXFx0cmV0dXJuIDA7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTIzMDk9c3RhdGljIF9fY29sZCB2b2lkIGlvX3JpbmdfZXhpdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjMxMS1cXHRzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW9fcmluZ19jdHgsIGV4aXRfd29yayk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMzEyOlxcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBJT19VUklOR19FWElUX1dBSVRfTUFYO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjMxMy1cXHR1bnNpZ25lZCBsb25nIGludGVydmFsID0gSFogLyAyMDtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9MzA9c3RydWN0IGlvX2N0eF9jb25maWcge1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0xMDAtICovXFxuaW9fdXJpbmcvaW9fdXJpbmcuaDoxMDE6I2RlZmluZSBJT19VUklOR19FWElUX1dBSVRfTUFYXFx0KEhaICogNjAgKiA1KVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMTAyLVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaD0zOTI9c3RhdGljIGlubGluZSB2b2lkIGlvX3Jpbmdfc3VibWl0X3VubG9jayhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzk1LVxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmN0eC1cXHUwMDNldXJpbmdfbG9jayk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuaDozOTY6XFx0aWYgKHVubGlrZWx5KGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkpXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zOTctXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZXVyaW5nX2xvY2spO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaD00MDA9c3RhdGljIGlubGluZSB2b2lkIGlvX3Jpbmdfc3VibWl0X2xvY2soc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5oLTQwOC1cXHQgKi9cXG5pb191cmluZy9pb191cmluZy5oOjQwOTpcXHRpZiAodW5saWtlbHkoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX1VOTE9DS0VEKSlcXG5pb191cmluZy9pb191cmluZy5oLTQxMC1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZXVyaW5nX2xvY2spO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaD00Nzk9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fc3FyaW5nX2VudHJpZXMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5oLTQ4Ny0gKiBQcm90ZWN0ZWQgYnkgLVxcdTAwM2V1cmluZ19sb2NrIGFuZCBjYW4gb25seSBiZSB1c2VkIGVpdGhlciB3aXRoXFxuaW9fdXJpbmcvaW9fdXJpbmcuaDo0ODg6ICogSU9fVVJJTkdfRl9DT01QTEVURV9ERUZFUiBvciBpbnNpZGUgYSB0dyBoYW5kbGVyIGhvbGRpbmcgdGhlIG11dGV4LlxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtNDg5LSAqL1xcbi0tXFxuaW9fdXJpbmcva2J1Zi5jPTE3Mj1zdGF0aWMgYm9vbCBpb19zaG91bGRfY29tbWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9rYnVmLmMtMTgzLVxcdCovXFxuaW9fdXJpbmcva2J1Zi5jOjE4NDpcXHRpZiAoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX1VOTE9DS0VEKVxcbmlvX3VyaW5nL2tidWYuYy0xODUtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5pb191cmluZy9rYnVmLmM9MzQ1PWludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuLS1cXG5pb191cmluZy9rYnVmLmMtMzczLW91dF91bmxvY2s6XFxuaW9fdXJpbmcva2J1Zi5jOjM3NDpcXHRpZiAoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX1VOTE9DS0VEKSB7XFxuaW9fdXJpbmcva2J1Zi5jLTM3NS1cXHRcXHRzZWwtXFx1MDAzZWJ1Zl9saXN0ID0gTlVMTDtcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG5pb191cmluZy9tZW1tYXAuaDoyOiNpZm5kZWYgSU9fVVJJTkdfTUVNTUFQX0hcXG5pb191cmluZy9tZW1tYXAuaDozOiNkZWZpbmUgSU9fVVJJTkdfTUVNTUFQX0hcXG5pb191cmluZy9tZW1tYXAuaC00LVxcbi0tXFxuaW9fdXJpbmcvbXNnX3JpbmcuYz00MD1zdGF0aWMgaW50IGlvX2xvY2tfZXh0ZXJuYWxfY3R4KHN0cnVjdCBpb19yaW5nX2N0eCAqb2N0eCxcXG4tLVxcbmlvX3VyaW5nL21zZ19yaW5nLmMtNDctXFx0ICovXFxuaW9fdXJpbmcvbXNnX3JpbmcuYzo0ODpcXHRpZiAoIShpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfVU5MT0NLRUQpKSB7XFxuaW9fdXJpbmcvbXNnX3JpbmcuYy00OS1cXHRcXHRpZiAoIW11dGV4X3RyeWxvY2soXFx1MDAyNm9jdHgtXFx1MDAzZXVyaW5nX2xvY2spKVxcbi0tXFxuaW9fdXJpbmcvbXNnX3JpbmcuYz0yMjg9c3RhdGljIHZvaWQgaW9fbXNnX3R3X2ZkX2NvbXBsZXRlKHN0cnVjdCBjYWxsYmFja19oZWFkICpoZWFkKVxcbi0tXFxuaW9fdXJpbmcvbXNnX3JpbmcuYy0yMzQtXFx0aWYgKCEoY3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQRl9FWElUSU5HKSlcXG5pb191cmluZy9tc2dfcmluZy5jOjIzNTpcXHRcXHRyZXQgPSBpb19tc2dfaW5zdGFsbF9jb21wbGV0ZShyZXEsIElPX1VSSU5HX0ZfVU5MT0NLRUQpO1xcbmlvX3VyaW5nL21zZ19yaW5nLmMtMjM2LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuaW9fdXJpbmcvbXNnX3JpbmcuYz0zMzU9aW50IGlvX3VyaW5nX3N5bmNfbXNnX3Jpbmcoc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbi0tXFxuaW9fdXJpbmcvbXNnX3JpbmcuYy0zNTYtXFx0cmV0dXJuICBfX2lvX21zZ19yaW5nX2RhdGEoZmRfZmlsZShmKS1cXHUwMDNlcHJpdmF0ZV9kYXRhLFxcbmlvX3VyaW5nL21zZ19yaW5nLmM6MzU3OlxcdFxcdFxcdFxcdCAgIFxcdTAwMjZpb19tc2csIElPX1VSSU5HX0ZfVU5MT0NLRUQpO1xcbmlvX3VyaW5nL21zZ19yaW5nLmMtMzU4LX1cXG4tLVxcbmlvX3VyaW5nL25hcGkuYz0yMDE9X19pb19uYXBpX2RvX2J1c3lfbG9vcChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL25hcGkuYy0yMDUtXFx0c3dpdGNoIChSRUFEX09OQ0UoY3R4LVxcdTAwM2VuYXBpX3RyYWNrX21vZGUpKSB7XFxuaW9fdXJpbmcvbmFwaS5jOjIwNjpcXHRjYXNlIElPX1VSSU5HX05BUElfVFJBQ0tJTkdfU1RBVElDOlxcbmlvX3VyaW5nL25hcGkuYy0yMDctXFx0XFx0cmV0dXJuIHN0YXRpY190cmFja2luZ19kb19idXN5X2xvb3AoY3R4LCBsb29wX2VuZCwgbG9vcF9lbmRfYXJnKTtcXG5pb191cmluZy9uYXBpLmM6MjA4OlxcdGNhc2UgSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19EWU5BTUlDOlxcbmlvX3VyaW5nL25hcGkuYy0yMDktXFx0XFx0cmV0dXJuIGR5bmFtaWNfdHJhY2tpbmdfZG9fYnVzeV9sb29wKGN0eCwgbG9vcF9lbmQsIGxvb3BfZW5kX2FyZyk7XFxuLS1cXG5pb191cmluZy9uYXBpLmM9MjQ4PXZvaWQgaW9fbmFwaV9pbml0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbi0tXFxuaW9fdXJpbmcvbmFwaS5jLTI1NS1cXHRjdHgtXFx1MDAzZW5hcGlfYnVzeV9wb2xsX2R0ID0gbnNfdG9fa3RpbWUoc3lzX2R0KTtcXG5pb191cmluZy9uYXBpLmM6MjU2OlxcdGN0eC1cXHUwMDNlbmFwaV90cmFja19tb2RlID0gSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19JTkFDVElWRTtcXG5pb191cmluZy9uYXBpLmMtMjU3LX1cXG4tLVxcbmlvX3VyaW5nL25hcGkuYz0yNzc9c3RhdGljIGludCBpb19uYXBpX3JlZ2lzdGVyX25hcGkoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9uYXBpLmMtMjgwLVxcdHN3aXRjaCAobmFwaS1cXHUwMDNlb3BfcGFyYW0pIHtcXG5pb191cmluZy9uYXBpLmM6MjgxOlxcdGNhc2UgSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19EWU5BTUlDOlxcbmlvX3VyaW5nL25hcGkuYzoyODI6XFx0Y2FzZSBJT19VUklOR19OQVBJX1RSQUNLSU5HX1NUQVRJQzpcXG5pb191cmluZy9uYXBpLmMtMjgzLVxcdFxcdGJyZWFrO1xcbi0tXFxuaW9fdXJpbmcvbmFwaS5jLTI4Ni1cXHR9XFxuaW9fdXJpbmcvbmFwaS5jOjI4NzpcXHRXUklURV9PTkNFKGN0eC1cXHUwMDNlbmFwaV90cmFja19tb2RlLCBJT19VUklOR19OQVBJX1RSQUNLSU5HX0lOQUNUSVZFKTtcXG5pb191cmluZy9uYXBpLmMtMjg4LVxcdGlvX25hcGlfZnJlZShjdHgpO1xcbi0tXFxuaW9fdXJpbmcvbmFwaS5jPTMwND1pbnQgaW9fcmVnaXN0ZXJfbmFwaShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmlvX3VyaW5nL25hcGkuYy0zMjMtXFx0c3dpdGNoIChuYXBpLm9wY29kZSkge1xcbmlvX3VyaW5nL25hcGkuYzozMjQ6XFx0Y2FzZSBJT19VUklOR19OQVBJX1JFR0lTVEVSX09QOlxcbmlvX3VyaW5nL25hcGkuYy0zMjUtXFx0XFx0cmV0dXJuIGlvX25hcGlfcmVnaXN0ZXJfbmFwaShjdHgsIFxcdTAwMjZuYXBpKTtcXG5pb191cmluZy9uYXBpLmM6MzI2OlxcdGNhc2UgSU9fVVJJTkdfTkFQSV9TVEFUSUNfQUREX0lEOlxcbmlvX3VyaW5nL25hcGkuYzozMjc6XFx0XFx0aWYgKGN1cnIub3BfcGFyYW0gIT0gSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19TVEFUSUMpXFxuaW9fdXJpbmcvbmFwaS5jLTMyOC1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5pb191cmluZy9uYXBpLmMtMzI5LVxcdFxcdHJldHVybiBfX2lvX25hcGlfYWRkX2lkKGN0eCwgbmFwaS5vcF9wYXJhbSxcXG5pb191cmluZy9uYXBpLmM6MzMwOlxcdFxcdFxcdFxcdFxcdElPX1VSSU5HX05BUElfVFJBQ0tJTkdfU1RBVElDKTtcXG5pb191cmluZy9uYXBpLmM6MzMxOlxcdGNhc2UgSU9fVVJJTkdfTkFQSV9TVEFUSUNfREVMX0lEOlxcbmlvX3VyaW5nL25hcGkuYzozMzI6XFx0XFx0aWYgKGN1cnIub3BfcGFyYW0gIT0gSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19TVEFUSUMpXFxuaW9fdXJpbmcvbmFwaS5jLTMzMy1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmlvX3VyaW5nL25hcGkuYz0zNDg9aW50IGlvX3VucmVnaXN0ZXJfbmFwaShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmlvX3VyaW5nL25hcGkuYy0zNTctXFxuaW9fdXJpbmcvbmFwaS5jOjM1ODpcXHRXUklURV9PTkNFKGN0eC1cXHUwMDNlbmFwaV90cmFja19tb2RlLCBJT19VUklOR19OQVBJX1RSQUNLSU5HX0lOQUNUSVZFKTtcXG5pb191cmluZy9uYXBpLmMtMzU5LVxcdFdSSVRFX09OQ0UoY3R4LVxcdTAwM2VuYXBpX2J1c3lfcG9sbF9kdCwgMCk7XFxuLS1cXG5pb191cmluZy9uYXBpLmg9NDM9c3RhdGljIGlubGluZSB2b2lkIGlvX25hcGlfYWRkKHN0cnVjdCBpb19raW9jYiAqcmVxKVxcbi0tXFxuaW9fdXJpbmcvbmFwaS5oLTQ2LVxcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XFxuaW9fdXJpbmcvbmFwaS5oOjQ3OlxcdHVuc2lnbmVkIGludCBtb2RlID0gSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19EWU5BTUlDO1xcbmlvX3VyaW5nL25hcGkuaC00OC1cXG4tLVxcbmlvX3VyaW5nL25ldC5jPTEzNz1pbnQgaW9fc2h1dGRvd24oc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE0Mi1cXG5pb191cmluZy9uZXQuYzoxNDM6XFx0V0FSTl9PTl9PTkNFKGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSyk7XFxuaW9fdXJpbmcvbmV0LmMtMTQ0LVxcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTY3PXN0YXRpYyB2b2lkIGlvX25ldG1zZ19yZWN5Y2xlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNzEtXFx0LyogY2FuJ3QgcmVjeWNsZSwgZW5zdXJlIHdlIGZyZWUgdGhlIGlvdmVjIGlmIHdlIGhhdmUgb25lICovXFxuaW9fdXJpbmcvbmV0LmM6MTcyOlxcdGlmICh1bmxpa2VseShpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfVU5MT0NLRUQpKSB7XFxuaW9fdXJpbmcvbmV0LmMtMTczLVxcdFxcdGlvX25ldG1zZ19pb3ZlY19mcmVlKGhkcik7XFxuLS1cXG5pb191cmluZy9uZXQuYz01Mjk9aW50IGlvX3NlbmRtc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTU0Ni1cXHRmbGFncyA9IHNyLVxcdTAwM2Vtc2dfZmxhZ3M7XFxuaW9fdXJpbmcvbmV0LmM6NTQ3OlxcdGlmIChpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spXFxuaW9fdXJpbmcvbmV0LmMtNTQ4LVxcdFxcdGZsYWdzIHw9IE1TR19ET05UV0FJVDtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTU1Ni1cXHRpZiAocmV0IFxcdTAwM2MgbWluX3JldCkge1xcbmlvX3VyaW5nL25ldC5jOjU1NzpcXHRcXHRpZiAocmV0ID09IC1FQUdBSU4gXFx1MDAyNlxcdTAwMjYgKGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSykpXFxuaW9fdXJpbmcvbmV0LmMtNTU4LVxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NjI2PWludCBpb19zZW5kKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy02NTMtXFx0ZmxhZ3MgPSBzci1cXHUwMDNlbXNnX2ZsYWdzO1xcbmlvX3VyaW5nL25ldC5jOjY1NDpcXHRpZiAoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKVxcbmlvX3VyaW5nL25ldC5jLTY1NS1cXHRcXHRmbGFncyB8PSBNU0dfRE9OVFdBSVQ7XFxuLS1cXG5pb191cmluZy9uZXQuYy02NzYtXFx0aWYgKHJldCBcXHUwMDNjIG1pbl9yZXQpIHtcXG5pb191cmluZy9uZXQuYzo2Nzc6XFx0XFx0aWYgKHJldCA9PSAtRUFHQUlOIFxcdTAwMjZcXHUwMDI2IChpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spKVxcbmlvX3VyaW5nL25ldC5jLTY3OC1cXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTg1Mz1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9uZXQuYy05MjEtXFx0XFx0XFx0c3ItXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5JT1JJTkdfUkVDVl9NU0hPVF9DQVA7XFxuaW9fdXJpbmcvbmV0LmM6OTIyOlxcdFxcdFxcdGlmIChpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTVVMVElTSE9UKVxcbmlvX3VyaW5nL25ldC5jLTkyMy1cXHRcXHRcXHRcXHRzZWwtXFx1MDAzZXZhbCA9IElPVV9SRVFVRVVFO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTAyMD1pbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTAyNy1cXHRpbnQgcmV0LCBtaW5fcmV0ID0gMDtcXG5pb191cmluZy9uZXQuYzoxMDI4OlxcdGJvb2wgZm9yY2Vfbm9uYmxvY2sgPSBpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0s7XFxuaW9fdXJpbmcvbmV0LmMtMTAyOS1cXHRib29sIG1zaG90X2ZpbmlzaGVkID0gdHJ1ZTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTExMDc9c3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMTE3LVxcdCAqL1xcbmlvX3VyaW5nL25ldC5jOjExMTg6XFx0aWYgKCEoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX1VOTE9DS0VEKSBcXHUwMDI2XFx1MDAyNlxcbmlvX3VyaW5nL25ldC5jLTExMTktXFx0ICAgIHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpIHtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTExNzk9aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTExODYtXFx0aW50IHJldCwgbWluX3JldCA9IDA7XFxuaW9fdXJpbmcvbmV0LmM6MTE4NzpcXHRib29sIGZvcmNlX25vbmJsb2NrID0gaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLO1xcbmlvX3VyaW5nL25ldC5jLTExODgtXFx0Ym9vbCBtc2hvdF9maW5pc2hlZDtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTE1MDA9aW50IGlvX3NlbmRtc2dfemMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE1MjMtXFx0bXNnX2ZsYWdzID0gc3ItXFx1MDAzZW1zZ19mbGFncztcXG5pb191cmluZy9uZXQuYzoxNTI0OlxcdGlmIChpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spXFxuaW9fdXJpbmcvbmV0LmMtMTUyNS1cXHRcXHRtc2dfZmxhZ3MgfD0gTVNHX0RPTlRXQUlUO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTU0MC1cXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgbWluX3JldCkpIHtcXG5pb191cmluZy9uZXQuYzoxNTQxOlxcdFxcdGlmIChyZXQgPT0gLUVBR0FJTiBcXHUwMDI2XFx1MDAyNiAoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKSlcXG5pb191cmluZy9uZXQuYy0xNTQyLVxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTU2MS1cXHQgKi9cXG5pb191cmluZy9uZXQuYzoxNTYyOlxcdGlmICghKGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkpIHtcXG5pb191cmluZy9uZXQuYy0xNTYzLVxcdFxcdGlvX25vdGlmX2ZsdXNoKHNyLVxcdTAwM2Vub3RpZik7XFxuLS1cXG5pb191cmluZy9uZXQuYz0xNjIwPWludCBpb19hY2NlcHQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE2MjItXFx0c3RydWN0IGlvX2FjY2VwdCAqYWNjZXB0ID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2FjY2VwdCk7XFxuaW9fdXJpbmcvbmV0LmM6MTYyMzpcXHRib29sIGZvcmNlX25vbmJsb2NrID0gaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLO1xcbmlvX3VyaW5nL25ldC5jLTE2MjQtXFx0Ym9vbCBmaXhlZCA9ICEhYWNjZXB0LVxcdTAwM2VmaWxlX3Nsb3Q7XFxuLS1cXG5pb191cmluZy9uZXQuYz0xNzUxPWludCBpb19zb2NrZXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE3NjctXFx0XFx0cmV0ID0gUFRSX0VSUihmaWxlKTtcXG5pb191cmluZy9uZXQuYzoxNzY4OlxcdFxcdGlmIChyZXQgPT0gLUVBR0FJTiBcXHUwMDI2XFx1MDAyNiAoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKSlcXG5pb191cmluZy9uZXQuYy0xNzY5LVxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTgwMz1pbnQgaW9fY29ubmVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTgwOC1cXHRpbnQgcmV0O1xcbmlvX3VyaW5nL25ldC5jOjE4MDk6XFx0Ym9vbCBmb3JjZV9ub25ibG9jayA9IGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSztcXG5pb191cmluZy9uZXQuYy0xODEwLVxcbi0tXFxuaW9fdXJpbmcvb3BlbmNsb3NlLmM9MTIzPWludCBpb19vcGVuYXQyKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9vcGVuY2xvc2UuYy0xMzctXFx0cmVzb2x2ZV9ub25ibG9jayA9IG9wZW4tXFx1MDAzZWhvdy5yZXNvbHZlIFxcdTAwMjYgUkVTT0xWRV9DQUNIRUQ7XFxuaW9fdXJpbmcvb3BlbmNsb3NlLmM6MTM4OlxcdGlmIChpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spIHtcXG5pb191cmluZy9vcGVuY2xvc2UuYy0xMzktXFx0XFx0V0FSTl9PTl9PTkNFKGlvX29wZW5hdF9mb3JjZV9hc3luYyhvcGVuKSk7XFxuLS1cXG5pb191cmluZy9vcGVuY2xvc2UuYy0xNjItXFx0XFx0aWYgKHJldCA9PSAtRUFHQUlOIFxcdTAwMjZcXHUwMDI2ICFyZXNvbHZlX25vbmJsb2NrIFxcdTAwMjZcXHUwMDI2XFxuaW9fdXJpbmcvb3BlbmNsb3NlLmM6MTYzOlxcdFxcdCAgICAoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKSkge1xcbmlvX3VyaW5nL29wZW5jbG9zZS5jLTE2NC1cXHRcXHRcXHRyZXQgPSBwdXRuYW1lX3RvX2RlbGF5ZWQoXFx1MDAyNm9wZW4tXFx1MDAzZWZpbGVuYW1lLFxcbi0tXFxuaW9fdXJpbmcvb3BlbmNsb3NlLmMtMTcxLVxcbmlvX3VyaW5nL29wZW5jbG9zZS5jOjE3MjpcXHRpZiAoKGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSykgXFx1MDAyNlxcdTAwMjYgIW5vbmJsb2NrX3NldClcXG5pb191cmluZy9vcGVuY2xvc2UuYy0xNzMtXFx0XFx0ZmlsZS1cXHUwMDNlZl9mbGFncyBcXHUwMDI2PSB+T19OT05CTE9DSztcXG4tLVxcbmlvX3VyaW5nL29wZW5jbG9zZS5jPTIzNj1pbnQgaW9fY2xvc2Uoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL29wZW5jbG9zZS5jLTI1NS1cXHQvKiBpZiB0aGUgZmlsZSBoYXMgYSBmbHVzaCBtZXRob2QsIGJlIHNhZmUgYW5kIHB1bnQgdG8gYXN5bmMgKi9cXG5pb191cmluZy9vcGVuY2xvc2UuYzoyNTY6XFx0aWYgKGZpbGUtXFx1MDAzZWZfb3AtXFx1MDAzZWZsdXNoIFxcdTAwMjZcXHUwMDI2IChpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spKSB7XFxuaW9fdXJpbmcvb3BlbmNsb3NlLmMtMjU3LVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZmaWxlcy1cXHUwMDNlZmlsZV9sb2NrKTtcXG4tLVxcbmlvX3VyaW5nL3BvbGwuYz01NTM9c3RhdGljIGludCBfX2lvX2FybV9wb2xsX2hhbmRsZXIoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9wb2xsLmMtNTc3LVxcdCAqL1xcbmlvX3VyaW5nL3BvbGwuYzo1Nzg6XFx0aXB0LVxcdTAwM2Vvd25pbmcgPSBpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfVU5MT0NLRUQ7XFxuaW9fdXJpbmcvcG9sbC5jLTU3OS1cXHRhdG9taWNfc2V0KFxcdTAwMjZyZXEtXFx1MDAzZXBvbGxfcmVmcywgKGludClpcHQtXFx1MDAzZW93bmluZyk7XFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MTguNzQ5NTYyMzM3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI4MjU5NTk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJT19VUklORyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gZXhhY3RseSB3aGVyZSBgQ09ORklHX0lPX1VSSU5HYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUgS2NvbmZpZyBzeXN0ZW0uIFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgaXQncyBqdXN0IGEgbWF0dGVyIG9mIHF1aWNrbHkgZ3JlcHBpbmcgb3IgbmF2aWdhdGluZyB0aGUgS2NvbmZpZyBmaWxlcyBkaXJlY3RseS4gS25vd2luZyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLCB0aGUgZGVwZW5kZW5jeSBzdHJ1Y3R1cmUgdGhhdCBLY29uZmlnIGxldmVyYWdlcywgdGhlIGNvbnRleHQgb2YgdGhlIHNldHRpbmcgaW4gdGhlIGJyb2FkZXIgZmlsZSBzeXN0ZW0gb3IgbmV0d29ya2luZyBzdGFjay4uLiB0aGlzIGluZm9ybXMgbXkgZGVjaXNpb24gb24gYSBnb29kIHNlYXJjaCBzdHJhdGVneSBoZXJlLiBJ4oCZbGwgc3RhcnQgYnkgZG9pbmcgYSBiYXNpYyBzZWFyY2ggdG8gZmluZCB0aGUgZW50cnkgcG9pbnQsIG9yIGF0IGxlYXN0IHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUocykuIEZyb20gdGhlcmUsIEkgY2FuIGV4YW1pbmUgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGhlbHAgdGV4dCwgYW5kIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQgdG8gdGhlIHNldHRpbmcuIEtub3dpbmcgdGhlIHBvc3NpYmxlIGhhcmR3YXJlIG9yIHNvZnR3YXJlIGNvbnRleHRzIHRoYXQgdHJpZ2dlciB0aGlzIHNldHRpbmcgaXMgdmFsdWFibGUgdG8gdW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UsIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBUaGVuLCBJIGNhbiBxdWlja2x5IGNvbmZpcm0gYW55IHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIGl0cyBpbnRlbmRlZCB1c2UgYW5kIGFueSBpbXBsaWNhdGlvbnMgaXQgaGFzLiBUaGlzIGluZm9ybWF0aW9uIGlzIGtleSBpZiBJJ20gdHJ5aW5nIHRvLCBmb3IgZXhhbXBsZSwgZW5hYmxlIG9yIGRpc2FibGUgdGhpcyBmZWF0dXJlLCBvciBkZWJ1ZyBhIHJlbGF0ZWQgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODY0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MjEuMDMyMTYwNDI5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTc2OTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJT19VUklOR1xcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xOTUyPWNvbmZpZyBBSU9cXG4tLVxcbmluaXQvS2NvbmZpZy0xOTU5LVxcbmluaXQvS2NvbmZpZzoxOTYwOmNvbmZpZyBJT19VUklOR1xcbmluaXQvS2NvbmZpZy0xOTYxLVxcdGJvb2wgXFxcIkVuYWJsZSBJTyB1cmluZyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MjEuMDc4MzQxMzY3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQzMDkxMjQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IGlvX3VyaW5nIGFuZCB0aGUgU2lnbmlmaWNhbmNlIG9mIGEgU2ltcGxlIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGZvY3VzZXMgb24gYSBtb2RpZmljYXRpb24gd2l0aGluIGBpb19kb19pb3BvbGxgLCBhbmQgbXkgZXhwZXJ0IGV5ZSBpbW1lZGlhdGVseSBob25lcyBpbiBvbiB0aGF0IGxpbmU6IGByZXEtXHUwMDNlY3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS1cdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7YFxuXG5UaGUgcXVlc3Rpb24gcG9wcyB1cCDigJMgd2h5IHRoZSBjaGFuZ2UgZnJvbSBhc3NpZ25tZW50IChgPWApIHRvIGEgYml0d2lzZSBPUiAoYHw9YCk/IEl0J3MgZWxlbWVudGFyeSwgcmVhbGx5LiBJZiBgcmVxLVx1MDAzZWNxZS5mbGFnc2AgYWxyZWFkeSBjb250YWlucyBleGlzdGluZyBmbGFncyDigJMgc2F5LCBgSU9SSU5HX0NRRV9GX01PUkVgLCBidWZmZXIgZmxhZ3MsIG9yIG90aGVyIGNvbXBsZXRpb24gcXVldWUgZW50cnkgKENRRSkgZmxhZ3Mg4oCTIGEgc2ltcGxlIGFzc2lnbm1lbnQgd291bGQgb3ZlcndyaXRlIHRob3NlIHZpdGFsIGV4aXN0aW5nIGZsYWdzLiBVc2luZyBhIGJpdHdpc2UgT1IgaXMgZXNzZW50aWFsIGZvciAqcHJlc2VydmluZyogdGhvc2UgcHJlLWV4aXN0aW5nIGZsYWdzIHdoaWxlICphZGRpbmcqIHRoZSBuZXcgZmxhZ3MgcmV0dXJuZWQgZnJvbSBgaW9fcHV0X2tidWZgLiBPciwgaWYgaXQgaXMgdGhlIGNhc2UgdGhhdCBgaW9fcHV0X2tidWZgIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIGZsYWdzLiBUaGlzIGlzIGNvcmUgYGlvX3VyaW5nYCBsb2dpYyBmb3IgaGFuZGxpbmcgY29tcGxldGlvbnMgZHVyaW5nIHBvbGxlZCBJL08gb3BlcmF0aW9ucyAodGhlIGBJT1JJTkdfU0VUVVBfSU9QT0xMYCBzZXR0aW5nKS4gVGhpcyBpcyBkZWVwIGluc2lkZSB0aGUga2VybmVsJ3MgYGlvX3VyaW5nYCBzdWJzeXN0ZW0sIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSB1c3VhbCBzdXNwZWN0cyBsaWtlIGBpb191cmluZ19zZXR1cGAsIGBpb191cmluZ19lbnRlcmAsIGFuZCBzbyBvbi4gQW55IGNoYW5nZSBoZXJlIGRpcmVjdGx5IGFmZmVjdHMgZXhlY3V0YWJsZSBrZXJuZWwgY29kZSwgc28gaXQgaXMgaGlnaC12YWx1ZS5cblxuTm93LCBhcyBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgdGhlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIFwiV29ydGhGdXp6aW5nXCI/IEdpdmVuIG15IGVzdGFibGlzaGVkIGNyaXRlcmlhLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyBcIlllc1wiLiBJdCB0aWNrcyBhbGwgdGhlIGJveGVzLiBGaXJzdCwgdGhpcyBpcyBhIG1vZGlmaWNhdGlvbiB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbSDigJMgYGlvX3VyaW5nYC4gVGhlIGxvZ2ljIGNoYW5nZSBpcyBpbiBgaW9fZG9faW9wb2xsYCwgd2hpY2ggaXMgZGlyZWN0bHkgcmVsYXRlZCB0byBJL08gcG9sbGluZyB3aXRoIGBpb191cmluZ2AgdmlhIGBJT1JJTkdfU0VUVVBfSU9QT0xMYCwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUgbW9kZXJuIGtlcm5lbC4gRnV6emluZyB3aXRoIHRvb2xzIGxpa2Ugc3l6a2FsbGVyIHdvdWxkIGFsbG93IGZvciBleHRlbnNpdmUgdGVzdGluZyBvZiBgaW9fdXJpbmdgIHVuZGVyIHZhcmlvdXMgY29uZGl0aW9ucywgaW5jbHVkaW5nIGBJT1BPTExgLCBidWZmZXIgbWFuYWdlbWVudCwgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb25zLlxuXG5GaW5hbGx5LCByZWdhcmRpbmcgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBpbnZvbHZlZCwgSSdsbCBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgaW9fZG9faW9wb2xsYCAoZGVmaW5lZCBzb21ld2hlcmUgYXJvdW5kIGxpbmUgMTM3MyBpbiBgaW9fdXJpbmcvcncuY2AsIEkgYmVsaWV2ZSDigJMgSSdsbCB2ZXJpZnkgdGhhdCkgYW5kIGFueSBvdGhlciBmdW5jdGlvbnMgZGlyZWN0bHkgaW50ZXJhY3Rpbmcgd2l0aCBpdC4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGxvZ2ljIGluIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyMjYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MjYuNTA5MjU2ODUzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY5MDQ4NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fZG9faW9wb2xsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pb191cmluZy5jPTExNjg9X19jb2xkIHZvaWQgaW9faW9wb2xsX3RyeV9yZWFwX2V2ZW50cyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTE3NS1cXHRcXHQvKiBsZXQgaXQgc2xlZXAgYW5kIHJlcGVhdCBsYXRlciBpZiBjYW4ndCBjb21wbGV0ZSBhIHJlcXVlc3QgKi9cXG5pb191cmluZy9pb191cmluZy5jOjExNzY6XFx0XFx0aWYgKGlvX2RvX2lvcG9sbChjdHgsIHRydWUpID09IDApXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xMTc3LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xMTk1PXN0YXRpYyBpbnQgaW9faW9wb2xsX2NoZWNrKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBpbnQgbWluX2V2ZW50cylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTI0OS1cXHRcXHR9XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxMjUwOlxcdFxcdHJldCA9IGlvX2RvX2lvcG9sbChjdHgsICFtaW5fZXZlbnRzKTtcXG5pb191cmluZy9pb191cmluZy5jLTEyNTEtXFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xMjYzPXZvaWQgaW9fcmVxX3Rhc2tfY29tcGxldGUoc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTEyNzAtICogQWRkaW5nIHRoZSBraW9jYiB0byB0aGUgbGlzdCBBRlRFUiBzdWJtaXNzaW9uIGVuc3VyZXMgdGhhdCB3ZSBkb24ndFxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTI3MTogKiBmaW5kIGl0IGZyb20gYSBpb19kb19pb3BvbGwoKSB0aHJlYWQgYmVmb3JlIHRoZSBpc3N1ZXIgaXMgZG9uZVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTI3Mi0gKiBhY2Nlc3NpbmcgdGhlIGtpb2NiIGNvb2tpZS5cXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9MjAyPWludCBpb19zdWJtaXRfc3FlcyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdW5zaWduZWQgaW50IG5yKTtcXG5pb191cmluZy9pb191cmluZy5oOjIwMzppbnQgaW9fZG9faW9wb2xsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGZvcmNlX25vbnNwaW4pO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjA0LV9fY29sZCB2b2lkIGlvX2lvcG9sbF90cnlfcmVhcF9ldmVudHMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpO1xcbi0tXFxuaW9fdXJpbmcvcncuYz0xMjk3PXN0YXRpYyBpbnQgaW9fdXJpbmdfaHlicmlkX3BvbGwoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9ydy5jLTEzMTgtXFxuaW9fdXJpbmcvcncuYzoxMzE5OmludCBpb19kb19pb3BvbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgZm9yY2Vfbm9uc3BpbilcXG5pb191cmluZy9ydy5jLTEzMjAte1xcbi0tXFxuaW9fdXJpbmcvc3Fwb2xsLmM9MjA1PXN0YXRpYyBpbnQgX19pb19zcV90aHJlYWQoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19zcV9kYXRhICpzcWQsXFxuLS1cXG5pb191cmluZy9zcXBvbGwuYy0yMjUtXFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZjdHgtXFx1MDAzZWlvcG9sbF9saXN0KSlcXG5pb191cmluZy9zcXBvbGwuYzoyMjY6XFx0XFx0XFx0aW9fZG9faW9wb2xsKGN0eCwgdHJ1ZSk7XFxuaW9fdXJpbmcvc3Fwb2xsLmMtMjI3LVxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmM9MTUyPXZvaWQgX19pb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsIHMzMiByZXQsIHU2NCByZXMyLFxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTcyLVxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfSU9QT0xMKSB7XFxuaW9fdXJpbmcvdXJpbmdfY21kLmM6MTczOlxcdFxcdC8qIG9yZGVyIHdpdGggaW9fZG9faW9wb2xsKCkgY2hlY2tpbmcgLVxcdTAwM2Vpb3BvbGxfY29tcGxldGVkICovXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTc0LVxcdFxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZyZXEtXFx1MDAzZWlvcG9sbF9jb21wbGV0ZWQsIDEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjoyNi43MjYxNjgxNDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU1NzU4NTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcm5hbCB3b3JraW5ncyBvZiB0aGlzIGFzeW5jaHJvbm91cyBJL08gaW1wbGVtZW50YXRpb24uIEZpcnN0LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LCBzbyBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgSS9PIHBvbGxpbmcgcHJvY2Vzcy4gSSdsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBgaW9faW9wb2xsX2NoZWNrYCwgYW5kIGBpb19kb19pb3BvbGxgIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gbW9uaXRvcnMgZm9yIGNvbXBsZXRlZCBJL08gb3BlcmF0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBJL08gbWVjaGFuaXNtIGlzIGFjdHVhbGx5IHRyaWdnZXJlZC5cblxuQWZ0ZXIgdW5kZXJzdGFuZGluZyB0aGUgcG9sbGluZyBtZWNoYW5pc20sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGF0YSBnZXRzIHB1dCBpbnRvIHRoZSBpb191cmluZyBzeXN0ZW0uIFNvIG5leHQsIGxldCdzIHNlZSBob3cgYGlvX3B1dF9rYnVmYCBpbnRlZ3JhdGVzIHdpdGhpbiB0aGUgbGFyZ2VyIHBpY3R1cmUgdG8gZ2V0IHRoZSBkYXRhIHdoZXJlIGl0IG5lZWRzIHRvIGdvIHdpdGhpbiB0aGUgaW9fdXJpbmcgcmluZyBidWZmZXIuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IGRhdGEgZmxvd3MgdGhyb3VnaCB0aGUgSS9PIHN5c3RlbSBmcm9tIHRoZSBhcHBsaWNhdGlvbiwgdGhyb3VnaCBrZXJuZWwgc3RydWN0dXJlcywgYW5kIGJhY2sgdG8gdGhlIGFwcGxpY2F0aW9uLiBJIGFsc28gbmVlZCB0byBjaGVjayB0aGlzIGZ1bmN0aW9uIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGlzc3VlcyB3aGljaCBjb3VsZCBhZmZlY3QgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjI0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MjkuMjgzNzU2NDg0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE2MzA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19wdXRfa2J1ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW9fdXJpbmcuYz05NDg9dm9pZCBpb19yZXFfZGVmZXJfZmFpbGVkKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzMzIgcmVzKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy05NTUtXFx0cmVxX3NldF9mYWlsKHJlcSk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo5NTY6XFx0aW9fcmVxX3NldF9yZXMocmVxLCByZXMsIGlvX3B1dF9rYnVmKHJlcSwgcmVzLCBOVUxMKSk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy05NTctXFx0aWYgKGRlZi1cXHUwMDNlZmFpbClcXG4tLVxcbmlvX3VyaW5nL2tidWYuYz0zODE9aW50IGlvX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuLS1cXG5pb191cmluZy9rYnVmLmMtNDA2LVxcbmlvX3VyaW5nL2tidWYuYzo0MDc6c3RhdGljIGlubGluZSBib29sIF9faW9fcHV0X2tidWZfcmluZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG5pb191cmluZy9rYnVmLmMtNDA4LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsIGludCBsZW4sIGludCBucilcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy00MjAtXFxuaW9fdXJpbmcva2J1Zi5jOjQyMTp1bnNpZ25lZCBpbnQgX19pb19wdXRfa2J1ZnMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXFxuaW9fdXJpbmcva2J1Zi5jLTQyMi1cXHRcXHRcXHQgICAgaW50IGxlbiwgaW50IG5idWZzKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTQzMi1cXG5pb191cmluZy9rYnVmLmM6NDMzOlxcdGlmICghX19pb19wdXRfa2J1Zl9yaW5nKHJlcSwgYmwsIGxlbiwgbmJ1ZnMpKVxcbmlvX3VyaW5nL2tidWYuYy00MzQtXFx0XFx0cmV0IHw9IElPUklOR19DUUVfRl9CVUZfTU9SRTtcXG4tLVxcbmlvX3VyaW5nL2tidWYuaD04Nz12b2lkIGlvX2tidWZfZHJvcF9sZWdhY3koc3RydWN0IGlvX2tpb2NiICpyZXEpO1xcbmlvX3VyaW5nL2tidWYuaC04OC1cXG5pb191cmluZy9rYnVmLmg6ODk6dW5zaWduZWQgaW50IF9faW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxcbmlvX3VyaW5nL2tidWYuaC05MC1cXHRcXHRcXHQgICAgaW50IGxlbiwgaW50IG5idWZzKTtcXG4tLVxcbmlvX3VyaW5nL2tidWYuaD0xMTQ9c3RhdGljIGlubGluZSBib29sIGlvX2tidWZfcmVjeWNsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcXG4tLVxcbmlvX3VyaW5nL2tidWYuaC0xMjUtXFxuaW9fdXJpbmcva2J1Zi5oOjEyNjpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb19wdXRfa2J1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IGxlbixcXG5pb191cmluZy9rYnVmLmgtMTI3LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5oLTEzMC1cXHRcXHRyZXR1cm4gMDtcXG5pb191cmluZy9rYnVmLmg6MTMxOlxcdHJldHVybiBfX2lvX3B1dF9rYnVmcyhyZXEsIGJsLCBsZW4sIDEpO1xcbmlvX3VyaW5nL2tidWYuaC0xMzItfVxcbmlvX3VyaW5nL2tidWYuaC0xMzMtXFxuaW9fdXJpbmcva2J1Zi5oOjEzNDpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb19wdXRfa2J1ZnMoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBsZW4sXFxuaW9fdXJpbmcva2J1Zi5oLTEzNS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLCBpbnQgbmJ1ZnMpXFxuLS1cXG5pb191cmluZy9rYnVmLmgtMTM4LVxcdFxcdHJldHVybiAwO1xcbmlvX3VyaW5nL2tidWYuaDoxMzk6XFx0cmV0dXJuIF9faW9fcHV0X2tidWZzKHJlcSwgYmwsIGxlbiwgbmJ1ZnMpO1xcbmlvX3VyaW5nL2tidWYuaC0xNDAtfVxcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NDkxPXN0YXRpYyBpbmxpbmUgYm9vbCBpb19zZW5kX2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTQ5OS1cXHRpZiAoIShzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSkge1xcbmlvX3VyaW5nL25ldC5jOjUwMDpcXHRcXHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHNlbC1cXHUwMDNldmFsLCBzZWwtXFx1MDAzZWJ1Zl9saXN0KTtcXG5pb191cmluZy9uZXQuYy01MDEtXFx0XFx0Z290byBmaW5pc2g7XFxuLS1cXG5pb191cmluZy9uZXQuYy01MDMtXFxuaW9fdXJpbmcvbmV0LmM6NTA0OlxcdGNmbGFncyA9IGlvX3B1dF9rYnVmcyhyZXEsIHNlbC1cXHUwMDNldmFsLCBzZWwtXFx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLVxcdTAwM2V2YWwpKTtcXG5pb191cmluZy9uZXQuYy01MDUtXFxuLS1cXG5pb191cmluZy9uZXQuYz04NTM9c3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtODc5LVxcbmlvX3VyaW5nL25ldC5jOjg4MDpcXHRcXHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC1cXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCB0aGlzX3JldCkpO1xcbmlvX3VyaW5nL25ldC5jLTg4MS1cXHRcXHRpZiAoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZfUkVUUlkpXFxuLS1cXG5pb191cmluZy9uZXQuYy05MDEtXFx0fSBlbHNlIHtcXG5pb191cmluZy9uZXQuYzo5MDI6XFx0XFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgc2VsLVxcdTAwM2V2YWwsIHNlbC1cXHUwMDNlYnVmX2xpc3QpO1xcbmlvX3VyaW5nL25ldC5jLTkwMy1cXHR9XFxuLS1cXG5pb191cmluZy9ydy5jPTU2Mj12b2lkIGlvX3JlcV9yd19jb21wbGV0ZShzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG4tLVxcbmlvX3VyaW5nL3J3LmMtNTY4LVxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKFJFUV9GX0JVRkZFUl9TRUxFQ1RFRHxSRVFfRl9CVUZGRVJfUklORykpXFxuaW9fdXJpbmcvcncuYzo1Njk6XFx0XFx0cmVxLVxcdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLVxcdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XFxuaW9fdXJpbmcvcncuYy01NzAtXFxuLS1cXG5pb191cmluZy9ydy5jPTY0MD1zdGF0aWMgaW50IGtpb2NiX2RvbmUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHNzaXplX3QgcmV0LFxcbi0tXFxuaW9fdXJpbmcvcncuYy02NTctXFx0XFx0aWYgKHNlbClcXG5pb191cmluZy9ydy5jOjY1ODpcXHRcXHRcXHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHJldCwgc2VsLVxcdTAwM2VidWZfbGlzdCk7XFxuaW9fdXJpbmcvcncuYy02NTktXFx0XFx0aW9fcmVxX3NldF9yZXMocmVxLCBmaW5hbF9yZXQsIGNmbGFncyk7XFxuLS1cXG5pb191cmluZy9ydy5jPTEwMzI9aW50IGlvX3JlYWRfbXNob3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL3J3LmMtMTA2Ny1cXHR9IGVsc2UgaWYgKCEocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkpIHtcXG5pb191cmluZy9ydy5jOjEwNjg6XFx0XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWYocmVxLCByZXQsIHNlbC5idWZfbGlzdCk7XFxuaW9fdXJpbmcvcncuYy0xMDY5LVxcdH0gZWxzZSB7XFxuLS1cXG5pb191cmluZy9ydy5jLTEwNzUtXFx0XFx0ICovXFxuaW9fdXJpbmcvcncuYzoxMDc2OlxcdFxcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgcmV0LCBzZWwuYnVmX2xpc3QpO1xcbmlvX3VyaW5nL3J3LmMtMTA3Ny1cXHRcXHRydy1cXHUwMDNlbGVuID0gMDsgLyogc2ltaWxhcmx5IHRvIGFib3ZlLCByZXNldCBsZW4gdG8gMCAqL1xcbi0tXFxuaW9fdXJpbmcvcncuYz0xMzE5PWludCBpb19kb19pb3BvbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgZm9yY2Vfbm9uc3BpbilcXG4tLVxcbmlvX3VyaW5nL3J3LmMtMTM3NS1cXHRcXHRucl9ldmVudHMrKztcXG5pb191cmluZy9ydy5jOjEzNzY6XFx0XFx0cmVxLVxcdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLVxcdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XFxuaW9fdXJpbmcvcncuYy0xMzc3LVxcdFxcdGlmICghaW9faXNfdXJpbmdfY21kKHJlcSkpXFxuLS1cXG5pb191cmluZy91cmluZ19jbWQuYz0zODc9Ym9vbCBpb191cmluZ19tc2hvdF9jbWRfcG9zdF9jcWUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMzk2LVxcdGlmIChzZWwtXFx1MDAzZXZhbCBcXHUwMDNlIDApIHtcXG5pb191cmluZy91cmluZ19jbWQuYzozOTc6XFx0XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWYocmVxLCBzZWwtXFx1MDAzZXZhbCwgc2VsLVxcdTAwM2VidWZfbGlzdCk7XFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMzk4LVxcdFxcdGlmIChpb19yZXFfcG9zdF9jcWUocmVxLCBzZWwtXFx1MDAzZXZhbCwgY2ZsYWdzIHwgSU9SSU5HX0NRRV9GX01PUkUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjoyOS4zMjc5MjQ1NjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU4NDI1MTE3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBgaW9fcmVxX3J3X2NvbXBsZXRlYCBhbmQgYGlvX2RvX2lvcG9sbGAgRmxhZyBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBob3cgdGhlIGByZXEtXHUwMDNlY3FlLmZsYWdzYCBmaWVsZCBpcyBiZWluZyBtYW5hZ2VkLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGNvbXBsZXRpb24gaGFuZGxpbmcuIEluIGBpb19yZXFfcndfY29tcGxldGVgLCB3ZSBoYXZlOlxuXG5gcmVxLVx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO2Bcblxud2hpY2ggaXMgdXNpbmcgYSBiaXR3aXNlIE9SIHRvIHNldCB0aGUgZmxhZ3MgYWZ0ZXIgYSByZWFkL3dyaXRlIG9wZXJhdGlvbi4gQnV0IEkndmUgZ290IGEgZmxhZy1zZXR0aW5nIHNpdHVhdGlvbiBnb2luZyBvbiBpbiBgaW9fZG9faW9wb2xsYCwgYW5kIHRoZXJlOlxuXG5gcmVxLVx1MDAzZWNxZS5mbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS1cdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7YFxuXG5UaGF0J3MgYW4gYXNzaWdubWVudCwgbWVhbmluZyBgaW9fZG9faW9wb2xsYCBpcyBjbG9iYmVyaW5nIHdoYXRldmVyIHdhcyBwcmV2aW91c2x5IGluIGByZXEtXHUwMDNlY3FlLmZsYWdzYC4gVGhhdCdzIGJhZC4gVGhhdCdzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBhbmQgaXQgY2FuIGNhdXNlIHNvbWUgcHJldHR5IG5hc3R5IGJ1Z3MgaWYgdGhlIHZhbHVlcyBhcmUgbm90IHNldCBjb3JyZWN0bHkuIFRoZSBiaXR3aXNlIG9yIGluIGBpb19yZXFfcndfY29tcGxldGVgIG1ha2VzIHNlbnNlOyB1c2luZyBhbiBhc3NpZ25tZW50IGluIGBpb19kb19pb3BvbGxgIGRvZXNuJ3QuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgcmVsZXZhbnQgYml0cyBvZiB0aGlzIGludmVzdGlnYXRpb24uIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBmb2N1cyBzeW1ib2xzLiBgaW9fZG9faW9wb2xsYCBpcyBkZWZpbml0ZWx5IHRoZSBtb2RpZmllZCBmdW5jdGlvbiwgYW5kIGl0IGxvb2tzIGxpa2UgYGlvX2lvcG9sbF9jaGVja2AgY2FsbHMgaXQgYW5kIHRoZW4gYF9faW9fcHV0X2tidWZzYCBpcyBjYWxsZWQgYnkgYGlvX3B1dF9rYnVmYC5cblxuT2theSwgbmV4dCBJJ2xsIGNoZWNrIHRoZSBFbmFibGVDb25maWdzLiBUaGUgcmVsZXZhbnQgY29uZmlnIGZsYWcgaXMgYElPX1VSSU5HYCwgc28gd2UgYXJlIGRlYWxpbmcgd2l0aCBhIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBpb191cmluZy5cblxuTm93LCBsZXQgbWUgcmV2aWV3IGV2ZXJ5dGhpbmcuIEFjY29yZGluZyB0byB0aGUgY2hlY2tsaXN0IHByb3ZpZGVkLCB0aGUgdmVyZGljdCBzaG91bGQgYmUgYFdvcnRoRnV6emluZzogdHJ1ZWAsIHRoZSByZWFzb25pbmcgbmVlZHMgdG8gYmUgY29uY2lzZSAocG90ZW50aWFsIGZsYWcgY2xvYmJlcmluZyksIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBbXCJJT19VUklOR1wiXWAsIGFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGBbXCJpb19kb19pb3BvbGxcIiwgXCJpb19pb3BvbGxfY2hlY2tcIl1gIG9yIHBvdGVudGlhbGx5IGp1c3QgYFtcImlvX2RvX2lvcG9sbFwiXWAuXG5cbkFscmlnaHQsIEknbSBjb21mb3J0YWJsZSB3aXRoIGFsbCBvZiB0aGF0LiBUaGUgYXJndW1lbnRzIGZvciBgc2V0LXJlc3VsdHNgIGFyZSBhbHNvIGNvcnJlY3Q6IGEgYm9vbGVhbiBmb3IgZnV6emluZywgYSBzdHJpbmcgZm9yIHRoZSByZWFzb25pbmcsIGFuIGFycmF5IG9mIHN0cmluZ3MgZm9yIHRoZSBjb25maWcsIGFuZCBhbiBhcnJheSBvZiBzdHJpbmdzIGZvciB0aGUgc3ltYm9scy5cblxuQWxsIHNldCwgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU1MSwiT3V0cHV0VG9rZW5zIjoxMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MzMuOTEyMTc4MjY1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcyNzM2NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fZG9faW9wb2xsXCIsXG4gICAgXCJpb19pb3BvbGxfY2hlY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpb19kb19pb3BvbGwoKSB0byBiaXR3aXNlLU9SIHRoZSBmbGFncyByZXR1cm5lZCBieSBpb19wdXRfa2J1ZigpIGludG8gcmVxLVxcdTAwM2VjcWUuZmxhZ3MgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyB0aGVtLCBwcmV2ZW50aW5nIHRoZSBsb3NzIG9mIGV4aXN0aW5nIENRRSBmbGFncyBkdXJpbmcgcG9sbGVkIEkvTyBjb21wbGV0aW9uLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgaW9fdXJpbmcgY29tcGxldGlvbiBsb2dpYywgd2FycmFudGluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fZG9faW9wb2xsXCIsXG4gICAgXCJpb19pb3BvbGxfY2hlY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpb19kb19pb3BvbGwoKSB0byBiaXR3aXNlLU9SIHRoZSBmbGFncyByZXR1cm5lZCBieSBpb19wdXRfa2J1ZigpIGludG8gcmVxLVxcdTAwM2VjcWUuZmxhZ3MgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyB0aGVtLCBwcmV2ZW50aW5nIHRoZSBsb3NzIG9mIGV4aXN0aW5nIENRRSBmbGFncyBkdXJpbmcgcG9sbGVkIEkvTyBjb21wbGV0aW9uLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgaW9fdXJpbmcgY29tcGxldGlvbiBsb2dpYywgd2FycmFudGluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjozMy45ODk0NTg2NDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MzkyNTU4NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MzMuOTg5OTgwOTYyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDkzOTIwMzIyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpb19kb19pb3BvbGwoKWAgaW4gYGlvX3VyaW5nL3J3LmNgIGJ5IGNoYW5naW5nIGByZXEtXFx1MDAzZWNxZS5mbGFncyA9IGlvX3B1dF9rYnVmKC4uLilgIHRvIGByZXEtXFx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZiguLi4pYC4gVGhpcyBpcyBhIG9uZS1saW5lIGxvZ2ljYWwgZml4IGVuc3VyaW5nIHRoYXQgZmxhZ3MgYWxyZWFkeSBzZXQgb24gYHJlcS1cXHUwMDNlY3FlLmZsYWdzYCAoc3VjaCBhcyBgSU9SSU5HX0NRRV9GXzMyYCkgYXJlIHByZXNlcnZlZCB3aGVuIGFwcGVuZGluZyBjb21wbGV0aW9uIGZsYWdzIGZvciBwcm92aWRlZCBidWZmZXIgcmVsZWFzZSBkdXJpbmcgSU8gcG9sbGluZy5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kYXJ5IGNhbGN1bGF0aW9ucyBpbiB3YXlzIHRoYXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIGRvZXMgbm90IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIGdlbmVyYWwgdGVzdGluZyBzdWZmaWNlIGZvciB2ZXJpZnlpbmcgaW9fdXJpbmcgcmVxdWVzdCBsaWZlY3ljbGUgY29ycmVjdG5lc3MsIGFuZCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWRjMWZiYzkxMTQ1MWYyZTk3ZjdiMDQ3YTVjN2U5MTkyYjBlOTVhM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjA6MjU6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9ydy5jIGIvaW9fdXJpbmcvcncuY1xuaW5kZXggOTUxMDZkZDFkN2ViOS4uZjJiYmIwYjFjMzBhMSAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3J3LmNcbisrKyBiL2lvX3VyaW5nL3J3LmNcbkBAIC0xMzczLDcgKzEzNzMsNyBAQCBpbnQgaW9fZG9faW9wb2xsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGZvcmNlX25vbnNwaW4pXG4gXHRcdGxpc3RfZGVsKFx1MDAyNnJlcS1cdTAwM2Vpb3BvbGxfbm9kZSk7XG4gXHRcdHdxX2xpc3RfYWRkX3RhaWwoXHUwMDI2cmVxLVx1MDAzZWNvbXBfbGlzdCwgXHUwMDI2Y3R4LVx1MDAzZXN1Ym1pdF9zdGF0ZS5jb21wbF9yZXFzKTtcbiBcdFx0bnJfZXZlbnRzKys7XG4tXHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO1xuK1x0XHRyZXEtXHUwMDNlY3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS1cdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XG4gXHRcdGlmICghaW9faXNfdXJpbmdfY21kKHJlcSkpXG4gXHRcdFx0aW9fcmVxX3J3X2NsZWFudXAocmVxLCAwKTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjMzLjk4OTk4MjI1MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODMyNTk2MTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGJyZWFrIGRvd24gdGhlIGNoYW5nZXMgbGluZSBieSBsaW5lLCBmb2N1c2luZyBvbiB0aGVpciBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBgaW9fdXJpbmdgIGNvbnRleHQuIExvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IHNlZW1zIHRoZSBjb3JlIGNoYW5nZSBpcyB3aXRoaW4gYGlvX2RvX2lvcG9sbGAgYW5kIHNwZWNpZmljYWxseSBhcm91bmQgaG93IGByZXEtXHUwMDNlY3FlLmZsYWdzYCBpcyBoYW5kbGVkIGluIHJlbGF0aW9uIHRvIGBpb19wdXRfa2J1ZmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBlbGVtZW50cyBpbnRlcmFjdC5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGF0J3MgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGUgYHw9YCBvcGVyYXRvciBoZXJlLCBhbmQgd2h5IHdhcyBpdCBjaGFuZ2VkIGZyb20gYSBzaW1wbGUgYXNzaWdubWVudCBgPWA/IENsZWFybHksIHRoZSBvcmlnaW5hbCBjb2RlIGFzc3VtZWQgZXhjbHVzaXZlIGNvbnRyb2wgb3ZlciB0aG9zZSBmbGFncy4gVGhlIGNoYW5nZSB0byBgfD1gIGltcGxpZXMgdGhhdCB0aGVyZSBtYXkgaGF2ZSBiZWVuIG90aGVyIGZsYWdzIGFscmVhZHkgc2V0IHRoYXQgd2Ugbm93IGludGVuZCB0byAqcHJlc2VydmUqLiBCdXQgd2hhdCBhcmUgdGhlc2Ugb3RoZXIgZmxhZ3M/IFdoYXQgZG9lcyBgaW9fcHV0X2tidWZgIGNvbnRyaWJ1dGUsIGFuZCBpcyB0aGlzIGNoYW5nZSByZWxhdGVkIHRvIGJ1ZmZlciBtYW5hZ2VtZW50IG9yIGNvbXBsZXRpb24gc2lnbmFsaW5nP1xuXG5JJ2xsIG5lZWQgdG8gZ28gZGVlcGVyLiBUaW1lIHRvIHB1bGwgdXAgYGlvX2RvX2lvcG9sbGAgYW5kIGBpb19wdXRfa2J1ZmAgdXNpbmcgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCBzZWUgd2hhdCB0aGUgZmxhZyBmaWVsZCBpcyB1c2VkIGZvciBhbmQgaWYgdGhlIGNoYW5nZSBoYXMgaW1wbGljYXRpb25zIGZvciBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIGhhdmUgdG8gbG9vayBpbnRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdyB0aGF0IGJvdGggb2YgdGhvc2UgZnVuY3Rpb25zIHVzZSB0byBzZWUgd2hhdCB0aGUgc3RhdGUgb2YgZmxhZ3MgbWlnaHQgYmUgcHJpb3IgdG8gdGhpcyBvcGVyYXRpb24uIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IGNvbXBsZXRpb24gcXVldWVzIGFyZSB1cGRhdGVkIGFuZCBob3cgdGhlIHN5c3RlbSBzaWduYWxzIGV2ZW50cyB0byB1c2VyIHNwYWNlLiBVbmRlcnN0YW5kaW5nIHRoZSBwb3NzaWJsZSBmbGFnIGNvbWJpbmF0aW9ucyBoZXJlIGlzIHRoZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjozOC44MjI1ODE4MzRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL3J3LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM1MDpcXHRcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9IWUJSSURfSU9QT0xMKVxcbjEzNTE6XFx0XFx0XFx0XFx0cmV0ID0gaW9fdXJpbmdfaHlicmlkX3BvbGwocmVxLCBcXHUwMDI2aW9iLCBwb2xsX2ZsYWdzKTtcXG4xMzUyOlxcdFxcdFxcdGVsc2VcXG4xMzUzOlxcdFxcdFxcdFxcdHJldCA9IGlvX3VyaW5nX2NsYXNzaWNfcG9sbChyZXEsIFxcdTAwMjZpb2IsIHBvbGxfZmxhZ3MpO1xcbjEzNTQ6XFx0XFxuMTM1NTpcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpXFxuMTM1NjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzNTc6XFx0XFx0XFx0ZWxzZSBpZiAocmV0KVxcbjEzNTg6XFx0XFx0XFx0XFx0cG9sbF9mbGFncyB8PSBCTEtfUE9MTF9PTkVTSE9UO1xcbjEzNTk6XFx0XFxuMTM2MDpcXHRcXHRcXHQvKiBpb3BvbGwgbWF5IGhhdmUgY29tcGxldGVkIGN1cnJlbnQgcmVxICovXFxuMTM2MTpcXHRcXHRcXHRpZiAoIXJxX2xpc3RfZW1wdHkoXFx1MDAyNmlvYi5yZXFfbGlzdCkgfHxcXG4xMzYyOlxcdFxcdFxcdCAgICBSRUFEX09OQ0UocmVxLVxcdTAwM2Vpb3BvbGxfY29tcGxldGVkKSlcXG4xMzYzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEzNjQ6XFx0XFx0fVxcbjEzNjU6XFx0XFxuMTM2NjpcXHRcXHRpZiAoIXJxX2xpc3RfZW1wdHkoXFx1MDAyNmlvYi5yZXFfbGlzdCkpXFxuMTM2NzpcXHRcXHRcXHRpb2IuY29tcGxldGUoXFx1MDAyNmlvYik7XFxuMTM2ODpcXHRcXG4xMzY5OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHRtcCwgXFx1MDAyNmN0eC1cXHUwMDNlaW9wb2xsX2xpc3QsIGlvcG9sbF9ub2RlKSB7XFxuMTM3MDpcXHRcXHRcXHQvKiBvcmRlciB3aXRoIGlvX2NvbXBsZXRlX3J3X2lvcG9sbCgpLCBlLmcuIC1cXHUwMDNlcmVzdWx0IHVwZGF0ZXMgKi9cXG4xMzcxOlxcdFxcdFxcdGlmICghc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2cmVxLVxcdTAwM2Vpb3BvbGxfY29tcGxldGVkKSlcXG4xMzcyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEzNzM6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnJlcS1cXHUwMDNlaW9wb2xsX25vZGUpO1xcbjEzNzQ6XFx0XFx0XFx0d3FfbGlzdF9hZGRfdGFpbChcXHUwMDI2cmVxLVxcdTAwM2Vjb21wX2xpc3QsIFxcdTAwMjZjdHgtXFx1MDAzZXN1Ym1pdF9zdGF0ZS5jb21wbF9yZXFzKTtcXG4xMzc1OlxcdFxcdFxcdG5yX2V2ZW50cysrO1xcbjEzNzY6XFx0XFx0XFx0cmVxLVxcdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLVxcdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XFxuMTM3NzpcXHRcXHRcXHRpZiAoIWlvX2lzX3VyaW5nX2NtZChyZXEpKVxcbjEzNzg6XFx0XFx0XFx0XFx0aW9fcmVxX3J3X2NsZWFudXAocmVxLCAwKTtcXG4xMzc5OlxcdFxcdH1cXG4xMzgwOlxcdFxcdGlmIChucl9ldmVudHMpXFxuMTM4MTpcXHRcXHRcXHRfX2lvX3N1Ym1pdF9mbHVzaF9jb21wbGV0aW9ucyhjdHgpO1xcbjEzODI6XFx0XFx0cmV0dXJuIG5yX2V2ZW50cztcXG4xMzgzOlxcdH1cXG4xMzg0OlxcdFxcbjEzODU6XFx0dm9pZCBpb19yd19jYWNoZV9mcmVlKGNvbnN0IHZvaWQgKmVudHJ5KVxcbjEzODY6XFx0e1xcbjEzODc6XFx0XFx0c3RydWN0IGlvX2FzeW5jX3J3ICpydyA9IChzdHJ1Y3QgaW9fYXN5bmNfcncgKikgZW50cnk7XFxuMTM4ODpcXHRcXG4xMzg5OlxcdFxcdGlvX3ZlY19mcmVlKFxcdTAwMjZydy1cXHUwMDNldmVjKTtcXG4xMzkwOlxcdFxcdGtmcmVlKHJ3KTtcXG4xMzkxOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MzguODIyNjkxMjg0WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNjMzMjUxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gQ29tcGxldGlvbiBRdWV1ZSBFbnRyaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNlIHRoZSBsaWZlY3ljbGUgb2YgYHJlcS1cdTAwM2VjcWVgLiBJdCdzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IEkvTyBvcGVyYXRpb25zIGFyZSBjb21wbGV0ZWQgYW5kIGhhbmRsZWQsIGVzcGVjaWFsbHkgaW4gYXN5bmNocm9ub3VzIHNjZW5hcmlvcy4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgdGhlIGByd2AgY29tbWFuZCwgYnV0IEkgc2hvdWxkIGFsc28ga2VlcCBhbiBleWUgb3V0IGZvciBvdGhlciBpb3BvbGwtYmFzZWQgY29tbWFuZHMsIGp1c3QgaW4gY2FzZS4gVGhleSBtaWdodCBzaGFyZSBzb21lIG9mIHRoZSBzYW1lIG1lY2hhbmlzbXMuXG5cbk15IGluaXRpYWwgYXBwcm9hY2ggd2lsbCBiZSB0byBwaW5wb2ludCB3aGVyZSBgcmVxLVx1MDAzZWNxZWAgaXMgKmZpcnN0KiBpbml0aWFsaXplZC4gVGhpcyB3aWxsIGxpa2VseSBzaGVkIGxpZ2h0IG9uIHRoZSBpbml0aWFsIGNvbnRleHQgYW5kIGV4cGVjdGVkIHVzZS4gRnJvbSB0aGVyZSwgSSdsbCB0cmFjayBpdHMgam91cm5leSB0aHJvdWdoIHRoZSBzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHBhdGggdGhlIGNvbnRyb2wgZmxvdyB0YWtlcyB0aHJvdWdoIHRoZSBwcm9ncmFtLlxuXG5JJ2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3Iga2V5IGZ1bmN0aW9uIG5hbWVzOiBgaW9wb2xsYCwgYGlvX2NvbXBsZXRlX3J3X2lvcG9sbGAsIGFuZCBgaW9fcHV0X2tidWZgLiBUaGVzZSBmdW5jdGlvbnMgc291bmQgbGlrZSBsaWtlbHkgY2FuZGlkYXRlcyBpbnZvbHZlZCBpbiBtYW5hZ2luZyB0aGUgY29tcGxldGlvbiBxdWV1ZSBlbnRyaWVzIGFuZCBoYW5kbGluZyB0aGVpciBkYXRhLiBUaGUgcmVzdWx0cyBzaG91bGQgcHJvdmlkZSBtZSB3aXRoIGFuIGluaXRpYWwgbWFwIG9mIHJlbGF0ZWQgZnVuY3Rpb25zLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBsZWFkIG1lIHRvIHRoZSByaWdodCBwbGFjZSBhbmQgYWxsb3cgbWUgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZW50cmllcyBhcmUgbWFuaXB1bGF0ZWQgYW5kIGV2ZW50dWFsbHkgcmVsZWFzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjQxLjg4NjAxOTQzMloiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3OTk2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fY29tcGxldGVfcndfaW9wb2xsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL3J3LmM9MjY9c3RhdGljIHZvaWQgaW9fY29tcGxldGVfcncoc3RydWN0IGtpb2NiICpraW9jYiwgbG9uZyByZXMpO1xcbmlvX3VyaW5nL3J3LmM6Mjc6c3RhdGljIHZvaWQgaW9fY29tcGxldGVfcndfaW9wb2xsKHN0cnVjdCBraW9jYiAqa2lvY2IsIGxvbmcgcmVzKTtcXG5pb191cmluZy9ydy5jLTI4LVxcbi0tXFxuaW9fdXJpbmcvcncuYz0yNDU9c3RhdGljIGludCBfX2lvX3ByZXBfcncoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSxcXG4tLVxcbmlvX3VyaW5nL3J3LmMtMjc2LVxcdGlmIChyZXEtXFx1MDAzZWN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfSU9QT0xMKVxcbmlvX3VyaW5nL3J3LmM6Mjc3OlxcdFxcdHJ3LVxcdTAwM2VraW9jYi5raV9jb21wbGV0ZSA9IGlvX2NvbXBsZXRlX3J3X2lvcG9sbDtcXG5pb191cmluZy9ydy5jLTI3OC1cXHRlbHNlXFxuLS1cXG5pb191cmluZy9ydy5jPTU3NT1zdGF0aWMgdm9pZCBpb19jb21wbGV0ZV9ydyhzdHJ1Y3Qga2lvY2IgKmtpb2NiLCBsb25nIHJlcylcXG4tLVxcbmlvX3VyaW5nL3J3LmMtNTg1LVxcbmlvX3VyaW5nL3J3LmM6NTg2OnN0YXRpYyB2b2lkIGlvX2NvbXBsZXRlX3J3X2lvcG9sbChzdHJ1Y3Qga2lvY2IgKmtpb2NiLCBsb25nIHJlcylcXG5pb191cmluZy9ydy5jLTU4Ny17XFxuLS1cXG5pb191cmluZy9ydy5jPTYyMj1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcndfZG9uZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3NpemVfdCByZXQpXFxuLS1cXG5pb191cmluZy9ydy5jLTYzNC1cXHRpZiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0lPUE9MTClcXG5pb191cmluZy9ydy5jOjYzNTpcXHRcXHRpb19jb21wbGV0ZV9yd19pb3BvbGwoXFx1MDAyNnJ3LVxcdTAwM2VraW9jYiwgcmV0KTtcXG5pb191cmluZy9ydy5jLTYzNi1cXHRlbHNlXFxuLS1cXG5pb191cmluZy9ydy5jPTEzMTk9aW50IGlvX2RvX2lvcG9sbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBmb3JjZV9ub25zcGluKVxcbi0tXFxuaW9fdXJpbmcvcncuYy0xMzY5LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHRtcCwgXFx1MDAyNmN0eC1cXHUwMDNlaW9wb2xsX2xpc3QsIGlvcG9sbF9ub2RlKSB7XFxuaW9fdXJpbmcvcncuYzoxMzcwOlxcdFxcdC8qIG9yZGVyIHdpdGggaW9fY29tcGxldGVfcndfaW9wb2xsKCksIGUuZy4gLVxcdTAwM2VyZXN1bHQgdXBkYXRlcyAqL1xcbmlvX3VyaW5nL3J3LmMtMTM3MS1cXHRcXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnJlcS1cXHUwMDNlaW9wb2xsX2NvbXBsZXRlZCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjQxLjk0NzgyMzcyOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDgzODA1Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYGlvX2NvbXBsZXRlX3J3X2lvcG9sbGAgZnVuY3Rpb24gaW4gYGlvX3VyaW5nL3J3LmNgLCBhcyBpZiBJJ20gd2Fsa2luZyB0aHJvdWdoIGl0IG15c2VsZjpcblxuKipEaXZpbmcgaW50byBgaW9fY29tcGxldGVfcndfaW9wb2xsYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gYGlvX2NvbXBsZXRlX3J3X2lvcG9sbGAuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBjb21wbGV0aW5nIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyB3aGVuIHRoZSBgSU9QT0xgIGZsYWcgaXMgaW52b2x2ZWQgaW4gYGlvX3VyaW5nYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlJ3JlIGhhbmRsaW5nIHRoZSBhc3luY2hyb25vdXMgY29tcGxldGlvbiBpbiBhIHBvbGxlZCBjb250ZXh0LiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIG5lZWQgdG8gY2hlY2sgZm9yIHBlbmRpbmcgZXZlbnRzIGFuZCBoYW5kbGUgdmFyaW91cyBlZGdlIGNhc2VzIOKAkyB0aGlzIGlzIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcyBpbiB0aGUgYXN5bmNocm9ub3VzIEkvTyB3b3JsZC5cblxuRmlyc3QsIEkgZXhwZWN0IHRvIHNlZSBhbiBleGFtaW5hdGlvbiBvZiB0aGUgYGlvX3VyaW5nX3NxZWAgc3RydWN0dXJlIChTUUUpIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29tcGxldGVkIHJlcXVlc3QuIEknbSBnb2luZyB0byBxdWlja2x5IGxvb2sgZm9yIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdHVzIG9mIHRoZSBvcGVyYXRpb24g4oCTIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgY29kZSwgYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSBjb2RlIGhhbmRsZXMgYm90aCBzdWNjZXNzZnVsIGFuZCBlcnJvciBzY2VuYXJpb3MuXG5cbk5leHQsIEknbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcG9sbCBpbmZyYXN0cnVjdHVyZS4gSXMgaXQgY2hlY2tpbmcgdGhlIHN0YXR1cyBvZiB0aGUgSS9PIGV2ZW50IGFnYWluc3QgYSBwb2xsaW5nIHN0cnVjdHVyZSAocHJvYmFibHkgYW4gYGVwb2xsX2V2ZW50YCBvciBzaW1pbGFyKT8gSSdtIGludGVyZXN0ZWQgaW4gaG93IGl0IHN5bmNocm9uaXplcyB3aXRoIHRoZSBwb2xsaW5nIG1lY2hhbmlzbSwgZW5zdXJpbmcgdGhhdCB0aGUgY29tcGxldGlvbiBpcyBhY2tub3dsZWRnZWQgY29ycmVjdGx5IGFuZCB0aGUgd2FpdGluZyBwcm9jZXNzIGlzIG5vdGlmaWVkLiBUaGlzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGVmZmljaWVudCBtYW5hZ2VtZW50IG9mIEkvTyByZXNvdXJjZXMgd2hlbiB0aGUga2VybmVsIGlzIG1hbmFnaW5nIHRoZSBwb2xsaW5nIHNpZGUuXG5cblRoZSB1c2Ugb2YgYElPUE9MYCBzdWdnZXN0cyB0aGF0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgZm9ybSBvZiBvcHRpbWl6YXRpb24gb3Igc2hvcnQtY2lyY3VpdGluZyBpbiBzcGVjaWZpYyBzaXR1YXRpb25zLiBJJ20gYW50aWNpcGF0aW5nIHNvbWUgY29uZGl0aW9uYWwgY2hlY2tzIGJhc2VkIG9uIHRoZSBgSU9QT0xgIGZsYWcncyB2YWx1ZS4gSSdtIHRoaW5raW5nIHdlIG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCBlaXRoZXIgYWdncmVzc2l2ZSBwb2xsaW5nLCBvciBhIG1vcmUgZGVsYXllZCBjb21wbGV0aW9uIG1lY2hhbmlzbSwgZGVwZW5kZW50IG9uIGhvdyB0aGUga2VybmVsIHNlZXMgdGhlIGRhdGEgaXMgYXZhaWxhYmxlLlxuXG5JJ20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBwb3RlbnRpYWwgZm9yIGhhbmRsaW5nIHBhcnRpYWwgY29tcGxldGlvbnMuIERvZXMgdGhlIGNvZGUgYWNjb3VudCBmb3Igc2NlbmFyaW9zIHdoZXJlIGEgcmVhZCBvciB3cml0ZSBvcGVyYXRpb24gbWlnaHQgb25seSB0cmFuc2ZlciBhIHN1YnNldCBvZiB0aGUgcmVxdWVzdGVkIGRhdGEsIHBlcmhhcHMgZHVlIHRvIGEgc2hvcnQgcmVhZCBvciBhIHJlc291cmNlIGxpbWl0YXRpb24/IEknbSBob3BpbmcgdG8gc2VlIGhvdyB0aGUgcmVtYWluaW5nIGJ5dGVzLCBpZiBhbnksIGFyZSBtYW5hZ2VkIGFuZCBoYW5kbGVkLiBBcmUgd2UgcmVzY2hlZHVsaW5nIGl0IHdpdGggYSBuZXcgU1FFP1xuXG5GaW5hbGx5LCB0aGUgY29udGV4dC4gSSdsbCBiZSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBjb21wbGV0aW9uIGhhbmRsaW5nIGFuZCB0aGUgdXNlci1zcGFjZSBzdWJtaXNzaW9uLiBIb3cgaXMgdGhlIGNvbXBsZXRlZCBldmVudCBjb21tdW5pY2F0ZWQgYmFjayB0byB0aGUgYXBwbGljYXRpb24/IElzIHRoZXJlIHNvbWUgZm9ybSBvZiBtZW1vcnkgYmFycmllciBpbnZvbHZlZD8gRG9lcyB0aGlzIGNvZGUgaW50ZXJhY3Qgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgaW9fdXJpbmcgc3lzdGVtLCBsaWtlIHRoZSBDUUUgKENvbXBsZXRpb24gUXVldWUgRW50cnkpIGhhbmRsaW5nPyBUaGF0J3Mgd2hhdCBJJ2xsIGJlIHdhdGNoaW5nIGZvci4gUmlnaHQsIGxldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ2MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjQ2LjAzMTYzMjA3NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvcncuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1ODA6XFx0XFx0X19pb19jb21wbGV0ZV9yd19jb21tb24ocmVxLCByZXMpO1xcbiA1ODE6XFx0XFx0aW9fcmVxX3NldF9yZXMocmVxLCBpb19maXh1cF9yd19yZXMocmVxLCByZXMpLCAwKTtcXG4gNTgyOlxcdFxcdHJlcS1cXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19yZXFfcndfY29tcGxldGU7XFxuIDU4MzpcXHRcXHRfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgSU9VX0ZfVFdRX0xBWllfV0FLRSk7XFxuIDU4NDpcXHR9XFxuIDU4NTpcXHRcXG4gNTg2OlxcdHN0YXRpYyB2b2lkIGlvX2NvbXBsZXRlX3J3X2lvcG9sbChzdHJ1Y3Qga2lvY2IgKmtpb2NiLCBsb25nIHJlcylcXG4gNTg3OlxcdHtcXG4gNTg4OlxcdFxcdHN0cnVjdCBpb19ydyAqcncgPSBjb250YWluZXJfb2Yoa2lvY2IsIHN0cnVjdCBpb19ydywga2lvY2IpO1xcbiA1ODk6XFx0XFx0c3RydWN0IGlvX2tpb2NiICpyZXEgPSBjbWRfdG9faW9fa2lvY2IocncpO1xcbiA1OTA6XFx0XFx0aW50IGZpbmFsX3JlcyA9IGlvX2ZpeHVwX3J3X3JlcyhyZXEsIHJlcyk7XFxuIDU5MTpcXHRcXG4gNTkyOlxcdFxcdGlmIChraW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX1dSSVRFKVxcbiA1OTM6XFx0XFx0XFx0aW9fcmVxX2VuZF93cml0ZShyZXEpO1xcbiA1OTQ6XFx0XFxuIDU5NTpcXHRcXHRpZiAocmVzID09IC1FQUdBSU4gXFx1MDAyNlxcdTAwMjYgaW9fcndfc2hvdWxkX3JlaXNzdWUocmVxKSlcXG4gNTk2OlxcdFxcdFxcdHJlcS1cXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfUkVJU1NVRSB8IFJFUV9GX0JMX05PX1JFQ1lDTEU7XFxuIDU5NzpcXHRcXHRlbHNlIGlmICh1bmxpa2VseShmaW5hbF9yZXMgIT0gcmVxLVxcdTAwM2VjcWUucmVzKSlcXG4gNTk4OlxcdFxcdFxcdHJlcS1cXHUwMDNlY3FlLnJlcyA9IGZpbmFsX3JlcztcXG4gNTk5OlxcdFxcbiA2MDA6XFx0XFx0Lyogb3JkZXIgd2l0aCBpb19pb3BvbGxfY29tcGxldGUoKSBjaGVja2luZyAtXFx1MDAzZWlvcG9sbF9jb21wbGV0ZWQgKi9cXG4gNjAxOlxcdFxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZyZXEtXFx1MDAzZWlvcG9sbF9jb21wbGV0ZWQsIDEpO1xcbiA2MDI6XFx0fVxcbiA2MDM6XFx0XFxuIDYwNDpcXHRzdGF0aWMgaW5saW5lIHNzaXplX3QgaW9fZml4dXBfcmVzdGFydF9yZXMoc3NpemVfdCByZXQpXFxuIDYwNTpcXHR7XFxuIDYwNjpcXHRcXHRzd2l0Y2ggKHJldCkge1xcbiA2MDc6XFx0XFx0Y2FzZSAtRVJFU1RBUlRTWVM6XFxuIDYwODpcXHRcXHRjYXNlIC1FUkVTVEFSVE5PSU5UUjpcXG4gNjA5OlxcdFxcdGNhc2UgLUVSRVNUQVJUTk9IQU5EOlxcbiA2MTA6XFx0XFx0Y2FzZSAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLOlxcbiA2MTE6XFx0XFx0XFx0LypcXG4gNjEyOlxcdFxcdFxcdCAqIFdlIGNhbid0IGp1c3QgcmVzdGFydCB0aGUgc3lzY2FsbCwgc2luY2UgcHJldmlvdXNseVxcbiA2MTM6XFx0XFx0XFx0ICogc3VibWl0dGVkIHNxZXMgbWF5IGFscmVhZHkgYmUgaW4gcHJvZ3Jlc3MuIEp1c3QgZmFpbFxcbiA2MTQ6XFx0XFx0XFx0ICogdGhpcyBJTyB3aXRoIEVJTlRSLlxcbiA2MTU6XFx0XFx0XFx0ICovXFxuIDYxNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbiA2MTc6XFx0XFx0ZGVmYXVsdDpcXG4gNjE4OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDYxOTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjQ2LjAzMTc3ODYyNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MTk3ODY0MTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgaW9fdXJpbmcgRmxhZyBVc2FnZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHJlcS1cdTAwM2VjcWUuZmxhZ3NgIGZpZWxkIGluIGBpb191cmluZ2AgaXMgYmVpbmcgbWFuaXB1bGF0ZWQgYW5kIHVzZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyBsaWZlY3ljbGUuIEkgd2FudCB0byBzZWUgKndoZXJlKiBpbiB0aGUgY29kZSB0aGVzZSBmbGFncyBhcmUgYmVpbmcgc2V0IChvciBjbGVhcmVkKS4gVGhpcyBtZWFucyBsb29raW5nIGF0IHRoZSBoYW5kbGVycyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IHRvdWNoIHRoaXMgZmllbGQsIGVzcGVjaWFsbHkgdGhvc2UgcmVsYXRlZCB0byB0aGUgY29tbWFuZCBxdWV1ZSBlbnRyeSAoYGNxZWApLlxuXG5TcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcnBsYXkgd2l0aCB0aGUgYGlvX2lzX3VyaW5nX2NtZChyZXEpYCBmdW5jdGlvbiwgYXMgdGhhdCBwcm9iYWJseSBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFdoYXQgZGVjaXNpb25zIGFyZSBtYWRlIGJhc2VkIG9uIHRoZSBmbGFnJ3MgY3VycmVudCBzdGF0ZT8gV2hhdCBvdGhlciBmdW5jdGlvbnMgb3IgY29tcG9uZW50cyByZWx5IG9uIHRoZXNlIGZsYWdzIHRvIHBlcmZvcm0gdGhlaXIgdGFza3Mgd2l0aGluIHRoZSBgaW9fdXJpbmdgIGZyYW1ld29yaz9cblxuSSdsbCBhbHNvIGV4cGFuZCB0aGlzIHNlYXJjaCB0byBpbmNsdWRlIGFueSBvdGhlciBoYW5kbGVycyBvciBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudDsgSSBjYW4ndCBiZSB0b28gbmFycm93IGhlcmUsIHNvIEkgbmVlZCB0byBjYXN0IGEgd2lkZSBuZXQuIEJhc2ljYWxseSwgSSB3aWxsIGhhdmUgdG8gc2VhcmNoIGZvciBldmVyeSB1c2Ugb2YgYHJlcS1cdTAwM2VjcWUuZmxhZ3NgIGluIHRoZSBgaW9fdXJpbmdgIGNvZGViYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Nzk3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjo1My4yMjk2NDYxODZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MjE0NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNxZVxcXFwuZmxhZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW9fdXJpbmcuYz01MTU9c3RhdGljIHZvaWQgX19pb19jcXJpbmdfb3ZlcmZsb3dfZmx1c2goc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgZHlpbmcpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTUzMS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW9fb3ZlcmZsb3dfY3FlLCBsaXN0KTtcXG5pb191cmluZy9pb191cmluZy5jOjUzMjpcXHRcXHRpZiAob2NxZS1cXHUwMDNlY3FlLmZsYWdzIFxcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy01MzMtXFx0XFx0ICAgIGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIHtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9NjUyPXN0YXRpYyBzdHJ1Y3QgaW9fb3ZlcmZsb3dfY3FlICppb19hbGxvY19vY3FlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy02NjktXFx0XFx0b2NxZS1cXHUwMDNlY3FlLnJlcyA9IGNxZS1cXHUwMDNlcmVzO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6NjcwOlxcdFxcdG9jcWUtXFx1MDAzZWNxZS5mbGFncyA9IGNxZS1cXHUwMDNlZmxhZ3M7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy02NzEtXFx0XFx0aWYgKGlzX2NxZTMyIFxcdTAwMjZcXHUwMDI2IGJpZ19jcWUpIHtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9Mjk3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpb19maWxsX2NxZV9yZXEoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5oLTI5OS17XFxuaW9fdXJpbmcvaW9fdXJpbmcuaDozMDA6XFx0Ym9vbCBpc19jcWUzMiA9IHJlcS1cXHUwMDNlY3FlLmZsYWdzIFxcdTAwMjYgSU9SSU5HX0NRRV9GXzMyO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzAxLVxcdHN0cnVjdCBpb191cmluZ19jcWUgKmNxZTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9MzMwPXN0YXRpYyBpbmxpbmUgdm9pZCBpb19yZXFfc2V0X3JlcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgczMyIHJlcywgdTMyIGNmbGFncylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzMyLVxcdHJlcS1cXHUwMDNlY3FlLnJlcyA9IHJlcztcXG5pb191cmluZy9pb191cmluZy5oOjMzMzpcXHRyZXEtXFx1MDAzZWNxZS5mbGFncyA9IGNmbGFncztcXG5pb191cmluZy9pb191cmluZy5oLTMzNC19XFxuLS1cXG5pb191cmluZy9pb191cmluZy5oPTM0Mz1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcmVxX3NldF9yZXMzMihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgczMyIHJlcywgdTMyIGNmbGFncyxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzQ2LVxcdHJlcS1cXHUwMDNlY3FlLnJlcyA9IHJlcztcXG5pb191cmluZy9pb191cmluZy5oOjM0NzpcXHRyZXEtXFx1MDAzZWNxZS5mbGFncyA9IGNmbGFncyB8IGN0eF9jcWUzMl9mbGFncyhyZXEtXFx1MDAzZWN0eCk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zNDgtXFx0cmVxLVxcdTAwM2ViaWdfY3FlLmV4dHJhMSA9IGV4dHJhMTtcXG4tLVxcbmlvX3VyaW5nL21zZ19yaW5nLmM9NzM9c3RhdGljIHZvaWQgaW9fbXNnX3R3X2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxcbi0tXFxuaW9fdXJpbmcvbXNnX3JpbmcuYy03Ny1cXG5pb191cmluZy9tc2dfcmluZy5jOjc4OlxcdGlvX2FkZF9hdXhfY3FlKGN0eCwgcmVxLVxcdTAwM2VjcWUudXNlcl9kYXRhLCByZXEtXFx1MDAzZWNxZS5yZXMsIHJlcS1cXHUwMDNlY3FlLmZsYWdzKTtcXG5pb191cmluZy9tc2dfcmluZy5jLTc5LVxcdGtmcmVlX3JjdShyZXEsIHJjdV9oZWFkKTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTg1Mz1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9uZXQuYy04ODEtXFx0XFx0aWYgKHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWX1JFVFJZKVxcbmlvX3VyaW5nL25ldC5jOjg4MjpcXHRcXHRcXHRjZmxhZ3MgPSByZXEtXFx1MDAzZWNxZS5mbGFncyB8IChjZmxhZ3MgXFx1MDAyNiBDUUVfRl9NQVNLKTtcXG5pb191cmluZy9uZXQuYy04ODMtXFx0XFx0aWYgKHNyLVxcdTAwM2Vtc2hvdF9sZW4gXFx1MDAyNlxcdTAwMjYgc2VsLVxcdTAwM2V2YWwgXFx1MDAzZT0gc3ItXFx1MDAzZW1zaG90X2xlbilcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTg5NC1cXHRcXHQgICAgIWlvdl9pdGVyX2NvdW50KFxcdTAwMjZrbXNnLVxcdTAwM2Vtc2cubXNnX2l0ZXIpKSB7XFxuaW9fdXJpbmcvbmV0LmM6ODk1OlxcdFxcdFxcdHJlcS1cXHUwMDNlY3FlLmZsYWdzID0gY2ZsYWdzIFxcdTAwMjYgfkNRRV9GX01BU0s7XFxuaW9fdXJpbmcvbmV0LmMtODk2LVxcdFxcdFxcdHNyLVxcdTAwM2VsZW4gPSBrbXNnLVxcdTAwM2Vtc2cubXNnX2lucTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTEzNDc9aW50IGlvX3NlbmRfemNfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTM3Mi1cXHRub3RpZi1cXHUwMDNlY3FlLnJlcyA9IDA7XFxuaW9fdXJpbmcvbmV0LmM6MTM3MzpcXHRub3RpZi1cXHUwMDNlY3FlLmZsYWdzID0gSU9SSU5HX0NRRV9GX05PVElGO1xcbmlvX3VyaW5nL25ldC5jLTEzNzQtXFx0cmVxLVxcdTAwM2VmbGFncyB8PSBSRVFfRl9ORUVEX0NMRUFOVVAgfCBSRVFfRl9QT0xMX05PX0xBWlk7XFxuLS1cXG5pb191cmluZy9uZXQuYz0xNTcxPXZvaWQgaW9fc2VuZHJlY3ZfZmFpbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE1NzktXFx0ICAgIChyZXEtXFx1MDAzZW9wY29kZSA9PSBJT1JJTkdfT1BfU0VORF9aQyB8fCByZXEtXFx1MDAzZW9wY29kZSA9PSBJT1JJTkdfT1BfU0VORE1TR19aQykpXFxuaW9fdXJpbmcvbmV0LmM6MTU4MDpcXHRcXHRyZXEtXFx1MDAzZWNxZS5mbGFncyB8PSBJT1JJTkdfQ1FFX0ZfTU9SRTtcXG5pb191cmluZy9uZXQuYy0xNTgxLX1cXG4tLVxcbmlvX3VyaW5nL3J3LmM9NTYyPXZvaWQgaW9fcmVxX3J3X2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxcbi0tXFxuaW9fdXJpbmcvcncuYy01NjgtXFx0aWYgKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoUkVRX0ZfQlVGRkVSX1NFTEVDVEVEfFJFUV9GX0JVRkZFUl9SSU5HKSlcXG5pb191cmluZy9ydy5jOjU2OTpcXHRcXHRyZXEtXFx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXFx1MDAzZWNxZS5yZXMsIDApLCBOVUxMKTtcXG5pb191cmluZy9ydy5jLTU3MC1cXG4tLVxcbmlvX3VyaW5nL3J3LmM9MTIzOD12b2lkIGlvX3J3X2ZhaWwoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuLS1cXG5pb191cmluZy9ydy5jLTEyNDItXFx0cmVzID0gaW9fZml4dXBfcndfcmVzKHJlcSwgcmVxLVxcdTAwM2VjcWUucmVzKTtcXG5pb191cmluZy9ydy5jOjEyNDM6XFx0aW9fcmVxX3NldF9yZXMocmVxLCByZXMsIHJlcS1cXHUwMDNlY3FlLmZsYWdzKTtcXG5pb191cmluZy9ydy5jLTEyNDQtfVxcbi0tXFxuaW9fdXJpbmcvcncuYz0xMzE5PWludCBpb19kb19pb3BvbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgZm9yY2Vfbm9uc3BpbilcXG4tLVxcbmlvX3VyaW5nL3J3LmMtMTM3NS1cXHRcXHRucl9ldmVudHMrKztcXG5pb191cmluZy9ydy5jOjEzNzY6XFx0XFx0cmVxLVxcdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLVxcdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XFxuaW9fdXJpbmcvcncuYy0xMzc3LVxcdFxcdGlmICghaW9faXNfdXJpbmdfY21kKHJlcSkpXFxuLS1cXG5pb191cmluZy91cmluZ19jbWQuYz0xNTI9dm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsXFxuLS1cXG5pb191cmluZy91cmluZ19jbWQuYy0xNjctXFx0XFx0aWYgKHJlcS1cXHUwMDNlY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpXFxuaW9fdXJpbmcvdXJpbmdfY21kLmM6MTY4OlxcdFxcdFxcdHJlcS1cXHUwMDNlY3FlLmZsYWdzIHw9IElPUklOR19DUUVfRl8zMjtcXG5pb191cmluZy91cmluZ19jbWQuYy0xNjktXFx0XFx0aW9fcmVxX3NldF9jcWUzMl9leHRyYShyZXEsIHJlczIsIDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjo1My4yODY4NjY5ODNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc2MDM4MDQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZsYWcgTW9kaWZpY2F0aW9uIGluIGBpb19kb19pb3BvbGxgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGNoYW5nZSBpbiBgaW9fZG9faW9wb2xsYC4gUHJldmlvdXNseSwgdGhlIGNvZGUgd2FzIHNldHRpbmcgYHJlcS1cdTAwM2VjcWUuZmxhZ3NgIGRpcmVjdGx5IHdpdGggYGlvX3B1dF9rYnVmKC4uLilgOiBgcmVxLVx1MDAzZWNxZS5mbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS1cdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7YC4gTm93LCBpdCdzIGFuIE9SIGFzc2lnbm1lbnQ6IGByZXEtXHUwMDNlY3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKC4uLilgLlxuXG5UaGUgcXVlc3Rpb24gaXMsIHdoeSB0aGUgY2hhbmdlIGZyb20gYSBzaW1wbGUgYXNzaWdubWVudCB0byBhIGJpdHdpc2UgT1I/IEl0IGxvb2tzIGxpa2UgdGhlIGtleSBsaWVzIGluIHVuZGVyc3RhbmRpbmcgaG93IGByZXEtXHUwMDNlY3FlLmZsYWdzYCBpcyB1c2VkIGFuZCBtb2RpZmllZCBlbHNld2hlcmUuIExvb2tpbmcgYXQgYF9faW9fdXJpbmdfY21kX2RvbmVgLCBJIHNlZSB0aGF0IGBJT1JJTkdfQ1FFX0ZfMzJgIGFuZCBvdGhlciBmbGFncyBhcmUgYmVpbmcgc2V0IHVzaW5nIGFuIE9SIGFzc2lnbm1lbnQsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGludGVudGlvbiBpcyBmb3IgdGhlc2UgZmxhZ3MgdG8gcGVyc2lzdC4gVGhlIHByZXZpb3VzIGFzc2lnbm1lbnQgaW4gYGlvX2RvX2lvcG9sbGAgd2FzICpvdmVyd3JpdGluZyogdGhlc2UgZXhpc3RpbmcgZmxhZ3MuIFNvLCBpZiBgaW9fZG9faW9wb2xsYCByYW4gYWZ0ZXIgc29tZXRoaW5nIGxpa2UgYGlvX3VyaW5nX2NtZGAgb3IgYGlvX3JlcV9yd19jb21wbGV0ZWAsIGl0IHdhcyBjbGVhcmluZyB0aGVtLCB3aGljaCBpc24ndCB0aGUgZGVzaXJlZCBiZWhhdmlvci4gVGhlIGVhcmxpZXIgY2FsbHMsIGF0IGxpbmUgNTY5LCB3b3VsZCBoYXZlIHdyaXR0ZW4gdGhlIHJlbGV2YW50IGZsYWcuXG5cblRoZSBjaGFuZ2UgdG8gdGhlIE9SIGFzc2lnbm1lbnQgZml4ZXMgdGhpcy5cblxuVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIHNob3VsZCB2ZXJpZnkgdGhhdCBgcmVxYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBvciB6ZXJvZWQgdXBvbiBhbGxvY2F0aW9uLiBJZiBpdCBpc24ndCwgdGhlcmUncyBhIGNoYW5jZSBgcmVxLVx1MDAzZWNxZS5mbGFnc2AgY291bGQgY29udGFpbiBnYXJiYWdlLCBhbmQgdGhhdCB3b3VsZCBpbnRyb2R1Y2UgYSBuZXcgY2xhc3Mgb2YgcHJvYmxlbXMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYGlvX2tpb2NiYCBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiB3aXRoaW4gdGhlIGlvX3VyaW5nIHN1YnN5c3RlbSB0byBjb25maXJtIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5OTIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6NTcuMDQ3MjUxMjgxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg5MjM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19hbGxvY19yZXFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW9fdXJpbmcuYz05NDg9dm9pZCBpb19yZXFfZGVmZXJfZmFpbGVkKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzMzIgcmVzKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy05NjQtICogaGFuZGxlcnMgYW5kIGlvX2lzc3VlX3NxZSgpIGFyZSBkb25lIHdpdGggaXQsIGUuZy4gaW5saW5lIGNvbXBsZXRpb24gcGF0aC5cXG5pb191cmluZy9pb191cmluZy5jOjk2NTogKiBCZWNhdXNlIG9mIHRoYXQsIGlvX2FsbG9jX3JlcSgpIHNob3VsZCBiZSBjYWxsZWQgb25seSB1bmRlciAtXFx1MDAzZXVyaW5nX2xvY2tcXG5pb191cmluZy9pb191cmluZy5jLTk2Ni0gKiBhbmQgd2l0aCBleHRyYSBjYXV0aW9uIHRvIG5vdCBnZXQgYSByZXF1ZXN0IHRoYXQgaXMgc3RpbGwgd29ya2VkIG9uLlxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTY3LSAqL1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6OTY4Ol9fY29sZCBib29sIF9faW9fYWxsb2NfcmVxX3JlZmlsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG5pb191cmluZy9pb191cmluZy5jLTk2OS1cXHRfX211c3RfaG9sZChcXHUwMDI2Y3R4LVxcdTAwM2V1cmluZ19sb2NrKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yMDEzPWludCBpb19zdWJtaXRfc3FlcyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdW5zaWduZWQgaW50IG5yKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMDM2LVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjAzNzpcXHRcXHRpZiAodW5saWtlbHkoIWlvX2FsbG9jX3JlcShjdHgsIFxcdTAwMjZyZXEpKSlcXG5pb191cmluZy9pb191cmluZy5jLTIwMzgtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5oPTIxMj12b2lkIGlvX3Rhc2tfcmVmc19yZWZpbGwoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MjEzOmJvb2wgX19pb19hbGxvY19yZXFfcmVmaWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KTtcXG5pb191cmluZy9pb191cmluZy5oLTIxNC1cXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9NTI1PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlvX2tpb2NiICppb19leHRyYWN0X3JlcShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtNTMzLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg6NTM0OnN0YXRpYyBpbmxpbmUgYm9vbCBpb19hbGxvY19yZXEoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19raW9jYiAqKnJlcSlcXG5pb191cmluZy9pb191cmluZy5oLTUzNS17XFxuaW9fdXJpbmcvaW9fdXJpbmcuaC01MzYtXFx0aWYgKHVubGlrZWx5KGlvX3JlcV9jYWNoZV9lbXB0eShjdHgpKSkge1xcbmlvX3VyaW5nL2lvX3VyaW5nLmg6NTM3OlxcdFxcdGlmICghX19pb19hbGxvY19yZXFfcmVmaWxsKGN0eCkpXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC01MzgtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuaW9fdXJpbmcvbm90aWYuYz0xMTQ9c3RydWN0IGlvX2tpb2NiICppb19hbGxvY19ub3RpZihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG4tLVxcbmlvX3VyaW5nL25vdGlmLmMtMTE5LVxcbmlvX3VyaW5nL25vdGlmLmM6MTIwOlxcdGlmICh1bmxpa2VseSghaW9fYWxsb2NfcmVxKGN0eCwgXFx1MDAyNm5vdGlmKSkpXFxuaW9fdXJpbmcvbm90aWYuYy0xMjEtXFx0XFx0cmV0dXJuIE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjU3LjA5NjE0OTA5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzIyMjQzMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRyYWluIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgSS9PIEFsbG9jYXRpb24gYW5kIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBob3cgdGhlc2UgSS9PIHJlcXVlc3RzIGFyZSBiZWluZyBoYW5kbGVkLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGBfX2lvX2FsbG9jX3JlcV9yZWZpbGxgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgcmVmaWxsaW5nIG1lY2hhbmlzbSBmb3IgdGhlc2UgcmVxdWVzdHMsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHN1c3BlY3QgdGhlcmUgbWlnaHQgYmUgaW5lZmZpY2llbmNpZXMgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHRoZXJlLCBnaXZlbiB0aGUgc2NhbGUgd2UncmUgcHJvYmFibHkgZGVhbGluZyB3aXRoLiBUaGVuLCBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgdGllIHRoYXQgdG8gdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgaW9faW5pdF9yZXFgLCBzcGVjaWZpY2FsbHkgaG93IHRoZSBJL08gcmVxdWVzdHMgYXJlIGluaXRpYWxpemVkIGluIGNvbmp1bmN0aW9uIHdpdGggc2xhYiBpbml0aWFsaXphdGlvbi4gQXJlIHdlIGRvaW5nIHRoaXMgZWZmZWN0aXZlbHk/IEFyZSB3ZSBwb3RlbnRpYWxseSBvdmVyLWFsbG9jYXRpbmcsIG9yIHVuZGVyLWFsbG9jYXRpbmcsIHNsYWJzIGhlcmU/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UncmUga2VlcGluZyBpdCBlZmZpY2llbnQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBwcm9ibGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ1OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjU5LjEyODM3OTg1MloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDUzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvaW9fdXJpbmcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NjU6XFx0ICogQmVjYXVzZSBvZiB0aGF0LCBpb19hbGxvY19yZXEoKSBzaG91bGQgYmUgY2FsbGVkIG9ubHkgdW5kZXIgLVxcdTAwM2V1cmluZ19sb2NrXFxuIDk2NjpcXHQgKiBhbmQgd2l0aCBleHRyYSBjYXV0aW9uIHRvIG5vdCBnZXQgYSByZXF1ZXN0IHRoYXQgaXMgc3RpbGwgd29ya2VkIG9uLlxcbiA5Njc6XFx0ICovXFxuIDk2ODpcXHRfX2NvbGQgYm9vbCBfX2lvX2FsbG9jX3JlcV9yZWZpbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXFxuIDk2OTpcXHRcXHRfX211c3RfaG9sZChcXHUwMDI2Y3R4LVxcdTAwM2V1cmluZ19sb2NrKVxcbiA5NzA6XFx0e1xcbiA5NzE6XFx0XFx0Z2ZwX3QgZ2ZwID0gR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX1pFUk87XFxuIDk3MjpcXHRcXHR2b2lkICpyZXFzW0lPX1JFUV9BTExPQ19CQVRDSF07XFxuIDk3MzpcXHRcXHRpbnQgbnJfcmVxcyA9IEFSUkFZX1NJWkUocmVxcyk7XFxuIDk3NDpcXHRcXG4gOTc1OlxcdFxcdC8qXFxuIDk3NjpcXHRcXHQgKiBCdWxrIGFsbG9jIGlzIGFsbC1vci1ub3RoaW5nLiBJZiB3ZSBmYWlsIHRvIGdldCBhIGJhdGNoLCByZXRyeSBhXFxuIDk3NzpcXHRcXHQgKiBzaW5nbGUgYWxsb2NhdGlvbiB0byBiZSBvbiB0aGUgc2FmZSBzaWRlLlxcbiA5Nzg6XFx0XFx0ICovXFxuIDk3OTpcXHRcXHRpZiAoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhyZXFfY2FjaGVwLCBnZnAsIG5yX3JlcXMsIHJlcXMpKSB7XFxuIDk4MDpcXHRcXHRcXHRyZXFzWzBdID0ga21lbV9jYWNoZV9hbGxvYyhyZXFfY2FjaGVwLCBnZnApO1xcbiA5ODE6XFx0XFx0XFx0aWYgKCFyZXFzWzBdKVxcbiA5ODI6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA5ODM6XFx0XFx0XFx0bnJfcmVxcyA9IDE7XFxuIDk4NDpcXHRcXHR9XFxuIDk4NTpcXHRcXG4gOTg2OlxcdFxcdHBlcmNwdV9yZWZfZ2V0X21hbnkoXFx1MDAyNmN0eC1cXHUwMDNlcmVmcywgbnJfcmVxcyk7XFxuIDk4NzpcXHRcXHRjdHgtXFx1MDAzZW5yX3JlcV9hbGxvY2F0ZWQgKz0gbnJfcmVxcztcXG4gOTg4OlxcdFxcbiA5ODk6XFx0XFx0d2hpbGUgKG5yX3JlcXMtLSlcXG4gOTkwOlxcdFxcdFxcdGlvX3JlcV9hZGRfdG9fY2FjaGUocmVxc1tucl9yZXFzXSwgY3R4KTtcXG4gOTkxOlxcdFxcdHJldHVybiB0cnVlO1xcbiA5OTI6XFx0fVxcbiA5OTM6XFx0XFxuIDk5NDpcXHRfX2NvbGQgdm9pZCBpb19mcmVlX3JlcShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4gOTk1OlxcdHtcXG4gOTk2OlxcdFxcdC8qIHJlZnMgd2VyZSBhbHJlYWR5IHB1dCwgcmVzdG9yZSB0aGVtIGZvciBpb19yZXFfdGFza19jb21wbGV0ZSgpICovXFxuIDk5NzpcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5SRVFfRl9SRUZDT1VOVDtcXG4gOTk4OlxcdFxcdC8qIHdlIG9ubHkgd2FudCB0byBmcmVlIGl0LCBkb24ndCBwb3N0IENRRXMgKi9cXG4gOTk5OlxcdFxcdHJlcS1cXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQ1FFX1NLSVA7XFxuMTAwMDpcXHRcXHRyZXEtXFx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fcmVxX3Rhc2tfY29tcGxldGU7XFxuMTAwMTpcXHRcXHRpb19yZXFfdGFza193b3JrX2FkZChyZXEpO1xcbjEwMDI6XFx0fVxcbjEwMDM6XFx0XFxuMTAwNDpcXHRzdGF0aWMgdm9pZCBfX2lvX3JlcV9maW5kX25leHRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6NTkuMTI4NTg3MDAyWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzODM5NzgyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgYGlvX2luaXRfcmVxYCBpbiBgaW9fdXJpbmcvaW9fdXJpbmcuY2AqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkaXZpbmcgaW50byB0aGUgYGlvX3VyaW5nYCBpbXBsZW1lbnRhdGlvbiwgYW5kIGl0J3MgdGltZSB0byB6ZXJvIGluIG9uIGEgY3JpdGljYWwgZnVuY3Rpb246IGBpb19pbml0X3JlcWAuIE15IG1lbnRhbCBjaGVja2xpc3QgaXMgaW1tZWRpYXRlbHkgZW5nYWdlZDogXCJXaGF0IGlzIHRoaXMgZnVuY3Rpb24gZG9pbmc/IFdoZXJlIGRvZXMgaXQgZml0IGludG8gdGhlIHJlcXVlc3QgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcz8gQXJlIHRoZXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGdpdmVuIHRoYXQgdGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgYXN5bmMgSU8gc3lzdGVtP1wiIEknbSBleHBlY3RpbmcgdGhpcyBpcyB3aGVyZSB0aGUgZ3JvdW5kd29yayBpcyBsYWlkIGZvciB0aGUgbmV3IHJlcXVlc3QsIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGxpa2VseSBpbml0aWFsaXplZC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBsb29raW5nIGZvciBhbnkgcG9pbnRzIG9mIGNvbnRlbnRpb24gb3IgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGR1cmluZyB0aGUgcmVxdWVzdCBwcmVwYXJhdGlvbiBwaGFzZS4gV2UgYWxsIGtub3cgcGVyZm9ybWFuY2UgaXMga2V5IGluIHRoZXNlIHRoaW5ncy4gU28sIEknbGwgYmUgcGFydGljdWxhcmx5IHZpZ2lsYW50IGFib3V0IG1lbW9yeSBhbGxvY2F0aW9uLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgb3ZlcmFsbCBlZmZpY2llbmN5IG9mIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSSdtIHJlYWR5IHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBuZXcgcmVxdWVzdHMgYXJlIGJlaW5nIHByZXBhcmVkIGFuZCBpbnRlZ3JhdGVkIGludG8gdGhlIGBpb191cmluZ2AgbWFjaGluZXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQwOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MDEuNTEyNTY4MzA5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDA0MzAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19pbml0X3JlcVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9icGZfZmlsdGVyLmM9NTc9aW50IF9faW9fdXJpbmdfcnVuX2JwZl9maWx0ZXJzKHN0cnVjdCBpb19icGZfZmlsdGVyIF9fcmN1ICoqZmlsdGVycyxcXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy02OS1cXHQgKiByZXEtXFx1MDAzZW9wY29kZSBoYXMgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCB0byBiZSB3aXRoaW4gdGhlIHJhbmdlXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jOjcwOlxcdCAqIG9mIHdoYXQgd2UgZXhwZWN0LCBpb19pbml0X3JlcSgpIGRvZXMgdGhpcy5cXG5pb191cmluZy9icGZfZmlsdGVyLmMtNzEtXFx0ICovXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTE3MTQ9c3RhdGljIF9fY29sZCBpbnQgaW9faW5pdF9mYWlsX3JlcShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IGVycilcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTcyMC1cXG5pb191cmluZy9pb191cmluZy5jOjE3MjE6c3RhdGljIGludCBpb19pbml0X3JlcShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNzIyLVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUsIHVuc2lnbmVkIGludCAqbGVmdClcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9MTg3Mz1zdGF0aWMgaW5saW5lIGludCBpb19zdWJtaXRfc3FlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTg3OS1cXG5pb191cmluZy9pb191cmluZy5jOjE4ODA6XFx0cmV0ID0gaW9faW5pdF9yZXEoY3R4LCByZXEsIHNxZSwgbGVmdCk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xODgxLVxcdGlmICh1bmxpa2VseShyZXQpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNzowMS41NjY2MTY4MDdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAzMDM2MzA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGlvX2luaXRfcmVxYCBpbiBgaW9fdXJpbmcuY2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgaW9fdXJpbmcuY2AgYW5kIHNwZWNpZmljYWxseSBmb2N1cyBvbiB0aGUgYGlvX2luaXRfcmVxYCBmdW5jdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gaW5pdGlhbGl6aW5nIEkvTyByZXF1ZXN0cy4gTGV0J3MgaG9tZSBpbiBvbiBsaW5lcyAxNzIxIHRvIDE3NzA7IHRoYXQncyBwcm9iYWJseSB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGlzIGZ1bmN0aW9uIHJlc2lkZXMuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgdGhlIGluaXRpYWwgc2V0dXAsIHZhbGlkYXRpb24sIGFuZCBwb3RlbnRpYWxseSBxdWV1ZWluZyBoYXBwZW4uIE5lZWQgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgZWFjaCBzZWN0aW9uIG9mIHRoaXMgY29kZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBhcmd1bWVudCB2YWxpZGF0aW9uLCBtZW1vcnkgYWxsb2NhdGlvbiAoaWYgYW55KSwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgU3VibWlzc2lvbiBRdWV1ZSBhbmQgQ29tcGxldGlvbiBRdWV1ZS4gVGhpcyBhcmVhIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHJlcXVlc3QgbGlmZWN5Y2xlIGluIGlvX3VyaW5nLCBzbyBJJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24uIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBwbHVtYmluZyBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDc1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MDMuNTk2OTgyNTkxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjMxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9pb191cmluZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3MjA6XFx0XFxuMTcyMTpcXHRzdGF0aWMgaW50IGlvX2luaXRfcmVxKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4xNzIyOlxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUsIHVuc2lnbmVkIGludCAqbGVmdClcXG4xNzIzOlxcdFxcdF9fbXVzdF9ob2xkKFxcdTAwMjZjdHgtXFx1MDAzZXVyaW5nX2xvY2spXFxuMTcyNDpcXHR7XFxuMTcyNTpcXHRcXHRjb25zdCBzdHJ1Y3QgaW9faXNzdWVfZGVmICpkZWY7XFxuMTcyNjpcXHRcXHR1bnNpZ25lZCBpbnQgc3FlX2ZsYWdzO1xcbjE3Mjc6XFx0XFx0aW50IHBlcnNvbmFsaXR5O1xcbjE3Mjg6XFx0XFxuMTcyOTpcXHRcXHRyZXEtXFx1MDAzZWN0eCA9IGN0eDtcXG4xNzMwOlxcdFxcdHJlcS1cXHUwMDNlb3Bjb2RlID0gUkVBRF9PTkNFKHNxZS1cXHUwMDNlb3Bjb2RlKTtcXG4xNzMxOlxcdFxcdC8qIHNhbWUgbnVtZXJpY2FsIHZhbHVlcyB3aXRoIGNvcnJlc3BvbmRpbmcgUkVRX0ZfKiwgc2FmZSB0byBjb3B5ICovXFxuMTczMjpcXHRcXHRzcWVfZmxhZ3MgPSBSRUFEX09OQ0Uoc3FlLVxcdTAwM2VmbGFncyk7XFxuMTczMzpcXHRcXHRyZXEtXFx1MDAzZWZsYWdzID0gKF9fZm9yY2UgaW9fcmVxX2ZsYWdzX3QpIHNxZV9mbGFncztcXG4xNzM0OlxcdFxcdHJlcS1cXHUwMDNlY3FlLnVzZXJfZGF0YSA9IFJFQURfT05DRShzcWUtXFx1MDAzZXVzZXJfZGF0YSk7XFxuMTczNTpcXHRcXHRyZXEtXFx1MDAzZWZpbGUgPSBOVUxMO1xcbjE3MzY6XFx0XFx0cmVxLVxcdTAwM2V0Y3R4ID0gY3VycmVudC1cXHUwMDNlaW9fdXJpbmc7XFxuMTczNzpcXHRcXHRyZXEtXFx1MDAzZWNhbmNlbF9zZXFfc2V0ID0gZmFsc2U7XFxuMTczODpcXHRcXHRyZXEtXFx1MDAzZWFzeW5jX2RhdGEgPSBOVUxMO1xcbjE3Mzk6XFx0XFxuMTc0MDpcXHRcXHRpZiAodW5saWtlbHkocmVxLVxcdTAwM2VvcGNvZGUgXFx1MDAzZT0gSU9SSU5HX09QX0xBU1QpKSB7XFxuMTc0MTpcXHRcXHRcXHRyZXEtXFx1MDAzZW9wY29kZSA9IDA7XFxuMTc0MjpcXHRcXHRcXHRyZXR1cm4gaW9faW5pdF9mYWlsX3JlcShyZXEsIC1FSU5WQUwpO1xcbjE3NDM6XFx0XFx0fVxcbjE3NDQ6XFx0XFx0cmVxLVxcdTAwM2VvcGNvZGUgPSBhcnJheV9pbmRleF9ub3NwZWMocmVxLVxcdTAwM2VvcGNvZGUsIElPUklOR19PUF9MQVNUKTtcXG4xNzQ1OlxcdFxcbjE3NDY6XFx0XFx0ZGVmID0gXFx1MDAyNmlvX2lzc3VlX2RlZnNbcmVxLVxcdTAwM2VvcGNvZGVdO1xcbjE3NDc6XFx0XFx0aWYgKGRlZi1cXHUwMDNlaXNfMTI4IFxcdTAwMjZcXHUwMDI2ICEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9TUUUxMjgpKSB7XFxuMTc0ODpcXHRcXHRcXHQvKlxcbjE3NDk6XFx0XFx0XFx0ICogQSAxMjhiIG9wIG9uIGEgbm9uLTEyOGIgU1EgcmVxdWlyZXMgbWl4ZWQgU1FFIHN1cHBvcnQgYXNcXG4xNzUwOlxcdFxcdFxcdCAqIHdlbGwgYXMgMiBjb250aWd1b3VzIGVudHJpZXMuXFxuMTc1MTpcXHRcXHRcXHQgKi9cXG4xNzUyOlxcdFxcdFxcdGlmICghKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfU1FFX01JWEVEKSB8fCAqbGVmdCBcXHUwMDNjIDIgfHxcXG4xNzUzOlxcdFxcdFxcdCAgICAodW5zaWduZWQpKHNxZSAtIGN0eC1cXHUwMDNlc3Ffc3FlcykgXFx1MDAzZT0gY3R4LVxcdTAwM2VzcV9lbnRyaWVzIC0gMSlcXG4xNzU0OlxcdFxcdFxcdFxcdHJldHVybiBpb19pbml0X2ZhaWxfcmVxKHJlcSwgLUVJTlZBTCk7XFxuMTc1NTpcXHRcXHRcXHQvKlxcbjE3NTY6XFx0XFx0XFx0ICogQSAxMjhiIG9wZXJhdGlvbiBvbiBhIG1peGVkIFNRIHVzZXMgdHdvIGVudHJpZXMsIHNvIHdlIGhhdmVcXG4xNzU3OlxcdFxcdFxcdCAqIHRvIGluY3JlbWVudCB0aGUgaGVhZCBhbmQgY2FjaGVkIHJlZnMsIGFuZCBkZWNyZW1lbnQgd2hhdCdzXFxuMTc1ODpcXHRcXHRcXHQgKiBsZWZ0LlxcbjE3NTk6XFx0XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI3OjAzLjU5NzEyMDY2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMTE0NDUwNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIFJlcXVlc3QgTGlmZWN5Y2xlIGFuZCBGbGFnIE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSByZXF1ZXN0IGxpZmVjeWNsZSwgc3BlY2lmaWNhbGx5IGhvdyB3ZSBoYW5kbGUgcmVxdWVzdHMgcHVsbGVkIGZyb20gdGhlIGNvbnRleHQgY2FjaGUuIEl0J3MgdGltZSB0byB6ZXJvIGluIG9uIGhvdyB3ZSdyZSBzZXR0aW5nIGFuZCBjbGVhcmluZyB0aG9zZSBgcmVxLVx1MDAzZWNxZS5mbGFnc2AgYml0cyB3aGVuIHJlY3ljbGluZyByZXF1ZXN0cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSdyZSBub3QgY2Fycnlpbmcgb3ZlciBhbnkgc3RhbGUgZmxhZ3MgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgZXJyb3JzIGRvd24gdGhlIGxpbmUuIFdlIGNhbid0IGhhdmUgYW55IHJlbW5hbnRzIGZyb20gYSBwcmV2aW91cyBvcGVyYXRpb24gY29ycnVwdGluZyB0aGUgY3VycmVudCBvbmUuIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhIGZvciBlbnN1cmluZyByZXF1ZXN0IGludGVncml0eSBhbmQgcHJldmVudGluZyBhbnkgc3VidGxlLCBoYXJkLXRvLWRlYnVnIGlzc3VlcyByZWxhdGVkIHRvIGNvbnRleHQgcmV1c2UuIFVuZGVyc3RhbmRpbmcgd2hlcmUgdGhlIGZsYWdzIGFyZSBpbml0aWFsaXplZCBhbmQgcmVzZXQgaXMgdGhlIGtleSB0byBtYW5hZ2luZyBvdXIgcmVxdWVzdCByZXNvdXJjZSByZXNwb25zaWJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwODEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI3OjA1LjkwODU2NzYxMVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1OTA0NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fcmVxX2FkZF90b19jYWNoZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pb191cmluZy5jPTE3ND1zdGF0aWMgaW5saW5lIHZvaWQgcmVxX2ZhaWxfbGlua19ub2RlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmVzKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNzktXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxODA6c3RhdGljIGlubGluZSB2b2lkIGlvX3JlcV9hZGRfdG9fY2FjaGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTgxLXtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9OTY4PV9fY29sZCBib29sIF9faW9fYWxsb2NfcmVxX3JlZmlsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTg5LVxcdHdoaWxlIChucl9yZXFzLS0pXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo5OTA6XFx0XFx0aW9fcmVxX2FkZF90b19jYWNoZShyZXFzW25yX3JlcXNdLCBjdHgpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTkxLVxcdHJldHVybiB0cnVlO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xMDg1PXN0YXRpYyB2b2lkIGlvX2ZyZWVfYmF0Y2hfbGlzdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTEyMi1cXHRcXHRub2RlID0gcmVxLVxcdTAwM2Vjb21wX2xpc3QubmV4dDtcXG5pb191cmluZy9pb191cmluZy5jOjExMjM6XFx0XFx0aW9fcmVxX2FkZF90b19jYWNoZShyZXEsIGN0eCk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xMTI0LVxcdH0gd2hpbGUgKG5vZGUpO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yMDEzPWludCBpb19zdWJtaXRfc3FlcyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdW5zaWduZWQgaW50IG5yKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMDM5LVxcdFxcdGlmICh1bmxpa2VseSghaW9fZ2V0X3NxZShjdHgsIFxcdTAwMjZzcWUpKSkge1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjA0MDpcXHRcXHRcXHRpb19yZXFfYWRkX3RvX2NhY2hlKHJlcSwgY3R4KTtcXG5pb191cmluZy9pb191cmluZy5jLTIwNDEtXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI3OjA1Ljk1NDE2MTA5OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MDQwMTE0MzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSU9Qb2xsIFJlcXVlc3QgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgaW9fcHV0X2tidWZgIGlzIHJldHVybmluZyBhbiBgdTMyYCAob3IgdW5zaWduZWQgaW50KSB0aGF0IHJlcHJlc2VudHMgZmxhZ3MsIHBvdGVudGlhbGx5IGluY2x1ZGluZyBgSU9SSU5HX0NRRV9GX0JVRkZFUmAgd2l0aCBpdHMgYnVmZmVyIElELCBjcml0aWNhbCBmb3IgaW91cmluZyBvcGVyYXRpb25zLiBOb3csIGxvb2tpbmcgYXQgdGhlIGNvbnRleHQsIHNwZWNpZmljYWxseSB3aXRoaW4gYGlvX2RvX2lvcG9sbGAgd2hlbiBoYW5kbGluZyBhbiBpb3BvbGwgcmVxdWVzdCBjb21wbGV0aW9uLCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gaG93IHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgYHJlcS1cdTAwM2VjcWUuZmxhZ3NgIGZpZWxkLiBQcmV2aW91c2x5LCB0aGUgbGluZSB3YXMgc2V0dGluZyBgcmVxLVx1MDAzZWNxZS5mbGFnc2AgKmVxdWFsIHRvKiB0aGUgcmVzdWx0IG9mIGBpb19wdXRfa2J1ZmAuIFRoZSBwYXRjaCBjbGV2ZXJseSBzd2FwcyB0aGlzIHRvIGEgKmJpdHdpc2UgT1IqIG9wZXJhdGlvbiAoYHw9YCkuIFRoaXMgaXMgYSBrZXkgZGV0YWlsLiBUaGlzIG1lYW5zIHRoYXQgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyBhbnkgZXhpc3RpbmcgZmxhZ3MgaW4gYHJlcS1cdTAwM2VjcWUuZmxhZ3NgLCB3ZSdyZSBub3cgKmFkZGluZyogdGhlIGZsYWdzIHJldHVybmVkIGJ5IGBpb19wdXRfa2J1ZmAuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBwcmVzZXJ2aW5nIGV4aXN0aW5nIGZsYWcgc2V0dGluZ3MuIFRoZSBgbWF4KHJlcS1cdTAwM2VjcWUucmVzLCAwKWAgY2FsbCBpcyBjb3JyZWN0bHkgaGFuZGxpbmcgcG90ZW50aWFsIG5lZ2F0aXZlIHJlc3VsdHMuIEl0J3MgYSB0eXBpY2FsIGFwcHJvYWNoLCBhbHRob3VnaCBpbiB0aGlzIGluc3RhbmNlLCBpdCdzIGEgZ29vZCBpZGVhIHRvIGNvbmZpcm0gaWYgYHJlcS1cdTAwM2VjcWUucmVzYCBjb3VsZCBldmVyIGdlbnVpbmVseSBiZSBuZWdhdGl2ZSBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuXG5cbk15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgaW9fcHV0X2tidWZgIGl0c2VsZiwgc28gSSBuZWVkIHRvIGNoZWNrIGl0cyBkZWZpbml0aW9uIGFuZCB2ZXJpZnkgZXhhY3RseSBob3cgaXRzIHJldHVybiB2YWx1ZSBpbnRlcmFjdHMgd2l0aCB0aGUgZmxhZ3MuIFRoaXMgd2lsbCBjbGFyaWZ5IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYW5kIHdoZXRoZXIgdGhpcyBhcHByb2FjaCB0byBmbGFncyBtYW5hZ2VtZW50IGlzIHNvdW5kIGluIHRoZSBjdXJyZW50IGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MDYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MTMuOTk0Mjc4MzA0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU2MjQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19wdXRfa2J1ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pb191cmluZy5jPTk0OD12b2lkIGlvX3JlcV9kZWZlcl9mYWlsZWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHMzMiByZXMpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTk1NS1cXHRyZXFfc2V0X2ZhaWwocmVxKTtcXG5pb191cmluZy9pb191cmluZy5jOjk1NjpcXHRpb19yZXFfc2V0X3JlcyhyZXEsIHJlcywgaW9fcHV0X2tidWYocmVxLCByZXMsIE5VTEwpKTtcXG5pb191cmluZy9pb191cmluZy5jLTk1Ny1cXHRpZiAoZGVmLVxcdTAwM2VmYWlsKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jPTM4MT1pbnQgaW9fYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy00MDYtXFxuaW9fdXJpbmcva2J1Zi5jOjQwNzpzdGF0aWMgaW5saW5lIGJvb2wgX19pb19wdXRfa2J1Zl9yaW5nKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbmlvX3VyaW5nL2tidWYuYy00MDgtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCwgaW50IGxlbiwgaW50IG5yKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTQyMC1cXG5pb191cmluZy9rYnVmLmM6NDIxOnVuc2lnbmVkIGludCBfX2lvX3B1dF9rYnVmcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcXG5pb191cmluZy9rYnVmLmMtNDIyLVxcdFxcdFxcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpXFxuLS1cXG5pb191cmluZy9rYnVmLmMtNDMyLVxcbmlvX3VyaW5nL2tidWYuYzo0MzM6XFx0aWYgKCFfX2lvX3B1dF9rYnVmX3JpbmcocmVxLCBibCwgbGVuLCBuYnVmcykpXFxuaW9fdXJpbmcva2J1Zi5jLTQzNC1cXHRcXHRyZXQgfD0gSU9SSU5HX0NRRV9GX0JVRl9NT1JFO1xcbi0tXFxuaW9fdXJpbmcva2J1Zi5oPTg3PXZvaWQgaW9fa2J1Zl9kcm9wX2xlZ2FjeShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSk7XFxuaW9fdXJpbmcva2J1Zi5oLTg4LVxcbmlvX3VyaW5nL2tidWYuaDo4OTp1bnNpZ25lZCBpbnQgX19pb19wdXRfa2J1ZnMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXFxuaW9fdXJpbmcva2J1Zi5oLTkwLVxcdFxcdFxcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpO1xcbi0tXFxuaW9fdXJpbmcva2J1Zi5oPTExND1zdGF0aWMgaW5saW5lIGJvb2wgaW9fa2J1Zl9yZWN5Y2xlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5oLTEyNS1cXG5pb191cmluZy9rYnVmLmg6MTI2OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvX3B1dF9rYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgbGVuLFxcbmlvX3VyaW5nL2tidWYuaC0xMjctXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwpXFxuLS1cXG5pb191cmluZy9rYnVmLmgtMTMwLVxcdFxcdHJldHVybiAwO1xcbmlvX3VyaW5nL2tidWYuaDoxMzE6XFx0cmV0dXJuIF9faW9fcHV0X2tidWZzKHJlcSwgYmwsIGxlbiwgMSk7XFxuaW9fdXJpbmcva2J1Zi5oLTEzMi19XFxuaW9fdXJpbmcva2J1Zi5oLTEzMy1cXG5pb191cmluZy9rYnVmLmg6MTM0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvX3B1dF9rYnVmcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IGxlbixcXG5pb191cmluZy9rYnVmLmgtMTM1LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsIGludCBuYnVmcylcXG4tLVxcbmlvX3VyaW5nL2tidWYuaC0xMzgtXFx0XFx0cmV0dXJuIDA7XFxuaW9fdXJpbmcva2J1Zi5oOjEzOTpcXHRyZXR1cm4gX19pb19wdXRfa2J1ZnMocmVxLCBibCwgbGVuLCBuYnVmcyk7XFxuaW9fdXJpbmcva2J1Zi5oLTE0MC19XFxuLS1cXG5pb191cmluZy9uZXQuYz00OTE9c3RhdGljIGlubGluZSBib29sIGlvX3NlbmRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNDk5LVxcdGlmICghKHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpKSB7XFxuaW9fdXJpbmcvbmV0LmM6NTAwOlxcdFxcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgc2VsLVxcdTAwM2V2YWwsIHNlbC1cXHUwMDNlYnVmX2xpc3QpO1xcbmlvX3VyaW5nL25ldC5jLTUwMS1cXHRcXHRnb3RvIGZpbmlzaDtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTUwMy1cXG5pb191cmluZy9uZXQuYzo1MDQ6XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWZzKHJlcSwgc2VsLVxcdTAwM2V2YWwsIHNlbC1cXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBzZWwtXFx1MDAzZXZhbCkpO1xcbmlvX3VyaW5nL25ldC5jLTUwNS1cXG4tLVxcbmlvX3VyaW5nL25ldC5jPTg1Mz1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9uZXQuYy04NzktXFxuaW9fdXJpbmcvbmV0LmM6ODgwOlxcdFxcdGNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCB0aGlzX3JldCwgc2VsLVxcdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHRoaXNfcmV0KSk7XFxuaW9fdXJpbmcvbmV0LmMtODgxLVxcdFxcdGlmIChzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVl9SRVRSWSlcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTkwMS1cXHR9IGVsc2Uge1xcbmlvX3VyaW5nL25ldC5jOjkwMjpcXHRcXHRjZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBzZWwtXFx1MDAzZXZhbCwgc2VsLVxcdTAwM2VidWZfbGlzdCk7XFxuaW9fdXJpbmcvbmV0LmMtOTAzLVxcdH1cXG4tLVxcbmlvX3VyaW5nL3J3LmM9NTYyPXZvaWQgaW9fcmVxX3J3X2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxcbi0tXFxuaW9fdXJpbmcvcncuYy01NjgtXFx0aWYgKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoUkVRX0ZfQlVGRkVSX1NFTEVDVEVEfFJFUV9GX0JVRkZFUl9SSU5HKSlcXG5pb191cmluZy9ydy5jOjU2OTpcXHRcXHRyZXEtXFx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXFx1MDAzZWNxZS5yZXMsIDApLCBOVUxMKTtcXG5pb191cmluZy9ydy5jLTU3MC1cXG4tLVxcbmlvX3VyaW5nL3J3LmM9NjQwPXN0YXRpYyBpbnQga2lvY2JfZG9uZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3NpemVfdCByZXQsXFxuLS1cXG5pb191cmluZy9ydy5jLTY1Ny1cXHRcXHRpZiAoc2VsKVxcbmlvX3VyaW5nL3J3LmM6NjU4OlxcdFxcdFxcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgcmV0LCBzZWwtXFx1MDAzZWJ1Zl9saXN0KTtcXG5pb191cmluZy9ydy5jLTY1OS1cXHRcXHRpb19yZXFfc2V0X3JlcyhyZXEsIGZpbmFsX3JldCwgY2ZsYWdzKTtcXG4tLVxcbmlvX3VyaW5nL3J3LmM9MTAzMj1pbnQgaW9fcmVhZF9tc2hvdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvcncuYy0xMDY3LVxcdH0gZWxzZSBpZiAoIShyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQVBPTExfTVVMVElTSE9UKSkge1xcbmlvX3VyaW5nL3J3LmM6MTA2ODpcXHRcXHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHJldCwgc2VsLmJ1Zl9saXN0KTtcXG5pb191cmluZy9ydy5jLTEwNjktXFx0fSBlbHNlIHtcXG4tLVxcbmlvX3VyaW5nL3J3LmMtMTA3NS1cXHRcXHQgKi9cXG5pb191cmluZy9ydy5jOjEwNzY6XFx0XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWYocmVxLCByZXQsIHNlbC5idWZfbGlzdCk7XFxuaW9fdXJpbmcvcncuYy0xMDc3LVxcdFxcdHJ3LVxcdTAwM2VsZW4gPSAwOyAvKiBzaW1pbGFybHkgdG8gYWJvdmUsIHJlc2V0IGxlbiB0byAwICovXFxuLS1cXG5pb191cmluZy9ydy5jPTEzMTk9aW50IGlvX2RvX2lvcG9sbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBmb3JjZV9ub25zcGluKVxcbi0tXFxuaW9fdXJpbmcvcncuYy0xMzc1LVxcdFxcdG5yX2V2ZW50cysrO1xcbmlvX3VyaW5nL3J3LmM6MTM3NjpcXHRcXHRyZXEtXFx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXFx1MDAzZWNxZS5yZXMsIDApLCBOVUxMKTtcXG5pb191cmluZy9ydy5jLTEzNzctXFx0XFx0aWYgKCFpb19pc191cmluZ19jbWQocmVxKSlcXG4tLVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jPTM4Nz1ib29sIGlvX3VyaW5nX21zaG90X2NtZF9wb3N0X2NxZShzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXFxuLS1cXG5pb191cmluZy91cmluZ19jbWQuYy0zOTYtXFx0aWYgKHNlbC1cXHUwMDNldmFsIFxcdTAwM2UgMCkge1xcbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjM5NzpcXHRcXHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHNlbC1cXHUwMDNldmFsLCBzZWwtXFx1MDAzZWJ1Zl9saXN0KTtcXG5pb191cmluZy91cmluZ19jbWQuYy0zOTgtXFx0XFx0aWYgKGlvX3JlcV9wb3N0X2NxZShyZXEsIHNlbC1cXHUwMDNldmFsLCBjZmxhZ3MgfCBJT1JJTkdfQ1FFX0ZfTU9SRSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI3OjE0LjA0MTg0MzUxMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MzQwMTQ4OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgaW9fZG9faW9wb2xsYCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGlvX2RvX2lvcG9sbGAsIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgc3dpdGNoaW5nIGZyb20gYHJlcS1cdTAwM2VjcWUuZmxhZ3MgPSBpb19wdXRfa2J1ZiguLi4pYCB0byBgcmVxLVx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZiguLi4pYC4gRXNzZW50aWFsbHksIHdlJ3JlIG5vdyBwcmVzZXJ2aW5nIGFueSBleGlzdGluZyBmbGFncyB3aXRoaW4gYHJlcS1cdTAwM2VjcWUuZmxhZ3NgIHdoZW4gYWRkaW5nIGJ1ZmZlciBmbGFncyBkdXJpbmcgaW9wb2xsIGNvbXBsZXRpb24uIFRoZSBjcnVjaWFsIHRoaW5nIGhlcmUgaXMgbWFraW5nIHN1cmUgdGhhdCB3ZSBhcmVuJ3QgaW5hZHZlcnRlbnRseSB3aXBpbmcgb3V0IG90aGVyLCBwb3NzaWJseSBpbXBvcnRhbnQsIGZsYWdzIHRoYXQgbWlnaHQgYWxyZWFkeSBiZSBzZXQuIFRoaXMgaXMgYSBjb21tb24gYW5kIHVzdWFsbHkgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBidWcgZml4LlxuXG5Ob3csIHRoZSBLTVNBTiBhcHBsaWNhYmlsaXR5LiBEb2VzIHRoaXMgcGF0Y2ggb3BlbiBhbnkgZG9vcnMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBMZXQncyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuIEknbSBub3Qgc2VlaW5nIGFueSBrZXJuZWwgbWVtb3J5IGFsbG9jYXRpb25zIHRoYXQgYXJlIHVuaW5pdGlhbGl6ZWQgZHVlIHRvIHRoaXMgY2hhbmdlLiBObyBuZXcgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMgb3IgZmllbGRzIGFyZSBpbnRyb2R1Y2VkLCB0aGF0IHdvdWxkIGJlIGEgcmVkIGZsYWcuIFRoZSBgcmVxLVx1MDAzZWNxZS5mbGFnc2AgZmllbGQgaXRzZWxmIGlzIGluaXRpYWxpemVkIGFuZCBkZWZpbmVkIGZyb20gdGhlIG1vbWVudCB0aGUgYHJlcWAgaXMgY3JlYXRlZC4gVGhlIGZpeCBpcyBhIHNpbXBsZSwgc2luZ2xlIGNoYXJhY3RlciBjaGFuZ2UsIHN3YXBwaW5nIGFuIGFzc2lnbm1lbnQgYD1gIHdpdGggYSBiaXR3aXNlIE9SIG9wZXJhdG9yIGB8PWAgb24gYW4gaW50ZWdlciBmaWVsZCAoYHJlcS1cdTAwM2VjcWUuZmxhZ3NgKS4gVGhpcyBtZWFucyB3ZSBhcmVuJ3QgY2hhbmdpbmcgdGhlIGZ1bmRhbWVudGFsIG5hdHVyZSBvZiBob3cgdGhpcyBmaWVsZCBpcyBoYW5kbGVkOyBqdXN0IG1vZGlmeWluZyB0aGUgdXBkYXRlIHByb2Nlc3MuIFRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBkYXRhIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBicmFuY2hpbmcgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgbm8gbWlzc2luZyBgbWVtc2V0YCBjYWxscywgd2hpY2ggYXJlIGFsbCB1c3VhbCBLTVNBTiBjb25jZXJucy5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLlxuXG5MZXQncyBkbyBhIHF1aWNrIGZpbmFsIHJldmlldyBvZiB0aGUgY3JpdGVyaWEuIEkgbmVlZCB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgY2FsbCBpdCBleGFjdGx5IG9uY2UuIFRoZSBkb2N1bWVudGF0aW9uIGVtcGhhc2l6ZXMgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYFRydWVgICpvbmx5KiBpZiB0aGVyZSBhcmUgY2hhbmdlcyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU2luY2UgdGhhdCdzIGNsZWFybHkgbm90IHRoZSBjYXNlIGhlcmUsIEknbSBjb25maWRlbnQuIEkgc2hvdWxkIGFsc28gYmUgY2xlYXIgaW4gbXkgYEtNU0FOUmVhc29uaW5nYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNjgsIk91dHB1dFRva2VucyI6MjA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI3OjIzLjM4MTk5NTE0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaW9fZG9faW9wb2xsKClgIGluIGBpb191cmluZy9ydy5jYCBieSBjaGFuZ2luZyBgcmVxLVxcdTAwM2VjcWUuZmxhZ3MgPSBpb19wdXRfa2J1ZiguLi4pYCB0byBgcmVxLVxcdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYoLi4uKWAuIFRoaXMgaXMgYSBvbmUtbGluZSBsb2dpY2FsIGZpeCBlbnN1cmluZyB0aGF0IGZsYWdzIGFscmVhZHkgc2V0IG9uIGByZXEtXFx1MDAzZWNxZS5mbGFnc2AgKHN1Y2ggYXMgYElPUklOR19DUUVfRl8zMmApIGFyZSBwcmVzZXJ2ZWQgd2hlbiBhcHBlbmRpbmcgY29tcGxldGlvbiBmbGFncyBmb3IgcHJvdmlkZWQgYnVmZmVyIHJlbGVhc2UgZHVyaW5nIElPIHBvbGxpbmcuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZGFyeSBjYWxjdWxhdGlvbnMgaW4gd2F5cyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBnZW5lcmFsIHRlc3Rpbmcgc3VmZmljZSBmb3IgdmVyaWZ5aW5nIGlvX3VyaW5nIHJlcXVlc3QgbGlmZWN5Y2xlIGNvcnJlY3RuZXNzLCBhbmQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpb19kb19pb3BvbGwoKWAgaW4gYGlvX3VyaW5nL3J3LmNgIGJ5IGNoYW5naW5nIGByZXEtXFx1MDAzZWNxZS5mbGFncyA9IGlvX3B1dF9rYnVmKC4uLilgIHRvIGByZXEtXFx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZiguLi4pYC4gVGhpcyBpcyBhIG9uZS1saW5lIGxvZ2ljYWwgZml4IGVuc3VyaW5nIHRoYXQgZmxhZ3MgYWxyZWFkeSBzZXQgb24gYHJlcS1cXHUwMDNlY3FlLmZsYWdzYCAoc3VjaCBhcyBgSU9SSU5HX0NRRV9GXzMyYCkgYXJlIHByZXNlcnZlZCB3aGVuIGFwcGVuZGluZyBjb21wbGV0aW9uIGZsYWdzIGZvciBwcm92aWRlZCBidWZmZXIgcmVsZWFzZSBkdXJpbmcgSU8gcG9sbGluZy5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kYXJ5IGNhbGN1bGF0aW9ucyBpbiB3YXlzIHRoYXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIGRvZXMgbm90IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIGdlbmVyYWwgdGVzdGluZyBzdWZmaWNlIGZvciB2ZXJpZnlpbmcgaW9fdXJpbmcgcmVxdWVzdCBsaWZlY3ljbGUgY29ycmVjdG5lc3MsIGFuZCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowt4gtd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 20:09:03 +0000 UTC FinishedAt: 2026-09-03 20:27:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c300d74d44c27064768a8dea90e67684b00681de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c300d74d44c27064768a8dea90e67684b00681de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "e644497a-cbe9-4012-8f1b-a867da292ced" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_do_iopoll", "io_iopoll_check" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fZG9faW9wb2xsJiMzNDssCiAgICAmIzM0O2lvX2lvcG9sbF9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpb19kb19pb3BvbGwoKWAgaW4gYGlvX3VyaW5nL3J3LmNgIGJ5IGNoYW5naW5nIGByZXEtXHUwMDNlY3FlLmZsYWdzID0gaW9fcHV0X2tidWYoLi4uKWAgdG8gYHJlcS1cdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYoLi4uKWAuIFRoaXMgaXMgYSBvbmUtbGluZSBsb2dpY2FsIGZpeCBlbnN1cmluZyB0aGF0IGZsYWdzIGFscmVhZHkgc2V0IG9uIGByZXEtXHUwMDNlY3FlLmZsYWdzYCAoc3VjaCBhcyBgSU9SSU5HX0NRRV9GXzMyYCkgYXJlIHByZXNlcnZlZCB3aGVuIGFwcGVuZGluZyBjb21wbGV0aW9uIGZsYWdzIGZvciBwcm92aWRlZCBidWZmZXIgcmVsZWFzZSBkdXJpbmcgSU8gcG9sbGluZy5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZGFyeSBjYWxjdWxhdGlvbnMgaW4gd2F5cyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBnZW5lcmFsIHRlc3Rpbmcgc3VmZmljZSBmb3IgdmVyaWZ5aW5nIGlvX3VyaW5nIHJlcXVlc3QgbGlmZWN5Y2xlIGNvcnJlY3RuZXNzLCBhbmQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpb19kb19pb3BvbGwoKSB0byBiaXR3aXNlLU9SIHRoZSBmbGFncyByZXR1cm5lZCBieSBpb19wdXRfa2J1ZigpIGludG8gcmVxLVx1MDAzZWNxZS5mbGFncyBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIHRoZW0sIHByZXZlbnRpbmcgdGhlIGxvc3Mgb2YgZXhpc3RpbmcgQ1FFIGZsYWdzIGR1cmluZyBwb2xsZWQgSS9PIGNvbXBsZXRpb24uIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBpb191cmluZyBjb21wbGV0aW9uIGxvZ2ljLCB3YXJyYW50aW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxZGMxZmJjOTExNDUxZjJlOTdmN2IwNDdhNWM3ZTkxOTJiMGU5NWEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAyMDoyNTo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9ydy5jIGIvaW9fdXJpbmcvcncuY1xuaW5kZXggOTUxMDZkZDFkN2ViOS4uZjJiYmIwYjFjMzBhMSAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3J3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3J3LmNcbkBAIC0xMzczLDcgJiM0MzsxMzczLDcgQEAgaW50IGlvX2RvX2lvcG9sbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBmb3JjZV9ub25zcGluKVxuIFx0XHRsaXN0X2RlbChcdTAwMjZyZXEtXHUwMDNlaW9wb2xsX25vZGUpO1xuIFx0XHR3cV9saXN0X2FkZF90YWlsKFx1MDAyNnJlcS1cdTAwM2Vjb21wX2xpc3QsIFx1MDAyNmN0eC1cdTAwM2VzdWJtaXRfc3RhdGUuY29tcGxfcmVxcyk7XG4gXHRcdG5yX2V2ZW50cyYjNDM7JiM0Mzs7XG4tXHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO1xuJiM0MztcdFx0cmVxLVx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO1xuIFx0XHRpZiAoIWlvX2lzX3VyaW5nX2NtZChyZXEpKVxuIFx0XHRcdGlvX3JlcV9yd19jbGVhbnVwKHJlcSwgMCk7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19kb19pb3BvbGwmIzM0OywKICAgICYjMzQ7aW9faW9wb2xsX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGlvX2RvX2lvcG9sbCgpIHRvIGJpdHdpc2UtT1IgdGhlIGZsYWdzIHJldHVybmVkIGJ5IGlvX3B1dF9rYnVmKCkgaW50byByZXEtXHUwMDNlY3FlLmZsYWdzIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmcgdGhlbSwgcHJldmVudGluZyB0aGUgbG9zcyBvZiBleGlzdGluZyBDUUUgZmxhZ3MgZHVyaW5nIHBvbGxlZCBJL08gY29tcGxldGlvbi4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIGlvX3VyaW5nIGNvbXBsZXRpb24gbG9naWMsIHdhcnJhbnRpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFkYzFmYmM5MTE0NTFmMmU5N2Y3YjA0N2E1YzdlOTE5MmIwZTk1YTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDIwOjI1OjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcncuYyBiL2lvX3VyaW5nL3J3LmMKaW5kZXggOTUxMDZkZDFkN2ViOS4uZjJiYmIwYjFjMzBhMSAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvcncuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9ydy5jCkBAIC0xMzczLDcgJiM0MzsxMzczLDcgQEAgaW50IGlvX2RvX2lvcG9sbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBmb3JjZV9ub25zcGluKQogCQlsaXN0X2RlbCgmYW1wO3JlcS0mZ3Q7aW9wb2xsX25vZGUpOwogCQl3cV9saXN0X2FkZF90YWlsKCZhbXA7cmVxLSZndDtjb21wX2xpc3QsICZhbXA7Y3R4LSZndDtzdWJtaXRfc3RhdGUuY29tcGxfcmVxcyk7CiAJCW5yX2V2ZW50cyYjNDM7JiM0Mzs7Ci0JCXJlcS0mZ3Q7Y3FlLmZsYWdzID0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLSZndDtjcWUucmVzLCAwKSwgTlVMTCk7CiYjNDM7CQlyZXEtJmd0O2NxZS5mbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtJmd0O2NxZS5yZXMsIDApLCBOVUxMKTsKIAkJaWYgKCFpb19pc191cmluZ19jbWQocmVxKSkKIAkJCWlvX3JlcV9yd19jbGVhbnVwKHJlcSwgMCk7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTMxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhlIGlvX3VyaW5nIFBhdGNoIGZvciBGdXp6aW5nIHdpdGggc3l6a2FsbGVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7dmUgZ290IGEgbmV3IHBhdGNoIGZvciB0aGUgTGludXgga2VybmVsIHRoYXQgSSBuZWVkIHRvIGFzc2VzcyBmb3IgZnV6emluZyBwb3RlbnRpYWwgdXNpbmcgc3l6a2FsbGVyLiBUaGlzIGlzIHByZXR0eSBzdGFuZGFyZCBzdHVmZiDigJMgcGFydCBvZiB0aGUgcmVndWxhciBrZXJuZWwgcmV2aWV3IGFuZCB0cmlhZ2UgcHJvY2Vzcywgd2hldGhlciBpdCYjMzk7cyBiZW5pZ24gZGV2ZWxvcGVyIFFBIG9yIHNlY3VyaXR5IGVuZ2luZWVyaW5nLiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhIGp1aWN5IHRhcmdldCBmb3IgZnV6emluZy4KCkkmIzM5O3ZlIGdvdCB0aGUgcGF0Y2ggaW4gZnJvbnQgb2YgbWU6IGBjb21taXQgMWRjMWZiYzkxMTQ1MWYyZTk3ZjdiMDQ3YTVjN2U5MTkyYjBlOTVhM2AuIExvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgYGlvX3VyaW5nL3J3LmNgLiBTcGVjaWZpY2FsbHksIHRoZSBkaWZmIG1vZGlmaWVzIGEgbGluZSBpbiBgaW9fZG9faW9wb2xsYDoKCmBgYGRpZmYKLQkJcmVxLSZndDtjcWUuZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtJmd0O2NxZS5yZXMsIDApLCBOVUxMKTsKJiM0MzsJCXJlcS0mZ3Q7Y3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS0mZ3Q7Y3FlLnJlcywgMCksIE5VTEwpOwpgYGAKCk9rYXksIHNvIHRoZXkmIzM5O3JlIGNoYW5naW5nIHRoZSBhc3NpZ25tZW50IG9mIGByZXEtJmd0O2NxZS5mbGFnc2AgdG8gYSBiaXR3aXNlIE9SLiBUaGlzIGlzIHRoZSBrZXkgbGluZSB0byBpbnZlc3RpZ2F0ZS4gTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gZGl2ZSBkZWVwZXIuIEkmIzM5O20gZ29pbmcgdG8gdXNlIG15IHN0YW5kYXJkIHRvb2xzIOKAkyBsaWtlbHkgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gYGlvX3VyaW5nL3J3LmNgIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBpb19wdXRfa2J1ZmAgZG9lcywgaG93IGByZXEtJmd0O2NxZS5mbGFnc2AgaXMgdXNlZCwgYW5kIHdoYXQgZWZmZWN0IHRoaXMgY2hhbmdlIG1pZ2h0IGhhdmUgb24gdGhlIG92ZXJhbGwgZmxvdy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoaXMgY2hhbmdlIGFmZmVjdHMgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGJvdW5kYXJ5IGNvbmRpdGlvbnMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9ydy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzUwOlx0XHRcdGlmIChjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9IWUJSSURfSU9QT0xMKVxuMTM1MTpcdFx0XHRcdHJldCA9IGlvX3VyaW5nX2h5YnJpZF9wb2xsKHJlcSwgXHUwMDI2aW9iLCBwb2xsX2ZsYWdzKTtcbjEzNTI6XHRcdFx0ZWxzZVxuMTM1MzpcdFx0XHRcdHJldCA9IGlvX3VyaW5nX2NsYXNzaWNfcG9sbChyZXEsIFx1MDAyNmlvYiwgcG9sbF9mbGFncyk7XG4xMzU0Olx0XG4xMzU1Olx0XHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKVxuMTM1NjpcdFx0XHRcdHJldHVybiByZXQ7XG4xMzU3Olx0XHRcdGVsc2UgaWYgKHJldClcbjEzNTg6XHRcdFx0XHRwb2xsX2ZsYWdzIHw9IEJMS19QT0xMX09ORVNIT1Q7XG4xMzU5Olx0XG4xMzYwOlx0XHRcdC8qIGlvcG9sbCBtYXkgaGF2ZSBjb21wbGV0ZWQgY3VycmVudCByZXEgKi9cbjEzNjE6XHRcdFx0aWYgKCFycV9saXN0X2VtcHR5KFx1MDAyNmlvYi5yZXFfbGlzdCkgfHxcbjEzNjI6XHRcdFx0ICAgIFJFQURfT05DRShyZXEtXHUwMDNlaW9wb2xsX2NvbXBsZXRlZCkpXG4xMzYzOlx0XHRcdFx0YnJlYWs7XG4xMzY0Olx0XHR9XG4xMzY1Olx0XG4xMzY2Olx0XHRpZiAoIXJxX2xpc3RfZW1wdHkoXHUwMDI2aW9iLnJlcV9saXN0KSlcbjEzNjc6XHRcdFx0aW9iLmNvbXBsZXRlKFx1MDAyNmlvYik7XG4xMzY4Olx0XG4xMzY5Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCB0bXAsIFx1MDAyNmN0eC1cdTAwM2Vpb3BvbGxfbGlzdCwgaW9wb2xsX25vZGUpIHtcbjEzNzA6XHRcdFx0Lyogb3JkZXIgd2l0aCBpb19jb21wbGV0ZV9yd19pb3BvbGwoKSwgZS5nLiAtXHUwMDNlcmVzdWx0IHVwZGF0ZXMgKi9cbjEzNzE6XHRcdFx0aWYgKCFzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnJlcS1cdTAwM2Vpb3BvbGxfY29tcGxldGVkKSlcbjEzNzI6XHRcdFx0XHRjb250aW51ZTtcbjEzNzM6XHRcdFx0bGlzdF9kZWwoXHUwMDI2cmVxLVx1MDAzZWlvcG9sbF9ub2RlKTtcbjEzNzQ6XHRcdFx0d3FfbGlzdF9hZGRfdGFpbChcdTAwMjZyZXEtXHUwMDNlY29tcF9saXN0LCBcdTAwMjZjdHgtXHUwMDNlc3VibWl0X3N0YXRlLmNvbXBsX3JlcXMpO1xuMTM3NTpcdFx0XHRucl9ldmVudHMmIzQzOyYjNDM7O1xuMTM3NjpcdFx0XHRyZXEtXHUwMDNlY3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS1cdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XG4xMzc3Olx0XHRcdGlmICghaW9faXNfdXJpbmdfY21kKHJlcSkpXG4xMzc4Olx0XHRcdFx0aW9fcmVxX3J3X2NsZWFudXAocmVxLCAwKTtcbjEzNzk6XHRcdH1cbjEzODA6XHRcdGlmIChucl9ldmVudHMpXG4xMzgxOlx0XHRcdF9faW9fc3VibWl0X2ZsdXNoX2NvbXBsZXRpb25zKGN0eCk7XG4xMzgyOlx0XHRyZXR1cm4gbnJfZXZlbnRzO1xuMTM4MzpcdH1cbjEzODQ6XHRcbjEzODU6XHR2b2lkIGlvX3J3X2NhY2hlX2ZyZWUoY29uc3Qgdm9pZCAqZW50cnkpXG4xMzg2Olx0e1xuMTM4NzpcdFx0c3RydWN0IGlvX2FzeW5jX3J3ICpydyA9IChzdHJ1Y3QgaW9fYXN5bmNfcncgKikgZW50cnk7XG4xMzg4Olx0XG4xMzg5Olx0XHRpb192ZWNfZnJlZShcdTAwMjZydy1cdTAwM2V2ZWMpO1xuMTM5MDpcdFx0a2ZyZWUocncpO1xuMTM5MTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDg2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBpb191cmluZyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdGhpcyBzb3J0ZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbihzKSB0aGF0IGVuYWJsZSBpb191cmluZywgYW5kIHNwZWNpZmljYWxseSwgdGhlIGBpb19kb19pb3BvbGxgIGZlYXR1cmUuIEkmIzM5O20gcHJldHR5IHN1cmUgaXQmIzM5O3MgY29udHJvbGxlZCB0aHJvdWdoIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgc28gSSBzaG91bGQgYmUgYWJsZSB0byB0cmFjayBpdCBkb3duIGluIEtjb25maWcuIFRoZSBzb3VyY2UgY29kZSBpcyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gTGV0IG1lIGhlYWQgdGhlcmUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuIFNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lPX1VSSU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3MzAgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmlvX3VyaW5nL0tjb25maWctNS1cbmlvX3VyaW5nL0tjb25maWc6Njpjb25maWcgSU9fVVJJTkdfWkNSWFxuaW9fdXJpbmcvS2NvbmZpZy03LVx0ZGVmX2Jvb2wgeVxuaW9fdXJpbmcvS2NvbmZpZzo4Olx0ZGVwZW5kcyBvbiBJT19VUklOR1xuaW9fdXJpbmcvS2NvbmZpZy05LVx0ZGVwZW5kcyBvbiBQQUdFX1BPT0xcbi0tXG5pb191cmluZy9LY29uZmlnLTEyLVxuaW9fdXJpbmcvS2NvbmZpZzoxMzpjb25maWcgSU9fVVJJTkdfQlBGXG5pb191cmluZy9LY29uZmlnLTE0LVx0ZGVmX2Jvb2wgeVxuLS1cbmlvX3VyaW5nL0tjb25maWctMTctXG5pb191cmluZy9LY29uZmlnOjE4OmNvbmZpZyBJT19VUklOR19CUEZfT1BTXG5pb191cmluZy9LY29uZmlnLTE5LVx0ZGVmX2Jvb2wgeVxuaW9fdXJpbmcvS2NvbmZpZzoyMDpcdGRlcGVuZHMgb24gSU9fVVJJTkdcbmlvX3VyaW5nL0tjb25maWctMjEtXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBCUEZfSklUIFx1MDAyNlx1MDAyNiBERUJVR19JTkZPX0JURlxuLS1cbmlvX3VyaW5nL01ha2VmaWxlPTc9ZW5kaWZcbmlvX3VyaW5nL01ha2VmaWxlLTgtXG5pb191cmluZy9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19JT19VUklORylcdFx0JiM0Mzs9IGlvX3VyaW5nLm8gb3BkZWYubyBrYnVmLm8gcnNyYy5vIG5vdGlmLm8gXFxcbmlvX3VyaW5nL01ha2VmaWxlLTEwLVx0XHRcdFx0XHR0Y3R4Lm8gZmlsZXRhYmxlLm8gcncubyBwb2xsLm8gXFxcbi0tXG5pb191cmluZy9NYWtlZmlsZS0xOC1cbmlvX3VyaW5nL01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19JT19VUklOR19aQ1JYKVx0JiM0Mzs9IHpjcngub1xuaW9fdXJpbmcvTWFrZWZpbGUtMjAtb2JqLSQoQ09ORklHX0lPX1dRKVx0XHQmIzQzOz0gaW8td3Eub1xuLS1cbmlvX3VyaW5nL01ha2VmaWxlPTI1PW9iai0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gZmRpbmZvLm9cbmlvX3VyaW5nL01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19JT19VUklOR19NT0NLX0ZJTEUpICYjNDM7PSBtb2NrX2ZpbGUub1xuaW9fdXJpbmcvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0lPX1VSSU5HX0JQRikgJiM0Mzs9IGJwZl9maWx0ZXIub1xuaW9fdXJpbmcvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0lPX1VSSU5HX0JQRl9PUFMpICYjNDM7PSBicGYtb3BzLm9cbi0tXG5pb191cmluZy9hZHZpc2UuYz01MT1pbnQgaW9fbWFkdmlzZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL2FkdmlzZS5jLTU2LVxuaW9fdXJpbmcvYWR2aXNlLmM6NTc6XHRXQVJOX09OX09OQ0UoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spO1xuaW9fdXJpbmcvYWR2aXNlLmMtNTgtXG4tLVxuaW9fdXJpbmcvYWR2aXNlLmM9OTY9aW50IGlvX2ZhZHZpc2Uoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9hZHZpc2UuYy0xMDAtXG5pb191cmluZy9hZHZpc2UuYzoxMDE6XHRXQVJOX09OX09OQ0UoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0sgXHUwMDI2XHUwMDI2IGlvX2ZhZHZpc2VfZm9yY2VfYXN5bmMoZmEpKTtcbmlvX3VyaW5nL2FkdmlzZS5jLTEwMi1cbi0tXG5pb191cmluZy9icGYtb3BzLmg9MTM9c3RydWN0IGlvX3VyaW5nX2JwZl9vcHMge1xuLS1cbmlvX3VyaW5nL2JwZi1vcHMuaC0xOS1cbmlvX3VyaW5nL2JwZi1vcHMuaDoyMDojaWZkZWYgQ09ORklHX0lPX1VSSU5HX0JQRl9PUFNcbmlvX3VyaW5nL2JwZi1vcHMuaC0yMS12b2lkIGlvX3VucmVnaXN0ZXJfYnBmX29wcyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jPTI2Nj1zdGF0aWMgc3RydWN0IGlvX2JwZl9maWx0ZXJzICppb19icGZfZmlsdGVyX2NvdyhzdHJ1Y3QgaW9fcmVzdHJpY3Rpb24gKnNyYylcbi0tXG5pb191cmluZy9icGZfZmlsdGVyLmMtMzA5LVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jOjMxMDojZGVmaW5lIElPX1VSSU5HX0JQRl9GSUxURVJfRkxBR1NcdChJT19VUklOR19CUEZfRklMVEVSX0RFTllfUkVTVCB8IFxcXG5pb191cmluZy9icGZfZmlsdGVyLmM6MzExOlx0XHRcdFx0XHQgSU9fVVJJTkdfQlBGX0ZJTFRFUl9TWl9TVFJJQ1QpXG5pb191cmluZy9icGZfZmlsdGVyLmMtMzEyLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jPTMxMz1zdGF0aWMgaW50IGlvX2JwZl9maWx0ZXJfaW1wb3J0KHN0cnVjdCBpb191cmluZ19icGYgKnJlZyxcbi0tXG5pb191cmluZy9icGZfZmlsdGVyLmMtMzIwLVx0XHRyZXR1cm4gLUVGQVVMVDtcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYzozMjE6XHRpZiAocmVnLVx1MDAzZWNtZF90eXBlICE9IElPX1VSSU5HX0JQRl9DTURfRklMVEVSKVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTMyMi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTMyNy1cdFx0cmV0dXJuIC1FSU5WQUw7XG5pb191cmluZy9icGZfZmlsdGVyLmM6MzI4Olx0aWYgKHJlZy1cdTAwM2VmaWx0ZXIuZmxhZ3MgXHUwMDI2IH5JT19VUklOR19CUEZfRklMVEVSX0ZMQUdTKVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTMyOS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTM0NC1cdC8qIHNpemUgZGlmZmVycywgZmFpbCBpbiBzdHJpY3QgbW9kZSAqL1xuaW9fdXJpbmcvYnBmX2ZpbHRlci5jOjM0NTpcdGVsc2UgaWYgKHJlZy1cdTAwM2VmaWx0ZXIuZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0JQRl9GSUxURVJfU1pfU1RSSUNUKVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTM0Ni1cdFx0cmV0ID0gLUVNU0dTSVpFO1xuLS1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuYz0zNTk9aW50IGlvX3JlZ2lzdGVyX2JwZl9maWx0ZXIoc3RydWN0IGlvX3Jlc3RyaWN0aW9uICpyZXMsXG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTQzMy1cdC8qXG5pb191cmluZy9icGZfZmlsdGVyLmM6NDM0Olx0ICogSWYgSU9fVVJJTkdfQlBGX0ZJTFRFUl9ERU5ZX1JFU1QgaXMgc2V0LCBmaWxsIGFueSB1bnJlZ2lzdGVyZWRcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy00MzUtXHQgKiBvcGNvZGUgd2l0aCB0aGUgZHVtbXkgZmlsdGVyLiBUaGF0IHdpbGwgY2F1c2UgdGhlbSB0byBiZSBkZW5pZWQuXG5pb191cmluZy9icGZfZmlsdGVyLmMtNDM2LVx0ICovXG5pb191cmluZy9icGZfZmlsdGVyLmM6NDM3Olx0aWYgKHJlZy5maWx0ZXIuZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0JQRl9GSUxURVJfREVOWV9SRVNUKSB7XG5pb191cmluZy9icGZfZmlsdGVyLmMtNDM4LVx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgSU9SSU5HX09QX0xBU1Q7IGkmIzQzOyYjNDM7KSB7XG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaDoyOiNpZm5kZWYgSU9fVVJJTkdfQlBGX0ZJTFRFUl9IXG5pb191cmluZy9icGZfZmlsdGVyLmg6MzojZGVmaW5lIElPX1VSSU5HX0JQRl9GSUxURVJfSFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTQtXG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTYtXG5pb191cmluZy9icGZfZmlsdGVyLmg6NzojaWZkZWYgQ09ORklHX0lPX1VSSU5HX0JQRlxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTgtXG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oPTQyPXN0YXRpYyBpbmxpbmUgdm9pZCBpb19icGZfZmlsdGVyX2Nsb25lKHN0cnVjdCBpb19yZXN0cmljdGlvbiAqZHN0LFxuLS1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC00NS19XG5pb191cmluZy9icGZfZmlsdGVyLmg6NDY6I2VuZGlmIC8qIENPTkZJR19JT19VUklOR19CUEYgKi9cbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC00Ny1cbi0tXG5pb191cmluZy9jbWRfbmV0LmM9MjU9c3RhdGljIGlubGluZSBpbnQgaW9fdXJpbmdfY21kX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5pb191cmluZy9jbWRfbmV0LmMtMjktXHRjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUgPSBjbWQtXHUwMDNlc3FlO1xuaW9fdXJpbmcvY21kX25ldC5jOjMwOlx0Ym9vbCBjb21wYXQgPSAhIShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9DT01QQVQpO1xuaW9fdXJpbmcvY21kX25ldC5jLTMxLVx0aW50IG9wdGxlbiwgb3B0bmFtZSwgbGV2ZWwsIGVycjtcbi0tXG5pb191cmluZy9jbWRfbmV0LmM9NTI9c3RhdGljIGlubGluZSBpbnQgaW9fdXJpbmdfY21kX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5pb191cmluZy9jbWRfbmV0LmMtNTYtXHRjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUgPSBjbWQtXHUwMDNlc3FlO1xuaW9fdXJpbmcvY21kX25ldC5jOjU3Olx0Ym9vbCBjb21wYXQgPSAhIShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9DT01QQVQpO1xuaW9fdXJpbmcvY21kX25ldC5jLTU4LVx0aW50IG9wdG5hbWUsIG9wdGxlbiwgbGV2ZWw7XG4tLVxuaW9fdXJpbmcvY21kX25ldC5jPTEwND1zdGF0aWMgaW50IGlvX3VyaW5nX2NtZF90aW1lc3RhbXAoc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5pb191cmluZy9jbWRfbmV0LmMtMTEzLVxuaW9fdXJpbmcvY21kX25ldC5jOjExNDpcdGlmICghKGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX0NRRTMyKSlcbmlvX3VyaW5nL2NtZF9uZXQuYy0xMTUtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmlvX3VyaW5nL2Vwb2xsLmM9NTE9aW50IGlvX2Vwb2xsX2N0bChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL2Vwb2xsLmMtNTMtXHRzdHJ1Y3QgaW9fZXBvbGwgKmllID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2Vwb2xsKTtcbmlvX3VyaW5nL2Vwb2xsLmM6NTQ6XHRib29sIGZvcmNlX25vbmJsb2NrID0gaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0s7XG5pb191cmluZy9lcG9sbC5jLTU1LVx0c3RydWN0IGVwb2xsX2tleSBrZXk7XG4tLVxuaW9fdXJpbmcvZmRpbmZvLmM9MzQ9c3RhdGljIF9fY29sZCB2b2lkIG5hcGlfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvZmRpbmZvLmMtMzktXHRzd2l0Y2ggKG1vZGUpIHtcbmlvX3VyaW5nL2ZkaW5mby5jOjQwOlx0Y2FzZSBJT19VUklOR19OQVBJX1RSQUNLSU5HX0lOQUNUSVZFOlxuaW9fdXJpbmcvZmRpbmZvLmMtNDEtXHRcdHNlcV9wdXRzKG0sIFwmIzM0O05BUEk6XFx0ZGlzYWJsZWRcXG5cJiMzNDspO1xuaW9fdXJpbmcvZmRpbmZvLmMtNDItXHRcdGJyZWFrO1xuaW9fdXJpbmcvZmRpbmZvLmM6NDM6XHRjYXNlIElPX1VSSU5HX05BUElfVFJBQ0tJTkdfRFlOQU1JQzpcbmlvX3VyaW5nL2ZkaW5mby5jLTQ0LVx0XHRjb21tb25fdHJhY2tpbmdfc2hvd19mZGluZm8oY3R4LCBtLCBcJiMzNDtkeW5hbWljXCYjMzQ7KTtcbmlvX3VyaW5nL2ZkaW5mby5jLTQ1LVx0XHRicmVhaztcbmlvX3VyaW5nL2ZkaW5mby5jOjQ2Olx0Y2FzZSBJT19VUklOR19OQVBJX1RSQUNLSU5HX1NUQVRJQzpcbmlvX3VyaW5nL2ZkaW5mby5jLTQ3LVx0XHRjb21tb25fdHJhY2tpbmdfc2hvd19mZGluZm8oY3R4LCBtLCBcJiMzNDtzdGF0aWNcJiMzNDspO1xuLS1cbmlvX3VyaW5nL2ZzLmM9ODI9aW50IGlvX3JlbmFtZWF0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvZnMuYy04OC1cbmlvX3VyaW5nL2ZzLmM6ODk6XHRXQVJOX09OX09OQ0UoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spO1xuaW9fdXJpbmcvZnMuYy05MC1cbi0tXG5pb191cmluZy9mcy5jPTEzNT1pbnQgaW9fdW5saW5rYXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9mcy5jLTE0MC1cbmlvX3VyaW5nL2ZzLmM6MTQxOlx0V0FSTl9PTl9PTkNFKGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKTtcbmlvX3VyaW5nL2ZzLmMtMTQyLVxuLS1cbmlvX3VyaW5nL2ZzLmM9MTg0PWludCBpb19ta2RpcmF0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvZnMuYy0xODktXG5pb191cmluZy9mcy5jOjE5MDpcdFdBUk5fT05fT05DRShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSyk7XG5pb191cmluZy9mcy5jLTE5MS1cbi0tXG5pb191cmluZy9mcy5jPTIzNj1pbnQgaW9fc3ltbGlua2F0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvZnMuYy0yNDItXG5pb191cmluZy9mcy5jOjI0MzpcdFdBUk5fT05fT05DRShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSyk7XG5pb191cmluZy9mcy5jLTI0NC1cbi0tXG5pb191cmluZy9mcy5jPTI4ND1pbnQgaW9fbGlua2F0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvZnMuYy0yOTAtXG5pb191cmluZy9mcy5jOjI5MTpcdFdBUk5fT05fT05DRShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSyk7XG5pb191cmluZy9mcy5jLTI5Mi1cbi0tXG5pb191cmluZy9pby13cS5jPTEzNDc9c3RhdGljIHZvaWQgaW9fd3FfZXhpdF93b3JrZXJzKHN0cnVjdCBpb193cSAqd3EpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMzY4LVx0ICogdW5pbnRlcnJ1cHRpYmx5IGZvciBoYWxmIHRoYXQgdGltZSwgYW5kIHdhcm4gaWYgd2UgZXhjZWVkZWQgZW5kXG5pb191cmluZy9pby13cS5jOjEzNjk6XHQgKiB1cCB3YWl0aW5nIG1vcmUgdGhhbiBJT19VUklOR19FWElUX1dBSVRfTUFYLlxuaW9fdXJpbmcvaW8td3EuYy0xMzcwLVx0ICovXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMzczLVx0XHR0aW1lb3V0ID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7XG5pb191cmluZy9pby13cS5jOjEzNzQ6XHR3YXJuX3RpbWVvdXQgPSBqaWZmaWVzICYjNDM7IElPX1VSSU5HX0VYSVRfV0FJVF9NQVg7XG5pb191cmluZy9pby13cS5jLTEzNzUtXHRkbyB7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNTQ9c3RhdGljIHZvaWQgaW9fcG9pc29uX2NhY2hlZF9yZXEoc3RydWN0IGlvX2tpb2NiICpyZXEpXG5pb191cmluZy9pb191cmluZy5jLTE1NS17XG5pb191cmluZy9pb191cmluZy5jOjE1NjpcdHJlcS1cdTAwM2VjdHggPSBJT19VUklOR19QVFJfUE9JU09OO1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNTc6XHRyZXEtXHUwMDNldGN0eCA9IElPX1VSSU5HX1BUUl9QT0lTT047XG5pb191cmluZy9pb191cmluZy5jOjE1ODpcdHJlcS1cdTAwM2VmaWxlID0gSU9fVVJJTkdfUFRSX1BPSVNPTjtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTU5Olx0cmVxLVx1MDAzZWNyZWRzID0gSU9fVVJJTkdfUFRSX1BPSVNPTjtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTYwOlx0cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gSU9fVVJJTkdfUFRSX1BPSVNPTjtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTYxOlx0cmVxLVx1MDAzZWFwb2xsID0gSU9fVVJJTkdfUFRSX1BPSVNPTjtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTYyLX1cbi0tXG5pb191cmluZy9pb191cmluZy5jPTE2ND12b2lkIGlvX3BvaXNvbl9yZXEoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNjYtXHRpb19wb2lzb25fY2FjaGVkX3JlcShyZXEpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNjc6XHRyZXEtXHUwMDNlYXN5bmNfZGF0YSA9IElPX1VSSU5HX1BUUl9QT0lTT047XG5pb191cmluZy9pb191cmluZy5jOjE2ODpcdHJlcS1cdTAwM2VrYnVmID0gSU9fVVJJTkdfUFRSX1BPSVNPTjtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTY5Olx0cmVxLVx1MDAzZWNvbXBfbGlzdC5uZXh0ID0gSU9fVVJJTkdfUFRSX1BPSVNPTjtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTcwOlx0cmVxLVx1MDAzZWZpbGVfbm9kZSA9IElPX1VSSU5HX1BUUl9QT0lTT047XG5pb191cmluZy9pb191cmluZy5jOjE3MTpcdHJlcS1cdTAwM2VsaW5rID0gSU9fVVJJTkdfUFRSX1BPSVNPTjtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTcyLX1cbi0tXG5pb191cmluZy9pb191cmluZy5jPTg0MD12b2lkIGlvX2FkZF9hdXhfY3FlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1NjQgdXNlcl9kYXRhLCBzMzIgcmVzLCB1MzIgY2ZsYWdzKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtODU0LSAqIEEgaGVscGVyIGZvciBtdWx0aXNob3QgcmVxdWVzdHMgcG9zdGluZyBhZGRpdGlvbmFsIENRRXMuXG5pb191cmluZy9pb191cmluZy5jOjg1NTogKiBTaG91bGQgb25seSBiZSB1c2VkIGZyb20gYSB0YXNrX3dvcmsgaW5jbHVkaW5nIElPX1VSSU5HX0ZfTVVMVElTSE9ULlxuaW9fdXJpbmcvaW9fdXJpbmcuYy04NTYtICovXG5pb191cmluZy9pb191cmluZy5jPTg1Nz1ib29sIGlvX3JlcV9wb3N0X2NxZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgczMyIHJlcywgdTMyIGNmbGFncylcbi0tXG5pb191cmluZy9pb191cmluZy5jLTg4Ni0gKiBBIGhlbHBlciBmb3IgbXVsdGlzaG90IHJlcXVlc3RzIHBvc3RpbmcgYWRkaXRpb25hbCBDUUVzLlxuaW9fdXJpbmcvaW9fdXJpbmcuYzo4ODc6ICogU2hvdWxkIG9ubHkgYmUgdXNlZCBmcm9tIGEgdGFza193b3JrIGluY2x1ZGluZyBJT19VUklOR19GX01VTFRJU0hPVC5cbmlvX3VyaW5nL2lvX3VyaW5nLmMtODg4LSAqL1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9OTEwPXN0YXRpYyB2b2lkIGlvX3JlcV9jb21wbGV0ZV9wb3N0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9pb191cmluZy5jLTkxNi1cdCAqIEFsbCBleGVjdXRpb24gcGF0aHMgYnV0IGlvLXdxIHVzZSB0aGUgZGVmZXJyZWQgY29tcGxldGlvbnMgYnlcbmlvX3VyaW5nL2lvX3VyaW5nLmM6OTE3Olx0ICogcGFzc2luZyBJT19VUklOR19GX0NPTVBMRVRFX0RFRkVSIGFuZCB0aHVzIHNob3VsZCBub3QgZW5kIHVwIGhlcmUuXG5pb191cmluZy9pb191cmluZy5jLTkxOC1cdCAqL1xuaW9fdXJpbmcvaW9fdXJpbmcuYzo5MTk6XHRpZiAoV0FSTl9PTl9PTkNFKCEoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfSU9XUSkpKVxuaW9fdXJpbmcvaW9fdXJpbmcuYy05MjAtXHRcdHJldHVybjtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTEyNzQ9c3RhdGljIHZvaWQgaW9faW9wb2xsX3JlcV9pc3N1ZWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9pb191cmluZy5jLTEyNzYtXHRzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCA9IHJlcS1cdTAwM2VjdHg7XG5pb191cmluZy9pb191cmluZy5jOjEyNzc6XHRjb25zdCBib29sIG5lZWRzX2xvY2sgPSBpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRDtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTI3OC1cbi0tXG5pb191cmluZy9pb191cmluZy5jPTE0MDE9c3RhdGljIGludCBpb19pc3N1ZV9zcWUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9pb191cmluZy5jLTE0MTEtXHRpZiAocmV0ID09IElPVV9DT01QTEVURSkge1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNDEyOlx0XHRpZiAoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfQ09NUExFVEVfREVGRVIpXG5pb191cmluZy9pb191cmluZy5jLTE0MTMtXHRcdFx0aW9fcmVxX2NvbXBsZXRlX2RlZmVyKHJlcSk7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNDI5PWludCBpb19wb2xsX2lzc3VlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpb190d190b2tlbl90IHR3KVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNDMwLXtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTQzMTpcdGNvbnN0IHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyA9IElPX1VSSU5HX0ZfTk9OQkxPQ0sgfFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNDMyOlx0XHRcdFx0XHQgSU9fVVJJTkdfRl9NVUxUSVNIT1QgfFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNDMzOlx0XHRcdFx0XHQgSU9fVVJJTkdfRl9DT01QTEVURV9ERUZFUjtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTQzNC1cdGludCByZXQ7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNDY2PXZvaWQgaW9fd3Ffc3VibWl0X3dvcmsoc3RydWN0IGlvX3dxX3dvcmsgKndvcmspXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNDY5LVx0Y29uc3Qgc3RydWN0IGlvX2lzc3VlX2RlZiAqZGVmID0gXHUwMDI2aW9faXNzdWVfZGVmc1tyZXEtXHUwMDNlb3Bjb2RlXTtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTQ3MDpcdHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyA9IElPX1VSSU5HX0ZfVU5MT0NLRUQgfCBJT19VUklOR19GX0lPV1E7XG5pb191cmluZy9pb191cmluZy5jLTE0NzEtXHRib29sIG5lZWRzX3BvbGwgPSBmYWxzZTtcbi0tXG5pb191cmluZy9pb191cmluZy5jLTE1MTktXHRcdFx0bmVlZHNfcG9sbCA9IHRydWU7XG5pb191cmluZy9pb191cmluZy5jOjE1MjA6XHRcdFx0aXNzdWVfZmxhZ3MgfD0gSU9fVVJJTkdfRl9OT05CTE9DSztcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTUyMS1cdFx0fVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTU1My1cdFx0bmVlZHNfcG9sbCA9IGZhbHNlO1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNTU0Olx0XHRpc3N1ZV9mbGFncyBcdTAwMjY9IH5JT19VUklOR19GX05PTkJMT0NLO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNTU1LVx0fSB3aGlsZSAoMSk7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNTkzPXN0YXRpYyBpbnQgaW9fcmVxX3NxZV9jb3B5KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNjAxLVx0XHRyZXR1cm4gMDtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTYwMjpcdGlmIChXQVJOX09OX09OQ0UoIShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9JTkxJTkUpKSlcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTYwMy1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNjMzPXN0YXRpYyBpbmxpbmUgdm9pZCBpb19xdWV1ZV9zcWUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBleHRyYV9mbGFncylcbi0tXG5pb191cmluZy9pb191cmluZy5jLTE2MzUte1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNjM2Olx0dW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzID0gSU9fVVJJTkdfRl9OT05CTE9DSyB8XG5pb191cmluZy9pb191cmluZy5jOjE2Mzc6XHRcdFx0XHQgICBJT19VUklOR19GX0NPTVBMRVRFX0RFRkVSIHwgZXh0cmFfZmxhZ3M7XG5pb191cmluZy9pb191cmluZy5jLTE2MzgtXHRpbnQgcmV0O1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9MTY1MD1zdGF0aWMgdm9pZCBpb19xdWV1ZV9zcWVfZmFsbGJhY2soc3RydWN0IGlvX2tpb2NiICpyZXEpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNjYxLVx0fSBlbHNlIHtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTY2MjpcdFx0LyogY2FuJiMzOTt0IGZhaWwgd2l0aCBJT19VUklOR19GX0lOTElORSAqL1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNjYzOlx0XHRpb19yZXFfc3FlX2NvcHkocmVxLCBJT19VUklOR19GX0lOTElORSk7XG5pb191cmluZy9pb191cmluZy5jLTE2NjQtXHRcdGlmICh1bmxpa2VseShyZXEtXHUwMDNlY3R4LVx1MDAzZWludF9mbGFncyBcdTAwMjYgSU9fUklOR19GX0RSQUlOX0FDVElWRSkpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xODczPXN0YXRpYyBpbmxpbmUgaW50IGlvX3N1Ym1pdF9zcWUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19raW9jYiAqcmVxLFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTkwMC1cdFx0dHJhY2VfaW9fdXJpbmdfbGluayhyZXEsIGxpbmstXHUwMDNlbGFzdCk7XG5pb191cmluZy9pb191cmluZy5jOjE5MDE6XHRcdGlvX3JlcV9zcWVfY29weShyZXEsIElPX1VSSU5HX0ZfSU5MSU5FKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTkwMi1cdFx0bGluay1cdTAwM2VsYXN0LVx1MDAzZWxpbmsgPSByZXE7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xOTI0LVxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxOTI1Olx0aW9fcXVldWVfc3FlKHJlcSwgSU9fVVJJTkdfRl9JTkxJTkUpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0xOTI2LVx0cmV0dXJuIDA7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yMzA5PXN0YXRpYyBfX2NvbGQgdm9pZCBpb19yaW5nX2V4aXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMzExLVx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGlvX3JpbmdfY3R4LCBleGl0X3dvcmspO1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMzEyOlx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyAmIzQzOyBJT19VUklOR19FWElUX1dBSVRfTUFYO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMzEzLVx0dW5zaWduZWQgbG9uZyBpbnRlcnZhbCA9IEhaIC8gMjA7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaD0zMD1zdHJ1Y3QgaW9fY3R4X2NvbmZpZyB7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0xMDAtICovXG5pb191cmluZy9pb191cmluZy5oOjEwMTojZGVmaW5lIElPX1VSSU5HX0VYSVRfV0FJVF9NQVhcdChIWiAqIDYwICogNSlcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMTAyLVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmg9MzkyPXN0YXRpYyBpbmxpbmUgdm9pZCBpb19yaW5nX3N1Ym1pdF91bmxvY2soc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zOTUtXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmN0eC1cdTAwM2V1cmluZ19sb2NrKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmg6Mzk2Olx0aWYgKHVubGlrZWx5KGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX1VOTE9DS0VEKSlcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzk3LVx0XHRtdXRleF91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZXVyaW5nX2xvY2spO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmg9NDAwPXN0YXRpYyBpbmxpbmUgdm9pZCBpb19yaW5nX3N1Ym1pdF9sb2NrKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmgtNDA4LVx0ICovXG5pb191cmluZy9pb191cmluZy5oOjQwOTpcdGlmICh1bmxpa2VseShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkpXG5pb191cmluZy9pb191cmluZy5oLTQxMC1cdFx0bXV0ZXhfbG9jayhcdTAwMjZjdHgtXHUwMDNldXJpbmdfbG9jayk7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaD00Nzk9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fc3FyaW5nX2VudHJpZXMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC00ODctICogUHJvdGVjdGVkIGJ5IC1cdTAwM2V1cmluZ19sb2NrIGFuZCBjYW4gb25seSBiZSB1c2VkIGVpdGhlciB3aXRoXG5pb191cmluZy9pb191cmluZy5oOjQ4ODogKiBJT19VUklOR19GX0NPTVBMRVRFX0RFRkVSIG9yIGluc2lkZSBhIHR3IGhhbmRsZXIgaG9sZGluZyB0aGUgbXV0ZXguXG5pb191cmluZy9pb191cmluZy5oLTQ4OS0gKi9cbi0tXG5pb191cmluZy9rYnVmLmM9MTcyPXN0YXRpYyBib29sIGlvX3Nob3VsZF9jb21taXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9rYnVmLmMtMTgzLVx0Ki9cbmlvX3VyaW5nL2tidWYuYzoxODQ6XHRpZiAoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfVU5MT0NLRUQpXG5pb191cmluZy9rYnVmLmMtMTg1LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5pb191cmluZy9rYnVmLmM9MzQ1PWludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTM3My1vdXRfdW5sb2NrOlxuaW9fdXJpbmcva2J1Zi5jOjM3NDpcdGlmIChpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkge1xuaW9fdXJpbmcva2J1Zi5jLTM3NS1cdFx0c2VsLVx1MDAzZWJ1Zl9saXN0ID0gTlVMTDtcbi0tXG5pb191cmluZy9tZW1tYXAuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG5pb191cmluZy9tZW1tYXAuaDoyOiNpZm5kZWYgSU9fVVJJTkdfTUVNTUFQX0hcbmlvX3VyaW5nL21lbW1hcC5oOjM6I2RlZmluZSBJT19VUklOR19NRU1NQVBfSFxuaW9fdXJpbmcvbWVtbWFwLmgtNC1cbi0tXG5pb191cmluZy9tc2dfcmluZy5jPTQwPXN0YXRpYyBpbnQgaW9fbG9ja19leHRlcm5hbF9jdHgoc3RydWN0IGlvX3JpbmdfY3R4ICpvY3R4LFxuLS1cbmlvX3VyaW5nL21zZ19yaW5nLmMtNDctXHQgKi9cbmlvX3VyaW5nL21zZ19yaW5nLmM6NDg6XHRpZiAoIShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkpIHtcbmlvX3VyaW5nL21zZ19yaW5nLmMtNDktXHRcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZvY3R4LVx1MDAzZXVyaW5nX2xvY2spKVxuLS1cbmlvX3VyaW5nL21zZ19yaW5nLmM9MjI4PXN0YXRpYyB2b2lkIGlvX21zZ190d19mZF9jb21wbGV0ZShzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqaGVhZClcbi0tXG5pb191cmluZy9tc2dfcmluZy5jLTIzNC1cdGlmICghKGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX0VYSVRJTkcpKVxuaW9fdXJpbmcvbXNnX3JpbmcuYzoyMzU6XHRcdHJldCA9IGlvX21zZ19pbnN0YWxsX2NvbXBsZXRlKHJlcSwgSU9fVVJJTkdfRl9VTkxPQ0tFRCk7XG5pb191cmluZy9tc2dfcmluZy5jLTIzNi1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuaW9fdXJpbmcvbXNnX3JpbmcuYz0zMzU9aW50IGlvX3VyaW5nX3N5bmNfbXNnX3Jpbmcoc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuLS1cbmlvX3VyaW5nL21zZ19yaW5nLmMtMzU2LVx0cmV0dXJuICBfX2lvX21zZ19yaW5nX2RhdGEoZmRfZmlsZShmKS1cdTAwM2Vwcml2YXRlX2RhdGEsXG5pb191cmluZy9tc2dfcmluZy5jOjM1NzpcdFx0XHRcdCAgIFx1MDAyNmlvX21zZywgSU9fVVJJTkdfRl9VTkxPQ0tFRCk7XG5pb191cmluZy9tc2dfcmluZy5jLTM1OC19XG4tLVxuaW9fdXJpbmcvbmFwaS5jPTIwMT1fX2lvX25hcGlfZG9fYnVzeV9sb29wKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL25hcGkuYy0yMDUtXHRzd2l0Y2ggKFJFQURfT05DRShjdHgtXHUwMDNlbmFwaV90cmFja19tb2RlKSkge1xuaW9fdXJpbmcvbmFwaS5jOjIwNjpcdGNhc2UgSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19TVEFUSUM6XG5pb191cmluZy9uYXBpLmMtMjA3LVx0XHRyZXR1cm4gc3RhdGljX3RyYWNraW5nX2RvX2J1c3lfbG9vcChjdHgsIGxvb3BfZW5kLCBsb29wX2VuZF9hcmcpO1xuaW9fdXJpbmcvbmFwaS5jOjIwODpcdGNhc2UgSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19EWU5BTUlDOlxuaW9fdXJpbmcvbmFwaS5jLTIwOS1cdFx0cmV0dXJuIGR5bmFtaWNfdHJhY2tpbmdfZG9fYnVzeV9sb29wKGN0eCwgbG9vcF9lbmQsIGxvb3BfZW5kX2FyZyk7XG4tLVxuaW9fdXJpbmcvbmFwaS5jPTI0OD12b2lkIGlvX25hcGlfaW5pdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbi0tXG5pb191cmluZy9uYXBpLmMtMjU1LVx0Y3R4LVx1MDAzZW5hcGlfYnVzeV9wb2xsX2R0ID0gbnNfdG9fa3RpbWUoc3lzX2R0KTtcbmlvX3VyaW5nL25hcGkuYzoyNTY6XHRjdHgtXHUwMDNlbmFwaV90cmFja19tb2RlID0gSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19JTkFDVElWRTtcbmlvX3VyaW5nL25hcGkuYy0yNTctfVxuLS1cbmlvX3VyaW5nL25hcGkuYz0yNzc9c3RhdGljIGludCBpb19uYXBpX3JlZ2lzdGVyX25hcGkoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvbmFwaS5jLTI4MC1cdHN3aXRjaCAobmFwaS1cdTAwM2VvcF9wYXJhbSkge1xuaW9fdXJpbmcvbmFwaS5jOjI4MTpcdGNhc2UgSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19EWU5BTUlDOlxuaW9fdXJpbmcvbmFwaS5jOjI4MjpcdGNhc2UgSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19TVEFUSUM6XG5pb191cmluZy9uYXBpLmMtMjgzLVx0XHRicmVhaztcbi0tXG5pb191cmluZy9uYXBpLmMtMjg2LVx0fVxuaW9fdXJpbmcvbmFwaS5jOjI4NzpcdFdSSVRFX09OQ0UoY3R4LVx1MDAzZW5hcGlfdHJhY2tfbW9kZSwgSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19JTkFDVElWRSk7XG5pb191cmluZy9uYXBpLmMtMjg4LVx0aW9fbmFwaV9mcmVlKGN0eCk7XG4tLVxuaW9fdXJpbmcvbmFwaS5jPTMwND1pbnQgaW9fcmVnaXN0ZXJfbmFwaShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5pb191cmluZy9uYXBpLmMtMzIzLVx0c3dpdGNoIChuYXBpLm9wY29kZSkge1xuaW9fdXJpbmcvbmFwaS5jOjMyNDpcdGNhc2UgSU9fVVJJTkdfTkFQSV9SRUdJU1RFUl9PUDpcbmlvX3VyaW5nL25hcGkuYy0zMjUtXHRcdHJldHVybiBpb19uYXBpX3JlZ2lzdGVyX25hcGkoY3R4LCBcdTAwMjZuYXBpKTtcbmlvX3VyaW5nL25hcGkuYzozMjY6XHRjYXNlIElPX1VSSU5HX05BUElfU1RBVElDX0FERF9JRDpcbmlvX3VyaW5nL25hcGkuYzozMjc6XHRcdGlmIChjdXJyLm9wX3BhcmFtICE9IElPX1VSSU5HX05BUElfVFJBQ0tJTkdfU1RBVElDKVxuaW9fdXJpbmcvbmFwaS5jLTMyOC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmlvX3VyaW5nL25hcGkuYy0zMjktXHRcdHJldHVybiBfX2lvX25hcGlfYWRkX2lkKGN0eCwgbmFwaS5vcF9wYXJhbSxcbmlvX3VyaW5nL25hcGkuYzozMzA6XHRcdFx0XHRcdElPX1VSSU5HX05BUElfVFJBQ0tJTkdfU1RBVElDKTtcbmlvX3VyaW5nL25hcGkuYzozMzE6XHRjYXNlIElPX1VSSU5HX05BUElfU1RBVElDX0RFTF9JRDpcbmlvX3VyaW5nL25hcGkuYzozMzI6XHRcdGlmIChjdXJyLm9wX3BhcmFtICE9IElPX1VSSU5HX05BUElfVFJBQ0tJTkdfU1RBVElDKVxuaW9fdXJpbmcvbmFwaS5jLTMzMy1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5pb191cmluZy9uYXBpLmM9MzQ4PWludCBpb191bnJlZ2lzdGVyX25hcGkoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXG4tLVxuaW9fdXJpbmcvbmFwaS5jLTM1Ny1cbmlvX3VyaW5nL25hcGkuYzozNTg6XHRXUklURV9PTkNFKGN0eC1cdTAwM2VuYXBpX3RyYWNrX21vZGUsIElPX1VSSU5HX05BUElfVFJBQ0tJTkdfSU5BQ1RJVkUpO1xuaW9fdXJpbmcvbmFwaS5jLTM1OS1cdFdSSVRFX09OQ0UoY3R4LVx1MDAzZW5hcGlfYnVzeV9wb2xsX2R0LCAwKTtcbi0tXG5pb191cmluZy9uYXBpLmg9NDM9c3RhdGljIGlubGluZSB2b2lkIGlvX25hcGlfYWRkKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuLS1cbmlvX3VyaW5nL25hcGkuaC00Ni1cdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG5pb191cmluZy9uYXBpLmg6NDc6XHR1bnNpZ25lZCBpbnQgbW9kZSA9IElPX1VSSU5HX05BUElfVFJBQ0tJTkdfRFlOQU1JQztcbmlvX3VyaW5nL25hcGkuaC00OC1cbi0tXG5pb191cmluZy9uZXQuYz0xMzc9aW50IGlvX3NodXRkb3duKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTQyLVxuaW9fdXJpbmcvbmV0LmM6MTQzOlx0V0FSTl9PTl9PTkNFKGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKTtcbmlvX3VyaW5nL25ldC5jLTE0NC1cbi0tXG5pb191cmluZy9uZXQuYz0xNjc9c3RhdGljIHZvaWQgaW9fbmV0bXNnX3JlY3ljbGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy0xNzEtXHQvKiBjYW4mIzM5O3QgcmVjeWNsZSwgZW5zdXJlIHdlIGZyZWUgdGhlIGlvdmVjIGlmIHdlIGhhdmUgb25lICovXG5pb191cmluZy9uZXQuYzoxNzI6XHRpZiAodW5saWtlbHkoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfVU5MT0NLRUQpKSB7XG5pb191cmluZy9uZXQuYy0xNzMtXHRcdGlvX25ldG1zZ19pb3ZlY19mcmVlKGhkcik7XG4tLVxuaW9fdXJpbmcvbmV0LmM9NTI5PWludCBpb19zZW5kbXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtNTQ2LVx0ZmxhZ3MgPSBzci1cdTAwM2Vtc2dfZmxhZ3M7XG5pb191cmluZy9uZXQuYzo1NDc6XHRpZiAoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spXG5pb191cmluZy9uZXQuYy01NDgtXHRcdGZsYWdzIHw9IE1TR19ET05UV0FJVDtcbi0tXG5pb191cmluZy9uZXQuYy01NTYtXHRpZiAocmV0IFx1MDAzYyBtaW5fcmV0KSB7XG5pb191cmluZy9uZXQuYzo1NTc6XHRcdGlmIChyZXQgPT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgKGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKSlcbmlvX3VyaW5nL25ldC5jLTU1OC1cdFx0XHRyZXR1cm4gLUVBR0FJTjtcbi0tXG5pb191cmluZy9uZXQuYz02MjY9aW50IGlvX3NlbmQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy02NTMtXHRmbGFncyA9IHNyLVx1MDAzZW1zZ19mbGFncztcbmlvX3VyaW5nL25ldC5jOjY1NDpcdGlmIChpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSylcbmlvX3VyaW5nL25ldC5jLTY1NS1cdFx0ZmxhZ3MgfD0gTVNHX0RPTlRXQUlUO1xuLS1cbmlvX3VyaW5nL25ldC5jLTY3Ni1cdGlmIChyZXQgXHUwMDNjIG1pbl9yZXQpIHtcbmlvX3VyaW5nL25ldC5jOjY3NzpcdFx0aWYgKHJldCA9PSAtRUFHQUlOIFx1MDAyNlx1MDAyNiAoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spKVxuaW9fdXJpbmcvbmV0LmMtNjc4LVx0XHRcdHJldHVybiAtRUFHQUlOO1xuLS1cbmlvX3VyaW5nL25ldC5jPTg1Mz1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtOTIxLVx0XHRcdHNyLVx1MDAzZWZsYWdzIFx1MDAyNj0gfklPUklOR19SRUNWX01TSE9UX0NBUDtcbmlvX3VyaW5nL25ldC5jOjkyMjpcdFx0XHRpZiAoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTVVMVElTSE9UKVxuaW9fdXJpbmcvbmV0LmMtOTIzLVx0XHRcdFx0c2VsLVx1MDAzZXZhbCA9IElPVV9SRVFVRVVFO1xuLS1cbmlvX3VyaW5nL25ldC5jPTEwMjA9aW50IGlvX3JlY3Ztc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy0xMDI3LVx0aW50IHJldCwgbWluX3JldCA9IDA7XG5pb191cmluZy9uZXQuYzoxMDI4Olx0Ym9vbCBmb3JjZV9ub25ibG9jayA9IGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLO1xuaW9fdXJpbmcvbmV0LmMtMTAyOS1cdGJvb2wgbXNob3RfZmluaXNoZWQgPSB0cnVlO1xuLS1cbmlvX3VyaW5nL25ldC5jPTExMDc9c3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTExNy1cdCAqL1xuaW9fdXJpbmcvbmV0LmM6MTExODpcdGlmICghKGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX1VOTE9DS0VEKSBcdTAwMjZcdTAwMjZcbmlvX3VyaW5nL25ldC5jLTExMTktXHQgICAgc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpIHtcbi0tXG5pb191cmluZy9uZXQuYz0xMTc5PWludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTE4Ni1cdGludCByZXQsIG1pbl9yZXQgPSAwO1xuaW9fdXJpbmcvbmV0LmM6MTE4NzpcdGJvb2wgZm9yY2Vfbm9uYmxvY2sgPSBpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSztcbmlvX3VyaW5nL25ldC5jLTExODgtXHRib29sIG1zaG90X2ZpbmlzaGVkO1xuLS1cbmlvX3VyaW5nL25ldC5jPTE1MDA9aW50IGlvX3NlbmRtc2dfemMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy0xNTIzLVx0bXNnX2ZsYWdzID0gc3ItXHUwMDNlbXNnX2ZsYWdzO1xuaW9fdXJpbmcvbmV0LmM6MTUyNDpcdGlmIChpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSylcbmlvX3VyaW5nL25ldC5jLTE1MjUtXHRcdG1zZ19mbGFncyB8PSBNU0dfRE9OVFdBSVQ7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTU0MC1cdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIG1pbl9yZXQpKSB7XG5pb191cmluZy9uZXQuYzoxNTQxOlx0XHRpZiAocmV0ID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IChpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSykpXG5pb191cmluZy9uZXQuYy0xNTQyLVx0XHRcdHJldHVybiAtRUFHQUlOO1xuLS1cbmlvX3VyaW5nL25ldC5jLTE1NjEtXHQgKi9cbmlvX3VyaW5nL25ldC5jOjE1NjI6XHRpZiAoIShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkpIHtcbmlvX3VyaW5nL25ldC5jLTE1NjMtXHRcdGlvX25vdGlmX2ZsdXNoKHNyLVx1MDAzZW5vdGlmKTtcbi0tXG5pb191cmluZy9uZXQuYz0xNjIwPWludCBpb19hY2NlcHQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy0xNjIyLVx0c3RydWN0IGlvX2FjY2VwdCAqYWNjZXB0ID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2FjY2VwdCk7XG5pb191cmluZy9uZXQuYzoxNjIzOlx0Ym9vbCBmb3JjZV9ub25ibG9jayA9IGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLO1xuaW9fdXJpbmcvbmV0LmMtMTYyNC1cdGJvb2wgZml4ZWQgPSAhIWFjY2VwdC1cdTAwM2VmaWxlX3Nsb3Q7XG4tLVxuaW9fdXJpbmcvbmV0LmM9MTc1MT1pbnQgaW9fc29ja2V0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTc2Ny1cdFx0cmV0ID0gUFRSX0VSUihmaWxlKTtcbmlvX3VyaW5nL25ldC5jOjE3Njg6XHRcdGlmIChyZXQgPT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgKGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKSlcbmlvX3VyaW5nL25ldC5jLTE3NjktXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4tLVxuaW9fdXJpbmcvbmV0LmM9MTgwMz1pbnQgaW9fY29ubmVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTE4MDgtXHRpbnQgcmV0O1xuaW9fdXJpbmcvbmV0LmM6MTgwOTpcdGJvb2wgZm9yY2Vfbm9uYmxvY2sgPSBpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSztcbmlvX3VyaW5nL25ldC5jLTE4MTAtXG4tLVxuaW9fdXJpbmcvb3BlbmNsb3NlLmM9MTIzPWludCBpb19vcGVuYXQyKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvb3BlbmNsb3NlLmMtMTM3LVx0cmVzb2x2ZV9ub25ibG9jayA9IG9wZW4tXHUwMDNlaG93LnJlc29sdmUgXHUwMDI2IFJFU09MVkVfQ0FDSEVEO1xuaW9fdXJpbmcvb3BlbmNsb3NlLmM6MTM4Olx0aWYgKGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKSB7XG5pb191cmluZy9vcGVuY2xvc2UuYy0xMzktXHRcdFdBUk5fT05fT05DRShpb19vcGVuYXRfZm9yY2VfYXN5bmMob3BlbikpO1xuLS1cbmlvX3VyaW5nL29wZW5jbG9zZS5jLTE2Mi1cdFx0aWYgKHJldCA9PSAtRUFHQUlOIFx1MDAyNlx1MDAyNiAhcmVzb2x2ZV9ub25ibG9jayBcdTAwMjZcdTAwMjZcbmlvX3VyaW5nL29wZW5jbG9zZS5jOjE2MzpcdFx0ICAgIChpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSykpIHtcbmlvX3VyaW5nL29wZW5jbG9zZS5jLTE2NC1cdFx0XHRyZXQgPSBwdXRuYW1lX3RvX2RlbGF5ZWQoXHUwMDI2b3Blbi1cdTAwM2VmaWxlbmFtZSxcbi0tXG5pb191cmluZy9vcGVuY2xvc2UuYy0xNzEtXG5pb191cmluZy9vcGVuY2xvc2UuYzoxNzI6XHRpZiAoKGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKSBcdTAwMjZcdTAwMjYgIW5vbmJsb2NrX3NldClcbmlvX3VyaW5nL29wZW5jbG9zZS5jLTE3My1cdFx0ZmlsZS1cdTAwM2VmX2ZsYWdzIFx1MDAyNj0gfk9fTk9OQkxPQ0s7XG4tLVxuaW9fdXJpbmcvb3BlbmNsb3NlLmM9MjM2PWludCBpb19jbG9zZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL29wZW5jbG9zZS5jLTI1NS1cdC8qIGlmIHRoZSBmaWxlIGhhcyBhIGZsdXNoIG1ldGhvZCwgYmUgc2FmZSBhbmQgcHVudCB0byBhc3luYyAqL1xuaW9fdXJpbmcvb3BlbmNsb3NlLmM6MjU2Olx0aWYgKGZpbGUtXHUwMDNlZl9vcC1cdTAwM2VmbHVzaCBcdTAwMjZcdTAwMjYgKGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKSkge1xuaW9fdXJpbmcvb3BlbmNsb3NlLmMtMjU3LVx0XHRzcGluX3VubG9jayhcdTAwMjZmaWxlcy1cdTAwM2VmaWxlX2xvY2spO1xuLS1cbmlvX3VyaW5nL3BvbGwuYz01NTM9c3RhdGljIGludCBfX2lvX2FybV9wb2xsX2hhbmRsZXIoc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvcG9sbC5jLTU3Ny1cdCAqL1xuaW9fdXJpbmcvcG9sbC5jOjU3ODpcdGlwdC1cdTAwM2Vvd25pbmcgPSBpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRDtcbmlvX3VyaW5nL3BvbGwuYy01NzktXHRhdG9taWNfc2V0KFx1MDAyNnJlcS1cdTAwM2Vwb2xsX3JlZnMsIChpbnQpaXB0LVx1MDAzZW93bmluZyk7XG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4NjQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIElPX1VSSU5HIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gZXhhY3RseSB3aGVyZSBgQ09ORklHX0lPX1VSSU5HYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUgS2NvbmZpZyBzeXN0ZW0uIFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgaXQmIzM5O3MganVzdCBhIG1hdHRlciBvZiBxdWlja2x5IGdyZXBwaW5nIG9yIG5hdmlnYXRpbmcgdGhlIEtjb25maWcgZmlsZXMgZGlyZWN0bHkuIEtub3dpbmcgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSwgdGhlIGRlcGVuZGVuY3kgc3RydWN0dXJlIHRoYXQgS2NvbmZpZyBsZXZlcmFnZXMsIHRoZSBjb250ZXh0IG9mIHRoZSBzZXR0aW5nIGluIHRoZSBicm9hZGVyIGZpbGUgc3lzdGVtIG9yIG5ldHdvcmtpbmcgc3RhY2suLi4gdGhpcyBpbmZvcm1zIG15IGRlY2lzaW9uIG9uIGEgZ29vZCBzZWFyY2ggc3RyYXRlZ3kgaGVyZS4gSeKAmWxsIHN0YXJ0IGJ5IGRvaW5nIGEgYmFzaWMgc2VhcmNoIHRvIGZpbmQgdGhlIGVudHJ5IHBvaW50LCBvciBhdCBsZWFzdCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlKHMpLiBGcm9tIHRoZXJlLCBJIGNhbiBleGFtaW5lIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBoZWxwIHRleHQsIGFuZCBhbnl0aGluZyBlbHNlIHJlbGV2YW50IHRvIHRoZSBzZXR0aW5nLiBLbm93aW5nIHRoZSBwb3NzaWJsZSBoYXJkd2FyZSBvciBzb2Z0d2FyZSBjb250ZXh0cyB0aGF0IHRyaWdnZXIgdGhpcyBzZXR0aW5nIGlzIHZhbHVhYmxlIHRvIHVuZGVyc3RhbmRpbmcgaXRzIHVzYWdlLCBhbmQgcG90ZW50aWFsIGltcGFjdC4gVGhlbiwgSSBjYW4gcXVpY2tseSBjb25maXJtIGFueSByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHF1aWNrbHkgdW5kZXJzdGFuZCBpdHMgaW50ZW5kZWQgdXNlIGFuZCBhbnkgaW1wbGljYXRpb25zIGl0IGhhcy4gVGhpcyBpbmZvcm1hdGlvbiBpcyBrZXkgaWYgSSYjMzk7bSB0cnlpbmcgdG8sIGZvciBleGFtcGxlLCBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIGZlYXR1cmUsIG9yIGRlYnVnIGEgcmVsYXRlZCBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU9fVVJJTkdcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTk1Mj1jb25maWcgQUlPXG4tLVxuaW5pdC9LY29uZmlnLTE5NTktXG5pbml0L0tjb25maWc6MTk2MDpjb25maWcgSU9fVVJJTkdcbmluaXQvS2NvbmZpZy0xOTYxLVx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIyNgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IGlvX3VyaW5nIGFuZCB0aGUgU2lnbmlmaWNhbmNlIG9mIGEgU2ltcGxlIENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggZm9jdXNlcyBvbiBhIG1vZGlmaWNhdGlvbiB3aXRoaW4gYGlvX2RvX2lvcG9sbGAsIGFuZCBteSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IGhvbmVzIGluIG9uIHRoYXQgbGluZTogYHJlcS0mZ3Q7Y3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS0mZ3Q7Y3FlLnJlcywgMCksIE5VTEwpO2AKClRoZSBxdWVzdGlvbiBwb3BzIHVwIOKAkyB3aHkgdGhlIGNoYW5nZSBmcm9tIGFzc2lnbm1lbnQgKGA9YCkgdG8gYSBiaXR3aXNlIE9SIChgfD1gKT8gSXQmIzM5O3MgZWxlbWVudGFyeSwgcmVhbGx5LiBJZiBgcmVxLSZndDtjcWUuZmxhZ3NgIGFscmVhZHkgY29udGFpbnMgZXhpc3RpbmcgZmxhZ3Mg4oCTIHNheSwgYElPUklOR19DUUVfRl9NT1JFYCwgYnVmZmVyIGZsYWdzLCBvciBvdGhlciBjb21wbGV0aW9uIHF1ZXVlIGVudHJ5IChDUUUpIGZsYWdzIOKAkyBhIHNpbXBsZSBhc3NpZ25tZW50IHdvdWxkIG92ZXJ3cml0ZSB0aG9zZSB2aXRhbCBleGlzdGluZyBmbGFncy4gVXNpbmcgYSBiaXR3aXNlIE9SIGlzIGVzc2VudGlhbCBmb3IgKnByZXNlcnZpbmcqIHRob3NlIHByZS1leGlzdGluZyBmbGFncyB3aGlsZSAqYWRkaW5nKiB0aGUgbmV3IGZsYWdzIHJldHVybmVkIGZyb20gYGlvX3B1dF9rYnVmYC4gT3IsIGlmIGl0IGlzIHRoZSBjYXNlIHRoYXQgYGlvX3B1dF9rYnVmYCBpcyB0aGUgc291cmNlIG9mIHRoZSBmbGFncy4gVGhpcyBpcyBjb3JlIGBpb191cmluZ2AgbG9naWMgZm9yIGhhbmRsaW5nIGNvbXBsZXRpb25zIGR1cmluZyBwb2xsZWQgSS9PIG9wZXJhdGlvbnMgKHRoZSBgSU9SSU5HX1NFVFVQX0lPUE9MTGAgc2V0dGluZykuIFRoaXMgaXMgZGVlcCBpbnNpZGUgdGhlIGtlcm5lbCYjMzk7cyBgaW9fdXJpbmdgIHN1YnN5c3RlbSwgcmVhY2hhYmxlIHRocm91Z2ggdGhlIHVzdWFsIHN1c3BlY3RzIGxpa2UgYGlvX3VyaW5nX3NldHVwYCwgYGlvX3VyaW5nX2VudGVyYCwgYW5kIHNvIG9uLiBBbnkgY2hhbmdlIGhlcmUgZGlyZWN0bHkgYWZmZWN0cyBleGVjdXRhYmxlIGtlcm5lbCBjb2RlLCBzbyBpdCBpcyBoaWdoLXZhbHVlLgoKTm93LCBhcyBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgdGhlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs/IEdpdmVuIG15IGVzdGFibGlzaGVkIGNyaXRlcmlhLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAmIzM0O1llcyYjMzQ7LiBJdCB0aWNrcyBhbGwgdGhlIGJveGVzLiBGaXJzdCwgdGhpcyBpcyBhIG1vZGlmaWNhdGlvbiB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbSDigJMgYGlvX3VyaW5nYC4gVGhlIGxvZ2ljIGNoYW5nZSBpcyBpbiBgaW9fZG9faW9wb2xsYCwgd2hpY2ggaXMgZGlyZWN0bHkgcmVsYXRlZCB0byBJL08gcG9sbGluZyB3aXRoIGBpb191cmluZ2AgdmlhIGBJT1JJTkdfU0VUVVBfSU9QT0xMYCwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUgbW9kZXJuIGtlcm5lbC4gRnV6emluZyB3aXRoIHRvb2xzIGxpa2Ugc3l6a2FsbGVyIHdvdWxkIGFsbG93IGZvciBleHRlbnNpdmUgdGVzdGluZyBvZiBgaW9fdXJpbmdgIHVuZGVyIHZhcmlvdXMgY29uZGl0aW9ucywgaW5jbHVkaW5nIGBJT1BPTExgLCBidWZmZXIgbWFuYWdlbWVudCwgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb25zLgoKRmluYWxseSwgcmVnYXJkaW5nIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgaW52b2x2ZWQsIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBpb19kb19pb3BvbGxgIChkZWZpbmVkIHNvbWV3aGVyZSBhcm91bmQgbGluZSAxMzczIGluIGBpb191cmluZy9ydy5jYCwgSSBiZWxpZXZlIOKAkyBJJiMzOTtsbCB2ZXJpZnkgdGhhdCkgYW5kIGFueSBvdGhlciBmdW5jdGlvbnMgZGlyZWN0bHkgaW50ZXJhY3Rpbmcgd2l0aCBpdC4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGxvZ2ljIGluIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fZG9faW9wb2xsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvX3VyaW5nLmM9MTE2OD1fX2NvbGQgdm9pZCBpb19pb3BvbGxfdHJ5X3JlYXBfZXZlbnRzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTE3NS1cdFx0LyogbGV0IGl0IHNsZWVwIGFuZCByZXBlYXQgbGF0ZXIgaWYgY2FuJiMzOTt0IGNvbXBsZXRlIGEgcmVxdWVzdCAqL1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoxMTc2Olx0XHRpZiAoaW9fZG9faW9wb2xsKGN0eCwgdHJ1ZSkgPT0gMClcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTE3Ny1cdFx0XHRicmVhaztcbi0tXG5pb191cmluZy9pb191cmluZy5jPTExOTU9c3RhdGljIGludCBpb19pb3BvbGxfY2hlY2soc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHVuc2lnbmVkIGludCBtaW5fZXZlbnRzKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTI0OS1cdFx0fVxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxMjUwOlx0XHRyZXQgPSBpb19kb19pb3BvbGwoY3R4LCAhbWluX2V2ZW50cyk7XG5pb191cmluZy9pb191cmluZy5jLTEyNTEtXHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9MTI2Mz12b2lkIGlvX3JlcV90YXNrX2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTI3MC0gKiBBZGRpbmcgdGhlIGtpb2NiIHRvIHRoZSBsaXN0IEFGVEVSIHN1Ym1pc3Npb24gZW5zdXJlcyB0aGF0IHdlIGRvbiYjMzk7dFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxMjcxOiAqIGZpbmQgaXQgZnJvbSBhIGlvX2RvX2lvcG9sbCgpIHRocmVhZCBiZWZvcmUgdGhlIGlzc3VlciBpcyBkb25lXG5pb191cmluZy9pb191cmluZy5jLTEyNzItICogYWNjZXNzaW5nIHRoZSBraW9jYiBjb29raWUuXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaD0yMDI9aW50IGlvX3N1Ym1pdF9zcWVzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBpbnQgbnIpO1xuaW9fdXJpbmcvaW9fdXJpbmcuaDoyMDM6aW50IGlvX2RvX2lvcG9sbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBmb3JjZV9ub25zcGluKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjA0LV9fY29sZCB2b2lkIGlvX2lvcG9sbF90cnlfcmVhcF9ldmVudHMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpO1xuLS1cbmlvX3VyaW5nL3J3LmM9MTI5Nz1zdGF0aWMgaW50IGlvX3VyaW5nX2h5YnJpZF9wb2xsKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuLS1cbmlvX3VyaW5nL3J3LmMtMTMxOC1cbmlvX3VyaW5nL3J3LmM6MTMxOTppbnQgaW9fZG9faW9wb2xsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGZvcmNlX25vbnNwaW4pXG5pb191cmluZy9ydy5jLTEzMjAte1xuLS1cbmlvX3VyaW5nL3NxcG9sbC5jPTIwNT1zdGF0aWMgaW50IF9faW9fc3FfdGhyZWFkKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fc3FfZGF0YSAqc3FkLFxuLS1cbmlvX3VyaW5nL3NxcG9sbC5jLTIyNS1cdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmN0eC1cdTAwM2Vpb3BvbGxfbGlzdCkpXG5pb191cmluZy9zcXBvbGwuYzoyMjY6XHRcdFx0aW9fZG9faW9wb2xsKGN0eCwgdHJ1ZSk7XG5pb191cmluZy9zcXBvbGwuYy0yMjctXG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmM9MTUyPXZvaWQgX19pb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsIHMzMiByZXQsIHU2NCByZXMyLFxuLS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTE3Mi1cdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0lPUE9MTCkge1xuaW9fdXJpbmcvdXJpbmdfY21kLmM6MTczOlx0XHQvKiBvcmRlciB3aXRoIGlvX2RvX2lvcG9sbCgpIGNoZWNraW5nIC1cdTAwM2Vpb3BvbGxfY29tcGxldGVkICovXG5pb191cmluZy91cmluZ19jbWQuYy0xNzQtXHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnJlcS1cdTAwM2Vpb3BvbGxfY29tcGxldGVkLCAxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMjQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJuYWwgd29ya2luZ3Mgb2YgdGhpcyBhc3luY2hyb25vdXMgSS9PIGltcGxlbWVudGF0aW9uLiBGaXJzdCwgSSB3YW50IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdywgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvcmUgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoZSBJL08gcG9sbGluZyBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBgaW9faW9wb2xsX2NoZWNrYCwgYW5kIGBpb19kb19pb3BvbGxgIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gbW9uaXRvcnMgZm9yIGNvbXBsZXRlZCBJL08gb3BlcmF0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBJL08gbWVjaGFuaXNtIGlzIGFjdHVhbGx5IHRyaWdnZXJlZC4KCkFmdGVyIHVuZGVyc3RhbmRpbmcgdGhlIHBvbGxpbmcgbWVjaGFuaXNtLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgZ2V0cyBwdXQgaW50byB0aGUgaW9fdXJpbmcgc3lzdGVtLiBTbyBuZXh0LCBsZXQmIzM5O3Mgc2VlIGhvdyBgaW9fcHV0X2tidWZgIGludGVncmF0ZXMgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZSB0byBnZXQgdGhlIGRhdGEgd2hlcmUgaXQgbmVlZHMgdG8gZ28gd2l0aGluIHRoZSBpb191cmluZyByaW5nIGJ1ZmZlci4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgZGF0YSBmbG93cyB0aHJvdWdoIHRoZSBJL08gc3lzdGVtIGZyb20gdGhlIGFwcGxpY2F0aW9uLCB0aHJvdWdoIGtlcm5lbCBzdHJ1Y3R1cmVzLCBhbmQgYmFjayB0byB0aGUgYXBwbGljYXRpb24uIEkgYWxzbyBuZWVkIHRvIGNoZWNrIHRoaXMgZnVuY3Rpb24gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaXNzdWVzIHdoaWNoIGNvdWxkIGFmZmVjdCBwZXJmb3JtYW5jZSBvciBzZWN1cml0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fcHV0X2tidWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW9fdXJpbmcuYz05NDg9dm9pZCBpb19yZXFfZGVmZXJfZmFpbGVkKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzMzIgcmVzKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTU1LVx0cmVxX3NldF9mYWlsKHJlcSk7XG5pb191cmluZy9pb191cmluZy5jOjk1NjpcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmVzLCBpb19wdXRfa2J1ZihyZXEsIHJlcywgTlVMTCkpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy05NTctXHRpZiAoZGVmLVx1MDAzZWZhaWwpXG4tLVxuaW9fdXJpbmcva2J1Zi5jPTM4MT1pbnQgaW9fYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbi0tXG5pb191cmluZy9rYnVmLmMtNDA2LVxuaW9fdXJpbmcva2J1Zi5jOjQwNzpzdGF0aWMgaW5saW5lIGJvb2wgX19pb19wdXRfa2J1Zl9yaW5nKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcva2J1Zi5jLTQwOC1cdFx0XHRcdCAgICAgIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsIGludCBsZW4sIGludCBucilcbi0tXG5pb191cmluZy9rYnVmLmMtNDIwLVxuaW9fdXJpbmcva2J1Zi5jOjQyMTp1bnNpZ25lZCBpbnQgX19pb19wdXRfa2J1ZnMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXG5pb191cmluZy9rYnVmLmMtNDIyLVx0XHRcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTQzMi1cbmlvX3VyaW5nL2tidWYuYzo0MzM6XHRpZiAoIV9faW9fcHV0X2tidWZfcmluZyhyZXEsIGJsLCBsZW4sIG5idWZzKSlcbmlvX3VyaW5nL2tidWYuYy00MzQtXHRcdHJldCB8PSBJT1JJTkdfQ1FFX0ZfQlVGX01PUkU7XG4tLVxuaW9fdXJpbmcva2J1Zi5oPTg3PXZvaWQgaW9fa2J1Zl9kcm9wX2xlZ2FjeShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSk7XG5pb191cmluZy9rYnVmLmgtODgtXG5pb191cmluZy9rYnVmLmg6ODk6dW5zaWduZWQgaW50IF9faW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxuaW9fdXJpbmcva2J1Zi5oLTkwLVx0XHRcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpO1xuLS1cbmlvX3VyaW5nL2tidWYuaD0xMTQ9c3RhdGljIGlubGluZSBib29sIGlvX2tidWZfcmVjeWNsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbi0tXG5pb191cmluZy9rYnVmLmgtMTI1LVxuaW9fdXJpbmcva2J1Zi5oOjEyNjpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb19wdXRfa2J1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IGxlbixcbmlvX3VyaW5nL2tidWYuaC0xMjctXHRcdFx0XHQgICAgICAgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibClcbi0tXG5pb191cmluZy9rYnVmLmgtMTMwLVx0XHRyZXR1cm4gMDtcbmlvX3VyaW5nL2tidWYuaDoxMzE6XHRyZXR1cm4gX19pb19wdXRfa2J1ZnMocmVxLCBibCwgbGVuLCAxKTtcbmlvX3VyaW5nL2tidWYuaC0xMzItfVxuaW9fdXJpbmcva2J1Zi5oLTEzMy1cbmlvX3VyaW5nL2tidWYuaDoxMzQ6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgbGVuLFxuaW9fdXJpbmcva2J1Zi5oLTEzNS1cdFx0XHRcdFx0c3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCwgaW50IG5idWZzKVxuLS1cbmlvX3VyaW5nL2tidWYuaC0xMzgtXHRcdHJldHVybiAwO1xuaW9fdXJpbmcva2J1Zi5oOjEzOTpcdHJldHVybiBfX2lvX3B1dF9rYnVmcyhyZXEsIGJsLCBsZW4sIG5idWZzKTtcbmlvX3VyaW5nL2tidWYuaC0xNDAtfVxuLS1cbmlvX3VyaW5nL25ldC5jPTQ5MT1zdGF0aWMgaW5saW5lIGJvb2wgaW9fc2VuZF9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtNDk5LVx0aWYgKCEoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpKSB7XG5pb191cmluZy9uZXQuYzo1MDA6XHRcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgc2VsLVx1MDAzZXZhbCwgc2VsLVx1MDAzZWJ1Zl9saXN0KTtcbmlvX3VyaW5nL25ldC5jLTUwMS1cdFx0Z290byBmaW5pc2g7XG4tLVxuaW9fdXJpbmcvbmV0LmMtNTAzLVxuaW9fdXJpbmcvbmV0LmM6NTA0Olx0Y2ZsYWdzID0gaW9fcHV0X2tidWZzKHJlcSwgc2VsLVx1MDAzZXZhbCwgc2VsLVx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLVx1MDAzZXZhbCkpO1xuaW9fdXJpbmcvbmV0LmMtNTA1LVxuLS1cbmlvX3VyaW5nL25ldC5jPTg1Mz1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtODc5LVxuaW9fdXJpbmcvbmV0LmM6ODgwOlx0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHRoaXNfcmV0KSk7XG5pb191cmluZy9uZXQuYy04ODEtXHRcdGlmIChzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfUkVUUlkpXG4tLVxuaW9fdXJpbmcvbmV0LmMtOTAxLVx0fSBlbHNlIHtcbmlvX3VyaW5nL25ldC5jOjkwMjpcdFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgc2VsLVx1MDAzZXZhbCwgc2VsLVx1MDAzZWJ1Zl9saXN0KTtcbmlvX3VyaW5nL25ldC5jLTkwMy1cdH1cbi0tXG5pb191cmluZy9ydy5jPTU2Mj12b2lkIGlvX3JlcV9yd19jb21wbGV0ZShzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbi0tXG5pb191cmluZy9ydy5jLTU2OC1cdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IChSRVFfRl9CVUZGRVJfU0VMRUNURUR8UkVRX0ZfQlVGRkVSX1JJTkcpKVxuaW9fdXJpbmcvcncuYzo1Njk6XHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLVx1MDAzZWNxZS5yZXMsIDApLCBOVUxMKTtcbmlvX3VyaW5nL3J3LmMtNTcwLVxuLS1cbmlvX3VyaW5nL3J3LmM9NjQwPXN0YXRpYyBpbnQga2lvY2JfZG9uZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3NpemVfdCByZXQsXG4tLVxuaW9fdXJpbmcvcncuYy02NTctXHRcdGlmIChzZWwpXG5pb191cmluZy9ydy5jOjY1ODpcdFx0XHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHJldCwgc2VsLVx1MDAzZWJ1Zl9saXN0KTtcbmlvX3VyaW5nL3J3LmMtNjU5LVx0XHRpb19yZXFfc2V0X3JlcyhyZXEsIGZpbmFsX3JldCwgY2ZsYWdzKTtcbi0tXG5pb191cmluZy9ydy5jPTEwMzI9aW50IGlvX3JlYWRfbXNob3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9ydy5jLTEwNjctXHR9IGVsc2UgaWYgKCEocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9BUE9MTF9NVUxUSVNIT1QpKSB7XG5pb191cmluZy9ydy5jOjEwNjg6XHRcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgcmV0LCBzZWwuYnVmX2xpc3QpO1xuaW9fdXJpbmcvcncuYy0xMDY5LVx0fSBlbHNlIHtcbi0tXG5pb191cmluZy9ydy5jLTEwNzUtXHRcdCAqL1xuaW9fdXJpbmcvcncuYzoxMDc2Olx0XHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHJldCwgc2VsLmJ1Zl9saXN0KTtcbmlvX3VyaW5nL3J3LmMtMTA3Ny1cdFx0cnctXHUwMDNlbGVuID0gMDsgLyogc2ltaWxhcmx5IHRvIGFib3ZlLCByZXNldCBsZW4gdG8gMCAqL1xuLS1cbmlvX3VyaW5nL3J3LmM9MTMxOT1pbnQgaW9fZG9faW9wb2xsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGZvcmNlX25vbnNwaW4pXG4tLVxuaW9fdXJpbmcvcncuYy0xMzc1LVx0XHRucl9ldmVudHMmIzQzOyYjNDM7O1xuaW9fdXJpbmcvcncuYzoxMzc2Olx0XHRyZXEtXHUwMDNlY3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS1cdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XG5pb191cmluZy9ydy5jLTEzNzctXHRcdGlmICghaW9faXNfdXJpbmdfY21kKHJlcSkpXG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmM9Mzg3PWJvb2wgaW9fdXJpbmdfbXNob3RfY21kX3Bvc3RfY3FlKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbi0tXG5pb191cmluZy91cmluZ19jbWQuYy0zOTYtXHRpZiAoc2VsLVx1MDAzZXZhbCBcdTAwM2UgMCkge1xuaW9fdXJpbmcvdXJpbmdfY21kLmM6Mzk3Olx0XHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHNlbC1cdTAwM2V2YWwsIHNlbC1cdTAwM2VidWZfbGlzdCk7XG5pb191cmluZy91cmluZ19jbWQuYy0zOTgtXHRcdGlmIChpb19yZXFfcG9zdF9jcWUocmVxLCBzZWwtXHUwMDNldmFsLCBjZmxhZ3MgfCBJT1JJTkdfQ1FFX0ZfTU9SRSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTUxCgkJCQkJCQlvdXRwdXQ6IDEyMgoJCQkJCQkJdGhvdWdodHM6IDMxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBgaW9fcmVxX3J3X2NvbXBsZXRlYCBhbmQgYGlvX2RvX2lvcG9sbGAgRmxhZyBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIGhvdyB0aGUgYHJlcS0mZ3Q7Y3FlLmZsYWdzYCBmaWVsZCBpcyBiZWluZyBtYW5hZ2VkLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGNvbXBsZXRpb24gaGFuZGxpbmcuIEluIGBpb19yZXFfcndfY29tcGxldGVgLCB3ZSBoYXZlOgoKYHJlcS0mZ3Q7Y3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS0mZ3Q7Y3FlLnJlcywgMCksIE5VTEwpO2AKCndoaWNoIGlzIHVzaW5nIGEgYml0d2lzZSBPUiB0byBzZXQgdGhlIGZsYWdzIGFmdGVyIGEgcmVhZC93cml0ZSBvcGVyYXRpb24uIEJ1dCBJJiMzOTt2ZSBnb3QgYSBmbGFnLXNldHRpbmcgc2l0dWF0aW9uIGdvaW5nIG9uIGluIGBpb19kb19pb3BvbGxgLCBhbmQgdGhlcmU6CgpgcmVxLSZndDtjcWUuZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtJmd0O2NxZS5yZXMsIDApLCBOVUxMKTtgCgpUaGF0JiMzOTtzIGFuIGFzc2lnbm1lbnQsIG1lYW5pbmcgYGlvX2RvX2lvcG9sbGAgaXMgY2xvYmJlcmluZyB3aGF0ZXZlciB3YXMgcHJldmlvdXNseSBpbiBgcmVxLSZndDtjcWUuZmxhZ3NgLiBUaGF0JiMzOTtzIGJhZC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gYW5kIGl0IGNhbiBjYXVzZSBzb21lIHByZXR0eSBuYXN0eSBidWdzIGlmIHRoZSB2YWx1ZXMgYXJlIG5vdCBzZXQgY29ycmVjdGx5LiBUaGUgYml0d2lzZSBvciBpbiBgaW9fcmVxX3J3X2NvbXBsZXRlYCBtYWtlcyBzZW5zZTsgdXNpbmcgYW4gYXNzaWdubWVudCBpbiBgaW9fZG9faW9wb2xsYCBkb2VzbiYjMzk7dC4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHJlbGV2YW50IGJpdHMgb2YgdGhpcyBpbnZlc3RpZ2F0aW9uLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgZm9jdXMgc3ltYm9scy4gYGlvX2RvX2lvcG9sbGAgaXMgZGVmaW5pdGVseSB0aGUgbW9kaWZpZWQgZnVuY3Rpb24sIGFuZCBpdCBsb29rcyBsaWtlIGBpb19pb3BvbGxfY2hlY2tgIGNhbGxzIGl0IGFuZCB0aGVuIGBfX2lvX3B1dF9rYnVmc2AgaXMgY2FsbGVkIGJ5IGBpb19wdXRfa2J1ZmAuCgpPa2F5LCBuZXh0IEkmIzM5O2xsIGNoZWNrIHRoZSBFbmFibGVDb25maWdzLiBUaGUgcmVsZXZhbnQgY29uZmlnIGZsYWcgaXMgYElPX1VSSU5HYCwgc28gd2UgYXJlIGRlYWxpbmcgd2l0aCBhIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBpb191cmluZy4KCk5vdywgbGV0IG1lIHJldmlldyBldmVyeXRoaW5nLiBBY2NvcmRpbmcgdG8gdGhlIGNoZWNrbGlzdCBwcm92aWRlZCwgdGhlIHZlcmRpY3Qgc2hvdWxkIGJlIGBXb3J0aEZ1enppbmc6IHRydWVgLCB0aGUgcmVhc29uaW5nIG5lZWRzIHRvIGJlIGNvbmNpc2UgKHBvdGVudGlhbCBmbGFnIGNsb2JiZXJpbmcpLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBgWyYjMzQ7SU9fVVJJTkcmIzM0O11gLCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBgWyYjMzQ7aW9fZG9faW9wb2xsJiMzNDssICYjMzQ7aW9faW9wb2xsX2NoZWNrJiMzNDtdYCBvciBwb3RlbnRpYWxseSBqdXN0IGBbJiMzNDtpb19kb19pb3BvbGwmIzM0O11gLgoKQWxyaWdodCwgSSYjMzk7bSBjb21mb3J0YWJsZSB3aXRoIGFsbCBvZiB0aGF0LiBUaGUgYXJndW1lbnRzIGZvciBgc2V0LXJlc3VsdHNgIGFyZSBhbHNvIGNvcnJlY3Q6IGEgYm9vbGVhbiBmb3IgZnV6emluZywgYSBzdHJpbmcgZm9yIHRoZSByZWFzb25pbmcsIGFuIGFycmF5IG9mIHN0cmluZ3MgZm9yIHRoZSBjb25maWcsIGFuZCBhbiBhcnJheSBvZiBzdHJpbmdzIGZvciB0aGUgc3ltYm9scy4KCkFsbCBzZXQsIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX2RvX2lvcG9sbCYjMzQ7LAogICAgJiMzNDtpb19pb3BvbGxfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW9fZG9faW9wb2xsKCkgdG8gYml0d2lzZS1PUiB0aGUgZmxhZ3MgcmV0dXJuZWQgYnkgaW9fcHV0X2tidWYoKSBpbnRvIHJlcS1cdTAwM2VjcWUuZmxhZ3MgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyB0aGVtLCBwcmV2ZW50aW5nIHRoZSBsb3NzIG9mIGV4aXN0aW5nIENRRSBmbGFncyBkdXJpbmcgcG9sbGVkIEkvTyBjb21wbGV0aW9uLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgaW9fdXJpbmcgY29tcGxldGlvbiBsb2dpYywgd2FycmFudGluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX2RvX2lvcG9sbCYjMzQ7LAogICAgJiMzNDtpb19pb3BvbGxfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW9fZG9faW9wb2xsKCkgdG8gYml0d2lzZS1PUiB0aGUgZmxhZ3MgcmV0dXJuZWQgYnkgaW9fcHV0X2tidWYoKSBpbnRvIHJlcS1cdTAwM2VjcWUuZmxhZ3MgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyB0aGVtLCBwcmV2ZW50aW5nIHRoZSBsb3NzIG9mIGV4aXN0aW5nIENRRSBmbGFncyBkdXJpbmcgcG9sbGVkIEkvTyBjb21wbGV0aW9uLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgaW9fdXJpbmcgY29tcGxldGlvbiBsb2dpYywgd2FycmFudGluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGlvX2RvX2lvcG9sbCgpYCBpbiBgaW9fdXJpbmcvcncuY2AgYnkgY2hhbmdpbmcgYHJlcS1cdTAwM2VjcWUuZmxhZ3MgPSBpb19wdXRfa2J1ZiguLi4pYCB0byBgcmVxLVx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZiguLi4pYC4gVGhpcyBpcyBhIG9uZS1saW5lIGxvZ2ljYWwgZml4IGVuc3VyaW5nIHRoYXQgZmxhZ3MgYWxyZWFkeSBzZXQgb24gYHJlcS1cdTAwM2VjcWUuZmxhZ3NgIChzdWNoIGFzIGBJT1JJTkdfQ1FFX0ZfMzJgKSBhcmUgcHJlc2VydmVkIHdoZW4gYXBwZW5kaW5nIGNvbXBsZXRpb24gZmxhZ3MgZm9yIHByb3ZpZGVkIGJ1ZmZlciByZWxlYXNlIGR1cmluZyBJTyBwb2xsaW5nLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kYXJ5IGNhbGN1bGF0aW9ucyBpbiB3YXlzIHRoYXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIGRvZXMgbm90IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIGdlbmVyYWwgdGVzdGluZyBzdWZmaWNlIGZvciB2ZXJpZnlpbmcgaW9fdXJpbmcgcmVxdWVzdCBsaWZlY3ljbGUgY29ycmVjdG5lc3MsIGFuZCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZGMxZmJjOTExNDUxZjJlOTdmN2IwNDdhNWM3ZTkxOTJiMGU5NWEzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAyMDoyNTo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3J3LmMgYi9pb191cmluZy9ydy5jCmluZGV4IDk1MTA2ZGQxZDdlYjkuLmYyYmJiMGIxYzMwYTEgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3J3LmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvcncuYwpAQCAtMTM3Myw3ICYjNDM7MTM3Myw3IEBAIGludCBpb19kb19pb3BvbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgZm9yY2Vfbm9uc3BpbikKIAkJbGlzdF9kZWwoJmFtcDtyZXEtJmd0O2lvcG9sbF9ub2RlKTsKIAkJd3FfbGlzdF9hZGRfdGFpbCgmYW1wO3JlcS0mZ3Q7Y29tcF9saXN0LCAmYW1wO2N0eC0mZ3Q7c3VibWl0X3N0YXRlLmNvbXBsX3JlcXMpOwogCQlucl9ldmVudHMmIzQzOyYjNDM7OwotCQlyZXEtJmd0O2NxZS5mbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS0mZ3Q7Y3FlLnJlcywgMCksIE5VTEwpOwomIzQzOwkJcmVxLSZndDtjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLSZndDtjcWUucmVzLCAwKSwgTlVMTCk7CiAJCWlmICghaW9faXNfdXJpbmdfY21kKHJlcSkpCiAJCQlpb19yZXFfcndfY2xlYW51cChyZXEsIDApOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBicmVhayBkb3duIHRoZSBjaGFuZ2VzIGxpbmUgYnkgbGluZSwgZm9jdXNpbmcgb24gdGhlaXIgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBjb250ZXh0LiBMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBzZWVtcyB0aGUgY29yZSBjaGFuZ2UgaXMgd2l0aGluIGBpb19kb19pb3BvbGxgIGFuZCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBgcmVxLSZndDtjcWUuZmxhZ3NgIGlzIGhhbmRsZWQgaW4gcmVsYXRpb24gdG8gYGlvX3B1dF9rYnVmYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVyYWN0LgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGF0JiMzOTtzIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhlIGB8PWAgb3BlcmF0b3IgaGVyZSwgYW5kIHdoeSB3YXMgaXQgY2hhbmdlZCBmcm9tIGEgc2ltcGxlIGFzc2lnbm1lbnQgYD1gPyBDbGVhcmx5LCB0aGUgb3JpZ2luYWwgY29kZSBhc3N1bWVkIGV4Y2x1c2l2ZSBjb250cm9sIG92ZXIgdGhvc2UgZmxhZ3MuIFRoZSBjaGFuZ2UgdG8gYHw9YCBpbXBsaWVzIHRoYXQgdGhlcmUgbWF5IGhhdmUgYmVlbiBvdGhlciBmbGFncyBhbHJlYWR5IHNldCB0aGF0IHdlIG5vdyBpbnRlbmQgdG8gKnByZXNlcnZlKi4gQnV0IHdoYXQgYXJlIHRoZXNlIG90aGVyIGZsYWdzPyBXaGF0IGRvZXMgYGlvX3B1dF9rYnVmYCBjb250cmlidXRlLCBhbmQgaXMgdGhpcyBjaGFuZ2UgcmVsYXRlZCB0byBidWZmZXIgbWFuYWdlbWVudCBvciBjb21wbGV0aW9uIHNpZ25hbGluZz8KCkkmIzM5O2xsIG5lZWQgdG8gZ28gZGVlcGVyLiBUaW1lIHRvIHB1bGwgdXAgYGlvX2RvX2lvcG9sbGAgYW5kIGBpb19wdXRfa2J1ZmAgdXNpbmcgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCBzZWUgd2hhdCB0aGUgZmxhZyBmaWVsZCBpcyB1c2VkIGZvciBhbmQgaWYgdGhlIGNoYW5nZSBoYXMgaW1wbGljYXRpb25zIGZvciBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIGhhdmUgdG8gbG9vayBpbnRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdyB0aGF0IGJvdGggb2YgdGhvc2UgZnVuY3Rpb25zIHVzZSB0byBzZWUgd2hhdCB0aGUgc3RhdGUgb2YgZmxhZ3MgbWlnaHQgYmUgcHJpb3IgdG8gdGhpcyBvcGVyYXRpb24uIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IGNvbXBsZXRpb24gcXVldWVzIGFyZSB1cGRhdGVkIGFuZCBob3cgdGhlIHN5c3RlbSBzaWduYWxzIGV2ZW50cyB0byB1c2VyIHNwYWNlLiBVbmRlcnN0YW5kaW5nIHRoZSBwb3NzaWJsZSBmbGFnIGNvbWJpbmF0aW9ucyBoZXJlIGlzIHRoZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvcncuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM1MDpcdFx0XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfSFlCUklEX0lPUE9MTClcbjEzNTE6XHRcdFx0XHRyZXQgPSBpb191cmluZ19oeWJyaWRfcG9sbChyZXEsIFx1MDAyNmlvYiwgcG9sbF9mbGFncyk7XG4xMzUyOlx0XHRcdGVsc2VcbjEzNTM6XHRcdFx0XHRyZXQgPSBpb191cmluZ19jbGFzc2ljX3BvbGwocmVxLCBcdTAwMjZpb2IsIHBvbGxfZmxhZ3MpO1xuMTM1NDpcdFxuMTM1NTpcdFx0XHRpZiAodW5saWtlbHkocmV0IFx1MDAzYyAwKSlcbjEzNTY6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTM1NzpcdFx0XHRlbHNlIGlmIChyZXQpXG4xMzU4Olx0XHRcdFx0cG9sbF9mbGFncyB8PSBCTEtfUE9MTF9PTkVTSE9UO1xuMTM1OTpcdFxuMTM2MDpcdFx0XHQvKiBpb3BvbGwgbWF5IGhhdmUgY29tcGxldGVkIGN1cnJlbnQgcmVxICovXG4xMzYxOlx0XHRcdGlmICghcnFfbGlzdF9lbXB0eShcdTAwMjZpb2IucmVxX2xpc3QpIHx8XG4xMzYyOlx0XHRcdCAgICBSRUFEX09OQ0UocmVxLVx1MDAzZWlvcG9sbF9jb21wbGV0ZWQpKVxuMTM2MzpcdFx0XHRcdGJyZWFrO1xuMTM2NDpcdFx0fVxuMTM2NTpcdFxuMTM2NjpcdFx0aWYgKCFycV9saXN0X2VtcHR5KFx1MDAyNmlvYi5yZXFfbGlzdCkpXG4xMzY3Olx0XHRcdGlvYi5jb21wbGV0ZShcdTAwMjZpb2IpO1xuMTM2ODpcdFxuMTM2OTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgdG1wLCBcdTAwMjZjdHgtXHUwMDNlaW9wb2xsX2xpc3QsIGlvcG9sbF9ub2RlKSB7XG4xMzcwOlx0XHRcdC8qIG9yZGVyIHdpdGggaW9fY29tcGxldGVfcndfaW9wb2xsKCksIGUuZy4gLVx1MDAzZXJlc3VsdCB1cGRhdGVzICovXG4xMzcxOlx0XHRcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZyZXEtXHUwMDNlaW9wb2xsX2NvbXBsZXRlZCkpXG4xMzcyOlx0XHRcdFx0Y29udGludWU7XG4xMzczOlx0XHRcdGxpc3RfZGVsKFx1MDAyNnJlcS1cdTAwM2Vpb3BvbGxfbm9kZSk7XG4xMzc0Olx0XHRcdHdxX2xpc3RfYWRkX3RhaWwoXHUwMDI2cmVxLVx1MDAzZWNvbXBfbGlzdCwgXHUwMDI2Y3R4LVx1MDAzZXN1Ym1pdF9zdGF0ZS5jb21wbF9yZXFzKTtcbjEzNzU6XHRcdFx0bnJfZXZlbnRzJiM0MzsmIzQzOztcbjEzNzY6XHRcdFx0cmVxLVx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO1xuMTM3NzpcdFx0XHRpZiAoIWlvX2lzX3VyaW5nX2NtZChyZXEpKVxuMTM3ODpcdFx0XHRcdGlvX3JlcV9yd19jbGVhbnVwKHJlcSwgMCk7XG4xMzc5Olx0XHR9XG4xMzgwOlx0XHRpZiAobnJfZXZlbnRzKVxuMTM4MTpcdFx0XHRfX2lvX3N1Ym1pdF9mbHVzaF9jb21wbGV0aW9ucyhjdHgpO1xuMTM4MjpcdFx0cmV0dXJuIG5yX2V2ZW50cztcbjEzODM6XHR9XG4xMzg0Olx0XG4xMzg1Olx0dm9pZCBpb19yd19jYWNoZV9mcmVlKGNvbnN0IHZvaWQgKmVudHJ5KVxuMTM4NjpcdHtcbjEzODc6XHRcdHN0cnVjdCBpb19hc3luY19ydyAqcncgPSAoc3RydWN0IGlvX2FzeW5jX3J3ICopIGVudHJ5O1xuMTM4ODpcdFxuMTM4OTpcdFx0aW9fdmVjX2ZyZWUoXHUwMDI2cnctXHUwMDNldmVjKTtcbjEzOTA6XHRcdGtmcmVlKHJ3KTtcbjEzOTE6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MzEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipEaXZpbmcgRGVlcCBpbnRvIENvbXBsZXRpb24gUXVldWUgRW50cmllcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2UgdGhlIGxpZmVjeWNsZSBvZiBgcmVxLSZndDtjcWVgLiBJdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBJL08gb3BlcmF0aW9ucyBhcmUgY29tcGxldGVkIGFuZCBoYW5kbGVkLCBlc3BlY2lhbGx5IGluIGFzeW5jaHJvbm91cyBzY2VuYXJpb3MuIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIHRoZSBgcndgIGNvbW1hbmQsIGJ1dCBJIHNob3VsZCBhbHNvIGtlZXAgYW4gZXllIG91dCBmb3Igb3RoZXIgaW9wb2xsLWJhc2VkIGNvbW1hbmRzLCBqdXN0IGluIGNhc2UuIFRoZXkgbWlnaHQgc2hhcmUgc29tZSBvZiB0aGUgc2FtZSBtZWNoYW5pc21zLgoKTXkgaW5pdGlhbCBhcHByb2FjaCB3aWxsIGJlIHRvIHBpbnBvaW50IHdoZXJlIGByZXEtJmd0O2NxZWAgaXMgKmZpcnN0KiBpbml0aWFsaXplZC4gVGhpcyB3aWxsIGxpa2VseSBzaGVkIGxpZ2h0IG9uIHRoZSBpbml0aWFsIGNvbnRleHQgYW5kIGV4cGVjdGVkIHVzZS4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgdHJhY2sgaXRzIGpvdXJuZXkgdGhyb3VnaCB0aGUgc3lzdGVtLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcGF0aCB0aGUgY29udHJvbCBmbG93IHRha2VzIHRocm91Z2ggdGhlIHByb2dyYW0uCgpJJiMzOTtsbCBzdGFydCBieSBzZWFyY2hpbmcgZm9yIGtleSBmdW5jdGlvbiBuYW1lczogYGlvcG9sbGAsIGBpb19jb21wbGV0ZV9yd19pb3BvbGxgLCBhbmQgYGlvX3B1dF9rYnVmYC4gVGhlc2UgZnVuY3Rpb25zIHNvdW5kIGxpa2UgbGlrZWx5IGNhbmRpZGF0ZXMgaW52b2x2ZWQgaW4gbWFuYWdpbmcgdGhlIGNvbXBsZXRpb24gcXVldWUgZW50cmllcyBhbmQgaGFuZGxpbmcgdGhlaXIgZGF0YS4gVGhlIHJlc3VsdHMgc2hvdWxkIHByb3ZpZGUgbWUgd2l0aCBhbiBpbml0aWFsIG1hcCBvZiByZWxhdGVkIGZ1bmN0aW9ucy4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgbGVhZCBtZSB0byB0aGUgcmlnaHQgcGxhY2UgYW5kIGFsbG93IG1lIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVudHJpZXMgYXJlIG1hbmlwdWxhdGVkIGFuZCBldmVudHVhbGx5IHJlbGVhc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19jb21wbGV0ZV9yd19pb3BvbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9ydy5jPTI2PXN0YXRpYyB2b2lkIGlvX2NvbXBsZXRlX3J3KHN0cnVjdCBraW9jYiAqa2lvY2IsIGxvbmcgcmVzKTtcbmlvX3VyaW5nL3J3LmM6Mjc6c3RhdGljIHZvaWQgaW9fY29tcGxldGVfcndfaW9wb2xsKHN0cnVjdCBraW9jYiAqa2lvY2IsIGxvbmcgcmVzKTtcbmlvX3VyaW5nL3J3LmMtMjgtXG4tLVxuaW9fdXJpbmcvcncuYz0yNDU9c3RhdGljIGludCBfX2lvX3ByZXBfcncoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSxcbi0tXG5pb191cmluZy9ydy5jLTI3Ni1cdGlmIChyZXEtXHUwMDNlY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfSU9QT0xMKVxuaW9fdXJpbmcvcncuYzoyNzc6XHRcdHJ3LVx1MDAzZWtpb2NiLmtpX2NvbXBsZXRlID0gaW9fY29tcGxldGVfcndfaW9wb2xsO1xuaW9fdXJpbmcvcncuYy0yNzgtXHRlbHNlXG4tLVxuaW9fdXJpbmcvcncuYz01NzU9c3RhdGljIHZvaWQgaW9fY29tcGxldGVfcncoc3RydWN0IGtpb2NiICpraW9jYiwgbG9uZyByZXMpXG4tLVxuaW9fdXJpbmcvcncuYy01ODUtXG5pb191cmluZy9ydy5jOjU4NjpzdGF0aWMgdm9pZCBpb19jb21wbGV0ZV9yd19pb3BvbGwoc3RydWN0IGtpb2NiICpraW9jYiwgbG9uZyByZXMpXG5pb191cmluZy9ydy5jLTU4Ny17XG4tLVxuaW9fdXJpbmcvcncuYz02MjI9c3RhdGljIGlubGluZSB2b2lkIGlvX3J3X2RvbmUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHNzaXplX3QgcmV0KVxuLS1cbmlvX3VyaW5nL3J3LmMtNjM0LVx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfSU9QT0xMKVxuaW9fdXJpbmcvcncuYzo2MzU6XHRcdGlvX2NvbXBsZXRlX3J3X2lvcG9sbChcdTAwMjZydy1cdTAwM2VraW9jYiwgcmV0KTtcbmlvX3VyaW5nL3J3LmMtNjM2LVx0ZWxzZVxuLS1cbmlvX3VyaW5nL3J3LmM9MTMxOT1pbnQgaW9fZG9faW9wb2xsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGZvcmNlX25vbnNwaW4pXG4tLVxuaW9fdXJpbmcvcncuYy0xMzY5LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgdG1wLCBcdTAwMjZjdHgtXHUwMDNlaW9wb2xsX2xpc3QsIGlvcG9sbF9ub2RlKSB7XG5pb191cmluZy9ydy5jOjEzNzA6XHRcdC8qIG9yZGVyIHdpdGggaW9fY29tcGxldGVfcndfaW9wb2xsKCksIGUuZy4gLVx1MDAzZXJlc3VsdCB1cGRhdGVzICovXG5pb191cmluZy9ydy5jLTEzNzEtXHRcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZyZXEtXHUwMDNlaW9wb2xsX2NvbXBsZXRlZCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NjIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBgaW9fY29tcGxldGVfcndfaW9wb2xsYCBmdW5jdGlvbiBpbiBgaW9fdXJpbmcvcncuY2AsIGFzIGlmIEkmIzM5O20gd2Fsa2luZyB0aHJvdWdoIGl0IG15c2VsZjoKCioqRGl2aW5nIGludG8gYGlvX2NvbXBsZXRlX3J3X2lvcG9sbGAqKgoKT2theSwgdGltZSB0byBkaWcgaW50byBgaW9fY29tcGxldGVfcndfaW9wb2xsYC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGNvbXBsZXRpbmcgcmVhZC93cml0ZSBvcGVyYXRpb25zIHdoZW4gdGhlIGBJT1BPTGAgZmxhZyBpcyBpbnZvbHZlZCBpbiBgaW9fdXJpbmdgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIHRoZSBhc3luY2hyb25vdXMgY29tcGxldGlvbiBpbiBhIHBvbGxlZCBjb250ZXh0LiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBuZWVkIHRvIGNoZWNrIGZvciBwZW5kaW5nIGV2ZW50cyBhbmQgaGFuZGxlIHZhcmlvdXMgZWRnZSBjYXNlcyDigJMgdGhpcyBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBhbmQgY29ycmVjdG5lc3MgaW4gdGhlIGFzeW5jaHJvbm91cyBJL08gd29ybGQuCgpGaXJzdCwgSSBleHBlY3QgdG8gc2VlIGFuIGV4YW1pbmF0aW9uIG9mIHRoZSBgaW9fdXJpbmdfc3FlYCBzdHJ1Y3R1cmUgKFNRRSkgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb21wbGV0ZWQgcmVxdWVzdC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGxvb2sgZm9yIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdHVzIG9mIHRoZSBvcGVyYXRpb24g4oCTIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgY29kZSwgYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGJvdGggc3VjY2Vzc2Z1bCBhbmQgZXJyb3Igc2NlbmFyaW9zLgoKTmV4dCwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcG9sbCBpbmZyYXN0cnVjdHVyZS4gSXMgaXQgY2hlY2tpbmcgdGhlIHN0YXR1cyBvZiB0aGUgSS9PIGV2ZW50IGFnYWluc3QgYSBwb2xsaW5nIHN0cnVjdHVyZSAocHJvYmFibHkgYW4gYGVwb2xsX2V2ZW50YCBvciBzaW1pbGFyKT8gSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhvdyBpdCBzeW5jaHJvbml6ZXMgd2l0aCB0aGUgcG9sbGluZyBtZWNoYW5pc20sIGVuc3VyaW5nIHRoYXQgdGhlIGNvbXBsZXRpb24gaXMgYWNrbm93bGVkZ2VkIGNvcnJlY3RseSBhbmQgdGhlIHdhaXRpbmcgcHJvY2VzcyBpcyBub3RpZmllZC4gVGhpcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBlZmZpY2llbnQgbWFuYWdlbWVudCBvZiBJL08gcmVzb3VyY2VzIHdoZW4gdGhlIGtlcm5lbCBpcyBtYW5hZ2luZyB0aGUgcG9sbGluZyBzaWRlLgoKVGhlIHVzZSBvZiBgSU9QT0xgIHN1Z2dlc3RzIHRoYXQgdGhlcmUgbWlnaHQgYmUgc29tZSBmb3JtIG9mIG9wdGltaXphdGlvbiBvciBzaG9ydC1jaXJjdWl0aW5nIGluIHNwZWNpZmljIHNpdHVhdGlvbnMuIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgY29uZGl0aW9uYWwgY2hlY2tzIGJhc2VkIG9uIHRoZSBgSU9QT0xgIGZsYWcmIzM5O3MgdmFsdWUuIEkmIzM5O20gdGhpbmtpbmcgd2UgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGVpdGhlciBhZ2dyZXNzaXZlIHBvbGxpbmcsIG9yIGEgbW9yZSBkZWxheWVkIGNvbXBsZXRpb24gbWVjaGFuaXNtLCBkZXBlbmRlbnQgb24gaG93IHRoZSBrZXJuZWwgc2VlcyB0aGUgZGF0YSBpcyBhdmFpbGFibGUuCgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgcG90ZW50aWFsIGZvciBoYW5kbGluZyBwYXJ0aWFsIGNvbXBsZXRpb25zLiBEb2VzIHRoZSBjb2RlIGFjY291bnQgZm9yIHNjZW5hcmlvcyB3aGVyZSBhIHJlYWQgb3Igd3JpdGUgb3BlcmF0aW9uIG1pZ2h0IG9ubHkgdHJhbnNmZXIgYSBzdWJzZXQgb2YgdGhlIHJlcXVlc3RlZCBkYXRhLCBwZXJoYXBzIGR1ZSB0byBhIHNob3J0IHJlYWQgb3IgYSByZXNvdXJjZSBsaW1pdGF0aW9uPyBJJiMzOTttIGhvcGluZyB0byBzZWUgaG93IHRoZSByZW1haW5pbmcgYnl0ZXMsIGlmIGFueSwgYXJlIG1hbmFnZWQgYW5kIGhhbmRsZWQuIEFyZSB3ZSByZXNjaGVkdWxpbmcgaXQgd2l0aCBhIG5ldyBTUUU/CgpGaW5hbGx5LCB0aGUgY29udGV4dC4gSSYjMzk7bGwgYmUgbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgY29tcGxldGlvbiBoYW5kbGluZyBhbmQgdGhlIHVzZXItc3BhY2Ugc3VibWlzc2lvbi4gSG93IGlzIHRoZSBjb21wbGV0ZWQgZXZlbnQgY29tbXVuaWNhdGVkIGJhY2sgdG8gdGhlIGFwcGxpY2F0aW9uPyBJcyB0aGVyZSBzb21lIGZvcm0gb2YgbWVtb3J5IGJhcnJpZXIgaW52b2x2ZWQ/IERvZXMgdGhpcyBjb2RlIGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGlvX3VyaW5nIHN5c3RlbSwgbGlrZSB0aGUgQ1FFIChDb21wbGV0aW9uIFF1ZXVlIEVudHJ5KSBoYW5kbGluZz8gVGhhdCYjMzk7cyB3aGF0IEkmIzM5O2xsIGJlIHdhdGNoaW5nIGZvci4gUmlnaHQsIGxldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvcncuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTgwOlx0XHRfX2lvX2NvbXBsZXRlX3J3X2NvbW1vbihyZXEsIHJlcyk7XG4gNTgxOlx0XHRpb19yZXFfc2V0X3JlcyhyZXEsIGlvX2ZpeHVwX3J3X3JlcyhyZXEsIHJlcyksIDApO1xuIDU4MjpcdFx0cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fcmVxX3J3X2NvbXBsZXRlO1xuIDU4MzpcdFx0X19pb19yZXFfdGFza193b3JrX2FkZChyZXEsIElPVV9GX1RXUV9MQVpZX1dBS0UpO1xuIDU4NDpcdH1cbiA1ODU6XHRcbiA1ODY6XHRzdGF0aWMgdm9pZCBpb19jb21wbGV0ZV9yd19pb3BvbGwoc3RydWN0IGtpb2NiICpraW9jYiwgbG9uZyByZXMpXG4gNTg3Olx0e1xuIDU4ODpcdFx0c3RydWN0IGlvX3J3ICpydyA9IGNvbnRhaW5lcl9vZihraW9jYiwgc3RydWN0IGlvX3J3LCBraW9jYik7XG4gNTg5Olx0XHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSA9IGNtZF90b19pb19raW9jYihydyk7XG4gNTkwOlx0XHRpbnQgZmluYWxfcmVzID0gaW9fZml4dXBfcndfcmVzKHJlcSwgcmVzKTtcbiA1OTE6XHRcbiA1OTI6XHRcdGlmIChraW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9XUklURSlcbiA1OTM6XHRcdFx0aW9fcmVxX2VuZF93cml0ZShyZXEpO1xuIDU5NDpcdFxuIDU5NTpcdFx0aWYgKHJlcyA9PSAtRUFHQUlOIFx1MDAyNlx1MDAyNiBpb19yd19zaG91bGRfcmVpc3N1ZShyZXEpKVxuIDU5NjpcdFx0XHRyZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfUkVJU1NVRSB8IFJFUV9GX0JMX05PX1JFQ1lDTEU7XG4gNTk3Olx0XHRlbHNlIGlmICh1bmxpa2VseShmaW5hbF9yZXMgIT0gcmVxLVx1MDAzZWNxZS5yZXMpKVxuIDU5ODpcdFx0XHRyZXEtXHUwMDNlY3FlLnJlcyA9IGZpbmFsX3JlcztcbiA1OTk6XHRcbiA2MDA6XHRcdC8qIG9yZGVyIHdpdGggaW9faW9wb2xsX2NvbXBsZXRlKCkgY2hlY2tpbmcgLVx1MDAzZWlvcG9sbF9jb21wbGV0ZWQgKi9cbiA2MDE6XHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnJlcS1cdTAwM2Vpb3BvbGxfY29tcGxldGVkLCAxKTtcbiA2MDI6XHR9XG4gNjAzOlx0XG4gNjA0Olx0c3RhdGljIGlubGluZSBzc2l6ZV90IGlvX2ZpeHVwX3Jlc3RhcnRfcmVzKHNzaXplX3QgcmV0KVxuIDYwNTpcdHtcbiA2MDY6XHRcdHN3aXRjaCAocmV0KSB7XG4gNjA3Olx0XHRjYXNlIC1FUkVTVEFSVFNZUzpcbiA2MDg6XHRcdGNhc2UgLUVSRVNUQVJUTk9JTlRSOlxuIDYwOTpcdFx0Y2FzZSAtRVJFU1RBUlROT0hBTkQ6XG4gNjEwOlx0XHRjYXNlIC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0s6XG4gNjExOlx0XHRcdC8qXG4gNjEyOlx0XHRcdCAqIFdlIGNhbiYjMzk7dCBqdXN0IHJlc3RhcnQgdGhlIHN5c2NhbGwsIHNpbmNlIHByZXZpb3VzbHlcbiA2MTM6XHRcdFx0ICogc3VibWl0dGVkIHNxZXMgbWF5IGFscmVhZHkgYmUgaW4gcHJvZ3Jlc3MuIEp1c3QgZmFpbFxuIDYxNDpcdFx0XHQgKiB0aGlzIElPIHdpdGggRUlOVFIuXG4gNjE1Olx0XHRcdCAqL1xuIDYxNjpcdFx0XHRyZXR1cm4gLUVJTlRSO1xuIDYxNzpcdFx0ZGVmYXVsdDpcbiA2MTg6XHRcdFx0cmV0dXJuIHJldDtcbiA2MTk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc5NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBpb191cmluZyBGbGFnIFVzYWdlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHJlcS0mZ3Q7Y3FlLmZsYWdzYCBmaWVsZCBpbiBgaW9fdXJpbmdgIGlzIGJlaW5nIG1hbmlwdWxhdGVkIGFuZCB1c2VkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgbGlmZWN5Y2xlLiBJIHdhbnQgdG8gc2VlICp3aGVyZSogaW4gdGhlIGNvZGUgdGhlc2UgZmxhZ3MgYXJlIGJlaW5nIHNldCAob3IgY2xlYXJlZCkuIFRoaXMgbWVhbnMgbG9va2luZyBhdCB0aGUgaGFuZGxlcnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSB0b3VjaCB0aGlzIGZpZWxkLCBlc3BlY2lhbGx5IHRob3NlIHJlbGF0ZWQgdG8gdGhlIGNvbW1hbmQgcXVldWUgZW50cnkgKGBjcWVgKS4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcnBsYXkgd2l0aCB0aGUgYGlvX2lzX3VyaW5nX2NtZChyZXEpYCBmdW5jdGlvbiwgYXMgdGhhdCBwcm9iYWJseSBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFdoYXQgZGVjaXNpb25zIGFyZSBtYWRlIGJhc2VkIG9uIHRoZSBmbGFnJiMzOTtzIGN1cnJlbnQgc3RhdGU/IFdoYXQgb3RoZXIgZnVuY3Rpb25zIG9yIGNvbXBvbmVudHMgcmVseSBvbiB0aGVzZSBmbGFncyB0byBwZXJmb3JtIHRoZWlyIHRhc2tzIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBmcmFtZXdvcms/CgpJJiMzOTtsbCBhbHNvIGV4cGFuZCB0aGlzIHNlYXJjaCB0byBpbmNsdWRlIGFueSBvdGhlciBoYW5kbGVycyBvciBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudDsgSSBjYW4mIzM5O3QgYmUgdG9vIG5hcnJvdyBoZXJlLCBzbyBJIG5lZWQgdG8gY2FzdCBhIHdpZGUgbmV0LiBCYXNpY2FsbHksIEkgd2lsbCBoYXZlIHRvIHNlYXJjaCBmb3IgZXZlcnkgdXNlIG9mIGByZXEtJmd0O2NxZS5mbGFnc2AgaW4gdGhlIGBpb191cmluZ2AgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NxZVxcLmZsYWdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW9fdXJpbmcuYz01MTU9c3RhdGljIHZvaWQgX19pb19jcXJpbmdfb3ZlcmZsb3dfZmx1c2goc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgZHlpbmcpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy01MzEtXHRcdFx0XHRcdHN0cnVjdCBpb19vdmVyZmxvd19jcWUsIGxpc3QpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYzo1MzI6XHRcdGlmIChvY3FlLVx1MDAzZWNxZS5mbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8XG5pb191cmluZy9pb191cmluZy5jLTUzMy1cdFx0ICAgIGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSB7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz02NTI9c3RhdGljIHN0cnVjdCBpb19vdmVyZmxvd19jcWUgKmlvX2FsbG9jX29jcWUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy02NjktXHRcdG9jcWUtXHUwMDNlY3FlLnJlcyA9IGNxZS1cdTAwM2VyZXM7XG5pb191cmluZy9pb191cmluZy5jOjY3MDpcdFx0b2NxZS1cdTAwM2VjcWUuZmxhZ3MgPSBjcWUtXHUwMDNlZmxhZ3M7XG5pb191cmluZy9pb191cmluZy5jLTY3MS1cdFx0aWYgKGlzX2NxZTMyIFx1MDAyNlx1MDAyNiBiaWdfY3FlKSB7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaD0yOTc9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlvX2ZpbGxfY3FlX3JlcShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9pb191cmluZy5oLTI5OS17XG5pb191cmluZy9pb191cmluZy5oOjMwMDpcdGJvb2wgaXNfY3FlMzIgPSByZXEtXHUwMDNlY3FlLmZsYWdzIFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzI7XG5pb191cmluZy9pb191cmluZy5oLTMwMS1cdHN0cnVjdCBpb191cmluZ19jcWUgKmNxZTtcbi0tXG5pb191cmluZy9pb191cmluZy5oPTMzMD1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcmVxX3NldF9yZXMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHMzMiByZXMsIHUzMiBjZmxhZ3MpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zMzItXHRyZXEtXHUwMDNlY3FlLnJlcyA9IHJlcztcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MzMzOlx0cmVxLVx1MDAzZWNxZS5mbGFncyA9IGNmbGFncztcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzM0LX1cbi0tXG5pb191cmluZy9pb191cmluZy5oPTM0Mz1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcmVxX3NldF9yZXMzMihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgczMyIHJlcywgdTMyIGNmbGFncyxcbi0tXG5pb191cmluZy9pb191cmluZy5oLTM0Ni1cdHJlcS1cdTAwM2VjcWUucmVzID0gcmVzO1xuaW9fdXJpbmcvaW9fdXJpbmcuaDozNDc6XHRyZXEtXHUwMDNlY3FlLmZsYWdzID0gY2ZsYWdzIHwgY3R4X2NxZTMyX2ZsYWdzKHJlcS1cdTAwM2VjdHgpO1xuaW9fdXJpbmcvaW9fdXJpbmcuaC0zNDgtXHRyZXEtXHUwMDNlYmlnX2NxZS5leHRyYTEgPSBleHRyYTE7XG4tLVxuaW9fdXJpbmcvbXNnX3JpbmcuYz03Mz1zdGF0aWMgdm9pZCBpb19tc2dfdHdfY29tcGxldGUoc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4tLVxuaW9fdXJpbmcvbXNnX3JpbmcuYy03Ny1cbmlvX3VyaW5nL21zZ19yaW5nLmM6Nzg6XHRpb19hZGRfYXV4X2NxZShjdHgsIHJlcS1cdTAwM2VjcWUudXNlcl9kYXRhLCByZXEtXHUwMDNlY3FlLnJlcywgcmVxLVx1MDAzZWNxZS5mbGFncyk7XG5pb191cmluZy9tc2dfcmluZy5jLTc5LVx0a2ZyZWVfcmN1KHJlcSwgcmN1X2hlYWQpO1xuLS1cbmlvX3VyaW5nL25ldC5jPTg1Mz1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtODgxLVx0XHRpZiAoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWX1JFVFJZKVxuaW9fdXJpbmcvbmV0LmM6ODgyOlx0XHRcdGNmbGFncyA9IHJlcS1cdTAwM2VjcWUuZmxhZ3MgfCAoY2ZsYWdzIFx1MDAyNiBDUUVfRl9NQVNLKTtcbmlvX3VyaW5nL25ldC5jLTg4My1cdFx0aWYgKHNyLVx1MDAzZW1zaG90X2xlbiBcdTAwMjZcdTAwMjYgc2VsLVx1MDAzZXZhbCBcdTAwM2U9IHNyLVx1MDAzZW1zaG90X2xlbilcbi0tXG5pb191cmluZy9uZXQuYy04OTQtXHRcdCAgICAhaW92X2l0ZXJfY291bnQoXHUwMDI2a21zZy1cdTAwM2Vtc2cubXNnX2l0ZXIpKSB7XG5pb191cmluZy9uZXQuYzo4OTU6XHRcdFx0cmVxLVx1MDAzZWNxZS5mbGFncyA9IGNmbGFncyBcdTAwMjYgfkNRRV9GX01BU0s7XG5pb191cmluZy9uZXQuYy04OTYtXHRcdFx0c3ItXHUwMDNlbGVuID0ga21zZy1cdTAwM2Vtc2cubXNnX2lucTtcbi0tXG5pb191cmluZy9uZXQuYz0xMzQ3PWludCBpb19zZW5kX3pjX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbi0tXG5pb191cmluZy9uZXQuYy0xMzcyLVx0bm90aWYtXHUwMDNlY3FlLnJlcyA9IDA7XG5pb191cmluZy9uZXQuYzoxMzczOlx0bm90aWYtXHUwMDNlY3FlLmZsYWdzID0gSU9SSU5HX0NRRV9GX05PVElGO1xuaW9fdXJpbmcvbmV0LmMtMTM3NC1cdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9ORUVEX0NMRUFOVVAgfCBSRVFfRl9QT0xMX05PX0xBWlk7XG4tLVxuaW9fdXJpbmcvbmV0LmM9MTU3MT12b2lkIGlvX3NlbmRyZWN2X2ZhaWwoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTU3OS1cdCAgICAocmVxLVx1MDAzZW9wY29kZSA9PSBJT1JJTkdfT1BfU0VORF9aQyB8fCByZXEtXHUwMDNlb3Bjb2RlID09IElPUklOR19PUF9TRU5ETVNHX1pDKSlcbmlvX3VyaW5nL25ldC5jOjE1ODA6XHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgfD0gSU9SSU5HX0NRRV9GX01PUkU7XG5pb191cmluZy9uZXQuYy0xNTgxLX1cbi0tXG5pb191cmluZy9ydy5jPTU2Mj12b2lkIGlvX3JlcV9yd19jb21wbGV0ZShzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbi0tXG5pb191cmluZy9ydy5jLTU2OC1cdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IChSRVFfRl9CVUZGRVJfU0VMRUNURUR8UkVRX0ZfQlVGRkVSX1JJTkcpKVxuaW9fdXJpbmcvcncuYzo1Njk6XHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLVx1MDAzZWNxZS5yZXMsIDApLCBOVUxMKTtcbmlvX3VyaW5nL3J3LmMtNTcwLVxuLS1cbmlvX3VyaW5nL3J3LmM9MTIzOD12b2lkIGlvX3J3X2ZhaWwoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4tLVxuaW9fdXJpbmcvcncuYy0xMjQyLVx0cmVzID0gaW9fZml4dXBfcndfcmVzKHJlcSwgcmVxLVx1MDAzZWNxZS5yZXMpO1xuaW9fdXJpbmcvcncuYzoxMjQzOlx0aW9fcmVxX3NldF9yZXMocmVxLCByZXMsIHJlcS1cdTAwM2VjcWUuZmxhZ3MpO1xuaW9fdXJpbmcvcncuYy0xMjQ0LX1cbi0tXG5pb191cmluZy9ydy5jPTEzMTk9aW50IGlvX2RvX2lvcG9sbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBmb3JjZV9ub25zcGluKVxuLS1cbmlvX3VyaW5nL3J3LmMtMTM3NS1cdFx0bnJfZXZlbnRzJiM0MzsmIzQzOztcbmlvX3VyaW5nL3J3LmM6MTM3NjpcdFx0cmVxLVx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO1xuaW9fdXJpbmcvcncuYy0xMzc3LVx0XHRpZiAoIWlvX2lzX3VyaW5nX2NtZChyZXEpKVxuLS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jPTE1Mj12b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LCB1NjQgcmVzMixcbi0tXG5pb191cmluZy91cmluZ19jbWQuYy0xNjctXHRcdGlmIChyZXEtXHUwMDNlY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKVxuaW9fdXJpbmcvdXJpbmdfY21kLmM6MTY4Olx0XHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgfD0gSU9SSU5HX0NRRV9GXzMyO1xuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTY5LVx0XHRpb19yZXFfc2V0X2NxZTMyX2V4dHJhKHJlcSwgcmVzMiwgMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5OTIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGbGFnIE1vZGlmaWNhdGlvbiBpbiBgaW9fZG9faW9wb2xsYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGNoYW5nZSBpbiBgaW9fZG9faW9wb2xsYC4gUHJldmlvdXNseSwgdGhlIGNvZGUgd2FzIHNldHRpbmcgYHJlcS0mZ3Q7Y3FlLmZsYWdzYCBkaXJlY3RseSB3aXRoIGBpb19wdXRfa2J1ZiguLi4pYDogYHJlcS0mZ3Q7Y3FlLmZsYWdzID0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLSZndDtjcWUucmVzLCAwKSwgTlVMTCk7YC4gTm93LCBpdCYjMzk7cyBhbiBPUiBhc3NpZ25tZW50OiBgcmVxLSZndDtjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYoLi4uKWAuCgpUaGUgcXVlc3Rpb24gaXMsIHdoeSB0aGUgY2hhbmdlIGZyb20gYSBzaW1wbGUgYXNzaWdubWVudCB0byBhIGJpdHdpc2UgT1I/IEl0IGxvb2tzIGxpa2UgdGhlIGtleSBsaWVzIGluIHVuZGVyc3RhbmRpbmcgaG93IGByZXEtJmd0O2NxZS5mbGFnc2AgaXMgdXNlZCBhbmQgbW9kaWZpZWQgZWxzZXdoZXJlLiBMb29raW5nIGF0IGBfX2lvX3VyaW5nX2NtZF9kb25lYCwgSSBzZWUgdGhhdCBgSU9SSU5HX0NRRV9GXzMyYCBhbmQgb3RoZXIgZmxhZ3MgYXJlIGJlaW5nIHNldCB1c2luZyBhbiBPUiBhc3NpZ25tZW50LCB3aGljaCBtZWFucyB0aGF0IHRoZSBpbnRlbnRpb24gaXMgZm9yIHRoZXNlIGZsYWdzIHRvIHBlcnNpc3QuIFRoZSBwcmV2aW91cyBhc3NpZ25tZW50IGluIGBpb19kb19pb3BvbGxgIHdhcyAqb3ZlcndyaXRpbmcqIHRoZXNlIGV4aXN0aW5nIGZsYWdzLiBTbywgaWYgYGlvX2RvX2lvcG9sbGAgcmFuIGFmdGVyIHNvbWV0aGluZyBsaWtlIGBpb191cmluZ19jbWRgIG9yIGBpb19yZXFfcndfY29tcGxldGVgLCBpdCB3YXMgY2xlYXJpbmcgdGhlbSwgd2hpY2ggaXNuJiMzOTt0IHRoZSBkZXNpcmVkIGJlaGF2aW9yLiBUaGUgZWFybGllciBjYWxscywgYXQgbGluZSA1NjksIHdvdWxkIGhhdmUgd3JpdHRlbiB0aGUgcmVsZXZhbnQgZmxhZy4KClRoZSBjaGFuZ2UgdG8gdGhlIE9SIGFzc2lnbm1lbnQgZml4ZXMgdGhpcy4KClRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSBzaG91bGQgdmVyaWZ5IHRoYXQgYHJlcWAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgb3IgemVyb2VkIHVwb24gYWxsb2NhdGlvbi4gSWYgaXQgaXNuJiMzOTt0LCB0aGVyZSYjMzk7cyBhIGNoYW5jZSBgcmVxLSZndDtjcWUuZmxhZ3NgIGNvdWxkIGNvbnRhaW4gZ2FyYmFnZSwgYW5kIHRoYXQgd291bGQgaW50cm9kdWNlIGEgbmV3IGNsYXNzIG9mIHByb2JsZW1zLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgaW9fa2lvY2JgIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHdpdGhpbiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtIHRvIGNvbmZpcm0gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fYWxsb2NfcmVxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW9fdXJpbmcuYz05NDg9dm9pZCBpb19yZXFfZGVmZXJfZmFpbGVkKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzMzIgcmVzKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTY0LSAqIGhhbmRsZXJzIGFuZCBpb19pc3N1ZV9zcWUoKSBhcmUgZG9uZSB3aXRoIGl0LCBlLmcuIGlubGluZSBjb21wbGV0aW9uIHBhdGguXG5pb191cmluZy9pb191cmluZy5jOjk2NTogKiBCZWNhdXNlIG9mIHRoYXQsIGlvX2FsbG9jX3JlcSgpIHNob3VsZCBiZSBjYWxsZWQgb25seSB1bmRlciAtXHUwMDNldXJpbmdfbG9ja1xuaW9fdXJpbmcvaW9fdXJpbmcuYy05NjYtICogYW5kIHdpdGggZXh0cmEgY2F1dGlvbiB0byBub3QgZ2V0IGEgcmVxdWVzdCB0aGF0IGlzIHN0aWxsIHdvcmtlZCBvbi5cbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTY3LSAqL1xuaW9fdXJpbmcvaW9fdXJpbmcuYzo5Njg6X19jb2xkIGJvb2wgX19pb19hbGxvY19yZXFfcmVmaWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxuaW9fdXJpbmcvaW9fdXJpbmcuYy05NjktXHRfX211c3RfaG9sZChcdTAwMjZjdHgtXHUwMDNldXJpbmdfbG9jaylcbi0tXG5pb191cmluZy9pb191cmluZy5jPTIwMTM9aW50IGlvX3N1Ym1pdF9zcWVzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBpbnQgbnIpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMDM2LVxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMDM3Olx0XHRpZiAodW5saWtlbHkoIWlvX2FsbG9jX3JlcShjdHgsIFx1MDAyNnJlcSkpKVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMDM4LVx0XHRcdGJyZWFrO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmg9MjEyPXZvaWQgaW9fdGFza19yZWZzX3JlZmlsbChzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCk7XG5pb191cmluZy9pb191cmluZy5oOjIxMzpib29sIF9faW9fYWxsb2NfcmVxX3JlZmlsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XG5pb191cmluZy9pb191cmluZy5oLTIxNC1cbi0tXG5pb191cmluZy9pb191cmluZy5oPTUyNT1zdGF0aWMgaW5saW5lIHN0cnVjdCBpb19raW9jYiAqaW9fZXh0cmFjdF9yZXEoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC01MzMtXG5pb191cmluZy9pb191cmluZy5oOjUzNDpzdGF0aWMgaW5saW5lIGJvb2wgaW9fYWxsb2NfcmVxKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fa2lvY2IgKipyZXEpXG5pb191cmluZy9pb191cmluZy5oLTUzNS17XG5pb191cmluZy9pb191cmluZy5oLTUzNi1cdGlmICh1bmxpa2VseShpb19yZXFfY2FjaGVfZW1wdHkoY3R4KSkpIHtcbmlvX3VyaW5nL2lvX3VyaW5nLmg6NTM3Olx0XHRpZiAoIV9faW9fYWxsb2NfcmVxX3JlZmlsbChjdHgpKVxuaW9fdXJpbmcvaW9fdXJpbmcuaC01MzgtXHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmlvX3VyaW5nL25vdGlmLmM9MTE0PXN0cnVjdCBpb19raW9jYiAqaW9fYWxsb2Nfbm90aWYoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4tLVxuaW9fdXJpbmcvbm90aWYuYy0xMTktXG5pb191cmluZy9ub3RpZi5jOjEyMDpcdGlmICh1bmxpa2VseSghaW9fYWxsb2NfcmVxKGN0eCwgXHUwMDI2bm90aWYpKSlcbmlvX3VyaW5nL25vdGlmLmMtMTIxLVx0XHRyZXR1cm4gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ1OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdHJhaW4gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgSS9PIEFsbG9jYXRpb24gYW5kIEluaXRpYWxpemF0aW9uKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHpvb20gaW4gb24gaG93IHRoZXNlIEkvTyByZXF1ZXN0cyBhcmUgYmVpbmcgaGFuZGxlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgX19pb19hbGxvY19yZXFfcmVmaWxsYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHJlZmlsbGluZyBtZWNoYW5pc20gZm9yIHRoZXNlIHJlcXVlc3RzLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBtZW1vcnkgbWFuYWdlbWVudC4gSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIGluZWZmaWNpZW5jaWVzIG9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyB0aGVyZSwgZ2l2ZW4gdGhlIHNjYWxlIHdlJiMzOTtyZSBwcm9iYWJseSBkZWFsaW5nIHdpdGguIFRoZW4sIEkgbmVlZCB0byBpbW1lZGlhdGVseSB0aWUgdGhhdCB0byB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBpb19pbml0X3JlcWAsIHNwZWNpZmljYWxseSBob3cgdGhlIEkvTyByZXF1ZXN0cyBhcmUgaW5pdGlhbGl6ZWQgaW4gY29uanVuY3Rpb24gd2l0aCBzbGFiIGluaXRpYWxpemF0aW9uLiBBcmUgd2UgZG9pbmcgdGhpcyBlZmZlY3RpdmVseT8gQXJlIHdlIHBvdGVudGlhbGx5IG92ZXItYWxsb2NhdGluZywgb3IgdW5kZXItYWxsb2NhdGluZywgc2xhYnMgaGVyZT8gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSYjMzk7cmUga2VlcGluZyBpdCBlZmZpY2llbnQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBwcm9ibGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NjU6XHQgKiBCZWNhdXNlIG9mIHRoYXQsIGlvX2FsbG9jX3JlcSgpIHNob3VsZCBiZSBjYWxsZWQgb25seSB1bmRlciAtXHUwMDNldXJpbmdfbG9ja1xuIDk2NjpcdCAqIGFuZCB3aXRoIGV4dHJhIGNhdXRpb24gdG8gbm90IGdldCBhIHJlcXVlc3QgdGhhdCBpcyBzdGlsbCB3b3JrZWQgb24uXG4gOTY3Olx0ICovXG4gOTY4Olx0X19jb2xkIGJvb2wgX19pb19hbGxvY19yZXFfcmVmaWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxuIDk2OTpcdFx0X19tdXN0X2hvbGQoXHUwMDI2Y3R4LVx1MDAzZXVyaW5nX2xvY2spXG4gOTcwOlx0e1xuIDk3MTpcdFx0Z2ZwX3QgZ2ZwID0gR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX1pFUk87XG4gOTcyOlx0XHR2b2lkICpyZXFzW0lPX1JFUV9BTExPQ19CQVRDSF07XG4gOTczOlx0XHRpbnQgbnJfcmVxcyA9IEFSUkFZX1NJWkUocmVxcyk7XG4gOTc0Olx0XG4gOTc1Olx0XHQvKlxuIDk3NjpcdFx0ICogQnVsayBhbGxvYyBpcyBhbGwtb3Itbm90aGluZy4gSWYgd2UgZmFpbCB0byBnZXQgYSBiYXRjaCwgcmV0cnkgYVxuIDk3NzpcdFx0ICogc2luZ2xlIGFsbG9jYXRpb24gdG8gYmUgb24gdGhlIHNhZmUgc2lkZS5cbiA5Nzg6XHRcdCAqL1xuIDk3OTpcdFx0aWYgKCFrbWVtX2NhY2hlX2FsbG9jX2J1bGsocmVxX2NhY2hlcCwgZ2ZwLCBucl9yZXFzLCByZXFzKSkge1xuIDk4MDpcdFx0XHRyZXFzWzBdID0ga21lbV9jYWNoZV9hbGxvYyhyZXFfY2FjaGVwLCBnZnApO1xuIDk4MTpcdFx0XHRpZiAoIXJlcXNbMF0pXG4gOTgyOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDk4MzpcdFx0XHRucl9yZXFzID0gMTtcbiA5ODQ6XHRcdH1cbiA5ODU6XHRcbiA5ODY6XHRcdHBlcmNwdV9yZWZfZ2V0X21hbnkoXHUwMDI2Y3R4LVx1MDAzZXJlZnMsIG5yX3JlcXMpO1xuIDk4NzpcdFx0Y3R4LVx1MDAzZW5yX3JlcV9hbGxvY2F0ZWQgJiM0Mzs9IG5yX3JlcXM7XG4gOTg4Olx0XG4gOTg5Olx0XHR3aGlsZSAobnJfcmVxcy0tKVxuIDk5MDpcdFx0XHRpb19yZXFfYWRkX3RvX2NhY2hlKHJlcXNbbnJfcmVxc10sIGN0eCk7XG4gOTkxOlx0XHRyZXR1cm4gdHJ1ZTtcbiA5OTI6XHR9XG4gOTkzOlx0XG4gOTk0Olx0X19jb2xkIHZvaWQgaW9fZnJlZV9yZXEoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4gOTk1Olx0e1xuIDk5NjpcdFx0LyogcmVmcyB3ZXJlIGFscmVhZHkgcHV0LCByZXN0b3JlIHRoZW0gZm9yIGlvX3JlcV90YXNrX2NvbXBsZXRlKCkgKi9cbiA5OTc6XHRcdHJlcS1cdTAwM2VmbGFncyBcdTAwMjY9IH5SRVFfRl9SRUZDT1VOVDtcbiA5OTg6XHRcdC8qIHdlIG9ubHkgd2FudCB0byBmcmVlIGl0LCBkb24mIzM5O3QgcG9zdCBDUUVzICovXG4gOTk5Olx0XHRyZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQ1FFX1NLSVA7XG4xMDAwOlx0XHRyZXEtXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19yZXFfdGFza19jb21wbGV0ZTtcbjEwMDE6XHRcdGlvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSk7XG4xMDAyOlx0fVxuMTAwMzpcdFxuMTAwNDpcdHN0YXRpYyB2b2lkIF9faW9fcmVxX2ZpbmRfbmV4dF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQwOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgYGlvX2luaXRfcmVxYCBpbiBgaW9fdXJpbmcvaW9fdXJpbmcuY2AqKgoKT2theSwgc28gd2UmIzM5O3JlIGRpdmluZyBpbnRvIHRoZSBgaW9fdXJpbmdgIGltcGxlbWVudGF0aW9uLCBhbmQgaXQmIzM5O3MgdGltZSB0byB6ZXJvIGluIG9uIGEgY3JpdGljYWwgZnVuY3Rpb246IGBpb19pbml0X3JlcWAuIE15IG1lbnRhbCBjaGVja2xpc3QgaXMgaW1tZWRpYXRlbHkgZW5nYWdlZDogJiMzNDtXaGF0IGlzIHRoaXMgZnVuY3Rpb24gZG9pbmc/IFdoZXJlIGRvZXMgaXQgZml0IGludG8gdGhlIHJlcXVlc3QgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcz8gQXJlIHRoZXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGdpdmVuIHRoYXQgdGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgYXN5bmMgSU8gc3lzdGVtPyYjMzQ7IEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgaXMgd2hlcmUgdGhlIGdyb3VuZHdvcmsgaXMgbGFpZCBmb3IgdGhlIG5ldyByZXF1ZXN0LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBsaWtlbHkgaW5pdGlhbGl6ZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGxvb2tpbmcgZm9yIGFueSBwb2ludHMgb2YgY29udGVudGlvbiBvciBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgZHVyaW5nIHRoZSByZXF1ZXN0IHByZXBhcmF0aW9uIHBoYXNlLiBXZSBhbGwga25vdyBwZXJmb3JtYW5jZSBpcyBrZXkgaW4gdGhlc2UgdGhpbmdzLiBTbywgSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IHZpZ2lsYW50IGFib3V0IG1lbW9yeSBhbGxvY2F0aW9uLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgb3ZlcmFsbCBlZmZpY2llbmN5IG9mIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSSYjMzk7bSByZWFkeSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgbmV3IHJlcXVlc3RzIGFyZSBiZWluZyBwcmVwYXJlZCBhbmQgaW50ZWdyYXRlZCBpbnRvIHRoZSBgaW9fdXJpbmdgIG1hY2hpbmVyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9faW5pdF9yZXEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9icGZfZmlsdGVyLmM9NTc9aW50IF9faW9fdXJpbmdfcnVuX2JwZl9maWx0ZXJzKHN0cnVjdCBpb19icGZfZmlsdGVyIF9fcmN1ICoqZmlsdGVycyxcbi0tXG5pb191cmluZy9icGZfZmlsdGVyLmMtNjktXHQgKiByZXEtXHUwMDNlb3Bjb2RlIGhhcyBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIHRvIGJlIHdpdGhpbiB0aGUgcmFuZ2VcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYzo3MDpcdCAqIG9mIHdoYXQgd2UgZXhwZWN0LCBpb19pbml0X3JlcSgpIGRvZXMgdGhpcy5cbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy03MS1cdCAqL1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9MTcxND1zdGF0aWMgX19jb2xkIGludCBpb19pbml0X2ZhaWxfcmVxKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgZXJyKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTcyMC1cbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTcyMTpzdGF0aWMgaW50IGlvX2luaXRfcmVxKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTcyMi1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSwgdW5zaWduZWQgaW50ICpsZWZ0KVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9MTg3Mz1zdGF0aWMgaW5saW5lIGludCBpb19zdWJtaXRfc3FlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbi0tXG5pb191cmluZy9pb191cmluZy5jLTE4NzktXG5pb191cmluZy9pb191cmluZy5jOjE4ODA6XHRyZXQgPSBpb19pbml0X3JlcShjdHgsIHJlcSwgc3FlLCBsZWZ0KTtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTg4MS1cdGlmICh1bmxpa2VseShyZXQpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA3NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBpb19pbml0X3JlcWAgaW4gYGlvX3VyaW5nLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBpb191cmluZy5jYCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIHRoZSBgaW9faW5pdF9yZXFgIGZ1bmN0aW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBpbml0aWFsaXppbmcgSS9PIHJlcXVlc3RzLiBMZXQmIzM5O3MgaG9tZSBpbiBvbiBsaW5lcyAxNzIxIHRvIDE3NzA7IHRoYXQmIzM5O3MgcHJvYmFibHkgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhpcyBmdW5jdGlvbiByZXNpZGVzLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGluaXRpYWwgc2V0dXAsIHZhbGlkYXRpb24sIGFuZCBwb3RlbnRpYWxseSBxdWV1ZWluZyBoYXBwZW4uIE5lZWQgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgZWFjaCBzZWN0aW9uIG9mIHRoaXMgY29kZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgYXJndW1lbnQgdmFsaWRhdGlvbiwgbWVtb3J5IGFsbG9jYXRpb24gKGlmIGFueSksIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFN1Ym1pc3Npb24gUXVldWUgYW5kIENvbXBsZXRpb24gUXVldWUuIFRoaXMgYXJlYSBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCByZXF1ZXN0IGxpZmVjeWNsZSBpbiBpb191cmluZywgc28gSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbi4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHBsdW1iaW5nIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzIwOlx0XG4xNzIxOlx0c3RhdGljIGludCBpb19pbml0X3JlcShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX2tpb2NiICpyZXEsXG4xNzIyOlx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUsIHVuc2lnbmVkIGludCAqbGVmdClcbjE3MjM6XHRcdF9fbXVzdF9ob2xkKFx1MDAyNmN0eC1cdTAwM2V1cmluZ19sb2NrKVxuMTcyNDpcdHtcbjE3MjU6XHRcdGNvbnN0IHN0cnVjdCBpb19pc3N1ZV9kZWYgKmRlZjtcbjE3MjY6XHRcdHVuc2lnbmVkIGludCBzcWVfZmxhZ3M7XG4xNzI3Olx0XHRpbnQgcGVyc29uYWxpdHk7XG4xNzI4Olx0XG4xNzI5Olx0XHRyZXEtXHUwMDNlY3R4ID0gY3R4O1xuMTczMDpcdFx0cmVxLVx1MDAzZW9wY29kZSA9IFJFQURfT05DRShzcWUtXHUwMDNlb3Bjb2RlKTtcbjE3MzE6XHRcdC8qIHNhbWUgbnVtZXJpY2FsIHZhbHVlcyB3aXRoIGNvcnJlc3BvbmRpbmcgUkVRX0ZfKiwgc2FmZSB0byBjb3B5ICovXG4xNzMyOlx0XHRzcWVfZmxhZ3MgPSBSRUFEX09OQ0Uoc3FlLVx1MDAzZWZsYWdzKTtcbjE3MzM6XHRcdHJlcS1cdTAwM2VmbGFncyA9IChfX2ZvcmNlIGlvX3JlcV9mbGFnc190KSBzcWVfZmxhZ3M7XG4xNzM0Olx0XHRyZXEtXHUwMDNlY3FlLnVzZXJfZGF0YSA9IFJFQURfT05DRShzcWUtXHUwMDNldXNlcl9kYXRhKTtcbjE3MzU6XHRcdHJlcS1cdTAwM2VmaWxlID0gTlVMTDtcbjE3MzY6XHRcdHJlcS1cdTAwM2V0Y3R4ID0gY3VycmVudC1cdTAwM2Vpb191cmluZztcbjE3Mzc6XHRcdHJlcS1cdTAwM2VjYW5jZWxfc2VxX3NldCA9IGZhbHNlO1xuMTczODpcdFx0cmVxLVx1MDAzZWFzeW5jX2RhdGEgPSBOVUxMO1xuMTczOTpcdFxuMTc0MDpcdFx0aWYgKHVubGlrZWx5KHJlcS1cdTAwM2VvcGNvZGUgXHUwMDNlPSBJT1JJTkdfT1BfTEFTVCkpIHtcbjE3NDE6XHRcdFx0cmVxLVx1MDAzZW9wY29kZSA9IDA7XG4xNzQyOlx0XHRcdHJldHVybiBpb19pbml0X2ZhaWxfcmVxKHJlcSwgLUVJTlZBTCk7XG4xNzQzOlx0XHR9XG4xNzQ0Olx0XHRyZXEtXHUwMDNlb3Bjb2RlID0gYXJyYXlfaW5kZXhfbm9zcGVjKHJlcS1cdTAwM2VvcGNvZGUsIElPUklOR19PUF9MQVNUKTtcbjE3NDU6XHRcbjE3NDY6XHRcdGRlZiA9IFx1MDAyNmlvX2lzc3VlX2RlZnNbcmVxLVx1MDAzZW9wY29kZV07XG4xNzQ3Olx0XHRpZiAoZGVmLVx1MDAzZWlzXzEyOCBcdTAwMjZcdTAwMjYgIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9TUUUxMjgpKSB7XG4xNzQ4Olx0XHRcdC8qXG4xNzQ5Olx0XHRcdCAqIEEgMTI4YiBvcCBvbiBhIG5vbi0xMjhiIFNRIHJlcXVpcmVzIG1peGVkIFNRRSBzdXBwb3J0IGFzXG4xNzUwOlx0XHRcdCAqIHdlbGwgYXMgMiBjb250aWd1b3VzIGVudHJpZXMuXG4xNzUxOlx0XHRcdCAqL1xuMTc1MjpcdFx0XHRpZiAoIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9TUUVfTUlYRUQpIHx8ICpsZWZ0IFx1MDAzYyAyIHx8XG4xNzUzOlx0XHRcdCAgICAodW5zaWduZWQpKHNxZSAtIGN0eC1cdTAwM2VzcV9zcWVzKSBcdTAwM2U9IGN0eC1cdTAwM2VzcV9lbnRyaWVzIC0gMSlcbjE3NTQ6XHRcdFx0XHRyZXR1cm4gaW9faW5pdF9mYWlsX3JlcShyZXEsIC1FSU5WQUwpO1xuMTc1NTpcdFx0XHQvKlxuMTc1NjpcdFx0XHQgKiBBIDEyOGIgb3BlcmF0aW9uIG9uIGEgbWl4ZWQgU1EgdXNlcyB0d28gZW50cmllcywgc28gd2UgaGF2ZVxuMTc1NzpcdFx0XHQgKiB0byBpbmNyZW1lbnQgdGhlIGhlYWQgYW5kIGNhY2hlZCByZWZzLCBhbmQgZGVjcmVtZW50IHdoYXQmIzM5O3NcbjE3NTg6XHRcdFx0ICogbGVmdC5cbjE3NTk6XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDgxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIFJlcXVlc3QgTGlmZWN5Y2xlIGFuZCBGbGFnIE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIHJlcXVlc3QgbGlmZWN5Y2xlLCBzcGVjaWZpY2FsbHkgaG93IHdlIGhhbmRsZSByZXF1ZXN0cyBwdWxsZWQgZnJvbSB0aGUgY29udGV4dCBjYWNoZS4gSXQmIzM5O3MgdGltZSB0byB6ZXJvIGluIG9uIGhvdyB3ZSYjMzk7cmUgc2V0dGluZyBhbmQgY2xlYXJpbmcgdGhvc2UgYHJlcS0mZ3Q7Y3FlLmZsYWdzYCBiaXRzIHdoZW4gcmVjeWNsaW5nIHJlcXVlc3RzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgY2Fycnlpbmcgb3ZlciBhbnkgc3RhbGUgZmxhZ3MgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgZXJyb3JzIGRvd24gdGhlIGxpbmUuIFdlIGNhbiYjMzk7dCBoYXZlIGFueSByZW1uYW50cyBmcm9tIGEgcHJldmlvdXMgb3BlcmF0aW9uIGNvcnJ1cHRpbmcgdGhlIGN1cnJlbnQgb25lLiBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYSBmb3IgZW5zdXJpbmcgcmVxdWVzdCBpbnRlZ3JpdHkgYW5kIHByZXZlbnRpbmcgYW55IHN1YnRsZSwgaGFyZC10by1kZWJ1ZyBpc3N1ZXMgcmVsYXRlZCB0byBjb250ZXh0IHJldXNlLiBVbmRlcnN0YW5kaW5nIHdoZXJlIHRoZSBmbGFncyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHJlc2V0IGlzIHRoZSBrZXkgdG8gbWFuYWdpbmcgb3VyIHJlcXVlc3QgcmVzb3VyY2UgcmVzcG9uc2libHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3JlcV9hZGRfdG9fY2FjaGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5jPTE3ND1zdGF0aWMgaW5saW5lIHZvaWQgcmVxX2ZhaWxfbGlua19ub2RlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmVzKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTc5LVxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxODA6c3RhdGljIGlubGluZSB2b2lkIGlvX3JlcV9hZGRfdG9fY2FjaGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xODEte1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9OTY4PV9fY29sZCBib29sIF9faW9fYWxsb2NfcmVxX3JlZmlsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbi0tXG5pb191cmluZy9pb191cmluZy5jLTk4OS1cdHdoaWxlIChucl9yZXFzLS0pXG5pb191cmluZy9pb191cmluZy5jOjk5MDpcdFx0aW9fcmVxX2FkZF90b19jYWNoZShyZXFzW25yX3JlcXNdLCBjdHgpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy05OTEtXHRyZXR1cm4gdHJ1ZTtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTEwODU9c3RhdGljIHZvaWQgaW9fZnJlZV9iYXRjaF9saXN0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTEyMi1cdFx0bm9kZSA9IHJlcS1cdTAwM2Vjb21wX2xpc3QubmV4dDtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTEyMzpcdFx0aW9fcmVxX2FkZF90b19jYWNoZShyZXEsIGN0eCk7XG5pb191cmluZy9pb191cmluZy5jLTExMjQtXHR9IHdoaWxlIChub2RlKTtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTIwMTM9aW50IGlvX3N1Ym1pdF9zcWVzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBpbnQgbnIpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMDM5LVx0XHRpZiAodW5saWtlbHkoIWlvX2dldF9zcWUoY3R4LCBcdTAwMjZzcWUpKSkge1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMDQwOlx0XHRcdGlvX3JlcV9hZGRfdG9fY2FjaGUocmVxLCBjdHgpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMDQxLVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgwNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElPUG9sbCBSZXF1ZXN0IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgaW9fcHV0X2tidWZgIGlzIHJldHVybmluZyBhbiBgdTMyYCAob3IgdW5zaWduZWQgaW50KSB0aGF0IHJlcHJlc2VudHMgZmxhZ3MsIHBvdGVudGlhbGx5IGluY2x1ZGluZyBgSU9SSU5HX0NRRV9GX0JVRkZFUmAgd2l0aCBpdHMgYnVmZmVyIElELCBjcml0aWNhbCBmb3IgaW91cmluZyBvcGVyYXRpb25zLiBOb3csIGxvb2tpbmcgYXQgdGhlIGNvbnRleHQsIHNwZWNpZmljYWxseSB3aXRoaW4gYGlvX2RvX2lvcG9sbGAgd2hlbiBoYW5kbGluZyBhbiBpb3BvbGwgcmVxdWVzdCBjb21wbGV0aW9uLCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gaG93IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGByZXEtJmd0O2NxZS5mbGFnc2AgZmllbGQuIFByZXZpb3VzbHksIHRoZSBsaW5lIHdhcyBzZXR0aW5nIGByZXEtJmd0O2NxZS5mbGFnc2AgKmVxdWFsIHRvKiB0aGUgcmVzdWx0IG9mIGBpb19wdXRfa2J1ZmAuIFRoZSBwYXRjaCBjbGV2ZXJseSBzd2FwcyB0aGlzIHRvIGEgKmJpdHdpc2UgT1IqIG9wZXJhdGlvbiAoYHw9YCkuIFRoaXMgaXMgYSBrZXkgZGV0YWlsLiBUaGlzIG1lYW5zIHRoYXQgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyBhbnkgZXhpc3RpbmcgZmxhZ3MgaW4gYHJlcS0mZ3Q7Y3FlLmZsYWdzYCwgd2UmIzM5O3JlIG5vdyAqYWRkaW5nKiB0aGUgZmxhZ3MgcmV0dXJuZWQgYnkgYGlvX3B1dF9rYnVmYC4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHByZXNlcnZpbmcgZXhpc3RpbmcgZmxhZyBzZXR0aW5ncy4gVGhlIGBtYXgocmVxLSZndDtjcWUucmVzLCAwKWAgY2FsbCBpcyBjb3JyZWN0bHkgaGFuZGxpbmcgcG90ZW50aWFsIG5lZ2F0aXZlIHJlc3VsdHMuIEl0JiMzOTtzIGEgdHlwaWNhbCBhcHByb2FjaCwgYWx0aG91Z2ggaW4gdGhpcyBpbnN0YW5jZSwgaXQmIzM5O3MgYSBnb29kIGlkZWEgdG8gY29uZmlybSBpZiBgcmVxLSZndDtjcWUucmVzYCBjb3VsZCBldmVyIGdlbnVpbmVseSBiZSBuZWdhdGl2ZSBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGlvX3B1dF9rYnVmYCBpdHNlbGYsIHNvIEkgbmVlZCB0byBjaGVjayBpdHMgZGVmaW5pdGlvbiBhbmQgdmVyaWZ5IGV4YWN0bHkgaG93IGl0cyByZXR1cm4gdmFsdWUgaW50ZXJhY3RzIHdpdGggdGhlIGZsYWdzLiBUaGlzIHdpbGwgY2xhcmlmeSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCB3aGV0aGVyIHRoaXMgYXBwcm9hY2ggdG8gZmxhZ3MgbWFuYWdlbWVudCBpcyBzb3VuZCBpbiB0aGUgY3VycmVudCBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3B1dF9rYnVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW9fdXJpbmcuYz05NDg9dm9pZCBpb19yZXFfZGVmZXJfZmFpbGVkKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzMzIgcmVzKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTU1LVx0cmVxX3NldF9mYWlsKHJlcSk7XG5pb191cmluZy9pb191cmluZy5jOjk1NjpcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmVzLCBpb19wdXRfa2J1ZihyZXEsIHJlcywgTlVMTCkpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy05NTctXHRpZiAoZGVmLVx1MDAzZWZhaWwpXG4tLVxuaW9fdXJpbmcva2J1Zi5jPTM4MT1pbnQgaW9fYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbi0tXG5pb191cmluZy9rYnVmLmMtNDA2LVxuaW9fdXJpbmcva2J1Zi5jOjQwNzpzdGF0aWMgaW5saW5lIGJvb2wgX19pb19wdXRfa2J1Zl9yaW5nKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcva2J1Zi5jLTQwOC1cdFx0XHRcdCAgICAgIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsIGludCBsZW4sIGludCBucilcbi0tXG5pb191cmluZy9rYnVmLmMtNDIwLVxuaW9fdXJpbmcva2J1Zi5jOjQyMTp1bnNpZ25lZCBpbnQgX19pb19wdXRfa2J1ZnMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXG5pb191cmluZy9rYnVmLmMtNDIyLVx0XHRcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTQzMi1cbmlvX3VyaW5nL2tidWYuYzo0MzM6XHRpZiAoIV9faW9fcHV0X2tidWZfcmluZyhyZXEsIGJsLCBsZW4sIG5idWZzKSlcbmlvX3VyaW5nL2tidWYuYy00MzQtXHRcdHJldCB8PSBJT1JJTkdfQ1FFX0ZfQlVGX01PUkU7XG4tLVxuaW9fdXJpbmcva2J1Zi5oPTg3PXZvaWQgaW9fa2J1Zl9kcm9wX2xlZ2FjeShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSk7XG5pb191cmluZy9rYnVmLmgtODgtXG5pb191cmluZy9rYnVmLmg6ODk6dW5zaWduZWQgaW50IF9faW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxuaW9fdXJpbmcva2J1Zi5oLTkwLVx0XHRcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpO1xuLS1cbmlvX3VyaW5nL2tidWYuaD0xMTQ9c3RhdGljIGlubGluZSBib29sIGlvX2tidWZfcmVjeWNsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbi0tXG5pb191cmluZy9rYnVmLmgtMTI1LVxuaW9fdXJpbmcva2J1Zi5oOjEyNjpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb19wdXRfa2J1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IGxlbixcbmlvX3VyaW5nL2tidWYuaC0xMjctXHRcdFx0XHQgICAgICAgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibClcbi0tXG5pb191cmluZy9rYnVmLmgtMTMwLVx0XHRyZXR1cm4gMDtcbmlvX3VyaW5nL2tidWYuaDoxMzE6XHRyZXR1cm4gX19pb19wdXRfa2J1ZnMocmVxLCBibCwgbGVuLCAxKTtcbmlvX3VyaW5nL2tidWYuaC0xMzItfVxuaW9fdXJpbmcva2J1Zi5oLTEzMy1cbmlvX3VyaW5nL2tidWYuaDoxMzQ6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgbGVuLFxuaW9fdXJpbmcva2J1Zi5oLTEzNS1cdFx0XHRcdFx0c3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCwgaW50IG5idWZzKVxuLS1cbmlvX3VyaW5nL2tidWYuaC0xMzgtXHRcdHJldHVybiAwO1xuaW9fdXJpbmcva2J1Zi5oOjEzOTpcdHJldHVybiBfX2lvX3B1dF9rYnVmcyhyZXEsIGJsLCBsZW4sIG5idWZzKTtcbmlvX3VyaW5nL2tidWYuaC0xNDAtfVxuLS1cbmlvX3VyaW5nL25ldC5jPTQ5MT1zdGF0aWMgaW5saW5lIGJvb2wgaW9fc2VuZF9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtNDk5LVx0aWYgKCEoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpKSB7XG5pb191cmluZy9uZXQuYzo1MDA6XHRcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgc2VsLVx1MDAzZXZhbCwgc2VsLVx1MDAzZWJ1Zl9saXN0KTtcbmlvX3VyaW5nL25ldC5jLTUwMS1cdFx0Z290byBmaW5pc2g7XG4tLVxuaW9fdXJpbmcvbmV0LmMtNTAzLVxuaW9fdXJpbmcvbmV0LmM6NTA0Olx0Y2ZsYWdzID0gaW9fcHV0X2tidWZzKHJlcSwgc2VsLVx1MDAzZXZhbCwgc2VsLVx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLVx1MDAzZXZhbCkpO1xuaW9fdXJpbmcvbmV0LmMtNTA1LVxuLS1cbmlvX3VyaW5nL25ldC5jPTg1Mz1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtODc5LVxuaW9fdXJpbmcvbmV0LmM6ODgwOlx0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHRoaXNfcmV0KSk7XG5pb191cmluZy9uZXQuYy04ODEtXHRcdGlmIChzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfUkVUUlkpXG4tLVxuaW9fdXJpbmcvbmV0LmMtOTAxLVx0fSBlbHNlIHtcbmlvX3VyaW5nL25ldC5jOjkwMjpcdFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgc2VsLVx1MDAzZXZhbCwgc2VsLVx1MDAzZWJ1Zl9saXN0KTtcbmlvX3VyaW5nL25ldC5jLTkwMy1cdH1cbi0tXG5pb191cmluZy9ydy5jPTU2Mj12b2lkIGlvX3JlcV9yd19jb21wbGV0ZShzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbi0tXG5pb191cmluZy9ydy5jLTU2OC1cdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IChSRVFfRl9CVUZGRVJfU0VMRUNURUR8UkVRX0ZfQlVGRkVSX1JJTkcpKVxuaW9fdXJpbmcvcncuYzo1Njk6XHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLVx1MDAzZWNxZS5yZXMsIDApLCBOVUxMKTtcbmlvX3VyaW5nL3J3LmMtNTcwLVxuLS1cbmlvX3VyaW5nL3J3LmM9NjQwPXN0YXRpYyBpbnQga2lvY2JfZG9uZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3NpemVfdCByZXQsXG4tLVxuaW9fdXJpbmcvcncuYy02NTctXHRcdGlmIChzZWwpXG5pb191cmluZy9ydy5jOjY1ODpcdFx0XHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHJldCwgc2VsLVx1MDAzZWJ1Zl9saXN0KTtcbmlvX3VyaW5nL3J3LmMtNjU5LVx0XHRpb19yZXFfc2V0X3JlcyhyZXEsIGZpbmFsX3JldCwgY2ZsYWdzKTtcbi0tXG5pb191cmluZy9ydy5jPTEwMzI9aW50IGlvX3JlYWRfbXNob3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9ydy5jLTEwNjctXHR9IGVsc2UgaWYgKCEocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9BUE9MTF9NVUxUSVNIT1QpKSB7XG5pb191cmluZy9ydy5jOjEwNjg6XHRcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgcmV0LCBzZWwuYnVmX2xpc3QpO1xuaW9fdXJpbmcvcncuYy0xMDY5LVx0fSBlbHNlIHtcbi0tXG5pb191cmluZy9ydy5jLTEwNzUtXHRcdCAqL1xuaW9fdXJpbmcvcncuYzoxMDc2Olx0XHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHJldCwgc2VsLmJ1Zl9saXN0KTtcbmlvX3VyaW5nL3J3LmMtMTA3Ny1cdFx0cnctXHUwMDNlbGVuID0gMDsgLyogc2ltaWxhcmx5IHRvIGFib3ZlLCByZXNldCBsZW4gdG8gMCAqL1xuLS1cbmlvX3VyaW5nL3J3LmM9MTMxOT1pbnQgaW9fZG9faW9wb2xsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGZvcmNlX25vbnNwaW4pXG4tLVxuaW9fdXJpbmcvcncuYy0xMzc1LVx0XHRucl9ldmVudHMmIzQzOyYjNDM7O1xuaW9fdXJpbmcvcncuYzoxMzc2Olx0XHRyZXEtXHUwMDNlY3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS1cdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XG5pb191cmluZy9ydy5jLTEzNzctXHRcdGlmICghaW9faXNfdXJpbmdfY21kKHJlcSkpXG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmM9Mzg3PWJvb2wgaW9fdXJpbmdfbXNob3RfY21kX3Bvc3RfY3FlKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbi0tXG5pb191cmluZy91cmluZ19jbWQuYy0zOTYtXHRpZiAoc2VsLVx1MDAzZXZhbCBcdTAwM2UgMCkge1xuaW9fdXJpbmcvdXJpbmdfY21kLmM6Mzk3Olx0XHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHNlbC1cdTAwM2V2YWwsIHNlbC1cdTAwM2VidWZfbGlzdCk7XG5pb191cmluZy91cmluZ19jbWQuYy0zOTgtXHRcdGlmIChpb19yZXFfcG9zdF9jcWUocmVxLCBzZWwtXHUwMDNldmFsLCBjZmxhZ3MgfCBJT1JJTkdfQ1FFX0ZfTU9SRSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzY4CgkJCQkJCQlvdXRwdXQ6IDIwNwoJCQkJCQkJdGhvdWdodHM6IDMzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYGlvX2RvX2lvcG9sbGAgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGlvX2RvX2lvcG9sbGAsIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgc3dpdGNoaW5nIGZyb20gYHJlcS0mZ3Q7Y3FlLmZsYWdzID0gaW9fcHV0X2tidWYoLi4uKWAgdG8gYHJlcS0mZ3Q7Y3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKC4uLilgLiBFc3NlbnRpYWxseSwgd2UmIzM5O3JlIG5vdyBwcmVzZXJ2aW5nIGFueSBleGlzdGluZyBmbGFncyB3aXRoaW4gYHJlcS0mZ3Q7Y3FlLmZsYWdzYCB3aGVuIGFkZGluZyBidWZmZXIgZmxhZ3MgZHVyaW5nIGlvcG9sbCBjb21wbGV0aW9uLiBUaGUgY3J1Y2lhbCB0aGluZyBoZXJlIGlzIG1ha2luZyBzdXJlIHRoYXQgd2UgYXJlbiYjMzk7dCBpbmFkdmVydGVudGx5IHdpcGluZyBvdXQgb3RoZXIsIHBvc3NpYmx5IGltcG9ydGFudCwgZmxhZ3MgdGhhdCBtaWdodCBhbHJlYWR5IGJlIHNldC4gVGhpcyBpcyBhIGNvbW1vbiBhbmQgdXN1YWxseSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGJ1ZyBmaXguCgpOb3csIHRoZSBLTVNBTiBhcHBsaWNhYmlsaXR5LiBEb2VzIHRoaXMgcGF0Y2ggb3BlbiBhbnkgZG9vcnMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBMZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LiBJJiMzOTttIG5vdCBzZWVpbmcgYW55IGtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbnMgdGhhdCBhcmUgdW5pbml0aWFsaXplZCBkdWUgdG8gdGhpcyBjaGFuZ2UuIE5vIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcyBvciBmaWVsZHMgYXJlIGludHJvZHVjZWQsIHRoYXQgd291bGQgYmUgYSByZWQgZmxhZy4gVGhlIGByZXEtJmd0O2NxZS5mbGFnc2AgZmllbGQgaXRzZWxmIGlzIGluaXRpYWxpemVkIGFuZCBkZWZpbmVkIGZyb20gdGhlIG1vbWVudCB0aGUgYHJlcWAgaXMgY3JlYXRlZC4gVGhlIGZpeCBpcyBhIHNpbXBsZSwgc2luZ2xlIGNoYXJhY3RlciBjaGFuZ2UsIHN3YXBwaW5nIGFuIGFzc2lnbm1lbnQgYD1gIHdpdGggYSBiaXR3aXNlIE9SIG9wZXJhdG9yIGB8PWAgb24gYW4gaW50ZWdlciBmaWVsZCAoYHJlcS0mZ3Q7Y3FlLmZsYWdzYCkuIFRoaXMgbWVhbnMgd2UgYXJlbiYjMzk7dCBjaGFuZ2luZyB0aGUgZnVuZGFtZW50YWwgbmF0dXJlIG9mIGhvdyB0aGlzIGZpZWxkIGlzIGhhbmRsZWQ7IGp1c3QgbW9kaWZ5aW5nIHRoZSB1cGRhdGUgcHJvY2Vzcy4gVGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBkYXRhIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBicmFuY2hpbmcgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgbm8gbWlzc2luZyBgbWVtc2V0YCBjYWxscywgd2hpY2ggYXJlIGFsbCB1c3VhbCBLTVNBTiBjb25jZXJucy4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGZpbmFsIHJldmlldyBvZiB0aGUgY3JpdGVyaWEuIEkgbmVlZCB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgY2FsbCBpdCBleGFjdGx5IG9uY2UuIFRoZSBkb2N1bWVudGF0aW9uIGVtcGhhc2l6ZXMgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYFRydWVgICpvbmx5KiBpZiB0aGVyZSBhcmUgY2hhbmdlcyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU2luY2UgdGhhdCYjMzk7cyBjbGVhcmx5IG5vdCB0aGUgY2FzZSBoZXJlLCBJJiMzOTttIGNvbmZpZGVudC4gSSBzaG91bGQgYWxzbyBiZSBjbGVhciBpbiBteSBgS01TQU5SZWFzb25pbmdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaW9fZG9faW9wb2xsKClgIGluIGBpb191cmluZy9ydy5jYCBieSBjaGFuZ2luZyBgcmVxLVx1MDAzZWNxZS5mbGFncyA9IGlvX3B1dF9rYnVmKC4uLilgIHRvIGByZXEtXHUwMDNlY3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKC4uLilgLiBUaGlzIGlzIGEgb25lLWxpbmUgbG9naWNhbCBmaXggZW5zdXJpbmcgdGhhdCBmbGFncyBhbHJlYWR5IHNldCBvbiBgcmVxLVx1MDAzZWNxZS5mbGFnc2AgKHN1Y2ggYXMgYElPUklOR19DUUVfRl8zMmApIGFyZSBwcmVzZXJ2ZWQgd2hlbiBhcHBlbmRpbmcgY29tcGxldGlvbiBmbGFncyBmb3IgcHJvdmlkZWQgYnVmZmVyIHJlbGVhc2UgZHVyaW5nIElPIHBvbGxpbmcuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGgvYm91bmRhcnkgY2FsY3VsYXRpb25zIGluIHdheXMgdGhhdCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgZG9lcyBub3QgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgZ2VuZXJhbCB0ZXN0aW5nIHN1ZmZpY2UgZm9yIHZlcmlmeWluZyBpb191cmluZyByZXF1ZXN0IGxpZmVjeWNsZSBjb3JyZWN0bmVzcywgYW5kIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpb19kb19pb3BvbGwoKWAgaW4gYGlvX3VyaW5nL3J3LmNgIGJ5IGNoYW5naW5nIGByZXEtXHUwMDNlY3FlLmZsYWdzID0gaW9fcHV0X2tidWYoLi4uKWAgdG8gYHJlcS1cdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYoLi4uKWAuIFRoaXMgaXMgYSBvbmUtbGluZSBsb2dpY2FsIGZpeCBlbnN1cmluZyB0aGF0IGZsYWdzIGFscmVhZHkgc2V0IG9uIGByZXEtXHUwMDNlY3FlLmZsYWdzYCAoc3VjaCBhcyBgSU9SSU5HX0NRRV9GXzMyYCkgYXJlIHByZXNlcnZlZCB3aGVuIGFwcGVuZGluZyBjb21wbGV0aW9uIGZsYWdzIGZvciBwcm92aWRlZCBidWZmZXIgcmVsZWFzZSBkdXJpbmcgSU8gcG9sbGluZy5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZGFyeSBjYWxjdWxhdGlvbnMgaW4gd2F5cyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBnZW5lcmFsIHRlc3Rpbmcgc3VmZmljZSBmb3IgdmVyaWZ5aW5nIGlvX3VyaW5nIHJlcXVlc3QgbGlmZWN5Y2xlIGNvcnJlY3RuZXNzLCBhbmQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjowMC43MDM4ODU5NjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjY3ODE0MDM3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX2RvX2lvcG9sbFwiLFxuICAgIFwiaW9faW9wb2xsX2NoZWNrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaW9fZG9faW9wb2xsKClgIGluIGBpb191cmluZy9ydy5jYCBieSBjaGFuZ2luZyBgcmVxLVxcdTAwM2VjcWUuZmxhZ3MgPSBpb19wdXRfa2J1ZiguLi4pYCB0byBgcmVxLVxcdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYoLi4uKWAuIFRoaXMgaXMgYSBvbmUtbGluZSBsb2dpY2FsIGZpeCBlbnN1cmluZyB0aGF0IGZsYWdzIGFscmVhZHkgc2V0IG9uIGByZXEtXFx1MDAzZWNxZS5mbGFnc2AgKHN1Y2ggYXMgYElPUklOR19DUUVfRl8zMmApIGFyZSBwcmVzZXJ2ZWQgd2hlbiBhcHBlbmRpbmcgY29tcGxldGlvbiBmbGFncyBmb3IgcHJvdmlkZWQgYnVmZmVyIHJlbGVhc2UgZHVyaW5nIElPIHBvbGxpbmcuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZGFyeSBjYWxjdWxhdGlvbnMgaW4gd2F5cyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBnZW5lcmFsIHRlc3Rpbmcgc3VmZmljZSBmb3IgdmVyaWZ5aW5nIGlvX3VyaW5nIHJlcXVlc3QgbGlmZWN5Y2xlIGNvcnJlY3RuZXNzLCBhbmQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGlvX2RvX2lvcG9sbCgpIHRvIGJpdHdpc2UtT1IgdGhlIGZsYWdzIHJldHVybmVkIGJ5IGlvX3B1dF9rYnVmKCkgaW50byByZXEtXFx1MDAzZWNxZS5mbGFncyBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIHRoZW0sIHByZXZlbnRpbmcgdGhlIGxvc3Mgb2YgZXhpc3RpbmcgQ1FFIGZsYWdzIGR1cmluZyBwb2xsZWQgSS9PIGNvbXBsZXRpb24uIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBpb191cmluZyBjb21wbGV0aW9uIGxvZ2ljLCB3YXJyYW50aW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjAwLjcwMzg5MDc1M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIyMTcyODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWRjMWZiYzkxMTQ1MWYyZTk3ZjdiMDQ3YTVjN2U5MTkyYjBlOTVhM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDIwOjI1OjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3J3LmMgYi9pb191cmluZy9ydy5jXFxuaW5kZXggOTUxMDZkZDFkN2ViOS4uZjJiYmIwYjFjMzBhMSAxMDA2NDRcXG4tLS0gYS9pb191cmluZy9ydy5jXFxuKysrIGIvaW9fdXJpbmcvcncuY1xcbkBAIC0xMzczLDcgKzEzNzMsNyBAQCBpbnQgaW9fZG9faW9wb2xsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGZvcmNlX25vbnNwaW4pXFxuIFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZyZXEtXFx1MDAzZWlvcG9sbF9ub2RlKTtcXG4gXFx0XFx0d3FfbGlzdF9hZGRfdGFpbChcXHUwMDI2cmVxLVxcdTAwM2Vjb21wX2xpc3QsIFxcdTAwMjZjdHgtXFx1MDAzZXN1Ym1pdF9zdGF0ZS5jb21wbF9yZXFzKTtcXG4gXFx0XFx0bnJfZXZlbnRzKys7XFxuLVxcdFxcdHJlcS1cXHUwMDNlY3FlLmZsYWdzID0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLVxcdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XFxuK1xcdFxcdHJlcS1cXHUwMDNlY3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS1cXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO1xcbiBcXHRcXHRpZiAoIWlvX2lzX3VyaW5nX2NtZChyZXEpKVxcbiBcXHRcXHRcXHRpb19yZXFfcndfY2xlYW51cChyZXEsIDApO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjAxLjEyNjc4NzU3NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzI4NjI2NjcyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19kb19pb3BvbGxcIixcbiAgICBcImlvX2lvcG9sbF9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGlvX2RvX2lvcG9sbCgpIHRvIGJpdHdpc2UtT1IgdGhlIGZsYWdzIHJldHVybmVkIGJ5IGlvX3B1dF9rYnVmKCkgaW50byByZXEtXFx1MDAzZWNxZS5mbGFncyBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIHRoZW0sIHByZXZlbnRpbmcgdGhlIGxvc3Mgb2YgZXhpc3RpbmcgQ1FFIGZsYWdzIGR1cmluZyBwb2xsZWQgSS9PIGNvbXBsZXRpb24uIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBpb191cmluZyBjb21wbGV0aW9uIGxvZ2ljLCB3YXJyYW50aW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWRjMWZiYzkxMTQ1MWYyZTk3ZjdiMDQ3YTVjN2U5MTkyYjBlOTVhM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjA6MjU6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9ydy5jIGIvaW9fdXJpbmcvcncuY1xuaW5kZXggOTUxMDZkZDFkN2ViOS4uZjJiYmIwYjFjMzBhMSAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3J3LmNcbisrKyBiL2lvX3VyaW5nL3J3LmNcbkBAIC0xMzczLDcgKzEzNzMsNyBAQCBpbnQgaW9fZG9faW9wb2xsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGZvcmNlX25vbnNwaW4pXG4gXHRcdGxpc3RfZGVsKFx1MDAyNnJlcS1cdTAwM2Vpb3BvbGxfbm9kZSk7XG4gXHRcdHdxX2xpc3RfYWRkX3RhaWwoXHUwMDI2cmVxLVx1MDAzZWNvbXBfbGlzdCwgXHUwMDI2Y3R4LVx1MDAzZXN1Ym1pdF9zdGF0ZS5jb21wbF9yZXFzKTtcbiBcdFx0bnJfZXZlbnRzKys7XG4tXHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO1xuK1x0XHRyZXEtXHUwMDNlY3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS1cdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XG4gXHRcdGlmICghaW9faXNfdXJpbmdfY21kKHJlcSkpXG4gXHRcdFx0aW9fcmVxX3J3X2NsZWFudXAocmVxLCAwKTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjAxLjEyNjc5MDUwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1NDgwMzcwMTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgdGhlIGlvX3VyaW5nIFBhdGNoIGZvciBGdXp6aW5nIHdpdGggc3l6a2FsbGVyKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkndmUgZ290IGEgbmV3IHBhdGNoIGZvciB0aGUgTGludXgga2VybmVsIHRoYXQgSSBuZWVkIHRvIGFzc2VzcyBmb3IgZnV6emluZyBwb3RlbnRpYWwgdXNpbmcgc3l6a2FsbGVyLiBUaGlzIGlzIHByZXR0eSBzdGFuZGFyZCBzdHVmZiDigJMgcGFydCBvZiB0aGUgcmVndWxhciBrZXJuZWwgcmV2aWV3IGFuZCB0cmlhZ2UgcHJvY2Vzcywgd2hldGhlciBpdCdzIGJlbmlnbiBkZXZlbG9wZXIgUUEgb3Igc2VjdXJpdHkgZW5naW5lZXJpbmcuIFRoZSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGEganVpY3kgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5JJ3ZlIGdvdCB0aGUgcGF0Y2ggaW4gZnJvbnQgb2YgbWU6IGBjb21taXQgMWRjMWZiYzkxMTQ1MWYyZTk3ZjdiMDQ3YTVjN2U5MTkyYjBlOTVhM2AuIExvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBgaW9fdXJpbmcvcncuY2AuIFNwZWNpZmljYWxseSwgdGhlIGRpZmYgbW9kaWZpZXMgYSBsaW5lIGluIGBpb19kb19pb3BvbGxgOlxuXG5gYGBkaWZmXG4tXHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO1xuK1x0XHRyZXEtXHUwMDNlY3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS1cdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XG5gYGBcblxuT2theSwgc28gdGhleSdyZSBjaGFuZ2luZyB0aGUgYXNzaWdubWVudCBvZiBgcmVxLVx1MDAzZWNxZS5mbGFnc2AgdG8gYSBiaXR3aXNlIE9SLiBUaGlzIGlzIHRoZSBrZXkgbGluZSB0byBpbnZlc3RpZ2F0ZS4gTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gZGl2ZSBkZWVwZXIuIEknbSBnb2luZyB0byB1c2UgbXkgc3RhbmRhcmQgdG9vbHMg4oCTIGxpa2VseSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAg4oCTIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gd2hhdCdzIGdvaW5nIG9uIGluIGBpb191cmluZy9ydy5jYCBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaW9fcHV0X2tidWZgIGRvZXMsIGhvdyBgcmVxLVx1MDAzZWNxZS5mbGFnc2AgaXMgdXNlZCwgYW5kIHdoYXQgZWZmZWN0IHRoaXMgY2hhbmdlIG1pZ2h0IGhhdmUgb24gdGhlIG92ZXJhbGwgZmxvdy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBjaGFuZ2UgYWZmZWN0cyBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYm91bmRhcnkgY29uZGl0aW9ucywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjkzMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjE2LjYwNzE2MzIyOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL3J3LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM1MDpcXHRcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9IWUJSSURfSU9QT0xMKVxcbjEzNTE6XFx0XFx0XFx0XFx0cmV0ID0gaW9fdXJpbmdfaHlicmlkX3BvbGwocmVxLCBcXHUwMDI2aW9iLCBwb2xsX2ZsYWdzKTtcXG4xMzUyOlxcdFxcdFxcdGVsc2VcXG4xMzUzOlxcdFxcdFxcdFxcdHJldCA9IGlvX3VyaW5nX2NsYXNzaWNfcG9sbChyZXEsIFxcdTAwMjZpb2IsIHBvbGxfZmxhZ3MpO1xcbjEzNTQ6XFx0XFxuMTM1NTpcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpXFxuMTM1NjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzNTc6XFx0XFx0XFx0ZWxzZSBpZiAocmV0KVxcbjEzNTg6XFx0XFx0XFx0XFx0cG9sbF9mbGFncyB8PSBCTEtfUE9MTF9PTkVTSE9UO1xcbjEzNTk6XFx0XFxuMTM2MDpcXHRcXHRcXHQvKiBpb3BvbGwgbWF5IGhhdmUgY29tcGxldGVkIGN1cnJlbnQgcmVxICovXFxuMTM2MTpcXHRcXHRcXHRpZiAoIXJxX2xpc3RfZW1wdHkoXFx1MDAyNmlvYi5yZXFfbGlzdCkgfHxcXG4xMzYyOlxcdFxcdFxcdCAgICBSRUFEX09OQ0UocmVxLVxcdTAwM2Vpb3BvbGxfY29tcGxldGVkKSlcXG4xMzYzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEzNjQ6XFx0XFx0fVxcbjEzNjU6XFx0XFxuMTM2NjpcXHRcXHRpZiAoIXJxX2xpc3RfZW1wdHkoXFx1MDAyNmlvYi5yZXFfbGlzdCkpXFxuMTM2NzpcXHRcXHRcXHRpb2IuY29tcGxldGUoXFx1MDAyNmlvYik7XFxuMTM2ODpcXHRcXG4xMzY5OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHRtcCwgXFx1MDAyNmN0eC1cXHUwMDNlaW9wb2xsX2xpc3QsIGlvcG9sbF9ub2RlKSB7XFxuMTM3MDpcXHRcXHRcXHQvKiBvcmRlciB3aXRoIGlvX2NvbXBsZXRlX3J3X2lvcG9sbCgpLCBlLmcuIC1cXHUwMDNlcmVzdWx0IHVwZGF0ZXMgKi9cXG4xMzcxOlxcdFxcdFxcdGlmICghc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2cmVxLVxcdTAwM2Vpb3BvbGxfY29tcGxldGVkKSlcXG4xMzcyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEzNzM6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnJlcS1cXHUwMDNlaW9wb2xsX25vZGUpO1xcbjEzNzQ6XFx0XFx0XFx0d3FfbGlzdF9hZGRfdGFpbChcXHUwMDI2cmVxLVxcdTAwM2Vjb21wX2xpc3QsIFxcdTAwMjZjdHgtXFx1MDAzZXN1Ym1pdF9zdGF0ZS5jb21wbF9yZXFzKTtcXG4xMzc1OlxcdFxcdFxcdG5yX2V2ZW50cysrO1xcbjEzNzY6XFx0XFx0XFx0cmVxLVxcdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLVxcdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XFxuMTM3NzpcXHRcXHRcXHRpZiAoIWlvX2lzX3VyaW5nX2NtZChyZXEpKVxcbjEzNzg6XFx0XFx0XFx0XFx0aW9fcmVxX3J3X2NsZWFudXAocmVxLCAwKTtcXG4xMzc5OlxcdFxcdH1cXG4xMzgwOlxcdFxcdGlmIChucl9ldmVudHMpXFxuMTM4MTpcXHRcXHRcXHRfX2lvX3N1Ym1pdF9mbHVzaF9jb21wbGV0aW9ucyhjdHgpO1xcbjEzODI6XFx0XFx0cmV0dXJuIG5yX2V2ZW50cztcXG4xMzgzOlxcdH1cXG4xMzg0OlxcdFxcbjEzODU6XFx0dm9pZCBpb19yd19jYWNoZV9mcmVlKGNvbnN0IHZvaWQgKmVudHJ5KVxcbjEzODY6XFx0e1xcbjEzODc6XFx0XFx0c3RydWN0IGlvX2FzeW5jX3J3ICpydyA9IChzdHJ1Y3QgaW9fYXN5bmNfcncgKikgZW50cnk7XFxuMTM4ODpcXHRcXG4xMzg5OlxcdFxcdGlvX3ZlY19mcmVlKFxcdTAwMjZydy1cXHUwMDNldmVjKTtcXG4xMzkwOlxcdFxcdGtmcmVlKHJ3KTtcXG4xMzkxOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MTYuNjA3MjU5NTU5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk3OTY3NzI1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBpb191cmluZyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0aGlzIHNvcnRlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uKHMpIHRoYXQgZW5hYmxlIGlvX3VyaW5nLCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgYGlvX2RvX2lvcG9sbGAgZmVhdHVyZS4gSSdtIHByZXR0eSBzdXJlIGl0J3MgY29udHJvbGxlZCB0aHJvdWdoIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgc28gSSBzaG91bGQgYmUgYWJsZSB0byB0cmFjayBpdCBkb3duIGluIEtjb25maWcuIFRoZSBzb3VyY2UgY29kZSBpcyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gTGV0IG1lIGhlYWQgdGhlcmUgYW5kIHNlZSB3aGF0J3Mgd2hhdC4gU2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0ODYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjE4LjU4NjkzOTE1NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI2MTU3ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU9fVVJJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzMwIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5pb191cmluZy9LY29uZmlnLTUtXFxuaW9fdXJpbmcvS2NvbmZpZzo2OmNvbmZpZyBJT19VUklOR19aQ1JYXFxuaW9fdXJpbmcvS2NvbmZpZy03LVxcdGRlZl9ib29sIHlcXG5pb191cmluZy9LY29uZmlnOjg6XFx0ZGVwZW5kcyBvbiBJT19VUklOR1xcbmlvX3VyaW5nL0tjb25maWctOS1cXHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cXG5pb191cmluZy9LY29uZmlnOjEzOmNvbmZpZyBJT19VUklOR19CUEZcXG5pb191cmluZy9LY29uZmlnLTE0LVxcdGRlZl9ib29sIHlcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctMTctXFxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xcbmlvX3VyaW5nL0tjb25maWctMTktXFx0ZGVmX2Jvb2wgeVxcbmlvX3VyaW5nL0tjb25maWc6MjA6XFx0ZGVwZW5kcyBvbiBJT19VUklOR1xcbmlvX3VyaW5nL0tjb25maWctMjEtXFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUIFxcdTAwMjZcXHUwMDI2IERFQlVHX0lORk9fQlRGXFxuLS1cXG5pb191cmluZy9NYWtlZmlsZT03PWVuZGlmXFxuaW9fdXJpbmcvTWFrZWZpbGUtOC1cXG5pb191cmluZy9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19JT19VUklORylcXHRcXHQrPSBpb191cmluZy5vIG9wZGVmLm8ga2J1Zi5vIHJzcmMubyBub3RpZi5vIFxcXFxcXG5pb191cmluZy9NYWtlZmlsZS0xMC1cXHRcXHRcXHRcXHRcXHR0Y3R4Lm8gZmlsZXRhYmxlLm8gcncubyBwb2xsLm8gXFxcXFxcbi0tXFxuaW9fdXJpbmcvTWFrZWZpbGUtMTgtXFxuaW9fdXJpbmcvTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX0lPX1VSSU5HX1pDUlgpXFx0Kz0gemNyeC5vXFxuaW9fdXJpbmcvTWFrZWZpbGUtMjAtb2JqLSQoQ09ORklHX0lPX1dRKVxcdFxcdCs9IGlvLXdxLm9cXG4tLVxcbmlvX3VyaW5nL01ha2VmaWxlPTI1PW9iai0kKENPTkZJR19QUk9DX0ZTKSArPSBmZGluZm8ub1xcbmlvX3VyaW5nL01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19JT19VUklOR19NT0NLX0ZJTEUpICs9IG1vY2tfZmlsZS5vXFxuaW9fdXJpbmcvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0lPX1VSSU5HX0JQRikgKz0gYnBmX2ZpbHRlci5vXFxuaW9fdXJpbmcvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0lPX1VSSU5HX0JQRl9PUFMpICs9IGJwZi1vcHMub1xcbi0tXFxuaW9fdXJpbmcvYWR2aXNlLmM9NTE9aW50IGlvX21hZHZpc2Uoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL2FkdmlzZS5jLTU2LVxcbmlvX3VyaW5nL2FkdmlzZS5jOjU3OlxcdFdBUk5fT05fT05DRShpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spO1xcbmlvX3VyaW5nL2FkdmlzZS5jLTU4LVxcbi0tXFxuaW9fdXJpbmcvYWR2aXNlLmM9OTY9aW50IGlvX2ZhZHZpc2Uoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL2FkdmlzZS5jLTEwMC1cXG5pb191cmluZy9hZHZpc2UuYzoxMDE6XFx0V0FSTl9PTl9PTkNFKGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSyBcXHUwMDI2XFx1MDAyNiBpb19mYWR2aXNlX2ZvcmNlX2FzeW5jKGZhKSk7XFxuaW9fdXJpbmcvYWR2aXNlLmMtMTAyLVxcbi0tXFxuaW9fdXJpbmcvYnBmLW9wcy5oPTEzPXN0cnVjdCBpb191cmluZ19icGZfb3BzIHtcXG4tLVxcbmlvX3VyaW5nL2JwZi1vcHMuaC0xOS1cXG5pb191cmluZy9icGYtb3BzLmg6MjA6I2lmZGVmIENPTkZJR19JT19VUklOR19CUEZfT1BTXFxuaW9fdXJpbmcvYnBmLW9wcy5oLTIxLXZvaWQgaW9fdW5yZWdpc3Rlcl9icGZfb3BzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KTtcXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYz0yNjY9c3RhdGljIHN0cnVjdCBpb19icGZfZmlsdGVycyAqaW9fYnBmX2ZpbHRlcl9jb3coc3RydWN0IGlvX3Jlc3RyaWN0aW9uICpzcmMpXFxuLS1cXG5pb191cmluZy9icGZfZmlsdGVyLmMtMzA5LVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYzozMTA6I2RlZmluZSBJT19VUklOR19CUEZfRklMVEVSX0ZMQUdTXFx0KElPX1VSSU5HX0JQRl9GSUxURVJfREVOWV9SRVNUIHwgXFxcXFxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYzozMTE6XFx0XFx0XFx0XFx0XFx0IElPX1VSSU5HX0JQRl9GSUxURVJfU1pfU1RSSUNUKVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy0zMTItXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jPTMxMz1zdGF0aWMgaW50IGlvX2JwZl9maWx0ZXJfaW1wb3J0KHN0cnVjdCBpb191cmluZ19icGYgKnJlZyxcXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy0zMjAtXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jOjMyMTpcXHRpZiAocmVnLVxcdTAwM2VjbWRfdHlwZSAhPSBJT19VUklOR19CUEZfQ01EX0ZJTFRFUilcXG5pb191cmluZy9icGZfZmlsdGVyLmMtMzIyLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTMyNy1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5pb191cmluZy9icGZfZmlsdGVyLmM6MzI4OlxcdGlmIChyZWctXFx1MDAzZWZpbHRlci5mbGFncyBcXHUwMDI2IH5JT19VUklOR19CUEZfRklMVEVSX0ZMQUdTKVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy0zMjktXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5pb191cmluZy9icGZfZmlsdGVyLmMtMzQ0LVxcdC8qIHNpemUgZGlmZmVycywgZmFpbCBpbiBzdHJpY3QgbW9kZSAqL1xcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYzozNDU6XFx0ZWxzZSBpZiAocmVnLVxcdTAwM2VmaWx0ZXIuZmxhZ3MgXFx1MDAyNiBJT19VUklOR19CUEZfRklMVEVSX1NaX1NUUklDVClcXG5pb191cmluZy9icGZfZmlsdGVyLmMtMzQ2LVxcdFxcdHJldCA9IC1FTVNHU0laRTtcXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYz0zNTk9aW50IGlvX3JlZ2lzdGVyX2JwZl9maWx0ZXIoc3RydWN0IGlvX3Jlc3RyaWN0aW9uICpyZXMsXFxuLS1cXG5pb191cmluZy9icGZfZmlsdGVyLmMtNDMzLVxcdC8qXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jOjQzNDpcXHQgKiBJZiBJT19VUklOR19CUEZfRklMVEVSX0RFTllfUkVTVCBpcyBzZXQsIGZpbGwgYW55IHVucmVnaXN0ZXJlZFxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy00MzUtXFx0ICogb3Bjb2RlIHdpdGggdGhlIGR1bW15IGZpbHRlci4gVGhhdCB3aWxsIGNhdXNlIHRoZW0gdG8gYmUgZGVuaWVkLlxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy00MzYtXFx0ICovXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jOjQzNzpcXHRpZiAocmVnLmZpbHRlci5mbGFncyBcXHUwMDI2IElPX1VSSU5HX0JQRl9GSUxURVJfREVOWV9SRVNUKSB7XFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTQzOC1cXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIElPUklOR19PUF9MQVNUOyBpKyspIHtcXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oOjI6I2lmbmRlZiBJT19VUklOR19CUEZfRklMVEVSX0hcXG5pb191cmluZy9icGZfZmlsdGVyLmg6MzojZGVmaW5lIElPX1VSSU5HX0JQRl9GSUxURVJfSFxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC00LVxcbi0tXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTYtXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oOjc6I2lmZGVmIENPTkZJR19JT19VUklOR19CUEZcXG5pb191cmluZy9icGZfZmlsdGVyLmgtOC1cXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaD00Mj1zdGF0aWMgaW5saW5lIHZvaWQgaW9fYnBmX2ZpbHRlcl9jbG9uZShzdHJ1Y3QgaW9fcmVzdHJpY3Rpb24gKmRzdCxcXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC00NS19XFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oOjQ2OiNlbmRpZiAvKiBDT05GSUdfSU9fVVJJTkdfQlBGICovXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTQ3LVxcbi0tXFxuaW9fdXJpbmcvY21kX25ldC5jPTI1PXN0YXRpYyBpbmxpbmUgaW50IGlvX3VyaW5nX2NtZF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5pb191cmluZy9jbWRfbmV0LmMtMjktXFx0Y29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlID0gY21kLVxcdTAwM2VzcWU7XFxuaW9fdXJpbmcvY21kX25ldC5jOjMwOlxcdGJvb2wgY29tcGF0ID0gISEoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX0NPTVBBVCk7XFxuaW9fdXJpbmcvY21kX25ldC5jLTMxLVxcdGludCBvcHRsZW4sIG9wdG5hbWUsIGxldmVsLCBlcnI7XFxuLS1cXG5pb191cmluZy9jbWRfbmV0LmM9NTI9c3RhdGljIGlubGluZSBpbnQgaW9fdXJpbmdfY21kX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbmlvX3VyaW5nL2NtZF9uZXQuYy01Ni1cXHRjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUgPSBjbWQtXFx1MDAzZXNxZTtcXG5pb191cmluZy9jbWRfbmV0LmM6NTc6XFx0Ym9vbCBjb21wYXQgPSAhIShpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfQ09NUEFUKTtcXG5pb191cmluZy9jbWRfbmV0LmMtNTgtXFx0aW50IG9wdG5hbWUsIG9wdGxlbiwgbGV2ZWw7XFxuLS1cXG5pb191cmluZy9jbWRfbmV0LmM9MTA0PXN0YXRpYyBpbnQgaW9fdXJpbmdfY21kX3RpbWVzdGFtcChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxuaW9fdXJpbmcvY21kX25ldC5jLTExMy1cXG5pb191cmluZy9jbWRfbmV0LmM6MTE0OlxcdGlmICghKGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9DUUUzMikpXFxuaW9fdXJpbmcvY21kX25ldC5jLTExNS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmlvX3VyaW5nL2Vwb2xsLmM9NTE9aW50IGlvX2Vwb2xsX2N0bChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvZXBvbGwuYy01My1cXHRzdHJ1Y3QgaW9fZXBvbGwgKmllID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2Vwb2xsKTtcXG5pb191cmluZy9lcG9sbC5jOjU0OlxcdGJvb2wgZm9yY2Vfbm9uYmxvY2sgPSBpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0s7XFxuaW9fdXJpbmcvZXBvbGwuYy01NS1cXHRzdHJ1Y3QgZXBvbGxfa2V5IGtleTtcXG4tLVxcbmlvX3VyaW5nL2ZkaW5mby5jPTM0PXN0YXRpYyBfX2NvbGQgdm9pZCBuYXBpX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvZmRpbmZvLmMtMzktXFx0c3dpdGNoIChtb2RlKSB7XFxuaW9fdXJpbmcvZmRpbmZvLmM6NDA6XFx0Y2FzZSBJT19VUklOR19OQVBJX1RSQUNLSU5HX0lOQUNUSVZFOlxcbmlvX3VyaW5nL2ZkaW5mby5jLTQxLVxcdFxcdHNlcV9wdXRzKG0sIFxcXCJOQVBJOlxcXFx0ZGlzYWJsZWRcXFxcblxcXCIpO1xcbmlvX3VyaW5nL2ZkaW5mby5jLTQyLVxcdFxcdGJyZWFrO1xcbmlvX3VyaW5nL2ZkaW5mby5jOjQzOlxcdGNhc2UgSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19EWU5BTUlDOlxcbmlvX3VyaW5nL2ZkaW5mby5jLTQ0LVxcdFxcdGNvbW1vbl90cmFja2luZ19zaG93X2ZkaW5mbyhjdHgsIG0sIFxcXCJkeW5hbWljXFxcIik7XFxuaW9fdXJpbmcvZmRpbmZvLmMtNDUtXFx0XFx0YnJlYWs7XFxuaW9fdXJpbmcvZmRpbmZvLmM6NDY6XFx0Y2FzZSBJT19VUklOR19OQVBJX1RSQUNLSU5HX1NUQVRJQzpcXG5pb191cmluZy9mZGluZm8uYy00Ny1cXHRcXHRjb21tb25fdHJhY2tpbmdfc2hvd19mZGluZm8oY3R4LCBtLCBcXFwic3RhdGljXFxcIik7XFxuLS1cXG5pb191cmluZy9mcy5jPTgyPWludCBpb19yZW5hbWVhdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvZnMuYy04OC1cXG5pb191cmluZy9mcy5jOjg5OlxcdFdBUk5fT05fT05DRShpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spO1xcbmlvX3VyaW5nL2ZzLmMtOTAtXFxuLS1cXG5pb191cmluZy9mcy5jPTEzNT1pbnQgaW9fdW5saW5rYXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL2ZzLmMtMTQwLVxcbmlvX3VyaW5nL2ZzLmM6MTQxOlxcdFdBUk5fT05fT05DRShpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spO1xcbmlvX3VyaW5nL2ZzLmMtMTQyLVxcbi0tXFxuaW9fdXJpbmcvZnMuYz0xODQ9aW50IGlvX21rZGlyYXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL2ZzLmMtMTg5LVxcbmlvX3VyaW5nL2ZzLmM6MTkwOlxcdFdBUk5fT05fT05DRShpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spO1xcbmlvX3VyaW5nL2ZzLmMtMTkxLVxcbi0tXFxuaW9fdXJpbmcvZnMuYz0yMzY9aW50IGlvX3N5bWxpbmthdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvZnMuYy0yNDItXFxuaW9fdXJpbmcvZnMuYzoyNDM6XFx0V0FSTl9PTl9PTkNFKGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSyk7XFxuaW9fdXJpbmcvZnMuYy0yNDQtXFxuLS1cXG5pb191cmluZy9mcy5jPTI4ND1pbnQgaW9fbGlua2F0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9mcy5jLTI5MC1cXG5pb191cmluZy9mcy5jOjI5MTpcXHRXQVJOX09OX09OQ0UoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKTtcXG5pb191cmluZy9mcy5jLTI5Mi1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9MTM0Nz1zdGF0aWMgdm9pZCBpb193cV9leGl0X3dvcmtlcnMoc3RydWN0IGlvX3dxICp3cSlcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTM2OC1cXHQgKiB1bmludGVycnVwdGlibHkgZm9yIGhhbGYgdGhhdCB0aW1lLCBhbmQgd2FybiBpZiB3ZSBleGNlZWRlZCBlbmRcXG5pb191cmluZy9pby13cS5jOjEzNjk6XFx0ICogdXAgd2FpdGluZyBtb3JlIHRoYW4gSU9fVVJJTkdfRVhJVF9XQUlUX01BWC5cXG5pb191cmluZy9pby13cS5jLTEzNzAtXFx0ICovXFxuLS1cXG5pb191cmluZy9pby13cS5jLTEzNzMtXFx0XFx0dGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUO1xcbmlvX3VyaW5nL2lvLXdxLmM6MTM3NDpcXHR3YXJuX3RpbWVvdXQgPSBqaWZmaWVzICsgSU9fVVJJTkdfRVhJVF9XQUlUX01BWDtcXG5pb191cmluZy9pby13cS5jLTEzNzUtXFx0ZG8ge1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNTQ9c3RhdGljIHZvaWQgaW9fcG9pc29uX2NhY2hlZF9yZXEoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNTUte1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTU2OlxcdHJlcS1cXHUwMDNlY3R4ID0gSU9fVVJJTkdfUFRSX1BPSVNPTjtcXG5pb191cmluZy9pb191cmluZy5jOjE1NzpcXHRyZXEtXFx1MDAzZXRjdHggPSBJT19VUklOR19QVFJfUE9JU09OO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTU4OlxcdHJlcS1cXHUwMDNlZmlsZSA9IElPX1VSSU5HX1BUUl9QT0lTT047XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNTk6XFx0cmVxLVxcdTAwM2VjcmVkcyA9IElPX1VSSU5HX1BUUl9QT0lTT047XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNjA6XFx0cmVxLVxcdTAwM2Vpb190YXNrX3dvcmsuZnVuYyA9IElPX1VSSU5HX1BUUl9QT0lTT047XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNjE6XFx0cmVxLVxcdTAwM2VhcG9sbCA9IElPX1VSSU5HX1BUUl9QT0lTT047XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNjItfVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNjQ9dm9pZCBpb19wb2lzb25fcmVxKHN0cnVjdCBpb19raW9jYiAqcmVxKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNjYtXFx0aW9fcG9pc29uX2NhY2hlZF9yZXEocmVxKTtcXG5pb191cmluZy9pb191cmluZy5jOjE2NzpcXHRyZXEtXFx1MDAzZWFzeW5jX2RhdGEgPSBJT19VUklOR19QVFJfUE9JU09OO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTY4OlxcdHJlcS1cXHUwMDNla2J1ZiA9IElPX1VSSU5HX1BUUl9QT0lTT047XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNjk6XFx0cmVxLVxcdTAwM2Vjb21wX2xpc3QubmV4dCA9IElPX1VSSU5HX1BUUl9QT0lTT047XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNzA6XFx0cmVxLVxcdTAwM2VmaWxlX25vZGUgPSBJT19VUklOR19QVFJfUE9JU09OO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTcxOlxcdHJlcS1cXHUwMDNlbGluayA9IElPX1VSSU5HX1BUUl9QT0lTT047XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNzItfVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz04NDA9dm9pZCBpb19hZGRfYXV4X2NxZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdTY0IHVzZXJfZGF0YSwgczMyIHJlcywgdTMyIGNmbGFncylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtODU0LSAqIEEgaGVscGVyIGZvciBtdWx0aXNob3QgcmVxdWVzdHMgcG9zdGluZyBhZGRpdGlvbmFsIENRRXMuXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo4NTU6ICogU2hvdWxkIG9ubHkgYmUgdXNlZCBmcm9tIGEgdGFza193b3JrIGluY2x1ZGluZyBJT19VUklOR19GX01VTFRJU0hPVC5cXG5pb191cmluZy9pb191cmluZy5jLTg1Ni0gKi9cXG5pb191cmluZy9pb191cmluZy5jPTg1Nz1ib29sIGlvX3JlcV9wb3N0X2NxZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgczMyIHJlcywgdTMyIGNmbGFncylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtODg2LSAqIEEgaGVscGVyIGZvciBtdWx0aXNob3QgcmVxdWVzdHMgcG9zdGluZyBhZGRpdGlvbmFsIENRRXMuXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo4ODc6ICogU2hvdWxkIG9ubHkgYmUgdXNlZCBmcm9tIGEgdGFza193b3JrIGluY2x1ZGluZyBJT19VUklOR19GX01VTFRJU0hPVC5cXG5pb191cmluZy9pb191cmluZy5jLTg4OC0gKi9cXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9OTEwPXN0YXRpYyB2b2lkIGlvX3JlcV9jb21wbGV0ZV9wb3N0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTE2LVxcdCAqIEFsbCBleGVjdXRpb24gcGF0aHMgYnV0IGlvLXdxIHVzZSB0aGUgZGVmZXJyZWQgY29tcGxldGlvbnMgYnlcXG5pb191cmluZy9pb191cmluZy5jOjkxNzpcXHQgKiBwYXNzaW5nIElPX1VSSU5HX0ZfQ09NUExFVEVfREVGRVIgYW5kIHRodXMgc2hvdWxkIG5vdCBlbmQgdXAgaGVyZS5cXG5pb191cmluZy9pb191cmluZy5jLTkxOC1cXHQgKi9cXG5pb191cmluZy9pb191cmluZy5jOjkxOTpcXHRpZiAoV0FSTl9PTl9PTkNFKCEoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX0lPV1EpKSlcXG5pb191cmluZy9pb191cmluZy5jLTkyMC1cXHRcXHRyZXR1cm47XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTEyNzQ9c3RhdGljIHZvaWQgaW9faW9wb2xsX3JlcV9pc3N1ZWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTI3Ni1cXHRzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCA9IHJlcS1cXHUwMDNlY3R4O1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTI3NzpcXHRjb25zdCBib29sIG5lZWRzX2xvY2sgPSBpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfVU5MT0NLRUQ7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xMjc4LVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNDAxPXN0YXRpYyBpbnQgaW9faXNzdWVfc3FlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTE0MTEtXFx0aWYgKHJldCA9PSBJT1VfQ09NUExFVEUpIHtcXG5pb191cmluZy9pb191cmluZy5jOjE0MTI6XFx0XFx0aWYgKGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9DT01QTEVURV9ERUZFUilcXG5pb191cmluZy9pb191cmluZy5jLTE0MTMtXFx0XFx0XFx0aW9fcmVxX2NvbXBsZXRlX2RlZmVyKHJlcSk7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTE0Mjk9aW50IGlvX3BvbGxfaXNzdWUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGlvX3R3X3Rva2VuX3QgdHcpXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNDMwLXtcXG5pb191cmluZy9pb191cmluZy5jOjE0MzE6XFx0Y29uc3QgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzID0gSU9fVVJJTkdfRl9OT05CTE9DSyB8XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNDMyOlxcdFxcdFxcdFxcdFxcdCBJT19VUklOR19GX01VTFRJU0hPVCB8XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNDMzOlxcdFxcdFxcdFxcdFxcdCBJT19VUklOR19GX0NPTVBMRVRFX0RFRkVSO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTQzNC1cXHRpbnQgcmV0O1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNDY2PXZvaWQgaW9fd3Ffc3VibWl0X3dvcmsoc3RydWN0IGlvX3dxX3dvcmsgKndvcmspXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTE0NjktXFx0Y29uc3Qgc3RydWN0IGlvX2lzc3VlX2RlZiAqZGVmID0gXFx1MDAyNmlvX2lzc3VlX2RlZnNbcmVxLVxcdTAwM2VvcGNvZGVdO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTQ3MDpcXHR1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MgPSBJT19VUklOR19GX1VOTE9DS0VEIHwgSU9fVVJJTkdfRl9JT1dRO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTQ3MS1cXHRib29sIG5lZWRzX3BvbGwgPSBmYWxzZTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTUxOS1cXHRcXHRcXHRuZWVkc19wb2xsID0gdHJ1ZTtcXG5pb191cmluZy9pb191cmluZy5jOjE1MjA6XFx0XFx0XFx0aXNzdWVfZmxhZ3MgfD0gSU9fVVJJTkdfRl9OT05CTE9DSztcXG5pb191cmluZy9pb191cmluZy5jLTE1MjEtXFx0XFx0fVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNTUzLVxcdFxcdG5lZWRzX3BvbGwgPSBmYWxzZTtcXG5pb191cmluZy9pb191cmluZy5jOjE1NTQ6XFx0XFx0aXNzdWVfZmxhZ3MgXFx1MDAyNj0gfklPX1VSSU5HX0ZfTk9OQkxPQ0s7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNTU1LVxcdH0gd2hpbGUgKDEpO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNTkzPXN0YXRpYyBpbnQgaW9fcmVxX3NxZV9jb3B5KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTE2MDEtXFx0XFx0cmV0dXJuIDA7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNjAyOlxcdGlmIChXQVJOX09OX09OQ0UoIShpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfSU5MSU5FKSkpXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNjAzLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNjMzPXN0YXRpYyBpbmxpbmUgdm9pZCBpb19xdWV1ZV9zcWUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBleHRyYV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTYzNS17XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNjM2OlxcdHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyA9IElPX1VSSU5HX0ZfTk9OQkxPQ0sgfFxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTYzNzpcXHRcXHRcXHRcXHQgICBJT19VUklOR19GX0NPTVBMRVRFX0RFRkVSIHwgZXh0cmFfZmxhZ3M7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNjM4LVxcdGludCByZXQ7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTE2NTA9c3RhdGljIHZvaWQgaW9fcXVldWVfc3FlX2ZhbGxiYWNrKHN0cnVjdCBpb19raW9jYiAqcmVxKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNjYxLVxcdH0gZWxzZSB7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxNjYyOlxcdFxcdC8qIGNhbid0IGZhaWwgd2l0aCBJT19VUklOR19GX0lOTElORSAqL1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTY2MzpcXHRcXHRpb19yZXFfc3FlX2NvcHkocmVxLCBJT19VUklOR19GX0lOTElORSk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNjY0LVxcdFxcdGlmICh1bmxpa2VseShyZXEtXFx1MDAzZWN0eC1cXHUwMDNlaW50X2ZsYWdzIFxcdTAwMjYgSU9fUklOR19GX0RSQUlOX0FDVElWRSkpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTE4NzM9c3RhdGljIGlubGluZSBpbnQgaW9fc3VibWl0X3NxZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTE5MDAtXFx0XFx0dHJhY2VfaW9fdXJpbmdfbGluayhyZXEsIGxpbmstXFx1MDAzZWxhc3QpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTkwMTpcXHRcXHRpb19yZXFfc3FlX2NvcHkocmVxLCBJT19VUklOR19GX0lOTElORSk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xOTAyLVxcdFxcdGxpbmstXFx1MDAzZWxhc3QtXFx1MDAzZWxpbmsgPSByZXE7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTE5MjQtXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxOTI1OlxcdGlvX3F1ZXVlX3NxZShyZXEsIElPX1VSSU5HX0ZfSU5MSU5FKTtcXG5pb191cmluZy9pb191cmluZy5jLTE5MjYtXFx0cmV0dXJuIDA7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTIzMDk9c3RhdGljIF9fY29sZCB2b2lkIGlvX3JpbmdfZXhpdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjMxMS1cXHRzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW9fcmluZ19jdHgsIGV4aXRfd29yayk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMzEyOlxcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBJT19VUklOR19FWElUX1dBSVRfTUFYO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjMxMy1cXHR1bnNpZ25lZCBsb25nIGludGVydmFsID0gSFogLyAyMDtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9MzA9c3RydWN0IGlvX2N0eF9jb25maWcge1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0xMDAtICovXFxuaW9fdXJpbmcvaW9fdXJpbmcuaDoxMDE6I2RlZmluZSBJT19VUklOR19FWElUX1dBSVRfTUFYXFx0KEhaICogNjAgKiA1KVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMTAyLVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaD0zOTI9c3RhdGljIGlubGluZSB2b2lkIGlvX3Jpbmdfc3VibWl0X3VubG9jayhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzk1LVxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmN0eC1cXHUwMDNldXJpbmdfbG9jayk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuaDozOTY6XFx0aWYgKHVubGlrZWx5KGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkpXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zOTctXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZXVyaW5nX2xvY2spO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaD00MDA9c3RhdGljIGlubGluZSB2b2lkIGlvX3Jpbmdfc3VibWl0X2xvY2soc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5oLTQwOC1cXHQgKi9cXG5pb191cmluZy9pb191cmluZy5oOjQwOTpcXHRpZiAodW5saWtlbHkoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX1VOTE9DS0VEKSlcXG5pb191cmluZy9pb191cmluZy5oLTQxMC1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZXVyaW5nX2xvY2spO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaD00Nzk9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fc3FyaW5nX2VudHJpZXMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5oLTQ4Ny0gKiBQcm90ZWN0ZWQgYnkgLVxcdTAwM2V1cmluZ19sb2NrIGFuZCBjYW4gb25seSBiZSB1c2VkIGVpdGhlciB3aXRoXFxuaW9fdXJpbmcvaW9fdXJpbmcuaDo0ODg6ICogSU9fVVJJTkdfRl9DT01QTEVURV9ERUZFUiBvciBpbnNpZGUgYSB0dyBoYW5kbGVyIGhvbGRpbmcgdGhlIG11dGV4LlxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtNDg5LSAqL1xcbi0tXFxuaW9fdXJpbmcva2J1Zi5jPTE3Mj1zdGF0aWMgYm9vbCBpb19zaG91bGRfY29tbWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9rYnVmLmMtMTgzLVxcdCovXFxuaW9fdXJpbmcva2J1Zi5jOjE4NDpcXHRpZiAoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX1VOTE9DS0VEKVxcbmlvX3VyaW5nL2tidWYuYy0xODUtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5pb191cmluZy9rYnVmLmM9MzQ1PWludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuLS1cXG5pb191cmluZy9rYnVmLmMtMzczLW91dF91bmxvY2s6XFxuaW9fdXJpbmcva2J1Zi5jOjM3NDpcXHRpZiAoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX1VOTE9DS0VEKSB7XFxuaW9fdXJpbmcva2J1Zi5jLTM3NS1cXHRcXHRzZWwtXFx1MDAzZWJ1Zl9saXN0ID0gTlVMTDtcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG5pb191cmluZy9tZW1tYXAuaDoyOiNpZm5kZWYgSU9fVVJJTkdfTUVNTUFQX0hcXG5pb191cmluZy9tZW1tYXAuaDozOiNkZWZpbmUgSU9fVVJJTkdfTUVNTUFQX0hcXG5pb191cmluZy9tZW1tYXAuaC00LVxcbi0tXFxuaW9fdXJpbmcvbXNnX3JpbmcuYz00MD1zdGF0aWMgaW50IGlvX2xvY2tfZXh0ZXJuYWxfY3R4KHN0cnVjdCBpb19yaW5nX2N0eCAqb2N0eCxcXG4tLVxcbmlvX3VyaW5nL21zZ19yaW5nLmMtNDctXFx0ICovXFxuaW9fdXJpbmcvbXNnX3JpbmcuYzo0ODpcXHRpZiAoIShpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfVU5MT0NLRUQpKSB7XFxuaW9fdXJpbmcvbXNnX3JpbmcuYy00OS1cXHRcXHRpZiAoIW11dGV4X3RyeWxvY2soXFx1MDAyNm9jdHgtXFx1MDAzZXVyaW5nX2xvY2spKVxcbi0tXFxuaW9fdXJpbmcvbXNnX3JpbmcuYz0yMjg9c3RhdGljIHZvaWQgaW9fbXNnX3R3X2ZkX2NvbXBsZXRlKHN0cnVjdCBjYWxsYmFja19oZWFkICpoZWFkKVxcbi0tXFxuaW9fdXJpbmcvbXNnX3JpbmcuYy0yMzQtXFx0aWYgKCEoY3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQRl9FWElUSU5HKSlcXG5pb191cmluZy9tc2dfcmluZy5jOjIzNTpcXHRcXHRyZXQgPSBpb19tc2dfaW5zdGFsbF9jb21wbGV0ZShyZXEsIElPX1VSSU5HX0ZfVU5MT0NLRUQpO1xcbmlvX3VyaW5nL21zZ19yaW5nLmMtMjM2LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuaW9fdXJpbmcvbXNnX3JpbmcuYz0zMzU9aW50IGlvX3VyaW5nX3N5bmNfbXNnX3Jpbmcoc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbi0tXFxuaW9fdXJpbmcvbXNnX3JpbmcuYy0zNTYtXFx0cmV0dXJuICBfX2lvX21zZ19yaW5nX2RhdGEoZmRfZmlsZShmKS1cXHUwMDNlcHJpdmF0ZV9kYXRhLFxcbmlvX3VyaW5nL21zZ19yaW5nLmM6MzU3OlxcdFxcdFxcdFxcdCAgIFxcdTAwMjZpb19tc2csIElPX1VSSU5HX0ZfVU5MT0NLRUQpO1xcbmlvX3VyaW5nL21zZ19yaW5nLmMtMzU4LX1cXG4tLVxcbmlvX3VyaW5nL25hcGkuYz0yMDE9X19pb19uYXBpX2RvX2J1c3lfbG9vcChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL25hcGkuYy0yMDUtXFx0c3dpdGNoIChSRUFEX09OQ0UoY3R4LVxcdTAwM2VuYXBpX3RyYWNrX21vZGUpKSB7XFxuaW9fdXJpbmcvbmFwaS5jOjIwNjpcXHRjYXNlIElPX1VSSU5HX05BUElfVFJBQ0tJTkdfU1RBVElDOlxcbmlvX3VyaW5nL25hcGkuYy0yMDctXFx0XFx0cmV0dXJuIHN0YXRpY190cmFja2luZ19kb19idXN5X2xvb3AoY3R4LCBsb29wX2VuZCwgbG9vcF9lbmRfYXJnKTtcXG5pb191cmluZy9uYXBpLmM6MjA4OlxcdGNhc2UgSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19EWU5BTUlDOlxcbmlvX3VyaW5nL25hcGkuYy0yMDktXFx0XFx0cmV0dXJuIGR5bmFtaWNfdHJhY2tpbmdfZG9fYnVzeV9sb29wKGN0eCwgbG9vcF9lbmQsIGxvb3BfZW5kX2FyZyk7XFxuLS1cXG5pb191cmluZy9uYXBpLmM9MjQ4PXZvaWQgaW9fbmFwaV9pbml0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbi0tXFxuaW9fdXJpbmcvbmFwaS5jLTI1NS1cXHRjdHgtXFx1MDAzZW5hcGlfYnVzeV9wb2xsX2R0ID0gbnNfdG9fa3RpbWUoc3lzX2R0KTtcXG5pb191cmluZy9uYXBpLmM6MjU2OlxcdGN0eC1cXHUwMDNlbmFwaV90cmFja19tb2RlID0gSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19JTkFDVElWRTtcXG5pb191cmluZy9uYXBpLmMtMjU3LX1cXG4tLVxcbmlvX3VyaW5nL25hcGkuYz0yNzc9c3RhdGljIGludCBpb19uYXBpX3JlZ2lzdGVyX25hcGkoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9uYXBpLmMtMjgwLVxcdHN3aXRjaCAobmFwaS1cXHUwMDNlb3BfcGFyYW0pIHtcXG5pb191cmluZy9uYXBpLmM6MjgxOlxcdGNhc2UgSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19EWU5BTUlDOlxcbmlvX3VyaW5nL25hcGkuYzoyODI6XFx0Y2FzZSBJT19VUklOR19OQVBJX1RSQUNLSU5HX1NUQVRJQzpcXG5pb191cmluZy9uYXBpLmMtMjgzLVxcdFxcdGJyZWFrO1xcbi0tXFxuaW9fdXJpbmcvbmFwaS5jLTI4Ni1cXHR9XFxuaW9fdXJpbmcvbmFwaS5jOjI4NzpcXHRXUklURV9PTkNFKGN0eC1cXHUwMDNlbmFwaV90cmFja19tb2RlLCBJT19VUklOR19OQVBJX1RSQUNLSU5HX0lOQUNUSVZFKTtcXG5pb191cmluZy9uYXBpLmMtMjg4LVxcdGlvX25hcGlfZnJlZShjdHgpO1xcbi0tXFxuaW9fdXJpbmcvbmFwaS5jPTMwND1pbnQgaW9fcmVnaXN0ZXJfbmFwaShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmlvX3VyaW5nL25hcGkuYy0zMjMtXFx0c3dpdGNoIChuYXBpLm9wY29kZSkge1xcbmlvX3VyaW5nL25hcGkuYzozMjQ6XFx0Y2FzZSBJT19VUklOR19OQVBJX1JFR0lTVEVSX09QOlxcbmlvX3VyaW5nL25hcGkuYy0zMjUtXFx0XFx0cmV0dXJuIGlvX25hcGlfcmVnaXN0ZXJfbmFwaShjdHgsIFxcdTAwMjZuYXBpKTtcXG5pb191cmluZy9uYXBpLmM6MzI2OlxcdGNhc2UgSU9fVVJJTkdfTkFQSV9TVEFUSUNfQUREX0lEOlxcbmlvX3VyaW5nL25hcGkuYzozMjc6XFx0XFx0aWYgKGN1cnIub3BfcGFyYW0gIT0gSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19TVEFUSUMpXFxuaW9fdXJpbmcvbmFwaS5jLTMyOC1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5pb191cmluZy9uYXBpLmMtMzI5LVxcdFxcdHJldHVybiBfX2lvX25hcGlfYWRkX2lkKGN0eCwgbmFwaS5vcF9wYXJhbSxcXG5pb191cmluZy9uYXBpLmM6MzMwOlxcdFxcdFxcdFxcdFxcdElPX1VSSU5HX05BUElfVFJBQ0tJTkdfU1RBVElDKTtcXG5pb191cmluZy9uYXBpLmM6MzMxOlxcdGNhc2UgSU9fVVJJTkdfTkFQSV9TVEFUSUNfREVMX0lEOlxcbmlvX3VyaW5nL25hcGkuYzozMzI6XFx0XFx0aWYgKGN1cnIub3BfcGFyYW0gIT0gSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19TVEFUSUMpXFxuaW9fdXJpbmcvbmFwaS5jLTMzMy1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmlvX3VyaW5nL25hcGkuYz0zNDg9aW50IGlvX3VucmVnaXN0ZXJfbmFwaShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmlvX3VyaW5nL25hcGkuYy0zNTctXFxuaW9fdXJpbmcvbmFwaS5jOjM1ODpcXHRXUklURV9PTkNFKGN0eC1cXHUwMDNlbmFwaV90cmFja19tb2RlLCBJT19VUklOR19OQVBJX1RSQUNLSU5HX0lOQUNUSVZFKTtcXG5pb191cmluZy9uYXBpLmMtMzU5LVxcdFdSSVRFX09OQ0UoY3R4LVxcdTAwM2VuYXBpX2J1c3lfcG9sbF9kdCwgMCk7XFxuLS1cXG5pb191cmluZy9uYXBpLmg9NDM9c3RhdGljIGlubGluZSB2b2lkIGlvX25hcGlfYWRkKHN0cnVjdCBpb19raW9jYiAqcmVxKVxcbi0tXFxuaW9fdXJpbmcvbmFwaS5oLTQ2LVxcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XFxuaW9fdXJpbmcvbmFwaS5oOjQ3OlxcdHVuc2lnbmVkIGludCBtb2RlID0gSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19EWU5BTUlDO1xcbmlvX3VyaW5nL25hcGkuaC00OC1cXG4tLVxcbmlvX3VyaW5nL25ldC5jPTEzNz1pbnQgaW9fc2h1dGRvd24oc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE0Mi1cXG5pb191cmluZy9uZXQuYzoxNDM6XFx0V0FSTl9PTl9PTkNFKGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSyk7XFxuaW9fdXJpbmcvbmV0LmMtMTQ0LVxcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTY3PXN0YXRpYyB2b2lkIGlvX25ldG1zZ19yZWN5Y2xlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNzEtXFx0LyogY2FuJ3QgcmVjeWNsZSwgZW5zdXJlIHdlIGZyZWUgdGhlIGlvdmVjIGlmIHdlIGhhdmUgb25lICovXFxuaW9fdXJpbmcvbmV0LmM6MTcyOlxcdGlmICh1bmxpa2VseShpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfVU5MT0NLRUQpKSB7XFxuaW9fdXJpbmcvbmV0LmMtMTczLVxcdFxcdGlvX25ldG1zZ19pb3ZlY19mcmVlKGhkcik7XFxuLS1cXG5pb191cmluZy9uZXQuYz01Mjk9aW50IGlvX3NlbmRtc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTU0Ni1cXHRmbGFncyA9IHNyLVxcdTAwM2Vtc2dfZmxhZ3M7XFxuaW9fdXJpbmcvbmV0LmM6NTQ3OlxcdGlmIChpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spXFxuaW9fdXJpbmcvbmV0LmMtNTQ4LVxcdFxcdGZsYWdzIHw9IE1TR19ET05UV0FJVDtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTU1Ni1cXHRpZiAocmV0IFxcdTAwM2MgbWluX3JldCkge1xcbmlvX3VyaW5nL25ldC5jOjU1NzpcXHRcXHRpZiAocmV0ID09IC1FQUdBSU4gXFx1MDAyNlxcdTAwMjYgKGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSykpXFxuaW9fdXJpbmcvbmV0LmMtNTU4LVxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NjI2PWludCBpb19zZW5kKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy02NTMtXFx0ZmxhZ3MgPSBzci1cXHUwMDNlbXNnX2ZsYWdzO1xcbmlvX3VyaW5nL25ldC5jOjY1NDpcXHRpZiAoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKVxcbmlvX3VyaW5nL25ldC5jLTY1NS1cXHRcXHRmbGFncyB8PSBNU0dfRE9OVFdBSVQ7XFxuLS1cXG5pb191cmluZy9uZXQuYy02NzYtXFx0aWYgKHJldCBcXHUwMDNjIG1pbl9yZXQpIHtcXG5pb191cmluZy9uZXQuYzo2Nzc6XFx0XFx0aWYgKHJldCA9PSAtRUFHQUlOIFxcdTAwMjZcXHUwMDI2IChpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spKVxcbmlvX3VyaW5nL25ldC5jLTY3OC1cXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTg1Mz1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9uZXQuYy05MjEtXFx0XFx0XFx0c3ItXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5JT1JJTkdfUkVDVl9NU0hPVF9DQVA7XFxuaW9fdXJpbmcvbmV0LmM6OTIyOlxcdFxcdFxcdGlmIChpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTVVMVElTSE9UKVxcbmlvX3VyaW5nL25ldC5jLTkyMy1cXHRcXHRcXHRcXHRzZWwtXFx1MDAzZXZhbCA9IElPVV9SRVFVRVVFO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTAyMD1pbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTAyNy1cXHRpbnQgcmV0LCBtaW5fcmV0ID0gMDtcXG5pb191cmluZy9uZXQuYzoxMDI4OlxcdGJvb2wgZm9yY2Vfbm9uYmxvY2sgPSBpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0s7XFxuaW9fdXJpbmcvbmV0LmMtMTAyOS1cXHRib29sIG1zaG90X2ZpbmlzaGVkID0gdHJ1ZTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTExMDc9c3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMTE3LVxcdCAqL1xcbmlvX3VyaW5nL25ldC5jOjExMTg6XFx0aWYgKCEoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX1VOTE9DS0VEKSBcXHUwMDI2XFx1MDAyNlxcbmlvX3VyaW5nL25ldC5jLTExMTktXFx0ICAgIHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpIHtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTExNzk9aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTExODYtXFx0aW50IHJldCwgbWluX3JldCA9IDA7XFxuaW9fdXJpbmcvbmV0LmM6MTE4NzpcXHRib29sIGZvcmNlX25vbmJsb2NrID0gaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLO1xcbmlvX3VyaW5nL25ldC5jLTExODgtXFx0Ym9vbCBtc2hvdF9maW5pc2hlZDtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTE1MDA9aW50IGlvX3NlbmRtc2dfemMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE1MjMtXFx0bXNnX2ZsYWdzID0gc3ItXFx1MDAzZW1zZ19mbGFncztcXG5pb191cmluZy9uZXQuYzoxNTI0OlxcdGlmIChpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spXFxuaW9fdXJpbmcvbmV0LmMtMTUyNS1cXHRcXHRtc2dfZmxhZ3MgfD0gTVNHX0RPTlRXQUlUO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTU0MC1cXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgbWluX3JldCkpIHtcXG5pb191cmluZy9uZXQuYzoxNTQxOlxcdFxcdGlmIChyZXQgPT0gLUVBR0FJTiBcXHUwMDI2XFx1MDAyNiAoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKSlcXG5pb191cmluZy9uZXQuYy0xNTQyLVxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTU2MS1cXHQgKi9cXG5pb191cmluZy9uZXQuYzoxNTYyOlxcdGlmICghKGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkpIHtcXG5pb191cmluZy9uZXQuYy0xNTYzLVxcdFxcdGlvX25vdGlmX2ZsdXNoKHNyLVxcdTAwM2Vub3RpZik7XFxuLS1cXG5pb191cmluZy9uZXQuYz0xNjIwPWludCBpb19hY2NlcHQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE2MjItXFx0c3RydWN0IGlvX2FjY2VwdCAqYWNjZXB0ID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2FjY2VwdCk7XFxuaW9fdXJpbmcvbmV0LmM6MTYyMzpcXHRib29sIGZvcmNlX25vbmJsb2NrID0gaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLO1xcbmlvX3VyaW5nL25ldC5jLTE2MjQtXFx0Ym9vbCBmaXhlZCA9ICEhYWNjZXB0LVxcdTAwM2VmaWxlX3Nsb3Q7XFxuLS1cXG5pb191cmluZy9uZXQuYz0xNzUxPWludCBpb19zb2NrZXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE3NjctXFx0XFx0cmV0ID0gUFRSX0VSUihmaWxlKTtcXG5pb191cmluZy9uZXQuYzoxNzY4OlxcdFxcdGlmIChyZXQgPT0gLUVBR0FJTiBcXHUwMDI2XFx1MDAyNiAoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKSlcXG5pb191cmluZy9uZXQuYy0xNzY5LVxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTgwMz1pbnQgaW9fY29ubmVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTgwOC1cXHRpbnQgcmV0O1xcbmlvX3VyaW5nL25ldC5jOjE4MDk6XFx0Ym9vbCBmb3JjZV9ub25ibG9jayA9IGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSztcXG5pb191cmluZy9uZXQuYy0xODEwLVxcbi0tXFxuaW9fdXJpbmcvb3BlbmNsb3NlLmM9MTIzPWludCBpb19vcGVuYXQyKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9vcGVuY2xvc2UuYy0xMzctXFx0cmVzb2x2ZV9ub25ibG9jayA9IG9wZW4tXFx1MDAzZWhvdy5yZXNvbHZlIFxcdTAwMjYgUkVTT0xWRV9DQUNIRUQ7XFxuaW9fdXJpbmcvb3BlbmNsb3NlLmM6MTM4OlxcdGlmIChpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spIHtcXG5pb191cmluZy9vcGVuY2xvc2UuYy0xMzktXFx0XFx0V0FSTl9PTl9PTkNFKGlvX29wZW5hdF9mb3JjZV9hc3luYyhvcGVuKSk7XFxuLS1cXG5pb191cmluZy9vcGVuY2xvc2UuYy0xNjItXFx0XFx0aWYgKHJldCA9PSAtRUFHQUlOIFxcdTAwMjZcXHUwMDI2ICFyZXNvbHZlX25vbmJsb2NrIFxcdTAwMjZcXHUwMDI2XFxuaW9fdXJpbmcvb3BlbmNsb3NlLmM6MTYzOlxcdFxcdCAgICAoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKSkge1xcbmlvX3VyaW5nL29wZW5jbG9zZS5jLTE2NC1cXHRcXHRcXHRyZXQgPSBwdXRuYW1lX3RvX2RlbGF5ZWQoXFx1MDAyNm9wZW4tXFx1MDAzZWZpbGVuYW1lLFxcbi0tXFxuaW9fdXJpbmcvb3BlbmNsb3NlLmMtMTcxLVxcbmlvX3VyaW5nL29wZW5jbG9zZS5jOjE3MjpcXHRpZiAoKGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSykgXFx1MDAyNlxcdTAwMjYgIW5vbmJsb2NrX3NldClcXG5pb191cmluZy9vcGVuY2xvc2UuYy0xNzMtXFx0XFx0ZmlsZS1cXHUwMDNlZl9mbGFncyBcXHUwMDI2PSB+T19OT05CTE9DSztcXG4tLVxcbmlvX3VyaW5nL29wZW5jbG9zZS5jPTIzNj1pbnQgaW9fY2xvc2Uoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL29wZW5jbG9zZS5jLTI1NS1cXHQvKiBpZiB0aGUgZmlsZSBoYXMgYSBmbHVzaCBtZXRob2QsIGJlIHNhZmUgYW5kIHB1bnQgdG8gYXN5bmMgKi9cXG5pb191cmluZy9vcGVuY2xvc2UuYzoyNTY6XFx0aWYgKGZpbGUtXFx1MDAzZWZfb3AtXFx1MDAzZWZsdXNoIFxcdTAwMjZcXHUwMDI2IChpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spKSB7XFxuaW9fdXJpbmcvb3BlbmNsb3NlLmMtMjU3LVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZmaWxlcy1cXHUwMDNlZmlsZV9sb2NrKTtcXG4tLVxcbmlvX3VyaW5nL3BvbGwuYz01NTM9c3RhdGljIGludCBfX2lvX2FybV9wb2xsX2hhbmRsZXIoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9wb2xsLmMtNTc3LVxcdCAqL1xcbmlvX3VyaW5nL3BvbGwuYzo1Nzg6XFx0aXB0LVxcdTAwM2Vvd25pbmcgPSBpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfVU5MT0NLRUQ7XFxuaW9fdXJpbmcvcG9sbC5jLTU3OS1cXHRhdG9taWNfc2V0KFxcdTAwMjZyZXEtXFx1MDAzZXBvbGxfcmVmcywgKGludClpcHQtXFx1MDAzZW93bmluZyk7XFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MTguNzQ5NTYyMzM3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI4MjU5NTk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJT19VUklORyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gZXhhY3RseSB3aGVyZSBgQ09ORklHX0lPX1VSSU5HYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUgS2NvbmZpZyBzeXN0ZW0uIFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgaXQncyBqdXN0IGEgbWF0dGVyIG9mIHF1aWNrbHkgZ3JlcHBpbmcgb3IgbmF2aWdhdGluZyB0aGUgS2NvbmZpZyBmaWxlcyBkaXJlY3RseS4gS25vd2luZyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLCB0aGUgZGVwZW5kZW5jeSBzdHJ1Y3R1cmUgdGhhdCBLY29uZmlnIGxldmVyYWdlcywgdGhlIGNvbnRleHQgb2YgdGhlIHNldHRpbmcgaW4gdGhlIGJyb2FkZXIgZmlsZSBzeXN0ZW0gb3IgbmV0d29ya2luZyBzdGFjay4uLiB0aGlzIGluZm9ybXMgbXkgZGVjaXNpb24gb24gYSBnb29kIHNlYXJjaCBzdHJhdGVneSBoZXJlLiBJ4oCZbGwgc3RhcnQgYnkgZG9pbmcgYSBiYXNpYyBzZWFyY2ggdG8gZmluZCB0aGUgZW50cnkgcG9pbnQsIG9yIGF0IGxlYXN0IHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUocykuIEZyb20gdGhlcmUsIEkgY2FuIGV4YW1pbmUgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGhlbHAgdGV4dCwgYW5kIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQgdG8gdGhlIHNldHRpbmcuIEtub3dpbmcgdGhlIHBvc3NpYmxlIGhhcmR3YXJlIG9yIHNvZnR3YXJlIGNvbnRleHRzIHRoYXQgdHJpZ2dlciB0aGlzIHNldHRpbmcgaXMgdmFsdWFibGUgdG8gdW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UsIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBUaGVuLCBJIGNhbiBxdWlja2x5IGNvbmZpcm0gYW55IHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIGl0cyBpbnRlbmRlZCB1c2UgYW5kIGFueSBpbXBsaWNhdGlvbnMgaXQgaGFzLiBUaGlzIGluZm9ybWF0aW9uIGlzIGtleSBpZiBJJ20gdHJ5aW5nIHRvLCBmb3IgZXhhbXBsZSwgZW5hYmxlIG9yIGRpc2FibGUgdGhpcyBmZWF0dXJlLCBvciBkZWJ1ZyBhIHJlbGF0ZWQgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODY0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MjEuMDMyMTYwNDI5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTc2OTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJT19VUklOR1xcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xOTUyPWNvbmZpZyBBSU9cXG4tLVxcbmluaXQvS2NvbmZpZy0xOTU5LVxcbmluaXQvS2NvbmZpZzoxOTYwOmNvbmZpZyBJT19VUklOR1xcbmluaXQvS2NvbmZpZy0xOTYxLVxcdGJvb2wgXFxcIkVuYWJsZSBJTyB1cmluZyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MjEuMDc4MzQxMzY3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQzMDkxMjQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IGlvX3VyaW5nIGFuZCB0aGUgU2lnbmlmaWNhbmNlIG9mIGEgU2ltcGxlIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGZvY3VzZXMgb24gYSBtb2RpZmljYXRpb24gd2l0aGluIGBpb19kb19pb3BvbGxgLCBhbmQgbXkgZXhwZXJ0IGV5ZSBpbW1lZGlhdGVseSBob25lcyBpbiBvbiB0aGF0IGxpbmU6IGByZXEtXHUwMDNlY3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS1cdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7YFxuXG5UaGUgcXVlc3Rpb24gcG9wcyB1cCDigJMgd2h5IHRoZSBjaGFuZ2UgZnJvbSBhc3NpZ25tZW50IChgPWApIHRvIGEgYml0d2lzZSBPUiAoYHw9YCk/IEl0J3MgZWxlbWVudGFyeSwgcmVhbGx5LiBJZiBgcmVxLVx1MDAzZWNxZS5mbGFnc2AgYWxyZWFkeSBjb250YWlucyBleGlzdGluZyBmbGFncyDigJMgc2F5LCBgSU9SSU5HX0NRRV9GX01PUkVgLCBidWZmZXIgZmxhZ3MsIG9yIG90aGVyIGNvbXBsZXRpb24gcXVldWUgZW50cnkgKENRRSkgZmxhZ3Mg4oCTIGEgc2ltcGxlIGFzc2lnbm1lbnQgd291bGQgb3ZlcndyaXRlIHRob3NlIHZpdGFsIGV4aXN0aW5nIGZsYWdzLiBVc2luZyBhIGJpdHdpc2UgT1IgaXMgZXNzZW50aWFsIGZvciAqcHJlc2VydmluZyogdGhvc2UgcHJlLWV4aXN0aW5nIGZsYWdzIHdoaWxlICphZGRpbmcqIHRoZSBuZXcgZmxhZ3MgcmV0dXJuZWQgZnJvbSBgaW9fcHV0X2tidWZgLiBPciwgaWYgaXQgaXMgdGhlIGNhc2UgdGhhdCBgaW9fcHV0X2tidWZgIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIGZsYWdzLiBUaGlzIGlzIGNvcmUgYGlvX3VyaW5nYCBsb2dpYyBmb3IgaGFuZGxpbmcgY29tcGxldGlvbnMgZHVyaW5nIHBvbGxlZCBJL08gb3BlcmF0aW9ucyAodGhlIGBJT1JJTkdfU0VUVVBfSU9QT0xMYCBzZXR0aW5nKS4gVGhpcyBpcyBkZWVwIGluc2lkZSB0aGUga2VybmVsJ3MgYGlvX3VyaW5nYCBzdWJzeXN0ZW0sIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSB1c3VhbCBzdXNwZWN0cyBsaWtlIGBpb191cmluZ19zZXR1cGAsIGBpb191cmluZ19lbnRlcmAsIGFuZCBzbyBvbi4gQW55IGNoYW5nZSBoZXJlIGRpcmVjdGx5IGFmZmVjdHMgZXhlY3V0YWJsZSBrZXJuZWwgY29kZSwgc28gaXQgaXMgaGlnaC12YWx1ZS5cblxuTm93LCBhcyBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgdGhlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIFwiV29ydGhGdXp6aW5nXCI/IEdpdmVuIG15IGVzdGFibGlzaGVkIGNyaXRlcmlhLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyBcIlllc1wiLiBJdCB0aWNrcyBhbGwgdGhlIGJveGVzLiBGaXJzdCwgdGhpcyBpcyBhIG1vZGlmaWNhdGlvbiB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbSDigJMgYGlvX3VyaW5nYC4gVGhlIGxvZ2ljIGNoYW5nZSBpcyBpbiBgaW9fZG9faW9wb2xsYCwgd2hpY2ggaXMgZGlyZWN0bHkgcmVsYXRlZCB0byBJL08gcG9sbGluZyB3aXRoIGBpb191cmluZ2AgdmlhIGBJT1JJTkdfU0VUVVBfSU9QT0xMYCwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUgbW9kZXJuIGtlcm5lbC4gRnV6emluZyB3aXRoIHRvb2xzIGxpa2Ugc3l6a2FsbGVyIHdvdWxkIGFsbG93IGZvciBleHRlbnNpdmUgdGVzdGluZyBvZiBgaW9fdXJpbmdgIHVuZGVyIHZhcmlvdXMgY29uZGl0aW9ucywgaW5jbHVkaW5nIGBJT1BPTExgLCBidWZmZXIgbWFuYWdlbWVudCwgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb25zLlxuXG5GaW5hbGx5LCByZWdhcmRpbmcgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBpbnZvbHZlZCwgSSdsbCBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgaW9fZG9faW9wb2xsYCAoZGVmaW5lZCBzb21ld2hlcmUgYXJvdW5kIGxpbmUgMTM3MyBpbiBgaW9fdXJpbmcvcncuY2AsIEkgYmVsaWV2ZSDigJMgSSdsbCB2ZXJpZnkgdGhhdCkgYW5kIGFueSBvdGhlciBmdW5jdGlvbnMgZGlyZWN0bHkgaW50ZXJhY3Rpbmcgd2l0aCBpdC4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGxvZ2ljIGluIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyMjYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MjYuNTA5MjU2ODUzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY5MDQ4NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fZG9faW9wb2xsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pb191cmluZy5jPTExNjg9X19jb2xkIHZvaWQgaW9faW9wb2xsX3RyeV9yZWFwX2V2ZW50cyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTE3NS1cXHRcXHQvKiBsZXQgaXQgc2xlZXAgYW5kIHJlcGVhdCBsYXRlciBpZiBjYW4ndCBjb21wbGV0ZSBhIHJlcXVlc3QgKi9cXG5pb191cmluZy9pb191cmluZy5jOjExNzY6XFx0XFx0aWYgKGlvX2RvX2lvcG9sbChjdHgsIHRydWUpID09IDApXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xMTc3LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xMTk1PXN0YXRpYyBpbnQgaW9faW9wb2xsX2NoZWNrKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBpbnQgbWluX2V2ZW50cylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTI0OS1cXHRcXHR9XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxMjUwOlxcdFxcdHJldCA9IGlvX2RvX2lvcG9sbChjdHgsICFtaW5fZXZlbnRzKTtcXG5pb191cmluZy9pb191cmluZy5jLTEyNTEtXFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xMjYzPXZvaWQgaW9fcmVxX3Rhc2tfY29tcGxldGUoc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTEyNzAtICogQWRkaW5nIHRoZSBraW9jYiB0byB0aGUgbGlzdCBBRlRFUiBzdWJtaXNzaW9uIGVuc3VyZXMgdGhhdCB3ZSBkb24ndFxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTI3MTogKiBmaW5kIGl0IGZyb20gYSBpb19kb19pb3BvbGwoKSB0aHJlYWQgYmVmb3JlIHRoZSBpc3N1ZXIgaXMgZG9uZVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTI3Mi0gKiBhY2Nlc3NpbmcgdGhlIGtpb2NiIGNvb2tpZS5cXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9MjAyPWludCBpb19zdWJtaXRfc3FlcyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdW5zaWduZWQgaW50IG5yKTtcXG5pb191cmluZy9pb191cmluZy5oOjIwMzppbnQgaW9fZG9faW9wb2xsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGZvcmNlX25vbnNwaW4pO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjA0LV9fY29sZCB2b2lkIGlvX2lvcG9sbF90cnlfcmVhcF9ldmVudHMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpO1xcbi0tXFxuaW9fdXJpbmcvcncuYz0xMjk3PXN0YXRpYyBpbnQgaW9fdXJpbmdfaHlicmlkX3BvbGwoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9ydy5jLTEzMTgtXFxuaW9fdXJpbmcvcncuYzoxMzE5OmludCBpb19kb19pb3BvbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgZm9yY2Vfbm9uc3BpbilcXG5pb191cmluZy9ydy5jLTEzMjAte1xcbi0tXFxuaW9fdXJpbmcvc3Fwb2xsLmM9MjA1PXN0YXRpYyBpbnQgX19pb19zcV90aHJlYWQoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19zcV9kYXRhICpzcWQsXFxuLS1cXG5pb191cmluZy9zcXBvbGwuYy0yMjUtXFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZjdHgtXFx1MDAzZWlvcG9sbF9saXN0KSlcXG5pb191cmluZy9zcXBvbGwuYzoyMjY6XFx0XFx0XFx0aW9fZG9faW9wb2xsKGN0eCwgdHJ1ZSk7XFxuaW9fdXJpbmcvc3Fwb2xsLmMtMjI3LVxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmM9MTUyPXZvaWQgX19pb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsIHMzMiByZXQsIHU2NCByZXMyLFxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTcyLVxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfSU9QT0xMKSB7XFxuaW9fdXJpbmcvdXJpbmdfY21kLmM6MTczOlxcdFxcdC8qIG9yZGVyIHdpdGggaW9fZG9faW9wb2xsKCkgY2hlY2tpbmcgLVxcdTAwM2Vpb3BvbGxfY29tcGxldGVkICovXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTc0LVxcdFxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZyZXEtXFx1MDAzZWlvcG9sbF9jb21wbGV0ZWQsIDEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjoyNi43MjYxNjgxNDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU1NzU4NTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcm5hbCB3b3JraW5ncyBvZiB0aGlzIGFzeW5jaHJvbm91cyBJL08gaW1wbGVtZW50YXRpb24uIEZpcnN0LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LCBzbyBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgSS9PIHBvbGxpbmcgcHJvY2Vzcy4gSSdsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBgaW9faW9wb2xsX2NoZWNrYCwgYW5kIGBpb19kb19pb3BvbGxgIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gbW9uaXRvcnMgZm9yIGNvbXBsZXRlZCBJL08gb3BlcmF0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBJL08gbWVjaGFuaXNtIGlzIGFjdHVhbGx5IHRyaWdnZXJlZC5cblxuQWZ0ZXIgdW5kZXJzdGFuZGluZyB0aGUgcG9sbGluZyBtZWNoYW5pc20sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGF0YSBnZXRzIHB1dCBpbnRvIHRoZSBpb191cmluZyBzeXN0ZW0uIFNvIG5leHQsIGxldCdzIHNlZSBob3cgYGlvX3B1dF9rYnVmYCBpbnRlZ3JhdGVzIHdpdGhpbiB0aGUgbGFyZ2VyIHBpY3R1cmUgdG8gZ2V0IHRoZSBkYXRhIHdoZXJlIGl0IG5lZWRzIHRvIGdvIHdpdGhpbiB0aGUgaW9fdXJpbmcgcmluZyBidWZmZXIuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IGRhdGEgZmxvd3MgdGhyb3VnaCB0aGUgSS9PIHN5c3RlbSBmcm9tIHRoZSBhcHBsaWNhdGlvbiwgdGhyb3VnaCBrZXJuZWwgc3RydWN0dXJlcywgYW5kIGJhY2sgdG8gdGhlIGFwcGxpY2F0aW9uLiBJIGFsc28gbmVlZCB0byBjaGVjayB0aGlzIGZ1bmN0aW9uIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGlzc3VlcyB3aGljaCBjb3VsZCBhZmZlY3QgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjI0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MjkuMjgzNzU2NDg0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE2MzA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19wdXRfa2J1ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW9fdXJpbmcuYz05NDg9dm9pZCBpb19yZXFfZGVmZXJfZmFpbGVkKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzMzIgcmVzKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy05NTUtXFx0cmVxX3NldF9mYWlsKHJlcSk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo5NTY6XFx0aW9fcmVxX3NldF9yZXMocmVxLCByZXMsIGlvX3B1dF9rYnVmKHJlcSwgcmVzLCBOVUxMKSk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy05NTctXFx0aWYgKGRlZi1cXHUwMDNlZmFpbClcXG4tLVxcbmlvX3VyaW5nL2tidWYuYz0zODE9aW50IGlvX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuLS1cXG5pb191cmluZy9rYnVmLmMtNDA2LVxcbmlvX3VyaW5nL2tidWYuYzo0MDc6c3RhdGljIGlubGluZSBib29sIF9faW9fcHV0X2tidWZfcmluZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG5pb191cmluZy9rYnVmLmMtNDA4LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsIGludCBsZW4sIGludCBucilcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy00MjAtXFxuaW9fdXJpbmcva2J1Zi5jOjQyMTp1bnNpZ25lZCBpbnQgX19pb19wdXRfa2J1ZnMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXFxuaW9fdXJpbmcva2J1Zi5jLTQyMi1cXHRcXHRcXHQgICAgaW50IGxlbiwgaW50IG5idWZzKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTQzMi1cXG5pb191cmluZy9rYnVmLmM6NDMzOlxcdGlmICghX19pb19wdXRfa2J1Zl9yaW5nKHJlcSwgYmwsIGxlbiwgbmJ1ZnMpKVxcbmlvX3VyaW5nL2tidWYuYy00MzQtXFx0XFx0cmV0IHw9IElPUklOR19DUUVfRl9CVUZfTU9SRTtcXG4tLVxcbmlvX3VyaW5nL2tidWYuaD04Nz12b2lkIGlvX2tidWZfZHJvcF9sZWdhY3koc3RydWN0IGlvX2tpb2NiICpyZXEpO1xcbmlvX3VyaW5nL2tidWYuaC04OC1cXG5pb191cmluZy9rYnVmLmg6ODk6dW5zaWduZWQgaW50IF9faW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxcbmlvX3VyaW5nL2tidWYuaC05MC1cXHRcXHRcXHQgICAgaW50IGxlbiwgaW50IG5idWZzKTtcXG4tLVxcbmlvX3VyaW5nL2tidWYuaD0xMTQ9c3RhdGljIGlubGluZSBib29sIGlvX2tidWZfcmVjeWNsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcXG4tLVxcbmlvX3VyaW5nL2tidWYuaC0xMjUtXFxuaW9fdXJpbmcva2J1Zi5oOjEyNjpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb19wdXRfa2J1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IGxlbixcXG5pb191cmluZy9rYnVmLmgtMTI3LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5oLTEzMC1cXHRcXHRyZXR1cm4gMDtcXG5pb191cmluZy9rYnVmLmg6MTMxOlxcdHJldHVybiBfX2lvX3B1dF9rYnVmcyhyZXEsIGJsLCBsZW4sIDEpO1xcbmlvX3VyaW5nL2tidWYuaC0xMzItfVxcbmlvX3VyaW5nL2tidWYuaC0xMzMtXFxuaW9fdXJpbmcva2J1Zi5oOjEzNDpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb19wdXRfa2J1ZnMoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBsZW4sXFxuaW9fdXJpbmcva2J1Zi5oLTEzNS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLCBpbnQgbmJ1ZnMpXFxuLS1cXG5pb191cmluZy9rYnVmLmgtMTM4LVxcdFxcdHJldHVybiAwO1xcbmlvX3VyaW5nL2tidWYuaDoxMzk6XFx0cmV0dXJuIF9faW9fcHV0X2tidWZzKHJlcSwgYmwsIGxlbiwgbmJ1ZnMpO1xcbmlvX3VyaW5nL2tidWYuaC0xNDAtfVxcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NDkxPXN0YXRpYyBpbmxpbmUgYm9vbCBpb19zZW5kX2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTQ5OS1cXHRpZiAoIShzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSkge1xcbmlvX3VyaW5nL25ldC5jOjUwMDpcXHRcXHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHNlbC1cXHUwMDNldmFsLCBzZWwtXFx1MDAzZWJ1Zl9saXN0KTtcXG5pb191cmluZy9uZXQuYy01MDEtXFx0XFx0Z290byBmaW5pc2g7XFxuLS1cXG5pb191cmluZy9uZXQuYy01MDMtXFxuaW9fdXJpbmcvbmV0LmM6NTA0OlxcdGNmbGFncyA9IGlvX3B1dF9rYnVmcyhyZXEsIHNlbC1cXHUwMDNldmFsLCBzZWwtXFx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLVxcdTAwM2V2YWwpKTtcXG5pb191cmluZy9uZXQuYy01MDUtXFxuLS1cXG5pb191cmluZy9uZXQuYz04NTM9c3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtODc5LVxcbmlvX3VyaW5nL25ldC5jOjg4MDpcXHRcXHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC1cXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCB0aGlzX3JldCkpO1xcbmlvX3VyaW5nL25ldC5jLTg4MS1cXHRcXHRpZiAoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZfUkVUUlkpXFxuLS1cXG5pb191cmluZy9uZXQuYy05MDEtXFx0fSBlbHNlIHtcXG5pb191cmluZy9uZXQuYzo5MDI6XFx0XFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgc2VsLVxcdTAwM2V2YWwsIHNlbC1cXHUwMDNlYnVmX2xpc3QpO1xcbmlvX3VyaW5nL25ldC5jLTkwMy1cXHR9XFxuLS1cXG5pb191cmluZy9ydy5jPTU2Mj12b2lkIGlvX3JlcV9yd19jb21wbGV0ZShzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG4tLVxcbmlvX3VyaW5nL3J3LmMtNTY4LVxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKFJFUV9GX0JVRkZFUl9TRUxFQ1RFRHxSRVFfRl9CVUZGRVJfUklORykpXFxuaW9fdXJpbmcvcncuYzo1Njk6XFx0XFx0cmVxLVxcdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLVxcdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XFxuaW9fdXJpbmcvcncuYy01NzAtXFxuLS1cXG5pb191cmluZy9ydy5jPTY0MD1zdGF0aWMgaW50IGtpb2NiX2RvbmUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHNzaXplX3QgcmV0LFxcbi0tXFxuaW9fdXJpbmcvcncuYy02NTctXFx0XFx0aWYgKHNlbClcXG5pb191cmluZy9ydy5jOjY1ODpcXHRcXHRcXHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHJldCwgc2VsLVxcdTAwM2VidWZfbGlzdCk7XFxuaW9fdXJpbmcvcncuYy02NTktXFx0XFx0aW9fcmVxX3NldF9yZXMocmVxLCBmaW5hbF9yZXQsIGNmbGFncyk7XFxuLS1cXG5pb191cmluZy9ydy5jPTEwMzI9aW50IGlvX3JlYWRfbXNob3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL3J3LmMtMTA2Ny1cXHR9IGVsc2UgaWYgKCEocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkpIHtcXG5pb191cmluZy9ydy5jOjEwNjg6XFx0XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWYocmVxLCByZXQsIHNlbC5idWZfbGlzdCk7XFxuaW9fdXJpbmcvcncuYy0xMDY5LVxcdH0gZWxzZSB7XFxuLS1cXG5pb191cmluZy9ydy5jLTEwNzUtXFx0XFx0ICovXFxuaW9fdXJpbmcvcncuYzoxMDc2OlxcdFxcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgcmV0LCBzZWwuYnVmX2xpc3QpO1xcbmlvX3VyaW5nL3J3LmMtMTA3Ny1cXHRcXHRydy1cXHUwMDNlbGVuID0gMDsgLyogc2ltaWxhcmx5IHRvIGFib3ZlLCByZXNldCBsZW4gdG8gMCAqL1xcbi0tXFxuaW9fdXJpbmcvcncuYz0xMzE5PWludCBpb19kb19pb3BvbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgZm9yY2Vfbm9uc3BpbilcXG4tLVxcbmlvX3VyaW5nL3J3LmMtMTM3NS1cXHRcXHRucl9ldmVudHMrKztcXG5pb191cmluZy9ydy5jOjEzNzY6XFx0XFx0cmVxLVxcdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLVxcdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XFxuaW9fdXJpbmcvcncuYy0xMzc3LVxcdFxcdGlmICghaW9faXNfdXJpbmdfY21kKHJlcSkpXFxuLS1cXG5pb191cmluZy91cmluZ19jbWQuYz0zODc9Ym9vbCBpb191cmluZ19tc2hvdF9jbWRfcG9zdF9jcWUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMzk2LVxcdGlmIChzZWwtXFx1MDAzZXZhbCBcXHUwMDNlIDApIHtcXG5pb191cmluZy91cmluZ19jbWQuYzozOTc6XFx0XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWYocmVxLCBzZWwtXFx1MDAzZXZhbCwgc2VsLVxcdTAwM2VidWZfbGlzdCk7XFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMzk4LVxcdFxcdGlmIChpb19yZXFfcG9zdF9jcWUocmVxLCBzZWwtXFx1MDAzZXZhbCwgY2ZsYWdzIHwgSU9SSU5HX0NRRV9GX01PUkUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjoyOS4zMjc5MjQ1NjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU4NDI1MTE3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBgaW9fcmVxX3J3X2NvbXBsZXRlYCBhbmQgYGlvX2RvX2lvcG9sbGAgRmxhZyBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBob3cgdGhlIGByZXEtXHUwMDNlY3FlLmZsYWdzYCBmaWVsZCBpcyBiZWluZyBtYW5hZ2VkLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGNvbXBsZXRpb24gaGFuZGxpbmcuIEluIGBpb19yZXFfcndfY29tcGxldGVgLCB3ZSBoYXZlOlxuXG5gcmVxLVx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO2Bcblxud2hpY2ggaXMgdXNpbmcgYSBiaXR3aXNlIE9SIHRvIHNldCB0aGUgZmxhZ3MgYWZ0ZXIgYSByZWFkL3dyaXRlIG9wZXJhdGlvbi4gQnV0IEkndmUgZ290IGEgZmxhZy1zZXR0aW5nIHNpdHVhdGlvbiBnb2luZyBvbiBpbiBgaW9fZG9faW9wb2xsYCwgYW5kIHRoZXJlOlxuXG5gcmVxLVx1MDAzZWNxZS5mbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS1cdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7YFxuXG5UaGF0J3MgYW4gYXNzaWdubWVudCwgbWVhbmluZyBgaW9fZG9faW9wb2xsYCBpcyBjbG9iYmVyaW5nIHdoYXRldmVyIHdhcyBwcmV2aW91c2x5IGluIGByZXEtXHUwMDNlY3FlLmZsYWdzYC4gVGhhdCdzIGJhZC4gVGhhdCdzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBhbmQgaXQgY2FuIGNhdXNlIHNvbWUgcHJldHR5IG5hc3R5IGJ1Z3MgaWYgdGhlIHZhbHVlcyBhcmUgbm90IHNldCBjb3JyZWN0bHkuIFRoZSBiaXR3aXNlIG9yIGluIGBpb19yZXFfcndfY29tcGxldGVgIG1ha2VzIHNlbnNlOyB1c2luZyBhbiBhc3NpZ25tZW50IGluIGBpb19kb19pb3BvbGxgIGRvZXNuJ3QuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgcmVsZXZhbnQgYml0cyBvZiB0aGlzIGludmVzdGlnYXRpb24uIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBmb2N1cyBzeW1ib2xzLiBgaW9fZG9faW9wb2xsYCBpcyBkZWZpbml0ZWx5IHRoZSBtb2RpZmllZCBmdW5jdGlvbiwgYW5kIGl0IGxvb2tzIGxpa2UgYGlvX2lvcG9sbF9jaGVja2AgY2FsbHMgaXQgYW5kIHRoZW4gYF9faW9fcHV0X2tidWZzYCBpcyBjYWxsZWQgYnkgYGlvX3B1dF9rYnVmYC5cblxuT2theSwgbmV4dCBJJ2xsIGNoZWNrIHRoZSBFbmFibGVDb25maWdzLiBUaGUgcmVsZXZhbnQgY29uZmlnIGZsYWcgaXMgYElPX1VSSU5HYCwgc28gd2UgYXJlIGRlYWxpbmcgd2l0aCBhIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBpb191cmluZy5cblxuTm93LCBsZXQgbWUgcmV2aWV3IGV2ZXJ5dGhpbmcuIEFjY29yZGluZyB0byB0aGUgY2hlY2tsaXN0IHByb3ZpZGVkLCB0aGUgdmVyZGljdCBzaG91bGQgYmUgYFdvcnRoRnV6emluZzogdHJ1ZWAsIHRoZSByZWFzb25pbmcgbmVlZHMgdG8gYmUgY29uY2lzZSAocG90ZW50aWFsIGZsYWcgY2xvYmJlcmluZyksIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBbXCJJT19VUklOR1wiXWAsIGFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGBbXCJpb19kb19pb3BvbGxcIiwgXCJpb19pb3BvbGxfY2hlY2tcIl1gIG9yIHBvdGVudGlhbGx5IGp1c3QgYFtcImlvX2RvX2lvcG9sbFwiXWAuXG5cbkFscmlnaHQsIEknbSBjb21mb3J0YWJsZSB3aXRoIGFsbCBvZiB0aGF0LiBUaGUgYXJndW1lbnRzIGZvciBgc2V0LXJlc3VsdHNgIGFyZSBhbHNvIGNvcnJlY3Q6IGEgYm9vbGVhbiBmb3IgZnV6emluZywgYSBzdHJpbmcgZm9yIHRoZSByZWFzb25pbmcsIGFuIGFycmF5IG9mIHN0cmluZ3MgZm9yIHRoZSBjb25maWcsIGFuZCBhbiBhcnJheSBvZiBzdHJpbmdzIGZvciB0aGUgc3ltYm9scy5cblxuQWxsIHNldCwgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU1MSwiT3V0cHV0VG9rZW5zIjoxMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MzMuOTEyMTc4MjY1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcyNzM2NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fZG9faW9wb2xsXCIsXG4gICAgXCJpb19pb3BvbGxfY2hlY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpb19kb19pb3BvbGwoKSB0byBiaXR3aXNlLU9SIHRoZSBmbGFncyByZXR1cm5lZCBieSBpb19wdXRfa2J1ZigpIGludG8gcmVxLVxcdTAwM2VjcWUuZmxhZ3MgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyB0aGVtLCBwcmV2ZW50aW5nIHRoZSBsb3NzIG9mIGV4aXN0aW5nIENRRSBmbGFncyBkdXJpbmcgcG9sbGVkIEkvTyBjb21wbGV0aW9uLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgaW9fdXJpbmcgY29tcGxldGlvbiBsb2dpYywgd2FycmFudGluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fZG9faW9wb2xsXCIsXG4gICAgXCJpb19pb3BvbGxfY2hlY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpb19kb19pb3BvbGwoKSB0byBiaXR3aXNlLU9SIHRoZSBmbGFncyByZXR1cm5lZCBieSBpb19wdXRfa2J1ZigpIGludG8gcmVxLVxcdTAwM2VjcWUuZmxhZ3MgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyB0aGVtLCBwcmV2ZW50aW5nIHRoZSBsb3NzIG9mIGV4aXN0aW5nIENRRSBmbGFncyBkdXJpbmcgcG9sbGVkIEkvTyBjb21wbGV0aW9uLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgaW9fdXJpbmcgY29tcGxldGlvbiBsb2dpYywgd2FycmFudGluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjozMy45ODk0NTg2NDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MzkyNTU4NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MzMuOTg5OTgwOTYyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDkzOTIwMzIyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpb19kb19pb3BvbGwoKWAgaW4gYGlvX3VyaW5nL3J3LmNgIGJ5IGNoYW5naW5nIGByZXEtXFx1MDAzZWNxZS5mbGFncyA9IGlvX3B1dF9rYnVmKC4uLilgIHRvIGByZXEtXFx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZiguLi4pYC4gVGhpcyBpcyBhIG9uZS1saW5lIGxvZ2ljYWwgZml4IGVuc3VyaW5nIHRoYXQgZmxhZ3MgYWxyZWFkeSBzZXQgb24gYHJlcS1cXHUwMDNlY3FlLmZsYWdzYCAoc3VjaCBhcyBgSU9SSU5HX0NRRV9GXzMyYCkgYXJlIHByZXNlcnZlZCB3aGVuIGFwcGVuZGluZyBjb21wbGV0aW9uIGZsYWdzIGZvciBwcm92aWRlZCBidWZmZXIgcmVsZWFzZSBkdXJpbmcgSU8gcG9sbGluZy5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kYXJ5IGNhbGN1bGF0aW9ucyBpbiB3YXlzIHRoYXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIGRvZXMgbm90IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIGdlbmVyYWwgdGVzdGluZyBzdWZmaWNlIGZvciB2ZXJpZnlpbmcgaW9fdXJpbmcgcmVxdWVzdCBsaWZlY3ljbGUgY29ycmVjdG5lc3MsIGFuZCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWRjMWZiYzkxMTQ1MWYyZTk3ZjdiMDQ3YTVjN2U5MTkyYjBlOTVhM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjA6MjU6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9ydy5jIGIvaW9fdXJpbmcvcncuY1xuaW5kZXggOTUxMDZkZDFkN2ViOS4uZjJiYmIwYjFjMzBhMSAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3J3LmNcbisrKyBiL2lvX3VyaW5nL3J3LmNcbkBAIC0xMzczLDcgKzEzNzMsNyBAQCBpbnQgaW9fZG9faW9wb2xsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGZvcmNlX25vbnNwaW4pXG4gXHRcdGxpc3RfZGVsKFx1MDAyNnJlcS1cdTAwM2Vpb3BvbGxfbm9kZSk7XG4gXHRcdHdxX2xpc3RfYWRkX3RhaWwoXHUwMDI2cmVxLVx1MDAzZWNvbXBfbGlzdCwgXHUwMDI2Y3R4LVx1MDAzZXN1Ym1pdF9zdGF0ZS5jb21wbF9yZXFzKTtcbiBcdFx0bnJfZXZlbnRzKys7XG4tXHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO1xuK1x0XHRyZXEtXHUwMDNlY3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS1cdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XG4gXHRcdGlmICghaW9faXNfdXJpbmdfY21kKHJlcSkpXG4gXHRcdFx0aW9fcmVxX3J3X2NsZWFudXAocmVxLCAwKTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjMzLjk4OTk4MjI1MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODMyNTk2MTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGJyZWFrIGRvd24gdGhlIGNoYW5nZXMgbGluZSBieSBsaW5lLCBmb2N1c2luZyBvbiB0aGVpciBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBgaW9fdXJpbmdgIGNvbnRleHQuIExvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IHNlZW1zIHRoZSBjb3JlIGNoYW5nZSBpcyB3aXRoaW4gYGlvX2RvX2lvcG9sbGAgYW5kIHNwZWNpZmljYWxseSBhcm91bmQgaG93IGByZXEtXHUwMDNlY3FlLmZsYWdzYCBpcyBoYW5kbGVkIGluIHJlbGF0aW9uIHRvIGBpb19wdXRfa2J1ZmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBlbGVtZW50cyBpbnRlcmFjdC5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGF0J3MgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGUgYHw9YCBvcGVyYXRvciBoZXJlLCBhbmQgd2h5IHdhcyBpdCBjaGFuZ2VkIGZyb20gYSBzaW1wbGUgYXNzaWdubWVudCBgPWA/IENsZWFybHksIHRoZSBvcmlnaW5hbCBjb2RlIGFzc3VtZWQgZXhjbHVzaXZlIGNvbnRyb2wgb3ZlciB0aG9zZSBmbGFncy4gVGhlIGNoYW5nZSB0byBgfD1gIGltcGxpZXMgdGhhdCB0aGVyZSBtYXkgaGF2ZSBiZWVuIG90aGVyIGZsYWdzIGFscmVhZHkgc2V0IHRoYXQgd2Ugbm93IGludGVuZCB0byAqcHJlc2VydmUqLiBCdXQgd2hhdCBhcmUgdGhlc2Ugb3RoZXIgZmxhZ3M/IFdoYXQgZG9lcyBgaW9fcHV0X2tidWZgIGNvbnRyaWJ1dGUsIGFuZCBpcyB0aGlzIGNoYW5nZSByZWxhdGVkIHRvIGJ1ZmZlciBtYW5hZ2VtZW50IG9yIGNvbXBsZXRpb24gc2lnbmFsaW5nP1xuXG5JJ2xsIG5lZWQgdG8gZ28gZGVlcGVyLiBUaW1lIHRvIHB1bGwgdXAgYGlvX2RvX2lvcG9sbGAgYW5kIGBpb19wdXRfa2J1ZmAgdXNpbmcgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCBzZWUgd2hhdCB0aGUgZmxhZyBmaWVsZCBpcyB1c2VkIGZvciBhbmQgaWYgdGhlIGNoYW5nZSBoYXMgaW1wbGljYXRpb25zIGZvciBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIGhhdmUgdG8gbG9vayBpbnRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdyB0aGF0IGJvdGggb2YgdGhvc2UgZnVuY3Rpb25zIHVzZSB0byBzZWUgd2hhdCB0aGUgc3RhdGUgb2YgZmxhZ3MgbWlnaHQgYmUgcHJpb3IgdG8gdGhpcyBvcGVyYXRpb24uIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IGNvbXBsZXRpb24gcXVldWVzIGFyZSB1cGRhdGVkIGFuZCBob3cgdGhlIHN5c3RlbSBzaWduYWxzIGV2ZW50cyB0byB1c2VyIHNwYWNlLiBVbmRlcnN0YW5kaW5nIHRoZSBwb3NzaWJsZSBmbGFnIGNvbWJpbmF0aW9ucyBoZXJlIGlzIHRoZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjozOC44MjI1ODE4MzRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL3J3LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM1MDpcXHRcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9IWUJSSURfSU9QT0xMKVxcbjEzNTE6XFx0XFx0XFx0XFx0cmV0ID0gaW9fdXJpbmdfaHlicmlkX3BvbGwocmVxLCBcXHUwMDI2aW9iLCBwb2xsX2ZsYWdzKTtcXG4xMzUyOlxcdFxcdFxcdGVsc2VcXG4xMzUzOlxcdFxcdFxcdFxcdHJldCA9IGlvX3VyaW5nX2NsYXNzaWNfcG9sbChyZXEsIFxcdTAwMjZpb2IsIHBvbGxfZmxhZ3MpO1xcbjEzNTQ6XFx0XFxuMTM1NTpcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpXFxuMTM1NjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzNTc6XFx0XFx0XFx0ZWxzZSBpZiAocmV0KVxcbjEzNTg6XFx0XFx0XFx0XFx0cG9sbF9mbGFncyB8PSBCTEtfUE9MTF9PTkVTSE9UO1xcbjEzNTk6XFx0XFxuMTM2MDpcXHRcXHRcXHQvKiBpb3BvbGwgbWF5IGhhdmUgY29tcGxldGVkIGN1cnJlbnQgcmVxICovXFxuMTM2MTpcXHRcXHRcXHRpZiAoIXJxX2xpc3RfZW1wdHkoXFx1MDAyNmlvYi5yZXFfbGlzdCkgfHxcXG4xMzYyOlxcdFxcdFxcdCAgICBSRUFEX09OQ0UocmVxLVxcdTAwM2Vpb3BvbGxfY29tcGxldGVkKSlcXG4xMzYzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEzNjQ6XFx0XFx0fVxcbjEzNjU6XFx0XFxuMTM2NjpcXHRcXHRpZiAoIXJxX2xpc3RfZW1wdHkoXFx1MDAyNmlvYi5yZXFfbGlzdCkpXFxuMTM2NzpcXHRcXHRcXHRpb2IuY29tcGxldGUoXFx1MDAyNmlvYik7XFxuMTM2ODpcXHRcXG4xMzY5OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHRtcCwgXFx1MDAyNmN0eC1cXHUwMDNlaW9wb2xsX2xpc3QsIGlvcG9sbF9ub2RlKSB7XFxuMTM3MDpcXHRcXHRcXHQvKiBvcmRlciB3aXRoIGlvX2NvbXBsZXRlX3J3X2lvcG9sbCgpLCBlLmcuIC1cXHUwMDNlcmVzdWx0IHVwZGF0ZXMgKi9cXG4xMzcxOlxcdFxcdFxcdGlmICghc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2cmVxLVxcdTAwM2Vpb3BvbGxfY29tcGxldGVkKSlcXG4xMzcyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEzNzM6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnJlcS1cXHUwMDNlaW9wb2xsX25vZGUpO1xcbjEzNzQ6XFx0XFx0XFx0d3FfbGlzdF9hZGRfdGFpbChcXHUwMDI2cmVxLVxcdTAwM2Vjb21wX2xpc3QsIFxcdTAwMjZjdHgtXFx1MDAzZXN1Ym1pdF9zdGF0ZS5jb21wbF9yZXFzKTtcXG4xMzc1OlxcdFxcdFxcdG5yX2V2ZW50cysrO1xcbjEzNzY6XFx0XFx0XFx0cmVxLVxcdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLVxcdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XFxuMTM3NzpcXHRcXHRcXHRpZiAoIWlvX2lzX3VyaW5nX2NtZChyZXEpKVxcbjEzNzg6XFx0XFx0XFx0XFx0aW9fcmVxX3J3X2NsZWFudXAocmVxLCAwKTtcXG4xMzc5OlxcdFxcdH1cXG4xMzgwOlxcdFxcdGlmIChucl9ldmVudHMpXFxuMTM4MTpcXHRcXHRcXHRfX2lvX3N1Ym1pdF9mbHVzaF9jb21wbGV0aW9ucyhjdHgpO1xcbjEzODI6XFx0XFx0cmV0dXJuIG5yX2V2ZW50cztcXG4xMzgzOlxcdH1cXG4xMzg0OlxcdFxcbjEzODU6XFx0dm9pZCBpb19yd19jYWNoZV9mcmVlKGNvbnN0IHZvaWQgKmVudHJ5KVxcbjEzODY6XFx0e1xcbjEzODc6XFx0XFx0c3RydWN0IGlvX2FzeW5jX3J3ICpydyA9IChzdHJ1Y3QgaW9fYXN5bmNfcncgKikgZW50cnk7XFxuMTM4ODpcXHRcXG4xMzg5OlxcdFxcdGlvX3ZlY19mcmVlKFxcdTAwMjZydy1cXHUwMDNldmVjKTtcXG4xMzkwOlxcdFxcdGtmcmVlKHJ3KTtcXG4xMzkxOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MzguODIyNjkxMjg0WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNjMzMjUxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gQ29tcGxldGlvbiBRdWV1ZSBFbnRyaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNlIHRoZSBsaWZlY3ljbGUgb2YgYHJlcS1cdTAwM2VjcWVgLiBJdCdzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IEkvTyBvcGVyYXRpb25zIGFyZSBjb21wbGV0ZWQgYW5kIGhhbmRsZWQsIGVzcGVjaWFsbHkgaW4gYXN5bmNocm9ub3VzIHNjZW5hcmlvcy4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgdGhlIGByd2AgY29tbWFuZCwgYnV0IEkgc2hvdWxkIGFsc28ga2VlcCBhbiBleWUgb3V0IGZvciBvdGhlciBpb3BvbGwtYmFzZWQgY29tbWFuZHMsIGp1c3QgaW4gY2FzZS4gVGhleSBtaWdodCBzaGFyZSBzb21lIG9mIHRoZSBzYW1lIG1lY2hhbmlzbXMuXG5cbk15IGluaXRpYWwgYXBwcm9hY2ggd2lsbCBiZSB0byBwaW5wb2ludCB3aGVyZSBgcmVxLVx1MDAzZWNxZWAgaXMgKmZpcnN0KiBpbml0aWFsaXplZC4gVGhpcyB3aWxsIGxpa2VseSBzaGVkIGxpZ2h0IG9uIHRoZSBpbml0aWFsIGNvbnRleHQgYW5kIGV4cGVjdGVkIHVzZS4gRnJvbSB0aGVyZSwgSSdsbCB0cmFjayBpdHMgam91cm5leSB0aHJvdWdoIHRoZSBzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHBhdGggdGhlIGNvbnRyb2wgZmxvdyB0YWtlcyB0aHJvdWdoIHRoZSBwcm9ncmFtLlxuXG5JJ2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3Iga2V5IGZ1bmN0aW9uIG5hbWVzOiBgaW9wb2xsYCwgYGlvX2NvbXBsZXRlX3J3X2lvcG9sbGAsIGFuZCBgaW9fcHV0X2tidWZgLiBUaGVzZSBmdW5jdGlvbnMgc291bmQgbGlrZSBsaWtlbHkgY2FuZGlkYXRlcyBpbnZvbHZlZCBpbiBtYW5hZ2luZyB0aGUgY29tcGxldGlvbiBxdWV1ZSBlbnRyaWVzIGFuZCBoYW5kbGluZyB0aGVpciBkYXRhLiBUaGUgcmVzdWx0cyBzaG91bGQgcHJvdmlkZSBtZSB3aXRoIGFuIGluaXRpYWwgbWFwIG9mIHJlbGF0ZWQgZnVuY3Rpb25zLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBsZWFkIG1lIHRvIHRoZSByaWdodCBwbGFjZSBhbmQgYWxsb3cgbWUgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZW50cmllcyBhcmUgbWFuaXB1bGF0ZWQgYW5kIGV2ZW50dWFsbHkgcmVsZWFzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjQxLjg4NjAxOTQzMloiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3OTk2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fY29tcGxldGVfcndfaW9wb2xsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL3J3LmM9MjY9c3RhdGljIHZvaWQgaW9fY29tcGxldGVfcncoc3RydWN0IGtpb2NiICpraW9jYiwgbG9uZyByZXMpO1xcbmlvX3VyaW5nL3J3LmM6Mjc6c3RhdGljIHZvaWQgaW9fY29tcGxldGVfcndfaW9wb2xsKHN0cnVjdCBraW9jYiAqa2lvY2IsIGxvbmcgcmVzKTtcXG5pb191cmluZy9ydy5jLTI4LVxcbi0tXFxuaW9fdXJpbmcvcncuYz0yNDU9c3RhdGljIGludCBfX2lvX3ByZXBfcncoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSxcXG4tLVxcbmlvX3VyaW5nL3J3LmMtMjc2LVxcdGlmIChyZXEtXFx1MDAzZWN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfSU9QT0xMKVxcbmlvX3VyaW5nL3J3LmM6Mjc3OlxcdFxcdHJ3LVxcdTAwM2VraW9jYi5raV9jb21wbGV0ZSA9IGlvX2NvbXBsZXRlX3J3X2lvcG9sbDtcXG5pb191cmluZy9ydy5jLTI3OC1cXHRlbHNlXFxuLS1cXG5pb191cmluZy9ydy5jPTU3NT1zdGF0aWMgdm9pZCBpb19jb21wbGV0ZV9ydyhzdHJ1Y3Qga2lvY2IgKmtpb2NiLCBsb25nIHJlcylcXG4tLVxcbmlvX3VyaW5nL3J3LmMtNTg1LVxcbmlvX3VyaW5nL3J3LmM6NTg2OnN0YXRpYyB2b2lkIGlvX2NvbXBsZXRlX3J3X2lvcG9sbChzdHJ1Y3Qga2lvY2IgKmtpb2NiLCBsb25nIHJlcylcXG5pb191cmluZy9ydy5jLTU4Ny17XFxuLS1cXG5pb191cmluZy9ydy5jPTYyMj1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcndfZG9uZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3NpemVfdCByZXQpXFxuLS1cXG5pb191cmluZy9ydy5jLTYzNC1cXHRpZiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0lPUE9MTClcXG5pb191cmluZy9ydy5jOjYzNTpcXHRcXHRpb19jb21wbGV0ZV9yd19pb3BvbGwoXFx1MDAyNnJ3LVxcdTAwM2VraW9jYiwgcmV0KTtcXG5pb191cmluZy9ydy5jLTYzNi1cXHRlbHNlXFxuLS1cXG5pb191cmluZy9ydy5jPTEzMTk9aW50IGlvX2RvX2lvcG9sbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBmb3JjZV9ub25zcGluKVxcbi0tXFxuaW9fdXJpbmcvcncuYy0xMzY5LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHRtcCwgXFx1MDAyNmN0eC1cXHUwMDNlaW9wb2xsX2xpc3QsIGlvcG9sbF9ub2RlKSB7XFxuaW9fdXJpbmcvcncuYzoxMzcwOlxcdFxcdC8qIG9yZGVyIHdpdGggaW9fY29tcGxldGVfcndfaW9wb2xsKCksIGUuZy4gLVxcdTAwM2VyZXN1bHQgdXBkYXRlcyAqL1xcbmlvX3VyaW5nL3J3LmMtMTM3MS1cXHRcXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnJlcS1cXHUwMDNlaW9wb2xsX2NvbXBsZXRlZCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjQxLjk0NzgyMzcyOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDgzODA1Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYGlvX2NvbXBsZXRlX3J3X2lvcG9sbGAgZnVuY3Rpb24gaW4gYGlvX3VyaW5nL3J3LmNgLCBhcyBpZiBJJ20gd2Fsa2luZyB0aHJvdWdoIGl0IG15c2VsZjpcblxuKipEaXZpbmcgaW50byBgaW9fY29tcGxldGVfcndfaW9wb2xsYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gYGlvX2NvbXBsZXRlX3J3X2lvcG9sbGAuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBjb21wbGV0aW5nIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyB3aGVuIHRoZSBgSU9QT0xgIGZsYWcgaXMgaW52b2x2ZWQgaW4gYGlvX3VyaW5nYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlJ3JlIGhhbmRsaW5nIHRoZSBhc3luY2hyb25vdXMgY29tcGxldGlvbiBpbiBhIHBvbGxlZCBjb250ZXh0LiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIG5lZWQgdG8gY2hlY2sgZm9yIHBlbmRpbmcgZXZlbnRzIGFuZCBoYW5kbGUgdmFyaW91cyBlZGdlIGNhc2VzIOKAkyB0aGlzIGlzIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcyBpbiB0aGUgYXN5bmNocm9ub3VzIEkvTyB3b3JsZC5cblxuRmlyc3QsIEkgZXhwZWN0IHRvIHNlZSBhbiBleGFtaW5hdGlvbiBvZiB0aGUgYGlvX3VyaW5nX3NxZWAgc3RydWN0dXJlIChTUUUpIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29tcGxldGVkIHJlcXVlc3QuIEknbSBnb2luZyB0byBxdWlja2x5IGxvb2sgZm9yIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdHVzIG9mIHRoZSBvcGVyYXRpb24g4oCTIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgY29kZSwgYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSBjb2RlIGhhbmRsZXMgYm90aCBzdWNjZXNzZnVsIGFuZCBlcnJvciBzY2VuYXJpb3MuXG5cbk5leHQsIEknbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcG9sbCBpbmZyYXN0cnVjdHVyZS4gSXMgaXQgY2hlY2tpbmcgdGhlIHN0YXR1cyBvZiB0aGUgSS9PIGV2ZW50IGFnYWluc3QgYSBwb2xsaW5nIHN0cnVjdHVyZSAocHJvYmFibHkgYW4gYGVwb2xsX2V2ZW50YCBvciBzaW1pbGFyKT8gSSdtIGludGVyZXN0ZWQgaW4gaG93IGl0IHN5bmNocm9uaXplcyB3aXRoIHRoZSBwb2xsaW5nIG1lY2hhbmlzbSwgZW5zdXJpbmcgdGhhdCB0aGUgY29tcGxldGlvbiBpcyBhY2tub3dsZWRnZWQgY29ycmVjdGx5IGFuZCB0aGUgd2FpdGluZyBwcm9jZXNzIGlzIG5vdGlmaWVkLiBUaGlzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGVmZmljaWVudCBtYW5hZ2VtZW50IG9mIEkvTyByZXNvdXJjZXMgd2hlbiB0aGUga2VybmVsIGlzIG1hbmFnaW5nIHRoZSBwb2xsaW5nIHNpZGUuXG5cblRoZSB1c2Ugb2YgYElPUE9MYCBzdWdnZXN0cyB0aGF0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgZm9ybSBvZiBvcHRpbWl6YXRpb24gb3Igc2hvcnQtY2lyY3VpdGluZyBpbiBzcGVjaWZpYyBzaXR1YXRpb25zLiBJJ20gYW50aWNpcGF0aW5nIHNvbWUgY29uZGl0aW9uYWwgY2hlY2tzIGJhc2VkIG9uIHRoZSBgSU9QT0xgIGZsYWcncyB2YWx1ZS4gSSdtIHRoaW5raW5nIHdlIG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCBlaXRoZXIgYWdncmVzc2l2ZSBwb2xsaW5nLCBvciBhIG1vcmUgZGVsYXllZCBjb21wbGV0aW9uIG1lY2hhbmlzbSwgZGVwZW5kZW50IG9uIGhvdyB0aGUga2VybmVsIHNlZXMgdGhlIGRhdGEgaXMgYXZhaWxhYmxlLlxuXG5JJ20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBwb3RlbnRpYWwgZm9yIGhhbmRsaW5nIHBhcnRpYWwgY29tcGxldGlvbnMuIERvZXMgdGhlIGNvZGUgYWNjb3VudCBmb3Igc2NlbmFyaW9zIHdoZXJlIGEgcmVhZCBvciB3cml0ZSBvcGVyYXRpb24gbWlnaHQgb25seSB0cmFuc2ZlciBhIHN1YnNldCBvZiB0aGUgcmVxdWVzdGVkIGRhdGEsIHBlcmhhcHMgZHVlIHRvIGEgc2hvcnQgcmVhZCBvciBhIHJlc291cmNlIGxpbWl0YXRpb24/IEknbSBob3BpbmcgdG8gc2VlIGhvdyB0aGUgcmVtYWluaW5nIGJ5dGVzLCBpZiBhbnksIGFyZSBtYW5hZ2VkIGFuZCBoYW5kbGVkLiBBcmUgd2UgcmVzY2hlZHVsaW5nIGl0IHdpdGggYSBuZXcgU1FFP1xuXG5GaW5hbGx5LCB0aGUgY29udGV4dC4gSSdsbCBiZSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBjb21wbGV0aW9uIGhhbmRsaW5nIGFuZCB0aGUgdXNlci1zcGFjZSBzdWJtaXNzaW9uLiBIb3cgaXMgdGhlIGNvbXBsZXRlZCBldmVudCBjb21tdW5pY2F0ZWQgYmFjayB0byB0aGUgYXBwbGljYXRpb24/IElzIHRoZXJlIHNvbWUgZm9ybSBvZiBtZW1vcnkgYmFycmllciBpbnZvbHZlZD8gRG9lcyB0aGlzIGNvZGUgaW50ZXJhY3Qgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgaW9fdXJpbmcgc3lzdGVtLCBsaWtlIHRoZSBDUUUgKENvbXBsZXRpb24gUXVldWUgRW50cnkpIGhhbmRsaW5nPyBUaGF0J3Mgd2hhdCBJJ2xsIGJlIHdhdGNoaW5nIGZvci4gUmlnaHQsIGxldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ2MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjQ2LjAzMTYzMjA3NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvcncuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1ODA6XFx0XFx0X19pb19jb21wbGV0ZV9yd19jb21tb24ocmVxLCByZXMpO1xcbiA1ODE6XFx0XFx0aW9fcmVxX3NldF9yZXMocmVxLCBpb19maXh1cF9yd19yZXMocmVxLCByZXMpLCAwKTtcXG4gNTgyOlxcdFxcdHJlcS1cXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19yZXFfcndfY29tcGxldGU7XFxuIDU4MzpcXHRcXHRfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgSU9VX0ZfVFdRX0xBWllfV0FLRSk7XFxuIDU4NDpcXHR9XFxuIDU4NTpcXHRcXG4gNTg2OlxcdHN0YXRpYyB2b2lkIGlvX2NvbXBsZXRlX3J3X2lvcG9sbChzdHJ1Y3Qga2lvY2IgKmtpb2NiLCBsb25nIHJlcylcXG4gNTg3OlxcdHtcXG4gNTg4OlxcdFxcdHN0cnVjdCBpb19ydyAqcncgPSBjb250YWluZXJfb2Yoa2lvY2IsIHN0cnVjdCBpb19ydywga2lvY2IpO1xcbiA1ODk6XFx0XFx0c3RydWN0IGlvX2tpb2NiICpyZXEgPSBjbWRfdG9faW9fa2lvY2IocncpO1xcbiA1OTA6XFx0XFx0aW50IGZpbmFsX3JlcyA9IGlvX2ZpeHVwX3J3X3JlcyhyZXEsIHJlcyk7XFxuIDU5MTpcXHRcXG4gNTkyOlxcdFxcdGlmIChraW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX1dSSVRFKVxcbiA1OTM6XFx0XFx0XFx0aW9fcmVxX2VuZF93cml0ZShyZXEpO1xcbiA1OTQ6XFx0XFxuIDU5NTpcXHRcXHRpZiAocmVzID09IC1FQUdBSU4gXFx1MDAyNlxcdTAwMjYgaW9fcndfc2hvdWxkX3JlaXNzdWUocmVxKSlcXG4gNTk2OlxcdFxcdFxcdHJlcS1cXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfUkVJU1NVRSB8IFJFUV9GX0JMX05PX1JFQ1lDTEU7XFxuIDU5NzpcXHRcXHRlbHNlIGlmICh1bmxpa2VseShmaW5hbF9yZXMgIT0gcmVxLVxcdTAwM2VjcWUucmVzKSlcXG4gNTk4OlxcdFxcdFxcdHJlcS1cXHUwMDNlY3FlLnJlcyA9IGZpbmFsX3JlcztcXG4gNTk5OlxcdFxcbiA2MDA6XFx0XFx0Lyogb3JkZXIgd2l0aCBpb19pb3BvbGxfY29tcGxldGUoKSBjaGVja2luZyAtXFx1MDAzZWlvcG9sbF9jb21wbGV0ZWQgKi9cXG4gNjAxOlxcdFxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZyZXEtXFx1MDAzZWlvcG9sbF9jb21wbGV0ZWQsIDEpO1xcbiA2MDI6XFx0fVxcbiA2MDM6XFx0XFxuIDYwNDpcXHRzdGF0aWMgaW5saW5lIHNzaXplX3QgaW9fZml4dXBfcmVzdGFydF9yZXMoc3NpemVfdCByZXQpXFxuIDYwNTpcXHR7XFxuIDYwNjpcXHRcXHRzd2l0Y2ggKHJldCkge1xcbiA2MDc6XFx0XFx0Y2FzZSAtRVJFU1RBUlRTWVM6XFxuIDYwODpcXHRcXHRjYXNlIC1FUkVTVEFSVE5PSU5UUjpcXG4gNjA5OlxcdFxcdGNhc2UgLUVSRVNUQVJUTk9IQU5EOlxcbiA2MTA6XFx0XFx0Y2FzZSAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLOlxcbiA2MTE6XFx0XFx0XFx0LypcXG4gNjEyOlxcdFxcdFxcdCAqIFdlIGNhbid0IGp1c3QgcmVzdGFydCB0aGUgc3lzY2FsbCwgc2luY2UgcHJldmlvdXNseVxcbiA2MTM6XFx0XFx0XFx0ICogc3VibWl0dGVkIHNxZXMgbWF5IGFscmVhZHkgYmUgaW4gcHJvZ3Jlc3MuIEp1c3QgZmFpbFxcbiA2MTQ6XFx0XFx0XFx0ICogdGhpcyBJTyB3aXRoIEVJTlRSLlxcbiA2MTU6XFx0XFx0XFx0ICovXFxuIDYxNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbiA2MTc6XFx0XFx0ZGVmYXVsdDpcXG4gNjE4OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDYxOTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjQ2LjAzMTc3ODYyNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MTk3ODY0MTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgaW9fdXJpbmcgRmxhZyBVc2FnZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHJlcS1cdTAwM2VjcWUuZmxhZ3NgIGZpZWxkIGluIGBpb191cmluZ2AgaXMgYmVpbmcgbWFuaXB1bGF0ZWQgYW5kIHVzZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyBsaWZlY3ljbGUuIEkgd2FudCB0byBzZWUgKndoZXJlKiBpbiB0aGUgY29kZSB0aGVzZSBmbGFncyBhcmUgYmVpbmcgc2V0IChvciBjbGVhcmVkKS4gVGhpcyBtZWFucyBsb29raW5nIGF0IHRoZSBoYW5kbGVycyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IHRvdWNoIHRoaXMgZmllbGQsIGVzcGVjaWFsbHkgdGhvc2UgcmVsYXRlZCB0byB0aGUgY29tbWFuZCBxdWV1ZSBlbnRyeSAoYGNxZWApLlxuXG5TcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcnBsYXkgd2l0aCB0aGUgYGlvX2lzX3VyaW5nX2NtZChyZXEpYCBmdW5jdGlvbiwgYXMgdGhhdCBwcm9iYWJseSBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFdoYXQgZGVjaXNpb25zIGFyZSBtYWRlIGJhc2VkIG9uIHRoZSBmbGFnJ3MgY3VycmVudCBzdGF0ZT8gV2hhdCBvdGhlciBmdW5jdGlvbnMgb3IgY29tcG9uZW50cyByZWx5IG9uIHRoZXNlIGZsYWdzIHRvIHBlcmZvcm0gdGhlaXIgdGFza3Mgd2l0aGluIHRoZSBgaW9fdXJpbmdgIGZyYW1ld29yaz9cblxuSSdsbCBhbHNvIGV4cGFuZCB0aGlzIHNlYXJjaCB0byBpbmNsdWRlIGFueSBvdGhlciBoYW5kbGVycyBvciBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudDsgSSBjYW4ndCBiZSB0b28gbmFycm93IGhlcmUsIHNvIEkgbmVlZCB0byBjYXN0IGEgd2lkZSBuZXQuIEJhc2ljYWxseSwgSSB3aWxsIGhhdmUgdG8gc2VhcmNoIGZvciBldmVyeSB1c2Ugb2YgYHJlcS1cdTAwM2VjcWUuZmxhZ3NgIGluIHRoZSBgaW9fdXJpbmdgIGNvZGViYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Nzk3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjo1My4yMjk2NDYxODZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MjE0NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNxZVxcXFwuZmxhZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW9fdXJpbmcuYz01MTU9c3RhdGljIHZvaWQgX19pb19jcXJpbmdfb3ZlcmZsb3dfZmx1c2goc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgZHlpbmcpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTUzMS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW9fb3ZlcmZsb3dfY3FlLCBsaXN0KTtcXG5pb191cmluZy9pb191cmluZy5jOjUzMjpcXHRcXHRpZiAob2NxZS1cXHUwMDNlY3FlLmZsYWdzIFxcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy01MzMtXFx0XFx0ICAgIGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIHtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9NjUyPXN0YXRpYyBzdHJ1Y3QgaW9fb3ZlcmZsb3dfY3FlICppb19hbGxvY19vY3FlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy02NjktXFx0XFx0b2NxZS1cXHUwMDNlY3FlLnJlcyA9IGNxZS1cXHUwMDNlcmVzO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6NjcwOlxcdFxcdG9jcWUtXFx1MDAzZWNxZS5mbGFncyA9IGNxZS1cXHUwMDNlZmxhZ3M7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy02NzEtXFx0XFx0aWYgKGlzX2NxZTMyIFxcdTAwMjZcXHUwMDI2IGJpZ19jcWUpIHtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9Mjk3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpb19maWxsX2NxZV9yZXEoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5oLTI5OS17XFxuaW9fdXJpbmcvaW9fdXJpbmcuaDozMDA6XFx0Ym9vbCBpc19jcWUzMiA9IHJlcS1cXHUwMDNlY3FlLmZsYWdzIFxcdTAwMjYgSU9SSU5HX0NRRV9GXzMyO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzAxLVxcdHN0cnVjdCBpb191cmluZ19jcWUgKmNxZTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9MzMwPXN0YXRpYyBpbmxpbmUgdm9pZCBpb19yZXFfc2V0X3JlcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgczMyIHJlcywgdTMyIGNmbGFncylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzMyLVxcdHJlcS1cXHUwMDNlY3FlLnJlcyA9IHJlcztcXG5pb191cmluZy9pb191cmluZy5oOjMzMzpcXHRyZXEtXFx1MDAzZWNxZS5mbGFncyA9IGNmbGFncztcXG5pb191cmluZy9pb191cmluZy5oLTMzNC19XFxuLS1cXG5pb191cmluZy9pb191cmluZy5oPTM0Mz1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcmVxX3NldF9yZXMzMihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgczMyIHJlcywgdTMyIGNmbGFncyxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzQ2LVxcdHJlcS1cXHUwMDNlY3FlLnJlcyA9IHJlcztcXG5pb191cmluZy9pb191cmluZy5oOjM0NzpcXHRyZXEtXFx1MDAzZWNxZS5mbGFncyA9IGNmbGFncyB8IGN0eF9jcWUzMl9mbGFncyhyZXEtXFx1MDAzZWN0eCk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zNDgtXFx0cmVxLVxcdTAwM2ViaWdfY3FlLmV4dHJhMSA9IGV4dHJhMTtcXG4tLVxcbmlvX3VyaW5nL21zZ19yaW5nLmM9NzM9c3RhdGljIHZvaWQgaW9fbXNnX3R3X2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxcbi0tXFxuaW9fdXJpbmcvbXNnX3JpbmcuYy03Ny1cXG5pb191cmluZy9tc2dfcmluZy5jOjc4OlxcdGlvX2FkZF9hdXhfY3FlKGN0eCwgcmVxLVxcdTAwM2VjcWUudXNlcl9kYXRhLCByZXEtXFx1MDAzZWNxZS5yZXMsIHJlcS1cXHUwMDNlY3FlLmZsYWdzKTtcXG5pb191cmluZy9tc2dfcmluZy5jLTc5LVxcdGtmcmVlX3JjdShyZXEsIHJjdV9oZWFkKTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTg1Mz1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9uZXQuYy04ODEtXFx0XFx0aWYgKHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWX1JFVFJZKVxcbmlvX3VyaW5nL25ldC5jOjg4MjpcXHRcXHRcXHRjZmxhZ3MgPSByZXEtXFx1MDAzZWNxZS5mbGFncyB8IChjZmxhZ3MgXFx1MDAyNiBDUUVfRl9NQVNLKTtcXG5pb191cmluZy9uZXQuYy04ODMtXFx0XFx0aWYgKHNyLVxcdTAwM2Vtc2hvdF9sZW4gXFx1MDAyNlxcdTAwMjYgc2VsLVxcdTAwM2V2YWwgXFx1MDAzZT0gc3ItXFx1MDAzZW1zaG90X2xlbilcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTg5NC1cXHRcXHQgICAgIWlvdl9pdGVyX2NvdW50KFxcdTAwMjZrbXNnLVxcdTAwM2Vtc2cubXNnX2l0ZXIpKSB7XFxuaW9fdXJpbmcvbmV0LmM6ODk1OlxcdFxcdFxcdHJlcS1cXHUwMDNlY3FlLmZsYWdzID0gY2ZsYWdzIFxcdTAwMjYgfkNRRV9GX01BU0s7XFxuaW9fdXJpbmcvbmV0LmMtODk2LVxcdFxcdFxcdHNyLVxcdTAwM2VsZW4gPSBrbXNnLVxcdTAwM2Vtc2cubXNnX2lucTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTEzNDc9aW50IGlvX3NlbmRfemNfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTM3Mi1cXHRub3RpZi1cXHUwMDNlY3FlLnJlcyA9IDA7XFxuaW9fdXJpbmcvbmV0LmM6MTM3MzpcXHRub3RpZi1cXHUwMDNlY3FlLmZsYWdzID0gSU9SSU5HX0NRRV9GX05PVElGO1xcbmlvX3VyaW5nL25ldC5jLTEzNzQtXFx0cmVxLVxcdTAwM2VmbGFncyB8PSBSRVFfRl9ORUVEX0NMRUFOVVAgfCBSRVFfRl9QT0xMX05PX0xBWlk7XFxuLS1cXG5pb191cmluZy9uZXQuYz0xNTcxPXZvaWQgaW9fc2VuZHJlY3ZfZmFpbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE1NzktXFx0ICAgIChyZXEtXFx1MDAzZW9wY29kZSA9PSBJT1JJTkdfT1BfU0VORF9aQyB8fCByZXEtXFx1MDAzZW9wY29kZSA9PSBJT1JJTkdfT1BfU0VORE1TR19aQykpXFxuaW9fdXJpbmcvbmV0LmM6MTU4MDpcXHRcXHRyZXEtXFx1MDAzZWNxZS5mbGFncyB8PSBJT1JJTkdfQ1FFX0ZfTU9SRTtcXG5pb191cmluZy9uZXQuYy0xNTgxLX1cXG4tLVxcbmlvX3VyaW5nL3J3LmM9NTYyPXZvaWQgaW9fcmVxX3J3X2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxcbi0tXFxuaW9fdXJpbmcvcncuYy01NjgtXFx0aWYgKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoUkVRX0ZfQlVGRkVSX1NFTEVDVEVEfFJFUV9GX0JVRkZFUl9SSU5HKSlcXG5pb191cmluZy9ydy5jOjU2OTpcXHRcXHRyZXEtXFx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXFx1MDAzZWNxZS5yZXMsIDApLCBOVUxMKTtcXG5pb191cmluZy9ydy5jLTU3MC1cXG4tLVxcbmlvX3VyaW5nL3J3LmM9MTIzOD12b2lkIGlvX3J3X2ZhaWwoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuLS1cXG5pb191cmluZy9ydy5jLTEyNDItXFx0cmVzID0gaW9fZml4dXBfcndfcmVzKHJlcSwgcmVxLVxcdTAwM2VjcWUucmVzKTtcXG5pb191cmluZy9ydy5jOjEyNDM6XFx0aW9fcmVxX3NldF9yZXMocmVxLCByZXMsIHJlcS1cXHUwMDNlY3FlLmZsYWdzKTtcXG5pb191cmluZy9ydy5jLTEyNDQtfVxcbi0tXFxuaW9fdXJpbmcvcncuYz0xMzE5PWludCBpb19kb19pb3BvbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgZm9yY2Vfbm9uc3BpbilcXG4tLVxcbmlvX3VyaW5nL3J3LmMtMTM3NS1cXHRcXHRucl9ldmVudHMrKztcXG5pb191cmluZy9ydy5jOjEzNzY6XFx0XFx0cmVxLVxcdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLVxcdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XFxuaW9fdXJpbmcvcncuYy0xMzc3LVxcdFxcdGlmICghaW9faXNfdXJpbmdfY21kKHJlcSkpXFxuLS1cXG5pb191cmluZy91cmluZ19jbWQuYz0xNTI9dm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsXFxuLS1cXG5pb191cmluZy91cmluZ19jbWQuYy0xNjctXFx0XFx0aWYgKHJlcS1cXHUwMDNlY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpXFxuaW9fdXJpbmcvdXJpbmdfY21kLmM6MTY4OlxcdFxcdFxcdHJlcS1cXHUwMDNlY3FlLmZsYWdzIHw9IElPUklOR19DUUVfRl8zMjtcXG5pb191cmluZy91cmluZ19jbWQuYy0xNjktXFx0XFx0aW9fcmVxX3NldF9jcWUzMl9leHRyYShyZXEsIHJlczIsIDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjo1My4yODY4NjY5ODNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc2MDM4MDQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZsYWcgTW9kaWZpY2F0aW9uIGluIGBpb19kb19pb3BvbGxgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGNoYW5nZSBpbiBgaW9fZG9faW9wb2xsYC4gUHJldmlvdXNseSwgdGhlIGNvZGUgd2FzIHNldHRpbmcgYHJlcS1cdTAwM2VjcWUuZmxhZ3NgIGRpcmVjdGx5IHdpdGggYGlvX3B1dF9rYnVmKC4uLilgOiBgcmVxLVx1MDAzZWNxZS5mbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS1cdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7YC4gTm93LCBpdCdzIGFuIE9SIGFzc2lnbm1lbnQ6IGByZXEtXHUwMDNlY3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKC4uLilgLlxuXG5UaGUgcXVlc3Rpb24gaXMsIHdoeSB0aGUgY2hhbmdlIGZyb20gYSBzaW1wbGUgYXNzaWdubWVudCB0byBhIGJpdHdpc2UgT1I/IEl0IGxvb2tzIGxpa2UgdGhlIGtleSBsaWVzIGluIHVuZGVyc3RhbmRpbmcgaG93IGByZXEtXHUwMDNlY3FlLmZsYWdzYCBpcyB1c2VkIGFuZCBtb2RpZmllZCBlbHNld2hlcmUuIExvb2tpbmcgYXQgYF9faW9fdXJpbmdfY21kX2RvbmVgLCBJIHNlZSB0aGF0IGBJT1JJTkdfQ1FFX0ZfMzJgIGFuZCBvdGhlciBmbGFncyBhcmUgYmVpbmcgc2V0IHVzaW5nIGFuIE9SIGFzc2lnbm1lbnQsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGludGVudGlvbiBpcyBmb3IgdGhlc2UgZmxhZ3MgdG8gcGVyc2lzdC4gVGhlIHByZXZpb3VzIGFzc2lnbm1lbnQgaW4gYGlvX2RvX2lvcG9sbGAgd2FzICpvdmVyd3JpdGluZyogdGhlc2UgZXhpc3RpbmcgZmxhZ3MuIFNvLCBpZiBgaW9fZG9faW9wb2xsYCByYW4gYWZ0ZXIgc29tZXRoaW5nIGxpa2UgYGlvX3VyaW5nX2NtZGAgb3IgYGlvX3JlcV9yd19jb21wbGV0ZWAsIGl0IHdhcyBjbGVhcmluZyB0aGVtLCB3aGljaCBpc24ndCB0aGUgZGVzaXJlZCBiZWhhdmlvci4gVGhlIGVhcmxpZXIgY2FsbHMsIGF0IGxpbmUgNTY5LCB3b3VsZCBoYXZlIHdyaXR0ZW4gdGhlIHJlbGV2YW50IGZsYWcuXG5cblRoZSBjaGFuZ2UgdG8gdGhlIE9SIGFzc2lnbm1lbnQgZml4ZXMgdGhpcy5cblxuVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIHNob3VsZCB2ZXJpZnkgdGhhdCBgcmVxYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBvciB6ZXJvZWQgdXBvbiBhbGxvY2F0aW9uLiBJZiBpdCBpc24ndCwgdGhlcmUncyBhIGNoYW5jZSBgcmVxLVx1MDAzZWNxZS5mbGFnc2AgY291bGQgY29udGFpbiBnYXJiYWdlLCBhbmQgdGhhdCB3b3VsZCBpbnRyb2R1Y2UgYSBuZXcgY2xhc3Mgb2YgcHJvYmxlbXMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYGlvX2tpb2NiYCBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiB3aXRoaW4gdGhlIGlvX3VyaW5nIHN1YnN5c3RlbSB0byBjb25maXJtIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5OTIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6NTcuMDQ3MjUxMjgxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg5MjM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19hbGxvY19yZXFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW9fdXJpbmcuYz05NDg9dm9pZCBpb19yZXFfZGVmZXJfZmFpbGVkKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzMzIgcmVzKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy05NjQtICogaGFuZGxlcnMgYW5kIGlvX2lzc3VlX3NxZSgpIGFyZSBkb25lIHdpdGggaXQsIGUuZy4gaW5saW5lIGNvbXBsZXRpb24gcGF0aC5cXG5pb191cmluZy9pb191cmluZy5jOjk2NTogKiBCZWNhdXNlIG9mIHRoYXQsIGlvX2FsbG9jX3JlcSgpIHNob3VsZCBiZSBjYWxsZWQgb25seSB1bmRlciAtXFx1MDAzZXVyaW5nX2xvY2tcXG5pb191cmluZy9pb191cmluZy5jLTk2Ni0gKiBhbmQgd2l0aCBleHRyYSBjYXV0aW9uIHRvIG5vdCBnZXQgYSByZXF1ZXN0IHRoYXQgaXMgc3RpbGwgd29ya2VkIG9uLlxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTY3LSAqL1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6OTY4Ol9fY29sZCBib29sIF9faW9fYWxsb2NfcmVxX3JlZmlsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG5pb191cmluZy9pb191cmluZy5jLTk2OS1cXHRfX211c3RfaG9sZChcXHUwMDI2Y3R4LVxcdTAwM2V1cmluZ19sb2NrKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yMDEzPWludCBpb19zdWJtaXRfc3FlcyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdW5zaWduZWQgaW50IG5yKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMDM2LVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjAzNzpcXHRcXHRpZiAodW5saWtlbHkoIWlvX2FsbG9jX3JlcShjdHgsIFxcdTAwMjZyZXEpKSlcXG5pb191cmluZy9pb191cmluZy5jLTIwMzgtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5oPTIxMj12b2lkIGlvX3Rhc2tfcmVmc19yZWZpbGwoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MjEzOmJvb2wgX19pb19hbGxvY19yZXFfcmVmaWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KTtcXG5pb191cmluZy9pb191cmluZy5oLTIxNC1cXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9NTI1PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlvX2tpb2NiICppb19leHRyYWN0X3JlcShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtNTMzLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg6NTM0OnN0YXRpYyBpbmxpbmUgYm9vbCBpb19hbGxvY19yZXEoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19raW9jYiAqKnJlcSlcXG5pb191cmluZy9pb191cmluZy5oLTUzNS17XFxuaW9fdXJpbmcvaW9fdXJpbmcuaC01MzYtXFx0aWYgKHVubGlrZWx5KGlvX3JlcV9jYWNoZV9lbXB0eShjdHgpKSkge1xcbmlvX3VyaW5nL2lvX3VyaW5nLmg6NTM3OlxcdFxcdGlmICghX19pb19hbGxvY19yZXFfcmVmaWxsKGN0eCkpXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC01MzgtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuaW9fdXJpbmcvbm90aWYuYz0xMTQ9c3RydWN0IGlvX2tpb2NiICppb19hbGxvY19ub3RpZihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG4tLVxcbmlvX3VyaW5nL25vdGlmLmMtMTE5LVxcbmlvX3VyaW5nL25vdGlmLmM6MTIwOlxcdGlmICh1bmxpa2VseSghaW9fYWxsb2NfcmVxKGN0eCwgXFx1MDAyNm5vdGlmKSkpXFxuaW9fdXJpbmcvbm90aWYuYy0xMjEtXFx0XFx0cmV0dXJuIE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjU3LjA5NjE0OTA5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzIyMjQzMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRyYWluIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgSS9PIEFsbG9jYXRpb24gYW5kIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBob3cgdGhlc2UgSS9PIHJlcXVlc3RzIGFyZSBiZWluZyBoYW5kbGVkLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGBfX2lvX2FsbG9jX3JlcV9yZWZpbGxgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgcmVmaWxsaW5nIG1lY2hhbmlzbSBmb3IgdGhlc2UgcmVxdWVzdHMsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHN1c3BlY3QgdGhlcmUgbWlnaHQgYmUgaW5lZmZpY2llbmNpZXMgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHRoZXJlLCBnaXZlbiB0aGUgc2NhbGUgd2UncmUgcHJvYmFibHkgZGVhbGluZyB3aXRoLiBUaGVuLCBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgdGllIHRoYXQgdG8gdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgaW9faW5pdF9yZXFgLCBzcGVjaWZpY2FsbHkgaG93IHRoZSBJL08gcmVxdWVzdHMgYXJlIGluaXRpYWxpemVkIGluIGNvbmp1bmN0aW9uIHdpdGggc2xhYiBpbml0aWFsaXphdGlvbi4gQXJlIHdlIGRvaW5nIHRoaXMgZWZmZWN0aXZlbHk/IEFyZSB3ZSBwb3RlbnRpYWxseSBvdmVyLWFsbG9jYXRpbmcsIG9yIHVuZGVyLWFsbG9jYXRpbmcsIHNsYWJzIGhlcmU/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UncmUga2VlcGluZyBpdCBlZmZpY2llbnQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBwcm9ibGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ1OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjU5LjEyODM3OTg1MloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDUzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvaW9fdXJpbmcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NjU6XFx0ICogQmVjYXVzZSBvZiB0aGF0LCBpb19hbGxvY19yZXEoKSBzaG91bGQgYmUgY2FsbGVkIG9ubHkgdW5kZXIgLVxcdTAwM2V1cmluZ19sb2NrXFxuIDk2NjpcXHQgKiBhbmQgd2l0aCBleHRyYSBjYXV0aW9uIHRvIG5vdCBnZXQgYSByZXF1ZXN0IHRoYXQgaXMgc3RpbGwgd29ya2VkIG9uLlxcbiA5Njc6XFx0ICovXFxuIDk2ODpcXHRfX2NvbGQgYm9vbCBfX2lvX2FsbG9jX3JlcV9yZWZpbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXFxuIDk2OTpcXHRcXHRfX211c3RfaG9sZChcXHUwMDI2Y3R4LVxcdTAwM2V1cmluZ19sb2NrKVxcbiA5NzA6XFx0e1xcbiA5NzE6XFx0XFx0Z2ZwX3QgZ2ZwID0gR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX1pFUk87XFxuIDk3MjpcXHRcXHR2b2lkICpyZXFzW0lPX1JFUV9BTExPQ19CQVRDSF07XFxuIDk3MzpcXHRcXHRpbnQgbnJfcmVxcyA9IEFSUkFZX1NJWkUocmVxcyk7XFxuIDk3NDpcXHRcXG4gOTc1OlxcdFxcdC8qXFxuIDk3NjpcXHRcXHQgKiBCdWxrIGFsbG9jIGlzIGFsbC1vci1ub3RoaW5nLiBJZiB3ZSBmYWlsIHRvIGdldCBhIGJhdGNoLCByZXRyeSBhXFxuIDk3NzpcXHRcXHQgKiBzaW5nbGUgYWxsb2NhdGlvbiB0byBiZSBvbiB0aGUgc2FmZSBzaWRlLlxcbiA5Nzg6XFx0XFx0ICovXFxuIDk3OTpcXHRcXHRpZiAoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhyZXFfY2FjaGVwLCBnZnAsIG5yX3JlcXMsIHJlcXMpKSB7XFxuIDk4MDpcXHRcXHRcXHRyZXFzWzBdID0ga21lbV9jYWNoZV9hbGxvYyhyZXFfY2FjaGVwLCBnZnApO1xcbiA5ODE6XFx0XFx0XFx0aWYgKCFyZXFzWzBdKVxcbiA5ODI6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA5ODM6XFx0XFx0XFx0bnJfcmVxcyA9IDE7XFxuIDk4NDpcXHRcXHR9XFxuIDk4NTpcXHRcXG4gOTg2OlxcdFxcdHBlcmNwdV9yZWZfZ2V0X21hbnkoXFx1MDAyNmN0eC1cXHUwMDNlcmVmcywgbnJfcmVxcyk7XFxuIDk4NzpcXHRcXHRjdHgtXFx1MDAzZW5yX3JlcV9hbGxvY2F0ZWQgKz0gbnJfcmVxcztcXG4gOTg4OlxcdFxcbiA5ODk6XFx0XFx0d2hpbGUgKG5yX3JlcXMtLSlcXG4gOTkwOlxcdFxcdFxcdGlvX3JlcV9hZGRfdG9fY2FjaGUocmVxc1tucl9yZXFzXSwgY3R4KTtcXG4gOTkxOlxcdFxcdHJldHVybiB0cnVlO1xcbiA5OTI6XFx0fVxcbiA5OTM6XFx0XFxuIDk5NDpcXHRfX2NvbGQgdm9pZCBpb19mcmVlX3JlcShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4gOTk1OlxcdHtcXG4gOTk2OlxcdFxcdC8qIHJlZnMgd2VyZSBhbHJlYWR5IHB1dCwgcmVzdG9yZSB0aGVtIGZvciBpb19yZXFfdGFza19jb21wbGV0ZSgpICovXFxuIDk5NzpcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5SRVFfRl9SRUZDT1VOVDtcXG4gOTk4OlxcdFxcdC8qIHdlIG9ubHkgd2FudCB0byBmcmVlIGl0LCBkb24ndCBwb3N0IENRRXMgKi9cXG4gOTk5OlxcdFxcdHJlcS1cXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQ1FFX1NLSVA7XFxuMTAwMDpcXHRcXHRyZXEtXFx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fcmVxX3Rhc2tfY29tcGxldGU7XFxuMTAwMTpcXHRcXHRpb19yZXFfdGFza193b3JrX2FkZChyZXEpO1xcbjEwMDI6XFx0fVxcbjEwMDM6XFx0XFxuMTAwNDpcXHRzdGF0aWMgdm9pZCBfX2lvX3JlcV9maW5kX25leHRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6NTkuMTI4NTg3MDAyWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzODM5NzgyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgYGlvX2luaXRfcmVxYCBpbiBgaW9fdXJpbmcvaW9fdXJpbmcuY2AqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkaXZpbmcgaW50byB0aGUgYGlvX3VyaW5nYCBpbXBsZW1lbnRhdGlvbiwgYW5kIGl0J3MgdGltZSB0byB6ZXJvIGluIG9uIGEgY3JpdGljYWwgZnVuY3Rpb246IGBpb19pbml0X3JlcWAuIE15IG1lbnRhbCBjaGVja2xpc3QgaXMgaW1tZWRpYXRlbHkgZW5nYWdlZDogXCJXaGF0IGlzIHRoaXMgZnVuY3Rpb24gZG9pbmc/IFdoZXJlIGRvZXMgaXQgZml0IGludG8gdGhlIHJlcXVlc3QgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcz8gQXJlIHRoZXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGdpdmVuIHRoYXQgdGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgYXN5bmMgSU8gc3lzdGVtP1wiIEknbSBleHBlY3RpbmcgdGhpcyBpcyB3aGVyZSB0aGUgZ3JvdW5kd29yayBpcyBsYWlkIGZvciB0aGUgbmV3IHJlcXVlc3QsIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGxpa2VseSBpbml0aWFsaXplZC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBsb29raW5nIGZvciBhbnkgcG9pbnRzIG9mIGNvbnRlbnRpb24gb3IgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGR1cmluZyB0aGUgcmVxdWVzdCBwcmVwYXJhdGlvbiBwaGFzZS4gV2UgYWxsIGtub3cgcGVyZm9ybWFuY2UgaXMga2V5IGluIHRoZXNlIHRoaW5ncy4gU28sIEknbGwgYmUgcGFydGljdWxhcmx5IHZpZ2lsYW50IGFib3V0IG1lbW9yeSBhbGxvY2F0aW9uLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgb3ZlcmFsbCBlZmZpY2llbmN5IG9mIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSSdtIHJlYWR5IHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBuZXcgcmVxdWVzdHMgYXJlIGJlaW5nIHByZXBhcmVkIGFuZCBpbnRlZ3JhdGVkIGludG8gdGhlIGBpb191cmluZ2AgbWFjaGluZXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQwOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MDEuNTEyNTY4MzA5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDA0MzAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19pbml0X3JlcVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9icGZfZmlsdGVyLmM9NTc9aW50IF9faW9fdXJpbmdfcnVuX2JwZl9maWx0ZXJzKHN0cnVjdCBpb19icGZfZmlsdGVyIF9fcmN1ICoqZmlsdGVycyxcXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy02OS1cXHQgKiByZXEtXFx1MDAzZW9wY29kZSBoYXMgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCB0byBiZSB3aXRoaW4gdGhlIHJhbmdlXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jOjcwOlxcdCAqIG9mIHdoYXQgd2UgZXhwZWN0LCBpb19pbml0X3JlcSgpIGRvZXMgdGhpcy5cXG5pb191cmluZy9icGZfZmlsdGVyLmMtNzEtXFx0ICovXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTE3MTQ9c3RhdGljIF9fY29sZCBpbnQgaW9faW5pdF9mYWlsX3JlcShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IGVycilcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTcyMC1cXG5pb191cmluZy9pb191cmluZy5jOjE3MjE6c3RhdGljIGludCBpb19pbml0X3JlcShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNzIyLVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUsIHVuc2lnbmVkIGludCAqbGVmdClcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9MTg3Mz1zdGF0aWMgaW5saW5lIGludCBpb19zdWJtaXRfc3FlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTg3OS1cXG5pb191cmluZy9pb191cmluZy5jOjE4ODA6XFx0cmV0ID0gaW9faW5pdF9yZXEoY3R4LCByZXEsIHNxZSwgbGVmdCk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xODgxLVxcdGlmICh1bmxpa2VseShyZXQpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNzowMS41NjY2MTY4MDdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAzMDM2MzA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGlvX2luaXRfcmVxYCBpbiBgaW9fdXJpbmcuY2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgaW9fdXJpbmcuY2AgYW5kIHNwZWNpZmljYWxseSBmb2N1cyBvbiB0aGUgYGlvX2luaXRfcmVxYCBmdW5jdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gaW5pdGlhbGl6aW5nIEkvTyByZXF1ZXN0cy4gTGV0J3MgaG9tZSBpbiBvbiBsaW5lcyAxNzIxIHRvIDE3NzA7IHRoYXQncyBwcm9iYWJseSB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGlzIGZ1bmN0aW9uIHJlc2lkZXMuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgdGhlIGluaXRpYWwgc2V0dXAsIHZhbGlkYXRpb24sIGFuZCBwb3RlbnRpYWxseSBxdWV1ZWluZyBoYXBwZW4uIE5lZWQgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgZWFjaCBzZWN0aW9uIG9mIHRoaXMgY29kZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBhcmd1bWVudCB2YWxpZGF0aW9uLCBtZW1vcnkgYWxsb2NhdGlvbiAoaWYgYW55KSwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgU3VibWlzc2lvbiBRdWV1ZSBhbmQgQ29tcGxldGlvbiBRdWV1ZS4gVGhpcyBhcmVhIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHJlcXVlc3QgbGlmZWN5Y2xlIGluIGlvX3VyaW5nLCBzbyBJJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24uIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBwbHVtYmluZyBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDc1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MDMuNTk2OTgyNTkxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjMxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9pb191cmluZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3MjA6XFx0XFxuMTcyMTpcXHRzdGF0aWMgaW50IGlvX2luaXRfcmVxKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4xNzIyOlxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUsIHVuc2lnbmVkIGludCAqbGVmdClcXG4xNzIzOlxcdFxcdF9fbXVzdF9ob2xkKFxcdTAwMjZjdHgtXFx1MDAzZXVyaW5nX2xvY2spXFxuMTcyNDpcXHR7XFxuMTcyNTpcXHRcXHRjb25zdCBzdHJ1Y3QgaW9faXNzdWVfZGVmICpkZWY7XFxuMTcyNjpcXHRcXHR1bnNpZ25lZCBpbnQgc3FlX2ZsYWdzO1xcbjE3Mjc6XFx0XFx0aW50IHBlcnNvbmFsaXR5O1xcbjE3Mjg6XFx0XFxuMTcyOTpcXHRcXHRyZXEtXFx1MDAzZWN0eCA9IGN0eDtcXG4xNzMwOlxcdFxcdHJlcS1cXHUwMDNlb3Bjb2RlID0gUkVBRF9PTkNFKHNxZS1cXHUwMDNlb3Bjb2RlKTtcXG4xNzMxOlxcdFxcdC8qIHNhbWUgbnVtZXJpY2FsIHZhbHVlcyB3aXRoIGNvcnJlc3BvbmRpbmcgUkVRX0ZfKiwgc2FmZSB0byBjb3B5ICovXFxuMTczMjpcXHRcXHRzcWVfZmxhZ3MgPSBSRUFEX09OQ0Uoc3FlLVxcdTAwM2VmbGFncyk7XFxuMTczMzpcXHRcXHRyZXEtXFx1MDAzZWZsYWdzID0gKF9fZm9yY2UgaW9fcmVxX2ZsYWdzX3QpIHNxZV9mbGFncztcXG4xNzM0OlxcdFxcdHJlcS1cXHUwMDNlY3FlLnVzZXJfZGF0YSA9IFJFQURfT05DRShzcWUtXFx1MDAzZXVzZXJfZGF0YSk7XFxuMTczNTpcXHRcXHRyZXEtXFx1MDAzZWZpbGUgPSBOVUxMO1xcbjE3MzY6XFx0XFx0cmVxLVxcdTAwM2V0Y3R4ID0gY3VycmVudC1cXHUwMDNlaW9fdXJpbmc7XFxuMTczNzpcXHRcXHRyZXEtXFx1MDAzZWNhbmNlbF9zZXFfc2V0ID0gZmFsc2U7XFxuMTczODpcXHRcXHRyZXEtXFx1MDAzZWFzeW5jX2RhdGEgPSBOVUxMO1xcbjE3Mzk6XFx0XFxuMTc0MDpcXHRcXHRpZiAodW5saWtlbHkocmVxLVxcdTAwM2VvcGNvZGUgXFx1MDAzZT0gSU9SSU5HX09QX0xBU1QpKSB7XFxuMTc0MTpcXHRcXHRcXHRyZXEtXFx1MDAzZW9wY29kZSA9IDA7XFxuMTc0MjpcXHRcXHRcXHRyZXR1cm4gaW9faW5pdF9mYWlsX3JlcShyZXEsIC1FSU5WQUwpO1xcbjE3NDM6XFx0XFx0fVxcbjE3NDQ6XFx0XFx0cmVxLVxcdTAwM2VvcGNvZGUgPSBhcnJheV9pbmRleF9ub3NwZWMocmVxLVxcdTAwM2VvcGNvZGUsIElPUklOR19PUF9MQVNUKTtcXG4xNzQ1OlxcdFxcbjE3NDY6XFx0XFx0ZGVmID0gXFx1MDAyNmlvX2lzc3VlX2RlZnNbcmVxLVxcdTAwM2VvcGNvZGVdO1xcbjE3NDc6XFx0XFx0aWYgKGRlZi1cXHUwMDNlaXNfMTI4IFxcdTAwMjZcXHUwMDI2ICEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9TUUUxMjgpKSB7XFxuMTc0ODpcXHRcXHRcXHQvKlxcbjE3NDk6XFx0XFx0XFx0ICogQSAxMjhiIG9wIG9uIGEgbm9uLTEyOGIgU1EgcmVxdWlyZXMgbWl4ZWQgU1FFIHN1cHBvcnQgYXNcXG4xNzUwOlxcdFxcdFxcdCAqIHdlbGwgYXMgMiBjb250aWd1b3VzIGVudHJpZXMuXFxuMTc1MTpcXHRcXHRcXHQgKi9cXG4xNzUyOlxcdFxcdFxcdGlmICghKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfU1FFX01JWEVEKSB8fCAqbGVmdCBcXHUwMDNjIDIgfHxcXG4xNzUzOlxcdFxcdFxcdCAgICAodW5zaWduZWQpKHNxZSAtIGN0eC1cXHUwMDNlc3Ffc3FlcykgXFx1MDAzZT0gY3R4LVxcdTAwM2VzcV9lbnRyaWVzIC0gMSlcXG4xNzU0OlxcdFxcdFxcdFxcdHJldHVybiBpb19pbml0X2ZhaWxfcmVxKHJlcSwgLUVJTlZBTCk7XFxuMTc1NTpcXHRcXHRcXHQvKlxcbjE3NTY6XFx0XFx0XFx0ICogQSAxMjhiIG9wZXJhdGlvbiBvbiBhIG1peGVkIFNRIHVzZXMgdHdvIGVudHJpZXMsIHNvIHdlIGhhdmVcXG4xNzU3OlxcdFxcdFxcdCAqIHRvIGluY3JlbWVudCB0aGUgaGVhZCBhbmQgY2FjaGVkIHJlZnMsIGFuZCBkZWNyZW1lbnQgd2hhdCdzXFxuMTc1ODpcXHRcXHRcXHQgKiBsZWZ0LlxcbjE3NTk6XFx0XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI3OjAzLjU5NzEyMDY2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMTE0NDUwNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIFJlcXVlc3QgTGlmZWN5Y2xlIGFuZCBGbGFnIE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSByZXF1ZXN0IGxpZmVjeWNsZSwgc3BlY2lmaWNhbGx5IGhvdyB3ZSBoYW5kbGUgcmVxdWVzdHMgcHVsbGVkIGZyb20gdGhlIGNvbnRleHQgY2FjaGUuIEl0J3MgdGltZSB0byB6ZXJvIGluIG9uIGhvdyB3ZSdyZSBzZXR0aW5nIGFuZCBjbGVhcmluZyB0aG9zZSBgcmVxLVx1MDAzZWNxZS5mbGFnc2AgYml0cyB3aGVuIHJlY3ljbGluZyByZXF1ZXN0cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSdyZSBub3QgY2Fycnlpbmcgb3ZlciBhbnkgc3RhbGUgZmxhZ3MgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgZXJyb3JzIGRvd24gdGhlIGxpbmUuIFdlIGNhbid0IGhhdmUgYW55IHJlbW5hbnRzIGZyb20gYSBwcmV2aW91cyBvcGVyYXRpb24gY29ycnVwdGluZyB0aGUgY3VycmVudCBvbmUuIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhIGZvciBlbnN1cmluZyByZXF1ZXN0IGludGVncml0eSBhbmQgcHJldmVudGluZyBhbnkgc3VidGxlLCBoYXJkLXRvLWRlYnVnIGlzc3VlcyByZWxhdGVkIHRvIGNvbnRleHQgcmV1c2UuIFVuZGVyc3RhbmRpbmcgd2hlcmUgdGhlIGZsYWdzIGFyZSBpbml0aWFsaXplZCBhbmQgcmVzZXQgaXMgdGhlIGtleSB0byBtYW5hZ2luZyBvdXIgcmVxdWVzdCByZXNvdXJjZSByZXNwb25zaWJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwODEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI3OjA1LjkwODU2NzYxMVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1OTA0NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fcmVxX2FkZF90b19jYWNoZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pb191cmluZy5jPTE3ND1zdGF0aWMgaW5saW5lIHZvaWQgcmVxX2ZhaWxfbGlua19ub2RlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmVzKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNzktXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoxODA6c3RhdGljIGlubGluZSB2b2lkIGlvX3JlcV9hZGRfdG9fY2FjaGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTgxLXtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9OTY4PV9fY29sZCBib29sIF9faW9fYWxsb2NfcmVxX3JlZmlsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTg5LVxcdHdoaWxlIChucl9yZXFzLS0pXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo5OTA6XFx0XFx0aW9fcmVxX2FkZF90b19jYWNoZShyZXFzW25yX3JlcXNdLCBjdHgpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTkxLVxcdHJldHVybiB0cnVlO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xMDg1PXN0YXRpYyB2b2lkIGlvX2ZyZWVfYmF0Y2hfbGlzdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTEyMi1cXHRcXHRub2RlID0gcmVxLVxcdTAwM2Vjb21wX2xpc3QubmV4dDtcXG5pb191cmluZy9pb191cmluZy5jOjExMjM6XFx0XFx0aW9fcmVxX2FkZF90b19jYWNoZShyZXEsIGN0eCk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xMTI0LVxcdH0gd2hpbGUgKG5vZGUpO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yMDEzPWludCBpb19zdWJtaXRfc3FlcyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdW5zaWduZWQgaW50IG5yKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMDM5LVxcdFxcdGlmICh1bmxpa2VseSghaW9fZ2V0X3NxZShjdHgsIFxcdTAwMjZzcWUpKSkge1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjA0MDpcXHRcXHRcXHRpb19yZXFfYWRkX3RvX2NhY2hlKHJlcSwgY3R4KTtcXG5pb191cmluZy9pb191cmluZy5jLTIwNDEtXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI3OjA1Ljk1NDE2MTA5OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MDQwMTE0MzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSU9Qb2xsIFJlcXVlc3QgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgaW9fcHV0X2tidWZgIGlzIHJldHVybmluZyBhbiBgdTMyYCAob3IgdW5zaWduZWQgaW50KSB0aGF0IHJlcHJlc2VudHMgZmxhZ3MsIHBvdGVudGlhbGx5IGluY2x1ZGluZyBgSU9SSU5HX0NRRV9GX0JVRkZFUmAgd2l0aCBpdHMgYnVmZmVyIElELCBjcml0aWNhbCBmb3IgaW91cmluZyBvcGVyYXRpb25zLiBOb3csIGxvb2tpbmcgYXQgdGhlIGNvbnRleHQsIHNwZWNpZmljYWxseSB3aXRoaW4gYGlvX2RvX2lvcG9sbGAgd2hlbiBoYW5kbGluZyBhbiBpb3BvbGwgcmVxdWVzdCBjb21wbGV0aW9uLCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gaG93IHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgYHJlcS1cdTAwM2VjcWUuZmxhZ3NgIGZpZWxkLiBQcmV2aW91c2x5LCB0aGUgbGluZSB3YXMgc2V0dGluZyBgcmVxLVx1MDAzZWNxZS5mbGFnc2AgKmVxdWFsIHRvKiB0aGUgcmVzdWx0IG9mIGBpb19wdXRfa2J1ZmAuIFRoZSBwYXRjaCBjbGV2ZXJseSBzd2FwcyB0aGlzIHRvIGEgKmJpdHdpc2UgT1IqIG9wZXJhdGlvbiAoYHw9YCkuIFRoaXMgaXMgYSBrZXkgZGV0YWlsLiBUaGlzIG1lYW5zIHRoYXQgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyBhbnkgZXhpc3RpbmcgZmxhZ3MgaW4gYHJlcS1cdTAwM2VjcWUuZmxhZ3NgLCB3ZSdyZSBub3cgKmFkZGluZyogdGhlIGZsYWdzIHJldHVybmVkIGJ5IGBpb19wdXRfa2J1ZmAuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBwcmVzZXJ2aW5nIGV4aXN0aW5nIGZsYWcgc2V0dGluZ3MuIFRoZSBgbWF4KHJlcS1cdTAwM2VjcWUucmVzLCAwKWAgY2FsbCBpcyBjb3JyZWN0bHkgaGFuZGxpbmcgcG90ZW50aWFsIG5lZ2F0aXZlIHJlc3VsdHMuIEl0J3MgYSB0eXBpY2FsIGFwcHJvYWNoLCBhbHRob3VnaCBpbiB0aGlzIGluc3RhbmNlLCBpdCdzIGEgZ29vZCBpZGVhIHRvIGNvbmZpcm0gaWYgYHJlcS1cdTAwM2VjcWUucmVzYCBjb3VsZCBldmVyIGdlbnVpbmVseSBiZSBuZWdhdGl2ZSBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuXG5cbk15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgaW9fcHV0X2tidWZgIGl0c2VsZiwgc28gSSBuZWVkIHRvIGNoZWNrIGl0cyBkZWZpbml0aW9uIGFuZCB2ZXJpZnkgZXhhY3RseSBob3cgaXRzIHJldHVybiB2YWx1ZSBpbnRlcmFjdHMgd2l0aCB0aGUgZmxhZ3MuIFRoaXMgd2lsbCBjbGFyaWZ5IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYW5kIHdoZXRoZXIgdGhpcyBhcHByb2FjaCB0byBmbGFncyBtYW5hZ2VtZW50IGlzIHNvdW5kIGluIHRoZSBjdXJyZW50IGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MDYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MTMuOTk0Mjc4MzA0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU2MjQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19wdXRfa2J1ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pb191cmluZy5jPTk0OD12b2lkIGlvX3JlcV9kZWZlcl9mYWlsZWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHMzMiByZXMpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTk1NS1cXHRyZXFfc2V0X2ZhaWwocmVxKTtcXG5pb191cmluZy9pb191cmluZy5jOjk1NjpcXHRpb19yZXFfc2V0X3JlcyhyZXEsIHJlcywgaW9fcHV0X2tidWYocmVxLCByZXMsIE5VTEwpKTtcXG5pb191cmluZy9pb191cmluZy5jLTk1Ny1cXHRpZiAoZGVmLVxcdTAwM2VmYWlsKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jPTM4MT1pbnQgaW9fYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy00MDYtXFxuaW9fdXJpbmcva2J1Zi5jOjQwNzpzdGF0aWMgaW5saW5lIGJvb2wgX19pb19wdXRfa2J1Zl9yaW5nKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbmlvX3VyaW5nL2tidWYuYy00MDgtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCwgaW50IGxlbiwgaW50IG5yKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTQyMC1cXG5pb191cmluZy9rYnVmLmM6NDIxOnVuc2lnbmVkIGludCBfX2lvX3B1dF9rYnVmcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcXG5pb191cmluZy9rYnVmLmMtNDIyLVxcdFxcdFxcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpXFxuLS1cXG5pb191cmluZy9rYnVmLmMtNDMyLVxcbmlvX3VyaW5nL2tidWYuYzo0MzM6XFx0aWYgKCFfX2lvX3B1dF9rYnVmX3JpbmcocmVxLCBibCwgbGVuLCBuYnVmcykpXFxuaW9fdXJpbmcva2J1Zi5jLTQzNC1cXHRcXHRyZXQgfD0gSU9SSU5HX0NRRV9GX0JVRl9NT1JFO1xcbi0tXFxuaW9fdXJpbmcva2J1Zi5oPTg3PXZvaWQgaW9fa2J1Zl9kcm9wX2xlZ2FjeShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSk7XFxuaW9fdXJpbmcva2J1Zi5oLTg4LVxcbmlvX3VyaW5nL2tidWYuaDo4OTp1bnNpZ25lZCBpbnQgX19pb19wdXRfa2J1ZnMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXFxuaW9fdXJpbmcva2J1Zi5oLTkwLVxcdFxcdFxcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpO1xcbi0tXFxuaW9fdXJpbmcva2J1Zi5oPTExND1zdGF0aWMgaW5saW5lIGJvb2wgaW9fa2J1Zl9yZWN5Y2xlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5oLTEyNS1cXG5pb191cmluZy9rYnVmLmg6MTI2OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvX3B1dF9rYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgbGVuLFxcbmlvX3VyaW5nL2tidWYuaC0xMjctXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwpXFxuLS1cXG5pb191cmluZy9rYnVmLmgtMTMwLVxcdFxcdHJldHVybiAwO1xcbmlvX3VyaW5nL2tidWYuaDoxMzE6XFx0cmV0dXJuIF9faW9fcHV0X2tidWZzKHJlcSwgYmwsIGxlbiwgMSk7XFxuaW9fdXJpbmcva2J1Zi5oLTEzMi19XFxuaW9fdXJpbmcva2J1Zi5oLTEzMy1cXG5pb191cmluZy9rYnVmLmg6MTM0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvX3B1dF9rYnVmcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IGxlbixcXG5pb191cmluZy9rYnVmLmgtMTM1LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsIGludCBuYnVmcylcXG4tLVxcbmlvX3VyaW5nL2tidWYuaC0xMzgtXFx0XFx0cmV0dXJuIDA7XFxuaW9fdXJpbmcva2J1Zi5oOjEzOTpcXHRyZXR1cm4gX19pb19wdXRfa2J1ZnMocmVxLCBibCwgbGVuLCBuYnVmcyk7XFxuaW9fdXJpbmcva2J1Zi5oLTE0MC19XFxuLS1cXG5pb191cmluZy9uZXQuYz00OTE9c3RhdGljIGlubGluZSBib29sIGlvX3NlbmRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNDk5LVxcdGlmICghKHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpKSB7XFxuaW9fdXJpbmcvbmV0LmM6NTAwOlxcdFxcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgc2VsLVxcdTAwM2V2YWwsIHNlbC1cXHUwMDNlYnVmX2xpc3QpO1xcbmlvX3VyaW5nL25ldC5jLTUwMS1cXHRcXHRnb3RvIGZpbmlzaDtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTUwMy1cXG5pb191cmluZy9uZXQuYzo1MDQ6XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWZzKHJlcSwgc2VsLVxcdTAwM2V2YWwsIHNlbC1cXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBzZWwtXFx1MDAzZXZhbCkpO1xcbmlvX3VyaW5nL25ldC5jLTUwNS1cXG4tLVxcbmlvX3VyaW5nL25ldC5jPTg1Mz1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9uZXQuYy04NzktXFxuaW9fdXJpbmcvbmV0LmM6ODgwOlxcdFxcdGNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCB0aGlzX3JldCwgc2VsLVxcdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHRoaXNfcmV0KSk7XFxuaW9fdXJpbmcvbmV0LmMtODgxLVxcdFxcdGlmIChzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVl9SRVRSWSlcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTkwMS1cXHR9IGVsc2Uge1xcbmlvX3VyaW5nL25ldC5jOjkwMjpcXHRcXHRjZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBzZWwtXFx1MDAzZXZhbCwgc2VsLVxcdTAwM2VidWZfbGlzdCk7XFxuaW9fdXJpbmcvbmV0LmMtOTAzLVxcdH1cXG4tLVxcbmlvX3VyaW5nL3J3LmM9NTYyPXZvaWQgaW9fcmVxX3J3X2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxcbi0tXFxuaW9fdXJpbmcvcncuYy01NjgtXFx0aWYgKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoUkVRX0ZfQlVGRkVSX1NFTEVDVEVEfFJFUV9GX0JVRkZFUl9SSU5HKSlcXG5pb191cmluZy9ydy5jOjU2OTpcXHRcXHRyZXEtXFx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXFx1MDAzZWNxZS5yZXMsIDApLCBOVUxMKTtcXG5pb191cmluZy9ydy5jLTU3MC1cXG4tLVxcbmlvX3VyaW5nL3J3LmM9NjQwPXN0YXRpYyBpbnQga2lvY2JfZG9uZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3NpemVfdCByZXQsXFxuLS1cXG5pb191cmluZy9ydy5jLTY1Ny1cXHRcXHRpZiAoc2VsKVxcbmlvX3VyaW5nL3J3LmM6NjU4OlxcdFxcdFxcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgcmV0LCBzZWwtXFx1MDAzZWJ1Zl9saXN0KTtcXG5pb191cmluZy9ydy5jLTY1OS1cXHRcXHRpb19yZXFfc2V0X3JlcyhyZXEsIGZpbmFsX3JldCwgY2ZsYWdzKTtcXG4tLVxcbmlvX3VyaW5nL3J3LmM9MTAzMj1pbnQgaW9fcmVhZF9tc2hvdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvcncuYy0xMDY3LVxcdH0gZWxzZSBpZiAoIShyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQVBPTExfTVVMVElTSE9UKSkge1xcbmlvX3VyaW5nL3J3LmM6MTA2ODpcXHRcXHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHJldCwgc2VsLmJ1Zl9saXN0KTtcXG5pb191cmluZy9ydy5jLTEwNjktXFx0fSBlbHNlIHtcXG4tLVxcbmlvX3VyaW5nL3J3LmMtMTA3NS1cXHRcXHQgKi9cXG5pb191cmluZy9ydy5jOjEwNzY6XFx0XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWYocmVxLCByZXQsIHNlbC5idWZfbGlzdCk7XFxuaW9fdXJpbmcvcncuYy0xMDc3LVxcdFxcdHJ3LVxcdTAwM2VsZW4gPSAwOyAvKiBzaW1pbGFybHkgdG8gYWJvdmUsIHJlc2V0IGxlbiB0byAwICovXFxuLS1cXG5pb191cmluZy9ydy5jPTEzMTk9aW50IGlvX2RvX2lvcG9sbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBmb3JjZV9ub25zcGluKVxcbi0tXFxuaW9fdXJpbmcvcncuYy0xMzc1LVxcdFxcdG5yX2V2ZW50cysrO1xcbmlvX3VyaW5nL3J3LmM6MTM3NjpcXHRcXHRyZXEtXFx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXFx1MDAzZWNxZS5yZXMsIDApLCBOVUxMKTtcXG5pb191cmluZy9ydy5jLTEzNzctXFx0XFx0aWYgKCFpb19pc191cmluZ19jbWQocmVxKSlcXG4tLVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jPTM4Nz1ib29sIGlvX3VyaW5nX21zaG90X2NtZF9wb3N0X2NxZShzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXFxuLS1cXG5pb191cmluZy91cmluZ19jbWQuYy0zOTYtXFx0aWYgKHNlbC1cXHUwMDNldmFsIFxcdTAwM2UgMCkge1xcbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjM5NzpcXHRcXHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHNlbC1cXHUwMDNldmFsLCBzZWwtXFx1MDAzZWJ1Zl9saXN0KTtcXG5pb191cmluZy91cmluZ19jbWQuYy0zOTgtXFx0XFx0aWYgKGlvX3JlcV9wb3N0X2NxZShyZXEsIHNlbC1cXHUwMDNldmFsLCBjZmxhZ3MgfCBJT1JJTkdfQ1FFX0ZfTU9SRSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI3OjE0LjA0MTg0MzUxMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MzQwMTQ4OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgaW9fZG9faW9wb2xsYCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGlvX2RvX2lvcG9sbGAsIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgc3dpdGNoaW5nIGZyb20gYHJlcS1cdTAwM2VjcWUuZmxhZ3MgPSBpb19wdXRfa2J1ZiguLi4pYCB0byBgcmVxLVx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZiguLi4pYC4gRXNzZW50aWFsbHksIHdlJ3JlIG5vdyBwcmVzZXJ2aW5nIGFueSBleGlzdGluZyBmbGFncyB3aXRoaW4gYHJlcS1cdTAwM2VjcWUuZmxhZ3NgIHdoZW4gYWRkaW5nIGJ1ZmZlciBmbGFncyBkdXJpbmcgaW9wb2xsIGNvbXBsZXRpb24uIFRoZSBjcnVjaWFsIHRoaW5nIGhlcmUgaXMgbWFraW5nIHN1cmUgdGhhdCB3ZSBhcmVuJ3QgaW5hZHZlcnRlbnRseSB3aXBpbmcgb3V0IG90aGVyLCBwb3NzaWJseSBpbXBvcnRhbnQsIGZsYWdzIHRoYXQgbWlnaHQgYWxyZWFkeSBiZSBzZXQuIFRoaXMgaXMgYSBjb21tb24gYW5kIHVzdWFsbHkgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBidWcgZml4LlxuXG5Ob3csIHRoZSBLTVNBTiBhcHBsaWNhYmlsaXR5LiBEb2VzIHRoaXMgcGF0Y2ggb3BlbiBhbnkgZG9vcnMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBMZXQncyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuIEknbSBub3Qgc2VlaW5nIGFueSBrZXJuZWwgbWVtb3J5IGFsbG9jYXRpb25zIHRoYXQgYXJlIHVuaW5pdGlhbGl6ZWQgZHVlIHRvIHRoaXMgY2hhbmdlLiBObyBuZXcgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMgb3IgZmllbGRzIGFyZSBpbnRyb2R1Y2VkLCB0aGF0IHdvdWxkIGJlIGEgcmVkIGZsYWcuIFRoZSBgcmVxLVx1MDAzZWNxZS5mbGFnc2AgZmllbGQgaXRzZWxmIGlzIGluaXRpYWxpemVkIGFuZCBkZWZpbmVkIGZyb20gdGhlIG1vbWVudCB0aGUgYHJlcWAgaXMgY3JlYXRlZC4gVGhlIGZpeCBpcyBhIHNpbXBsZSwgc2luZ2xlIGNoYXJhY3RlciBjaGFuZ2UsIHN3YXBwaW5nIGFuIGFzc2lnbm1lbnQgYD1gIHdpdGggYSBiaXR3aXNlIE9SIG9wZXJhdG9yIGB8PWAgb24gYW4gaW50ZWdlciBmaWVsZCAoYHJlcS1cdTAwM2VjcWUuZmxhZ3NgKS4gVGhpcyBtZWFucyB3ZSBhcmVuJ3QgY2hhbmdpbmcgdGhlIGZ1bmRhbWVudGFsIG5hdHVyZSBvZiBob3cgdGhpcyBmaWVsZCBpcyBoYW5kbGVkOyBqdXN0IG1vZGlmeWluZyB0aGUgdXBkYXRlIHByb2Nlc3MuIFRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBkYXRhIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBicmFuY2hpbmcgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgbm8gbWlzc2luZyBgbWVtc2V0YCBjYWxscywgd2hpY2ggYXJlIGFsbCB1c3VhbCBLTVNBTiBjb25jZXJucy5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLlxuXG5MZXQncyBkbyBhIHF1aWNrIGZpbmFsIHJldmlldyBvZiB0aGUgY3JpdGVyaWEuIEkgbmVlZCB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgY2FsbCBpdCBleGFjdGx5IG9uY2UuIFRoZSBkb2N1bWVudGF0aW9uIGVtcGhhc2l6ZXMgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYFRydWVgICpvbmx5KiBpZiB0aGVyZSBhcmUgY2hhbmdlcyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU2luY2UgdGhhdCdzIGNsZWFybHkgbm90IHRoZSBjYXNlIGhlcmUsIEknbSBjb25maWRlbnQuIEkgc2hvdWxkIGFsc28gYmUgY2xlYXIgaW4gbXkgYEtNU0FOUmVhc29uaW5nYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNjgsIk91dHB1dFRva2VucyI6MjA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI3OjIzLjM4MTk5NTE0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaW9fZG9faW9wb2xsKClgIGluIGBpb191cmluZy9ydy5jYCBieSBjaGFuZ2luZyBgcmVxLVxcdTAwM2VjcWUuZmxhZ3MgPSBpb19wdXRfa2J1ZiguLi4pYCB0byBgcmVxLVxcdTAwM2VjcWUuZmxhZ3MgfD0gaW9fcHV0X2tidWYoLi4uKWAuIFRoaXMgaXMgYSBvbmUtbGluZSBsb2dpY2FsIGZpeCBlbnN1cmluZyB0aGF0IGZsYWdzIGFscmVhZHkgc2V0IG9uIGByZXEtXFx1MDAzZWNxZS5mbGFnc2AgKHN1Y2ggYXMgYElPUklOR19DUUVfRl8zMmApIGFyZSBwcmVzZXJ2ZWQgd2hlbiBhcHBlbmRpbmcgY29tcGxldGlvbiBmbGFncyBmb3IgcHJvdmlkZWQgYnVmZmVyIHJlbGVhc2UgZHVyaW5nIElPIHBvbGxpbmcuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZGFyeSBjYWxjdWxhdGlvbnMgaW4gd2F5cyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBnZW5lcmFsIHRlc3Rpbmcgc3VmZmljZSBmb3IgdmVyaWZ5aW5nIGlvX3VyaW5nIHJlcXVlc3QgbGlmZWN5Y2xlIGNvcnJlY3RuZXNzLCBhbmQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpb19kb19pb3BvbGwoKWAgaW4gYGlvX3VyaW5nL3J3LmNgIGJ5IGNoYW5naW5nIGByZXEtXFx1MDAzZWNxZS5mbGFncyA9IGlvX3B1dF9rYnVmKC4uLilgIHRvIGByZXEtXFx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZiguLi4pYC4gVGhpcyBpcyBhIG9uZS1saW5lIGxvZ2ljYWwgZml4IGVuc3VyaW5nIHRoYXQgZmxhZ3MgYWxyZWFkeSBzZXQgb24gYHJlcS1cXHUwMDNlY3FlLmZsYWdzYCAoc3VjaCBhcyBgSU9SSU5HX0NRRV9GXzMyYCkgYXJlIHByZXNlcnZlZCB3aGVuIGFwcGVuZGluZyBjb21wbGV0aW9uIGZsYWdzIGZvciBwcm92aWRlZCBidWZmZXIgcmVsZWFzZSBkdXJpbmcgSU8gcG9sbGluZy5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kYXJ5IGNhbGN1bGF0aW9ucyBpbiB3YXlzIHRoYXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIGRvZXMgbm90IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIGdlbmVyYWwgdGVzdGluZyBzdWZmaWNlIGZvciB2ZXJpZnlpbmcgaW9fdXJpbmcgcmVxdWVzdCBsaWZlY3ljbGUgY29ycmVjdG5lc3MsIGFuZCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowt4gtd[1] Phase: Succeeded StartedAt: 2026-09-03 20:27:34 +0000 UTC FinishedAt: 2026-09-03 20:27:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4gtd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 20:27:34 +0000 UTC FinishedAt: 2026-09-03 20:27:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4gtd[2] Phase: Succeeded StartedAt: 2026-09-03 20:27:34 +0000 UTC FinishedAt: 2026-09-03 21:56:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 20:27:34 +0000 UTC FinishedAt: 2026-09-03 21:56:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 20:27:34 +0000 UTC FinishedAt: 2026-09-03 20:27:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 20:27:34 +0000 UTC FinishedAt: 2026-09-03 20:27:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt4gtd/series-workflowt4gtd-convert-artifact-1981463164/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 20:27:44 +0000 UTC FinishedAt: 2026-09-03 20:50:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 20:27:44 +0000 UTC FinishedAt: 2026-09-03 20:50:02 +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:*157fce68-692a-4ad5-ba37-ff4ffdfa975b,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-workflowt4gtd/series-workflowt4gtd-convert-artifact-1981463164/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": "85e9c6d1-923b-4e4d-978d-a06f9c6139b4", "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-workflowt4gtd/series-workflowt4gtd-build-action-4173772202/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 20:27:44 +0000 UTC FinishedAt: 2026-09-03 20:49:35 +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:*157fce68-692a-4ad5-ba37-ff4ffdfa975b,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-workflowt4gtd/series-workflowt4gtd-convert-artifact-1981463164/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": "85e9c6d1-923b-4e4d-978d-a06f9c6139b4", "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-workflowt4gtd/series-workflowt4gtd-build-action-4173772202/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 20:50:02 +0000 UTC FinishedAt: 2026-09-03 20:50:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 20:50:02 +0000 UTC FinishedAt: 2026-09-03 20:50:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 20:50:02 +0000 UTC FinishedAt: 2026-09-03 20:50:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 20:50:02 +0000 UTC FinishedAt: 2026-09-03 20:50:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt4gtd/series-workflowt4gtd-convert-artifact-2867665083/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 20:50:13 +0000 UTC FinishedAt: 2026-09-03 20:52:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 20:50:13 +0000 UTC FinishedAt: 2026-09-03 20:51:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*85e9c6d1-923b-4e4d-978d-a06f9c6139b4,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-workflowt4gtd/series-workflowt4gtd-build-action-4173772202/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-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 20:52:22 +0000 UTC FinishedAt: 2026-09-03 20:52:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 20:52:23 +0000 UTC FinishedAt: 2026-09-03 20:52:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 20:52:23 +0000 UTC FinishedAt: 2026-09-03 21:12:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 20:52:23 +0000 UTC FinishedAt: 2026-09-03 21:12:22 +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:*157fce68-692a-4ad5-ba37-ff4ffdfa975b,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-workflowt4gtd/series-workflowt4gtd-convert-artifact-2867665083/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": "6919d4b5-1e3a-4f56-93b2-2a5f64750e8a", "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-workflowt4gtd/series-workflowt4gtd-build-action-2181403615/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 20:52:23 +0000 UTC FinishedAt: 2026-09-03 21:11:57 +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:*157fce68-692a-4ad5-ba37-ff4ffdfa975b,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-workflowt4gtd/series-workflowt4gtd-convert-artifact-2867665083/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": "6919d4b5-1e3a-4f56-93b2-2a5f64750e8a", "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-workflowt4gtd/series-workflowt4gtd-build-action-2181403615/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 21:12:22 +0000 UTC FinishedAt: 2026-09-03 21:12:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 21:12:22 +0000 UTC FinishedAt: 2026-09-03 21:12:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 21:12:22 +0000 UTC FinishedAt: 2026-09-03 21:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 21:12:22 +0000 UTC FinishedAt: 2026-09-03 21:14:13 +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:*6919d4b5-1e3a-4f56-93b2-2a5f64750e8a,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-workflowt4gtd/series-workflowt4gtd-build-action-2181403615/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-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 21:14:23 +0000 UTC FinishedAt: 2026-09-03 21:56:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 21:14:23 +0000 UTC FinishedAt: 2026-09-03 21:56:08 +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_do_iopoll","io_iopoll_check"],"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:*85e9c6d1-923b-4e4d-978d-a06f9c6139b4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6919d4b5-1e3a-4f56-93b2-2a5f64750e8a,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-workflowt4gtd/series-workflowt4gtd-build-action-4173772202/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-workflowt4gtd/series-workflowt4gtd-build-action-2181403615/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 21:14:23 +0000 UTC FinishedAt: 2026-09-03 21:14:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 21:14:23 +0000 UTC FinishedAt: 2026-09-03 21:14:28 +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_do_iopoll","io_iopoll_check"],"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-workflowt4gtd/series-workflowt4gtd-convert-artifact-771775924/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 21:14:23 +0000 UTC FinishedAt: 2026-09-03 21:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 21:14:23 +0000 UTC FinishedAt: 2026-09-03 21:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 21:14:23 +0000 UTC FinishedAt: 2026-09-03 21:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 21:14:33 +0000 UTC FinishedAt: 2026-09-03 21:56:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4gtd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},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_do_iopoll","io_iopoll_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e644497a-cbe9-4012-8f1b-a867da292ced","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 21:14:33 +0000 UTC FinishedAt: 2026-09-03 21:55:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*85e9c6d1-923b-4e4d-978d-a06f9c6139b4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6919d4b5-1e3a-4f56-93b2-2a5f64750e8a,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-workflowt4gtd/series-workflowt4gtd-build-action-4173772202/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-workflowt4gtd/series-workflowt4gtd-build-action-2181403615/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-workflowt4gtd/series-workflowt4gtd-convert-artifact-771775924/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,}