Name: series-workflowxvzk7 Phase: Running StartedAt: 2026-09-12 12:52:11 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvzk7[0] Phase: Succeeded StartedAt: 2026-09-12 12:52:11 +0000 UTC FinishedAt: 2026-09-12 13:44:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvzk7[0].run-triage Phase: Succeeded StartedAt: 2026-09-12 12:52:11 +0000 UTC FinishedAt: 2026-09-12 13:44:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9958290885035431e2494159f555e332c3c14906", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_VADDR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9958290885035431e2494159f555e332c3c14906", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_VADDR" ], "series_id": "879dd9a7-5506-4e1e-9a4c-37044482705c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damos_adjust_quota", "kdamond_apply_schemes", "damon_start" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "9958290885035431e2494159f555e332c3c14906", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3NfYWRqdXN0X3F1b3RhJiMzNDssCiAgICAmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zdGFydCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gZWFybHkgcmV0dXJuIGNoZWNrIChgaWYgKHF1b3RhLVx1MDAzZWVzeiA9PSAwKSByZXR1cm47YCkgaW4gYGRhbW9zX2FkanVzdF9xdW90YSgpYCBpbiBgbW0vZGFtb24vY29yZS5jYCB3aGVuIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSBpcyB6ZXJvLlxuXG5UaGUgY2hlY2sgaW5zcGVjdHMgYHF1b3RhLVx1MDAzZWVzemAsIHdoaWNoIGlzIGRldGVybWluaXN0aWNhbGx5IGluaXRpYWxpemVkIGFuZCBjb21wdXRlZCBieSB0aGUgREFNT04gc3Vic3lzdGVtICh2aWEgYGRhbW9zX3F1b3RhX2luaXQoKWAgYW5kIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKClgKS4gVGhlIHBhdGNoIGludHJvZHVjZXMgbm8gbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGFueSBkYXRhIHRvIHVzZXJzcGFjZSwgZG9lcyBub3QgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMgb3IgYnVmZmVycyB1bmluaXRpYWxpemVkLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLlxuXG5CZWNhdXNlIHRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERBTU9TIHF1b3RhIGFkanVzdG1lbnQgbG9naWMgaW4gbW0vZGFtb24vY29yZS5jIGJ5IGFkZGluZyBhbiBlYXJseSByZXR1cm4gaW4gZGFtb3NfYWRqdXN0X3F1b3RhKCkgd2hlbiBlZmZlY3RpdmUgcXVvdGEgc2l6ZSAoZXN6KSBpcyB6ZXJvLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSwgYWx0ZXJpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCByZWdpb24gc2NvcmluZyBiZWhhdmlvciB3aGVuIHF1b3RhIGlzIGV4aGF1c3RlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQwYzUwNWIzZjM4MDZkZWE4ZjAxMzJlOGJiYzAyZmJhMTU5MGNhMDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAxMzo0MTowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDA2Y2YyYWI3ZTk3ZDcuLjhmZTE1ZjE3YmU4MGYgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTMzMjQsNiAmIzQzOzMzMjQsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuIFxuIFx0aWYgKCFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuIFx0XHRyZXR1cm47XG4mIzQzO1x0aWYgKHF1b3RhLVx1MDAzZWVzeiA9PSAwKVxuJiM0MztcdFx0cmV0dXJuO1xuIFxuIFx0LyogRmlsbCB1cCB0aGUgc2NvcmUgaGlzdG9ncmFtICovXG4gXHRtZW1zZXQoYy1cdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSwgMCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX2FkanVzdF9xdW90YSYjMzQ7LAogICAgJiMzNDtrZGFtb25kX2FwcGx5X3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERBTU9TIHF1b3RhIGFkanVzdG1lbnQgbG9naWMgaW4gbW0vZGFtb24vY29yZS5jIGJ5IGFkZGluZyBhbiBlYXJseSByZXR1cm4gaW4gZGFtb3NfYWRqdXN0X3F1b3RhKCkgd2hlbiBlZmZlY3RpdmUgcXVvdGEgc2l6ZSAoZXN6KSBpcyB6ZXJvLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSwgYWx0ZXJpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCByZWdpb24gc2NvcmluZyBiZWhhdmlvciB3aGVuIHF1b3RhIGlzIGV4aGF1c3RlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQwYzUwNWIzZjM4MDZkZWE4ZjAxMzJlOGJiYzAyZmJhMTU5MGNhMDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAxMzo0MTowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCAwNmNmMmFiN2U5N2Q3Li44ZmUxNWYxN2JlODBmIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0zMzI0LDYgJiM0MzszMzI0LDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcykKIAogCWlmICghYy0mZ3Q7b3BzLmdldF9zY2hlbWVfc2NvcmUpCiAJCXJldHVybjsKJiM0MzsJaWYgKHF1b3RhLSZndDtlc3ogPT0gMCkKJiM0MzsJCXJldHVybjsKIAogCS8qIEZpbGwgdXAgdGhlIHNjb3JlIGhpc3RvZ3JhbSAqLwogCW1lbXNldChjLSZndDtyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSwgMCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBDb250ZXh0dWFsIEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoaXMgcGF0Y2ggdG8gYG1tL2RhbW9uL2NvcmUuY2AgYXJvdW5kIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBmdW5jdGlvbi4gVGhlIGNvZGUgbWVudGlvbnMgdGhpcyBhZGp1c3RtZW50IG9mIHF1b3RhLCBhbmQsIGtub3dpbmcgREFNT04sIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGFwcGFyZW50IHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBkeW5hbWljIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZy4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyAqd2h5KiB0aGlzIGNoYW5nZSBpcyBoYXBwZW5pbmcuIFRoZSBjcml0aWNhbCBsaW5lIGlzIGBpZiAocXVvdGEtJmd0O2VzeiA9PSAwKSByZXR1cm47YC4gVGhpcyBzdWdnZXN0cyBhbiBlYXJseSBleGl0IGNvbmRpdGlvbiwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgZXN6YCBsaWtlbHkgcmVwcmVzZW50cyB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbi4gQSB6ZXJvIHNpemUgbWVhbnMgZWl0aGVyIGFuIGludmFsaWQgcmVnaW9uIG9yIHRoYXQgdGhlIHJlZ2lvbiBpcyBzb21laG93IGVtcHR5LiBJbiBEQU1PTiYjMzk7cyBjb250ZXh0LCBoYW5kbGluZyB0aGlzIHNpdHVhdGlvbiBpcyBlc3NlbnRpYWwsIHNpbmNlIGFuIGVtcHR5IHJlZ2lvbiB3aWxsIHNrZXcgb3VyIG1ldHJpY3MuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpcyBtb3N0IGxpa2VseSBhZGRpbmcgYSBjaGVjayB0byBwcmV2ZW50IGRpdmlzaW9uIGJ5IHplcm8gb3IgYW55IHVuaW50ZW5kZWQgc2lkZS1lZmZlY3RzIG9uIGVtcHR5IHJlZ2lvbnMuCgpJJiMzOTtkIHdhbnQgdG8gY2hlY2sgaG93IGBxdW90YS0mZ3Q7ZXN6YCBpcyBpbml0aWFsaXplZCBhbmQgaG93IGl0JiMzOTtzIHVzZWQgZWxzZXdoZXJlLCBidXQgaW4gdGhpcyBpc29sYXRlZCBzbmlwcGV0LCB0aGUgaW50ZW50aW9uIGFwcGVhcnMgdG8gYmUgYSBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgbWVhc3VyZS4gVGhlIGBnZXRfc2NoZW1lX3Njb3JlYCBjaGVjayBwcmVjZWRpbmcgaXQgZnVydGhlciBpbXBsaWVzIHRoYXQgd2UmIzM5O3JlIGluIHRoZSByZWFsbSBvZiBzY29yaW5nIG9yIHJhbmtpbmcgbWVtb3J5IHJlZ2lvbnMgZm9yIG9wdGltaXphdGlvbi4gVGhlIGhpc3RvZ3JhbSBhbHNvIGNvbmZpcm1zIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzMTU6XHRcdFx0cXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9zeiAmIzQzOz0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zejtcbjMzMTY6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcbjMzMTc6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiA9IDA7XG4zMzE4Olx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxuMzMxOTpcdFx0XHRcdGNhY2hlZF9lc3ogPSBxdW90YS1cdTAwM2Vlc3o7XG4zMzIwOlx0XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4zMzIxOlx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBxdW90YS1cdTAwM2Vlc3ogIT0gY2FjaGVkX2VzeilcbjMzMjI6XHRcdFx0XHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xuMzMyMzpcdFx0fVxuMzMyNDpcdFxuMzMyNTpcdFx0aWYgKCFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuMzMyNjpcdFx0XHRyZXR1cm47XG4zMzI3Olx0XHRpZiAocXVvdGEtXHUwMDNlZXN6ID09IDApXG4zMzI4Olx0XHRcdHJldHVybjtcbjMzMjk6XHRcbjMzMzA6XHRcdC8qIEZpbGwgdXAgdGhlIHNjb3JlIGhpc3RvZ3JhbSAqL1xuMzMzMTpcdFx0bWVtc2V0KGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0sIDAsXG4zMzMyOlx0XHRcdFx0c2l6ZW9mKCpjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKSAqXG4zMzMzOlx0XHRcdFx0KERBTU9TX01BWF9TQ09SRSAmIzQzOyAxKSk7XG4zMzM0Olx0XHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xuMzMzNTpcdFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuMzMzNjpcdFx0XHRcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXG4zMzM3Olx0XHRcdFx0XHRjb250aW51ZTtcbjMzMzg6XHRcdFx0XHRpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKVxuMzMzOTpcdFx0XHRcdFx0Y29udGludWU7XG4zMzQwOlx0XHRcdFx0c2NvcmUgPSBjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKGMsIHIsIHMpO1xuMzM0MTpcdFx0XHRcdGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1bc2NvcmVdICYjNDM7PVxuMzM0MjpcdFx0XHRcdFx0ZGFtb25fc3pfcmVnaW9uKHIpO1xuMzM0MzpcdFx0XHRcdGlmIChzY29yZSBcdTAwM2UgbWF4X3Njb3JlKVxuMzM0NDpcdFx0XHRcdFx0bWF4X3Njb3JlID0gc2NvcmU7XG4zMzQ1Olx0XHRcdH1cbjMzNDY6XHRcdH1cbjMzNDc6XHRcbjMzNDg6XHRcdC8qIFNldCB0aGUgbWluIHNjb3JlIGxpbWl0ICovXG4zMzQ5Olx0XHRmb3IgKGN1bXVsYXRlZF9zeiA9IDAsIHNjb3JlID0gbWF4X3Njb3JlOyA7IHNjb3JlLS0pIHtcbjMzNTA6XHRcdFx0Y3VtdWxhdGVkX3N6ICYjNDM7PSBjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXTtcbjMzNTE6XHRcdFx0aWYgKGN1bXVsYXRlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzeiB8fCAhc2NvcmUpXG4zMzUyOlx0XHRcdFx0YnJlYWs7XG4zMzUzOlx0XHR9XG4zMzU0Olx0XHRxdW90YS1cdTAwM2VtaW5fc2NvcmUgPSBzY29yZTtcbjMzNTU6XHR9XG4zMzU2Olx0XG4zMzU3Olx0c3RhdGljIHZvaWQgZGFtb3NfdHJhY2Vfc3RhdChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4zMzU4Olx0e1xuMzM1OTpcdFx0dW5zaWduZWQgaW50IGNpZHggPSAwLCBzaWR4ID0gMDtcbjMzNjA6XHRcdHN0cnVjdCBkYW1vcyAqc2l0ZXI7XG4zMzYxOlx0XG4zMzYyOlx0XHRpZiAoIXRyYWNlX2RhbW9zX3N0YXRfYWZ0ZXJfYXBwbHlfaW50ZXJ2YWxfZW5hYmxlZCgpKVxuMzM2MzpcdFx0XHRyZXR1cm47XG4zMzY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE3OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGBkYW1vc19hZGp1c3RfcXVvdGFgIGFuZCBpdHMgQ2FsbGVycyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBgZGFtb3NfYWRqdXN0X3F1b3RhYCBmdW5jdGlvbnMgYW5kIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBleGFtaW5pbmcgdGhlIHJlc3Qgb2YgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIGl0c2VsZi4gSSB3YW50IHRvIHNlZSB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBkZXBlbmRlbmNpZXMsIGFueSBzaWRlIGVmZmVjdHMgd2l0aGluIHRoZSBmdW5jdGlvbiBpdHNlbGYg4oCTIGVzc2VudGlhbGx5LCBpdHMgaW50ZXJuYWwgbG9naWMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGF0b21pY2l0eSBpc3N1ZXMsIG9yIGFueSBvcHRpbWl6YXRpb25zIHRoYXQgY2FuIGJlIG1hZGUuIEFyZSB0aGVyZSBhbnkgcmVzb3VyY2UgbG9ja3MgaW52b2x2ZWQ/IEhvdyBhcmUgcXVvdGFzIG1hbmFnZWQgaW50ZXJuYWxseT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgb3ZlcmZsb3cgaXNzdWVzPyBEb2VzIGl0IGhhbmRsZSBuZWdhdGl2ZSBhZGp1c3RtZW50cyBncmFjZWZ1bGx5PwoKTmV4dCwgSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBhbGwgdGhlIGNhbGxlcnMgb2YgYGRhbW9zX2FkanVzdF9xdW90YWAuIFVuZGVyc3RhbmRpbmcgKndobyogaXMgY2FsbGluZyBpdCBhbmQgKndoeSogaXMgY3J1Y2lhbC4gV2hhdCBhcmUgdGhlIGNhbGxpbmcgY29udGV4dHM/IEFyZSB3ZSBkZWFsaW5nIHdpdGggaGlnaC1mcmVxdWVuY3kgY2FsbHMsIGJhdGNoIHByb2Nlc3NpbmcsIG9yIGluZnJlcXVlbnQgb3BlcmF0aW9ucz8gVGhpcyB3aWxsIHJldmVhbCB0aGUgYWNjZXNzIHBhdHRlcm5zIGFuZCB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gcXVvdGEgbWFuYWdlbWVudC4gSSB3YW50IHRvIGZpbmQgb3V0IGFsbCBvZiB0aGUgZGlmZmVyZW50IHdheXMgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIHV0aWxpemVkLgoKSeKAmWxsIGFsc28gbmVlZCB0byBjb25zaWRlciB0aGUgZGF0YSBmbG93LiBXaGF0IGFyZ3VtZW50cyBhcmUgYmVpbmcgcGFzc2VkIHRvIGBkYW1vc19hZGp1c3RfcXVvdGFgPyBXaGF0IGFyZSB0aGVpciByYW5nZXMgYW5kIHBvc3NpYmxlIHZhbHVlcz8gSG93IGRvZXMgdGhlIGNhbGxlciBwcmVwYXJlIHRoZSBpbnB1dCBxdW90YSBjaGFuZ2VzLCBhbmQgaG93IGRvZXMgaXQgaW50ZXJwcmV0IHRoZSByZXN1bHRzPyBBcmUgdGhlcmUgYW55IGRhdGEgdmFsaWRhdGlvbiBzdGVwcyBiZWluZyBza2lwcGVkLCBvciByZXBlYXRlZCwgYnkgdGhlIGNhbGxlcnMgb3IgaW5zaWRlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGl0c2VsZj8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaW5jb25zaXN0ZW5jaWVzIGFuZCBwb3RlbnRpYWwgYnVncyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gaW5jb3JyZWN0IHVzYWdlLgoKVWx0aW1hdGVseSwgSSYjMzk7bSBhaW1pbmcgZm9yIGEgY29tcHJlaGVuc2l2ZSB2aWV3OiBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uJiMzOTtzIHJlc3BvbnNpYmlsaXR5LCBpdHMgbGltaXRhdGlvbnMsIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmZvcm0gbXkgYXBwcm9hY2ggdG8gYW55IHJlbGF0ZWQgYnVnIHJlcG9ydHMsIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMsIG9yIHJlZmFjdG9yaW5nIGVmZm9ydHMuIEkgbmVlZCB0byBrbm93IHdoZXJlIEkgY2FuIG9wdGltaXplLCBvciBpZiB0aGVyZSBpcyBubyBpbW1lZGlhdGUgYWN0aW9uIHRvIGJlIHRha2VuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzAwOlx0XG4zMzAxOlx0XHQvKiBGaXJzdCBjaGFyZ2Ugd2luZG93ICovXG4zMzAyOlx0XHRpZiAoIXF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogXHUwMDI2XHUwMDI2ICFxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20pIHtcbjMzMDM6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcbjMzMDQ6XHRcdFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbjMzMDU6XHRcdFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkpXG4zMzA2Olx0XHRcdFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcbjMzMDc6XHRcdH1cbjMzMDg6XHRcbjMzMDk6XHRcdC8qIE5ldyBjaGFyZ2Ugd2luZG93IHN0YXJ0cyAqL1xuMzMxMDpcdFx0aWYgKCF0aW1lX2luX3JhbmdlX29wZW4oamlmZmllcywgcXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tLFxuMzMxMTpcdFx0XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tICYjNDM7XG4zMzEyOlx0XHRcdFx0XHRtc2Vjc190b19qaWZmaWVzKHF1b3RhLVx1MDAzZXJlc2V0X2ludGVydmFsKSkpIHtcbjMzMTM6XHRcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4zMzE0Olx0XHRcdFx0cy1cdTAwM2VzdGF0LnF0X2V4Y2VlZHMmIzQzOyYjNDM7O1xuMzMxNTpcdFx0XHRxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX3N6ICYjNDM7PSBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6O1xuMzMxNjpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20gPSBqaWZmaWVzO1xuMzMxNzpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX3N6ID0gMDtcbjMzMTg6XHRcdFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkpXG4zMzE5Olx0XHRcdFx0Y2FjaGVkX2VzeiA9IHF1b3RhLVx1MDAzZWVzejtcbjMzMjA6XHRcdFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbjMzMjE6XHRcdFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkgXHUwMDI2XHUwMDI2IHF1b3RhLVx1MDAzZWVzeiAhPSBjYWNoZWRfZXN6KVxuMzMyMjpcdFx0XHRcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XG4zMzIzOlx0XHR9XG4zMzI0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEyNQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGlzIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhpcyBsb29wLiBUaGUgY29kZSYjMzk7cyB0cnlpbmcgdG8gc2V0IGEgbWluaW11bSBzY29yZSBsaW1pdC4gSXQmIzM5O3MgYWNjdW11bGF0aW5nIHNpemVzIGJhc2VkIG9uIGEgc2NvcmUgaGlzdG9ncmFtLCBhbmQgdGhlIGxvb3AgY29udGludWVzIGFzIGxvbmcgYXMgdGhlIGN1bXVsYXRpdmUgc2l6ZSAoYGN1bXVsYXRlZF9zemApIGlzIGxlc3MgdGhhbiB0aGUgdGFyZ2V0IHNpemUgKGBxdW90YS0mZ3Q7ZXN6YCkgYW5kIHRoZSBzY29yZSBpc24mIzM5O3QgemVyby4KCldhaXQgYSBtaW51dGUsIGlmIGBxdW90YS0mZ3Q7ZXN6YCBpcyB6ZXJvLCBiZWZvcmUgdGhpcyBwYXRjaCwgdGhlIGNvbmRpdGlvbiBgY3VtdWxhdGVkX3N6ICZndDs9IHF1b3RhLSZndDtlc3pgIHdvdWxkIGJlIGltbWVkaWF0ZWx5IHRydWUgYmVjYXVzZSBgY3VtdWxhdGVkX3N6YCBzdGFydHMgYXQgemVyby4gVGhhdCBtZWFucyB0aGUgbG9vcCB3b3VsZCBicmVhayBpbW1lZGlhdGVseSBvbiB0aGUgZmlyc3QgaXRlcmF0aW9uISBXaXRoIGBzY29yZWAgZXF1YWwgdG8gYG1heF9zY29yZWAhIEhtbW0uLi4gQnV0IHdoYXQgaWYgYGMtJmd0O3JlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXWAgaXMgemVybz8gVGhhdCB3b3VsZCByZXN1bHQgaW4gYGN1bXVsYXRlZF9zemAgcmVtYWluaW5nIHplcm8uCgpIb2xkIG9uIGEgc2Vjb25kLCB3aGF0JiMzOTtzIHdpdGggdGhhdCBgaWYgKHF1b3RhLSZndDtlc3ogPT0gMCkgcmV0dXJuO2AgY2hlY2s/IFdoeSB3YXMgdGhhdCBhZGRlZD8gRG9lcyBpdCBtYXR0ZXIgdGhhdCBgcXVvdGEtJmd0O21pbl9zY29yZWAgaXNuJiMzOTt0IHVwZGF0ZWQgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgZWFybHk/IElmIGBxdW90YS0mZ3Q7ZXN6YCBpcyB6ZXJvLCBtYXliZSB0aGUgcXVvdGEmIzM5O3MgZWZmZWN0aXZlbHkgZGlzYWJsZWQgYW5kIG5vIHJlZ2lvbnMgY2FuIGJlIGFwcGxpZWQuIEkgZ3Vlc3MgYHF1b3RhLSZndDttaW5fc2NvcmVgIGlzbiYjMzk7dCB1c2VkIHRoZW4uCgpJIG5lZWQgbW9yZSBjb250ZXh0IGhlcmUuIFdoYXQmIzM5O3MgdGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXRjaD8gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGNoZWNrIHRoZSBnaXQgbG9nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgaXNzdWUgdGhpcyBjb2RlIGlzIGFkZHJlc3NpbmcuIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB3aHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfYWRqdXN0X3F1b3RhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMyNzY9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2VfZXN6KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzI4OS1cbm1tL2RhbW9uL2NvcmUuYzozMjkwOnN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtMzI5MS17XG4tLVxubW0vZGFtb24vY29yZS5jPTMzNzM9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMzODgtXG5tbS9kYW1vbi9jb3JlLmM6MzM4OTpcdFx0ZGFtb3NfYWRqdXN0X3F1b3RhKGMsIHMpO1xubW0vZGFtb24vY29yZS5jLTMzOTAtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAzMgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEQU1PTiBLY29uZmlnIEV4cGxvcmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIERBTU9OLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB1c3VhbGx5IHRvIHVuZGVyc3RhbmQgdGhlIGhpZ2gtbGV2ZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZpcnN0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGVuYWJsaW5nIHN3aXRjaGVzLCB0aGUgb25lcyB0aGF0IGFjdGl2YXRlIHRoZSBmdW5kYW1lbnRhbCBmZWF0dXJlcyBvZiBEQU1PTi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgb3B0aW9ucyBsaWtlIGBDT05GSUdfREFNT05gIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBwcm9iYWJseSB3aXRoIHN1Yi1vcHRpb25zIHRvIGNvbnRyb2wgdGhpbmdzIGxpa2UgdGhlIGRlZmF1bHQgbW9uaXRvcmluZyBncmFudWxhcml0eSBvciBzYW1wbGluZyBpbnRlcnZhbHMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGVzc2VudGlhbCBidWlsZGluZyBibG9ja3MuCgpBZnRlciB0aGF0LCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgZGlmZmVyZW50IG1vbml0b3JpbmcgdGFyZ2V0cy4gSXMgREFNT04gbGltaXRlZCB0byBzcGVjaWZpYyBtZW1vcnkgcmVnaW9ucywgb3IgaXMgaXQgbW9yZSBnZW5lcmFsaXplZD8gSSYjMzk7bGwgZXhwZWN0IHRvIHNlZSBjb25maWd1cmF0aW9ucyBmb3IgdGFyZ2V0aW5nIGRpZmZlcmVudCB0eXBlcyBvZiBtZW1vcnkgKGUuZy4sIHBhZ2UgY2FjaGUsIGFub255bW91cyBtZW1vcnksIGV0Yy4pIGFuZCBwb3RlbnRpYWxseSBmb3Igc3BlY2lmeWluZyBkaWZmZXJlbnQgbW9uaXRvcmluZyB6b25lcyBvciByYW5nZXMuIEhvdyBncmFudWxhciBjYW4gSSBnZXQgaW4gZGVmaW5pbmcgd2hhdCBEQU1PTiBvYnNlcnZlcz8KCk5leHQsIEkmIzM5O2xsIGJlIGludGVyZXN0ZWQgaW4gaG93IERBTU9OIGludGVyYWN0cyB3aXRoIGRpZmZlcmVudCBtZW1vcnkgbWFuYWdlbWVudCBtZWNoYW5pc21zLiBEb2VzIGl0IGhhdmUgc3BlY2lmaWMgb3B0aW9ucyByZWxhdGVkIHRvIE5VTUEsIGh1Z2UgcGFnZXMsIG9yIGFueSBvdGhlciBmZWF0dXJlcyB0aGF0IGFmZmVjdCBtZW1vcnkgYWxsb2NhdGlvbiBvciBhY2Nlc3MgcGF0dGVybnM/IEkmIzM5O2xsIHByb2JhYmx5IGJlIHNlZWtpbmcgc2V0dGluZ3MgdG8gZmluZS10dW5lIERBTU9OJiMzOTtzIGJlaGF2aW9yIGluIHRoZXNlIHNjZW5hcmlvcywgZW5zdXJpbmcgaXQgZG9lc24mIzM5O3QgaW50ZXJmZXJlIHVuZHVseSB3aXRoIG90aGVyIG9wdGltaXphdGlvbnMuCgpQZXJmb3JtYW5jZSBpcyBhbHdheXMga2V5LCBzbyBJJiMzOTtsbCBiZSBleGFtaW5pbmcgdGhlIHZhcmlvdXMga25vYnMgdGhhdCBhbGxvdyBtZSB0byBiYWxhbmNlIHRoZSBvdmVyaGVhZCBvZiBEQU1PTiB3aXRoIGl0cyBtb25pdG9yaW5nIGJlbmVmaXRzLiBBcmUgdGhlcmUgb3B0aW9ucyBmb3IgY29udHJvbGxpbmcgdGhlIHNhbXBsaW5nIGZyZXF1ZW5jeSwgdGhlIHNpemUgb2YgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBvciB0aGUgc2NoZWR1bGluZyBvZiBtb25pdG9yaW5nIHRhc2tzPyBJJiMzOTtsbCB3YW50IHRvIGZpbmQgc2V0dGluZ3MgdGhhdCBsZXQgbWUgbWluaW1pemUgREFNT04mIzM5O3MgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IGluIGxhdGVuY3ktc2Vuc2l0aXZlIGFwcGxpY2F0aW9ucy4KCkZpbmFsbHksIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IGV4cGVyaW1lbnRhbCBvciBhZHZhbmNlZCBmZWF0dXJlcy4gQXJlIHRoZXJlIG9wdGlvbnMgcmVsYXRlZCB0byBzcGVjaWZpYyB1c2UgY2FzZXMsIGxpa2UgbWVtb3J5IHByZXNzdXJlIGRldGVjdGlvbiBvciB3b3JrbG9hZCBjbGFzc2lmaWNhdGlvbj8gSSYjMzk7bSBob3BpbmcgdG8gc2VlIGFueSBmbGFncyB0aGF0IGhpbnQgYXQgZnV0dXJlIERBTU9OIGNhcGFiaWxpdGllcy4gSSYjMzk7bSBleHBlY3RpbmcgYSBjbGVhbiwgbG9naWNhbCBzdHJ1Y3R1cmUgdG8gdGhlIEtjb25maWcsIGFuZCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjb25jaXNlIGFuZCBoZWxwZnVsIGhlbHAgdGV4dHMgdG8gZ3VpZGUgbWUgaW4gdW5kZXJzdGFuZGluZyBlYWNoIG9wdGlvbiYjMzk7cyBwdXJwb3NlIGFuZCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnOjY6XHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy03LVx0aGVscFxuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWc6MTY6XHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjE3Olx0ZGVwZW5kcyBvbiBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy0xOC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MTk6XHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cbm1tL2RhbW9uL0tjb25maWc6MjA6XHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxubW0vZGFtb24vS2NvbmZpZy0yMS1cdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZzoyODpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbm1tL2RhbW9uL0tjb25maWctMjktXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZy0zMC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MzE6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxubW0vZGFtb24vS2NvbmZpZy0zMi1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo0MDpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxubW0vZGFtb24vS2NvbmZpZy00MS1cdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xubW0vZGFtb24vS2NvbmZpZzo0MjpcdGRlZmF1bHQgREFNT05cbm1tL2RhbW9uL0tjb25maWctNDMtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjQ0Olx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTQ1LVx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6NDk6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbm1tL2RhbW9uL0tjb25maWctNTAtXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbm1tL2RhbW9uL0tjb25maWc6NTE6XHRkZWZhdWx0IERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTUyLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo1MzpcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy01NC1cdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZzo1NzpcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjU4Olx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy01OS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnLTYwLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo2MTpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cbm1tL2RhbW9uL0tjb25maWctNjItXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnOjY5Olx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6NzA6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xubW0vZGFtb24vS2NvbmZpZzo3MTpcdGRlZmF1bHQgREFNT05cbm1tL2RhbW9uL0tjb25maWctNzItXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjczOlx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2Vcbm1tL2RhbW9uL0tjb25maWctNzQtXHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjc4Olx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy03OS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnLTgwLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo4MTpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxubW0vZGFtb24vS2NvbmZpZy04Mi1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZzo4OTpcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6OTA6XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTkxLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo5MjpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXG5tbS9kYW1vbi9LY29uZmlnOjkzOlx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXG5tbS9kYW1vbi9LY29uZmlnLTk0LVx0ICB0aG9zZS5cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnOjEwMTpcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzoxMDI6XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTEwMy1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MTA0Olx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cbm1tL2RhbW9uL0tjb25maWctMTA1LVx0ICBwcm90ZWN0IGZyZXF1ZW50bHkgYWNjZXNzZWQgKGhvdCkgcGFnZXMgd2hpbGUgcmFyZWx5IGFjY2Vzc2VkIChjb2xkKVxuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWc6MTA5Olx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjExMDpcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctMTExLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzoxMTI6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cbm1tL2RhbW9uL0tjb25maWc6MTEzOlx0ICBJdCBydW5zIERBTU9OIGFuZCBleHBvc2UgYWNjZXNzIG1vbml0b3JpbmcgcmVzdWx0cyBpbiBzaW1wbGUgc3RhdFxubW0vZGFtb24vS2NvbmZpZy0xMTQtXHQgIG1ldHJpY3MuXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZzoxMTc6XHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTE4Olx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnOjExOTpcdGRlZmF1bHQgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMjAtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjEyMTpcdCAgV2hldGhlciB0byBlbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0LiAgVXNlcnMgY2FuIGRpc2FibGUgaXQgaW5cbm1tL2RhbW9uL0tjb25maWctMTIyLVx0ICBib290IG9yIHJ1bnRpbWUgdXNpbmcgaXRzICYjMzk7ZW5hYmxlZCYjMzk7IHBhcmFtZXRlci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ0MQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgZGVsdmluZyBpbnRvIHRoZSBNYWtlZmlsZSB3aXRoaW4gdGhlIE1lbW9yeSBNYW5hZ2VtZW50JiMzOTtzIERBTU9OIChEeW5hbWljIEFjY2VzcyBNb25pdG9yKSBzdWJzeXN0ZW06CgoqKkRpdmluZyBpbnRvIHRoZSBtbS9kYW1vbiBNYWtlZmlsZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBNYWtlZmlsZSB3aXRoaW4gdGhlIERBTU9OIGRpcmVjdG9yeS4gTXkgaW5pdGlhbCBleHBlY3RhdGlvbiBpcyBhIGZhaXJseSBzdGFuZGFyZCBzdHJ1Y3R1cmUsIGJ1dCB0aGUgc3BlY2lmaWNzIGFyZSB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgYml0cyBsaWUuIEkmIzM5O20ga2VlbiB0byBzZWUgaG93IHRoZSBidWlsZCBwcm9jZXNzIGludGVncmF0ZXMgdGhlIERBTU9OIGNvbXBvbmVudHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOgoKKiAgICoqU291cmNlIEZpbGVzOioqIFRoZSBsaXN0IG9mIHNvdXJjZSBmaWxlcyAoYCouY2AsIGAqLlNgKSB0aGF0IGNvbXByaXNlIERBTU9OLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgREFNT04gZnVuY3Rpb25hbGl0eSBpcyBtb2R1bGFyaXplZC4gV2hhdCBhcmUgdGhlIGNvcmUgY29tcG9uZW50cz8gQXJlIHRoZXkgc3BsaXQgaW50byBtb25pdG9yLCBzY2hlbWUsIG9yIG90aGVyIGFyZWFzPwoqICAgKipEZXBlbmRlbmNpZXM6KiogSG93IGFyZSB0aGUgREFNT04gbW9kdWxlcyBsaW5rZWQgYW5kIGRlcGVuZGVudCB1cG9uIG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGFuZCBsaWJyYXJpZXM/IFNwZWNpZmljYWxseSwgd2hpY2ggaGVhZGVycyBhcmUgaW5jbHVkZWQuIEFyZSB0aGVyZSBhbnkgY3VzdG9tIGNvbXBpbGVyIGZsYWdzIG9yIGxpbmtlciBzY3JpcHRzIHNwZWNpZmljIHRvIERBTU9OJiMzOTtzIG5lZWRzPwoqICAgKipCdWlsZCBSdWxlczoqKiBUaGUgYWN0dWFsIGNvbXBpbGF0aW9uIGFuZCBsaW5raW5nIHJ1bGVzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgbW9kdWxlcyBhcmUgYnVpbHQgYW5kIGludGVncmF0ZWQgaW50byB0aGUga2VybmVsIGltYWdlLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGJ1aWxkcyBvciBmZWF0dXJlcyB0aGF0IGFyZSBzZWxlY3RhYmxlIHZpYSBLY29uZmlnIG9wdGlvbnM/CiogICAqKk9iamVjdCBGaWxlczoqKiBJJiMzOTtsbCBub3RlIHdoZXJlIHRoZSBvdXRwdXQgb2JqZWN0IGZpbGVzIGFyZSBwbGFjZWQuCiogICAqKktidWlsZCBJbnRlZ3JhdGlvbjoqKiBJJiMzOTtsbCBiZSBjaGVja2luZyB0byBzZWUgaG93IERBTU9OIGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIChLYnVpbGQpLiBBcmUgdGhlcmUgYW55IGN1c3RvbSBLYnVpbGQgdmFyaWFibGVzIG9yIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBzcGVjaWZpYyBEQU1PTiByZXF1aXJlbWVudHM/IEhvdyBpcyB0aGUgbW9kdWxlIHByb3Blcmx5IGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgcHJvY2Vzcz8KKiAgICoqRG9jdW1lbnRhdGlvbiBUYXJnZXRzOioqIElkZWFsbHksIHRoZXJlIHdpbGwgYmUgdGFyZ2V0cyBmb3IgZ2VuZXJhdGluZyBkb2N1bWVudGF0aW9uLiBJIG5lZWQgdG8gZ2V0IHF1aWNrbHkgdXAgdG8gc3BlZWQgb24gdGhlIHB1cnBvc2Ugb2YgZWFjaCBmaWxlIGFuZCBjb21wb25lbnQuCgpJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB1c2Ugb2YgbWFjcm9zLCB2YXJpYWJsZXMsIGFuZCBpbmNsdWRlIHBhdGhzLiBBbnkgdHJpY2tzIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGJ1aWxkLXRpbWUgb3B0aW1pemF0aW9uIHdpbGwgYmUgb2YgaW50ZXJlc3QuIE92ZXJhbGwsIHRoaXMgTWFrZWZpbGUgc2hvdWxkIHBhaW50IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgREFNT04gaXMgYXNzZW1ibGVkIGFuZCBpbnRlZ3JhdGVkIGludG8gdGhlIGJyb2FkZXIga2VybmVsIGVudmlyb25tZW50LiBJIHdhbnQgdG8gc2VlIGlmIGl0JiMzOTtzIGZvbGxvd2luZyBiZXN0IHByYWN0aWNlcyBhbmQgaWYgdGhlcmUgYXJlIGFueSBzaWducyBvZiBjb21wbGV4IGJ1aWxkIGxvZ2ljIHRoYXQgbWlnaHQgaW5kaWNhdGUgcG90ZW50aWFsIGJ1aWxkIGlzc3VlcyBvciBtYWludGFpbmFiaWxpdHkgY29uY2VybnMgZG93biB0aGUgbGluZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvcmUubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL01ha2VmaWxlLTItXG5tbS9kYW1vbi9NYWtlZmlsZTozOm9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbm1tL2RhbW9uL01ha2VmaWxlLTQtb2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyB2YWRkci5vXG4tLVxubW0vZGFtb24vY29yZS5jPTMwNT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9tdnN1bSh1bnNpZ25lZCBsb25nIGN1cnJlbnRfbnIsXG4tLVxubW0vZGFtb24vY29yZS5jLTMxOC0gKiBiZSBhY2Nlc3NlZC4gIEhlbmNlIHRoZSB2YWx1ZSBjYW4gYmUgaW50ZXJwcmV0ZWQgYXMgdGhlIHJlbGF0aXZlIGFjY2Vzc1xubW0vZGFtb24vY29yZS5jOjMxOTogKiBmcmVxdWVuY3kgc2NvcmUgb2YgdGhlIHJlZ2lvbiAoQHIpLiAgVGhlIHZhbHVlIGlzIGNhbGN1bGF0ZWQgYXMgYSBwc2V1ZG9cbm1tL2RhbW9uL2NvcmUuYy0zMjAtICogbW92aW5nIHN1bSwgYW5kIGhlbmNlIGl0IGlzIG5vdCBhbiBleGFjdCB2YWx1ZSBidXQganVzdCBhIGJlc3QtZWZmb3J0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNTkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqRXhhbWluaW5nIHRoZSBEQU1PTiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgREFNT04sIHRoZSBEYXRhIEFjY2VzcyBNT05pdG9yLCBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0aGF0IHRoZSBgb2JqLSQoQ09ORklHX0RBTU9OKSAmIzQzOz0gZGFtb24vYCBsaW5lIHdpdGhpbiB0aGUgYG1tL01ha2VmaWxlYCBmaWxlIGlzIHRoZSBrZXkgdG8gaXRzIGluY2x1c2lvbi4gVGhhdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCBwYXR0ZXJuIGZvciBzZWxlY3RpdmVseSBjb21waWxpbmcgbW9kdWxlcyBiYXNlZCBvbiBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUbyBiZSBjZXJ0YWluLCBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gb3BlbiBhbmQgZXhhbWluZSBgbW0vTWFrZWZpbGVgIHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMgaW5kZWVkIHRoZSByZWxldmFudCBsb2NhdGlvbiBmb3IgbWFuYWdpbmcgREFNT04mIzM5O3Mgb2JqZWN0IGZpbGVzIGFuZCB0aGVpciBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gRnJvbSB0aGVyZSwgSSBjYW4gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIGRhdGEgbW9uaXRvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMzY9b2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSAmIzQzOz0gZGVidWdfcGFnZV9yZWYub1xubW0vTWFrZWZpbGU6MTM3Om9iai0kKENPTkZJR19EQU1PTikgJiM0Mzs9IGRhbW9uL1xubW0vTWFrZWZpbGUtMTM4LW9iai0kKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgJiM0Mzs9IHVzZXJjb3B5Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ3MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGRpc3NlY3RpbmcgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIERBTU9OLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHNwZWNpZmljYWxseSBob3cgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCB3aXRoaW4gdGhlIERBTU9OIGNvbnRleHQuIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggdGhhdCBsZWFkcyB0byBpdHMgaW52b2NhdGlvbi4KCk15IGltbWVkaWF0ZSBwbGFuIGlzIHRvIHN0YXJ0IHdpdGggYSBzeXN0ZW1hdGljIGV4YW1pbmF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSYjMzk7cyBhcmNoaXRlY3R1cmUgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGRhbW9zX2FkanVzdF9xdW90YWAgZmlyc3QuIFRoZW4sIEkgd2lsbCBnZW5lcmF0ZSBvciB1c2UgZXhpc3RpbmcgY2FsbCBncmFwaHMgdG8gbWFwIG91dCB0aGUgZXhlY3V0aW9uIGZsb3csIGlkZW50aWZ5aW5nIHRoZSB1cHN0cmVhbSBmdW5jdGlvbnMgdGhhdCBldmVudHVhbGx5IGNhbGwgYGRhbW9zX2FkanVzdF9xdW90YWAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSBjbGVhciBwaWN0dXJlIG9mIHdoZW4sIHdoZXJlLCBhbmQgd2h5IHRoaXMgcXVvdGEgYWRqdXN0bWVudCBpcyB0YWtpbmcgcGxhY2Ugd2l0aGluIHRoZSBicm9hZGVyIERBTU9OIGZyYW1ld29yay4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUga2V5IHRyaWdnZXJzIGFuZCBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGRldGVybWluZSB3aGVuIHRoZSBxdW90YSBuZWVkcyBtb2RpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzcwOlx0XHR0cmFjZV9jYWxsX19kYW1vc19zdGF0X2FmdGVyX2FwcGx5X2ludGVydmFsKGNpZHgsIHNpZHgsIFx1MDAyNnMtXHUwMDNlc3RhdCk7XG4zMzcxOlx0fVxuMzM3MjpcdFxuMzM3MzpcdHN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuMzM3NDpcdHtcbjMzNzU6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4zMzc2Olx0XHRzdHJ1Y3QgZGFtb3MgKnM7XG4zMzc3Olx0XHRib29sIGhhc19zY2hlbWVzX3RvX2FwcGx5ID0gZmFsc2U7XG4zMzc4Olx0XHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3o7XG4zMzc5Olx0XG4zMzgwOlx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xuMzM4MTpcdFx0XHRpZiAodGltZV9iZWZvcmUoYy1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cdTAwM2VuZXh0X2FwcGx5X3NpcykpXG4zMzgyOlx0XHRcdFx0Y29udGludWU7XG4zMzgzOlx0XG4zMzg0Olx0XHRcdGlmICghcy1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuMzM4NTpcdFx0XHRcdGNvbnRpbnVlO1xuMzM4NjpcdFxuMzM4NzpcdFx0XHRoYXNfc2NoZW1lc190b19hcHBseSA9IHRydWU7XG4zMzg4Olx0XG4zMzg5Olx0XHRcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcbjMzOTA6XHRcdH1cbjMzOTE6XHRcbjMzOTI6XHRcdGlmICghaGFzX3NjaGVtZXNfdG9fYXBwbHkpXG4zMzkzOlx0XHRcdHJldHVybjtcbjMzOTQ6XHRcbjMzOTU6XHRcdG1heF9yZWdpb25fc3ogPSBkYW1vbl9yZWdpb25fc3pfbGltaXQoYyk7XG4zMzk2Olx0XHRtdXRleF9sb2NrKFx1MDAyNmMtXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xuMzM5NzpcdFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbjMzOTg6XHRcdFx0aWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcdTAwMjZcdTAwMjYgYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7XG4zMzk5Olx0XHRcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbjM0MDA6XHRcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KVxuMzQwMTpcdFx0XHRcdFx0XHRjb250aW51ZTtcbjM0MDI6XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbjM0MDM6XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4zNDA0Olx0XHRcdFx0fVxuMzQwNTpcdFx0XHRcdGNvbnRpbnVlO1xuMzQwNjpcdFx0XHR9XG4zNDA3Olx0XHRcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcbjM0MDg6XHRcdH1cbjM0MDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzODIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqVHJhY2luZyB0aGUgQ2FsbGVycyBvZiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gVGhlIGltbWVkaWF0ZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBjYWxscyB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgd2l0aCBhIHN0cmFpZ2h0Zm9yd2FyZCBzZWFyY2ggZm9yIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZW50cnkgcG9pbnRzIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIGl0cyBpbXBhY3QuIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gZGVidWdnaW5nIG9yIG1vZGlmaWNhdGlvbjsgd2l0aG91dCBrbm93aW5nIHdobyYjMzk7cyB1c2luZyBpdCwgSSBjYW4mIzM5O3QgYmUgc3VyZSBvZiB3aGF0IHdpbGwgaGFwcGVuIGlmIEkgY2hhbmdlIGl0LiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgbm90IG9ubHkgd2hlcmUgaXQgaXMgY2FsbGVkLCBidXQgaG93IGl0IGlzIGJlaW5nIHVzZWQgaW4gZWFjaCBvZiB0aG9zZSBjb250ZXh0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMzNTc9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2Vfc3RhdChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMzNzItXG5tbS9kYW1vbi9jb3JlLmM6MzM3MzpzdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcbm1tL2RhbW9uL2NvcmUuYy0zMzc0LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzkwNj1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzk4Mi1cdFx0Lypcbm1tL2RhbW9uL2NvcmUuYzozOTgzOlx0XHQgKiBkbyBrZGFtb25kX2NhbGwoKSBhbmQga2RhbW9uZF9hcHBseV9zY2hlbWVzKCkgYWZ0ZXJcbm1tL2RhbW9uL2NvcmUuYy0zOTg0LVx0XHQgKiBrZGFtb25kX21lcmdlX3JlZ2lvbnMoKSBpZiBwb3NzaWJsZSwgdG8gcmVkdWNlIG92ZXJoZWFkXG4tLVxubW0vZGFtb24vY29yZS5jLTM5OTctXHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZjdHgtXHUwMDNlc2NoZW1lcykpXG5tbS9kYW1vbi9jb3JlLmM6Mzk5ODpcdFx0XHRrZGFtb25kX2FwcGx5X3NjaGVtZXMoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0zOTk5LVx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTE5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IERBTU9OIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBrZGFtb25kX2ZuYCwgdGhhdCYjMzk7cyB0aGUga3RocmVhZCBhdCB0aGUgaGVhcnQgb2YgdGhlIERBTU9OIGRhZW1vbiwgcmlnaHQ/IE5vdywgaG93IGV4YWN0bHkgZG9lcyB1c2VyIHNwYWNlIGdldCB0byBjb250cm9sIHRoaXMgYmVhc3Q/IE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgc3lzZnMgaW50ZXJmYWNlLCBzcGVjaWZpY2FsbHkgdGhhdCBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4vLi4uYCBkaXJlY3RvcnkgZXhwb3NlZCBieSBgQ09ORklHX0RBTU9OX1NZU0ZTYC4KCkNvdWxkIHN5emthbGxlciBpbnRlcmFjdCB3aXRoIHRoZXNlIHN5c2ZzIGZpbGVzPyBPZiBjb3Vyc2UhIFN5emthbGxlciBoYXMgdGhvc2UgcHNldWRvLXN5c2NhbGxzIGFuZCBzeXNmcyBkZXNjcmlwdGlvbnMsIG9yIGl0IGNhbiBiZSBtYWRlIHRvIHdyaXRlIGRpcmVjdGx5IHRvIHRoZXNlIGZpbGVzLiBIbW1tLCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIHdlJiMzOTt2ZSBhbHJlYWR5IGdvdCBEQU1PTiBkZXNjcmlwdGlvbnMgaW4gdGhlIHN5emthbGxlciByZXBvLiAoQWN0dWFsbHksIEkgY2FuJiMzOTt0IGdyZXAgdGhlIHN5emthbGxlciByZXBvIGZyb20gaGVyZSwgYmVjYXVzZSB0aGUgdG9vbCBJJiMzOTttIHVzaW5nIGlzIGtlcm5lbCBncmVwLCBidXQgSSYjMzk7bSBwcmV0dHkgc3VyZSBzeXprYWxsZXIgZG9lcyBoYXZlIC9zeXMva2VybmVsL21tL2RhbW9uIHN1cHBvcnQgYW55d2F5LikKCldhaXQgYSBzZWNvbmQsIGJlZm9yZSBJIGdldCB0b28gZmFyIGFoZWFkLCBsZXQgbWUgbWFrZSBzdXJlIHRoZSBzeXNmcyBpbnRlcmZhY2UgaXMgYWN0dWFsbHkgY2FwYWJsZSBvZiBjb25maWd1cmluZyBEQU1PTiwgc2V0dGluZyB1cCBzY2hlbWVzIGFuZCBxdW90YXMsIGFuZCBzdGFydGluZyBga2RhbW9uZGAuCgpPa2F5LCB0aW1lIHRvIGNyYWNrIG9wZW4gYG1tL2RhbW9uL3N5c2ZzLmNgIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tkYW1vbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDI3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIERhbW9uIFN1YnN5c3RlbSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZ2V0IGEgbGF5IG9mIHRoZSBsYW5kIHdpdGhpbiB0aGUgYG1tL2RhbW9uL2AgZGlyZWN0b3J5LiBJIHdhbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgd2hhdCBmaWxlcyBhbmQsIHRoZXJlZm9yZSwgd2hpY2ggY29tcG9uZW50cyBhbmQgZnVuY3Rpb25hbGl0aWVzLCBhcmUgcHJlc2VudC4gVGhpcyB3aWxsIHByb3ZpZGUgYSBjcnVjaWFsIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgZGVlcGVyIGFuYWx5c2lzIG9yIHBvdGVudGlhbCB3b3JrIEkgaGF2ZSB0byBkby4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1hcCBvZiB0aGUgc3lzdGVtIGFuZCBzZWUgaWYgYW55IHJlY2VudCBjaGFuZ2VzIGFyZSBpbW1lZGlhdGVseSBhcHBhcmVudC4gSXQmIzM5O3MgYSBxdWljayBhbmQgZGlydHkgd2F5IHRvIGFzc2VzcyB0aGUgbGFuZHNjYXBlIGJlZm9yZSBJIHN0YXJ0IGRpZ2dpbmcgaW50byBhbnkgc3BlY2lmaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2NvcmUuYyYjMzQ7LAogICAgJiMzNDtscnVfc29ydC5jJiMzNDssCiAgICAmIzM0O21vZHVsZXMtY29tbW9uLmMmIzM0OywKICAgICYjMzQ7bW9kdWxlcy1jb21tb24uaCYjMzQ7LAogICAgJiMzNDtvcHMtY29tbW9uLmMmIzM0OywKICAgICYjMzQ7b3BzLWNvbW1vbi5oJiMzNDssCiAgICAmIzM0O3BhZGRyLmMmIzM0OywKICAgICYjMzQ7cmVjbGFpbS5jJiMzNDssCiAgICAmIzM0O3N0YXQuYyYjMzQ7LAogICAgJiMzNDtzeXNmcy1jb21tb24uYyYjMzQ7LAogICAgJiMzNDtzeXNmcy1jb21tb24uaCYjMzQ7LAogICAgJiMzNDtzeXNmcy1zY2hlbWVzLmMmIzM0OywKICAgICYjMzQ7c3lzZnMuYyYjMzQ7LAogICAgJiMzNDt2YWRkci5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBbCiAgICAmIzM0O3Rlc3RzJiMzNDsKICBdCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NDQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZpbGVzLi4uCgoqKkRpZ2dpbmcgaW50byB0aGUgc3lzZnMgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgc3lzZnMgaW1wbGVtZW50YXRpb24sIGFuZCB0aGUgY29yZSBmaWxlcyBhcmUganVtcGluZyBvdXQgYXQgbWUuIEkgc2VlIGBzeXNmcy5jYCwgd2hpY2ggaXMgcHJvYmFibHkgdGhlIGhlYXJ0IG9mIHRoZSBiZWFzdCwgaGFuZGxpbmcgdGhlIGZ1bmRhbWVudGFsIGludGVyYWN0aW9ucy4gVGhlbiB0aGVyZSYjMzk7cyBgc3lzZnMtc2NoZW1lcy5jYCAtIHRoYXQgb25lJiMzOTtzIGludGVyZXN0aW5nLCBwcm9iYWJseSBkZWZpbmluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBtZXRob2RzIHRoYXQgYXJlIGV4cG9zZWQgdGhyb3VnaCBzeXNmcy4gYHN5c2ZzLWNvbW1vbi5jYCBpcyBsaWtlbHkgY29udGFpbmluZyB1dGlsaXR5IGZ1bmN0aW9ucyBhbmQgc2hhcmVkIGNvZGUgdXNlZCBhY3Jvc3MgdGhlIHN5c3RlbS4gQW5kIG9mIGNvdXJzZSwgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHBpZWNlcywgYHJlY2xhaW0uY2AgYW5kIGBscnVfc29ydC5jYCBhcmUgcHJlc2VudCB0b28uCgpJJiMzOTttIGxlYW5pbmcgdG93YXJkcyBmb2N1c2luZyBvbiB0aGUgJiMzNDtzY2hlbWVzJiMzNDsgZmlsZSBmaXJzdCAtIGBzeXNmcy1zY2hlbWVzLmNgLiBHaXZlbiB0aGUgbmFtaW5nLCB0aGF0JiMzOTtzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlICYjMzQ7Y29udHJhY3QmIzM0OyBvZiB3aGF0IGNhbiBiZSBhY2Nlc3NlZCB2aWEgc3lzZnMsIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBhdHRyaWJ1dGVzLCBvciBtYXliZSB0aGUgbGF5b3V0IG9mIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB0aGVyZSB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSB3aG9sZSB0aGluZy4gTGV0IG1lIHN0YXJ0IHRoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3F1b3RhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1OTggbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjA1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3dhdGVybWFya3Nfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTEtLypcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjEyOiAqIHF1b3RhIGdvYWwgZGlyZWN0b3J5XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIxMy0gKi9cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjE0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMTU6c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTYtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMTc6XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYztcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjE4LVx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWU7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMjMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIyNDpzdGF0aWMgc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjI1LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjI2Olx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjI3LX1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIyOT1zdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMzA6XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYztcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjMxLVx0Y2hhciAqbmFtZTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTI3OD1zdGF0aWMgc3NpemVfdCB0YXJnZXRfbWV0cmljX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyODAte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyODE6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyODI6XHRcdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyODMtXHRpbnQgaTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTI5NT1zdGF0aWMgc3NpemVfdCB0YXJnZXRfbWV0cmljX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjk3LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjk4Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjk5Olx0XHRcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzAwLVx0aW50IGk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEzMTQ9c3RhdGljIHNzaXplX3QgdGFyZ2V0X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMTYte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMTc6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3Rcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzE4Olx0XHRcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMTktXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEzMjM9c3RhdGljIHNzaXplX3QgdGFyZ2V0X3ZhbHVlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzI1LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzI2Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMyNzpcdFx0XHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzI4LVx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2Z29hbC1cdTAwM2V0YXJnZXRfdmFsdWUpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzMzPXN0YXRpYyBzc2l6ZV90IGN1cnJlbnRfdmFsdWVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzNS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzNjpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMzc6XHRcdFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzOC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTM0Mj1zdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzQ0LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzQ1Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM0NjpcdFx0XHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzQ3LVx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTM1Mz1zdGF0aWMgc3NpemVfdCBuaWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM1NS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM1NjpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNTc6XHRcdFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM1OC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTM2Mz1zdGF0aWMgc3NpemVfdCBuaWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNjUte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNjY6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3Rcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzY3Olx0XHRcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNjgtXHRpbnQgZXJyID0ga3N0cnRvaW50KGJ1ZiwgMCwgXHUwMDI2Z29hbC1cdTAwM2VuaWQpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzc0PXN0YXRpYyBzc2l6ZV90IHBhdGhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM3Ni17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM3NzpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM3ODpcdFx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM3OS1cdGludCBsZW47XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEzODg9c3RhdGljIHNzaXplX3QgcGF0aF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM5MC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM5MTpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM5MjpcdFx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM5My1cdGNoYXIgKnBhdGggPSBrbWFsbG9jX2FycmF5KHNpemVfYWRkKGNvdW50LCAxKSwgc2l6ZW9mKCpwYXRoKSxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQwOS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDEwOnN0YXRpYyB2b2lkIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDExLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDEyOlx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDEzOlx0XHRcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDE0LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDE4LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MTk6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX3RhcmdldF9tZXRyaWNfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyMC1cdFx0X19BVFRSX1JXX01PREUodGFyZ2V0X21ldHJpYywgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyMS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDIyOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF90YXJnZXRfdmFsdWVfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyMy1cdFx0X19BVFRSX1JXX01PREUodGFyZ2V0X3ZhbHVlLCAwNjAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDI0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyNi1cdFx0X19BVFRSX1JXX01PREUoY3VycmVudF92YWx1ZSwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyNy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDI4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9uaWRfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyOS1cdFx0X19BVFRSX1JXX01PREUobmlkLCAwNjAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDMwLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MzE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX3BhdGhfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQzMi1cdFx0X19BVFRSX1JXX01PREUocGF0aCwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQzMy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDM0OnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vc19zeXNmc19xdW90YV9nb2FsX2F0dHJzW10gPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzNTpcdFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X21ldHJpY19hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzNjpcdFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDM3Olx0XHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDM4Olx0XHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9uaWRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0Mzk6XHRcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX3BhdGhfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NDAtXHROVUxMLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NDEtfTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDQyOkFUVFJJQlVURV9HUk9VUFMoZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ0My1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDQ0OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ0NTpcdC5yZWxlYXNlID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NDYtXHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ0NzpcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfZ3JvdXBzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NDgtfTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ1MC0vKlxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NTE6ICogcXVvdGEgZ29hbHMgZGlyZWN0b3J5XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ1Mi0gKi9cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDUzLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NTQ6c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDU1LVx0c3RydWN0IGtvYmplY3Qga29iajtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDU2Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKipnb2Fsc19hcnI7XHQvKiBjb3VudGVkIGJ5IG5yICovXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ1Ny1cdGludCBucjtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ1OS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDYwOnN0YXRpYyBzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ2MS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2MjpcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NjMtfVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NjQtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2NTpzdGF0aWMgdm9pZCBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19ybV9kaXJzKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NjY6XHRcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FscyAqZ29hbHMpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ2Ny17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2ODpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICoqZ29hbHNfYXJyID0gZ29hbHMtXHUwMDNlZ29hbHNfYXJyO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NjktXHRpbnQgaTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ3OS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDgwOnN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfYWRkX2RpcnMoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ4MTpcdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpnb2FscywgaW50IG5yX2dvYWxzKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0ODIte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0ODM6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqKmdvYWxzX2FyciwgKmdvYWw7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ4NC1cdGludCBlcnIsIGk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ4NS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDg2Olx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcm1fZGlycyhnb2Fscyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ4Ny1cdGlmICghbnJfZ29hbHMpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0OTYtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9nb2FsczsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDk3Olx0XHRnb2FsID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9hbGxvYygpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0OTgtXHRcdGlmICghZ29hbCkge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0OTk6XHRcdFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcm1fZGlycyhnb2Fscyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUwMC1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUwMy1cdFx0ZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoXHUwMDI2Z29hbC1cdTAwM2Vrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MDQ6XHRcdFx0XHRcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX2t0eXBlLCBcdTAwMjZnb2Fscy1cdTAwM2Vrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MDUtXHRcdFx0XHRcJiMzNDslZFwmIzM0OywgaSk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MDctXHRcdFx0a29iamVjdF9wdXQoXHUwMDI2Z29hbC1cdTAwM2Vrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTA4Olx0XHRcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX3JtX2RpcnMoZ29hbHMpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MDktXHRcdFx0cmV0dXJuIGVycjtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTUxOD1zdGF0aWMgc3NpemVfdCBucl9nb2Fsc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTIwLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTIxOlx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpnb2FscyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MjI6XHRcdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTIzLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNTI3PXN0YXRpYyBzc2l6ZV90IG5yX2dvYWxzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTI5LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTMwOlx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpnb2Fscztcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTMxLVx0aW50IG5yLCBlcnIgPSBrc3RydG9pbnQoYnVmLCAwLCBcdTAwMjZucik7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MzctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTUzODpcdGdvYWxzID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2Fscywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUzOS1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU0MS1cdFx0cmV0dXJuIC1FQlVTWTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTQyOlx0ZXJyID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfYWRkX2RpcnMoZ29hbHMsIG5yKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTQzLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTQ5LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NTA6c3RhdGljIHZvaWQgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTUxLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTUyOlx0a2ZyZWUoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2Fscywga29iaikpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NTMtfVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NTQtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTU1NTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX25yX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NTYtXHRcdF9fQVRUUl9SV19NT0RFKG5yX2dvYWxzLCAwNjAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTU3LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NTg6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2F0dHJzW10gPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTU1OTpcdFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX25yX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTYwLVx0TlVMTCxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTYxLX07XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTU2MjpBVFRSSUJVVEVfR1JPVVBTKGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTYzLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTU2NTpcdC5yZWxlYXNlID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTY2LVx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1Njc6XHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19ncm91cHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU2OC19O1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNjc0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3dlaWdodHNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2ODAtLypcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNjgxOiAqIHF1b3RhcyBkaXJlY3Rvcnlcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjgyLSAqL1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2ODMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTY4NDpzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjg1LVx0c3RydWN0IGtvYmplY3Qga29iajtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjg2LVx0c3RydWN0IGRhbW9uX3N5c2ZzX3dlaWdodHMgKndlaWdodHM7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTY4NzpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FscyAqZ29hbHM7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTY4OC1cdHVuc2lnbmVkIGxvbmcgbXM7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2OTAtXHR1bnNpZ25lZCBsb25nIHJlc2V0X2ludGVydmFsX21zO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2OTE6XHR1bnNpZ25lZCBsb25nIGVmZmVjdGl2ZV9zejtcdC8qIEVmZmVjdGl2ZSBzaXplIHF1b3RhIGluIGJ5dGVzICovXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTY5MjpcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciBnb2FsX3R1bmVyO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2OTMtXHR1bnNpZ25lZCBpbnQgZmFpbF9jaGFyZ2VfbnVtO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjk2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2OTc6c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKmRhbW9uX3N5c2ZzX3F1b3Rhc19hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2OTgte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2OTk6XHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTcwMC19XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTcwMS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzAyOnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcXVvdGFzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKnF1b3Rhcylcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzAzLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzA0LVx0c3RydWN0IGRhbW9uX3N5c2ZzX3dlaWdodHMgKndlaWdodHM7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTcwNTpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FscyAqZ29hbHM7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTcwNi1cdGludCBlcnI7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MTItXHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcdTAwMjZ3ZWlnaHRzLVx1MDAzZWtvYmosIFx1MDAyNmRhbW9uX3N5c2ZzX3dlaWdodHNfa3R5cGUsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTcxMzpcdFx0XHRcdTAwMjZxdW90YXMtXHUwMDNla29iaiwgXCYjMzQ7d2VpZ2h0c1wmIzM0Oyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTcxNC1cdGlmIChlcnIpIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTcxNy1cdH1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzE4Olx0cXVvdGFzLVx1MDAzZXdlaWdodHMgPSB3ZWlnaHRzO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MTktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTcyMDpcdGdvYWxzID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfYWxsb2MoKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzIxLVx0aWYgKCFnb2Fscykge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzI1LVx0ZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoXHUwMDI2Z29hbHMtXHUwMDNla29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzI2Olx0XHRcdFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2t0eXBlLCBcdTAwMjZxdW90YXMtXHUwMDNla29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzI3LVx0XHRcdFwmIzM0O2dvYWxzXCYjMzQ7KTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTczMS1cdH0gZWxzZSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTczMjpcdFx0cXVvdGFzLVx1MDAzZWdvYWxzID0gZ29hbHM7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTczMy1cdH1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTczNy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzM4OnN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3F1b3Rhc19ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKnF1b3Rhcylcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzM5LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzQwOlx0a29iamVjdF9wdXQoXHUwMDI2cXVvdGFzLVx1MDAzZXdlaWdodHMtXHUwMDNla29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc0MTpcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX3JtX2RpcnMocXVvdGFzLVx1MDAzZWdvYWxzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzQyOlx0a29iamVjdF9wdXQoXHUwMDI2cXVvdGFzLVx1MDAzZWdvYWxzLVx1MDAzZWtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3NDMtfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNzQ1PXN0YXRpYyBzc2l6ZV90IG1zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc0Ny17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc0ODpcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKnF1b3RhcyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3NDk6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc1MC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzUxOlx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslbHVcXG5cJiMzNDssIHF1b3Rhcy1cdTAwM2Vtcyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc1Mi19XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE3NTQ9c3RhdGljIHNzaXplX3QgbXNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc1Ni17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc1NzpcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKnF1b3RhcyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3NTg6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc1OTpcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNnF1b3Rhcy1cdTAwM2Vtcyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc2MC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTc2Nj1zdGF0aWMgc3NpemVfdCBieXRlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3Njgte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3Njk6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzcwOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3NzEtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc3MjpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWx1XFxuXCYjMzQ7LCBxdW90YXMtXHUwMDNlc3opO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3NzMtfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNzc1PXN0YXRpYyBzc2l6ZV90IGJ5dGVzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzc3LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzc4Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc3OTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzgwOlx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2cXVvdGFzLVx1MDAzZXN6KTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzgxLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNzg3PXN0YXRpYyBzc2l6ZV90IHJlc2V0X2ludGVydmFsX21zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3ODkte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3OTA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzkxOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3OTItXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc5MzpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWx1XFxuXCYjMzQ7LCBxdW90YXMtXHUwMDNlcmVzZXRfaW50ZXJ2YWxfbXMpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3OTQtfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNzk2PXN0YXRpYyBzc2l6ZV90IHJlc2V0X2ludGVydmFsX21zX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzk4LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzk5Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTgwMDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxODAxOlx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2cXVvdGFzLVx1MDAzZXJlc2V0X2ludGVydmFsX21zKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODAyLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xODA4PXN0YXRpYyBzc2l6ZV90IGVmZmVjdGl2ZV9ieXRlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODEwLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxODExOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTgxMjpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODEzLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4MTQ6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVsdVxcblwmIzM0OywgcXVvdGFzLVx1MDAzZWVmZmVjdGl2ZV9zeik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTgxNS19XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE4MTc9c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX3R1bmVyX25hbWUge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4MTg6XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIgdHVuZXI7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTgxOS1cdGNoYXIgKm5hbWU7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE4MzM9c3RhdGljIHNzaXplX3QgZ29hbF90dW5lcl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODM1LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxODM2Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTgzNzpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODM4LVx0aW50IGk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4NDMtXHRcdHR1bmVyX25hbWUgPSBcdTAwMjZkYW1vc19zeXNmc19xZ29hbF90dW5lcl9uYW1lc1tpXTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxODQ0Olx0XHRpZiAodHVuZXJfbmFtZS1cdTAwM2V0dW5lciA9PSBxdW90YXMtXHUwMDNlZ29hbF90dW5lcilcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODQ1LVx0XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXNcXG5cJiMzNDssIHR1bmVyX25hbWUtXHUwMDNlbmFtZSk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE4NTA9c3RhdGljIHNzaXplX3QgZ29hbF90dW5lcl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTg1Mi17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTg1MzpcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKnF1b3RhcyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4NTQ6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTg1NS1cdGludCBpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODYxLVx0XHRpZiAoc3lzZnNfc3RyZXEoYnVmLCB0dW5lcl9uYW1lLVx1MDAzZW5hbWUpKSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTg2MjpcdFx0XHRxdW90YXMtXHUwMDNlZ29hbF90dW5lciA9IHR1bmVyX25hbWUtXHUwMDNldHVuZXI7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTg2My1cdFx0XHRyZXR1cm4gY291bnQ7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE4Njk9c3RhdGljIHNzaXplX3QgZmFpbF9jaGFyZ2VfbnVtX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4NzEte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4NzI6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxODczOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4NzQtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTg3NTpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXVcXG5cJiMzNDssIHF1b3Rhcy1cdTAwM2VmYWlsX2NoYXJnZV9udW0pO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4NzYtfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xODc4PXN0YXRpYyBzc2l6ZV90IGZhaWxfY2hhcmdlX251bV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTg4MC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTg4MTpcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKnF1b3RhcyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4ODI6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTg4MzpcdGludCBlcnIgPSBrc3RydG91aW50KGJ1ZiwgMCwgXHUwMDI2cXVvdGFzLVx1MDAzZWZhaWxfY2hhcmdlX251bSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTg4NC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTg5MD1zdGF0aWMgc3NpemVfdCBmYWlsX2NoYXJnZV9kZW5vbV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODkyLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxODkzOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTg5NDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODk1LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4OTY6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyV1XFxuXCYjMzQ7LCBxdW90YXMtXHUwMDNlZmFpbF9jaGFyZ2VfZGVub20pO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4OTctfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xODk5PXN0YXRpYyBzc2l6ZV90IGZhaWxfY2hhcmdlX2Rlbm9tX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTAxLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTAyOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTkwMzpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTA0Olx0aW50IGVyciA9IGtzdHJ0b3VpbnQoYnVmLCAwLCBcdTAwMjZxdW90YXMtXHUwMDNlZmFpbF9jaGFyZ2VfZGVub20pO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MDUtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MTAtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTkxMTpzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19xdW90YXNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTEyLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTEzOlx0a2ZyZWUoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMsIGtvYmopKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTE0LX1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTE1LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5MTY6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19xdW90YXNfbXNfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkxNy1cdFx0X19BVFRSX1JXX01PREUobXMsIDA2MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MTgtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTkxOTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3F1b3Rhc19zel9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTIwLVx0XHRfX0FUVFJfUldfTU9ERShieXRlcywgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkyMS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTIyOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfcXVvdGFzX3Jlc2V0X2ludGVydmFsX21zX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MjMtXHRcdF9fQVRUUl9SV19NT0RFKHJlc2V0X2ludGVydmFsX21zLCAwNjAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTI0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5MjU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19xdW90YXNfZWZmZWN0aXZlX2J5dGVzX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MjYtXHRcdF9fQVRUUl9ST19NT0RFKGVmZmVjdGl2ZV9ieXRlcywgMDQwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkyNy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTI4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfcXVvdGFzX2dvYWxfdHVuZXJfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkyOS1cdFx0X19BVFRSX1JXX01PREUoZ29hbF90dW5lciwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkzMC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTMxOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfcXVvdGFzX2ZhaWxfY2hhcmdlX251bV9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTMyLVx0XHRfX0FUVFJfUldfTU9ERShmYWlsX2NoYXJnZV9udW0sIDA2MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MzMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTkzNDpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3F1b3Rhc19mYWlsX2NoYXJnZV9kZW5vbV9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTM1LVx0XHRfX0FUVFJfUldfTU9ERShmYWlsX2NoYXJnZV9kZW5vbSwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkzNi1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTM3OnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19xdW90YXNfYXR0cnNbXSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTM4Olx0XHUwMDI2ZGFtb25fc3lzZnNfcXVvdGFzX21zX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTM5Olx0XHUwMDI2ZGFtb25fc3lzZnNfcXVvdGFzX3N6X2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTQwOlx0XHUwMDI2ZGFtb25fc3lzZnNfcXVvdGFzX3Jlc2V0X2ludGVydmFsX21zX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTQxOlx0XHUwMDI2ZGFtb25fc3lzZnNfcXVvdGFzX2VmZmVjdGl2ZV9ieXRlc19hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTk0MjpcdFx1MDAyNmRhbW9uX3N5c2ZzX3F1b3Rhc19nb2FsX3R1bmVyX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTQzOlx0XHUwMDI2ZGFtb25fc3lzZnNfcXVvdGFzX2ZhaWxfY2hhcmdlX251bV9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTk0NDpcdFx1MDAyNmRhbW9uX3N5c2ZzX3F1b3Rhc19mYWlsX2NoYXJnZV9kZW5vbV9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk0NS1cdE5VTEwsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk0Ni19O1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5NDc6QVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19xdW90YXMpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5NDgtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTk0OTpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19xdW90YXNfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTk1MDpcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfcXVvdGFzX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk1MS1cdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTUyOlx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfcXVvdGFzX2dyb3Vwcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTUzLX07XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIyNTQ9c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyNTgtXHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIyNTk6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXM7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjI2MC1cdHN0cnVjdCBkYW1vbl9zeXNmc193YXRlcm1hcmtzICp3YXRlcm1hcmtzO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMzYxPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfc2V0X2Rlc3RzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnNjaGVtZSlcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjM3Ni1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzc3OnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2NoZW1lX3NldF9xdW90YXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc2NoZW1lKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzNzgte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzNzk6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMgPSBkYW1vbl9zeXNmc19xdW90YXNfYWxsb2MoKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzgwLVx0aW50IGVycjtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzgxLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzODI6XHRpZiAoIXF1b3Rhcylcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzgzLVx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzg0Olx0ZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoXHUwMDI2cXVvdGFzLVx1MDAzZWtvYmosIFx1MDAyNmRhbW9uX3N5c2ZzX3F1b3Rhc19rdHlwZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzg1Olx0XHRcdFx1MDAyNnNjaGVtZS1cdTAwM2Vrb2JqLCBcJiMzNDtxdW90YXNcJiMzNDspO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzODYtXHRpZiAoZXJyKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzODctXHRcdGdvdG8gb3V0O1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzODg6XHRlcnIgPSBkYW1vbl9zeXNmc19xdW90YXNfYWRkX2RpcnMocXVvdGFzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzg5LVx0aWYgKGVycilcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzkwLVx0XHRnb3RvIG91dDtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzkxOlx0c2NoZW1lLVx1MDAzZXF1b3RhcyA9IHF1b3Rhcztcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzkyLVx0cmV0dXJuIDA7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzOTQtb3V0OlxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzOTU6XHRrb2JqZWN0X3B1dChcdTAwMjZxdW90YXMtXHUwMDNla29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjM5Ni1cdHJldHVybiBlcnI7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI1MDI9c3RhdGljIGludCBkYW1vbl9zeXNmc19zY2hlbWVfYWRkX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc2NoZW1lKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTExLVx0XHRnb3RvIHJtZGlyX3B1dF9hY2Nlc3NfcGF0dGVybl9vdXQ7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjUxMjpcdGVyciA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9zZXRfcXVvdGFzKHNjaGVtZSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUxMy1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1MTYtXHRpZiAoZXJyKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1MTc6XHRcdGdvdG8gcm1kaXJfcHV0X3F1b3Rhc19hY2Nlc3NfcGF0dGVybl9vdXQ7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUxOC1cdGVyciA9IGRhbW9zX3N5c2ZzX3NldF9maWx0ZXJfZGlycyhzY2hlbWUpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1MTktXHRpZiAoZXJyKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1MjA6XHRcdGdvdG8gcHV0X3dhdGVybWFya3NfcXVvdGFzX2FjY2Vzc19wYXR0ZXJuX291dDtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTIxLVx0ZXJyID0gZGFtb25fc3lzZnNfc2NoZW1lX3NldF9zdGF0cyhzY2hlbWUpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1MjItXHRpZiAoZXJyKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1MjM6XHRcdGdvdG8gcHV0X2ZpbHRlcnNfd2F0ZXJtYXJrc19xdW90YXNfYWNjZXNzX3BhdHRlcm5fb3V0O1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1MjQtXHRlcnIgPSBkYW1vbl9zeXNmc19zY2hlbWVfc2V0X3RyaWVkX3JlZ2lvbnMoc2NoZW1lKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUzMS1cdHNjaGVtZS1cdTAwM2VzdGF0cyA9IE5VTEw7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjUzMjpwdXRfZmlsdGVyc193YXRlcm1hcmtzX3F1b3Rhc19hY2Nlc3NfcGF0dGVybl9vdXQ6XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUzMy1cdGtvYmplY3RfcHV0KFx1MDAyNnNjaGVtZS1cdTAwM2VvcHNfZmlsdGVycy1cdTAwM2Vrb2JqKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUzOC1cdHNjaGVtZS1cdTAwM2VmaWx0ZXJzID0gTlVMTDtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTM5OnB1dF93YXRlcm1hcmtzX3F1b3Rhc19hY2Nlc3NfcGF0dGVybl9vdXQ6XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjU0MC1cdGtvYmplY3RfcHV0KFx1MDAyNnNjaGVtZS1cdTAwM2V3YXRlcm1hcmtzLVx1MDAzZWtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1NDEtXHRzY2hlbWUtXHUwMDNld2F0ZXJtYXJrcyA9IE5VTEw7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU0MjpybWRpcl9wdXRfcXVvdGFzX2FjY2Vzc19wYXR0ZXJuX291dDpcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTQzOlx0ZGFtb25fc3lzZnNfcXVvdGFzX3JtX2RpcnMoc2NoZW1lLVx1MDAzZXF1b3Rhcyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU0NDpcdGtvYmplY3RfcHV0KFx1MDAyNnNjaGVtZS1cdTAwM2VxdW90YXMtXHUwMDNla29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU0NTpcdHNjaGVtZS1cdTAwM2VxdW90YXMgPSBOVUxMO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1NDYtcHV0X2Rlc3RzX291dDpcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjU1Nj1zdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19zY2hlbWVfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lICpzY2hlbWUpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1NjEtXHRrb2JqZWN0X3B1dChcdTAwMjZzY2hlbWUtXHUwMDNlZGVzdHMtXHUwMDNla29iaik7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2ODUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMzk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggYW5kIGl0cyBRdW90YSBBZGp1c3RtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIERBTU9OIHBhdGNoLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBEQU1PTiBpcyBhY2Nlc3NlZCB2aWEgc3lzZnMsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGNvbmZpZ3VyZWQgd2l0aCBhIGJ1bmNoIG9mIGRpZmZlcmVudCBvcHRpb25zLiYjMzQ7IEJ1dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgZGFtb3NfYWRqdXN0X3F1b3RhYCBmdW5jdGlvbi4gSSBzZWUgdGhlIHBhdGNoIGFkZHMgYSBjaGVjayBmb3IgYHF1b3RhLSZndDtlc3ogPT0gMGAgYW5kIGJhaWxzIG91dCBlYXJseSwgYnV0IEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqLgoKTGV0JiMzOTtzIHRyYWNlOiBJIHJlbWVtYmVyIHRoYXQgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoKWAgc2V0cyBgcXVvdGEtJmd0O2VzemAuIFNvLCBgcXVvdGEtJmd0O2VzemAgY2FuIGJlIHplcm8gaWYgdGhlIHF1b3RhIHNpemUgaXMgemVybyBvciB0aGUgZ29hbCB0dW5lciBzZXRzIGl0IHRvIHplcm8uCgpIZXJlJiMzOTtzIHRoZSBwcm9ibGVtOiBpZiBgcXVvdGEtJmd0O2VzemAgaXMgemVybywgaW5zaWRlIHRoZSBsb29wIGNhbGN1bGF0aW5nIHRoZSBzY29yZTogYGN1bXVsYXRlZF9zemAgd2lsbCBhbHdheXMgYmUgZ3JlYXRlciBvciBlcXVhbCB0aGFuIHRoZSBgcXVvdGEtJmd0O2VzemAgb24gdGhlIGZpcnN0IGl0ZXJhdGlvbiwgd2hpY2ggc2V0cyBgcXVvdGEtJmd0O21pbl9zY29yZWAgdG8gYG1heF9zY29yZWAuIFdoeSBhcmUgd2UgaXRlcmF0aW5nIG92ZXIgYWxsIHRoZXNlIHJlZ2lvbnMsIGNhbGN1bGF0aW5nIHRoZSBzY29yZXMsIGFuZCBidWlsZGluZyB0aGlzIGhpc3RvZ3JhbSBpZiB0aGUgcXVvdGEgc2l6ZSBpcyB6ZXJvIGluIHRoZSBmaXJzdCBwbGFjZT8gSXQmIzM5O3MgaW5lZmZpY2llbnQuCgpIb2xkIG9uLCBpZiB3ZSByZXR1cm4gZWFybHksIGBxdW90YS0mZ3Q7bWluX3Njb3JlYCBpc24mIzM5O3QgdXBkYXRlZCEgSXQgd2lsbCByZXRhaW4gaXRzIHByZXZpb3VzIHZhbHVlLiBJIG5lZWQgdG8ga25vdyB3aGF0IHVzZXMgdGhpcyBgcXVvdGEtJmd0O21pbl9zY29yZWAgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHNraXBwaW5nIHRoZSB1cGRhdGUuIEkgbmVlZCB0byB0cmFjayBkb3duIGFsbCB0aGUgcGxhY2VzIGluIHRoZSBjb2RlIHdoZXJlIGBxdW90YS0mZ3Q7bWluX3Njb3JlYCBpcyB1c2VkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaW5fc2NvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjQxMz1zdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQyMC1cbm1tL2RhbW9uL2NvcmUuYzoyNDIxOlx0cmV0dXJuIGMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcykgXHUwMDNlPSBzLVx1MDAzZXF1b3RhLm1pbl9zY29yZTtcbm1tL2RhbW9uL2NvcmUuYy0yNDIyLX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI5MD1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzUzLVx0fVxubW0vZGFtb24vY29yZS5jOjMzNTQ6XHRxdW90YS1cdTAwM2VtaW5fc2NvcmUgPSBzY29yZTtcbm1tL2RhbW9uL2NvcmUuYy0zMzU1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NTgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWYWxpZGl0eSBDaGVjayBpbiBEQU1PTioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGRhbW9zX3ZhbGlkX3RhcmdldGAgZnVuY3Rpb24uIEkgc2VlIGl0JiMzOTtzIGRldGVybWluaW5nIGlmIGEgcmVnaW9uIGlzIGEgdmFsaWQgdGFyZ2V0IGZvciBEQU1PTiYjMzk7cyBhY3Rpb25zLiBUaGUgY29yZSBjaGVjayBoaW5nZXMgb24gd2hldGhlciB0aGUgYGdldF9zY2hlbWVfc2NvcmVgIGZ1bmN0aW9uIHJldHVybnMgYSBzY29yZSB0aGF0IG1lZXRzIG9yIGV4Y2VlZHMgYHMtJmd0O3F1b3RhLm1pbl9zY29yZWAuIFN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guCgpCdXQgd2FpdCwgaG9sZCBvbiBhIHNlY29uZC4uLiB3aGF0IGhhcHBlbnMgd2hlbiBgcXVvdGEtJmd0O2VzemAgaXMgemVybz8gSW1tZWRpYXRlbHksIGEgcmVkIGZsYWcgZ29lcyB1cC4gSSByZWNhbGwgdGhhdCBgZGFtb3NfYWRqdXN0X3F1b3RhYCBoYXMgYW4gZWFybHkgcmV0dXJuIHBhdGggd2hlbiBgcXVvdGEtJmd0O2VzemAgaXMgemVyby4gQ3J1Y2lhbGx5LCBpbiB0aGlzIHNjZW5hcmlvLCBgcXVvdGEtJmd0O21pbl9zY29yZWAgaXNuJiMzOTt0IHNldCwgd2hpY2ggbWVhbnMgdGhhdCBjb21wYXJpc29uIGlzIHVucmVsaWFibGUuCgpOb3cgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIHF1b3RhIG1lY2hhbmlzbSBwcmV2ZW50cyBjYWxsaW5nIGBkYW1vc192YWxpZF90YXJnZXRgIHdoZW4gYHF1b3RhLSZndDtlc3ogPT0gMGAsIG9yIGRvZXMgaXQganVzdCBhbGxvdyB0aGUgY29tcGFyaXNvbiB0byBoYXBwZW4gd2l0aCBgbWluX3Njb3JlYCB1bmluaXRpYWxpemVkLiBOZWVkIHRvIGNvbmZpcm0gd2hlcmUgYGRhbW9zX3ZhbGlkX3RhcmdldGAgaXMgaW52b2tlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgYW4gYWN0dWFsIHByb2JsZW0gb3Igbm90LiBMZXQmIzM5O3MgdHJhY2UgYmFjayB0aGUgY2FsbCBjaGFpbiBhbmQgZmluZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3ZhbGlkX3RhcmdldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0yMzY0PXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZCBrZGFtb25kX3R1bmVfaW50ZXJ2YWxzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTIzODUtXG5tbS9kYW1vbi9jb3JlLmM6MjM4NjpzdGF0aWMgYm9vbCBfX2RhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG5tbS9kYW1vbi9jb3JlLmMtMjM4Ny1cdFx0c3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjQwNz1zdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19zZXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQxMi1cbm1tL2RhbW9uL2NvcmUuYzoyNDEzOnN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTI0MTQtXHRcdHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy0yNDE1LXtcbm1tL2RhbW9uL2NvcmUuYzoyNDE2Olx0Ym9vbCByZXQgPSBfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKTtcbm1tL2RhbW9uL2NvcmUuYy0yNDE3LVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNzU2PXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjc4MS1cbm1tL2RhbW9uL2NvcmUuYzoyNzgyOlx0XHRpZiAoZGFtb3NfdmFsaWRfdGFyZ2V0KGMsIHIsIHMpKVxubW0vZGFtb24vY29yZS5jLTI3ODMtXHRcdFx0ZGFtb3NfYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMDA4PXN0YXRpYyBwaHlzX2FkZHJfdCBkYW1vc19jYWxjX2VsaWdpYmxlX2J5dGVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMwMTktXG5tbS9kYW1vbi9jb3JlLmM6MzAyMDpcdFx0XHRpZiAoIV9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMsIGMpKVxubW0vZGFtb24vY29yZS5jLTMwMjEtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI5MD1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzM1LVx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xubW0vZGFtb24vY29yZS5jOjMzMzY6XHRcdFx0aWYgKCFfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKSlcbm1tL2RhbW9uL2NvcmUuYy0zMzM3LVx0XHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NzYwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGZvY3VzaW5nIG9uIHdoYXQgSSYjMzk7ZCBiZSBsb29raW5nIGF0IGFzIGEgbWVtb3J5IG1hbmFnZW1lbnQgZXhwZXJ0OgoKKipEaXZpbmcgaW50byBgZGFtb3NfdmFsaWRfdGFyZ2V0YCoqCgpPa2F5LCBzbyBJJiMzOTttIGJlaW5nIGRpcmVjdGVkIHRvIGV4YW1pbmUgYGRhbW9zX3ZhbGlkX3RhcmdldGAuIEkgaW1tZWRpYXRlbHkga25vdyB0aGF0ICYjMzQ7ZGFtb3MmIzM0OyBsaWtlbHkgcmVmZXJzIHRvIER5bmFtaWMgQWRhcHRpdmUgTWVtb3J5IE9wdGltaXplciAoREFNT04pLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gYW5kIGNvbnRleHQsIEkgc3VzcGVjdCB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIHRvIERBTU9OJiMzOTtzIGNvcmUgZGVjaXNpb24tbWFraW5nIHByb2Nlc3M6IHNwZWNpZmljYWxseSwgZGV0ZXJtaW5pbmcgaWYgYSBtZW1vcnkgcmVnaW9uIGlzIGEgdmFsaWQgY2FuZGlkYXRlIHRvIGJlIG9wdGltaXplZC4KCkxldCYjMzk7cyBxdWlja2x5IG5hdmlnYXRlIHRvIGBtbS9kYW1vbi9jb3JlLmNgIGFuZCBmb2N1cyBvbiBsaW5lcyAyNDAwLTI0MzAuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzOgoKKiAgICoqV2hhdCBjcml0ZXJpYSBpcyB0aGlzIGZ1bmN0aW9uIHVzaW5nPyoqIEFyZSB3ZSBsb29raW5nIGZvciByZWdpb25zIHRoYXQgYXJlIGZyZXF1ZW50bHkgYWNjZXNzZWQsIGluZnJlcXVlbnRseSBhY2Nlc3NlZCwgb3IgbWVldGluZyBvdGhlciBzcGVjaWZpYyBhY2Nlc3MgcGF0dGVybnM/IElzIGl0IGNvbnNpZGVyaW5nIHRoaW5ncyBsaWtlIE5VTUEgbm9kZSBsb2NhbGl0eSwgcGFnZSBmbGFncyAoZS5nLiwgZGlydHksIGFjY2Vzc2VkKSwgb3IgdGhlIGFnZSBvZiB0aGUgcGFnZXM/CiogICAqKldoYXQgYXJlIHRoZSBpbnB1dHMgYW5kIG91dHB1dHM/KiogV2hhdCBpcyB0aGUgZnVuY3Rpb24gcmVjZWl2aW5nIGFzIGl0cyBhcmd1bWVudHMgKHByb2JhYmx5IGEgYGRhbW9uX3RhcmdldGAgc3RydWN0dXJlLCBwZXJoYXBzIG90aGVyIHJlbGV2YW50IGRhdGEpPyBXaGF0IGRvZXMgdGhlIGZ1bmN0aW9uIHJldHVybiAobGlrZWx5IGEgYm9vbGVhbiBpbmRpY2F0aW5nIHZhbGlkaXR5KT8KKiAgICoqV2hhdCBpcyB0aGUgbG9naWMgZmxvdz8qKiBJJiMzOTtsbCBiZSB3YXRjaGluZyBmb3IgYW55IGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgb3IgbG9vcHMsIGFzIHRoZXNlIHdpbGwgaW5kaWNhdGUgdGhlIHByaW9yaXRpemF0aW9uIGZvciByZWdpb24gc3VpdGFiaWxpdHkuIElmIGl0IG1ha2VzIGl0IHRocm91Z2ggYSBnYXVudGxldCBvZiBkaWZmZXJlbnQgY2hlY2tzLCBJIHdhbnQgdG8gc2VlIGlmIHRoZSByZWdpb24gaXMgZGV0ZXJtaW5lZCBhcyB2YWxpZCwgb3IgaW52YWxpZCwgYXQgdGhlIGVuZCBvZiB0aGUgcHJvY2Vzcy4KCkkmIzM5O2xsIGJlIHJlYWRpbmcgdGhpcyBzZWN0aW9uIHdpdGggYSBjcml0aWNhbCBleWUsIGNvbnNpZGVyaW5nIGhvdyBhbnkgcGFydGljdWxhciBsb2dpYyBjb3VsZCBpbmZsdWVuY2UgREFNT04mIzM5O3MgcGVyZm9ybWFuY2UgYW5kIGltcGFjdCBvbiB0aGUgd29ya2xvYWRzIGl0JiMzOTtzIGRlc2lnbmVkIHRvIG9wdGltaXplLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSB0eXBpY2FsIHRyYWRlLW9mZnMgaW52b2x2ZWQgaW4gbWVtb3J5IG9wdGltaXphdGlvbiDigJMgcmVzcG9uc2l2ZW5lc3MgdmVyc3VzIG1lbW9yeSByZWNsYWltLCBvdmVyaGVhZCwgYW5kIHBvdGVudGlhbCBmb3IgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHdoZXJlIHRob3NlIHRyYWRlLW9mZnMgYXJlIGJlaW5nIGFjdGl2ZWx5IGNvbnNpZGVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDAwOlx0XG4yNDAxOlx0LypcbjI0MDI6XHQgKiBkYW1vc19xdW90YV9pc19zZXQoKSAtIFJldHVybiBpZiB0aGUgZ2l2ZW4gcXVvdGEgaXMgYWN0dWFsbHkgc2V0LlxuMjQwMzpcdCAqIEBxdW90YTpcdFRoZSBxdW90YSB0byBjaGVjay5cbjI0MDQ6XHQgKlxuMjQwNTpcdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVvdGEgaXMgc2V0LCBmYWxzZSBvdGhlcndpc2UuXG4yNDA2Olx0ICovXG4yNDA3Olx0c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfc2V0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG4yNDA4Olx0e1xuMjQwOTpcdFx0cmV0dXJuIHF1b3RhLVx1MDAzZWVzeiB8fCBxdW90YS1cdTAwM2VzeiB8fCBxdW90YS1cdTAwM2VtcyB8fFxuMjQxMDpcdFx0XHQhZGFtb3NfcXVvdGFfZ29hbHNfZW1wdHkocXVvdGEpO1xuMjQxMTpcdH1cbjI0MTI6XHRcbjI0MTM6XHRzdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbjI0MTQ6XHRcdFx0c3RydWN0IGRhbW9zICpzKVxuMjQxNTpcdHtcbjI0MTY6XHRcdGJvb2wgcmV0ID0gX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYyk7XG4yNDE3Olx0XG4yNDE4Olx0XHRpZiAoIXJldCB8fCAhZGFtb3NfcXVvdGFfaXNfc2V0KFx1MDAyNnMtXHUwMDNlcXVvdGEpIHx8ICFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuMjQxOTpcdFx0XHRyZXR1cm4gcmV0O1xuMjQyMDpcdFxuMjQyMTpcdFx0cmV0dXJuIGMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcykgXHUwMDNlPSBzLVx1MDAzZXF1b3RhLm1pbl9zY29yZTtcbjI0MjI6XHR9XG4yNDIzOlx0XG4yNDI0Olx0LypcbjI0MjU6XHQgKiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcmVnaW9uIG9yIHN0YXJ0aW5nIHBhcnQgb2ZcbjI0MjY6XHQgKiBpdCBpcyBhbHJlYWR5IGNoYXJnZWQgZm9yIHRoZSBEQU1PUyBxdW90YS5cbjI0Mjc6XHQgKiBAdDpcdFRoZSB0YXJnZXQgb2YgdGhlIHJlZ2lvbi5cbjI0Mjg6XHQgKiBAcnA6XHRUaGUgcG9pbnRlciB0byB0aGUgcmVnaW9uLlxuMjQyOTpcdCAqIEBzOlx0VGhlIHNjaGVtZSB0byBiZSBhcHBsaWVkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODcyOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExvZ2ljIG9mIGBkYW1vc192YWxpZF90YXJnZXRgIGFuZCBRdW90YSBBZGp1c3RtZW50KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQhIEkgbmVlZCB0byByZWFsbHkgZGlnIGludG8gaG93IGBkYW1vc192YWxpZF90YXJnZXRgIHdvcmtzLCBwYXJ0aWN1bGFybHkgd2l0aCB0aGlzIHF1b3RhIGxvZ2ljLiBTb21ldGhpbmcmIzM5O3MgbmFnZ2luZyBhdCBtZS4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgbG9vayBhdCB0aGlzIGNvbmRpdGlvbjogYHF1b3RhLSZndDtlc3ogPT0gMGAuIEl0IHNlZW1zIGxpa2UgaWYgYGVzemAgaXMgemVybywgd2UgKm1pZ2h0KiBoYXZlIGEgcHJvYmxlbS4gSWYgYHF1b3RhLSZndDtlc3pgIGlzIHplcm8sIGFuZCB3ZSBoYXZlIGBzemAgb3IgYG1zYCBzZXQgd2hpY2ggaW4gdHVybiByYW4gYGRhbW9zX2FkanVzdF9xdW90YWAsIGhlcmUmIzM5O3MgdGhlIGlzc3VlIEkmIzM5O20gc2VlaW5nOgoKUHJldmlvdXNseSwgYGRhbW9zX2FkanVzdF9xdW90YWAgd291bGQgY2FsY3VsYXRlIGBxdW90YS0mZ3Q7bWluX3Njb3JlID0gc2NvcmVgLCB3aGljaCB3YXMgZXNzZW50aWFsbHkgdGhlIGBtYXhfc2NvcmVgLiBCdXQgd2l0aCB0aGUgY2hhbmdlLCBpZiBgcXVvdGEtJmd0O2VzeiA9PSAwYCwgYGRhbW9zX2FkanVzdF9xdW90YWAganVzdCByZXR1cm5zIGVhcmx5IGFuZCBET0VTTiYjMzk7VCB1cGRhdGUgYHF1b3RhLSZndDttaW5fc2NvcmVgIQoKU28sIHRoZSBleGlzdGluZyB2YWx1ZSBvZiBgbWluX3Njb3JlYCBpcyBwcmVzZXJ2ZWQuIEl0JiMzOTtzIGVpdGhlciB0aGUgemVybyBpbml0aWFsaXplZCBmcm9tIGt6YWxsb2MsIG9yIGl0JiMzOTtzIGFuIG9sZCBzY29yZSBmcm9tIGEgcHJldmlvdXMgY3ljbGUgd2hlcmUgYGVzemAgd2FzIGdyZWF0ZXIgdGhhbiB6ZXJvLgoKQWhhISBOb3cgSSBzZWUgdGhlIHBvdGVudGlhbCBwcm9ibGVtLiBJZiBgbWluX3Njb3JlYCBpcyBzdHVjayBhdCB6ZXJvLCB0aGF0IG1lYW5zIGBnZXRfc2NoZW1lX3Njb3JlKC4uLikgJmd0Oz0gMGAgaXMgQUxXQVlTIGdvaW5nIHRvIGJlIHRydWUsIHJlZ2FyZGxlc3MuIFRoaXMgc2VlbXMgd3JvbmcuIFdoeSB3b3VsZCB3ZSBiZSBhbGxvd2luZyBzY2hlbWVzIHRvIHBhc3MgaWYgYGVzeiA9PSAwYD8gUGVyaGFwcyB0aGUgaW50ZW50aW9uIGlzIHRvIG5vdCBhcHBseSBhbnl0aGluZyB3aGVuIHRoZXJlJiMzOTtzIG5vIGVudHJ5IHNpemUuCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gTm93IEkgbmVlZCB0byBzZWUgd2hhdCBoYXBwZW5zIHdoZW4gYHF1b3RhLSZndDtlc3ogPT0gMGAgd2l0aGluIGBkYW1vc19hcHBseV90YXJnZXRgIG9yIGBkYW1vc19hcHBseV9zY2hlbWVgLiBUaGlzIGZlZWxzIGxpa2UgaXQgbWlnaHQgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbmRlZCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfYXBwbHlfc2NoZW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTI2NzE9c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfZnVsbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNjg0LVxubW0vZGFtb24vY29yZS5jOjI2ODU6c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtMjY4Ni1cdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNzU2PXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjc4Mi1cdFx0aWYgKGRhbW9zX3ZhbGlkX3RhcmdldChjLCByLCBzKSlcbm1tL2RhbW9uL2NvcmUuYzoyNzgzOlx0XHRcdGRhbW9zX2FwcGx5X3NjaGVtZShjLCB0LCByLCBzKTtcbm1tL2RhbW9uL2NvcmUuYy0yNzg0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTYzMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBhaW1pbmcgZm9yIGEgZnVsc29tZSByZW5kZXJpbmc6CgoqKkNoZWNraW5nIEtleSBBcHBsaWNhdGlvbiBQcm9jZWR1cmVzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBydW5uaW5nIHNtb290aGx5LCBhbmQgdGhhdCB0aGUgY29yZSBhcHBsaWNhdGlvbiBmdW5jdGlvbnMgYXJlIG9wZXJhdGluZyBhcyBleHBlY3RlZC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHR3byBjcml0aWNhbCBjb21wb25lbnRzOiBgZGFtb3NfYXBwbHlfdGFyZ2V0YCBhbmQgYGRhbW9zX2FwcGx5X3NjaGVtZWAuIFRoZXNlIGFyZSB0aGUgbGluY2hwaW5zLCB0aGUgZW5naW5lcyB0aGF0IGRyaXZlIHRoZSBlbnRpcmUgcHJvY2Vzcy4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlaXIgbG9naWMgaXMgc291bmQsIHRoYXQgdGhleSYjMzk7cmUgY29ycmVjdGx5IHByb2Nlc3NpbmcgdGhlIGlucHV0IGRhdGEsIGFuZCBwcm9kdWNpbmcgdGhlIGFudGljaXBhdGVkIG91dHB1dHMsIGFzIHdlbGwgYXMgY2hlY2tpbmcgdGhlIHZhcmlvdXMgZmFpbHVyZSBtb2RlcyBmb3IgdGhlc2UgYXBwbGljYXRpb25zLiBJcyB0aGUgdGFyZ2V0IGNvcnJlY3RseSBhc3NpZ25lZCBhbmQgYXBwbGllZD8gSXMgdGhlIGNvcnJlY3Qgc2NoZW1lIGluIHBsYWNlLCBvciBpcyB0aGVyZSBhIGNvbmZsaWN0LCBhIG51bGwgdmFsdWUsIG9yIHNvbWV0aGluZyB1bmV4cGVjdGVkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3IgcGVyZm9ybWFuY2UgY29uY2VybnM/IEEgcXVpY2ssIHRhcmdldGVkIHJldmlldyBvZiB0aGVzZSB3aWxsIGdpdmUgbWUgYSBnb29kIHNlbnNlIG9mIHRoZSBvdmVyYWxsIGFwcGxpY2F0aW9uIGhlYWx0aCBhbmQgYWxsb3cgbWUgdG8gbW92ZSBmb3J3YXJkIHdpdGggY29uZmlkZW5jZS4gQmV0dGVyIHRvIGJlIHByb2FjdGl2ZSBhbmQgY2F0Y2ggcG90ZW50aWFsIGlzc3VlcyBub3cgcmF0aGVyIHRoYW4gaGF2ZSB0aGVtIGVzY2FsYXRlIGxhdGVyLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB3ZSBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY3MDpcdFxuMjY3MTpcdHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbjI2NzI6XHRcdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuMjY3MzpcdHtcbjI2NzQ6XHRcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcbjI2NzU6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMjY3NjpcdFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogXHUwMDNlPSBxdW90YS1cdTAwM2Vlc3opXG4yNjc3Olx0XHRcdHJldHVybiB0cnVlO1xuMjY3ODpcdFx0LypcbjI2Nzk6XHRcdCAqIERBTU9TIGFjdGlvbiBpcyBhcHBsaWVkIHBlciByZWdpb24sIHNvIFx1MDAzY21pbl9yZWdpb25fc3ogcmVtYWluaW5nXG4yNjgwOlx0XHQgKiBxdW90YSBtZWFucyB0aGUgcXVvdGEgaXMgZWZmZWN0aXZlbHkgZnVsbC5cbjI2ODE6XHRcdCAqL1xuMjY4MjpcdFx0cmV0dXJuIHF1b3RhLVx1MDAzZWVzeiAtIHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogXHUwMDNjIG1pbl9yZWdpb25fc3o7XG4yNjgzOlx0fVxuMjY4NDpcdFxuMjY4NTpcdHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuMjY4NjpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMpXG4yNjg3Olx0e1xuMjY4ODpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4yNjg5Olx0XHR1bnNpZ25lZCBsb25nIHN6ID0gZGFtb25fc3pfcmVnaW9uKHIpO1xuMjY5MDpcdFx0c3RydWN0IHRpbWVzcGVjNjQgYmVnaW4sIGVuZDtcbjI2OTE6XHRcdHVuc2lnbmVkIGxvbmcgc3pfYXBwbGllZCA9IDA7XG4yNjkyOlx0XHR1bnNpZ25lZCBsb25nIHN6X29wc19maWx0ZXJfcGFzc2VkID0gMDtcbjI2OTM6XHRcdC8qXG4yNjk0Olx0XHQgKiBXZSBwbGFuIHRvIHN1cHBvcnQgbXVsdGlwbGUgY29udGV4dCBwZXIga2RhbW9uZCwgYXMgREFNT04gc3lzZnNcbjI2OTU6XHRcdCAqIGltcGxpZXMgd2l0aCAmIzM5O25yX2NvbnRleHRzJiMzOTsgZmlsZS4gIE5ldmVydGhlbGVzcywgb25seSBzaW5nbGUgY29udGV4dFxuMjY5NjpcdFx0ICogcGVyIGtkYW1vbmQgaXMgc3VwcG9ydGVkIGZvciBub3cuICBTbywgd2UgY2FuIHNpbXBseSB1c2UgJiMzOTswJiMzOTsgY29udGV4dFxuMjY5NzpcdFx0ICogaW5kZXggaGVyZS5cbjI2OTg6XHRcdCAqL1xuMjY5OTpcdFx0dW5zaWduZWQgaW50IGNpZHggPSAwO1xuMjcwMDpcdFx0c3RydWN0IGRhbW9zICpzaXRlcjtcdFx0Lyogc2NoZW1lcyBpdGVyYXRvciAqL1xuMjcwMTpcdFx0dW5zaWduZWQgaW50IHNpZHggPSAwO1xuMjcwMjpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdGl0ZXI7XHQvKiB0YXJnZXRzIGl0ZXJhdG9yICovXG4yNzAzOlx0XHR1bnNpZ25lZCBpbnQgdGlkeCA9IDAsIG5yX2FjY2Vzc2VzID0gMDtcbjI3MDQ6XHRcdGJvb2wgZG9fdHJhY2UgPSBmYWxzZTtcbjI3MDU6XHRcbjI3MDY6XHRcdC8qIGdldCBpbmRpY2VzIGZvciB0cmFjZV9kYW1vc19iZWZvcmVfYXBwbHkoKSAqL1xuMjcwNzpcdFx0aWYgKHRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseV9lbmFibGVkKCkpIHtcbjI3MDg6XHRcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNpdGVyLCBjKSB7XG4yNzA5Olx0XHRcdFx0aWYgKHNpdGVyID09IHMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTk3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgZGFtb3NfYXBwbHlfdGFyZ2V0YCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QuIEkmIzM5O20gY3VyaW91cyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZnVuY3Rpb24mIzM5O3MgbG9naWMsIHN0ZXAtYnktc3RlcCwgcGVyaGFwcyBieSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIGEgdHlwaWNhbCBleGVjdXRpb24gc2NlbmFyaW8uCgpNYXliZSBJJiMzOTtsbCBzdGFydCBieSBjb25zaWRlcmluZyB0aGUgaW5wdXRzLiBXaGF0IGFyZ3VtZW50cyBkb2VzIGl0IHRha2U/IFdoYXQga2luZCBvZiBkYXRhIGlzIGJlaW5nIGZlZCBpbnRvIHRoaXMgZnVuY3Rpb24/IEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCB0aGVpciBmb3JtYXRzLCBhbmQgYW55IGV4cGVjdGVkIHByZWNvbmRpdGlvbnMuIEkgc2hvdWxkIGtlZXAgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIGVkZ2UgY2FzZXMgYW5kIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGlucHV0IGRhdGEgaXMgbWFsZm9ybWVkIG9yIGludmFsaWQ/IERvZXMgaXQgdGhyb3cgYW4gZXhjZXB0aW9uLCByZXR1cm4gYW4gZXJyb3IgY29kZSwgb3Igc2ltcGx5IHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzPwoKSSBhbHNvIG5lZWQgdG8gZm9jdXMgb24gaXRzIGludGVuZGVkICpvdXRwdXQqIG9yIGVmZmVjdC4gRG9lcyBpdCBtb2RpZnkgc29tZXRoaW5nIGluLXBsYWNlLCByZXR1cm4gYSBuZXcgb2JqZWN0LCBvciB0cmlnZ2VyIHNvbWUgc2lkZSBlZmZlY3RzPyBVbmRlcnN0YW5kaW5nIHRoZSByZXN1bHQmIzM5O3MgaW1wYWN0IGlzIGNydWNpYWwuIEkmIzM5O2xsIG1lbnRhbGx5ICYjMzQ7ZXhlY3V0ZSYjMzQ7IHRoZSBrZXkgb3BlcmF0aW9ucy4gSSBjYW4gbWFwIHdoYXQgdHJhbnNmb3JtYXRpb25zIGFyZSBiZWluZyBhcHBsaWVkIHRvIHRoZSBkYXRhLiBJJiMzOTttIHBhcnRpY3VsYXJseSBrZWVuIHRvIGRpc2Nlcm4gdGhlIGFsZ29yaXRobSBvciBsb2dpYyB0aGF0IHVuZGVybGllcyB0aGUgJiMzOTt0YXJnZXQmIzM5OyBhcHBsaWNhdGlvbi4gV2hhdCBjb25zdGl0dXRlcyB0aGUgJiMzOTt0YXJnZXQmIzM5OywgYW5kIGhvdyBkb2VzIHRoZSBmdW5jdGlvbiBtYWtlIGl0IGhhcHBlbj8KCkkmIzM5O2xsIGJlIG1pbmRmdWwgb2YgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gQXJlIHRoZXJlIGFueSBsb29wcywgcmVjdXJzaXZlIGNhbGxzLCBvciBjb21wbGV4IGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGJlY29tZSBib3R0bGVuZWNrcz8gSWYgSSBzZWUgc29tZXRoaW5nIGluZWZmaWNpZW50LCBJIG1pZ2h0IHN0YXJ0IGJyYWluc3Rvcm1pbmcgcG90ZW50aWFsIG9wdGltaXphdGlvbnMsIG1heWJlIHRocm91Z2ggbWVtb2l6YXRpb24sIHZlY3Rvcml6YXRpb24sIG9yIGFsZ29yaXRobSByZWRlc2lnbi4gSSB3YW50IHRvIGtlZXAgdGhpcyBmdW5jdGlvbiBlZmZpY2llbnQuIEkmIzM5O20gYWxzbyBsb29raW5nIGZvciBhbnkgb3Bwb3J0dW5pdGllcyB0byByZWZhY3RvciBhbmQgY2xhcmlmeSB0aGUgY29kZSB0byBtYWtlIGl0IGNsZWFuZXIgYW5kIG1vcmUgcmVhZGFibGUuIFRoaXMgd2lsbCBoZWxwIHdpdGggZnV0dXJlIG1haW50YWluYWJpbGl0eSBhbmQgZGVidWdnaW5nLCBvZiBjb3Vyc2UuCgpGaW5hbGx5LCBJJiMzOTtsbCB0cnkgdG8gcmVsYXRlIGBkYW1vc19hcHBseV90YXJnZXRgIHRvIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgd2lkZXIgY29kZWJhc2UuIFdoYXQgb3RoZXIgZnVuY3Rpb25zIG9yIG1vZHVsZXMgZG9lcyBpdCBpbnRlcmFjdCB3aXRoPyBIb3cgZG9lcyBpdCBjb250cmlidXRlIHRvIHRoZSBvdmVyYWxsIHdvcmtmbG93IG9yIGdvYWw/IFdoYXQgYXJlIGl0cyBkZXBlbmRlbmNpZXM/IEJ5IHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9ucyBJIGNhbiBiZXR0ZXIgZ3Jhc3AgaXRzIHRydWUgc2lnbmlmaWNhbmNlIGFuZCBlbnN1cmUgaXQmIzM5O3MgaW50ZWdyYXRlZCBhcHByb3ByaWF0ZWx5IHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfYXBwbHlfdGFyZ2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTI3NTY9c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzkwLS8qXG5tbS9kYW1vbi9jb3JlLmM6Mjc5MTogKiBkYW1vc19hcHBseV90YXJnZXQoKSAtIEFwcGx5IERBTU9TIHNjaGVtZXMgdG8gYSBnaXZlbiB0YXJnZXQuXG5tbS9kYW1vbi9jb3JlLmMtMjc5Mi0gKiBAYzpcdFx0XHRtb25pdG9yaW5nIGNvbnRleHQgdG8gYXBwbHkgaXRzIERBTU9TIHNjaGVtZXMgdG8uLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yODA3LSAqL1xubW0vZGFtb24vY29yZS5jOjI4MDg6c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtMjgwOS1cdFx0dW5zaWduZWQgbG9uZyBtYXhfcmVnaW9uX3N6KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMzczPXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDA2LVx0XHR9XG5tbS9kYW1vbi9jb3JlLmM6MzQwNzpcdFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xubW0vZGFtb24vY29yZS5jLTM0MDgtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzkwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlICYjMzQ7ZGFtb3NfYXBwbHlfdGFyZ2V0JiMzNDsgY29uY2VwdCwgZnJhbWluZyBpdCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkFuYWx5emluZyAmIzM0O2RhbW9zX2FwcGx5X3RhcmdldCYjMzQ7KioKCkFscmlnaHQsICYjMzQ7ZGFtb3NfYXBwbHlfdGFyZ2V0LiYjMzQ7IE15IGluaXRpYWwgcmVhY3Rpb24gaXMsIHRoaXMgc291bmRzIGxpa2UgaXQmIzM5O3MgYSBzcGVjaWZpYyBmdW5jdGlvbiBvciBtb2R1bGUgd2l0aGluIGEgYnJvYWRlciBEQU1PUyAoRGF0YSBBY3F1aXNpdGlvbiBhbmQgTW9uaXRvcmluZyBTeXN0ZW0sIGxpa2VseSkgY29udGV4dC4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgb2theSwgd2hhdCYjMzk7cyB0aGUgcHVycG9zZT8gJiMzOTtBcHBseSYjMzk7IGltcGxpZXMgYSB0cmFuc2Zvcm1hdGlvbiBvciBhY3Rpb24gaXMgYmVpbmcgdGFrZW4sIGFuZCAmIzM5O3RhcmdldCYjMzk7IHN1Z2dlc3RzIHdlJiMzOTtyZSBkaXJlY3RpbmcgdGhpcyBhY3Rpb24gdG93YXJkIGEgc3BlY2lmaWMgZGF0YSBwb2ludCwgY2hhbm5lbCwgb3IgcGVyaGFwcyBldmVuIGFuIGVudGlyZSBkYXRhc2V0IHdpdGhpbiB0aGUgREFNT1MgZW52aXJvbm1lbnQuCgpNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0aWNraW5nIHRocm91Z2ggcG90ZW50aWFsIGltcGxlbWVudGF0aW9ucy4gSXMgdGhpcyBhcHBseWluZyBhIGNhbGlicmF0aW9uIGN1cnZlPyBGaWx0ZXJpbmc/IERhdGEgY2xlYW5pbmc/IFBlcmhhcHMgaXQmIzM5O3MgYSBtb3JlIGNvbXBsZXggcHJvY2VkdXJlIGludm9sdmluZyB1bml0IGNvbnZlcnNpb25zIG9yIGFwcGx5aW5nIGEgc3BlY2lmaWMgZm9ybXVsYSB0byBhY2hpZXZlIGEgZmluYWwgcmVzdWx0PyBUaGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaXMgYSBsaXR0bGUgZ2VuZXJpYzsgdG8gdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24gSSB3b3VsZCBuZWVkIGNvbnRleHQuIEFyZSB0aGVyZSB1cHN0cmVhbSBkZXBlbmRlbmNpZXM/IFdoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIGlucHV0IGZvcm1hdCAodGhlICYjMzk7ZGFtb3MmIzM5OyBwYXJ0IGxpa2VseSBzdWdnZXN0cyBhIHNwZWNpZmljIGludGVybmFsIGRhdGEgc3RydWN0dXJlLCBsaWtlIGEgc3RydWN0dXJlZCBldmVudCB3aXRoIHZhcmlvdXMgcGFyYW1ldGVycyBhbmQgbWV0YWRhdGEpPyBJcyBpdCB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgYGRhbW9zXypgIGZ1bmN0aW9ucz8KClRoZSAmIzM0O3RhcmdldCYjMzQ7IGlzIGtleS4gSXMgaXQgYSBzaW5nbGUgY2hhbm5lbCwgb3IgYSBzZWxlY3Rpb24gb2YgY2hhbm5lbHMgKGUuZy4sIGFsbCB0ZW1wZXJhdHVyZSBzZW5zb3JzLCBidXQgbm90IHRoZSBwcmVzc3VyZSBzZW5zb3JzKT8gRG9lcyB0aGUgdGVybSAmIzM0O3RhcmdldCYjMzQ7IGhhdmUgYSBzcGF0aWFsIGNvbXBvbmVudCwgYSB0ZW1wb3JhbCBjb21wb25lbnQgb3IgYm90aD8gSXMgdGhlcmUgYSB0YXJnZXQgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBkYXRhPyBJcyBpdCBhIGxvb2t1cCBvciBjb25maWd1cmF0aW9uIGZpbGU/IFdoYXQgaXMgdGhlIGZ1bmN0aW9uJiMzOTtzIHNjb3BlOiBkb2VzIGl0IG1ha2UgZGlyZWN0IGNoYW5nZXMgdG8gdGhlIHJhdyBkYXRhLCBvciBkb2VzIGl0IG9wZXJhdGUgb24gYSBjb3B5PyBIb3cgZG9lcyBpdCBoYW5kbGUgZXJyb3JzIG9yIG1pc3NpbmcgZGF0YSBwb2ludHM/IEFuZCwgY3J1Y2lhbGx5LCBob3cgaXMgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGVkIGludG8gdGhlIHdpZGVyIERBTU9TIHN5c3RlbS4gVGhpcyBjb3VsZCByYW5nZSBmcm9tIGl0IGJlaW5nIGEgY29yZSBpbnRlcm5hbCBjb21wb25lbnQsIHRvIGEgcGx1Z2luLCBvciBldmVuIGEgcmVtb3RlIHNlcnZpY2UuCgpJJiMzOTtkIG5lZWQgdG8gZXhhbWluZSBpdHMgY29kZSBvciBkb2N1bWVudGF0aW9uIHRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIGZ1bGwgc2lnbmlmaWNhbmNlLiBCdXQgYmFzZWQgc29sZWx5IG9uIHRoZSBuYW1lLCBteSBtaW5kIGlzIGFscmVhZHkgcmFjaW5nIHRocm91Z2ggcG90ZW50aWFsIHNjZW5hcmlvcyBhbmQgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSXQgaGFzIHRoZSBzbWVsbCBvZiBhbiBvcHRpbWl6YXRpb24gc3RlcCwgb3IgYSBzdGVwIHdpdGhpbiBhIHBpcGVsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjgwODpcdHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuMjgwOTpcdFx0XHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3opXG4yODEwOlx0e1xuMjgxMTpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbjI4MTI6XHRcbjI4MTM6XHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XG4yODE0Olx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnByZXZfcjtcbjI4MTU6XHRcbjI4MTY6XHRcdFx0ZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhjLCB0LCByKTtcbjI4MTc6XHRcdFx0LypcbjI4MTg6XHRcdFx0ICogZGFtb25fZG9fYXBwbHlfc2NoZWVtcygpIGNvdWxkIHNwbGl0IHRoZSByZWdpb24gZm9yIHRoZVxuMjgxOTpcdFx0XHQgKiBxdW90YS4gIEtlZXBpbmcgdGhlIG5ldyBzbGljZXMgaXMgYW4gb3ZlcmhlYWQuICBNZXJnZSBiYWNrXG4yODIwOlx0XHRcdCAqIHRoZSBzbGljZXMgaW50byB0aGUgcHJldmlvdXMgcmVnaW9uIGlmIGl0IGRvZXNuJiMzOTt0IGxvc2UgYW55XG4yODIxOlx0XHRcdCAqIGluZm9ybWF0aW9uIGFuZCBub3QgdmlvbGF0aW5nIHRoZSBtYXhfcmVnaW9uX3N6LlxuMjgyMjpcdFx0XHQgKi9cbjI4MjM6XHRcdFx0aWYgKGRhbW9uX2ZpcnN0X3JlZ2lvbih0KSA9PSByKVxuMjgyNDpcdFx0XHRcdGNvbnRpbnVlO1xuMjgyNTpcdFx0XHRwcmV2X3IgPSBkYW1vbl9wcmV2X3JlZ2lvbihyKTtcbjI4MjY6XHRcdFx0aWYgKHByZXZfci1cdTAwM2Vhci5lbmQgIT0gci1cdTAwM2Vhci5zdGFydClcbjI4Mjc6XHRcdFx0XHRjb250aW51ZTtcbjI4Mjg6XHRcdFx0aWYgKHByZXZfci1cdTAwM2VhZ2UgIT0gci1cdTAwM2VhZ2UpXG4yODI5Olx0XHRcdFx0Y29udGludWU7XG4yODMwOlx0XHRcdGlmIChwcmV2X3ItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyAhPSByLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMpXG4yODMxOlx0XHRcdFx0Y29udGludWU7XG4yODMyOlx0XHRcdGlmIChwcmV2X3ItXHUwMDNlbnJfYWNjZXNzZXMgIT0gci1cdTAwM2Vucl9hY2Nlc3NlcylcbjI4MzM6XHRcdFx0XHRjb250aW51ZTtcbjI4MzQ6XHRcdFx0aWYgKHItXHUwMDNlYXIuZW5kIC0gcHJldl9yLVx1MDAzZWFyLnN0YXJ0IFx1MDAzZSBtYXhfcmVnaW9uX3N6KVxuMjgzNTpcdFx0XHRcdGNvbnRpbnVlO1xuMjgzNjpcdFx0XHRwcmV2X3ItXHUwMDNlYXIuZW5kID0gci1cdTAwM2Vhci5lbmQ7XG4yODM3Olx0XHRcdGRhbW9uX2Rlc3Ryb3lfcmVnaW9uKHIsIHQpO1xuMjgzODpcdFx0XHRyID0gcHJldl9yO1xuMjgzOTpcdFx0fVxuMjg0MDpcdH1cbjI4NDE6XHRcbjI4NDI6XHQvKlxuMjg0MzpcdCAqIGRhbW9uX2ZlZWRfbG9vcF9uZXh0X2lucHV0KCkgLSBnZXQgbmV4dCBpbnB1dCB0byBhY2hpZXZlIGEgdGFyZ2V0IHNjb3JlLlxuMjg0NDpcdCAqIEBsYXN0X2lucHV0XHRUaGUgbGFzdCBpbnB1dC5cbjI4NDU6XHQgKiBAc2NvcmVcdEN1cnJlbnQgc2NvcmUgdGhhdCBtYWRlIHdpdGggQGxhc3RfaW5wdXQuXG4yODQ2Olx0ICpcbjI4NDc6XHQgKiBDYWxjdWxhdGUgbmV4dCBpbnB1dCB0byBhY2hpZXZlIHRoZSB0YXJnZXQgc2NvcmUsIGJhc2VkIG9uIHRoZSBsYXN0IGlucHV0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTY5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBmdW5jdGlvbiwgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoYywgdCwgcilgLiBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzLCBzbyB0aGlzIGlzIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiBjYWxsLiBCYXNlZCBvbiB0aGUgbmFtZSBhbmQgdGhlIHBhcmFtZXRlcnMsIG15IGZpcnN0IGd1ZXNzIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiwgbGlrZWx5IG5hbWVkIGFmdGVyIHNvbWVvbmUgb3Igc29tZXRoaW5nLCBpcyBkZXNpZ25lZCB0byBhcHBseSBhIHNldCBvZiAmIzM0O3NjaGVtZXMmIzM0OyB0byBzb21lIGtpbmQgb2YgZGF0YSBvciBjb250ZXh0LiBUaGUgcGFyYW1ldGVycyBgY2AsIGB0YCwgYW5kIGByYCBhcmUgdGhlIGtleS4KCiogICBgY2AgaXMgcHJvYmFibHkgdGhlICpjb250ZXh0Ki4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGEgZ2VuZXJhbCBjb25maWd1cmF0aW9uIG9iamVjdCwgYSBkYXRhIHN0cnVjdHVyZSBob2xkaW5nIHRoZSBjdXJyZW50IHN0YXRlLCBvciB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlc2UgJiMzNDtzY2hlbWVzJiMzNDsgYXJlIGJlaW5nIGFwcGxpZWQuIEl0JiMzOTtzIHRoZSAmIzM0O3doZXJlJiMzNDsgYW5kICYjMzQ7aG93JiMzNDsgb2YgdGhlIG9wZXJhdGlvbnMuCgoqICAgYHRgIGlzIGxpa2VseSB0aGUgKnRhcmdldCouIFdoYXQgYXJlIHdlIGFwcGx5aW5nIHRoZXNlIHNjaGVtZXMgKnRvKj8gSXMgaXQgYSBkYXRhIHN0cnVjdHVyZT8gQSBzcGVjaWZpYyBlbGVtZW50IHdpdGhpbiBhIGxhcmdlciBvYmplY3Q/IEEgc2V0IG9mIHJ1bGVzPyBUaGlzIGlzIHRoZSAmIzM0O3doYXQmIzM0OyB0aGF0IHdlJiMzOTtyZSBhY3RpbmcgdXBvbi4KCiogICBgcmAuLi5obW0sIGByYCBpcyB0aGUgb25lIHRoYXQmIzM5O3MgYSBiaXQgbW9yZSBuZWJ1bG91cyBhdCBmaXJzdCBnbGFuY2UuIEl0IGNvdWxkIGJlICpydWxlcyosICpyZXN1bHRzKiwgb3IgZXZlbiBhICpyZXF1ZXN0KiB0aGF0IGRpY3RhdGVzIGhvdyB0aGUgc2NoZW1lcyBhcmUgYXBwbGllZCB0byB0aGUgdGFyZ2V0IGJhc2VkIG9uIHRoZSBjb250ZXh0LiBNYXliZSBpdCBob2xkcyBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgb3IgdGhlIHBhcmFtZXRlcnMgZm9yIGFwcGxpY2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uJiMzOTtzIGludGVybmFsIGxvZ2ljIHRvIGJlIHN1cmUsIGJ1dCBteSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQmIzM5O3MgYSBndWlkZSB0byB0aGUgb3BlcmF0aW9uLgoKU28sIHRoZSBmdW5jdGlvbiYjMzk7cyBvYmplY3RpdmUgaXMgdG8gYWRhcHQgdGhlIHRhcmdldCAoYHRgKSBiYXNlZCBvbiB0aGUgcnVsZS1zZXQgb3IgcmVxdWVzdCAoYHJgKSBhbmQgdGhlIHRhcmdldCYjMzk7cyBjdXJyZW50IHNpdHVhdGlvbiB3aGljaCBpcyB0aGUgY29udGV4dCAoYGNgKS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgZWFjaCBvZiB0aGUgcGFyYW1ldGVycyB0byBhcHBseSB0aGUgZnVuY3Rpb24gdG8gYW55IGNvbnRleHQuCgpVbHRpbWF0ZWx5LCB0byByZWFsbHkgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBmdW5jdGlvbiYjMzk7cyBpbXBsZW1lbnRhdGlvbi4gV2hhdCBhcmUgdGhlc2UgJiMzNDtzY2hlbWVzJiMzNDs/IFdoYXQgZG8gdGhleSAqZG8qPyBIb3cgaXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYGNgLCBgdGAsIGFuZCBgcmAgaGFuZGxlZD8gSXMgaXQgYSBjb21wb3NpdGlvbiBvZiBkaWZmZXJlbnQgc2NoZW1lcyBvciBzb21lIHNvcnQgb2YgY3VzdG9tIHByb2Nlc3Npbmc/IEkmIzM5O2xsIHByb2JhYmx5IGxvb2sgZm9yIGFueSBjYWxscyB0byBzY2hlbWUgYXBwbHlpbmcgZnVuY3Rpb24gaW4gdGhlIHRhcmdldCB0aGF0IHRha2UgdGhlIHBhcmFtZXRlcnMgYGNgLCBgdGAsIGFuZCBgcmAgdG8gaGF2ZSBtb3JlIGNsYXJpdHkuIE9uY2UgSSBrbm93IHRoZSBzcGVjaWZpY3MsIEkmIzM5O2xsIGJlIGFibGUgdG8gcHJvcGVybHkgZXZhbHVhdGUgaXRzIHBlcmZvcm1hbmNlLCBkZWJ1ZyBhbnkgaXNzdWVzLCBhbmQgc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc1NTpcdFxuMjc1NjpcdHN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbjI3NTc6XHRcdFx0XHRcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4yNzU4Olx0XHRcdFx0XHQgICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuMjc1OTpcdHtcbjI3NjA6XHRcdHN0cnVjdCBkYW1vcyAqcztcbjI3NjE6XHRcbjI3NjI6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4yNzYzOlx0XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuMjc2NDpcdFxuMjc2NTpcdFx0XHRpZiAodGltZV9iZWZvcmUoYy1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cdTAwM2VuZXh0X2FwcGx5X3NpcykpXG4yNzY2Olx0XHRcdFx0Y29udGludWU7XG4yNzY3Olx0XG4yNzY4Olx0XHRcdGlmICghcy1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuMjc2OTpcdFx0XHRcdGNvbnRpbnVlO1xuMjc3MDpcdFxuMjc3MTpcdFx0XHQvKiBDaGVjayB0aGUgcXVvdGEgKi9cbjI3NzI6XHRcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4yNzczOlx0XHRcdFx0Y29udGludWU7XG4yNzc0Olx0XG4yNzc1Olx0XHRcdGlmIChkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHQsIHIsIHMsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4yNzc2Olx0XHRcdFx0Y29udGludWU7XG4yNzc3Olx0XG4yNzc4Olx0XHRcdGlmIChzLVx1MDAzZW1heF9ucl9zbmFwc2hvdHMgXHUwMDI2XHUwMDI2XG4yNzc5Olx0XHRcdFx0XHRzLVx1MDAzZW1heF9ucl9zbmFwc2hvdHMgXHUwMDNjPSBzLVx1MDAzZXN0YXQubnJfc25hcHNob3RzKVxuMjc4MDpcdFx0XHRcdGNvbnRpbnVlO1xuMjc4MTpcdFxuMjc4MjpcdFx0XHRpZiAoZGFtb3NfdmFsaWRfdGFyZ2V0KGMsIHIsIHMpKVxuMjc4MzpcdFx0XHRcdGRhbW9zX2FwcGx5X3NjaGVtZShjLCB0LCByLCBzKTtcbjI3ODQ6XHRcbjI3ODU6XHRcdFx0aWYgKGRhbW9uX2lzX2xhc3RfcmVnaW9uKHIsIHQpKVxuMjc4NjpcdFx0XHRcdHMtXHUwMDNlc3RhdC5ucl9zbmFwc2hvdHMmIzQzOyYjNDM7O1xuMjc4NzpcdFx0fVxuMjc4ODpcdH1cbjI3ODk6XHRcbjI3OTA6XHQvKlxuMjc5MTpcdCAqIGRhbW9zX2FwcGx5X3RhcmdldCgpIC0gQXBwbHkgREFNT1Mgc2NoZW1lcyB0byBhIGdpdmVuIHRhcmdldC5cbjI3OTI6XHQgKiBAYzpcdFx0XHRtb25pdG9yaW5nIGNvbnRleHQgdG8gYXBwbHkgaXRzIERBTU9TIHNjaGVtZXMgdG8uLlxuMjc5MzpcdCAqIEB0Olx0XHRcdG1vbml0b3JpbmcgdGFyZ2V0IHRvIGFwcGx5IHRoZSBzY2hlbWVzIHRvLlxuMjc5NDpcdCAqIEBtYXhfcmVnaW9uX3N6Olx0bWF4aW11bSByZWdpb24gc2l6ZSBmb3IgQGMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNzgxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQW5hbHlzaXMgb2YgREFNT04gUXVvdGEgT3B0aW1pemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGluIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvcikgc3Vic3lzdGVtIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGludm9sdmVzIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBhc3Nlc3NpbmcgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4KCkZpcnN0LCBJIGV4YW1pbmUgdGhlIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGZ1bmN0aW9uLiBUaGUga2V5IGlzIHRoaXMgY2hlY2s6IGBpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy0mZ3Q7bWluX3JlZ2lvbl9zeikpIGNvbnRpbnVlO2AuIFRoZW4gSSBkZWx2ZSBpbnRvIGBkYW1vc19xdW90YV9pc19mdWxsYCBhbmQgc2VlIHRoYXQgaWYgYHF1b3RhLSZndDtlc3pgICh0aGUgcXVvdGEmIzM5O3MgZWZmZWN0aXZlIHNpemUpIGlzIHplcm8sIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSByZXR1cm5zIGB0cnVlYCwgaW5kaWNhdGluZyB0aGUgcXVvdGEgaXMgY29uc2lkZXJlZCBmdWxsLiBUaGlzIGlzIGR1ZSB0byBhIGNvbXBhcmlzb24gaW52b2x2aW5nIGBxdW90YS0mZ3Q7Y2hhcmdlZF9zeiAmZ3Q7PSBxdW90YS0mZ3Q7ZXN6YCB3aGljaCB3aWxsIHJldHVybiB0cnVlIHNpbmNlIGBxdW90YS0mZ3Q7Y2hhcmdlZF9zemAgaXMgJmd0Oz0gMC4KClRoZSBpbXBvcnRhbnQgcG9pbnQgaXMgdGhhdCBpZiBgcXVvdGEtJmd0O2VzemAgaXMgMCwgdGhlIERBTU9OIHNjaGVtZSBhcHBsaWNhdGlvbiBsb2dpYyBiZWNvbWVzIGEgbm8tb3AgZHVlIHRvIGEgcXVvdGEgYmVpbmcgJiMzNDtmdWxsJiMzNDsgYmFzZWQgb24gaXRzIGVmZmVjdGl2ZSBzaXplLCByZXR1cm5pbmcgZWFybHkgaW4gYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuCgpUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBieSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gIFdpdGhvdXQgdGhlIHBhdGNoLCB0aGlzIGZ1bmN0aW9uIHdhcyBwZXJmb3JtaW5nIGEgYnVuY2ggb2YgdW5uZWNlc3Nhcnkgd29yayB3aGVuIGBxdW90YS0mZ3Q7ZXN6YCBpcyAwLiBTcGVjaWZpY2FsbHksIGl0IHdhcyBhbGxvY2F0aW5nIGFuZCB6ZXJvaW5nIGEgaGlzdG9ncmFtLCBpdGVyYXRpbmcgdGhyb3VnaCByZWdpb25zLCBjYWxsaW5nIGBnZXRfc2NoZW1lX3Njb3JlKClgLCBjYWxjdWxhdGluZyBhIHNjb3JlIGhpc3RvZ3JhbSwgYW5kIGRldGVybWluaW5nIGEgbWluaW11bSBzY29yZS4gQWxsIHRoaXMgd2FzIHdhc3RlZCBiZWNhdXNlIHRoZSBxdW90YSB3YXMgZWZmZWN0aXZlbHkgZnVsbCAoZXN6ID09IDApIGFuZCBubyBzY2hlbWVzIGNvdWxkIGJlIGFwcGxpZWQuCgpUaGlzIHBhdGNoIGFkZHMgdHdvIGNoZWNrcyB0byBza2lwIHRoYXQgd29yayBpZiBgcXVvdGEtJmd0O2VzeiA9PSAwYCBvciBpZiBgYy0mZ3Q7b3BzLmdldF9zY2hlbWVfc2NvcmVgIGRvZXMgbm90IGV4aXN0OgpgYGBjCglpZiAoIWMtJmd0O29wcy5nZXRfc2NoZW1lX3Njb3JlKQoJCXJldHVybjsKCWlmIChxdW90YS0mZ3Q7ZXN6ID09IDApCgkJcmV0dXJuOwpgYGAKCk5vdywgYXMgYSBzZWFzb25lZCBrZXJuZWwgZXhwZXJ0LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcuIFRoaXMgaXMgd2hlcmUgbXkgZXhwZXJ0aXNlIGNvbWVzIGludG8gcGxheToKCjEuICAqKlJlYWNoYWJsZSBDb2RlOioqIERBTU9OIGlzIHBhcnQgb2YgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtbS8pLCB3aGljaCBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4gSXQmIzM5O3MgZW5hYmxlZCB0aHJvdWdoIHNldmVyYWwga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU3l6a2FsbGVyIGNhbiBpbnRlcmFjdCB3aXRoIERBTU9OIHZpYSBzeXNmcyBmaWxlcywgc3BlY2lmaWNhbGx5IHVuZGVyIGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi8uLi5gLiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBjb2RlIGlzICpkaXJlY3RseSogZXhwb3NlZCBhbmQgZnV6emFibGUuCjIuICAqKkltcGFjdCBvbiBDb250cm9sIEZsb3c6KiogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb250cm9sIGZsb3cgd2l0aGluIGBkYW1vc19hZGp1c3RfcXVvdGEoKWAsIHdoaWNoIGlzIGNhbGxlZCBieSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gVGhpcyBpcyBub3QgYSB0cml2aWFsIGNoYW5nZTsgaXQmIzM5O3MgYWx0ZXJpbmcgdGhlIGxvZ2ljJiMzOTtzIGV4ZWN1dGlvbiBwYXRoLiAgSXQgaXMgYSBjb3JlIE1NIGZlYXR1cmUgaW4gbW0vZGFtb24vLgozLiAgKipQb3NpdGl2ZSBDcml0ZXJpYToqKiAgVGhpcyBkaXJlY3RseSBoaXRzIGEgJiMzNDtwb3NpdGl2ZSYjMzQ7IGNyaXRlcmlhOiBtb2RpZmljYXRpb24gb2YgbG9naWMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKGBtbS9gKSBjb2RlLgoKNC4gKipOZWdhdGl2ZSBDcml0ZXJpYToqKiBObyBuZWdhdGl2ZSBjcml0ZXJpYSBhcHBseSAobm8gZG9jcywgbm8gdW5yZWFjaGFibGUgaGFyZHdhcmUsIGV0Yy4pLgoKU2luY2UgdGhpcyBpcyBleGVjdXRhYmxlIGtlcm5lbCBjb2RlIGluIGBtbS9kYW1vbi9jb3JlLmNgIGFuZCBpcyByZWFjaGFibGUsIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCkkgbm93IG5lZWQgdG8gaWRlbnRpZnkgd2hhdCBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkOgoqICAgYGRhbW9zX2FkanVzdF9xdW90YWAgaXMgdGhlIG1haW4gdGFyZ2V0LCB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljIGFuZCBwb3RlbnRpYWxseSBpbmxpbmVkICh3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCBpbmxpbmluZykuCiogICBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBpcyB0aGUgY2FsbGVyIG9mIGBkYW1vc19hZGp1c3RfcXVvdGFgLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBrZGFtb25kX2ZuYC4KKiAgIExldCYjMzk7cyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHN5c2ZzIGVudHJ5IHBvaW50cyBvciBwdWJsaWMgREFNT04gQVBJcyB0aGF0IG1pZ2h0IGJlIGVudHJ5IHBvaW50cy4gSSBzaG91bGQgbG9vayBpbnRvIGBtbS9kYW1vbi9zeXNmcy5jYCBhbmQgc2VhcmNoIGZvciBzeXNmcyB3cml0ZSBoYW5kbGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3lzZnNfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtY29tbW9uLmM9OTk9Y29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc191bF9yYW5nZV9rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwMC1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfdWxfcmFuZ2VfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwMTpcdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwMi1cdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3VsX3JhbmdlX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTc9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfcHJvYmVfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTgtXHQucmVsZWFzZSA9IGRhbW9zX3N5c2ZzX3Byb2JlX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTk6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjAtXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vc19zeXNmc19wcm9iZV9ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE0MT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vc19zeXNmc19wcm9iZXNfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyLVx0LnJlbGVhc2UgPSBkYW1vc19zeXNmc19wcm9iZXNfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDM6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ0LX07XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OC1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4OTpcdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTAtXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzU2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM1Ny1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTg6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzU5LVx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfZ3JvdXBzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz01MTA9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc3RhdHNfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTExLVx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zdGF0c19yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUxMjpcdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MTMtXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19zdGF0c19ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTg4Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTg4My1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjg4NDpcdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy04ODUtXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTAxMD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyc19rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDExLVx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyc19yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEwMTI6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTAxMy1cdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJzX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIwNT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc193YXRlcm1hcmtzX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMDYtXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3dhdGVybWFya3NfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjA3Olx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMDgtXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc193YXRlcm1hcmtzX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQ0ND1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NDUtXHQucmVsZWFzZSA9IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDQ2Olx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NDctXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTU2ND1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTY1LVx0LnJlbGVhc2UgPSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NjY6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU2Ny1cdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTY3ND1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc193ZWlnaHRzX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2NzUtXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3dlaWdodHNfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNjc2Olx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2NzctXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc193ZWlnaHRzX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTk0OT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19xdW90YXNfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk1MC1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfcXVvdGFzX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTk1MTpcdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTUyLVx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfcXVvdGFzX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjA0ND1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19hY2Nlc3NfcGF0dGVybl9rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMDQ1LVx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19hY2Nlc3NfcGF0dGVybl9yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIwNDY6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjA0Ny1cdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX2FjY2Vzc19wYXR0ZXJuX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjEyMz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vc19zeXNmc19kZXN0X2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIxMjQtXHQucmVsZWFzZSA9IGRhbW9zX3N5c2ZzX2Rlc3RfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMTI1Olx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIxMjYtXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vc19zeXNmc19kZXN0X2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjI0ND1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vc19zeXNmc19kZXN0c19rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMjQ1LVx0LnJlbGVhc2UgPSBkYW1vc19zeXNmc19kZXN0c19yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIyNDY6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjI0Ny1cdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9zX3N5c2ZzX2Rlc3RzX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjY3ND1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY3NS1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjY3NjpcdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjc3LVx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfc2NoZW1lX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjc5OD1jb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZXNfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjc5OS1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lc19yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4MDA6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjgwMS1cdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3NjaGVtZXNfZ3JvdXBzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9ODE9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcmVnaW9uX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMuYy04Mi1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfcmVnaW9uX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy5jOjgzOlx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMuYy04NC1cdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3JlZ2lvbl9ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMDA9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcmVnaW9uc19rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjAxLVx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19yZWdpb25zX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy5jOjIwMjpcdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLmMtMjAzLVx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfcmVnaW9uc19ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYz0zMDc9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfdGFyZ2V0X2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMuYy0zMDgtXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3RhcmdldF9yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMuYzozMDk6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy5jLTMxMC1cdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3RhcmdldF9ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYz00MzU9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfdGFyZ2V0c19rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLmMtNDM2LVx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc190YXJnZXRzX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy5jOjQzNzpcdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLmMtNDM4LVx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfdGFyZ2V0c19ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYz01OTI9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dvYWxfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy5jLTU5My1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dvYWxfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLmM6NTk0Olx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMuYy01OTUtXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfZ29hbF9ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYz03NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMuYy03NDctXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX2ludGVydmFsc19yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMuYzo3NDg6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy5jLTc0OS1cdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX2ludGVydmFsc19ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYz04NDM9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcHJlcF9rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLmMtODQ0LVx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19wcmVwX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy5jOjg0NTpcdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLmMtODQ2LVx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfcHJlcF9ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYz05NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcHJlcHNfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy5jLTk2My1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfcHJlcHNfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLmM6OTY0Olx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMuYy05NjUtXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19wcmVwc19ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYz0xMTYwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2ZpbHRlcl9rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTE2MS1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfZmlsdGVyX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy5jOjExNjI6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy5jLTExNjMtXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19maWx0ZXJfZ3JvdXBzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTI3OT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19maWx0ZXJzX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMuYy0xMjgwLVx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19maWx0ZXJzX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy5jOjEyODE6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy5jLTEyODItXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19maWx0ZXJzX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTEzODY9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcHJvYmVfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy5jLTEzODctXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3Byb2JlX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy5jOjEzODg6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy5jLTEzODktXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19wcm9iZV9ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYz0xNTE1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3Byb2Jlc19rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTUxNi1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfcHJvYmVzX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy5jOjE1MTc6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy5jLTE1MTgtXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19wcm9iZXNfZ3JvdXBzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTYyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19hdHRyc19rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTYyMi1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfYXR0cnNfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLmM6MTYyMzpcdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLmMtMTYyNC1cdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX2F0dHJzX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE2MzAtXG5tbS9kYW1vbi9zeXNmcy5jOjE2MzE6c3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTYzMi1cdGVudW0gZGFtb25fb3BzX2lkIG9wc19pZDtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE2MzUtXG5tbS9kYW1vbi9zeXNmcy5jOjE2MzY6c3RhdGljIGNvbnN0IHN0cnVjdCBkYW1vbl9zeXNmc19vcHNfbmFtZSBkYW1vbl9zeXNmc19vcHNfbmFtZXNbXSA9IHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTYzNy1cdHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE3Njg9c3RhdGljIHNzaXplX3QgYXZhaWxfb3BlcmF0aW9uc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTc3My1cbm1tL2RhbW9uL3N5c2ZzLmM6MTc3NDpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZGFtb25fc3lzZnNfb3BzX25hbWVzKTsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL3N5c2ZzLmM6MTc3NTpcdFx0Y29uc3Qgc3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lICpvcHNfbmFtZTtcbm1tL2RhbW9uL3N5c2ZzLmMtMTc3Ni1cbm1tL2RhbW9uL3N5c2ZzLmM6MTc3NzpcdFx0b3BzX25hbWUgPSBcdTAwMjZkYW1vbl9zeXNmc19vcHNfbmFtZXNbaV07XG5tbS9kYW1vbi9zeXNmcy5jLTE3NzgtXHRcdGlmICghZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMob3BzX25hbWUtXHUwMDNlb3BzX2lkKSlcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE3ODU9c3RhdGljIHNzaXplX3Qgb3BlcmF0aW9uc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTc5MS1cbm1tL2RhbW9uL3N5c2ZzLmM6MTc5MjpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZGFtb25fc3lzZnNfb3BzX25hbWVzKTsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL3N5c2ZzLmM6MTc5MzpcdFx0Y29uc3Qgc3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lICpvcHNfbmFtZTtcbm1tL2RhbW9uL3N5c2ZzLmMtMTc5NC1cbm1tL2RhbW9uL3N5c2ZzLmM6MTc5NTpcdFx0b3BzX25hbWUgPSBcdTAwMjZkYW1vbl9zeXNmc19vcHNfbmFtZXNbaV07XG5tbS9kYW1vbi9zeXNmcy5jLTE3OTYtXHRcdGlmIChvcHNfbmFtZS1cdTAwM2VvcHNfaWQgPT0gY29udGV4dC1cdTAwM2VvcHNfaWQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0xODAyPXN0YXRpYyBzc2l6ZV90IG9wZXJhdGlvbnNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMuYy0xODA4LVxubW0vZGFtb24vc3lzZnMuYzoxODA5Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShkYW1vbl9zeXNmc19vcHNfbmFtZXMpOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vc3lzZnMuYzoxODEwOlx0XHRjb25zdCBzdHJ1Y3QgZGFtb25fc3lzZnNfb3BzX25hbWUgKm9wc19uYW1lO1xubW0vZGFtb24vc3lzZnMuYy0xODExLVxubW0vZGFtb24vc3lzZnMuYzoxODEyOlx0XHRvcHNfbmFtZSA9IFx1MDAyNmRhbW9uX3N5c2ZzX29wc19uYW1lc1tpXTtcbm1tL2RhbW9uL3N5c2ZzLmMtMTgxMy1cdFx0aWYgKHN5c2ZzX3N0cmVxKGJ1Ziwgb3BzX25hbWUtXHUwMDNlbmFtZSkpIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE4OTc9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfY29udGV4dF9rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTg5OC1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfY29udGV4dF9yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMuYzoxODk5Olx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMuYy0xOTAwLVx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfY29udGV4dF9ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMDI2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2NvbnRleHRzX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMuYy0yMDI3LVx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19jb250ZXh0c19yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMuYzoyMDI4Olx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMuYy0yMDI5LVx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfY29udGV4dHNfZ3JvdXBzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9Mjc3MT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19rZGFtb25kX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMuYy0yNzcyLVx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19rZGFtb25kX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy5jOjI3NzM6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy5jLTI3NzQtXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19rZGFtb25kX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI5MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfa2RhbW9uZHNfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy5jLTI5MTctXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX2tkYW1vbmRzX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy5jOjI5MTg6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy5jLTI5MTktXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19rZGFtb25kc19ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yOTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3VpX2Rpcl9rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjk2Ny1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfdWlfZGlyX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy5jOjI5Njg6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy5jLTI5NjktXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc191aV9kaXJfZ3JvdXBzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTUwMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBLZXJuZWwgQ29kZSoqCgpPa2F5LCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoaWNoIERBTU9OIGZ1bmN0aW9uIGlzIHRoZSBrZXkgb25lIHRvIGZvY3VzIG9uIGhlcmUsIHRoZSBvbmUgdGhhdCYjMzk7cyB0aGUgbW9zdCByZWxldmFudCB0byB0aGlzIHBhcnRpY3VsYXIgaXNzdWUuIEkmIzM5O3ZlIGdvdCBhIGZldyBjYW5kaWRhdGVzIGJvdW5jaW5nIGFyb3VuZDogYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AsIHRoYXQgYGRhbW9zX2FkanVzdF9xdW90YWAgZnVuY3Rpb24sIG1heWJlIGBkYW1vbl9zeXNmc19jbWRfcmVxdWVzdGAsIG9yIGlzIGl0IHRoYXQgYGRhbW9uX3N5c2ZzX3N0YXRlX3N0b3JlYCBmdW5jdGlvbj8gSSBzdXNwZWN0IGl04oCZcyBnb2luZyB0byBpbnZvbHZlIHN5c2ZzIGludGVyYWN0aW9uLCBnaXZlbiB0aGUgb3B0aW9ucy4KCk15IGluc3RpbmN0IGlzIGxlYW5pbmcgdG93YXJkcyB0aGF0IGBzdGF0ZV9zdG9yZWAgZnVuY3Rpb24sIHBhcnRpY3VsYXJseSBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIFRpbWUgdG8gY2hlY2sgdGhlIHNvdXJjZSBjb2RlLiBMZXQgbWUganVtcCBpbnRvIGBtbS9kYW1vbi9zeXNmcy5jYCBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiBgc3RhdGVfc3RvcmVgLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzdGF0ZSBjaGFuZ2VzIGFyZSBoYW5kbGVkLCBhbmQgd2hhdCB0aGF0IHBhcnQgb2YgdGhlIGtlcm5lbCBkb2VzLiBIb3BlZnVsbHksIHRoZSBpbXBsZW1lbnRhdGlvbiB0aGVyZSB3aWxsIGJlIGRlc2NyaXB0aXZlIGVub3VnaCB0byBjbGFyaWZ5IHRoZSBleGFjdCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0ZV9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYz0yNjM2PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yNjc1LVxubW0vZGFtb24vc3lzZnMuYzoyNjc2OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG5tbS9kYW1vbi9zeXNmcy5jLTI2NzctXHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTk1NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoJiMzOTtzIEltcGFjdCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyBpdHMgcG90ZW50aWFsIGVmZmVjdHMuIEZpcnN0LCBgc3RhdGVfc3RvcmVgIOKAkyB0aGF0JiMzOTtzIHRoZSBjcnVjaWFsIHN5c2ZzIHdyaXRlIGhhbmRsZXIuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IGZvciBzdGFydGluZywgc3RvcHBpbmcsIG9yIGNvbW1pdHRpbmcgdGhlIGtkYW1vbmRzLCB0aGUgY29yZSBvZiB0aGUgREFNT04gZnVuY3Rpb25hbGl0eSwgdXNpbmcga2V5d29yZHMgbGlrZSAmIzM0O29uJiMzNDssICYjMzQ7b2ZmJiMzNDssIGFuZCAmIzM0O2NvbW1pdCYjMzQ7LgoKTm93LCB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgYWN0dWFsbHkgbW9kaWZpZWQgaW4gdGhpcyBwYXRjaCBpcyBgZGFtb3NfYWRqdXN0X3F1b3RhYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIExldCYjMzk7cyBjb25maXJtIGlmIGBkYW1vc19hZGp1c3RfcXVvdGFgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYyB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuIFllcywgaXQgaXM6IGBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKWAuIFRoZSBuZXh0IGtleSBjb25uZWN0aW9uIEkmIzM5O20gc2Vla2luZyBpcyBob3cgYGRhbW9zX2FkanVzdF9xdW90YWAgaXMgY2FsbGVkLiBBaCwgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgY2FsbHMgYGRhbW9zX2FkanVzdF9xdW90YShjLCBzKWAuIFRoaXMgY2xlYXJseSBkZW1vbnN0cmF0ZXMgaG93IHRoZSB0d28gcGllY2VzIGFyZSByZWxhdGVkLgoKU28sIGxldCYjMzk7cyBleHBsb3JlIGBrZGFtb25kX2ZuYCBub3cuIExldCYjMzk7cyBzZWUgaG93IGBrZGFtb25kX2ZuYCBpcyBzdGFydGVkOiBgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpYC4gSSBuZWVkIHRvIHNlZSBob3cgaXQmIzM5O3MgaW5pdGlhdGVkLCByaWdodD8gTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBgZGFtb25fc3RhcnRgIGtpY2tzIGl0IG9mZiEgTGV0JiMzOTtzIGV4YW1pbmUgYGRhbW9uX3N0YXJ0YCB0byB1bmRlcnN0YW5kIHRoZSBrZGFtb25kIGV4ZWN1dGlvbiBmbG93IGFuZCBob3cgdGhlIGNoYW5nZXMgdG8gYGRhbW9zX2FkanVzdF9xdW90YWAgd2lsbCBiZSB1dGlsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTA4Mz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTA4LSAqIEluIGRldGFpbCwgYWxsIERBTU9OIEFQSSBjYWxsZXJzIGRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiBmb3IgaW5pdGlhbFxubW0vZGFtb24vY29yZS5jOjExMDk6ICogc2V0dXAgb2YgZGFtb25fY3R4IGJlZm9yZSBjYWxsaW5nIGRhbW9uX3N0YXJ0KCkuICBTb21lIG9mIHRoZSBBUEkgY2FsbGVyc1xubW0vZGFtb24vY29yZS5jLTExMTAtICogYWxzbyBpbmRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiB2aWEgZGFtb25fY2FsbCgpIC1cdTAwM2UgZGFtb25fY29tbWl0KCkgZm9yXG4tLVxubW0vZGFtb24vY29yZS5jPTIwMzk9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDQxLS8qXG5tbS9kYW1vbi9jb3JlLmM6MjA0MjogKiBfX2RhbW9uX3N0YXJ0KCkgLSBTdGFydHMgbW9uaXRvcmluZyB3aXRoIGdpdmVuIGNvbnRleHQuXG5tbS9kYW1vbi9jb3JlLmMtMjA0My0gKiBAY3R4Olx0bW9uaXRvcmluZyBjb250ZXh0XG4tLVxubW0vZGFtb24vY29yZS5jLTIwNDgtICovXG5tbS9kYW1vbi9jb3JlLmM6MjA0OTpzdGF0aWMgaW50IF9fZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTIwNTAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDcxLS8qKlxubW0vZGFtb24vY29yZS5jOjIwNzI6ICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXG5tbS9kYW1vbi9jb3JlLmMtMjA3My0gKiBAY3R4czpcdGFuIGFycmF5IG9mIHRoZSBwb2ludGVycyBmb3IgY29udGV4dHMgdG8gc3RhcnQgbW9uaXRvcmluZ1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDgwLSAqIEBleGNsdXNpdmUgaXMgdHJ1ZSBhbmQgYSBncm91cCBvZiB0aHJlYWRzIHRoYXQgY3JlYXRlZCBieSBvdGhlclxubW0vZGFtb24vY29yZS5jOjIwODE6ICogJiMzOTtkYW1vbl9zdGFydCgpJiMzOTsgY2FsbCBpcyBjdXJyZW50bHkgcnVubmluZywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYnV0XG5tbS9kYW1vbi9jb3JlLmMtMjA4Mi0gKiByZXR1cm5zIC1FQlVTWS5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA4NS0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDg2OmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxubW0vZGFtb24vY29yZS5jLTIwODcte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMTExLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY3R4czsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL2NvcmUuYzoyMTEyOlx0XHRlcnIgPSBfX2RhbW9uX3N0YXJ0KGN0eHNbaV0pO1xubW0vZGFtb24vY29yZS5jLTIxMTMtXHRcdGlmIChlcnIpXG4tLVxubW0vZGFtb24vY29yZS5jPTIyMTQ9aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMjYyLSAqXG5tbS9kYW1vbi9jb3JlLmM6MjI2MzogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxubW0vZGFtb24vY29yZS5jLTIyNjQtICogQGN0eCBoYXMgc3VjY2VlZGVkLiAgT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIGNvdWxkIGZhbGwgaW50byBhbiBpbmRlZmluaXRlXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz00MDE9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF90dXJuKGJvb2wgb24pXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy00MTMtXG5tbS9kYW1vbi9scnVfc29ydC5jOjQxNDpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTQxNS1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTMyND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0zMzYtXG5tbS9kYW1vbi9yZWNsYWltLmM6MzM3Olx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0zMzgtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3N0YXQuYz0yMDA9c3RhdGljIGludCBkYW1vbl9zdGF0X3N0YXJ0KHZvaWQpXG4tLVxubW0vZGFtb24vc3RhdC5jLTIxMi1cdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi9zdGF0LmM6MjEzOlx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2ZGFtb25fc3RhdF9jb250ZXh0LCAxLCB0cnVlKTtcbm1tL2RhbW9uL3N0YXQuYy0yMTQtXHRpZiAoZXJyKSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNTE1PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI1MzktXHR9XG5tbS9kYW1vbi9zeXNmcy5jOjI1NDA6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIGZhbHNlKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjU0MS1cdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM2OTIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgREFNT04gSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG1tL2RhbW9uL2NvcmUuY2AgYW5kIHNwZWNpZmljYWxseSBhdCB0aGUgY2hhbmdlcyBhcm91bmQgYGRhbW9zX2FkanVzdF9xdW90YWAuIFRoaXMgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2Ugc3RhdGljIGZ1bmN0aW9ucyBpbiBrZXJuZWwgY29kZSBvZnRlbiBnZXQgaW5saW5lZCwgZXNwZWNpYWxseSBpZiB0aGV5JiMzOTtyZSBzbWFsbCBvciBoYXZlIGEgc2luZ2xlIGNhbGxlci4gQnV0IGBkYW1vc19hZGp1c3RfcXVvdGFgIHNlZW1zIGNvbXBsZXggZW5vdWdoLCB3aXRoIHRoYXQgbG9vcCBhbmQgc2NvcmUgaGlzdG9ncmFtLCB0aGF0IGl0IG1pZ2h0IGJlIGtlcHQgYXMgYSBkaXN0aW5jdCBzeW1ib2wuIE15IGd1dCBmZWVsaW5nIGlzIHRoaXMgaXMgbm90IGlubGluZWQuCgpUaGUga2V5IHBvaW50cyBhcmU6IGBkYW1vbl9zdGFydGAgKG9yIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCksIHdoaWNoIGlzIG5vbi1zdGF0aWMsIGBkYW1vc19hZGp1c3RfcXVvdGFgLCB0aGUgbW9kaWZpZWQgc3RhdGljIGZ1bmN0aW9uLCBhbmQgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AsIHdoaWNoIGNhbGxzIGl0LiBUaGlzIGdpdmVzIG1lIGEgcHJldHR5IHRpZ2h0IGZvY3VzIGZvciBhbmFseXppbmcgdGhlIGNoYW5nZXMuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIG5lY2Vzc2FyeSBLY29uZmlnIG9wdGlvbnMuIEZpcnN0LCBgbW0vTWFrZWZpbGVgIGhhcyBgb2JqLSQoQ09ORklHX0RBTU9OKSAmIzQzOz0gZGFtb24vYCwgYW5kIHRoZW4gYG1tL2RhbW9uL01ha2VmaWxlYCBoYXMgYG9iai15IDo9IGNvcmUub2AuIFNvIHdlIGRlZmluaXRlbHkgbmVlZCBgQ09ORklHX0RBTU9OYCBmb3IgYGNvcmUub2AgdG8gYmUgYnVpbHQuIEJ1dCB3aGF0IGRvZXMgKnRoYXQqIGRlcGVuZCBvbj8gTG9va2luZyBpbiBgbW0vZGFtb24vS2NvbmZpZ2AsIEkgc2VlOgoKYGBga2NvbmZpZwpjb25maWcgREFNT04KCWJvb2wgJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmsmIzM0OwoJaGVscAoJICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IG1vbml0b3JzIGRhdGEgYWNjZXNzZXMgb2YgZ2l2ZW4gYWRkcmVzcwoJICBzcGFjZXMuLi4KYGBgCgpObyBkZXBlbmRlbmNpZXMgZGlyZWN0bHkgbGlzdGVkIGZvciBgQ09ORklHX0RBTU9OYC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKQnV0IHRoZW4gSSBzdGFydCB0aGlua2luZyBhYm91dCB3aGF0IGludGVyZmFjZXMgYXJlIGV4cG9zZWQgYW5kIGhvdyB0aGUgc2NoZW1lcyBhY3R1YWxseSB3b3JrLiBEQU1PUyAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZy1iYXNlZCBPcGVyYXRpb24gU2NoZW1lcykgaXMgY2xlYXJseSBwYXJ0IG9mIGBjb3JlLmNgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBhY3Rpb24gaXMuCgpUbyBjb25maWd1cmUgc2NoZW1lcyBmcm9tIHVzZXJzcGFjZSwgSSYjMzk7bGwgbmVlZCBgQ09ORklHX0RBTU9OX1NZU0ZTYCwgd2hpY2ggbGV0cyBtZSBjb25maWd1cmUgc2NoZW1lcywgcXVvdGFzLCBnb2FscywgYW5kIHNvIG9uLiBOb3csIGBDT05GSUdfREFNT05fU1lTRlNgIGRvZXMgaGF2ZSBkZXBlbmRlbmNpZXM6IGl0IGRlcGVuZHMgb24gYERBTU9OICZhbXA7JmFtcDsgU1lTRlNgLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLgoKRmluYWxseSwgbG9va2luZyBhdCB0aGUgY29kZSwgaW4gYGRhbW9zX2FkanVzdF9xdW90YWAsIEkgc2VlIGBpZiAoIWMtJmd0O29wcy5nZXRfc2NoZW1lX3Njb3JlKSByZXR1cm47YC4gU28gdGhlIGNvZGUgY2xlYXJseSB1c2VzIG9wZXJhdGlvbiBjYWxsYmFja3MuIFdoZXJlIGlzIGBnZXRfc2NoZW1lX3Njb3JlYCBjb21pbmcgZnJvbT8gSSBuZWVkIHRvIHNlYXJjaCBmb3IgdGhhdC4gSSYjMzk7bSBnb2luZyB0byBncmVwIGZvciBgZ2V0X3NjaGVtZV9zY29yZWAgcmlnaHQgYXdheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X3NjaGVtZV9zY29yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0yNDEzPXN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDE3LVxubW0vZGFtb24vY29yZS5jOjI0MTg6XHRpZiAoIXJldCB8fCAhZGFtb3NfcXVvdGFfaXNfc2V0KFx1MDAyNnMtXHUwMDNlcXVvdGEpIHx8ICFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxubW0vZGFtb24vY29yZS5jLTI0MTktXHRcdHJldHVybiByZXQ7XG5tbS9kYW1vbi9jb3JlLmMtMjQyMC1cbm1tL2RhbW9uL2NvcmUuYzoyNDIxOlx0cmV0dXJuIGMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcykgXHUwMDNlPSBzLVx1MDAzZXF1b3RhLm1pbl9zY29yZTtcbm1tL2RhbW9uL2NvcmUuYy0yNDIyLX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI5MD1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzI0LVxubW0vZGFtb24vY29yZS5jOjMzMjU6XHRpZiAoIWMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXG5tbS9kYW1vbi9jb3JlLmMtMzMyNi1cdFx0cmV0dXJuO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzM5LVx0XHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi9jb3JlLmM6MzM0MDpcdFx0XHRzY29yZSA9IGMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcyk7XG5tbS9kYW1vbi9jb3JlLmMtMzM0MS1cdFx0XHRjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXSAmIzQzOz1cbi0tXG5tbS9kYW1vbi9wYWRkci5jPTQ2Mj1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl9wYV9pbml0Y2FsbCh2b2lkKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDczLVx0XHQuYXBwbHlfc2NoZW1lID0gZGFtb25fcGFfYXBwbHlfc2NoZW1lLFxubW0vZGFtb24vcGFkZHIuYzo0NzQ6XHRcdC5nZXRfc2NoZW1lX3Njb3JlID0gZGFtb25fcGFfc2NoZW1lX3Njb3JlLFxubW0vZGFtb24vcGFkZHIuYy00NzUtXHR9O1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9MTE0Mz1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl92YV9pbml0Y2FsbCh2b2lkKVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMTE1NS1cdFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3ZhX2FwcGx5X3NjaGVtZSxcbm1tL2RhbW9uL3ZhZGRyLmM6MTE1NjpcdFx0LmdldF9zY2hlbWVfc2NvcmUgPSBkYW1vbl92YV9zY2hlbWVfc2NvcmUsXG5tbS9kYW1vbi92YWRkci5jLTExNTctXHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTQwMgoJCQkJCQkJb3V0cHV0OiAxNTYKCQkJCQkJCXRob3VnaHRzOiAzNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gQ29uZmlndXJhdGlvbiBBbmFseXNpcyBhbmQgVG9vbCBDYWxsIFByZXBhcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGp1c3QgdHJhY2VkIHdoZXJlIGBnZXRfc2NoZW1lX3Njb3JlYCBnZXRzIGRlZmluZWQuIEl0IGxvb2tzIGxpa2UgYG1tL2RhbW9uL3BhZGRyLmNgIHByb3ZpZGVzIGBkYW1vbl9wYV9zY2hlbWVfc2NvcmVgIHdoZW4gYENPTkZJR19EQU1PTl9QQUREUmAgaXMgZW5hYmxlZCwgYW5kIGBtbS9kYW1vbi92YWRkci5jYCBwcm92aWRlcyBgZGFtb25fdmFfc2NoZW1lX3Njb3JlYCB3aGVuIGBDT05GSUdfREFNT05fVkFERFJgIGlzIGVuYWJsZWQuIFVzZXItc3BhY2UgaW50ZXJhY3Rpb24gcmVxdWlyZXMgYENPTkZJR19EQU1PTl9TWVNGU2AuCgpJJiMzOTttIHNlZWluZyB0aGF0IGJvdGggYERBTU9OX1BBRERSYCBhbmQgYERBTU9OX1ZBRERSYCBkZXBlbmQgb24gYERBTU9OYCBhbmQgYE1NVWAsIHdoaWxlIGBEQU1PTl9TWVNGU2AgZGVwZW5kcyBvbiBgREFNT05gIGFuZCBgU1lTRlNgLiBDb25zZXF1ZW50bHksIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgREFNT04gZnVuY3Rpb25hbGl0eSwgSSYjMzk7bSBnb2luZyB0byBzZXQgdGhlc2UgZm91ciBjb25maWdzOiBgREFNT05gLCBgREFNT05fUEFERFJgLCBgREFNT05fVkFERFJgLCBhbmQgYERBTU9OX1NZU0ZTYC4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgdGhlIHByb21wdCYjMzk7cyByZXF1aXJlbWVudHMgYXJlIG1ldC4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgdHJ1ZSwgZ29vZC4gV2UgaGF2ZSBub24tdWJpcXVpdG91cyBrZXJuZWwgZnVuY3Rpb25zIGRlZmluZWQgYXMgYEZvY3VzU3ltYm9sc2AsIHdoaWNoIGFyZSBhcHByb3ByaWF0ZS4gQW5kLCBhcyBkaXNjdXNzZWQgYWJvdmUsIEkmIzM5O3ZlIGdvdCB0aGUgYEVuYWJsZUNvbmZpZ3NgIHNldCBjb3JyZWN0bHkuIEkmIzM5O3ZlIGFsc28gdmVyaWZpZWQgdGhlIHJlcXVpcmVtZW50cyB3aXRoIHRoZSBwcm92aWRlZCBzb3VyY2UgY29kZSBhbmQgYnVpbGQgY29uZmlnLiBJdCBzZWVtcyBsaWtlIGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vc19hZGp1c3RfcXVvdGEmIzM0OywKICAgICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PUyBxdW90YSBhZGp1c3RtZW50IGxvZ2ljIGluIG1tL2RhbW9uL2NvcmUuYyBieSBhZGRpbmcgYW4gZWFybHkgcmV0dXJuIGluIGRhbW9zX2FkanVzdF9xdW90YSgpIHdoZW4gZWZmZWN0aXZlIHF1b3RhIHNpemUgKGVzeikgaXMgemVyby4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UsIGFsdGVyaW5nIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgcmVnaW9uIHNjb3JpbmcgYmVoYXZpb3Igd2hlbiBxdW90YSBpcyBleGhhdXN0ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3NfYWRqdXN0X3F1b3RhJiMzNDssCiAgICAmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zdGFydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT1MgcXVvdGEgYWRqdXN0bWVudCBsb2dpYyBpbiBtbS9kYW1vbi9jb3JlLmMgYnkgYWRkaW5nIGFuIGVhcmx5IHJldHVybiBpbiBkYW1vc19hZGp1c3RfcXVvdGEoKSB3aGVuIGVmZmVjdGl2ZSBxdW90YSBzaXplIChlc3opIGlzIHplcm8uIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLCBhbHRlcmluZyB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIHJlZ2lvbiBzY29yaW5nIGJlaGF2aW9yIHdoZW4gcXVvdGEgaXMgZXhoYXVzdGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhbiBlYXJseSByZXR1cm4gY2hlY2sgKGBpZiAocXVvdGEtXHUwMDNlZXN6ID09IDApIHJldHVybjtgKSBpbiBgZGFtb3NfYWRqdXN0X3F1b3RhKClgIGluIGBtbS9kYW1vbi9jb3JlLmNgIHdoZW4gdGhlIGVmZmVjdGl2ZSBxdW90YSBzaXplIGlzIHplcm8uXG5cblRoZSBjaGVjayBpbnNwZWN0cyBgcXVvdGEtXHUwMDNlZXN6YCwgd2hpY2ggaXMgZGV0ZXJtaW5pc3RpY2FsbHkgaW5pdGlhbGl6ZWQgYW5kIGNvbXB1dGVkIGJ5IHRoZSBEQU1PTiBzdWJzeXN0ZW0gKHZpYSBgZGFtb3NfcXVvdGFfaW5pdCgpYCBhbmQgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoKWApLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBubyBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcyBvciBidWZmZXJzIHVuaW5pdGlhbGl6ZWQsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMuXG5cbkJlY2F1c2UgdGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDBjNTA1YjNmMzgwNmRlYThmMDEzMmU4YmJjMDJmYmExNTkwY2EwNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDEyIDEzOjQxOjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jCmluZGV4IDA2Y2YyYWI3ZTk3ZDcuLjhmZTE1ZjE3YmU4MGYgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTMzMjQsNiAmIzQzOzMzMjQsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKQogCiAJaWYgKCFjLSZndDtvcHMuZ2V0X3NjaGVtZV9zY29yZSkKIAkJcmV0dXJuOwomIzQzOwlpZiAocXVvdGEtJmd0O2VzeiA9PSAwKQomIzQzOwkJcmV0dXJuOwogCiAJLyogRmlsbCB1cCB0aGUgc2NvcmUgaGlzdG9ncmFtICovCiAJbWVtc2V0KGMtJmd0O3JlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtLCAwLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBPcHRpbWl6YXRpb24gVGhvdWdodHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGEgREFNT04gcGF0Y2gsIHNwZWNpZmljYWxseSBpbiBgbW0vZGFtb24vY29yZS5jYCwgYXJvdW5kIGxpbmUgMzMyNC4gVGhlIHJlbGV2YW50IHBhcnQgaXMgaW4gdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uLiBJIHNlZSBhIG5ldyBjb25kaXRpb25hbCBjaGVjayBoZXJlLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHNob3J0LWNpcmN1aXRpbmcgdGhlIHF1b3RhIGFkanVzdG1lbnQgaWYgYHF1b3RhLSZndDtlc3pgIGlzIHplcm8uCgpOb3csIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIGBxdW90YS0mZ3Q7ZXN6YCBsaWtlbHkgcmVwcmVzZW50cyB0aGUgZWZmZWN0aXZlIHNpemUsIG9yIHBlcmhhcHMgdGhlIGV4dGVudCBzaXplLCBhc3NvY2lhdGVkIHdpdGggdGhlIHF1b3RhLiBUaGUgcHJpb3IgbG9naWMgd2FzIGNhbGxpbmcgYGMtJmd0O29wcy5nZXRfc2NoZW1lX3Njb3JlYCByZWdhcmRsZXNzLCBhbmQgcHJlc3VtYWJseSB0aGF0IGZ1bmN0aW9uIGRvZXMgc29tZXRoaW5nIHdpdGggdGhhdCBzaXplLiBTbywgdGhlIHF1ZXN0aW9uIGJlY29tZXM6IHdoeSB0aGUgYWRkZWQgY2hlY2s/CgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBhbiBlc3ogb2YgemVybyBwcm9iYWJseSBtZWFucyB0aGUgcXVvdGEgaXMgaW52YWxpZCBvciB1bmluaXRpYWxpemVkLiBDYWxsaW5nIGBnZXRfc2NoZW1lX3Njb3JlYCBvbiBzb21ldGhpbmcgd2l0aCBubyBlZmZlY3RpdmUgc2l6ZSBjb3VsZCBsZWFkIHRvIGEgZGl2aWRlLWJ5LXplcm8sIG9yIHVuZGVmaW5lZCBiZWhhdmlvciwgb3Igc2ltcGx5IHJldHVybiBnYXJiYWdlIGRhdGEuIEl0JiMzOTtzIGEgY2xhc3NpYyBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgbW92ZS4KCk15IG5leHQgbGluZSBvZiB0aG91Z2h0IGlzIHRvIGNoZWNrIHdoYXQgYGdldF9zY2hlbWVfc2NvcmVgIGRvZXMgd2l0aCB0aGUgZXN6LiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb2RlIGNhbGxzIGBnZXRfc2NoZW1lX3Njb3JlYCBldmVuIGlmIGVzeiBpcyB6ZXJvLiBBbmQsIGFsc28gd2h5IGl0JiMzOTtzIG5vdCBjaGVja2VkIGVhcmxpZXIsIGlmIHRoZSB6ZXJvIGNhc2UgaXMgaW52YWxpZC4gUGVyaGFwcyB0aGlzIGNvbmRpdGlvbmFsIHdhcyBtaXNzZWQgZHVyaW5nIGluaXRpYWwgZGV2ZWxvcG1lbnQsIG9yIHRoZSBlZGdlIGNhc2Ugd2FzbiYjMzk7dCBjb25zaWRlcmVkIGF0IHRoYXQgdGltZS4KCkl0JiMzOTtzIGEgZ29vZCBvcHRpbWl6YXRpb24sIGxpa2VseSBhdm9pZGluZyB1bm5lY2Vzc2FyeSBjYWxjdWxhdGlvbnMgYW5kIHBvdGVudGlhbCBlcnJvcnMgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgZW1wdHkgb3IgdW5pbml0aWFsaXplZCBxdW90YSBlbnRyaWVzLiBBIGNsZWFuIGFuZCBzZW5zaWJsZSBhZGRpdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzMTA6XHRcdGlmICghdGltZV9pbl9yYW5nZV9vcGVuKGppZmZpZXMsIHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSxcbjMzMTE6XHRcdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSAmIzQzO1xuMzMxMjpcdFx0XHRcdFx0bXNlY3NfdG9famlmZmllcyhxdW90YS1cdTAwM2VyZXNldF9pbnRlcnZhbCkpKSB7XG4zMzEzOlx0XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMzMxNDpcdFx0XHRcdHMtXHUwMDNlc3RhdC5xdF9leGNlZWRzJiM0MzsmIzQzOztcbjMzMTU6XHRcdFx0cXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9zeiAmIzQzOz0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zejtcbjMzMTY6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcbjMzMTc6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiA9IDA7XG4zMzE4Olx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxuMzMxOTpcdFx0XHRcdGNhY2hlZF9lc3ogPSBxdW90YS1cdTAwM2Vlc3o7XG4zMzIwOlx0XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4zMzIxOlx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBxdW90YS1cdTAwM2Vlc3ogIT0gY2FjaGVkX2VzeilcbjMzMjI6XHRcdFx0XHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xuMzMyMzpcdFx0fVxuMzMyNDpcdFxuMzMyNTpcdFx0aWYgKCFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuMzMyNjpcdFx0XHRyZXR1cm47XG4zMzI3Olx0XHRpZiAocXVvdGEtXHUwMDNlZXN6ID09IDApXG4zMzI4Olx0XHRcdHJldHVybjtcbjMzMjk6XHRcbjMzMzA6XHRcdC8qIEZpbGwgdXAgdGhlIHNjb3JlIGhpc3RvZ3JhbSAqL1xuMzMzMTpcdFx0bWVtc2V0KGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0sIDAsXG4zMzMyOlx0XHRcdFx0c2l6ZW9mKCpjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKSAqXG4zMzMzOlx0XHRcdFx0KERBTU9TX01BWF9TQ09SRSAmIzQzOyAxKSk7XG4zMzM0Olx0XHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xuMzMzNTpcdFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuMzMzNjpcdFx0XHRcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXG4zMzM3Olx0XHRcdFx0XHRjb250aW51ZTtcbjMzMzg6XHRcdFx0XHRpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKVxuMzMzOTpcdFx0XHRcdFx0Y29udGludWU7XG4zMzQwOlx0XHRcdFx0c2NvcmUgPSBjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKGMsIHIsIHMpO1xuMzM0MTpcdFx0XHRcdGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1bc2NvcmVdICYjNDM7PVxuMzM0MjpcdFx0XHRcdFx0ZGFtb25fc3pfcmVnaW9uKHIpO1xuMzM0MzpcdFx0XHRcdGlmIChzY29yZSBcdTAwM2UgbWF4X3Njb3JlKVxuMzM0NDpcdFx0XHRcdFx0bWF4X3Njb3JlID0gc2NvcmU7XG4zMzQ1Olx0XHRcdH1cbjMzNDY6XHRcdH1cbjMzNDc6XHRcbjMzNDg6XHRcdC8qIFNldCB0aGUgbWluIHNjb3JlIGxpbWl0ICovXG4zMzQ5Olx0XHRmb3IgKGN1bXVsYXRlZF9zeiA9IDAsIHNjb3JlID0gbWF4X3Njb3JlOyA7IHNjb3JlLS0pIHtcbjMzNTA6XHRcdFx0Y3VtdWxhdGVkX3N6ICYjNDM7PSBjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXTtcbjMzNTE6XHRcdFx0aWYgKGN1bXVsYXRlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzeiB8fCAhc2NvcmUpXG4zMzUyOlx0XHRcdFx0YnJlYWs7XG4zMzUzOlx0XHR9XG4zMzU0Olx0XHRxdW90YS1cdTAwM2VtaW5fc2NvcmUgPSBzY29yZTtcbjMzNTU6XHR9XG4zMzU2Olx0XG4zMzU3Olx0c3RhdGljIHZvaWQgZGFtb3NfdHJhY2Vfc3RhdChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4zMzU4Olx0e1xuMzM1OTpcdFx0dW5zaWduZWQgaW50IGNpZHggPSAwLCBzaWR4ID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ4NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiBJJiMzOTttIHRoZSBvbmUgaGF2aW5nIHRoZXNlIHRob3VnaHRzLgoKKipEaXZpbmcgaW50byBgZGFtb3NfYWRqdXN0X3F1b3RhYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHN0YXJ0IG9mIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBmdW5jdGlvbiBub3cuIEl0JiMzOTtzIHRpbWUgdG8gYW5hbHl6ZSB0aGUgZm91bmRhdGlvbiwgdGhlIHZlcnkgb3BlbmluZyBvZiB0aGUgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGVudHJ5IHBvaW50IGFuZCBpbml0aWFsIHNldHVwLiBXaGVyZSBkb2VzIHRoaXMgcHJvY2VzcyBiZWdpbj8gV2hhdCBhcmUgdGhlIGltbWVkaWF0ZSB2YXJpYWJsZXMgb3IgaW5wdXRzIHRoYXQgYXJlIGJlaW5nIGRlY2xhcmVkIG9yIGV4YW1pbmVkIGF0IHRoZSB2ZXJ5IG91dHNldD8gV2hhdCBpcyB0aGUgaW5pdGlhbCBpbnRlbnRpb24gb2YgdGhpcyBjaHVuayBvZiBjb2RlPyBJIGFtIGxvb2tpbmcgYXQgdGhlIGluaXRpYWwgc3RhdGUgYW5kIGhvdyB0aGF0IGFmZmVjdHMgYW55IGZ1dHVyZSBkZXZlbG9wbWVudHMuIEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSBoaWdoLWxldmVsIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBhcyBhIHdob2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzI5MDpcdHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4zMjkxOlx0e1xuMzI5MjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4zMjkzOlx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuMzI5NDpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbjMyOTU6XHRcdHVuc2lnbmVkIGxvbmcgY3VtdWxhdGVkX3N6LCBjYWNoZWRfZXN6O1xuMzI5NjpcdFx0dW5zaWduZWQgaW50IHNjb3JlLCBtYXhfc2NvcmUgPSAwO1xuMzI5NzpcdFxuMzI5ODpcdFx0aWYgKCFxdW90YS1cdTAwM2VtcyBcdTAwMjZcdTAwMjYgIXF1b3RhLVx1MDAzZXN6IFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnF1b3RhLVx1MDAzZWdvYWxzKSlcbjMyOTk6XHRcdFx0cmV0dXJuO1xuMzMwMDpcdFxuMzMwMTpcdFx0LyogRmlyc3QgY2hhcmdlIHdpbmRvdyAqL1xuMzMwMjpcdFx0aWYgKCFxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX3N6IFx1MDAyNlx1MDAyNiAhcXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tKSB7XG4zMzAzOlx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XG4zMzA0Olx0XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4zMzA1Olx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxuMzMwNjpcdFx0XHRcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XG4zMzA3Olx0XHR9XG4zMzA4Olx0XG4zMzA5Olx0XHQvKiBOZXcgY2hhcmdlIHdpbmRvdyBzdGFydHMgKi9cbjMzMTA6XHRcdGlmICghdGltZV9pbl9yYW5nZV9vcGVuKGppZmZpZXMsIHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSxcbjMzMTE6XHRcdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSAmIzQzO1xuMzMxMjpcdFx0XHRcdFx0bXNlY3NfdG9famlmZmllcyhxdW90YS1cdTAwM2VyZXNldF9pbnRlcnZhbCkpKSB7XG4zMzEzOlx0XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMzMxNDpcdFx0XHRcdHMtXHUwMDNlc3RhdC5xdF9leGNlZWRzJiM0MzsmIzQzOztcbjMzMTU6XHRcdFx0cXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9zeiAmIzQzOz0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zejtcbjMzMTY6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcbjMzMTc6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiA9IDA7XG4zMzE4Olx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxuMzMxOTpcdFx0XHRcdGNhY2hlZF9lc3ogPSBxdW90YS1cdTAwM2Vlc3o7XG4zMzIwOlx0XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4zMzIxOlx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBxdW90YS1cdTAwM2Vlc3ogIT0gY2FjaGVkX2VzeilcbjMzMjI6XHRcdFx0XHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xuMzMyMzpcdFx0fVxuMzMyNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzEzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUXVvdGEgQWRqdXN0bWVudCBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB3aGF0IGhhcHBlbnMgd2hlbiBgcXVvdGEtJmd0O2VzemAgKGVmZmVjdGl2ZSBzaXplKSBpcyB6ZXJvLiBMaW5lIDMzNDkgaGFzIHRoaXMgbG9vcCBjYWxjdWxhdGluZyB0aGUgbWluaW11bSBzY29yZToKCmBgYGMKCQkvKiBTZXQgdGhlIG1pbiBzY29yZSBsaW1pdCAqLwoJCWZvciAoY3VtdWxhdGVkX3N6ID0gMCwgc2NvcmUgPSBtYXhfc2NvcmU7IDsgc2NvcmUtLSkgewoJCQljdW11bGF0ZWRfc3ogJiM0Mzs9IGMtJmd0O3JlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXTsKCQkJaWYgKGN1bXVsYXRlZF9zeiAmZ3Q7PSBxdW90YS0mZ3Q7ZXN6IHx8ICFzY29yZSkKCQkJCWJyZWFrOwoJCX0KCQlxdW90YS0mZ3Q7bWluX3Njb3JlID0gc2NvcmU7CmBgYAoKTXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtXYWl0LCB3aHkgdGhlIGVhcmx5IHJldHVybiBpZiBgcXVvdGEtJmd0O2VzemAgaXMgemVybz8mIzM0OyBEaWQgdGhleSBhZGQgdGhhdCBqdXN0IHRvIG9wdGltaXplLCBhc3N1bWluZyB0aGUgaGlzdG9ncmFtIGNhbGN1bGF0aW9uIGlzIHVubmVjZXNzYXJ5IHdoZW4gdGhlIGVmZmVjdGl2ZSBzaXplIGlzIHplcm8/IE9yIG1heWJlIHRoZSBjb25kaXRpb24gYGN1bXVsYXRlZF9zeiAmZ3Q7PSAwYCBpcyBhbHdheXMgdHJ1ZSBpZiB0aGUgZWZmZWN0aXZlIHNpemUgaXMgemVybyB3aGljaCBtZWFucyBzY29yZSB3aWxsIGVxdWFsIGBtYXhfc2NvcmVgIGFuZCB0aGVuIGBtaW5fc2NvcmVgIGFsc28gZXF1YWxzIGBtYXhfc2NvcmVgLCB3aGljaCBpcyBmaW5lPyBPciBwZXJoYXBzIGFuIGVmZmVjdGl2ZSBzaXplIG9mIHplcm8gbWVhbnMgdGhlIHF1b3RhIGlzIGVzc2VudGlhbGx5IGNsb3NlZCwgc28gbm8gZnVydGhlciBwcm9jZXNzaW5nIGlzIHJlcXVpcmVkLgoKT2theSwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gIERvZXMgdGhpcyBwYXRjaCBldmVuIHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGFueSB3YXk/IFRpbWUgdG8gdGhpbmsgYWJvdXQgd2hhdCBLTVNBTiB3b3VsZCByZXBvcnQuIEkga25vdyBpdCBmbGFncyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvbiB0aGUgc3RhY2ssIGhlYXAsIG9yIHdpdGhpbiBwYWdlIGFsbG9jYXRpb25zLCBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGxlYWtzLgoKTm93LCBsZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyoqIE5vcGUsIGp1c3QgYW4gZWFybHkgcmV0dXJuIGluIGBkYW1vc19hZGp1c3RfcXVvdGEoKWAgd2hlbiBgcXVvdGEtJmd0O2VzeiA9PSAwYC4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm8sIGBxdW90YS0mZ3Q7ZXN6YCBpcyBpbml0aWFsaXplZDsgaXQmIzM5O3MgZWl0aGVyIHNldCBieSBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAgb3IgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgcXVvdGEgaXMgc2V0IHVwLgozLiAgKipBbGxvY2F0aW9ucy9jb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLgo0LiAgKipNb2RpZmllZCBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzPyoqIE5vcGUuCgpBbHJpZ2h0LCBidXQgd2FpdC4uLiByZXR1cm5pbmcgZWFybHkuLi4gRG9lcyB0aGlzIG1lYW4gdGhlIGNvZGUgY291bGQgcG90ZW50aWFsbHkgbGVhdmUgYHF1b3RhLSZndDttaW5fc2NvcmVgIHVuaW5pdGlhbGl6ZWQgaW4gc29tZSBjYXNlcz8gTmVlZCB0byBjb25maXJtIHdoZXJlIGBxdW90YS0mZ3Q7bWluX3Njb3JlYCBpcyAqYWN0dWFsbHkqIHVzZWQuIFRoYXQmIzM5O3MgdGhlIGtleSBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pbl9zY29yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0yNDEzPXN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDIwLVxubW0vZGFtb24vY29yZS5jOjI0MjE6XHRyZXR1cm4gYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKSBcdTAwM2U9IHMtXHUwMDNlcXVvdGEubWluX3Njb3JlO1xubW0vZGFtb24vY29yZS5jLTI0MjItfVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMjkwPXN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMzNTMtXHR9XG5tbS9kYW1vbi9jb3JlLmM6MzM1NDpcdHF1b3RhLVx1MDAzZW1pbl9zY29yZSA9IHNjb3JlO1xubW0vZGFtb24vY29yZS5jLTMzNTUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDk2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgcy0mZ3Q7cXVvdGFgIG9yIGp1c3QgcGxhaW4gYHNgIGlzIGluaXRpYWxpemVkLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGRlYnVnZ2luZyBzdGVwLiBHb3R0YSB0cmFjZSBiYWNrIHRvIHRoZSBzb3VyY2UgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdmFsdWVzIGFyZSBnZXR0aW5nIHNldC4gVGhpcyBpcyBjcnVjaWFsIGZvciBwaW5wb2ludGluZyB0aGUgb3JpZ2luIG9mIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIEkgbWlnaHQgYmUgc2VlaW5nIGxhdGVyIG9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUmIzM5O3MgZ290IHRvIHNheSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fbmV3X3NjaGVtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz03MzI9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03NDQtXG5tbS9kYW1vbi9jb3JlLmM6NzQ1OnN0cnVjdCBkYW1vcyAqZGFtb25fbmV3X3NjaGVtZShzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sXG5tbS9kYW1vbi9jb3JlLmMtNzQ2LVx0XHRcdGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbixcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTU2Mz1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTgxLVx0XHRcdGNvbnRpbnVlO1xubW0vZGFtb24vY29yZS5jOjE1ODI6XHRcdG5ld19zY2hlbWUgPSBkYW1vbl9uZXdfc2NoZW1lKFx1MDAyNnNyY19zY2hlbWUtXHUwMDNlcGF0dGVybixcbm1tL2RhbW9uL2NvcmUuYy0xNTgzLVx0XHRcdFx0c3JjX3NjaGVtZS1cdTAwM2VhY3Rpb24sXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0xODg9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fbHJ1X3NvcnRfbmV3X3NjaGVtZShcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTE5NS1cbm1tL2RhbW9uL2xydV9zb3J0LmM6MTk2Olx0cmV0dXJuIGRhbW9uX25ld19zY2hlbWUoXG5tbS9kYW1vbi9scnVfc29ydC5jLTE5Ny1cdFx0XHQvKiBmaW5kIHRoZSBwYXR0ZXJuLCBhbmQgKi9cbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTY3PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3JlY2xhaW1fbmV3X3NjaGVtZSh1bnNpZ25lZCBsb25nIGFnZ3JfaW50ZXJ2YWwpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTE4MC1cbm1tL2RhbW9uL3JlY2xhaW0uYzoxODE6XHRyZXR1cm4gZGFtb25fbmV3X3NjaGVtZShcbm1tL2RhbW9uL3JlY2xhaW0uYy0xODItXHRcdFx0XHUwMDI2cGF0dGVybixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjk3ND1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9zeXNmc19ta19zY2hlbWUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMTEtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzAxMjpcdHNjaGVtZSA9IGRhbW9uX25ld19zY2hlbWUoXHUwMDI2cGF0dGVybiwgc3lzZnNfc2NoZW1lLVx1MDAzZWFjdGlvbixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDEzLVx0XHRcdHN5c2ZzX3NjaGVtZS1cdTAwM2VhcHBseV9pbnRlcnZhbF91cywgXHUwMDI2cXVvdGEsIFx1MDAyNndtYXJrcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE5NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgREFNT04gSW5pdGlhbGl6YXRpb24gaW4gbW0vZGFtb24vY29yZS5jKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBEQU1PTiBpbml0aWFsaXplcywgcGFydGljdWxhcmx5IHRoZSBxdW90YSBzeXN0ZW0gYW5kIGhvdyBuZXcgc2NoZW1lcyBhcmUgaW50ZWdyYXRlZC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgbW0vZGFtb24vY29yZS5jYC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiB0d28gc3BlY2lmaWMgZnVuY3Rpb25zOiBgZGFtb3NfcXVvdGFfaW5pdGAg4oCTIHRoYXQmIzM5O2xsIGhhbmRsZSB0aGUgYWxsb2NhdGlvbiBhbmQgc2V0dXAgb2YgdGhlIHF1b3RhIG1lY2hhbmlzbSwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIGVuZm9yY2luZyBsaW1pdHMuIFRoZW4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIG5ldyBzY2hlbWVzIGFyZSBwbHVnZ2VkIGludG8gdGhlIHdob2xlIHNldHVwLCBzbyBJJiMzOTtsbCBhbHNvIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBgZGFtb25fbmV3X3NjaGVtZWAuIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucywgb3IgcG90ZW50aWFsIGluZWZmaWNpZW5jaWVzLCBlc3BlY2lhbGx5IGdpdmVuIGhvdyBEQU1PTiBoYXMgZXZvbHZlZC4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcyBkdXJpbmcgdGhlIGVhcmx5IHN0YWdlcy4gR290dGEgZW5zdXJlIHRoZSBxdW90YSBpcyB3b3JraW5nIGFzIGRlc2lnbmVkIGFuZCB0aGUgbmV3IHNjaGVtZXMgZG9uJiMzOTt0IGhhdmUgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcyNTpcdFxuIDcyNjpcdHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2dvYWxzX2VtcHR5KHN0cnVjdCBkYW1vc19xdW90YSAqcSlcbiA3Mjc6XHR7XG4gNzI4Olx0XHRyZXR1cm4gbGlzdF9lbXB0eShcdTAwMjZxLVx1MDAzZWdvYWxzKTtcbiA3Mjk6XHR9XG4gNzMwOlx0XG4gNzMxOlx0LyogaW5pdGlhbGl6ZSBmaWVsZHMgb2YgQHF1b3RhIHRoYXQgbm9ybWFsbHkgQVBJIHVzZXJzIHdvdWxkbiYjMzk7dCBzZXQgKi9cbiA3MzI6XHRzdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG4gNzMzOlx0e1xuIDczNDpcdFx0cXVvdGEtXHUwMDNlZXN6ID0gMDtcbiA3MzU6XHRcdHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogPSAwO1xuIDczNjpcdFx0cXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9ucyA9IDA7XG4gNzM3Olx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX3N6ID0gMDtcbiA3Mzg6XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IDA7XG4gNzM5Olx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xuIDc0MDpcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4gNzQxOlx0XHRxdW90YS1cdTAwM2Vlc3pfYnAgPSAwO1xuIDc0MjpcdFx0cmV0dXJuIHF1b3RhO1xuIDc0MzpcdH1cbiA3NDQ6XHRcbiA3NDU6XHRzdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxuIDc0NjpcdFx0XHRcdGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbixcbiA3NDc6XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzLFxuIDc0ODpcdFx0XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4gNzQ5Olx0XHRcdFx0c3RydWN0IGRhbW9zX3dhdGVybWFya3MgKndtYXJrcyxcbiA3NTA6XHRcdFx0XHRpbnQgdGFyZ2V0X25pZClcbiA3NTE6XHR7XG4gNzUyOlx0XHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcbiA3NTM6XHRcbiA3NTQ6XHRcdHNjaGVtZSA9IGttYWxsb2Nfb2JqKCpzY2hlbWUpO1xuIDc1NTpcdFx0aWYgKCFzY2hlbWUpXG4gNzU2Olx0XHRcdHJldHVybiBOVUxMO1xuIDc1NzpcdFx0c2NoZW1lLVx1MDAzZXBhdHRlcm4gPSAqcGF0dGVybjtcbiA3NTg6XHRcdHNjaGVtZS1cdTAwM2VhY3Rpb24gPSBhY3Rpb247XG4gNzU5Olx0XHRzY2hlbWUtXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMgPSBhcHBseV9pbnRlcnZhbF91cztcbiA3NjA6XHRcdC8qXG4gNzYxOlx0XHQgKiBuZXh0X2FwcGx5X3NpcyB3aWxsIGJlIHNldCB3aGVuIGtkYW1vbmQgc3RhcnRzLiAgV2hpbGUga2RhbW9uZCBpc1xuIDc2MjpcdFx0ICogcnVubmluZywgaXQgd2lsbCBhbHNvIHVwZGF0ZWQgd2hlbiBpdCBpcyBhZGRlZCB0byB0aGUgREFNT04gY29udGV4dCxcbiA3NjM6XHRcdCAqIG9yIGRhbW9uX2F0dHJzIGFyZSB1cGRhdGVkLlxuIDc2NDpcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwOTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBkaXZlIGludG8gdGhpcy4gTGV0JiMzOTtzIHNlZSBob3cgSSBjYW4gc3VtbWFyaXplIHRoaXM6CgoqKkFuYWx5emluZyB0aGUgTmV4dCBTdGVwcyBpbiBgZGFtb25fbmV3X3NjaGVtZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBmaWd1cmUgb3V0IHdoYXQgdGhlIG5leHQgbW92ZXMgYXJlIGluIHRoaXMgYGRhbW9uX25ld19zY2hlbWVgLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIGFuZCBwb3RlbnRpYWwgcm9hZGJsb2NrcyBvZiBlYWNoIHN0ZXAsIGFzc2Vzc2luZyBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIG9iamVjdGl2ZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGRlcGVuZGVuY2llcyBhbmQgdHJ5aW5nIHRvIGFudGljaXBhdGUgYW55IGVkZ2UgY2FzZXMgb3IgdW5leHBlY3RlZCBvdXRjb21lcyB0aGF0IG1pZ2h0IHJlcXVpcmUgYWRqdXN0bWVudHMuIE15IGZvY3VzIGlzIG9uIHRoZSBtb3N0IGVmZmljaWVudCBhbmQgcm9idXN0IHBhdGggZm9yd2FyZCwgd2hpbGUgYWxzbyBiZWluZyBtaW5kZnVsIG9mIHBvdGVudGlhbCByaXNrcy4gVGltZSB0byBwdXQgb24gbXkgdGhpbmtpbmcgY2FwIGFuZCBzdHJhdGVnaXplIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzY1Olx0XHRzY2hlbWUtXHUwMDNlbmV4dF9hcHBseV9zaXMgPSAwO1xuIDc2NjpcdFx0c2NoZW1lLVx1MDAzZXdhbGtfY29tcGxldGVkID0gZmFsc2U7XG4gNzY3Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzY2hlbWUtXHUwMDNlY29yZV9maWx0ZXJzKTtcbiA3Njg6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnNjaGVtZS1cdTAwM2VvcHNfZmlsdGVycyk7XG4gNzY5Olx0XHRzY2hlbWUtXHUwMDNlc3RhdCA9IChzdHJ1Y3QgZGFtb3Nfc3RhdCl7fTtcbiA3NzA6XHRcdHNjaGVtZS1cdTAwM2VtYXhfbnJfc25hcHNob3RzID0gMDtcbiA3NzE6XHRcdHNjaGVtZS1cdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xuIDc3MjpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2NoZW1lLVx1MDAzZWxpc3QpO1xuIDc3MzpcdFxuIDc3NDpcdFx0c2NoZW1lLVx1MDAzZXF1b3RhID0gKihkYW1vc19xdW90YV9pbml0KHF1b3RhKSk7XG4gNzc1Olx0XHQvKiBxdW90YS5nb2FscyBzaG91bGQgYmUgc2VwYXJhdGVseSBzZXQgYnkgY2FsbGVyICovXG4gNzc2Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzY2hlbWUtXHUwMDNlcXVvdGEuZ29hbHMpO1xuIDc3NzpcdFxuIDc3ODpcdFx0c2NoZW1lLVx1MDAzZXdtYXJrcyA9ICp3bWFya3M7XG4gNzc5Olx0XHRzY2hlbWUtXHUwMDNld21hcmtzLmFjdGl2YXRlZCA9IHRydWU7XG4gNzgwOlx0XG4gNzgxOlx0XHRzY2hlbWUtXHUwMDNlbWlncmF0ZV9kZXN0cyA9IChzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyl7fTtcbiA3ODI6XHRcdHNjaGVtZS1cdTAwM2V0YXJnZXRfbmlkID0gdGFyZ2V0X25pZDtcbiA3ODM6XHRcbiA3ODQ6XHRcdHJldHVybiBzY2hlbWU7XG4gNzg1Olx0fVxuIDc4NjpcdFxuIDc4NzpcdHN0YXRpYyB2b2lkIGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiA3ODg6XHR7XG4gNzg5Olx0XHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbCA9IGN0eC1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgP1xuIDc5MDpcdFx0XHRjdHgtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsIDogMTtcbiA3OTE6XHRcdHVuc2lnbmVkIGxvbmcgYXBwbHlfaW50ZXJ2YWwgPSBzLVx1MDAzZWFwcGx5X2ludGVydmFsX3VzID9cbiA3OTI6XHRcdFx0cy1cdTAwM2VhcHBseV9pbnRlcnZhbF91cyA6IGN0eC1cdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsO1xuIDc5MzpcdFxuIDc5NDpcdFx0cy1cdTAwM2VuZXh0X2FwcGx5X3NpcyA9IGN0eC1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscyAmIzQzO1xuIDc5NTpcdFx0XHRhcHBseV9pbnRlcnZhbCAvIHNhbXBsZV9pbnRlcnZhbDtcbiA3OTY6XHR9XG4gNzk3Olx0XG4gNzk4Olx0dm9pZCBkYW1vbl9hZGRfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxuIDc5OTpcdHtcbiA4MDA6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cy1cdTAwM2VsaXN0LCBcdTAwMjZjdHgtXHUwMDNlc2NoZW1lcyk7XG4gODAxOlx0XHRkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMocywgY3R4KTtcbiA4MDI6XHR9XG4gODAzOlx0XG4gODA0Olx0c3RhdGljIHZvaWQgZGFtb25fZGVsX3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MjgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgbWluZCYjMzk7cyBidXp6aW5nIOKAkyBJJiMzOTttIGluIGBkYW1vbl9zeXNmc19ta19zY2hlbWVgIGFuZCBJJiMzOTt2ZSBoaXQgYSBwb2ludCB3aGVyZSBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBxdW90YWAgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQuIEl0JiMzOTtzIGEga2V5IHBhcnQgb2YgdGhpcyB3aG9sZSBzY2hlbWUsIHNvIEkgY2FuJiMzOTt0IGp1c3QgZ2xvc3Mgb3ZlciBpdC4gVGltZSB0byBkaXZlIGJhY2sgaW50byB0aGUgY29kZSBhbmQgdmVyaWZ5IGl0cyBzZXR1cC4gR290dGEgY2hhc2UgdGhpcyBkb3duIGFuZCBtYWtlIHN1cmUgaXQmIzM5O3MgaGFuZGxlZCBwcm9wZXJseSB3aXRoaW4gdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTc0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5NzQ6XHRzdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9zeXNmc19ta19zY2hlbWUoXG4yOTc1Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnN5c2ZzX3NjaGVtZSlcbjI5NzY6XHR7XG4yOTc3Olx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfYWNjZXNzX3BhdHRlcm4gKmFjY2Vzc19wYXR0ZXJuID1cbjI5Nzg6XHRcdFx0c3lzZnNfc2NoZW1lLVx1MDAzZWFjY2Vzc19wYXR0ZXJuO1xuMjk3OTpcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqc3lzZnNfcXVvdGFzID0gc3lzZnNfc2NoZW1lLVx1MDAzZXF1b3RhcztcbjI5ODA6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc193ZWlnaHRzICpzeXNmc193ZWlnaHRzID0gc3lzZnNfcXVvdGFzLVx1MDAzZXdlaWdodHM7XG4yOTgxOlx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfd2F0ZXJtYXJrcyAqc3lzZnNfd21hcmtzID0gc3lzZnNfc2NoZW1lLVx1MDAzZXdhdGVybWFya3M7XG4yOTgyOlx0XHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcbjI5ODM6XHRcdGludCBlcnI7XG4yOTg0Olx0XG4yOTg1Olx0XHRzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gcGF0dGVybiA9IHtcbjI5ODY6XHRcdFx0Lm1pbl9zel9yZWdpb24gPSBhY2Nlc3NfcGF0dGVybi1cdTAwM2Vzei1cdTAwM2VtaW4sXG4yOTg3Olx0XHRcdC5tYXhfc3pfcmVnaW9uID0gYWNjZXNzX3BhdHRlcm4tXHUwMDNlc3otXHUwMDNlbWF4LFxuMjk4ODpcdFx0XHQubWluX25yX2FjY2Vzc2VzID0gYWNjZXNzX3BhdHRlcm4tXHUwMDNlbnJfYWNjZXNzZXMtXHUwMDNlbWluLFxuMjk4OTpcdFx0XHQubWF4X25yX2FjY2Vzc2VzID0gYWNjZXNzX3BhdHRlcm4tXHUwMDNlbnJfYWNjZXNzZXMtXHUwMDNlbWF4LFxuMjk5MDpcdFx0XHQubWluX2FnZV9yZWdpb24gPSBhY2Nlc3NfcGF0dGVybi1cdTAwM2VhZ2UtXHUwMDNlbWluLFxuMjk5MTpcdFx0XHQubWF4X2FnZV9yZWdpb24gPSBhY2Nlc3NfcGF0dGVybi1cdTAwM2VhZ2UtXHUwMDNlbWF4LFxuMjk5MjpcdFx0fTtcbjI5OTM6XHRcdHN0cnVjdCBkYW1vc19xdW90YSBxdW90YSA9IHtcbjI5OTQ6XHRcdFx0Lm1zID0gc3lzZnNfcXVvdGFzLVx1MDAzZW1zLFxuMjk5NTpcdFx0XHQuc3ogPSBzeXNmc19xdW90YXMtXHUwMDNlc3osXG4yOTk2Olx0XHRcdC5yZXNldF9pbnRlcnZhbCA9IHN5c2ZzX3F1b3Rhcy1cdTAwM2VyZXNldF9pbnRlcnZhbF9tcyxcbjI5OTc6XHRcdFx0LndlaWdodF9zeiA9IHN5c2ZzX3dlaWdodHMtXHUwMDNlc3osXG4yOTk4Olx0XHRcdC53ZWlnaHRfbnJfYWNjZXNzZXMgPSBzeXNmc193ZWlnaHRzLVx1MDAzZW5yX2FjY2Vzc2VzLFxuMjk5OTpcdFx0XHQud2VpZ2h0X2FnZSA9IHN5c2ZzX3dlaWdodHMtXHUwMDNlYWdlLFxuMzAwMDpcdFx0XHQuZ29hbF90dW5lciA9IHN5c2ZzX3F1b3Rhcy1cdTAwM2Vnb2FsX3R1bmVyLFxuMzAwMTpcdFx0XHQuZmFpbF9jaGFyZ2VfbnVtID0gc3lzZnNfcXVvdGFzLVx1MDAzZWZhaWxfY2hhcmdlX251bSxcbjMwMDI6XHRcdFx0LmZhaWxfY2hhcmdlX2Rlbm9tID0gc3lzZnNfcXVvdGFzLVx1MDAzZWZhaWxfY2hhcmdlX2Rlbm9tLFxuMzAwMzpcdFx0fTtcbjMwMDQ6XHRcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcyA9IHtcbjMwMDU6XHRcdFx0Lm1ldHJpYyA9IHN5c2ZzX3dtYXJrcy1cdTAwM2VtZXRyaWMsXG4zMDA2Olx0XHRcdC5pbnRlcnZhbCA9IHN5c2ZzX3dtYXJrcy1cdTAwM2VpbnRlcnZhbF91cyxcbjMwMDc6XHRcdFx0LmhpZ2ggPSBzeXNmc193bWFya3MtXHUwMDNlaGlnaCxcbjMwMDg6XHRcdFx0Lm1pZCA9IHN5c2ZzX3dtYXJrcy1cdTAwM2VtaWQsXG4zMDA5Olx0XHRcdC5sb3cgPSBzeXNmc193bWFya3MtXHUwMDNlbG93LFxuMzAxMDpcdFx0fTtcbjMwMTE6XHRcbjMwMTI6XHRcdHNjaGVtZSA9IGRhbW9uX25ld19zY2hlbWUoXHUwMDI2cGF0dGVybiwgc3lzZnNfc2NoZW1lLVx1MDAzZWFjdGlvbixcbjMwMTM6XHRcdFx0XHRzeXNmc19zY2hlbWUtXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMsIFx1MDAyNnF1b3RhLCBcdTAwMjZ3bWFya3MsXG4zMDE0Olx0XHRcdFx0c3lzZnNfc2NoZW1lLVx1MDAzZXRhcmdldF9uaWQpO1xuMzAxNTpcdFx0aWYgKCFzY2hlbWUpXG4zMDE2Olx0XHRcdHJldHVybiBOVUxMO1xuMzAxNzpcdFxuMzAxODpcdFx0ZXJyID0gZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKHN5c2ZzX3F1b3Rhcy1cdTAwM2Vnb2FscywgXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk2MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgVGhvdWdodHMgb24gYGRhbW9zX3F1b3RhYCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgc3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0geyAuLi4gfWAgY29uc3RydWN0LiAgUmlnaHQsIHRoZSBkZXNpZ25hdGVkIGluaXRpYWxpemVyLiBJdCYjMzk7cyBpbml0aWFsaXppbmcgYWxsIHRoZSB1bnNwZWNpZmllZCBmaWVsZHMgdG8gemVyby4gIEFuZCB0aGF0IGluY2x1ZGVzIGBtaW5fc2NvcmVgISBJbnRlcmVzdGluZy4gVGhpcyBjb3VsZCBoYXZlIHNvbWUgaW1wbGljYXRpb25zIGZ1cnRoZXIgZG93biB0aGUgbGluZSwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgdGhhdCBwbGF5cyBvdXQuICBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgYmVoYXZpb3IgaXMgY29uc2lzdGVudCBhbmQgZXhwZWN0ZWQgdGhyb3VnaG91dCB0aGUgY29kZS4KCkFscmlnaHQsIG5vdyBJIHNob3VsZCBxdWlja2x5IGNoZWNrIHdoZXJlIGVsc2UgdGhpcyBgcXVvdGFgIHN0cnVjdCBpcyB1c2VkLiBMb29rcyBsaWtlIEkgc2hvdWxkIGZvY3VzIG9uIGByZWNsYWltLmNgIGFuZCBgbHJ1X3NvcnQuY2AgdG8gc2VlIGhvdyB0aG9zZSBpbml0aWFsIHplcm9zIGFyZSBiZWluZyBoYW5kbGVkLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiB0aGUgaW1wbGljaXQgemVyb2luZyBpcyByZWxpZWQgdXBvbiwgb3IgaWYgaXQgbWlnaHQgbGVhZCB0byBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbnMgb2YgdGhlIGNhbGxlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vcmVjbGFpbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjc6XHRzdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9yZWNsYWltX25ld19zY2hlbWUodW5zaWduZWQgbG9uZyBhZ2dyX2ludGVydmFsKVxuIDE2ODpcdHtcbiAxNjk6XHRcdHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiBwYXR0ZXJuID0ge1xuIDE3MDpcdFx0XHQvKiBGaW5kIHJlZ2lvbnMgaGF2aW5nIFBBR0VfU0laRSBvciBsYXJnZXIgc2l6ZSAqL1xuIDE3MTpcdFx0XHQubWluX3N6X3JlZ2lvbiA9IFBBR0VfU0laRSxcbiAxNzI6XHRcdFx0Lm1heF9zel9yZWdpb24gPSBVTE9OR19NQVgsXG4gMTczOlx0XHRcdC8qIGFuZCBub3QgYWNjZXNzZWQgYXQgYWxsICovXG4gMTc0Olx0XHRcdC5taW5fbnJfYWNjZXNzZXMgPSAwLFxuIDE3NTpcdFx0XHQubWF4X25yX2FjY2Vzc2VzID0gMCxcbiAxNzY6XHRcdFx0LyogZm9yIG1pbl9hZ2Ugb3IgbW9yZSBtaWNyby1zZWNvbmRzICovXG4gMTc3Olx0XHRcdC5taW5fYWdlX3JlZ2lvbiA9IG1pbl9hZ2UgLyBhZ2dyX2ludGVydmFsLFxuIDE3ODpcdFx0XHQubWF4X2FnZV9yZWdpb24gPSBVSU5UX01BWCxcbiAxNzk6XHRcdH07XG4gMTgwOlx0XG4gMTgxOlx0XHRyZXR1cm4gZGFtb25fbmV3X3NjaGVtZShcbiAxODI6XHRcdFx0XHRcdTAwMjZwYXR0ZXJuLFxuIDE4MzpcdFx0XHRcdC8qIHBhZ2Ugb3V0IHRob3NlLCBhcyBzb29uIGFzIGZvdW5kICovXG4gMTg0Olx0XHRcdFx0REFNT1NfUEFHRU9VVCxcbiAxODU6XHRcdFx0XHQvKiBmb3IgZWFjaCBhZ2dyZWdhdGlvbiBpbnRlcnZhbCAqL1xuIDE4NjpcdFx0XHRcdDAsXG4gMTg3Olx0XHRcdFx0LyogdW5kZXIgdGhlIHF1b3RhLiAqL1xuIDE4ODpcdFx0XHRcdFx1MDAyNmRhbW9uX3JlY2xhaW1fcXVvdGEsXG4gMTg5Olx0XHRcdFx0LyogKERlKWFjdGl2YXRlIHRoaXMgYWNjb3JkaW5nIHRvIHRoZSB3YXRlcm1hcmtzLiAqL1xuIDE5MDpcdFx0XHRcdFx1MDAyNmRhbW9uX3JlY2xhaW1fd21hcmtzLFxuIDE5MTpcdFx0XHRcdE5VTUFfTk9fTk9ERSk7XG4gMTkyOlx0fVxuIDE5MzpcdFxuIDE5NDpcdHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4gMTk1Olx0e1xuIDE5NjpcdFx0c3RydWN0IGRhbW9uX2N0eCAqcGFyYW1fY3R4O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzA3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBkYW1vbl9yZWNsYWltX3F1b3RhYCoqCgpPa2F5LCBzbyBgZGFtb25fcmVjbGFpbV9xdW90YWAgaXMgYSBnbG9iYWwgdmFyaWFibGUsIGFuZCBpdCYjMzk7cyBpbml0aWFsaXplZCBzdGF0aWNhbGx5LiBUaGF0IHRlbGxzIG1lIGEgZmV3IHRoaW5ncyByaWdodCBvZmYgdGhlIGJhdDogaXRzIHNjb3BlIGlzIGltcG9ydGFudCwgcG90ZW50aWFsbHkgaW5mbHVlbmNpbmcgYmVoYXZpb3IgYWNyb3NzIHRoZSBlbnRpcmUgc3lzdGVtIGlmIGl0JiMzOTtzIG5vdCBoYW5kbGVkIGNhcmVmdWxseS4gU3RhdGljIGluaXRpYWxpemF0aW9uIHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBzZXQgYXQgY29tcGlsZSB0aW1lIG9yIGR1cmluZyB2ZXJ5IGVhcmx5IGJvb3QsIHdoaWNoIGNvdWxkIGdpdmUgdXMgaW5zaWdodHMgaW50byB0aGUgc3lzdGVtJiMzOTtzIGJhc2VsaW5lIG1lbW9yeSByZWNsYWltIHBvbGljeS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgdmFyaWFibGUgaXMgYWN0dWFsbHkgKnVzZWQqLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGxydV9zb3J0LmNgLiBHaXZlbiB0aGUgbmFtZSwgSSBzdXNwZWN0IHRoaXMgdmFyaWFibGUgbWlnaHQgYmUgbGlua2VkIHRvIGhvdyB0aGUgTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBjYWNoZSBpcyBtYW5hZ2VkIGFuZCBob3cgbWVtb3J5IHJlY2xhaW0gaXMgcHJpb3JpdGl6ZWQgd2l0aGluIGl0LiBQZXJoYXBzIGl0JiMzOTtzIGEgdGhyZXNob2xkLCBhIGZsYWcsIG9yIGEgcXVvdGEgcmVsYXRlZCB0byB0aGUgYW1vdW50IG9mIG1lbW9yeSB0aGF0IGNhbiBiZSByZWNsYWltZWQgdXNpbmcgYSBwYXJ0aWN1bGFyIHBvbGljeS4gRXhhbWluaW5nIHRoaXMgc291cmNlIGZpbGUgd2lsbCB0ZWxsIHRoZSB0YWxlLiBJdCBtYXkgd2VsbCBiZSB0aGUgbGluY2hwaW4gaW4gaG93IGFnZ3Jlc3NpdmVseSBtZW1vcnkgaXMgZnJlZWQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vbHJ1X3NvcnQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTg4Olx0c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fbHJ1X3NvcnRfbmV3X3NjaGVtZShcbiAxODk6XHRcdFx0c3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLCBlbnVtIGRhbW9zX2FjdGlvbiBhY3Rpb24pXG4gMTkwOlx0e1xuIDE5MTpcdFx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0gZGFtb25fbHJ1X3NvcnRfcXVvdGE7XG4gMTkyOlx0XG4gMTkzOlx0XHQvKiBVc2UgaGFsZiBvZiB0b3RhbCBxdW90YSBmb3IgaG90L2NvbGQgcGFnZXMgc29ydGluZyAqL1xuIDE5NDpcdFx0cXVvdGEubXMgPSBxdW90YS5tcyAvIDI7XG4gMTk1Olx0XG4gMTk2Olx0XHRyZXR1cm4gZGFtb25fbmV3X3NjaGVtZShcbiAxOTc6XHRcdFx0XHQvKiBmaW5kIHRoZSBwYXR0ZXJuLCBhbmQgKi9cbiAxOTg6XHRcdFx0XHRwYXR0ZXJuLFxuIDE5OTpcdFx0XHRcdC8qIChkZSlwcmlvcml0aXplIG9uIExSVS1saXN0cyAqL1xuIDIwMDpcdFx0XHRcdGFjdGlvbixcbiAyMDE6XHRcdFx0XHQvKiBmb3IgZWFjaCBhZ2dyZWdhdGlvbiBpbnRlcnZhbCAqL1xuIDIwMjpcdFx0XHRcdDAsXG4gMjAzOlx0XHRcdFx0LyogdW5kZXIgdGhlIHF1b3RhLiAqL1xuIDIwNDpcdFx0XHRcdFx1MDAyNnF1b3RhLFxuIDIwNTpcdFx0XHRcdC8qIChEZSlhY3RpdmF0ZSB0aGlzIGFjY29yZGluZyB0byB0aGUgd2F0ZXJtYXJrcy4gKi9cbiAyMDY6XHRcdFx0XHRcdTAwMjZkYW1vbl9scnVfc29ydF93bWFya3MsXG4gMjA3Olx0XHRcdFx0TlVNQV9OT19OT0RFKTtcbiAyMDg6XHR9XG4gMjA5Olx0XG4gMjEwOlx0LyogQ3JlYXRlIGEgREFNT04tYmFzZWQgb3BlcmF0aW9uIHNjaGVtZSBmb3IgaG90IG1lbW9yeSByZWdpb25zICovXG4gMjExOlx0c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fbHJ1X3NvcnRfbmV3X2hvdF9zY2hlbWUodW5zaWduZWQgaW50IGhvdF90aHJlcylcbiAyMTI6XHR7XG4gMjEzOlx0XHRzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gcGF0dGVybiA9IGRhbW9uX2xydV9zb3J0X3N0dWJfcGF0dGVybjtcbiAyMTQ6XHRcbiAyMTU6XHRcdHBhdHRlcm4ubWluX25yX2FjY2Vzc2VzID0gaG90X3RocmVzO1xuIDIxNjpcdFx0cmV0dXJuIGRhbW9uX2xydV9zb3J0X25ld19zY2hlbWUoXHUwMDI2cGF0dGVybiwgREFNT1NfTFJVX1BSSU8pO1xuIDIxNzpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0OTUKCQkJCQkJCW91dHB1dDogMjA0CgkJCQkJCQl0aG91Z2h0czogNzQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBkYW1vc19hZGp1c3RfcXVvdGFgIGNvZGUgc25pcHBldC4gRmlyc3QsIEkgc2VlIHRoZSBlYXJseSByZXR1cm4gY29uZGl0aW9uczogaWYgYGMtJmd0O29wcy5nZXRfc2NoZW1lX3Njb3JlYCBpc24mIzM5O3QgZGVmaW5lZCwgb3IgaWYgYHF1b3RhLSZndDtlc3pgICh0aGUgZWZmZWN0aXZlIHNpemUpIGlzIHplcm8sIHRoZSBmdW5jdGlvbiBqdXN0IGV4aXRzLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzOiB3aHkgd2FzIHRoaXMgcGF0Y2ggd3JpdHRlbj8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8KClRoZSBjb3JlIG9mIHRoZSBsb2dpYyBsaWVzIHdpdGhpbiB0aGUgYHF1b3RhLSZndDtlc3ogPT0gMGAgYnJhbmNoLCBzcGVjaWZpY2FsbHkgYXQgbGluZSAzMzQ5LiBUaGUgY29kZSBjYWxjdWxhdGVzIGEgYG1pbl9zY29yZWAgYmFzZWQgb24gdGhlIGhpc3RvZ3JhbS4gSG93ZXZlciwgaWYgYHF1b3RhLSZndDtlc3pgIGlzIHplcm8sIHRoZSBsb29wIGJyZWFrcyBpbW1lZGlhdGVseS4gYGN1bXVsYXRlZF9zemAgd2hpY2ggaXMgdW5zaWduZWQgbG9uZywgc3RhcnRzIGF0IDAsIGFuZCB0aGUgZmlyc3QgaXRlcmF0aW9uIGNhdXNlcyBgY3VtdWxhdGVkX3N6ICZndDs9IDBgIGFsd2F5cyB0byBiZSB0cnVlLiBUaGlzIHNldHMgYHF1b3RhLSZndDttaW5fc2NvcmVgIHRvIHRoZSBgbWF4X3Njb3JlYC4KCk15IGZpcnN0IHRob3VnaHQ6IGlmIGBlc3pgIGlzIHplcm8sIHdlJiMzOTtyZSBlc3NlbnRpYWxseSBzYXlpbmcgbm8gcXVvdGEgc2hvdWxkIGJlIGFwcGxpZWQuICBCdXQgaXMgdGhpcyBhbiBvcHRpbWl6YXRpb24/IFBlcmhhcHMgaWYgdGhlIGVmZmVjdGl2ZSBzaXplIGlzIHplcm8sIHdlIHNraXAgdGhlIGhpc3RvZ3JhbSBjYWxjdWxhdGlvbiBhbHRvZ2V0aGVyLCB3aGljaCBpcyBhIGNvbW1vbiBvcHRpbWl6YXRpb24uIE9yIG1heWJlIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiBgbWluX3Njb3JlYCBpcyBubyBsb25nZXIgcmVsZXZhbnQsIG9yIGlzIGp1c3QgaW5pdGlhbGl6ZWQgdG8gYG1heF9zY29yZWAgc28gdGhlIHZhbHVlIGRvZXNuJiMzOTt0IG1hdHRlci4KCk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSAqdW5pbml0aWFsaXplZCBtZW1vcnkqIHZ1bG5lcmFiaWxpdGllcz8gVGhpcyBpcyB3aGVyZSBJIGhhdmUgdG8gYXBwbHkgbXkgS01TQU4ga25vd2xlZGdlLiBMZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIGNyaXRlcmlhOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZT8qKiBOb3BlLiBObyBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBwYXNzZWQgdG8gdXNlciBzcGFjZSBoZXJlLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogVGhlIGNvbmRpdGlvbiBpcyBiYXNlZCBvbiBgcXVvdGEtJmd0O2VzemAsIHdoaWNoIGlzIHBhcnQgb2YgYHN0cnVjdCBkYW1vc19xdW90YWAuIFRoaXMgc3RydWN0dXJlIGlzICpmdWxseSBpbml0aWFsaXplZCog4oCTIGl0IGdldHMgYSB6ZXJvIHZhbHVlIGR1cmluZyBpbml0aWFsaXphdGlvbiAoYGRhbW9zX3F1b3RhX2luaXRgKSwgb3IgZ2V0cyBhIGNvbXB1dGVkIHZhbHVlIGR1cmluZyBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAuIFNvLCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBoZXJlLgozLiAgKipEYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uPyoqIE5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIGhlcmUgdGhhdCBjb3VsZCBoYXZlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGxhdGVyIGFjY2Vzc2VkLgo0LiAgKipCb3VuZHMgY2hlY2tzLCBsZW5ndGhzPyoqIE5vIGJ1ZmZlciBhY2Nlc3Nlcy4gTm90aGluZyBoZXJlIHRvIGNhdXNlIGEgbGVhayBvZiB1bmluaXRpYWxpemVkIGRhdGEuCgpTbywgYmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2F5aW5nIHRoaXMgcGF0Y2ggZG9lcyBOT1QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlIGFyZSBubyBtZW1vcnkgc2FmZXR5IGJ1Z3MgaGVyZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYXQgcGxheSBoZXJlLgoKTm93LCBsZXQmIzM5O3Mgc29saWRpZnkgdGhlIHJhdGlvbmFsZSBmb3IgYE5lZWRzS01TQU4gPSBmYWxzZWA6CgoqICAgKipLQVNBTi9TdGFuZGFyZCBTYW5pdGl6ZXJzOioqIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgb3B0aW1pemF0aW9uLCBhbiBlYXJseSByZXR1cm4gd2hlbiBlZmZlY3RpdmUgc2NoZW1lIHNpemUgaXMgemVyby4gSXQgaW50cm9kdWNlcyBubyBtZW1vcnkgc2FmZXR5IGJ1Z3MgKE9PQiwgVUFGLCBldGMuKQoqICAgKipLTVNBTjoqKiBLTVNBTiBsb29rcyBmb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIGBxdW90YS0mZ3Q7ZXN6YCBpcyAqZXhwbGljaXRseSBpbml0aWFsaXplZCosIGFuZCB0aGUgZWFybHkgcmV0dXJuIGRvZXNuJiMzOTt0IHNraXAgcmVxdWlyZWQgaW5pdGlhbGl6YXRpb24gdGhhdCB3b3VsZCByZXN1bHQgaW4gcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UuCgpUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXNuJiMzOTt0IG5lZWRlZC4KCkxldCYjMzk7cyBzdWJtaXQgdGhpcyByZWFzb25pbmcgd2l0aCB0aGUgJiMzNDtzZXQtcmVzdWx0cyYjMzQ7IGNvbW1hbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gZWFybHkgcmV0dXJuIGNoZWNrIChgaWYgKHF1b3RhLVx1MDAzZWVzeiA9PSAwKSByZXR1cm47YCkgaW4gYGRhbW9zX2FkanVzdF9xdW90YSgpYCBpbiBgbW0vZGFtb24vY29yZS5jYCB3aGVuIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSBpcyB6ZXJvLlxuXG5UaGUgY2hlY2sgaW5zcGVjdHMgYHF1b3RhLVx1MDAzZWVzemAsIHdoaWNoIGlzIGRldGVybWluaXN0aWNhbGx5IGluaXRpYWxpemVkIGFuZCBjb21wdXRlZCBieSB0aGUgREFNT04gc3Vic3lzdGVtICh2aWEgYGRhbW9zX3F1b3RhX2luaXQoKWAgYW5kIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKClgKS4gVGhlIHBhdGNoIGludHJvZHVjZXMgbm8gbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGFueSBkYXRhIHRvIHVzZXJzcGFjZSwgZG9lcyBub3QgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMgb3IgYnVmZmVycyB1bmluaXRpYWxpemVkLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLlxuXG5CZWNhdXNlIHRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gZWFybHkgcmV0dXJuIGNoZWNrIChgaWYgKHF1b3RhLVx1MDAzZWVzeiA9PSAwKSByZXR1cm47YCkgaW4gYGRhbW9zX2FkanVzdF9xdW90YSgpYCBpbiBgbW0vZGFtb24vY29yZS5jYCB3aGVuIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSBpcyB6ZXJvLlxuXG5UaGUgY2hlY2sgaW5zcGVjdHMgYHF1b3RhLVx1MDAzZWVzemAsIHdoaWNoIGlzIGRldGVybWluaXN0aWNhbGx5IGluaXRpYWxpemVkIGFuZCBjb21wdXRlZCBieSB0aGUgREFNT04gc3Vic3lzdGVtICh2aWEgYGRhbW9zX3F1b3RhX2luaXQoKWAgYW5kIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKClgKS4gVGhlIHBhdGNoIGludHJvZHVjZXMgbm8gbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGFueSBkYXRhIHRvIHVzZXJzcGFjZSwgZG9lcyBub3QgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMgb3IgYnVmZmVycyB1bmluaXRpYWxpemVkLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLlxuXG5CZWNhdXNlIHRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6MDkuNTc2NzU3NTU2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NDgzNjIwMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1ZBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3NfYWRqdXN0X3F1b3RhXCIsXG4gICAgXCJrZGFtb25kX2FwcGx5X3NjaGVtZXNcIixcbiAgICBcImRhbW9uX3N0YXJ0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIGVhcmx5IHJldHVybiBjaGVjayAoYGlmIChxdW90YS1cXHUwMDNlZXN6ID09IDApIHJldHVybjtgKSBpbiBgZGFtb3NfYWRqdXN0X3F1b3RhKClgIGluIGBtbS9kYW1vbi9jb3JlLmNgIHdoZW4gdGhlIGVmZmVjdGl2ZSBxdW90YSBzaXplIGlzIHplcm8uXFxuXFxuVGhlIGNoZWNrIGluc3BlY3RzIGBxdW90YS1cXHUwMDNlZXN6YCwgd2hpY2ggaXMgZGV0ZXJtaW5pc3RpY2FsbHkgaW5pdGlhbGl6ZWQgYW5kIGNvbXB1dGVkIGJ5IHRoZSBEQU1PTiBzdWJzeXN0ZW0gKHZpYSBgZGFtb3NfcXVvdGFfaW5pdCgpYCBhbmQgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoKWApLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBubyBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcyBvciBidWZmZXJzIHVuaW5pdGlhbGl6ZWQsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMuXFxuXFxuQmVjYXVzZSB0aGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERBTU9TIHF1b3RhIGFkanVzdG1lbnQgbG9naWMgaW4gbW0vZGFtb24vY29yZS5jIGJ5IGFkZGluZyBhbiBlYXJseSByZXR1cm4gaW4gZGFtb3NfYWRqdXN0X3F1b3RhKCkgd2hlbiBlZmZlY3RpdmUgcXVvdGEgc2l6ZSAoZXN6KSBpcyB6ZXJvLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSwgYWx0ZXJpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCByZWdpb24gc2NvcmluZyBiZWhhdmlvciB3aGVuIHF1b3RhIGlzIGV4aGF1c3RlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6MDkuNTc2NzYyNzE2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE5MDkyNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDBjNTA1YjNmMzgwNmRlYThmMDEzMmU4YmJjMDJmYmExNTkwY2EwNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCAxMiAxMzo0MTowNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCAwNmNmMmFiN2U5N2Q3Li44ZmUxNWYxN2JlODBmIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC0zMzI0LDYgKzMzMjQsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbiBcXG4gXFx0aWYgKCFjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcXG4gXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAocXVvdGEtXFx1MDAzZWVzeiA9PSAwKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHQvKiBGaWxsIHVwIHRoZSBzY29yZSBoaXN0b2dyYW0gKi9cXG4gXFx0bWVtc2V0KGMtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtLCAwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MToxMC44OTY0OTk0NTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjExOTM3MzU0NTYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiLFxuICAgIFwia2RhbW9uZF9hcHBseV9zY2hlbWVzXCIsXG4gICAgXCJkYW1vbl9zdGFydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PUyBxdW90YSBhZGp1c3RtZW50IGxvZ2ljIGluIG1tL2RhbW9uL2NvcmUuYyBieSBhZGRpbmcgYW4gZWFybHkgcmV0dXJuIGluIGRhbW9zX2FkanVzdF9xdW90YSgpIHdoZW4gZWZmZWN0aXZlIHF1b3RhIHNpemUgKGVzeikgaXMgemVyby4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UsIGFsdGVyaW5nIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgcmVnaW9uIHNjb3JpbmcgYmVoYXZpb3Igd2hlbiBxdW90YSBpcyBleGhhdXN0ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDBjNTA1YjNmMzgwNmRlYThmMDEzMmU4YmJjMDJmYmExNTkwY2EwNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDEzOjQxOjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCAwNmNmMmFiN2U5N2Q3Li44ZmUxNWYxN2JlODBmIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0zMzI0LDYgKzMzMjQsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuIFxuIFx0aWYgKCFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuIFx0XHRyZXR1cm47XG4rXHRpZiAocXVvdGEtXHUwMDNlZXN6ID09IDApXG4rXHRcdHJldHVybjtcbiBcbiBcdC8qIEZpbGwgdXAgdGhlIHNjb3JlIGhpc3RvZ3JhbSAqL1xuIFx0bWVtc2V0KGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0sIDAsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MToxMC44OTY1MDA5MzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDMyMzQ2MzA0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBDb250ZXh0dWFsIEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGlzIHBhdGNoIHRvIGBtbS9kYW1vbi9jb3JlLmNgIGFyb3VuZCB0aGUgYGRhbW9zX2FkanVzdF9xdW90YWAgZnVuY3Rpb24uIFRoZSBjb2RlIG1lbnRpb25zIHRoaXMgYWRqdXN0bWVudCBvZiBxdW90YSwgYW5kLCBrbm93aW5nIERBTU9OLCBpdCdzIGltbWVkaWF0ZWx5IGFwcGFyZW50IHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGR5bmFtaWMgbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgKndoeSogdGhpcyBjaGFuZ2UgaXMgaGFwcGVuaW5nLiBUaGUgY3JpdGljYWwgbGluZSBpcyBgaWYgKHF1b3RhLVx1MDAzZWVzeiA9PSAwKSByZXR1cm47YC4gVGhpcyBzdWdnZXN0cyBhbiBlYXJseSBleGl0IGNvbmRpdGlvbiwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgZXN6YCBsaWtlbHkgcmVwcmVzZW50cyB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbi4gQSB6ZXJvIHNpemUgbWVhbnMgZWl0aGVyIGFuIGludmFsaWQgcmVnaW9uIG9yIHRoYXQgdGhlIHJlZ2lvbiBpcyBzb21laG93IGVtcHR5LiBJbiBEQU1PTidzIGNvbnRleHQsIGhhbmRsaW5nIHRoaXMgc2l0dWF0aW9uIGlzIGVzc2VudGlhbCwgc2luY2UgYW4gZW1wdHkgcmVnaW9uIHdpbGwgc2tldyBvdXIgbWV0cmljcy4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIG1vc3QgbGlrZWx5IGFkZGluZyBhIGNoZWNrIHRvIHByZXZlbnQgZGl2aXNpb24gYnkgemVybyBvciBhbnkgdW5pbnRlbmRlZCBzaWRlLWVmZmVjdHMgb24gZW1wdHkgcmVnaW9ucy5cblxuSSdkIHdhbnQgdG8gY2hlY2sgaG93IGBxdW90YS1cdTAwM2Vlc3pgIGlzIGluaXRpYWxpemVkIGFuZCBob3cgaXQncyB1c2VkIGVsc2V3aGVyZSwgYnV0IGluIHRoaXMgaXNvbGF0ZWQgc25pcHBldCwgdGhlIGludGVudGlvbiBhcHBlYXJzIHRvIGJlIGEgZGVmZW5zaXZlIHByb2dyYW1taW5nIG1lYXN1cmUuIFRoZSBgZ2V0X3NjaGVtZV9zY29yZWAgY2hlY2sgcHJlY2VkaW5nIGl0IGZ1cnRoZXIgaW1wbGllcyB0aGF0IHdlJ3JlIGluIHRoZSByZWFsbSBvZiBzY29yaW5nIG9yIHJhbmtpbmcgbWVtb3J5IHJlZ2lvbnMgZm9yIG9wdGltaXphdGlvbi4gVGhlIGhpc3RvZ3JhbSBhbHNvIGNvbmZpcm1zIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MToyNS4yMTk5NjY4MzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY1NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzMTU6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogKz0gcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3o7XFxuMzMxNjpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcXG4zMzE3OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6ID0gMDtcXG4zMzE4OlxcdFxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxcbjMzMTk6XFx0XFx0XFx0XFx0Y2FjaGVkX2VzeiA9IHF1b3RhLVxcdTAwM2Vlc3o7XFxuMzMyMDpcXHRcXHRcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbjMzMjE6XFx0XFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgcXVvdGEtXFx1MDAzZWVzeiAhPSBjYWNoZWRfZXN6KVxcbjMzMjI6XFx0XFx0XFx0XFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcXG4zMzIzOlxcdFxcdH1cXG4zMzI0OlxcdFxcbjMzMjU6XFx0XFx0aWYgKCFjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcXG4zMzI2OlxcdFxcdFxcdHJldHVybjtcXG4zMzI3OlxcdFxcdGlmIChxdW90YS1cXHUwMDNlZXN6ID09IDApXFxuMzMyODpcXHRcXHRcXHRyZXR1cm47XFxuMzMyOTpcXHRcXG4zMzMwOlxcdFxcdC8qIEZpbGwgdXAgdGhlIHNjb3JlIGhpc3RvZ3JhbSAqL1xcbjMzMzE6XFx0XFx0bWVtc2V0KGMtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtLCAwLFxcbjMzMzI6XFx0XFx0XFx0XFx0c2l6ZW9mKCpjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSkgKlxcbjMzMzM6XFx0XFx0XFx0XFx0KERBTU9TX01BWF9TQ09SRSArIDEpKTtcXG4zMzM0OlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XFxuMzMzNTpcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xcbjMzMzY6XFx0XFx0XFx0XFx0aWYgKCFfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKSlcXG4zMzM3OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMzMzg6XFx0XFx0XFx0XFx0aWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSlcXG4zMzM5OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMzNDA6XFx0XFx0XFx0XFx0c2NvcmUgPSBjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKTtcXG4zMzQxOlxcdFxcdFxcdFxcdGMtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXSArPVxcbjMzNDI6XFx0XFx0XFx0XFx0XFx0ZGFtb25fc3pfcmVnaW9uKHIpO1xcbjMzNDM6XFx0XFx0XFx0XFx0aWYgKHNjb3JlIFxcdTAwM2UgbWF4X3Njb3JlKVxcbjMzNDQ6XFx0XFx0XFx0XFx0XFx0bWF4X3Njb3JlID0gc2NvcmU7XFxuMzM0NTpcXHRcXHRcXHR9XFxuMzM0NjpcXHRcXHR9XFxuMzM0NzpcXHRcXG4zMzQ4OlxcdFxcdC8qIFNldCB0aGUgbWluIHNjb3JlIGxpbWl0ICovXFxuMzM0OTpcXHRcXHRmb3IgKGN1bXVsYXRlZF9zeiA9IDAsIHNjb3JlID0gbWF4X3Njb3JlOyA7IHNjb3JlLS0pIHtcXG4zMzUwOlxcdFxcdFxcdGN1bXVsYXRlZF9zeiArPSBjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbVtzY29yZV07XFxuMzM1MTpcXHRcXHRcXHRpZiAoY3VtdWxhdGVkX3N6IFxcdTAwM2U9IHF1b3RhLVxcdTAwM2Vlc3ogfHwgIXNjb3JlKVxcbjMzNTI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzM1MzpcXHRcXHR9XFxuMzM1NDpcXHRcXHRxdW90YS1cXHUwMDNlbWluX3Njb3JlID0gc2NvcmU7XFxuMzM1NTpcXHR9XFxuMzM1NjpcXHRcXG4zMzU3OlxcdHN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX3N0YXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbjMzNTg6XFx0e1xcbjMzNTk6XFx0XFx0dW5zaWduZWQgaW50IGNpZHggPSAwLCBzaWR4ID0gMDtcXG4zMzYwOlxcdFxcdHN0cnVjdCBkYW1vcyAqc2l0ZXI7XFxuMzM2MTpcXHRcXG4zMzYyOlxcdFxcdGlmICghdHJhY2VfZGFtb3Nfc3RhdF9hZnRlcl9hcHBseV9pbnRlcnZhbF9lbmFibGVkKCkpXFxuMzM2MzpcXHRcXHRcXHRyZXR1cm47XFxuMzM2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6MjUuMjIwMTQ1MjQ3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mzc1MjgwNzg5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgYGRhbW9zX2FkanVzdF9xdW90YWAgYW5kIGl0cyBDYWxsZXJzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBgZGFtb3NfYWRqdXN0X3F1b3RhYCBmdW5jdGlvbnMgYW5kIHdoZXJlIGl0J3MgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSByZXN0IG9mIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBmdW5jdGlvbiBpdHNlbGYuIEkgd2FudCB0byBzZWUgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgZGVwZW5kZW5jaWVzLCBhbnkgc2lkZSBlZmZlY3RzIHdpdGhpbiB0aGUgZnVuY3Rpb24gaXRzZWxmIOKAkyBlc3NlbnRpYWxseSwgaXRzIGludGVybmFsIGxvZ2ljLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGF0b21pY2l0eSBpc3N1ZXMsIG9yIGFueSBvcHRpbWl6YXRpb25zIHRoYXQgY2FuIGJlIG1hZGUuIEFyZSB0aGVyZSBhbnkgcmVzb3VyY2UgbG9ja3MgaW52b2x2ZWQ/IEhvdyBhcmUgcXVvdGFzIG1hbmFnZWQgaW50ZXJuYWxseT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgb3ZlcmZsb3cgaXNzdWVzPyBEb2VzIGl0IGhhbmRsZSBuZWdhdGl2ZSBhZGp1c3RtZW50cyBncmFjZWZ1bGx5P1xuXG5OZXh0LCBJJ2xsIG5lZWQgdG8gdHJhY2UgYWxsIHRoZSBjYWxsZXJzIG9mIGBkYW1vc19hZGp1c3RfcXVvdGFgLiBVbmRlcnN0YW5kaW5nICp3aG8qIGlzIGNhbGxpbmcgaXQgYW5kICp3aHkqIGlzIGNydWNpYWwuIFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnRleHRzPyBBcmUgd2UgZGVhbGluZyB3aXRoIGhpZ2gtZnJlcXVlbmN5IGNhbGxzLCBiYXRjaCBwcm9jZXNzaW5nLCBvciBpbmZyZXF1ZW50IG9wZXJhdGlvbnM/IFRoaXMgd2lsbCByZXZlYWwgdGhlIGFjY2VzcyBwYXR0ZXJucyBhbmQgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyByZWxhdGVkIHRvIHF1b3RhIG1hbmFnZW1lbnQuIEkgd2FudCB0byBmaW5kIG91dCBhbGwgb2YgdGhlIGRpZmZlcmVudCB3YXlzIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyB1dGlsaXplZC5cblxuSeKAmWxsIGFsc28gbmVlZCB0byBjb25zaWRlciB0aGUgZGF0YSBmbG93LiBXaGF0IGFyZ3VtZW50cyBhcmUgYmVpbmcgcGFzc2VkIHRvIGBkYW1vc19hZGp1c3RfcXVvdGFgPyBXaGF0IGFyZSB0aGVpciByYW5nZXMgYW5kIHBvc3NpYmxlIHZhbHVlcz8gSG93IGRvZXMgdGhlIGNhbGxlciBwcmVwYXJlIHRoZSBpbnB1dCBxdW90YSBjaGFuZ2VzLCBhbmQgaG93IGRvZXMgaXQgaW50ZXJwcmV0IHRoZSByZXN1bHRzPyBBcmUgdGhlcmUgYW55IGRhdGEgdmFsaWRhdGlvbiBzdGVwcyBiZWluZyBza2lwcGVkLCBvciByZXBlYXRlZCwgYnkgdGhlIGNhbGxlcnMgb3IgaW5zaWRlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGl0c2VsZj8gSSdsbCBiZSBsb29raW5nIGZvciBpbmNvbnNpc3RlbmNpZXMgYW5kIHBvdGVudGlhbCBidWdzIHRoYXQgY291bGQgYXJpc2UgZnJvbSBpbmNvcnJlY3QgdXNhZ2UuXG5cblVsdGltYXRlbHksIEknbSBhaW1pbmcgZm9yIGEgY29tcHJlaGVuc2l2ZSB2aWV3OiBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uJ3MgcmVzcG9uc2liaWxpdHksIGl0cyBsaW1pdGF0aW9ucywgYW5kIGhvdyBpdCdzIGJlaW5nIGludGVncmF0ZWQgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaW5mb3JtIG15IGFwcHJvYWNoIHRvIGFueSByZWxhdGVkIGJ1ZyByZXBvcnRzLCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLCBvciByZWZhY3RvcmluZyBlZmZvcnRzLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBJIGNhbiBvcHRpbWl6ZSwgb3IgaWYgdGhlcmUgaXMgbm8gaW1tZWRpYXRlIGFjdGlvbiB0byBiZSB0YWtlbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE3OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6MjguOTcyOTU2MTIxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzAwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzAwOlxcdFxcbjMzMDE6XFx0XFx0LyogRmlyc3QgY2hhcmdlIHdpbmRvdyAqL1xcbjMzMDI6XFx0XFx0aWYgKCFxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9zeiBcXHUwMDI2XFx1MDAyNiAhcXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSkge1xcbjMzMDM6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XFxuMzMwNDpcXHRcXHRcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbjMzMDU6XFx0XFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkpXFxuMzMwNjpcXHRcXHRcXHRcXHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xcbjMzMDc6XFx0XFx0fVxcbjMzMDg6XFx0XFxuMzMwOTpcXHRcXHQvKiBOZXcgY2hhcmdlIHdpbmRvdyBzdGFydHMgKi9cXG4zMzEwOlxcdFxcdGlmICghdGltZV9pbl9yYW5nZV9vcGVuKGppZmZpZXMsIHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20sXFxuMzMxMTpcXHRcXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tICtcXG4zMzEyOlxcdFxcdFxcdFxcdFxcdG1zZWNzX3RvX2ppZmZpZXMocXVvdGEtXFx1MDAzZXJlc2V0X2ludGVydmFsKSkpIHtcXG4zMzEzOlxcdFxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4zMzE0OlxcdFxcdFxcdFxcdHMtXFx1MDAzZXN0YXQucXRfZXhjZWVkcysrO1xcbjMzMTU6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogKz0gcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3o7XFxuMzMxNjpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcXG4zMzE3OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6ID0gMDtcXG4zMzE4OlxcdFxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxcbjMzMTk6XFx0XFx0XFx0XFx0Y2FjaGVkX2VzeiA9IHF1b3RhLVxcdTAwM2Vlc3o7XFxuMzMyMDpcXHRcXHRcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbjMzMjE6XFx0XFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgcXVvdGEtXFx1MDAzZWVzeiAhPSBjYWNoZWRfZXN6KVxcbjMzMjI6XFx0XFx0XFx0XFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcXG4zMzIzOlxcdFxcdH1cXG4zMzI0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MToyOC45NzMxMjI4NDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTAwMDkzMTA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCB0aGlzIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGlzIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhpcyBsb29wLiBUaGUgY29kZSdzIHRyeWluZyB0byBzZXQgYSBtaW5pbXVtIHNjb3JlIGxpbWl0LiBJdCdzIGFjY3VtdWxhdGluZyBzaXplcyBiYXNlZCBvbiBhIHNjb3JlIGhpc3RvZ3JhbSwgYW5kIHRoZSBsb29wIGNvbnRpbnVlcyBhcyBsb25nIGFzIHRoZSBjdW11bGF0aXZlIHNpemUgKGBjdW11bGF0ZWRfc3pgKSBpcyBsZXNzIHRoYW4gdGhlIHRhcmdldCBzaXplIChgcXVvdGEtXHUwMDNlZXN6YCkgYW5kIHRoZSBzY29yZSBpc24ndCB6ZXJvLlxuXG5XYWl0IGEgbWludXRlLCBpZiBgcXVvdGEtXHUwMDNlZXN6YCBpcyB6ZXJvLCBiZWZvcmUgdGhpcyBwYXRjaCwgdGhlIGNvbmRpdGlvbiBgY3VtdWxhdGVkX3N6IFx1MDAzZT0gcXVvdGEtXHUwMDNlZXN6YCB3b3VsZCBiZSBpbW1lZGlhdGVseSB0cnVlIGJlY2F1c2UgYGN1bXVsYXRlZF9zemAgc3RhcnRzIGF0IHplcm8uIFRoYXQgbWVhbnMgdGhlIGxvb3Agd291bGQgYnJlYWsgaW1tZWRpYXRlbHkgb24gdGhlIGZpcnN0IGl0ZXJhdGlvbiEgV2l0aCBgc2NvcmVgIGVxdWFsIHRvIGBtYXhfc2NvcmVgISBIbW1tLi4uIEJ1dCB3aGF0IGlmIGBjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXWAgaXMgemVybz8gVGhhdCB3b3VsZCByZXN1bHQgaW4gYGN1bXVsYXRlZF9zemAgcmVtYWluaW5nIHplcm8uXG5cbkhvbGQgb24gYSBzZWNvbmQsIHdoYXQncyB3aXRoIHRoYXQgYGlmIChxdW90YS1cdTAwM2Vlc3ogPT0gMCkgcmV0dXJuO2AgY2hlY2s/IFdoeSB3YXMgdGhhdCBhZGRlZD8gRG9lcyBpdCBtYXR0ZXIgdGhhdCBgcXVvdGEtXHUwMDNlbWluX3Njb3JlYCBpc24ndCB1cGRhdGVkIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGVhcmx5PyBJZiBgcXVvdGEtXHUwMDNlZXN6YCBpcyB6ZXJvLCBtYXliZSB0aGUgcXVvdGEncyBlZmZlY3RpdmVseSBkaXNhYmxlZCBhbmQgbm8gcmVnaW9ucyBjYW4gYmUgYXBwbGllZC4gSSBndWVzcyBgcXVvdGEtXHUwMDNlbWluX3Njb3JlYCBpc24ndCB1c2VkIHRoZW4uXG5cbkkgbmVlZCBtb3JlIGNvbnRleHQgaGVyZS4gV2hhdCdzIHRoZSBwdXJwb3NlIG9mIHRoaXMgcGF0Y2g/IEknbSBnb2luZyB0byBoYXZlIHRvIGNoZWNrIHRoZSBnaXQgbG9nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgaXNzdWUgdGhpcyBjb2RlIGlzIGFkZHJlc3NpbmcuIEkgbmVlZCB0byBzZWUgd2hhdCdzIGNoYW5nZWQgYW5kIHdoeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEyNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQxOjM5Ljk3NDA1Njk3NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTI2MjUxNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfYWRqdXN0X3F1b3RhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zMjc2PXN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX2VzeihzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzI4OS1cXG5tbS9kYW1vbi9jb3JlLmM6MzI5MDpzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy0zMjkxLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzczPXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzODgtXFxubW0vZGFtb24vY29yZS5jOjMzODk6XFx0XFx0ZGFtb3NfYWRqdXN0X3F1b3RhKGMsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMzkwLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6NDAuNzI2Njg3MDkyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDE1MTY0MTM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRBTU9OIEtjb25maWcgRXhwbG9yYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIERBTU9OLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB1c3VhbGx5IHRvIHVuZGVyc3RhbmQgdGhlIGhpZ2gtbGV2ZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZpcnN0LiBJJ20gbG9va2luZyBmb3IgdGhlIGNvcmUgZW5hYmxpbmcgc3dpdGNoZXMsIHRoZSBvbmVzIHRoYXQgYWN0aXZhdGUgdGhlIGZ1bmRhbWVudGFsIGZlYXR1cmVzIG9mIERBTU9OLiBTcGVjaWZpY2FsbHksIEknbSBleHBlY3RpbmcgdG8gc2VlIG9wdGlvbnMgbGlrZSBgQ09ORklHX0RBTU9OYCBvciBzb21ldGhpbmcgc2ltaWxhciwgcHJvYmFibHkgd2l0aCBzdWItb3B0aW9ucyB0byBjb250cm9sIHRoaW5ncyBsaWtlIHRoZSBkZWZhdWx0IG1vbml0b3JpbmcgZ3JhbnVsYXJpdHkgb3Igc2FtcGxpbmcgaW50ZXJ2YWxzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBlc3NlbnRpYWwgYnVpbGRpbmcgYmxvY2tzLlxuXG5BZnRlciB0aGF0LCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBkaWZmZXJlbnQgbW9uaXRvcmluZyB0YXJnZXRzLiBJcyBEQU1PTiBsaW1pdGVkIHRvIHNwZWNpZmljIG1lbW9yeSByZWdpb25zLCBvciBpcyBpdCBtb3JlIGdlbmVyYWxpemVkPyBJJ2xsIGV4cGVjdCB0byBzZWUgY29uZmlndXJhdGlvbnMgZm9yIHRhcmdldGluZyBkaWZmZXJlbnQgdHlwZXMgb2YgbWVtb3J5IChlLmcuLCBwYWdlIGNhY2hlLCBhbm9ueW1vdXMgbWVtb3J5LCBldGMuKSBhbmQgcG90ZW50aWFsbHkgZm9yIHNwZWNpZnlpbmcgZGlmZmVyZW50IG1vbml0b3Jpbmcgem9uZXMgb3IgcmFuZ2VzLiBIb3cgZ3JhbnVsYXIgY2FuIEkgZ2V0IGluIGRlZmluaW5nIHdoYXQgREFNT04gb2JzZXJ2ZXM/XG5cbk5leHQsIEknbGwgYmUgaW50ZXJlc3RlZCBpbiBob3cgREFNT04gaW50ZXJhY3RzIHdpdGggZGlmZmVyZW50IG1lbW9yeSBtYW5hZ2VtZW50IG1lY2hhbmlzbXMuIERvZXMgaXQgaGF2ZSBzcGVjaWZpYyBvcHRpb25zIHJlbGF0ZWQgdG8gTlVNQSwgaHVnZSBwYWdlcywgb3IgYW55IG90aGVyIGZlYXR1cmVzIHRoYXQgYWZmZWN0IG1lbW9yeSBhbGxvY2F0aW9uIG9yIGFjY2VzcyBwYXR0ZXJucz8gSSdsbCBwcm9iYWJseSBiZSBzZWVraW5nIHNldHRpbmdzIHRvIGZpbmUtdHVuZSBEQU1PTidzIGJlaGF2aW9yIGluIHRoZXNlIHNjZW5hcmlvcywgZW5zdXJpbmcgaXQgZG9lc24ndCBpbnRlcmZlcmUgdW5kdWx5IHdpdGggb3RoZXIgb3B0aW1pemF0aW9ucy5cblxuUGVyZm9ybWFuY2UgaXMgYWx3YXlzIGtleSwgc28gSSdsbCBiZSBleGFtaW5pbmcgdGhlIHZhcmlvdXMga25vYnMgdGhhdCBhbGxvdyBtZSB0byBiYWxhbmNlIHRoZSBvdmVyaGVhZCBvZiBEQU1PTiB3aXRoIGl0cyBtb25pdG9yaW5nIGJlbmVmaXRzLiBBcmUgdGhlcmUgb3B0aW9ucyBmb3IgY29udHJvbGxpbmcgdGhlIHNhbXBsaW5nIGZyZXF1ZW5jeSwgdGhlIHNpemUgb2YgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBvciB0aGUgc2NoZWR1bGluZyBvZiBtb25pdG9yaW5nIHRhc2tzPyBJJ2xsIHdhbnQgdG8gZmluZCBzZXR0aW5ncyB0aGF0IGxldCBtZSBtaW5pbWl6ZSBEQU1PTidzIGltcGFjdCBvbiBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBpbiBsYXRlbmN5LXNlbnNpdGl2ZSBhcHBsaWNhdGlvbnMuXG5cbkZpbmFsbHksIEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgZXhwZXJpbWVudGFsIG9yIGFkdmFuY2VkIGZlYXR1cmVzLiBBcmUgdGhlcmUgb3B0aW9ucyByZWxhdGVkIHRvIHNwZWNpZmljIHVzZSBjYXNlcywgbGlrZSBtZW1vcnkgcHJlc3N1cmUgZGV0ZWN0aW9uIG9yIHdvcmtsb2FkIGNsYXNzaWZpY2F0aW9uPyBJJ20gaG9waW5nIHRvIHNlZSBhbnkgZmxhZ3MgdGhhdCBoaW50IGF0IGZ1dHVyZSBEQU1PTiBjYXBhYmlsaXRpZXMuIEknbSBleHBlY3RpbmcgYSBjbGVhbiwgbG9naWNhbCBzdHJ1Y3R1cmUgdG8gdGhlIEtjb25maWcsIGFuZCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNvbmNpc2UgYW5kIGhlbHBmdWwgaGVscCB0ZXh0cyB0byBndWlkZSBtZSBpbiB1bmRlcnN0YW5kaW5nIGVhY2ggb3B0aW9uJ3MgcHVycG9zZSBhbmQgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDMyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6NDQuODc4MzMxNzQxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjM2NDU0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZzo2OlxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTctXFx0aGVscFxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnOjE2OlxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTc6XFx0ZGVwZW5kcyBvbiBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctMTgtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MTk6XFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXFxubW0vZGFtb24vS2NvbmZpZzoyMDpcXHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxcbm1tL2RhbW9uL0tjb25maWctMjEtXFx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6Mjg6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy0yOS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctMzAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MzE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cXG5tbS9kYW1vbi9LY29uZmlnLTMyLVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6NDA6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9kYW1vbi9LY29uZmlnLTQxLVxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbm1tL2RhbW9uL0tjb25maWc6NDI6XFx0ZGVmYXVsdCBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNDMtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NDQ6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy00NS1cXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6NDk6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9kYW1vbi9LY29uZmlnLTUwLVxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbm1tL2RhbW9uL0tjb25maWc6NTE6XFx0ZGVmYXVsdCBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNTItXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NTM6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy01NC1cXHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWc6NTc6XFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6NTg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy01OS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctNjAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NjE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxcbm1tL2RhbW9uL0tjb25maWctNjItXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZzo2OTpcXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo3MDpcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxubW0vZGFtb24vS2NvbmZpZzo3MTpcXHRkZWZhdWx0IERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy03Mi1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo3MzpcXHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxcbm1tL2RhbW9uL0tjb25maWctNzQtXFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6Nzg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy03OS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctODAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6ODE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIEt1bml0IHRlc3Qgc3VpdGUuXFxubW0vZGFtb24vS2NvbmZpZy04Mi1cXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWc6ODk6XFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo5MDpcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy05MS1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo5MjpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xcbm1tL2RhbW9uL0tjb25maWc6OTM6XFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXFxubW0vZGFtb24vS2NvbmZpZy05NC1cXHQgIHRob3NlLlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnOjEwMTpcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTAyOlxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTEwMy1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzoxMDQ6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cXG5tbS9kYW1vbi9LY29uZmlnLTEwNS1cXHQgIHByb3RlY3QgZnJlcXVlbnRseSBhY2Nlc3NlZCAoaG90KSBwYWdlcyB3aGlsZSByYXJlbHkgYWNjZXNzZWQgKGNvbGQpXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWc6MTA5OlxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxubW0vZGFtb24vS2NvbmZpZzoxMTA6XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctMTExLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjExMjpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cXG5tbS9kYW1vbi9LY29uZmlnOjExMzpcXHQgIEl0IHJ1bnMgREFNT04gYW5kIGV4cG9zZSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzIGluIHNpbXBsZSBzdGF0XFxubW0vZGFtb24vS2NvbmZpZy0xMTQtXFx0ICBtZXRyaWNzLlxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWc6MTE3OlxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxubW0vZGFtb24vS2NvbmZpZzoxMTg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZzoxMTk6XFx0ZGVmYXVsdCBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMjAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MTIxOlxcdCAgV2hldGhlciB0byBlbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0LiAgVXNlcnMgY2FuIGRpc2FibGUgaXQgaW5cXG5tbS9kYW1vbi9LY29uZmlnLTEyMi1cXHQgIGJvb3Qgb3IgcnVudGltZSB1c2luZyBpdHMgJ2VuYWJsZWQnIHBhcmFtZXRlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6NDQuOTMwNjk5OTcyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMzNjIxMTQ0NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodHMsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgZGVsdmluZyBpbnRvIHRoZSBNYWtlZmlsZSB3aXRoaW4gdGhlIE1lbW9yeSBNYW5hZ2VtZW50J3MgREFNT04gKER5bmFtaWMgQWNjZXNzIE1vbml0b3IpIHN1YnN5c3RlbTpcblxuKipEaXZpbmcgaW50byB0aGUgbW0vZGFtb24gTWFrZWZpbGUqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIE1ha2VmaWxlIHdpdGhpbiB0aGUgREFNT04gZGlyZWN0b3J5LiBNeSBpbml0aWFsIGV4cGVjdGF0aW9uIGlzIGEgZmFpcmx5IHN0YW5kYXJkIHN0cnVjdHVyZSwgYnV0IHRoZSBzcGVjaWZpY3MgYXJlIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXRzIGxpZS4gSSdtIGtlZW4gdG8gc2VlIGhvdyB0aGUgYnVpbGQgcHJvY2VzcyBpbnRlZ3JhdGVzIHRoZSBEQU1PTiBjb21wb25lbnRzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS5cblxuSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqU291cmNlIEZpbGVzOioqIFRoZSBsaXN0IG9mIHNvdXJjZSBmaWxlcyAoYCouY2AsIGAqLlNgKSB0aGF0IGNvbXByaXNlIERBTU9OLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgREFNT04gZnVuY3Rpb25hbGl0eSBpcyBtb2R1bGFyaXplZC4gV2hhdCBhcmUgdGhlIGNvcmUgY29tcG9uZW50cz8gQXJlIHRoZXkgc3BsaXQgaW50byBtb25pdG9yLCBzY2hlbWUsIG9yIG90aGVyIGFyZWFzP1xuKiAgICoqRGVwZW5kZW5jaWVzOioqIEhvdyBhcmUgdGhlIERBTU9OIG1vZHVsZXMgbGlua2VkIGFuZCBkZXBlbmRlbnQgdXBvbiBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBhbmQgbGlicmFyaWVzPyBTcGVjaWZpY2FsbHksIHdoaWNoIGhlYWRlcnMgYXJlIGluY2x1ZGVkLiBBcmUgdGhlcmUgYW55IGN1c3RvbSBjb21waWxlciBmbGFncyBvciBsaW5rZXIgc2NyaXB0cyBzcGVjaWZpYyB0byBEQU1PTidzIG5lZWRzP1xuKiAgICoqQnVpbGQgUnVsZXM6KiogVGhlIGFjdHVhbCBjb21waWxhdGlvbiBhbmQgbGlua2luZyBydWxlcy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIG1vZHVsZXMgYXJlIGJ1aWx0IGFuZCBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCBpbWFnZS4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBidWlsZHMgb3IgZmVhdHVyZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSB2aWEgS2NvbmZpZyBvcHRpb25zP1xuKiAgICoqT2JqZWN0IEZpbGVzOioqIEknbGwgbm90ZSB3aGVyZSB0aGUgb3V0cHV0IG9iamVjdCBmaWxlcyBhcmUgcGxhY2VkLlxuKiAgICoqS2J1aWxkIEludGVncmF0aW9uOioqIEknbGwgYmUgY2hlY2tpbmcgdG8gc2VlIGhvdyBEQU1PTiBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSAoS2J1aWxkKS4gQXJlIHRoZXJlIGFueSBjdXN0b20gS2J1aWxkIHZhcmlhYmxlcyBvciBmdW5jdGlvbnMgdXNlZCB0byBoYW5kbGUgc3BlY2lmaWMgREFNT04gcmVxdWlyZW1lbnRzPyBIb3cgaXMgdGhlIG1vZHVsZSBwcm9wZXJseSBsaW5rZWQgaW50byB0aGUga2VybmVsJ3MgYnVpbGQgcHJvY2Vzcz9cbiogICAqKkRvY3VtZW50YXRpb24gVGFyZ2V0czoqKiBJZGVhbGx5LCB0aGVyZSB3aWxsIGJlIHRhcmdldHMgZm9yIGdlbmVyYXRpbmcgZG9jdW1lbnRhdGlvbi4gSSBuZWVkIHRvIGdldCBxdWlja2x5IHVwIHRvIHNwZWVkIG9uIHRoZSBwdXJwb3NlIG9mIGVhY2ggZmlsZSBhbmQgY29tcG9uZW50LlxuXG5JJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHVzZSBvZiBtYWNyb3MsIHZhcmlhYmxlcywgYW5kIGluY2x1ZGUgcGF0aHMuIEFueSB0cmlja3MgdXNlZCBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgYnVpbGQtdGltZSBvcHRpbWl6YXRpb24gd2lsbCBiZSBvZiBpbnRlcmVzdC4gT3ZlcmFsbCwgdGhpcyBNYWtlZmlsZSBzaG91bGQgcGFpbnQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBEQU1PTiBpcyBhc3NlbWJsZWQgYW5kIGludGVncmF0ZWQgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgZW52aXJvbm1lbnQuIEkgd2FudCB0byBzZWUgaWYgaXQncyBmb2xsb3dpbmcgYmVzdCBwcmFjdGljZXMgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc2lnbnMgb2YgY29tcGxleCBidWlsZCBsb2dpYyB0aGF0IG1pZ2h0IGluZGljYXRlIHBvdGVudGlhbCBidWlsZCBpc3N1ZXMgb3IgbWFpbnRhaW5hYmlsaXR5IGNvbmNlcm5zIGRvd24gdGhlIGxpbmUuIExldCdzIHNlZSB3aGF0J3MgaW4gaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ0MSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQxOjQ4LjI5MjgxNjY4OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5ODIwMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29yZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL01ha2VmaWxlLTItXFxubW0vZGFtb24vTWFrZWZpbGU6MzpvYmoteVxcdFxcdFxcdFxcdDo9IGNvcmUub1xcbm1tL2RhbW9uL01ha2VmaWxlLTQtb2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVxcdCs9IG9wcy1jb21tb24ubyB2YWRkci5vXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzA1PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX212c3VtKHVuc2lnbmVkIGxvbmcgY3VycmVudF9ucixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMTgtICogYmUgYWNjZXNzZWQuICBIZW5jZSB0aGUgdmFsdWUgY2FuIGJlIGludGVycHJldGVkIGFzIHRoZSByZWxhdGl2ZSBhY2Nlc3NcXG5tbS9kYW1vbi9jb3JlLmM6MzE5OiAqIGZyZXF1ZW5jeSBzY29yZSBvZiB0aGUgcmVnaW9uIChAcikuICBUaGUgdmFsdWUgaXMgY2FsY3VsYXRlZCBhcyBhIHBzZXVkb1xcbm1tL2RhbW9uL2NvcmUuYy0zMjAtICogbW92aW5nIHN1bSwgYW5kIGhlbmNlIGl0IGlzIG5vdCBhbiBleGFjdCB2YWx1ZSBidXQganVzdCBhIGJlc3QtZWZmb3J0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQxOjQ4LjMzNzgwMjUwMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzY5NTI0MDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmc6XG5cbioqRXhhbWluaW5nIHRoZSBEQU1PTiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IERBTU9OLCB0aGUgRGF0YSBBY2Nlc3MgTU9OaXRvciwgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0aGF0IHRoZSBgb2JqLSQoQ09ORklHX0RBTU9OKSArPSBkYW1vbi9gIGxpbmUgd2l0aGluIHRoZSBgbW0vTWFrZWZpbGVgIGZpbGUgaXMgdGhlIGtleSB0byBpdHMgaW5jbHVzaW9uLiBUaGF0J3MgYSBwcmV0dHkgc3RhbmRhcmQgcGF0dGVybiBmb3Igc2VsZWN0aXZlbHkgY29tcGlsaW5nIG1vZHVsZXMgYmFzZWQgb24gYSBjb25maWd1cmF0aW9uIG9wdGlvbi4gVG8gYmUgY2VydGFpbiwgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBJJ2xsIG5lZWQgdG8gb3BlbiBhbmQgZXhhbWluZSBgbW0vTWFrZWZpbGVgIHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMgaW5kZWVkIHRoZSByZWxldmFudCBsb2NhdGlvbiBmb3IgbWFuYWdpbmcgREFNT04ncyBvYmplY3QgZmlsZXMgYW5kIHRoZWlyIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzIGZvciB0aGUgZGF0YSBtb25pdG9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTU5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6NTEuMTA3MzI5MDU0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk0NDYxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMzY9b2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSArPSBkZWJ1Z19wYWdlX3JlZi5vXFxubW0vTWFrZWZpbGU6MTM3Om9iai0kKENPTkZJR19EQU1PTikgKz0gZGFtb24vXFxubW0vTWFrZWZpbGUtMTM4LW9iai0kKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgKz0gdXNlcmNvcHkub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MTo1MS4xNTMyNzc3MjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjIyNDYxNzY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZGlzc2VjdGluZyB0aGUgYGRhbW9zX2FkanVzdF9xdW90YWAgZnVuY3Rpb24gYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gREFNT04sIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHNwZWNpZmljYWxseSBob3cgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCB3aXRoaW4gdGhlIERBTU9OIGNvbnRleHQuIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggdGhhdCBsZWFkcyB0byBpdHMgaW52b2NhdGlvbi5cblxuTXkgaW1tZWRpYXRlIHBsYW4gaXMgdG8gc3RhcnQgd2l0aCBhIHN5c3RlbWF0aWMgZXhhbWluYXRpb24uIEknbSBnb2luZyB0byBsZXZlcmFnZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0ncyBhcmNoaXRlY3R1cmUgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGRhbW9zX2FkanVzdF9xdW90YWAgZmlyc3QuIFRoZW4sIEkgd2lsbCBnZW5lcmF0ZSBvciB1c2UgZXhpc3RpbmcgY2FsbCBncmFwaHMgdG8gbWFwIG91dCB0aGUgZXhlY3V0aW9uIGZsb3csIGlkZW50aWZ5aW5nIHRoZSB1cHN0cmVhbSBmdW5jdGlvbnMgdGhhdCBldmVudHVhbGx5IGNhbGwgYGRhbW9zX2FkanVzdF9xdW90YWAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSBjbGVhciBwaWN0dXJlIG9mIHdoZW4sIHdoZXJlLCBhbmQgd2h5IHRoaXMgcXVvdGEgYWRqdXN0bWVudCBpcyB0YWtpbmcgcGxhY2Ugd2l0aGluIHRoZSBicm9hZGVyIERBTU9OIGZyYW1ld29yay4gSSdtIGxvb2tpbmcgZm9yIHRoZSBrZXkgdHJpZ2dlcnMgYW5kIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGV0ZXJtaW5lIHdoZW4gdGhlIHF1b3RhIG5lZWRzIG1vZGlmaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ3MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQxOjUzLjM3Nzg5ODk5N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk1ODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzcwOlxcdFxcdHRyYWNlX2NhbGxfX2RhbW9zX3N0YXRfYWZ0ZXJfYXBwbHlfaW50ZXJ2YWwoY2lkeCwgc2lkeCwgXFx1MDAyNnMtXFx1MDAzZXN0YXQpO1xcbjMzNzE6XFx0fVxcbjMzNzI6XFx0XFxuMzM3MzpcXHRzdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4zMzc0OlxcdHtcXG4zMzc1OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuMzM3NjpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnM7XFxuMzM3NzpcXHRcXHRib29sIGhhc19zY2hlbWVzX3RvX2FwcGx5ID0gZmFsc2U7XFxuMzM3ODpcXHRcXHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3o7XFxuMzM3OTpcXHRcXG4zMzgwOlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XFxuMzM4MTpcXHRcXHRcXHRpZiAodGltZV9iZWZvcmUoYy1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIHMtXFx1MDAzZW5leHRfYXBwbHlfc2lzKSlcXG4zMzgyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMzODM6XFx0XFxuMzM4NDpcXHRcXHRcXHRpZiAoIXMtXFx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQpXFxuMzM4NTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zMzg2OlxcdFxcbjMzODc6XFx0XFx0XFx0aGFzX3NjaGVtZXNfdG9fYXBwbHkgPSB0cnVlO1xcbjMzODg6XFx0XFxuMzM4OTpcXHRcXHRcXHRkYW1vc19hZGp1c3RfcXVvdGEoYywgcyk7XFxuMzM5MDpcXHRcXHR9XFxuMzM5MTpcXHRcXG4zMzkyOlxcdFxcdGlmICghaGFzX3NjaGVtZXNfdG9fYXBwbHkpXFxuMzM5MzpcXHRcXHRcXHRyZXR1cm47XFxuMzM5NDpcXHRcXG4zMzk1OlxcdFxcdG1heF9yZWdpb25fc3ogPSBkYW1vbl9yZWdpb25fc3pfbGltaXQoYyk7XFxuMzM5NjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjLVxcdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XFxuMzM5NzpcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xcbjMzOTg6XFx0XFx0XFx0aWYgKGMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQgXFx1MDAyNlxcdTAwMjYgYy1cXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSkge1xcbjMzOTk6XFx0XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4zNDAwOlxcdFxcdFxcdFxcdFxcdGlmIChzLVxcdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gIT0gdClcXG4zNDAxOlxcdFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjM0MDI6XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG4zNDAzOlxcdFxcdFxcdFxcdFxcdHMtXFx1MDAzZXF1b3RhLmNoYXJnZV9hZGRyX2Zyb20gPSAwO1xcbjM0MDQ6XFx0XFx0XFx0XFx0fVxcbjM0MDU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzQwNjpcXHRcXHRcXHR9XFxuMzQwNzpcXHRcXHRcXHRkYW1vc19hcHBseV90YXJnZXQoYywgdCwgbWF4X3JlZ2lvbl9zeik7XFxuMzQwODpcXHRcXHR9XFxuMzQwOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6NTMuMzc5NTk4OTY3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzMzU4NTQ1MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKlRyYWNpbmcgdGhlIENhbGxlcnMgb2YgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gVGhlIGltbWVkaWF0ZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGZ1bmN0aW9uJ3MgY2FsbHMgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3Igd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIHNlYXJjaCBmb3IgaXRzIHVzYWdlIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBlbnRyeSBwb2ludHMgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gaXRzIGltcGFjdC4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBkZWJ1Z2dpbmcgb3IgbW9kaWZpY2F0aW9uOyB3aXRob3V0IGtub3dpbmcgd2hvJ3MgdXNpbmcgaXQsIEkgY2FuJ3QgYmUgc3VyZSBvZiB3aGF0IHdpbGwgaGFwcGVuIGlmIEkgY2hhbmdlIGl0LiBJJ2xsIG5lZWQgdG8ga25vdyBub3Qgb25seSB3aGVyZSBpdCBpcyBjYWxsZWQsIGJ1dCBob3cgaXQgaXMgYmVpbmcgdXNlZCBpbiBlYWNoIG9mIHRob3NlIGNvbnRleHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM4MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6NTUuNzE1NDU1OTQ5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM0NDMxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrZGFtb25kX2FwcGx5X3NjaGVtZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTMzNTc9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2Vfc3RhdChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzM3Mi1cXG5tbS9kYW1vbi9jb3JlLmM6MzM3MzpzdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG5tbS9kYW1vbi9jb3JlLmMtMzM3NC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzkwNj1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zOTgyLVxcdFxcdC8qXFxubW0vZGFtb24vY29yZS5jOjM5ODM6XFx0XFx0ICogZG8ga2RhbW9uZF9jYWxsKCkgYW5kIGtkYW1vbmRfYXBwbHlfc2NoZW1lcygpIGFmdGVyXFxubW0vZGFtb24vY29yZS5jLTM5ODQtXFx0XFx0ICoga2RhbW9uZF9tZXJnZV9yZWdpb25zKCkgaWYgcG9zc2libGUsIHRvIHJlZHVjZSBvdmVyaGVhZFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5OTctXFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZjdHgtXFx1MDAzZXNjaGVtZXMpKVxcbm1tL2RhbW9uL2NvcmUuYzozOTk4OlxcdFxcdFxcdGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0zOTk5LVxcdFxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6NTUuNzYxODExNjYyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMyNDc4NDU5MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgREFNT04gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBrZGFtb25kX2ZuYCwgdGhhdCdzIHRoZSBrdGhyZWFkIGF0IHRoZSBoZWFydCBvZiB0aGUgREFNT04gZGFlbW9uLCByaWdodD8gTm93LCBob3cgZXhhY3RseSBkb2VzIHVzZXIgc3BhY2UgZ2V0IHRvIGNvbnRyb2wgdGhpcyBiZWFzdD8gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBzeXNmcyBpbnRlcmZhY2UsIHNwZWNpZmljYWxseSB0aGF0IGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi8uLi5gIGRpcmVjdG9yeSBleHBvc2VkIGJ5IGBDT05GSUdfREFNT05fU1lTRlNgLlxuXG5Db3VsZCBzeXprYWxsZXIgaW50ZXJhY3Qgd2l0aCB0aGVzZSBzeXNmcyBmaWxlcz8gT2YgY291cnNlISBTeXprYWxsZXIgaGFzIHRob3NlIHBzZXVkby1zeXNjYWxscyBhbmQgc3lzZnMgZGVzY3JpcHRpb25zLCBvciBpdCBjYW4gYmUgbWFkZSB0byB3cml0ZSBkaXJlY3RseSB0byB0aGVzZSBmaWxlcy4gSG1tbSwgSSBzaG91bGQgcXVpY2tseSBjaGVjayBpZiB3ZSd2ZSBhbHJlYWR5IGdvdCBEQU1PTiBkZXNjcmlwdGlvbnMgaW4gdGhlIHN5emthbGxlciByZXBvLiAoQWN0dWFsbHksIEkgY2FuJ3QgZ3JlcCB0aGUgc3l6a2FsbGVyIHJlcG8gZnJvbSBoZXJlLCBiZWNhdXNlIHRoZSB0b29sIEknbSB1c2luZyBpcyBrZXJuZWwgZ3JlcCwgYnV0IEknbSBwcmV0dHkgc3VyZSBzeXprYWxsZXIgZG9lcyBoYXZlIC9zeXMva2VybmVsL21tL2RhbW9uIHN1cHBvcnQgYW55d2F5LilcblxuV2FpdCBhIHNlY29uZCwgYmVmb3JlIEkgZ2V0IHRvbyBmYXIgYWhlYWQsIGxldCBtZSBtYWtlIHN1cmUgdGhlIHN5c2ZzIGludGVyZmFjZSBpcyBhY3R1YWxseSBjYXBhYmxlIG9mIGNvbmZpZ3VyaW5nIERBTU9OLCBzZXR0aW5nIHVwIHNjaGVtZXMgYW5kIHF1b3RhcywgYW5kIHN0YXJ0aW5nIGBrZGFtb25kYC5cblxuT2theSwgdGltZSB0byBjcmFjayBvcGVuIGBtbS9kYW1vbi9zeXNmcy5jYCBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkxOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MTo1OS4wMDk2NjAxOTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjQxNTgxMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2RhbW9uZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6NTkuMTE2MDgxMjQ5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4NzA5NjExMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBEYW1vbiBTdWJzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQgd2l0aGluIHRoZSBgbW0vZGFtb24vYCBkaXJlY3RvcnkuIEkgd2FudCB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIERBTU9OIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB3aGF0IGZpbGVzIGFuZCwgdGhlcmVmb3JlLCB3aGljaCBjb21wb25lbnRzIGFuZCBmdW5jdGlvbmFsaXRpZXMsIGFyZSBwcmVzZW50LiBUaGlzIHdpbGwgcHJvdmlkZSBhIGNydWNpYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBkZWVwZXIgYW5hbHlzaXMgb3IgcG90ZW50aWFsIHdvcmsgSSBoYXZlIHRvIGRvLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbWFwIG9mIHRoZSBzeXN0ZW0gYW5kIHNlZSBpZiBhbnkgcmVjZW50IGNoYW5nZXMgYXJlIGltbWVkaWF0ZWx5IGFwcGFyZW50LiBJdCdzIGEgcXVpY2sgYW5kIGRpcnR5IHdheSB0byBhc3Nlc3MgdGhlIGxhbmRzY2FwZSBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gYW55IHNwZWNpZmljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0MjcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MjowMC45ODcwNDU0NjdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImNvcmUuY1wiLFxuICAgIFwibHJ1X3NvcnQuY1wiLFxuICAgIFwibW9kdWxlcy1jb21tb24uY1wiLFxuICAgIFwibW9kdWxlcy1jb21tb24uaFwiLFxuICAgIFwib3BzLWNvbW1vbi5jXCIsXG4gICAgXCJvcHMtY29tbW9uLmhcIixcbiAgICBcInBhZGRyLmNcIixcbiAgICBcInJlY2xhaW0uY1wiLFxuICAgIFwic3RhdC5jXCIsXG4gICAgXCJzeXNmcy1jb21tb24uY1wiLFxuICAgIFwic3lzZnMtY29tbW9uLmhcIixcbiAgICBcInN5c2ZzLXNjaGVtZXMuY1wiLFxuICAgIFwic3lzZnMuY1wiLFxuICAgIFwidmFkZHIuY1wiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBbXG4gICAgXCJ0ZXN0c1wiXG4gIF1cbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQyOjAwLjk4NzExOTc2N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDk2MzA2NjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmaWxlcy4uLlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgc3lzZnMgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHN5c2ZzIGltcGxlbWVudGF0aW9uLCBhbmQgdGhlIGNvcmUgZmlsZXMgYXJlIGp1bXBpbmcgb3V0IGF0IG1lLiBJIHNlZSBgc3lzZnMuY2AsIHdoaWNoIGlzIHByb2JhYmx5IHRoZSBoZWFydCBvZiB0aGUgYmVhc3QsIGhhbmRsaW5nIHRoZSBmdW5kYW1lbnRhbCBpbnRlcmFjdGlvbnMuIFRoZW4gdGhlcmUncyBgc3lzZnMtc2NoZW1lcy5jYCAtIHRoYXQgb25lJ3MgaW50ZXJlc3RpbmcsIHByb2JhYmx5IGRlZmluaW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIG1ldGhvZHMgdGhhdCBhcmUgZXhwb3NlZCB0aHJvdWdoIHN5c2ZzLiBgc3lzZnMtY29tbW9uLmNgIGlzIGxpa2VseSBjb250YWluaW5nIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCBzaGFyZWQgY29kZSB1c2VkIGFjcm9zcyB0aGUgc3lzdGVtLiBBbmQgb2YgY291cnNlLCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgcGllY2VzLCBgcmVjbGFpbS5jYCBhbmQgYGxydV9zb3J0LmNgIGFyZSBwcmVzZW50IHRvby5cblxuSSdtIGxlYW5pbmcgdG93YXJkcyBmb2N1c2luZyBvbiB0aGUgXCJzY2hlbWVzXCIgZmlsZSBmaXJzdCAtIGBzeXNmcy1zY2hlbWVzLmNgLiBHaXZlbiB0aGUgbmFtaW5nLCB0aGF0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCB0aGUgXCJjb250cmFjdFwiIG9mIHdoYXQgY2FuIGJlIGFjY2Vzc2VkIHZpYSBzeXNmcywgdGhlIGRlZmluaXRpb24gb2YgdGhlIGF0dHJpYnV0ZXMsIG9yIG1heWJlIHRoZSBsYXlvdXQgb2YgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuIFVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIHRoZXJlIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHdob2xlIHRoaW5nLiBMZXQgbWUgc3RhcnQgdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3NDQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6MDQuNDgzNDI4NTcyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE1OTQwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxdW90YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1OTggbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjA1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3dhdGVybWFya3Nfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIxMS0vKlxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjEyOiAqIHF1b3RhIGdvYWwgZGlyZWN0b3J5XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTMtICovXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMTU6c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjE2LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMTc6XFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWM7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTgtXFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWU7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIyMy1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIyNDpzdGF0aWMgc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfYWxsb2Modm9pZClcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIyNS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMjY6XFx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIyNy19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIyOT1zdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjMwOlxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjMxLVxcdGNoYXIgKm5hbWU7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTI3OD1zdGF0aWMgc3NpemVfdCB0YXJnZXRfbWV0cmljX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI4MC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyODE6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI4MjpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyODMtXFx0aW50IGk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTI5NT1zdGF0aWMgc3NpemVfdCB0YXJnZXRfbWV0cmljX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyOTcte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjk4OlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyOTk6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzAwLVxcdGludCBpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEzMTQ9c3RhdGljIHNzaXplX3QgdGFyZ2V0X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMxNi17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMTc6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMTg6XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMTktXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTMyMz1zdGF0aWMgc3NpemVfdCB0YXJnZXRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMyNS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMjY6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMjc6XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMjgtXFx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXFx1MDAyNmdvYWwtXFx1MDAzZXRhcmdldF92YWx1ZSk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTMzMz1zdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzNS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMzY6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMzc6XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzgtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTM0Mj1zdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNDQte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzQ1OlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzQ2OlxcdFxcdFxcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzQ3LVxcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFxcdTAwMjZnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzUzPXN0YXRpYyBzc2l6ZV90IG5pZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNTUte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzU2OlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzU3OlxcdFxcdFxcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzU4LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEzNjM9c3RhdGljIHNzaXplX3QgbmlkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNjUte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzY2OlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzY3OlxcdFxcdFxcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzY4LVxcdGludCBlcnIgPSBrc3RydG9pbnQoYnVmLCAwLCBcXHUwMDI2Z29hbC1cXHUwMDNlbmlkKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzc0PXN0YXRpYyBzc2l6ZV90IHBhdGhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzc2LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM3NzpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzc4OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM3OS1cXHRpbnQgbGVuO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEzODg9c3RhdGljIHNzaXplX3QgcGF0aF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzkwLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM5MTpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzkyOlxcdFxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM5My1cXHRjaGFyICpwYXRoID0ga21hbGxvY19hcnJheShzaXplX2FkZChjb3VudCwgMSksIHNpemVvZigqcGF0aCksXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQwOS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQxMDpzdGF0aWMgdm9pZCBkYW1vc19zeXNmc19xdW90YV9nb2FsX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MTEte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDEyOlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MTM6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDE0LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MTgtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MTk6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX3RhcmdldF9tZXRyaWNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjAtXFx0XFx0X19BVFRSX1JXX01PREUodGFyZ2V0X21ldHJpYywgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjEtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjI6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX3RhcmdldF92YWx1ZV9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyMy1cXHRcXHRfX0FUVFJfUldfTU9ERSh0YXJnZXRfdmFsdWUsIDA2MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDI0LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDI1OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDI2LVxcdFxcdF9fQVRUUl9SV19NT0RFKGN1cnJlbnRfdmFsdWUsIDA2MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDI3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDI4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9uaWRfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjktXFx0XFx0X19BVFRSX1JXX01PREUobmlkLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQzMC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzMTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfcGF0aF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQzMi1cXHRcXHRfX0FUVFJfUldfTU9ERShwYXRoLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQzMy1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzNDpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9hdHRyc1tdID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDM1OlxcdFxcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX3RhcmdldF9tZXRyaWNfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDM2OlxcdFxcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX3RhcmdldF92YWx1ZV9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0Mzc6XFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZV9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0Mzg6XFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfbmlkX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzOTpcXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9wYXRoX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ0MC1cXHROVUxMLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDQxLX07XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NDI6QVRUUklCVVRFX0dST1VQUyhkYW1vc19zeXNmc19xdW90YV9nb2FsKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ0My1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ0NDpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDQ1OlxcdC5yZWxlYXNlID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDQ2LVxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NDc6XFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9ncm91cHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NDgtfTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDUwLS8qXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NTE6ICogcXVvdGEgZ29hbHMgZGlyZWN0b3J5XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NTItICovXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NTMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NTQ6c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ1NS1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDU2OlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICoqZ29hbHNfYXJyO1xcdC8qIGNvdW50ZWQgYnkgbnIgKi9cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ1Ny1cXHRpbnQgbnI7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ1OS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2MDpzdGF0aWMgc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpkYW1vc19zeXNmc19xdW90YV9nb2Fsc19hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDYxLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2MjpcXHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ2My19XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NjQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NjU6c3RhdGljIHZvaWQgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcm1fZGlycyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2NjpcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKmdvYWxzKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDY3LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2ODpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqKmdvYWxzX2FyciA9IGdvYWxzLVxcdTAwM2Vnb2Fsc19hcnI7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NjktXFx0aW50IGk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ3OS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ4MDpzdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2FkZF9kaXJzKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDgxOlxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FscyAqZ29hbHMsIGludCBucl9nb2FscylcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ4Mi17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0ODM6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKipnb2Fsc19hcnIsICpnb2FsO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDg0LVxcdGludCBlcnIsIGk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0ODUtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0ODY6XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcm1fZGlycyhnb2Fscyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0ODctXFx0aWYgKCFucl9nb2FscylcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDk2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9nb2FsczsgaSsrKSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0OTc6XFx0XFx0Z29hbCA9IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfYWxsb2MoKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ5OC1cXHRcXHRpZiAoIWdvYWwpIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ5OTpcXHRcXHRcXHRkYW1vc19zeXNmc19xdW90YV9nb2Fsc19ybV9kaXJzKGdvYWxzKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUwMC1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTAzLVxcdFxcdGVyciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFxcdTAwMjZnb2FsLVxcdTAwM2Vrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTA0OlxcdFxcdFxcdFxcdFxcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX2t0eXBlLCBcXHUwMDI2Z29hbHMtXFx1MDAzZWtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MDUtXFx0XFx0XFx0XFx0XFxcIiVkXFxcIiwgaSk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUwNy1cXHRcXHRcXHRrb2JqZWN0X3B1dChcXHUwMDI2Z29hbC1cXHUwMDNla29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MDg6XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcm1fZGlycyhnb2Fscyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MDktXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNTE4PXN0YXRpYyBzc2l6ZV90IG5yX2dvYWxzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUyMC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MjE6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpnb2FscyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTIyOlxcdFxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2Fscywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MjMtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTUyNz1zdGF0aWMgc3NpemVfdCBucl9nb2Fsc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTI5LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTUzMDpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKmdvYWxzO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTMxLVxcdGludCBuciwgZXJyID0ga3N0cnRvaW50KGJ1ZiwgMCwgXFx1MDAyNm5yKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTM3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTM4OlxcdGdvYWxzID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2Fscywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MzktXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU0MS1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTQyOlxcdGVyciA9IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2FkZF9kaXJzKGdvYWxzLCBucik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NDMtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTQ5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTUwOnN0YXRpYyB2b2lkIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NTEte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTUyOlxcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMsIGtvYmopKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU1My19XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NTQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NTU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19ucl9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU1Ni1cXHRcXHRfX0FUVFJfUldfTU9ERShucl9nb2FscywgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NTctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NTg6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2F0dHJzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NTk6XFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX25yX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU2MC1cXHROVUxMLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTYxLX07XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NjI6QVRUUklCVVRFX0dST1VQUyhkYW1vc19zeXNmc19xdW90YV9nb2Fscyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NjMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NjU6XFx0LnJlbGVhc2UgPSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTY2LVxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1Njc6XFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfZ3JvdXBzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTY4LX07XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTY3ND1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc193ZWlnaHRzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2ODAtLypcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTY4MTogKiBxdW90YXMgZGlyZWN0b3J5XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2ODItICovXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2ODMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2ODQ6c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2ODUtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTY4Ni1cXHRzdHJ1Y3QgZGFtb25fc3lzZnNfd2VpZ2h0cyAqd2VpZ2h0cztcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTY4NzpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKmdvYWxzO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjg4LVxcdHVuc2lnbmVkIGxvbmcgbXM7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTY5MC1cXHR1bnNpZ25lZCBsb25nIHJlc2V0X2ludGVydmFsX21zO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNjkxOlxcdHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3N6O1xcdC8qIEVmZmVjdGl2ZSBzaXplIHF1b3RhIGluIGJ5dGVzICovXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2OTI6XFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIGdvYWxfdHVuZXI7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2OTMtXFx0dW5zaWduZWQgaW50IGZhaWxfY2hhcmdlX251bTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjk2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNjk3OnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpkYW1vbl9zeXNmc19xdW90YXNfYWxsb2Modm9pZClcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTY5OC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2OTk6XFx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzAwLX1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTcwMS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTcwMjpzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3F1b3Rhc19hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MDMte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzA0LVxcdHN0cnVjdCBkYW1vbl9zeXNmc193ZWlnaHRzICp3ZWlnaHRzO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzA1OlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FscyAqZ29hbHM7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MDYtXFx0aW50IGVycjtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzEyLVxcdGVyciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFxcdTAwMjZ3ZWlnaHRzLVxcdTAwM2Vrb2JqLCBcXHUwMDI2ZGFtb25fc3lzZnNfd2VpZ2h0c19rdHlwZSxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTcxMzpcXHRcXHRcXHRcXHUwMDI2cXVvdGFzLVxcdTAwM2Vrb2JqLCBcXFwid2VpZ2h0c1xcXCIpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzE0LVxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzE3LVxcdH1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTcxODpcXHRxdW90YXMtXFx1MDAzZXdlaWdodHMgPSB3ZWlnaHRzO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzE5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzIwOlxcdGdvYWxzID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfYWxsb2MoKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTcyMS1cXHRpZiAoIWdvYWxzKSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTcyNS1cXHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcXHUwMDI2Z29hbHMtXFx1MDAzZWtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3MjY6XFx0XFx0XFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2t0eXBlLCBcXHUwMDI2cXVvdGFzLVxcdTAwM2Vrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzI3LVxcdFxcdFxcdFxcXCJnb2Fsc1xcXCIpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MzEtXFx0fSBlbHNlIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTczMjpcXHRcXHRxdW90YXMtXFx1MDAzZWdvYWxzID0gZ29hbHM7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MzMtXFx0fVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MzctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3Mzg6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfcXVvdGFzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzM5LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc0MDpcXHRrb2JqZWN0X3B1dChcXHUwMDI2cXVvdGFzLVxcdTAwM2V3ZWlnaHRzLVxcdTAwM2Vrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc0MTpcXHRkYW1vc19zeXNmc19xdW90YV9nb2Fsc19ybV9kaXJzKHF1b3Rhcy1cXHUwMDNlZ29hbHMpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzQyOlxcdGtvYmplY3RfcHV0KFxcdTAwMjZxdW90YXMtXFx1MDAzZWdvYWxzLVxcdTAwM2Vrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc0My19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTc0NT1zdGF0aWMgc3NpemVfdCBtc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc0Ny17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3NDg6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3NDk6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3NTAtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3NTE6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWx1XFxcXG5cXFwiLCBxdW90YXMtXFx1MDAzZW1zKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc1Mi19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTc1ND1zdGF0aWMgc3NpemVfdCBtc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3NTYte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzU3OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKnF1b3RhcyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzU4OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzU5OlxcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFxcdTAwMjZxdW90YXMtXFx1MDAzZW1zKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc2MC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNzY2PXN0YXRpYyBzc2l6ZV90IGJ5dGVzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzY4LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc2OTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc3MDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc3MS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc3MjpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbHVcXFxcblxcXCIsIHF1b3Rhcy1cXHUwMDNlc3opO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzczLX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNzc1PXN0YXRpYyBzc2l6ZV90IGJ5dGVzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3Nzcte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzc4OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKnF1b3RhcyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzc5OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzgwOlxcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFxcdTAwMjZxdW90YXMtXFx1MDAzZXN6KTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc4MS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNzg3PXN0YXRpYyBzc2l6ZV90IHJlc2V0X2ludGVydmFsX21zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc4OS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3OTA6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3OTE6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3OTItXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3OTM6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWx1XFxcXG5cXFwiLCBxdW90YXMtXFx1MDAzZXJlc2V0X2ludGVydmFsX21zKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc5NC19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTc5Nj1zdGF0aWMgc3NpemVfdCByZXNldF9pbnRlcnZhbF9tc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzk4LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc5OTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTgwMDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTgwMTpcXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcXHUwMDI2cXVvdGFzLVxcdTAwM2VyZXNldF9pbnRlcnZhbF9tcyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4MDItXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTgwOD1zdGF0aWMgc3NpemVfdCBlZmZlY3RpdmVfYnl0ZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODEwLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTgxMTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTgxMjpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTgxMy1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTgxNDpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbHVcXFxcblxcXCIsIHF1b3Rhcy1cXHUwMDNlZWZmZWN0aXZlX3N6KTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTgxNS19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTgxNz1zdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfdHVuZXJfbmFtZSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4MTg6XFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHR1bmVyO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODE5LVxcdGNoYXIgKm5hbWU7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTgzMz1zdGF0aWMgc3NpemVfdCBnb2FsX3R1bmVyX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTgzNS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4MzY6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4Mzc6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4MzgtXFx0aW50IGk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTg0My1cXHRcXHR0dW5lcl9uYW1lID0gXFx1MDAyNmRhbW9zX3N5c2ZzX3Fnb2FsX3R1bmVyX25hbWVzW2ldO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxODQ0OlxcdFxcdGlmICh0dW5lcl9uYW1lLVxcdTAwM2V0dW5lciA9PSBxdW90YXMtXFx1MDAzZWdvYWxfdHVuZXIpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4NDUtXFx0XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXNcXFxcblxcXCIsIHR1bmVyX25hbWUtXFx1MDAzZW5hbWUpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE4NTA9c3RhdGljIHNzaXplX3QgZ29hbF90dW5lcl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODUyLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTg1MzpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTg1NDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTg1NS1cXHRpbnQgaTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODYxLVxcdFxcdGlmIChzeXNmc19zdHJlcShidWYsIHR1bmVyX25hbWUtXFx1MDAzZW5hbWUpKSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4NjI6XFx0XFx0XFx0cXVvdGFzLVxcdTAwM2Vnb2FsX3R1bmVyID0gdHVuZXJfbmFtZS1cXHUwMDNldHVuZXI7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4NjMtXFx0XFx0XFx0cmV0dXJuIGNvdW50O1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE4Njk9c3RhdGljIHNzaXplX3QgZmFpbF9jaGFyZ2VfbnVtX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTg3MS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4NzI6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4NzM6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4NzQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4NzU6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXVcXFxcblxcXCIsIHF1b3Rhcy1cXHUwMDNlZmFpbF9jaGFyZ2VfbnVtKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTg3Ni19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTg3OD1zdGF0aWMgc3NpemVfdCBmYWlsX2NoYXJnZV9udW1fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTg4MC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4ODE6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4ODI6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4ODM6XFx0aW50IGVyciA9IGtzdHJ0b3VpbnQoYnVmLCAwLCBcXHUwMDI2cXVvdGFzLVxcdTAwM2VmYWlsX2NoYXJnZV9udW0pO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODg0LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE4OTA9c3RhdGljIHNzaXplX3QgZmFpbF9jaGFyZ2VfZGVub21fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODkyLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTg5MzpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTg5NDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTg5NS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTg5NjpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwgcXVvdGFzLVxcdTAwM2VmYWlsX2NoYXJnZV9kZW5vbSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4OTctfVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE4OTk9c3RhdGljIHNzaXplX3QgZmFpbF9jaGFyZ2VfZGVub21fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkwMS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5MDI6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5MDM6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5MDQ6XFx0aW50IGVyciA9IGtzdHJ0b3VpbnQoYnVmLCAwLCBcXHUwMDI2cXVvdGFzLVxcdTAwM2VmYWlsX2NoYXJnZV9kZW5vbSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MDUtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkxMC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTkxMTpzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19xdW90YXNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkxMi17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5MTM6XFx0a2ZyZWUoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMsIGtvYmopKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkxNC19XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MTUtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5MTY6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19xdW90YXNfbXNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MTctXFx0XFx0X19BVFRSX1JXX01PREUobXMsIDA2MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTE4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTE5OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfcXVvdGFzX3N6X2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTIwLVxcdFxcdF9fQVRUUl9SV19NT0RFKGJ5dGVzLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkyMS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTkyMjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3F1b3Rhc19yZXNldF9pbnRlcnZhbF9tc19hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkyMy1cXHRcXHRfX0FUVFJfUldfTU9ERShyZXNldF9pbnRlcnZhbF9tcywgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MjQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5MjU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19xdW90YXNfZWZmZWN0aXZlX2J5dGVzX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTI2LVxcdFxcdF9fQVRUUl9ST19NT0RFKGVmZmVjdGl2ZV9ieXRlcywgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MjctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5Mjg6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19xdW90YXNfZ29hbF90dW5lcl9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkyOS1cXHRcXHRfX0FUVFJfUldfTU9ERShnb2FsX3R1bmVyLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkzMC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTkzMTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3F1b3Rhc19mYWlsX2NoYXJnZV9udW1fYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MzItXFx0XFx0X19BVFRSX1JXX01PREUoZmFpbF9jaGFyZ2VfbnVtLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkzMy1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTkzNDpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3F1b3Rhc19mYWlsX2NoYXJnZV9kZW5vbV9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkzNS1cXHRcXHRfX0FUVFJfUldfTU9ERShmYWlsX2NoYXJnZV9kZW5vbSwgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MzYtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5Mzc6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3F1b3Rhc19hdHRyc1tdID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTM4OlxcdFxcdTAwMjZkYW1vbl9zeXNmc19xdW90YXNfbXNfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTM5OlxcdFxcdTAwMjZkYW1vbl9zeXNmc19xdW90YXNfc3pfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTQwOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19xdW90YXNfcmVzZXRfaW50ZXJ2YWxfbXNfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTQxOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19xdW90YXNfZWZmZWN0aXZlX2J5dGVzX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTk0MjpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfcXVvdGFzX2dvYWxfdHVuZXJfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTQzOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19xdW90YXNfZmFpbF9jaGFyZ2VfbnVtX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTk0NDpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfcXVvdGFzX2ZhaWxfY2hhcmdlX2Rlbm9tX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk0NS1cXHROVUxMLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTQ2LX07XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5NDc6QVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19xdW90YXMpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTQ4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTQ5OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3F1b3Rhc19rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTk1MDpcXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3F1b3Rhc19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTUxLVxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5NTI6XFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfcXVvdGFzX2dyb3VwcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk1My19O1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIyNTQ9c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjI1OC1cXHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMjU5OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKnF1b3RhcztcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjI2MC1cXHRzdHJ1Y3QgZGFtb25fc3lzZnNfd2F0ZXJtYXJrcyAqd2F0ZXJtYXJrcztcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMzYxPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfc2V0X2Rlc3RzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnNjaGVtZSlcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzc2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzc3OnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2NoZW1lX3NldF9xdW90YXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc2NoZW1lKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzc4LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjM3OTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMgPSBkYW1vbl9zeXNmc19xdW90YXNfYWxsb2MoKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjM4MC1cXHRpbnQgZXJyO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzgxLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzgyOlxcdGlmICghcXVvdGFzKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzgzLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzg0OlxcdGVyciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFxcdTAwMjZxdW90YXMtXFx1MDAzZWtvYmosIFxcdTAwMjZkYW1vbl9zeXNmc19xdW90YXNfa3R5cGUsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzODU6XFx0XFx0XFx0XFx1MDAyNnNjaGVtZS1cXHUwMDNla29iaiwgXFxcInF1b3Rhc1xcXCIpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzg2LVxcdGlmIChlcnIpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzODctXFx0XFx0Z290byBvdXQ7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzODg6XFx0ZXJyID0gZGFtb25fc3lzZnNfcXVvdGFzX2FkZF9kaXJzKHF1b3Rhcyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzODktXFx0aWYgKGVycilcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjM5MC1cXHRcXHRnb3RvIG91dDtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjM5MTpcXHRzY2hlbWUtXFx1MDAzZXF1b3RhcyA9IHF1b3RhcztcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjM5Mi1cXHRyZXR1cm4gMDtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzk0LW91dDpcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjM5NTpcXHRrb2JqZWN0X3B1dChcXHUwMDI2cXVvdGFzLVxcdTAwM2Vrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjM5Ni1cXHRyZXR1cm4gZXJyO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI1MDI9c3RhdGljIGludCBkYW1vbl9zeXNmc19zY2hlbWVfYWRkX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc2NoZW1lKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1MTEtXFx0XFx0Z290byBybWRpcl9wdXRfYWNjZXNzX3BhdHRlcm5fb3V0O1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTEyOlxcdGVyciA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9zZXRfcXVvdGFzKHNjaGVtZSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1MTMtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTE2LVxcdGlmIChlcnIpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1MTc6XFx0XFx0Z290byBybWRpcl9wdXRfcXVvdGFzX2FjY2Vzc19wYXR0ZXJuX291dDtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUxOC1cXHRlcnIgPSBkYW1vc19zeXNmc19zZXRfZmlsdGVyX2RpcnMoc2NoZW1lKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUxOS1cXHRpZiAoZXJyKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTIwOlxcdFxcdGdvdG8gcHV0X3dhdGVybWFya3NfcXVvdGFzX2FjY2Vzc19wYXR0ZXJuX291dDtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUyMS1cXHRlcnIgPSBkYW1vbl9zeXNmc19zY2hlbWVfc2V0X3N0YXRzKHNjaGVtZSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1MjItXFx0aWYgKGVycilcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjUyMzpcXHRcXHRnb3RvIHB1dF9maWx0ZXJzX3dhdGVybWFya3NfcXVvdGFzX2FjY2Vzc19wYXR0ZXJuX291dDtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUyNC1cXHRlcnIgPSBkYW1vbl9zeXNmc19zY2hlbWVfc2V0X3RyaWVkX3JlZ2lvbnMoc2NoZW1lKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTMxLVxcdHNjaGVtZS1cXHUwMDNlc3RhdHMgPSBOVUxMO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTMyOnB1dF9maWx0ZXJzX3dhdGVybWFya3NfcXVvdGFzX2FjY2Vzc19wYXR0ZXJuX291dDpcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUzMy1cXHRrb2JqZWN0X3B1dChcXHUwMDI2c2NoZW1lLVxcdTAwM2VvcHNfZmlsdGVycy1cXHUwMDNla29iaik7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUzOC1cXHRzY2hlbWUtXFx1MDAzZWZpbHRlcnMgPSBOVUxMO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTM5OnB1dF93YXRlcm1hcmtzX3F1b3Rhc19hY2Nlc3NfcGF0dGVybl9vdXQ6XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1NDAtXFx0a29iamVjdF9wdXQoXFx1MDAyNnNjaGVtZS1cXHUwMDNld2F0ZXJtYXJrcy1cXHUwMDNla29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1NDEtXFx0c2NoZW1lLVxcdTAwM2V3YXRlcm1hcmtzID0gTlVMTDtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU0MjpybWRpcl9wdXRfcXVvdGFzX2FjY2Vzc19wYXR0ZXJuX291dDpcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU0MzpcXHRkYW1vbl9zeXNmc19xdW90YXNfcm1fZGlycyhzY2hlbWUtXFx1MDAzZXF1b3Rhcyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1NDQ6XFx0a29iamVjdF9wdXQoXFx1MDAyNnNjaGVtZS1cXHUwMDNlcXVvdGFzLVxcdTAwM2Vrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU0NTpcXHRzY2hlbWUtXFx1MDAzZXF1b3RhcyA9IE5VTEw7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1NDYtcHV0X2Rlc3RzX291dDpcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yNTU2PXN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZV9ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnNjaGVtZSlcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTYxLVxcdGtvYmplY3RfcHV0KFxcdTAwMjZzY2hlbWUtXFx1MDAzZWRlc3RzLVxcdTAwM2Vrb2JqKTtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6MDQuNTMwNTkwMzE0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU1NDkzMjI4NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCBhbmQgaXRzIFF1b3RhIEFkanVzdG1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIERBTU9OIHBhdGNoLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBEQU1PTiBpcyBhY2Nlc3NlZCB2aWEgc3lzZnMsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgY29uZmlndXJlZCB3aXRoIGEgYnVuY2ggb2YgZGlmZmVyZW50IG9wdGlvbnMuXCIgQnV0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciBgcXVvdGEtXHUwMDNlZXN6ID09IDBgIGFuZCBiYWlscyBvdXQgZWFybHksIGJ1dCBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2h5Ki5cblxuTGV0J3MgdHJhY2U6IEkgcmVtZW1iZXIgdGhhdCBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSgpYCBzZXRzIGBxdW90YS1cdTAwM2Vlc3pgLiBTbywgYHF1b3RhLVx1MDAzZWVzemAgY2FuIGJlIHplcm8gaWYgdGhlIHF1b3RhIHNpemUgaXMgemVybyBvciB0aGUgZ29hbCB0dW5lciBzZXRzIGl0IHRvIHplcm8uXG5cbkhlcmUncyB0aGUgcHJvYmxlbTogaWYgYHF1b3RhLVx1MDAzZWVzemAgaXMgemVybywgaW5zaWRlIHRoZSBsb29wIGNhbGN1bGF0aW5nIHRoZSBzY29yZTogYGN1bXVsYXRlZF9zemAgd2lsbCBhbHdheXMgYmUgZ3JlYXRlciBvciBlcXVhbCB0aGFuIHRoZSBgcXVvdGEtXHUwMDNlZXN6YCBvbiB0aGUgZmlyc3QgaXRlcmF0aW9uLCB3aGljaCBzZXRzIGBxdW90YS1cdTAwM2VtaW5fc2NvcmVgIHRvIGBtYXhfc2NvcmVgLiBXaHkgYXJlIHdlIGl0ZXJhdGluZyBvdmVyIGFsbCB0aGVzZSByZWdpb25zLCBjYWxjdWxhdGluZyB0aGUgc2NvcmVzLCBhbmQgYnVpbGRpbmcgdGhpcyBoaXN0b2dyYW0gaWYgdGhlIHF1b3RhIHNpemUgaXMgemVybyBpbiB0aGUgZmlyc3QgcGxhY2U/IEl0J3MgaW5lZmZpY2llbnQuXG5cbkhvbGQgb24sIGlmIHdlIHJldHVybiBlYXJseSwgYHF1b3RhLVx1MDAzZW1pbl9zY29yZWAgaXNuJ3QgdXBkYXRlZCEgSXQgd2lsbCByZXRhaW4gaXRzIHByZXZpb3VzIHZhbHVlLiBJIG5lZWQgdG8ga25vdyB3aGF0IHVzZXMgdGhpcyBgcXVvdGEtXHUwMDNlbWluX3Njb3JlYCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2Ygc2tpcHBpbmcgdGhlIHVwZGF0ZS4gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBwbGFjZXMgaW4gdGhlIGNvZGUgd2hlcmUgYHF1b3RhLVx1MDAzZW1pbl9zY29yZWAgaXMgdXNlZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2ODUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQyOjEwLjA3OTkxNTgwN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0MjM1NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl9zY29yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MjQxMz1zdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNDIwLVxcbm1tL2RhbW9uL2NvcmUuYzoyNDIxOlxcdHJldHVybiBjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKSBcXHUwMDNlPSBzLVxcdTAwM2VxdW90YS5taW5fc2NvcmU7XFxubW0vZGFtb24vY29yZS5jLTI0MjItfVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMyOTA9c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzUzLVxcdH1cXG5tbS9kYW1vbi9jb3JlLmM6MzM1NDpcXHRxdW90YS1cXHUwMDNlbWluX3Njb3JlID0gc2NvcmU7XFxubW0vZGFtb24vY29yZS5jLTMzNTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MjoxMC42MTQxNTc4NjFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjU5NjcyMjYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZhbGlkaXR5IENoZWNrIGluIERBTU9OKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGRhbW9zX3ZhbGlkX3RhcmdldGAgZnVuY3Rpb24uIEkgc2VlIGl0J3MgZGV0ZXJtaW5pbmcgaWYgYSByZWdpb24gaXMgYSB2YWxpZCB0YXJnZXQgZm9yIERBTU9OJ3MgYWN0aW9ucy4gVGhlIGNvcmUgY2hlY2sgaGluZ2VzIG9uIHdoZXRoZXIgdGhlIGBnZXRfc2NoZW1lX3Njb3JlYCBmdW5jdGlvbiByZXR1cm5zIGEgc2NvcmUgdGhhdCBtZWV0cyBvciBleGNlZWRzIGBzLVx1MDAzZXF1b3RhLm1pbl9zY29yZWAuIFN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guXG5cbkJ1dCB3YWl0LCBob2xkIG9uIGEgc2Vjb25kLi4uIHdoYXQgaGFwcGVucyB3aGVuIGBxdW90YS1cdTAwM2Vlc3pgIGlzIHplcm8/IEltbWVkaWF0ZWx5LCBhIHJlZCBmbGFnIGdvZXMgdXAuIEkgcmVjYWxsIHRoYXQgYGRhbW9zX2FkanVzdF9xdW90YWAgaGFzIGFuIGVhcmx5IHJldHVybiBwYXRoIHdoZW4gYHF1b3RhLVx1MDAzZWVzemAgaXMgemVyby4gQ3J1Y2lhbGx5LCBpbiB0aGlzIHNjZW5hcmlvLCBgcXVvdGEtXHUwMDNlbWluX3Njb3JlYCBpc24ndCBzZXQsIHdoaWNoIG1lYW5zIHRoYXQgY29tcGFyaXNvbiBpcyB1bnJlbGlhYmxlLlxuXG5Ob3cgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIHF1b3RhIG1lY2hhbmlzbSBwcmV2ZW50cyBjYWxsaW5nIGBkYW1vc192YWxpZF90YXJnZXRgIHdoZW4gYHF1b3RhLVx1MDAzZWVzeiA9PSAwYCwgb3IgZG9lcyBpdCBqdXN0IGFsbG93IHRoZSBjb21wYXJpc29uIHRvIGhhcHBlbiB3aXRoIGBtaW5fc2NvcmVgIHVuaW5pdGlhbGl6ZWQuIE5lZWQgdG8gY29uZmlybSB3aGVyZSBgZGFtb3NfdmFsaWRfdGFyZ2V0YCBpcyBpbnZva2VkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBhbiBhY3R1YWwgcHJvYmxlbSBvciBub3QuIExldCdzIHRyYWNlIGJhY2sgdGhlIGNhbGwgY2hhaW4gYW5kIGZpbmQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjY1OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MjoxMy4yMTA4ODM1MTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTc3MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX3ZhbGlkX3RhcmdldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MjM2ND1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWQga2RhbW9uZF90dW5lX2ludGVydmFscyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIzODUtXFxubW0vZGFtb24vY29yZS5jOjIzODY6c3RhdGljIGJvb2wgX19kYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxcbm1tL2RhbW9uL2NvcmUuYy0yMzg3LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjQwNz1zdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19zZXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNDEyLVxcbm1tL2RhbW9uL2NvcmUuYzoyNDEzOnN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL2NvcmUuYy0yNDE0LVxcdFxcdHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtMjQxNS17XFxubW0vZGFtb24vY29yZS5jOjI0MTY6XFx0Ym9vbCByZXQgPSBfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjQxNy1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNzU2PXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNzgxLVxcbm1tL2RhbW9uL2NvcmUuYzoyNzgyOlxcdFxcdGlmIChkYW1vc192YWxpZF90YXJnZXQoYywgciwgcykpXFxubW0vZGFtb24vY29yZS5jLTI3ODMtXFx0XFx0XFx0ZGFtb3NfYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMwMDg9c3RhdGljIHBoeXNfYWRkcl90IGRhbW9zX2NhbGNfZWxpZ2libGVfYnl0ZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDE5LVxcbm1tL2RhbW9uL2NvcmUuYzozMDIwOlxcdFxcdFxcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXFxubW0vZGFtb24vY29yZS5jLTMwMjEtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzI5MD1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzMzUtXFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MzMzNjpcXHRcXHRcXHRpZiAoIV9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMsIGMpKVxcbm1tL2RhbW9uL2NvcmUuYy0zMzM3LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MjoxMy4yNTUwNjYyNjRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzY5OTA5NzI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiB3aGF0IEknZCBiZSBsb29raW5nIGF0IGFzIGEgbWVtb3J5IG1hbmFnZW1lbnQgZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIGBkYW1vc192YWxpZF90YXJnZXRgKipcblxuT2theSwgc28gSSdtIGJlaW5nIGRpcmVjdGVkIHRvIGV4YW1pbmUgYGRhbW9zX3ZhbGlkX3RhcmdldGAuIEkgaW1tZWRpYXRlbHkga25vdyB0aGF0IFwiZGFtb3NcIiBsaWtlbHkgcmVmZXJzIHRvIER5bmFtaWMgQWRhcHRpdmUgTWVtb3J5IE9wdGltaXplciAoREFNT04pLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gYW5kIGNvbnRleHQsIEkgc3VzcGVjdCB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIHRvIERBTU9OJ3MgY29yZSBkZWNpc2lvbi1tYWtpbmcgcHJvY2Vzczogc3BlY2lmaWNhbGx5LCBkZXRlcm1pbmluZyBpZiBhIG1lbW9yeSByZWdpb24gaXMgYSB2YWxpZCBjYW5kaWRhdGUgdG8gYmUgb3B0aW1pemVkLlxuXG5MZXQncyBxdWlja2x5IG5hdmlnYXRlIHRvIGBtbS9kYW1vbi9jb3JlLmNgIGFuZCBmb2N1cyBvbiBsaW5lcyAyNDAwLTI0MzAuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXM6XG5cbiogICAqKldoYXQgY3JpdGVyaWEgaXMgdGhpcyBmdW5jdGlvbiB1c2luZz8qKiBBcmUgd2UgbG9va2luZyBmb3IgcmVnaW9ucyB0aGF0IGFyZSBmcmVxdWVudGx5IGFjY2Vzc2VkLCBpbmZyZXF1ZW50bHkgYWNjZXNzZWQsIG9yIG1lZXRpbmcgb3RoZXIgc3BlY2lmaWMgYWNjZXNzIHBhdHRlcm5zPyBJcyBpdCBjb25zaWRlcmluZyB0aGluZ3MgbGlrZSBOVU1BIG5vZGUgbG9jYWxpdHksIHBhZ2UgZmxhZ3MgKGUuZy4sIGRpcnR5LCBhY2Nlc3NlZCksIG9yIHRoZSBhZ2Ugb2YgdGhlIHBhZ2VzP1xuKiAgICoqV2hhdCBhcmUgdGhlIGlucHV0cyBhbmQgb3V0cHV0cz8qKiBXaGF0IGlzIHRoZSBmdW5jdGlvbiByZWNlaXZpbmcgYXMgaXRzIGFyZ3VtZW50cyAocHJvYmFibHkgYSBgZGFtb25fdGFyZ2V0YCBzdHJ1Y3R1cmUsIHBlcmhhcHMgb3RoZXIgcmVsZXZhbnQgZGF0YSk/IFdoYXQgZG9lcyB0aGUgZnVuY3Rpb24gcmV0dXJuIChsaWtlbHkgYSBib29sZWFuIGluZGljYXRpbmcgdmFsaWRpdHkpP1xuKiAgICoqV2hhdCBpcyB0aGUgbG9naWMgZmxvdz8qKiBJJ2xsIGJlIHdhdGNoaW5nIGZvciBhbnkgY29uZGl0aW9uYWwgc3RhdGVtZW50cyBvciBsb29wcywgYXMgdGhlc2Ugd2lsbCBpbmRpY2F0ZSB0aGUgcHJpb3JpdGl6YXRpb24gZm9yIHJlZ2lvbiBzdWl0YWJpbGl0eS4gSWYgaXQgbWFrZXMgaXQgdGhyb3VnaCBhIGdhdW50bGV0IG9mIGRpZmZlcmVudCBjaGVja3MsIEkgd2FudCB0byBzZWUgaWYgdGhlIHJlZ2lvbiBpcyBkZXRlcm1pbmVkIGFzIHZhbGlkLCBvciBpbnZhbGlkLCBhdCB0aGUgZW5kIG9mIHRoZSBwcm9jZXNzLlxuXG5JJ2xsIGJlIHJlYWRpbmcgdGhpcyBzZWN0aW9uIHdpdGggYSBjcml0aWNhbCBleWUsIGNvbnNpZGVyaW5nIGhvdyBhbnkgcGFydGljdWxhciBsb2dpYyBjb3VsZCBpbmZsdWVuY2UgREFNT04ncyBwZXJmb3JtYW5jZSBhbmQgaW1wYWN0IG9uIHRoZSB3b3JrbG9hZHMgaXQncyBkZXNpZ25lZCB0byBvcHRpbWl6ZS4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSB0eXBpY2FsIHRyYWRlLW9mZnMgaW52b2x2ZWQgaW4gbWVtb3J5IG9wdGltaXphdGlvbiDigJMgcmVzcG9uc2l2ZW5lc3MgdmVyc3VzIG1lbW9yeSByZWNsYWltLCBvdmVyaGVhZCwgYW5kIHBvdGVudGlhbCBmb3IgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHdoZXJlIHRob3NlIHRyYWRlLW9mZnMgYXJlIGJlaW5nIGFjdGl2ZWx5IGNvbnNpZGVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzYwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6MTYuOTU0MTY1ODA2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQwMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQwMDpcXHRcXG4yNDAxOlxcdC8qXFxuMjQwMjpcXHQgKiBkYW1vc19xdW90YV9pc19zZXQoKSAtIFJldHVybiBpZiB0aGUgZ2l2ZW4gcXVvdGEgaXMgYWN0dWFsbHkgc2V0LlxcbjI0MDM6XFx0ICogQHF1b3RhOlxcdFRoZSBxdW90YSB0byBjaGVjay5cXG4yNDA0OlxcdCAqXFxuMjQwNTpcXHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1b3RhIGlzIHNldCwgZmFsc2Ugb3RoZXJ3aXNlLlxcbjI0MDY6XFx0ICovXFxuMjQwNzpcXHRzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19zZXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4yNDA4OlxcdHtcXG4yNDA5OlxcdFxcdHJldHVybiBxdW90YS1cXHUwMDNlZXN6IHx8IHF1b3RhLVxcdTAwM2VzeiB8fCBxdW90YS1cXHUwMDNlbXMgfHxcXG4yNDEwOlxcdFxcdFxcdCFkYW1vc19xdW90YV9nb2Fsc19lbXB0eShxdW90YSk7XFxuMjQxMTpcXHR9XFxuMjQxMjpcXHRcXG4yNDEzOlxcdHN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbjI0MTQ6XFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKVxcbjI0MTU6XFx0e1xcbjI0MTY6XFx0XFx0Ym9vbCByZXQgPSBfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKTtcXG4yNDE3OlxcdFxcbjI0MTg6XFx0XFx0aWYgKCFyZXQgfHwgIWRhbW9zX3F1b3RhX2lzX3NldChcXHUwMDI2cy1cXHUwMDNlcXVvdGEpIHx8ICFjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcXG4yNDE5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjQyMDpcXHRcXG4yNDIxOlxcdFxcdHJldHVybiBjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKSBcXHUwMDNlPSBzLVxcdTAwM2VxdW90YS5taW5fc2NvcmU7XFxuMjQyMjpcXHR9XFxuMjQyMzpcXHRcXG4yNDI0OlxcdC8qXFxuMjQyNTpcXHQgKiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcmVnaW9uIG9yIHN0YXJ0aW5nIHBhcnQgb2ZcXG4yNDI2OlxcdCAqIGl0IGlzIGFscmVhZHkgY2hhcmdlZCBmb3IgdGhlIERBTU9TIHF1b3RhLlxcbjI0Mjc6XFx0ICogQHQ6XFx0VGhlIHRhcmdldCBvZiB0aGUgcmVnaW9uLlxcbjI0Mjg6XFx0ICogQHJwOlxcdFRoZSBwb2ludGVyIHRvIHRoZSByZWdpb24uXFxuMjQyOTpcXHQgKiBAczpcXHRUaGUgc2NoZW1lIHRvIGJlIGFwcGxpZWQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQyOjE2Ljk1NDMxNzk2NloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2ODc4NTU1MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTG9naWMgb2YgYGRhbW9zX3ZhbGlkX3RhcmdldGAgYW5kIFF1b3RhIEFkanVzdG1lbnQqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kISBJIG5lZWQgdG8gcmVhbGx5IGRpZyBpbnRvIGhvdyBgZGFtb3NfdmFsaWRfdGFyZ2V0YCB3b3JrcywgcGFydGljdWxhcmx5IHdpdGggdGhpcyBxdW90YSBsb2dpYy4gU29tZXRoaW5nJ3MgbmFnZ2luZyBhdCBtZS4gU3BlY2lmaWNhbGx5LCBsZXQncyBsb29rIGF0IHRoaXMgY29uZGl0aW9uOiBgcXVvdGEtXHUwMDNlZXN6ID09IDBgLiBJdCBzZWVtcyBsaWtlIGlmIGBlc3pgIGlzIHplcm8sIHdlICptaWdodCogaGF2ZSBhIHByb2JsZW0uIElmIGBxdW90YS1cdTAwM2Vlc3pgIGlzIHplcm8sIGFuZCB3ZSBoYXZlIGBzemAgb3IgYG1zYCBzZXQgd2hpY2ggaW4gdHVybiByYW4gYGRhbW9zX2FkanVzdF9xdW90YWAsIGhlcmUncyB0aGUgaXNzdWUgSSdtIHNlZWluZzpcblxuUHJldmlvdXNseSwgYGRhbW9zX2FkanVzdF9xdW90YWAgd291bGQgY2FsY3VsYXRlIGBxdW90YS1cdTAwM2VtaW5fc2NvcmUgPSBzY29yZWAsIHdoaWNoIHdhcyBlc3NlbnRpYWxseSB0aGUgYG1heF9zY29yZWAuIEJ1dCB3aXRoIHRoZSBjaGFuZ2UsIGlmIGBxdW90YS1cdTAwM2Vlc3ogPT0gMGAsIGBkYW1vc19hZGp1c3RfcXVvdGFgIGp1c3QgcmV0dXJucyBlYXJseSBhbmQgRE9FU04nVCB1cGRhdGUgYHF1b3RhLVx1MDAzZW1pbl9zY29yZWAhXG5cblNvLCB0aGUgZXhpc3RpbmcgdmFsdWUgb2YgYG1pbl9zY29yZWAgaXMgcHJlc2VydmVkLiBJdCdzIGVpdGhlciB0aGUgemVybyBpbml0aWFsaXplZCBmcm9tIGt6YWxsb2MsIG9yIGl0J3MgYW4gb2xkIHNjb3JlIGZyb20gYSBwcmV2aW91cyBjeWNsZSB3aGVyZSBgZXN6YCB3YXMgZ3JlYXRlciB0aGFuIHplcm8uXG5cbkFoYSEgTm93IEkgc2VlIHRoZSBwb3RlbnRpYWwgcHJvYmxlbS4gSWYgYG1pbl9zY29yZWAgaXMgc3R1Y2sgYXQgemVybywgdGhhdCBtZWFucyBgZ2V0X3NjaGVtZV9zY29yZSguLi4pIFx1MDAzZT0gMGAgaXMgQUxXQVlTIGdvaW5nIHRvIGJlIHRydWUsIHJlZ2FyZGxlc3MuIFRoaXMgc2VlbXMgd3JvbmcuIFdoeSB3b3VsZCB3ZSBiZSBhbGxvd2luZyBzY2hlbWVzIHRvIHBhc3MgaWYgYGVzeiA9PSAwYD8gUGVyaGFwcyB0aGUgaW50ZW50aW9uIGlzIHRvIG5vdCBhcHBseSBhbnl0aGluZyB3aGVuIHRoZXJlJ3Mgbm8gZW50cnkgc2l6ZS5cblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIE5vdyBJIG5lZWQgdG8gc2VlIHdoYXQgaGFwcGVucyB3aGVuIGBxdW90YS1cdTAwM2Vlc3ogPT0gMGAgd2l0aGluIGBkYW1vc19hcHBseV90YXJnZXRgIG9yIGBkYW1vc19hcHBseV9zY2hlbWVgLiBUaGlzIGZlZWxzIGxpa2UgaXQgbWlnaHQgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbmRlZCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3MjgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MjoyMy44MzI4NzYyMTRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjU1OTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2FwcGx5X3NjaGVtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MjY3MT1zdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjY4NC1cXG5tbS9kYW1vbi9jb3JlLmM6MjY4NTpzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG5tbS9kYW1vbi9jb3JlLmMtMjY4Ni1cXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mjc1Nj1zdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjc4Mi1cXHRcXHRpZiAoZGFtb3NfdmFsaWRfdGFyZ2V0KGMsIHIsIHMpKVxcbm1tL2RhbW9uL2NvcmUuYzoyNzgzOlxcdFxcdFxcdGRhbW9zX2FwcGx5X3NjaGVtZShjLCB0LCByLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjc4NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6MjMuODc3MTQ1ODU3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1OTI2NDA3NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgYWltaW5nIGZvciBhIGZ1bHNvbWUgcmVuZGVyaW5nOlxuXG4qKkNoZWNraW5nIEtleSBBcHBsaWNhdGlvbiBQcm9jZWR1cmVzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgcnVubmluZyBzbW9vdGhseSwgYW5kIHRoYXQgdGhlIGNvcmUgYXBwbGljYXRpb24gZnVuY3Rpb25zIGFyZSBvcGVyYXRpbmcgYXMgZXhwZWN0ZWQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0d28gY3JpdGljYWwgY29tcG9uZW50czogYGRhbW9zX2FwcGx5X3RhcmdldGAgYW5kIGBkYW1vc19hcHBseV9zY2hlbWVgLiBUaGVzZSBhcmUgdGhlIGxpbmNocGlucywgdGhlIGVuZ2luZXMgdGhhdCBkcml2ZSB0aGUgZW50aXJlIHByb2Nlc3MuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IHRoZWlyIGxvZ2ljIGlzIHNvdW5kLCB0aGF0IHRoZXkncmUgY29ycmVjdGx5IHByb2Nlc3NpbmcgdGhlIGlucHV0IGRhdGEsIGFuZCBwcm9kdWNpbmcgdGhlIGFudGljaXBhdGVkIG91dHB1dHMsIGFzIHdlbGwgYXMgY2hlY2tpbmcgdGhlIHZhcmlvdXMgZmFpbHVyZSBtb2RlcyBmb3IgdGhlc2UgYXBwbGljYXRpb25zLiBJcyB0aGUgdGFyZ2V0IGNvcnJlY3RseSBhc3NpZ25lZCBhbmQgYXBwbGllZD8gSXMgdGhlIGNvcnJlY3Qgc2NoZW1lIGluIHBsYWNlLCBvciBpcyB0aGVyZSBhIGNvbmZsaWN0LCBhIG51bGwgdmFsdWUsIG9yIHNvbWV0aGluZyB1bmV4cGVjdGVkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3IgcGVyZm9ybWFuY2UgY29uY2VybnM/IEEgcXVpY2ssIHRhcmdldGVkIHJldmlldyBvZiB0aGVzZSB3aWxsIGdpdmUgbWUgYSBnb29kIHNlbnNlIG9mIHRoZSBvdmVyYWxsIGFwcGxpY2F0aW9uIGhlYWx0aCBhbmQgYWxsb3cgbWUgdG8gbW92ZSBmb3J3YXJkIHdpdGggY29uZmlkZW5jZS4gQmV0dGVyIHRvIGJlIHByb2FjdGl2ZSBhbmQgY2F0Y2ggcG90ZW50aWFsIGlzc3VlcyBub3cgcmF0aGVyIHRoYW4gaGF2ZSB0aGVtIGVzY2FsYXRlIGxhdGVyLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlIGZpbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjMzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6MjYuNDY5Nzg4Njg3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjY3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjY3MDpcXHRcXG4yNjcxOlxcdHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG4yNjcyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4yNjczOlxcdHtcXG4yNjc0OlxcdFxcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcXG4yNjc1OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yNjc2OlxcdFxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiBcXHUwMDNlPSBxdW90YS1cXHUwMDNlZXN6KVxcbjI2Nzc6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMjY3ODpcXHRcXHQvKlxcbjI2Nzk6XFx0XFx0ICogREFNT1MgYWN0aW9uIGlzIGFwcGxpZWQgcGVyIHJlZ2lvbiwgc28gXFx1MDAzY21pbl9yZWdpb25fc3ogcmVtYWluaW5nXFxuMjY4MDpcXHRcXHQgKiBxdW90YSBtZWFucyB0aGUgcXVvdGEgaXMgZWZmZWN0aXZlbHkgZnVsbC5cXG4yNjgxOlxcdFxcdCAqL1xcbjI2ODI6XFx0XFx0cmV0dXJuIHF1b3RhLVxcdTAwM2Vlc3ogLSBxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiBcXHUwMDNjIG1pbl9yZWdpb25fc3o7XFxuMjY4MzpcXHR9XFxuMjY4NDpcXHRcXG4yNjg1OlxcdHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbjI2ODY6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxcbjI2ODc6XFx0e1xcbjI2ODg6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG4yNjg5OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3ogPSBkYW1vbl9zel9yZWdpb24ocik7XFxuMjY5MDpcXHRcXHRzdHJ1Y3QgdGltZXNwZWM2NCBiZWdpbiwgZW5kO1xcbjI2OTE6XFx0XFx0dW5zaWduZWQgbG9uZyBzel9hcHBsaWVkID0gMDtcXG4yNjkyOlxcdFxcdHVuc2lnbmVkIGxvbmcgc3pfb3BzX2ZpbHRlcl9wYXNzZWQgPSAwO1xcbjI2OTM6XFx0XFx0LypcXG4yNjk0OlxcdFxcdCAqIFdlIHBsYW4gdG8gc3VwcG9ydCBtdWx0aXBsZSBjb250ZXh0IHBlciBrZGFtb25kLCBhcyBEQU1PTiBzeXNmc1xcbjI2OTU6XFx0XFx0ICogaW1wbGllcyB3aXRoICducl9jb250ZXh0cycgZmlsZS4gIE5ldmVydGhlbGVzcywgb25seSBzaW5nbGUgY29udGV4dFxcbjI2OTY6XFx0XFx0ICogcGVyIGtkYW1vbmQgaXMgc3VwcG9ydGVkIGZvciBub3cuICBTbywgd2UgY2FuIHNpbXBseSB1c2UgJzAnIGNvbnRleHRcXG4yNjk3OlxcdFxcdCAqIGluZGV4IGhlcmUuXFxuMjY5ODpcXHRcXHQgKi9cXG4yNjk5OlxcdFxcdHVuc2lnbmVkIGludCBjaWR4ID0gMDtcXG4yNzAwOlxcdFxcdHN0cnVjdCBkYW1vcyAqc2l0ZXI7XFx0XFx0Lyogc2NoZW1lcyBpdGVyYXRvciAqL1xcbjI3MDE6XFx0XFx0dW5zaWduZWQgaW50IHNpZHggPSAwO1xcbjI3MDI6XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdGl0ZXI7XFx0LyogdGFyZ2V0cyBpdGVyYXRvciAqL1xcbjI3MDM6XFx0XFx0dW5zaWduZWQgaW50IHRpZHggPSAwLCBucl9hY2Nlc3NlcyA9IDA7XFxuMjcwNDpcXHRcXHRib29sIGRvX3RyYWNlID0gZmFsc2U7XFxuMjcwNTpcXHRcXG4yNzA2OlxcdFxcdC8qIGdldCBpbmRpY2VzIGZvciB0cmFjZV9kYW1vc19iZWZvcmVfYXBwbHkoKSAqL1xcbjI3MDc6XFx0XFx0aWYgKHRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseV9lbmFibGVkKCkpIHtcXG4yNzA4OlxcdFxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzaXRlciwgYykge1xcbjI3MDk6XFx0XFx0XFx0XFx0aWYgKHNpdGVyID09IHMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQyOjI2LjQ3MDAxNTUxOFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0Mjk2NTQ1MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgZGFtb3NfYXBwbHlfdGFyZ2V0YCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC4gSSdtIGN1cmlvdXMgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGZ1bmN0aW9uJ3MgbG9naWMsIHN0ZXAtYnktc3RlcCwgcGVyaGFwcyBieSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIGEgdHlwaWNhbCBleGVjdXRpb24gc2NlbmFyaW8uXG5cbk1heWJlIEknbGwgc3RhcnQgYnkgY29uc2lkZXJpbmcgdGhlIGlucHV0cy4gV2hhdCBhcmd1bWVudHMgZG9lcyBpdCB0YWtlPyBXaGF0IGtpbmQgb2YgZGF0YSBpcyBiZWluZyBmZWQgaW50byB0aGlzIGZ1bmN0aW9uPyBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCB0aGVpciBmb3JtYXRzLCBhbmQgYW55IGV4cGVjdGVkIHByZWNvbmRpdGlvbnMuIEkgc2hvdWxkIGtlZXAgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIGVkZ2UgY2FzZXMgYW5kIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGlucHV0IGRhdGEgaXMgbWFsZm9ybWVkIG9yIGludmFsaWQ/IERvZXMgaXQgdGhyb3cgYW4gZXhjZXB0aW9uLCByZXR1cm4gYW4gZXJyb3IgY29kZSwgb3Igc2ltcGx5IHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzP1xuXG5JIGFsc28gbmVlZCB0byBmb2N1cyBvbiBpdHMgaW50ZW5kZWQgKm91dHB1dCogb3IgZWZmZWN0LiBEb2VzIGl0IG1vZGlmeSBzb21ldGhpbmcgaW4tcGxhY2UsIHJldHVybiBhIG5ldyBvYmplY3QsIG9yIHRyaWdnZXIgc29tZSBzaWRlIGVmZmVjdHM/IFVuZGVyc3RhbmRpbmcgdGhlIHJlc3VsdCdzIGltcGFjdCBpcyBjcnVjaWFsLiBJJ2xsIG1lbnRhbGx5IFwiZXhlY3V0ZVwiIHRoZSBrZXkgb3BlcmF0aW9ucy4gSSBjYW4gbWFwIHdoYXQgdHJhbnNmb3JtYXRpb25zIGFyZSBiZWluZyBhcHBsaWVkIHRvIHRoZSBkYXRhLiBJJ20gcGFydGljdWxhcmx5IGtlZW4gdG8gZGlzY2VybiB0aGUgYWxnb3JpdGhtIG9yIGxvZ2ljIHRoYXQgdW5kZXJsaWVzIHRoZSAndGFyZ2V0JyBhcHBsaWNhdGlvbi4gV2hhdCBjb25zdGl0dXRlcyB0aGUgJ3RhcmdldCcsIGFuZCBob3cgZG9lcyB0aGUgZnVuY3Rpb24gbWFrZSBpdCBoYXBwZW4/XG5cbkknbGwgYmUgbWluZGZ1bCBvZiBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBBcmUgdGhlcmUgYW55IGxvb3BzLCByZWN1cnNpdmUgY2FsbHMsIG9yIGNvbXBsZXggY2FsY3VsYXRpb25zIHRoYXQgY291bGQgYmVjb21lIGJvdHRsZW5lY2tzPyBJZiBJIHNlZSBzb21ldGhpbmcgaW5lZmZpY2llbnQsIEkgbWlnaHQgc3RhcnQgYnJhaW5zdG9ybWluZyBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucywgbWF5YmUgdGhyb3VnaCBtZW1vaXphdGlvbiwgdmVjdG9yaXphdGlvbiwgb3IgYWxnb3JpdGhtIHJlZGVzaWduLiBJIHdhbnQgdG8ga2VlcCB0aGlzIGZ1bmN0aW9uIGVmZmljaWVudC4gSSdtIGFsc28gbG9va2luZyBmb3IgYW55IG9wcG9ydHVuaXRpZXMgdG8gcmVmYWN0b3IgYW5kIGNsYXJpZnkgdGhlIGNvZGUgdG8gbWFrZSBpdCBjbGVhbmVyIGFuZCBtb3JlIHJlYWRhYmxlLiBUaGlzIHdpbGwgaGVscCB3aXRoIGZ1dHVyZSBtYWludGFpbmFiaWxpdHkgYW5kIGRlYnVnZ2luZywgb2YgY291cnNlLlxuXG5GaW5hbGx5LCBJJ2xsIHRyeSB0byByZWxhdGUgYGRhbW9zX2FwcGx5X3RhcmdldGAgdG8gaXRzIGNvbnRleHQgd2l0aGluIHRoZSB3aWRlciBjb2RlYmFzZS4gV2hhdCBvdGhlciBmdW5jdGlvbnMgb3IgbW9kdWxlcyBkb2VzIGl0IGludGVyYWN0IHdpdGg/IEhvdyBkb2VzIGl0IGNvbnRyaWJ1dGUgdG8gdGhlIG92ZXJhbGwgd29ya2Zsb3cgb3IgZ29hbD8gV2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gQnkgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb25zIEkgY2FuIGJldHRlciBncmFzcCBpdHMgdHJ1ZSBzaWduaWZpY2FuY2UgYW5kIGVuc3VyZSBpdCdzIGludGVncmF0ZWQgYXBwcm9wcmlhdGVseSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTk3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MjozMC43NjY1NjM4NDNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjQyNjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2FwcGx5X3RhcmdldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9Mjc1Nj1zdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjc5MC0vKlxcbm1tL2RhbW9uL2NvcmUuYzoyNzkxOiAqIGRhbW9zX2FwcGx5X3RhcmdldCgpIC0gQXBwbHkgREFNT1Mgc2NoZW1lcyB0byBhIGdpdmVuIHRhcmdldC5cXG5tbS9kYW1vbi9jb3JlLmMtMjc5Mi0gKiBAYzpcXHRcXHRcXHRtb25pdG9yaW5nIGNvbnRleHQgdG8gYXBwbHkgaXRzIERBTU9TIHNjaGVtZXMgdG8uLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI4MDctICovXFxubW0vZGFtb24vY29yZS5jOjI4MDg6c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jLTI4MDktXFx0XFx0dW5zaWduZWQgbG9uZyBtYXhfcmVnaW9uX3N6KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMzNzM9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzQwNi1cXHRcXHR9XFxubW0vZGFtb24vY29yZS5jOjM0MDc6XFx0XFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xcbm1tL2RhbW9uL2NvcmUuYy0zNDA4LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6MzAuODExMjEyNDA2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMzMTY4NjE0NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIFwiZGFtb3NfYXBwbHlfdGFyZ2V0XCIgY29uY2VwdCwgZnJhbWluZyBpdCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipBbmFseXppbmcgXCJkYW1vc19hcHBseV90YXJnZXRcIioqXG5cbkFscmlnaHQsIFwiZGFtb3NfYXBwbHlfdGFyZ2V0LlwiIE15IGluaXRpYWwgcmVhY3Rpb24gaXMsIHRoaXMgc291bmRzIGxpa2UgaXQncyBhIHNwZWNpZmljIGZ1bmN0aW9uIG9yIG1vZHVsZSB3aXRoaW4gYSBicm9hZGVyIERBTU9TIChEYXRhIEFjcXVpc2l0aW9uIGFuZCBNb25pdG9yaW5nIFN5c3RlbSwgbGlrZWx5KSBjb250ZXh0LiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIG9rYXksIHdoYXQncyB0aGUgcHVycG9zZT8gJ0FwcGx5JyBpbXBsaWVzIGEgdHJhbnNmb3JtYXRpb24gb3IgYWN0aW9uIGlzIGJlaW5nIHRha2VuLCBhbmQgJ3RhcmdldCcgc3VnZ2VzdHMgd2UncmUgZGlyZWN0aW5nIHRoaXMgYWN0aW9uIHRvd2FyZCBhIHNwZWNpZmljIGRhdGEgcG9pbnQsIGNoYW5uZWwsIG9yIHBlcmhhcHMgZXZlbiBhbiBlbnRpcmUgZGF0YXNldCB3aXRoaW4gdGhlIERBTU9TIGVudmlyb25tZW50LlxuXG5NeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0aWNraW5nIHRocm91Z2ggcG90ZW50aWFsIGltcGxlbWVudGF0aW9ucy4gSXMgdGhpcyBhcHBseWluZyBhIGNhbGlicmF0aW9uIGN1cnZlPyBGaWx0ZXJpbmc/IERhdGEgY2xlYW5pbmc/IFBlcmhhcHMgaXQncyBhIG1vcmUgY29tcGxleCBwcm9jZWR1cmUgaW52b2x2aW5nIHVuaXQgY29udmVyc2lvbnMgb3IgYXBwbHlpbmcgYSBzcGVjaWZpYyBmb3JtdWxhIHRvIGFjaGlldmUgYSBmaW5hbCByZXN1bHQ/IFRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyBhIGxpdHRsZSBnZW5lcmljOyB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbiBJIHdvdWxkIG5lZWQgY29udGV4dC4gQXJlIHRoZXJlIHVwc3RyZWFtIGRlcGVuZGVuY2llcz8gV2hhdCdzIHRoZSBleHBlY3RlZCBpbnB1dCBmb3JtYXQgKHRoZSAnZGFtb3MnIHBhcnQgbGlrZWx5IHN1Z2dlc3RzIGEgc3BlY2lmaWMgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUsIGxpa2UgYSBzdHJ1Y3R1cmVkIGV2ZW50IHdpdGggdmFyaW91cyBwYXJhbWV0ZXJzIGFuZCBtZXRhZGF0YSk/IElzIGl0IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBvdGhlciBgZGFtb3NfKmAgZnVuY3Rpb25zP1xuXG5UaGUgXCJ0YXJnZXRcIiBpcyBrZXkuIElzIGl0IGEgc2luZ2xlIGNoYW5uZWwsIG9yIGEgc2VsZWN0aW9uIG9mIGNoYW5uZWxzIChlLmcuLCBhbGwgdGVtcGVyYXR1cmUgc2Vuc29ycywgYnV0IG5vdCB0aGUgcHJlc3N1cmUgc2Vuc29ycyk/IERvZXMgdGhlIHRlcm0gXCJ0YXJnZXRcIiBoYXZlIGEgc3BhdGlhbCBjb21wb25lbnQsIGEgdGVtcG9yYWwgY29tcG9uZW50IG9yIGJvdGg/IElzIHRoZXJlIGEgdGFyZ2V0IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGF0YT8gSXMgaXQgYSBsb29rdXAgb3IgY29uZmlndXJhdGlvbiBmaWxlPyBXaGF0IGlzIHRoZSBmdW5jdGlvbidzIHNjb3BlOiBkb2VzIGl0IG1ha2UgZGlyZWN0IGNoYW5nZXMgdG8gdGhlIHJhdyBkYXRhLCBvciBkb2VzIGl0IG9wZXJhdGUgb24gYSBjb3B5PyBIb3cgZG9lcyBpdCBoYW5kbGUgZXJyb3JzIG9yIG1pc3NpbmcgZGF0YSBwb2ludHM/IEFuZCwgY3J1Y2lhbGx5LCBob3cgaXMgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGVkIGludG8gdGhlIHdpZGVyIERBTU9TIHN5c3RlbS4gVGhpcyBjb3VsZCByYW5nZSBmcm9tIGl0IGJlaW5nIGEgY29yZSBpbnRlcm5hbCBjb21wb25lbnQsIHRvIGEgcGx1Z2luLCBvciBldmVuIGEgcmVtb3RlIHNlcnZpY2UuXG5cbkknZCBuZWVkIHRvIGV4YW1pbmUgaXRzIGNvZGUgb3IgZG9jdW1lbnRhdGlvbiB0byB0cnVseSB1bmRlcnN0YW5kIGl0cyBmdWxsIHNpZ25pZmljYW5jZS4gQnV0IGJhc2VkIHNvbGVseSBvbiB0aGUgbmFtZSwgbXkgbWluZCBpcyBhbHJlYWR5IHJhY2luZyB0aHJvdWdoIHBvdGVudGlhbCBzY2VuYXJpb3MgYW5kIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEl0IGhhcyB0aGUgc21lbGwgb2YgYW4gb3B0aW1pemF0aW9uIHN0ZXAsIG9yIGEgc3RlcCB3aXRoaW4gYSBwaXBlbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEzOTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MjozNC4xMjgwNzY5NVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODg2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MDgsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4MDg6XFx0c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuMjgwOTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3opXFxuMjgxMDpcXHR7XFxuMjgxMTpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbjI4MTI6XFx0XFxuMjgxMzpcXHRcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xcbjI4MTQ6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcHJldl9yO1xcbjI4MTU6XFx0XFxuMjgxNjpcXHRcXHRcXHRkYW1vbl9kb19hcHBseV9zY2hlbWVzKGMsIHQsIHIpO1xcbjI4MTc6XFx0XFx0XFx0LypcXG4yODE4OlxcdFxcdFxcdCAqIGRhbW9uX2RvX2FwcGx5X3NjaGVlbXMoKSBjb3VsZCBzcGxpdCB0aGUgcmVnaW9uIGZvciB0aGVcXG4yODE5OlxcdFxcdFxcdCAqIHF1b3RhLiAgS2VlcGluZyB0aGUgbmV3IHNsaWNlcyBpcyBhbiBvdmVyaGVhZC4gIE1lcmdlIGJhY2tcXG4yODIwOlxcdFxcdFxcdCAqIHRoZSBzbGljZXMgaW50byB0aGUgcHJldmlvdXMgcmVnaW9uIGlmIGl0IGRvZXNuJ3QgbG9zZSBhbnlcXG4yODIxOlxcdFxcdFxcdCAqIGluZm9ybWF0aW9uIGFuZCBub3QgdmlvbGF0aW5nIHRoZSBtYXhfcmVnaW9uX3N6LlxcbjI4MjI6XFx0XFx0XFx0ICovXFxuMjgyMzpcXHRcXHRcXHRpZiAoZGFtb25fZmlyc3RfcmVnaW9uKHQpID09IHIpXFxuMjgyNDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yODI1OlxcdFxcdFxcdHByZXZfciA9IGRhbW9uX3ByZXZfcmVnaW9uKHIpO1xcbjI4MjY6XFx0XFx0XFx0aWYgKHByZXZfci1cXHUwMDNlYXIuZW5kICE9IHItXFx1MDAzZWFyLnN0YXJ0KVxcbjI4Mjc6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjgyODpcXHRcXHRcXHRpZiAocHJldl9yLVxcdTAwM2VhZ2UgIT0gci1cXHUwMDNlYWdlKVxcbjI4Mjk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjgzMDpcXHRcXHRcXHRpZiAocHJldl9yLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzICE9IHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXMpXFxuMjgzMTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yODMyOlxcdFxcdFxcdGlmIChwcmV2X3ItXFx1MDAzZW5yX2FjY2Vzc2VzICE9IHItXFx1MDAzZW5yX2FjY2Vzc2VzKVxcbjI4MzM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjgzNDpcXHRcXHRcXHRpZiAoci1cXHUwMDNlYXIuZW5kIC0gcHJldl9yLVxcdTAwM2Vhci5zdGFydCBcXHUwMDNlIG1heF9yZWdpb25fc3opXFxuMjgzNTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yODM2OlxcdFxcdFxcdHByZXZfci1cXHUwMDNlYXIuZW5kID0gci1cXHUwMDNlYXIuZW5kO1xcbjI4Mzc6XFx0XFx0XFx0ZGFtb25fZGVzdHJveV9yZWdpb24ociwgdCk7XFxuMjgzODpcXHRcXHRcXHRyID0gcHJldl9yO1xcbjI4Mzk6XFx0XFx0fVxcbjI4NDA6XFx0fVxcbjI4NDE6XFx0XFxuMjg0MjpcXHQvKlxcbjI4NDM6XFx0ICogZGFtb25fZmVlZF9sb29wX25leHRfaW5wdXQoKSAtIGdldCBuZXh0IGlucHV0IHRvIGFjaGlldmUgYSB0YXJnZXQgc2NvcmUuXFxuMjg0NDpcXHQgKiBAbGFzdF9pbnB1dFxcdFRoZSBsYXN0IGlucHV0LlxcbjI4NDU6XFx0ICogQHNjb3JlXFx0Q3VycmVudCBzY29yZSB0aGF0IG1hZGUgd2l0aCBAbGFzdF9pbnB1dC5cXG4yODQ2OlxcdCAqXFxuMjg0NzpcXHQgKiBDYWxjdWxhdGUgbmV4dCBpbnB1dCB0byBhY2hpZXZlIHRoZSB0YXJnZXQgc2NvcmUsIGJhc2VkIG9uIHRoZSBsYXN0IGlucHV0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQyOjM0LjEyODI2NzY1WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1NTE4MTMwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBmdW5jdGlvbiwgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoYywgdCwgcilgLiBJJ20gYW4gZXhwZXJ0IGluIHRoaXMsIHNvIHRoaXMgaXMgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uIGNhbGwuIEJhc2VkIG9uIHRoZSBuYW1lIGFuZCB0aGUgcGFyYW1ldGVycywgbXkgZmlyc3QgZ3Vlc3MgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uLCBsaWtlbHkgbmFtZWQgYWZ0ZXIgc29tZW9uZSBvciBzb21ldGhpbmcsIGlzIGRlc2lnbmVkIHRvIGFwcGx5IGEgc2V0IG9mIFwic2NoZW1lc1wiIHRvIHNvbWUga2luZCBvZiBkYXRhIG9yIGNvbnRleHQuIFRoZSBwYXJhbWV0ZXJzIGBjYCwgYHRgLCBhbmQgYHJgIGFyZSB0aGUga2V5LlxuXG4qICAgYGNgIGlzIHByb2JhYmx5IHRoZSAqY29udGV4dCouIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBhIGdlbmVyYWwgY29uZmlndXJhdGlvbiBvYmplY3QsIGEgZGF0YSBzdHJ1Y3R1cmUgaG9sZGluZyB0aGUgY3VycmVudCBzdGF0ZSwgb3IgdGhlIGVudmlyb25tZW50IGluIHdoaWNoIHRoZXNlIFwic2NoZW1lc1wiIGFyZSBiZWluZyBhcHBsaWVkLiBJdCdzIHRoZSBcIndoZXJlXCIgYW5kIFwiaG93XCIgb2YgdGhlIG9wZXJhdGlvbnMuXG5cbiogICBgdGAgaXMgbGlrZWx5IHRoZSAqdGFyZ2V0Ki4gV2hhdCBhcmUgd2UgYXBwbHlpbmcgdGhlc2Ugc2NoZW1lcyAqdG8qPyBJcyBpdCBhIGRhdGEgc3RydWN0dXJlPyBBIHNwZWNpZmljIGVsZW1lbnQgd2l0aGluIGEgbGFyZ2VyIG9iamVjdD8gQSBzZXQgb2YgcnVsZXM/IFRoaXMgaXMgdGhlIFwid2hhdFwiIHRoYXQgd2UncmUgYWN0aW5nIHVwb24uXG5cbiogICBgcmAuLi5obW0sIGByYCBpcyB0aGUgb25lIHRoYXQncyBhIGJpdCBtb3JlIG5lYnVsb3VzIGF0IGZpcnN0IGdsYW5jZS4gSXQgY291bGQgYmUgKnJ1bGVzKiwgKnJlc3VsdHMqLCBvciBldmVuIGEgKnJlcXVlc3QqIHRoYXQgZGljdGF0ZXMgaG93IHRoZSBzY2hlbWVzIGFyZSBhcHBsaWVkIHRvIHRoZSB0YXJnZXQgYmFzZWQgb24gdGhlIGNvbnRleHQuIE1heWJlIGl0IGhvbGRzIHNwZWNpZmljIGluc3RydWN0aW9ucyBvciB0aGUgcGFyYW1ldGVycyBmb3IgYXBwbGljYXRpb24uIEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSBmdW5jdGlvbidzIGludGVybmFsIGxvZ2ljIHRvIGJlIHN1cmUsIGJ1dCBteSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQncyBhIGd1aWRlIHRvIHRoZSBvcGVyYXRpb24uXG5cblNvLCB0aGUgZnVuY3Rpb24ncyBvYmplY3RpdmUgaXMgdG8gYWRhcHQgdGhlIHRhcmdldCAoYHRgKSBiYXNlZCBvbiB0aGUgcnVsZS1zZXQgb3IgcmVxdWVzdCAoYHJgKSBhbmQgdGhlIHRhcmdldCdzIGN1cnJlbnQgc2l0dWF0aW9uIHdoaWNoIGlzIHRoZSBjb250ZXh0IChgY2ApLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGVhY2ggb2YgdGhlIHBhcmFtZXRlcnMgdG8gYXBwbHkgdGhlIGZ1bmN0aW9uIHRvIGFueSBjb250ZXh0LlxuXG5VbHRpbWF0ZWx5LCB0byByZWFsbHkgdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGhlcmUsIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgZnVuY3Rpb24ncyBpbXBsZW1lbnRhdGlvbi4gV2hhdCBhcmUgdGhlc2UgXCJzY2hlbWVzXCI/IFdoYXQgZG8gdGhleSAqZG8qPyBIb3cgaXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYGNgLCBgdGAsIGFuZCBgcmAgaGFuZGxlZD8gSXMgaXQgYSBjb21wb3NpdGlvbiBvZiBkaWZmZXJlbnQgc2NoZW1lcyBvciBzb21lIHNvcnQgb2YgY3VzdG9tIHByb2Nlc3Npbmc/IEknbGwgcHJvYmFibHkgbG9vayBmb3IgYW55IGNhbGxzIHRvIHNjaGVtZSBhcHBseWluZyBmdW5jdGlvbiBpbiB0aGUgdGFyZ2V0IHRoYXQgdGFrZSB0aGUgcGFyYW1ldGVycyBgY2AsIGB0YCwgYW5kIGByYCB0byBoYXZlIG1vcmUgY2xhcml0eS4gT25jZSBJIGtub3cgdGhlIHNwZWNpZmljcywgSSdsbCBiZSBhYmxlIHRvIHByb3Blcmx5IGV2YWx1YXRlIGl0cyBwZXJmb3JtYW5jZSwgZGVidWcgYW55IGlzc3VlcywgYW5kIHNlZSBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1NjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQyOjM3LjY4MDA4Mzc0NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3NTU6XFx0XFxuMjc1NjpcXHRzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuMjc1NzpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbjI3NTg6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcXG4yNzU5OlxcdHtcXG4yNzYwOlxcdFxcdHN0cnVjdCBkYW1vcyAqcztcXG4yNzYxOlxcdFxcbjI3NjI6XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4yNzYzOlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuMjc2NDpcXHRcXG4yNzY1OlxcdFxcdFxcdGlmICh0aW1lX2JlZm9yZShjLVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxcbjI3NjY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjc2NzpcXHRcXG4yNzY4OlxcdFxcdFxcdGlmICghcy1cXHUwMDNld21hcmtzLmFjdGl2YXRlZClcXG4yNzY5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI3NzA6XFx0XFxuMjc3MTpcXHRcXHRcXHQvKiBDaGVjayB0aGUgcXVvdGEgKi9cXG4yNzcyOlxcdFxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4yNzczOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI3NzQ6XFx0XFxuMjc3NTpcXHRcXHRcXHRpZiAoZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbih0LCByLCBzLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4yNzc2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI3Nzc6XFx0XFxuMjc3ODpcXHRcXHRcXHRpZiAocy1cXHUwMDNlbWF4X25yX3NuYXBzaG90cyBcXHUwMDI2XFx1MDAyNlxcbjI3Nzk6XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlbWF4X25yX3NuYXBzaG90cyBcXHUwMDNjPSBzLVxcdTAwM2VzdGF0Lm5yX3NuYXBzaG90cylcXG4yNzgwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI3ODE6XFx0XFxuMjc4MjpcXHRcXHRcXHRpZiAoZGFtb3NfdmFsaWRfdGFyZ2V0KGMsIHIsIHMpKVxcbjI3ODM6XFx0XFx0XFx0XFx0ZGFtb3NfYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMpO1xcbjI3ODQ6XFx0XFxuMjc4NTpcXHRcXHRcXHRpZiAoZGFtb25faXNfbGFzdF9yZWdpb24ociwgdCkpXFxuMjc4NjpcXHRcXHRcXHRcXHRzLVxcdTAwM2VzdGF0Lm5yX3NuYXBzaG90cysrO1xcbjI3ODc6XFx0XFx0fVxcbjI3ODg6XFx0fVxcbjI3ODk6XFx0XFxuMjc5MDpcXHQvKlxcbjI3OTE6XFx0ICogZGFtb3NfYXBwbHlfdGFyZ2V0KCkgLSBBcHBseSBEQU1PUyBzY2hlbWVzIHRvIGEgZ2l2ZW4gdGFyZ2V0LlxcbjI3OTI6XFx0ICogQGM6XFx0XFx0XFx0bW9uaXRvcmluZyBjb250ZXh0IHRvIGFwcGx5IGl0cyBEQU1PUyBzY2hlbWVzIHRvLi5cXG4yNzkzOlxcdCAqIEB0OlxcdFxcdFxcdG1vbml0b3JpbmcgdGFyZ2V0IHRvIGFwcGx5IHRoZSBzY2hlbWVzIHRvLlxcbjI3OTQ6XFx0ICogQG1heF9yZWdpb25fc3o6XFx0bWF4aW11bSByZWdpb24gc2l6ZSBmb3IgQGMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQyOjM3LjY4MDI1MTQwNVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5NDk2OTQxNDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBbmFseXNpcyBvZiBEQU1PTiBRdW90YSBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzdWJzeXN0ZW0gd2l0aGluIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpbnZvbHZlcyB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgYXNzZXNzaW5nIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cbkZpcnN0LCBJIGV4YW1pbmUgdGhlIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGZ1bmN0aW9uLiBUaGUga2V5IGlzIHRoaXMgY2hlY2s6IGBpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSkgY29udGludWU7YC4gVGhlbiBJIGRlbHZlIGludG8gYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGFuZCBzZWUgdGhhdCBpZiBgcXVvdGEtXHUwMDNlZXN6YCAodGhlIHF1b3RhJ3MgZWZmZWN0aXZlIHNpemUpIGlzIHplcm8sIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSByZXR1cm5zIGB0cnVlYCwgaW5kaWNhdGluZyB0aGUgcXVvdGEgaXMgY29uc2lkZXJlZCBmdWxsLiBUaGlzIGlzIGR1ZSB0byBhIGNvbXBhcmlzb24gaW52b2x2aW5nIGBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6IFx1MDAzZT0gcXVvdGEtXHUwMDNlZXN6YCB3aGljaCB3aWxsIHJldHVybiB0cnVlIHNpbmNlIGBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6YCBpcyBcdTAwM2U9IDAuXG5cblRoZSBpbXBvcnRhbnQgcG9pbnQgaXMgdGhhdCBpZiBgcXVvdGEtXHUwMDNlZXN6YCBpcyAwLCB0aGUgREFNT04gc2NoZW1lIGFwcGxpY2F0aW9uIGxvZ2ljIGJlY29tZXMgYSBuby1vcCBkdWUgdG8gYSBxdW90YSBiZWluZyBcImZ1bGxcIiBiYXNlZCBvbiBpdHMgZWZmZWN0aXZlIHNpemUsIHJldHVybmluZyBlYXJseSBpbiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC5cblxuVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgYnkgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuICBXaXRob3V0IHRoZSBwYXRjaCwgdGhpcyBmdW5jdGlvbiB3YXMgcGVyZm9ybWluZyBhIGJ1bmNoIG9mIHVubmVjZXNzYXJ5IHdvcmsgd2hlbiBgcXVvdGEtXHUwMDNlZXN6YCBpcyAwLiBTcGVjaWZpY2FsbHksIGl0IHdhcyBhbGxvY2F0aW5nIGFuZCB6ZXJvaW5nIGEgaGlzdG9ncmFtLCBpdGVyYXRpbmcgdGhyb3VnaCByZWdpb25zLCBjYWxsaW5nIGBnZXRfc2NoZW1lX3Njb3JlKClgLCBjYWxjdWxhdGluZyBhIHNjb3JlIGhpc3RvZ3JhbSwgYW5kIGRldGVybWluaW5nIGEgbWluaW11bSBzY29yZS4gQWxsIHRoaXMgd2FzIHdhc3RlZCBiZWNhdXNlIHRoZSBxdW90YSB3YXMgZWZmZWN0aXZlbHkgZnVsbCAoZXN6ID09IDApIGFuZCBubyBzY2hlbWVzIGNvdWxkIGJlIGFwcGxpZWQuXG5cblRoaXMgcGF0Y2ggYWRkcyB0d28gY2hlY2tzIHRvIHNraXAgdGhhdCB3b3JrIGlmIGBxdW90YS1cdTAwM2Vlc3ogPT0gMGAgb3IgaWYgYGMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmVgIGRvZXMgbm90IGV4aXN0OlxuYGBgY1xuXHRpZiAoIWMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXG5cdFx0cmV0dXJuO1xuXHRpZiAocXVvdGEtXHUwMDNlZXN6ID09IDApXG5cdFx0cmV0dXJuO1xuYGBgXG5cbk5vdywgYXMgYSBzZWFzb25lZCBrZXJuZWwgZXhwZXJ0LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcuIFRoaXMgaXMgd2hlcmUgbXkgZXhwZXJ0aXNlIGNvbWVzIGludG8gcGxheTpcblxuMS4gICoqUmVhY2hhYmxlIENvZGU6KiogREFNT04gaXMgcGFydCBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1tLyksIHdoaWNoIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiBJdCdzIGVuYWJsZWQgdGhyb3VnaCBzZXZlcmFsIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFN5emthbGxlciBjYW4gaW50ZXJhY3Qgd2l0aCBEQU1PTiB2aWEgc3lzZnMgZmlsZXMsIHNwZWNpZmljYWxseSB1bmRlciBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4vLi4uYC4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgY29kZSBpcyAqZGlyZWN0bHkqIGV4cG9zZWQgYW5kIGZ1enphYmxlLlxuMi4gICoqSW1wYWN0IG9uIENvbnRyb2wgRmxvdzoqKiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gYGRhbW9zX2FkanVzdF9xdW90YSgpYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLiBUaGlzIGlzIG5vdCBhIHRyaXZpYWwgY2hhbmdlOyBpdCdzIGFsdGVyaW5nIHRoZSBsb2dpYydzIGV4ZWN1dGlvbiBwYXRoLiAgSXQgaXMgYSBjb3JlIE1NIGZlYXR1cmUgaW4gbW0vZGFtb24vLlxuMy4gICoqUG9zaXRpdmUgQ3JpdGVyaWE6KiogIFRoaXMgZGlyZWN0bHkgaGl0cyBhIFwicG9zaXRpdmVcIiBjcml0ZXJpYTogbW9kaWZpY2F0aW9uIG9mIGxvZ2ljIGluIG1lbW9yeSBtYW5hZ2VtZW50IChgbW0vYCkgY29kZS5cblxuNC4gKipOZWdhdGl2ZSBDcml0ZXJpYToqKiBObyBuZWdhdGl2ZSBjcml0ZXJpYSBhcHBseSAobm8gZG9jcywgbm8gdW5yZWFjaGFibGUgaGFyZHdhcmUsIGV0Yy4pLlxuXG5TaW5jZSB0aGlzIGlzIGV4ZWN1dGFibGUga2VybmVsIGNvZGUgaW4gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIGlzIHJlYWNoYWJsZSwgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5JIG5vdyBuZWVkIHRvIGlkZW50aWZ5IHdoYXQgZnVuY3Rpb25zIGFyZSBtb2RpZmllZDpcbiogICBgZGFtb3NfYWRqdXN0X3F1b3RhYCBpcyB0aGUgbWFpbiB0YXJnZXQsIHRob3VnaCBpdCdzIHN0YXRpYyBhbmQgcG90ZW50aWFsbHkgaW5saW5lZCAod2UgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggaW5saW5pbmcpLlxuKiAgIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGlzIHRoZSBjYWxsZXIgb2YgYGRhbW9zX2FkanVzdF9xdW90YWAsIGFuZCBpdCdzIGNhbGxlZCBieSBga2RhbW9uZF9mbmAuXG4qICAgTGV0J3MgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzeXNmcyBlbnRyeSBwb2ludHMgb3IgcHVibGljIERBTU9OIEFQSXMgdGhhdCBtaWdodCBiZSBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIGxvb2sgaW50byBgbW0vZGFtb24vc3lzZnMuY2AgYW5kIHNlYXJjaCBmb3Igc3lzZnMgd3JpdGUgaGFuZGxlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNzgxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQyOjQ3LjE3NzE5NTE5OVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk5MTgyOTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5c2ZzX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy1jb21tb24uYz05OT1jb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwMC1cXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3VsX3JhbmdlX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTAxOlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTAyLVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3VsX3JhbmdlX2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz01Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vc19zeXNmc19wcm9iZV9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTgtXFx0LnJlbGVhc2UgPSBkYW1vc19zeXNmc19wcm9iZV9yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1OTpcXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02MC1cXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vc19zeXNmc19wcm9iZV9ncm91cHMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3Byb2Jlc19rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyLVxcdC5yZWxlYXNlID0gZGFtb3Nfc3lzZnNfcHJvYmVzX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MzpcXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDQtfTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODc9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg4LVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODk6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkwLVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTM1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzU3LVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzU4OlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM1OS1cXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19ncm91cHMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTEwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3N0YXRzX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MTEtXFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zdGF0c19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MTI6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTEzLVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3N0YXRzX2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz04ODI9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtODgzLVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo4ODQ6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtODg1LVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEwMTA9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcnNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwMTEtXFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyc19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMDEyOlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwMTMtXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcnNfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMDU9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfd2F0ZXJtYXJrc19rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIwNi1cXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3dhdGVybWFya3NfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIwNzpcXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjA4LVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3dhdGVybWFya3NfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE0NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ0NS1cXHQucmVsZWFzZSA9IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ0NjpcXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDQ3LVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE1NjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NjUtXFx0LnJlbGVhc2UgPSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTY2OlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NjctXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE2NzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfd2VpZ2h0c19rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTY3NS1cXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3dlaWdodHNfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTY3NjpcXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjc3LVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3dlaWdodHNfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE5NDk9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcXVvdGFzX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTUwLVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfcXVvdGFzX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5NTE6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk1Mi1cXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19xdW90YXNfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIwNDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfYWNjZXNzX3BhdHRlcm5fa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIwNDUtXFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19hY2Nlc3NfcGF0dGVybl9yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMDQ2OlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIwNDctXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfYWNjZXNzX3BhdHRlcm5fZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIxMjM9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfZGVzdF9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjEyNC1cXHQucmVsZWFzZSA9IGRhbW9zX3N5c2ZzX2Rlc3RfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjEyNTpcXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMTI2LVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9zX3N5c2ZzX2Rlc3RfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIyNDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfZGVzdHNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyNDUtXFx0LnJlbGVhc2UgPSBkYW1vc19zeXNmc19kZXN0c19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMjQ2OlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyNDctXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb3Nfc3lzZnNfZGVzdHNfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI2NzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjc1LVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI2NzY6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY3Ny1cXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19zY2hlbWVfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI3OTg9Y29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVzX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzk5LVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lc19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODAwOlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4MDEtXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfc2NoZW1lc19ncm91cHMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTgxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3JlZ2lvbl9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy5jLTgyLVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfcmVnaW9uX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMuYzo4MzpcXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLmMtODQtXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfcmVnaW9uX2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjAwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3JlZ2lvbnNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMuYy0yMDEtXFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19yZWdpb25zX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMuYzoyMDI6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy5jLTIwMy1cXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19yZWdpb25zX2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MzA3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3RhcmdldF9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy5jLTMwOC1cXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3RhcmdldF9yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLmM6MzA5OlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMuYy0zMTAtXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfdGFyZ2V0X2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NDM1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3RhcmdldHNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMuYy00MzYtXFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc190YXJnZXRzX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMuYzo0Mzc6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy5jLTQzOC1cXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc190YXJnZXRzX2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NTkyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2ludGVydmFsc19nb2FsX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLmMtNTkzLVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dvYWxfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy5jOjU5NDpcXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLmMtNTk1LVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX2ludGVydmFsc19nb2FsX2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NzQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2ludGVydmFsc19rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy5jLTc0Ny1cXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX2ludGVydmFsc19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLmM6NzQ4OlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMuYy03NDktXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9ODQzPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3ByZXBfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMuYy04NDQtXFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19wcmVwX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMuYzo4NDU6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy5jLTg0Ni1cXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19wcmVwX2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9OTYyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3ByZXBzX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLmMtOTYzLVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfcHJlcHNfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy5jOjk2NDpcXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLmMtOTY1LVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3ByZXBzX2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTE2MD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19maWx0ZXJfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMuYy0xMTYxLVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfZmlsdGVyX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMuYzoxMTYyOlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMuYy0xMTYzLVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX2ZpbHRlcl9ncm91cHMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTEyNzk9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfZmlsdGVyc19rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy5jLTEyODAtXFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19maWx0ZXJzX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMuYzoxMjgxOlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMuYy0xMjgyLVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX2ZpbHRlcnNfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xMzg2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3Byb2JlX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTM4Ny1cXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3Byb2JlX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMuYzoxMzg4OlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMuYy0xMzg5LVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3Byb2JlX2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTUxNT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19wcm9iZXNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMuYy0xNTE2LVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfcHJvYmVzX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMuYzoxNTE3OlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMuYy0xNTE4LVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3Byb2Jlc19ncm91cHMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE2MjE9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfYXR0cnNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMuYy0xNjIyLVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfYXR0cnNfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy5jOjE2MjM6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy5jLTE2MjQtXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfYXR0cnNfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xNjMwLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTYzMTpzdHJ1Y3QgZGFtb25fc3lzZnNfb3BzX25hbWUge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTYzMi1cXHRlbnVtIGRhbW9uX29wc19pZCBvcHNfaWQ7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE2MzUtXFxubW0vZGFtb24vc3lzZnMuYzoxNjM2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZGFtb25fc3lzZnNfb3BzX25hbWUgZGFtb25fc3lzZnNfb3BzX25hbWVzW10gPSB7XFxubW0vZGFtb24vc3lzZnMuYy0xNjM3LVxcdHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTc2OD1zdGF0aWMgc3NpemVfdCBhdmFpbF9vcGVyYXRpb25zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE3NzMtXFxubW0vZGFtb24vc3lzZnMuYzoxNzc0OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGRhbW9uX3N5c2ZzX29wc19uYW1lcyk7IGkrKykge1xcbm1tL2RhbW9uL3N5c2ZzLmM6MTc3NTpcXHRcXHRjb25zdCBzdHJ1Y3QgZGFtb25fc3lzZnNfb3BzX25hbWUgKm9wc19uYW1lO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTc3Ni1cXG5tbS9kYW1vbi9zeXNmcy5jOjE3Nzc6XFx0XFx0b3BzX25hbWUgPSBcXHUwMDI2ZGFtb25fc3lzZnNfb3BzX25hbWVzW2ldO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTc3OC1cXHRcXHRpZiAoIWRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKG9wc19uYW1lLVxcdTAwM2VvcHNfaWQpKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xNzg1PXN0YXRpYyBzc2l6ZV90IG9wZXJhdGlvbnNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTc5MS1cXG5tbS9kYW1vbi9zeXNmcy5jOjE3OTI6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoZGFtb25fc3lzZnNfb3BzX25hbWVzKTsgaSsrKSB7XFxubW0vZGFtb24vc3lzZnMuYzoxNzkzOlxcdFxcdGNvbnN0IHN0cnVjdCBkYW1vbl9zeXNmc19vcHNfbmFtZSAqb3BzX25hbWU7XFxubW0vZGFtb24vc3lzZnMuYy0xNzk0LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTc5NTpcXHRcXHRvcHNfbmFtZSA9IFxcdTAwMjZkYW1vbl9zeXNmc19vcHNfbmFtZXNbaV07XFxubW0vZGFtb24vc3lzZnMuYy0xNzk2LVxcdFxcdGlmIChvcHNfbmFtZS1cXHUwMDNlb3BzX2lkID09IGNvbnRleHQtXFx1MDAzZW9wc19pZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTgwMj1zdGF0aWMgc3NpemVfdCBvcGVyYXRpb25zX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xODA4LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTgwOTpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShkYW1vbl9zeXNmc19vcHNfbmFtZXMpOyBpKyspIHtcXG5tbS9kYW1vbi9zeXNmcy5jOjE4MTA6XFx0XFx0Y29uc3Qgc3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lICpvcHNfbmFtZTtcXG5tbS9kYW1vbi9zeXNmcy5jLTE4MTEtXFxubW0vZGFtb24vc3lzZnMuYzoxODEyOlxcdFxcdG9wc19uYW1lID0gXFx1MDAyNmRhbW9uX3N5c2ZzX29wc19uYW1lc1tpXTtcXG5tbS9kYW1vbi9zeXNmcy5jLTE4MTMtXFx0XFx0aWYgKHN5c2ZzX3N0cmVxKGJ1Ziwgb3BzX25hbWUtXFx1MDAzZW5hbWUpKSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE4OTc9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfY29udGV4dF9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy5jLTE4OTgtXFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19jb250ZXh0X3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMuYzoxODk5OlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMuYy0xOTAwLVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX2NvbnRleHRfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMDI2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2NvbnRleHRzX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjAyNy1cXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX2NvbnRleHRzX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMuYzoyMDI4OlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMuYy0yMDI5LVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX2NvbnRleHRzX2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9Mjc3MT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19rZGFtb25kX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjc3Mi1cXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX2tkYW1vbmRfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy5jOjI3NzM6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy5jLTI3NzQtXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfa2RhbW9uZF9ncm91cHMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI5MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfa2RhbW9uZHNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMuYy0yOTE3LVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfa2RhbW9uZHNfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy5jOjI5MTg6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy5jLTI5MTktXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfa2RhbW9uZHNfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yOTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3VpX2Rpcl9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy5jLTI5NjctXFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc191aV9kaXJfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy5jOjI5Njg6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy5jLTI5NjktXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfdWlfZGlyX2dyb3VwcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6NDcuOTc2Mzg1MjdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mzc2ODMxODQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIERBTU9OIEtlcm5lbCBDb2RlKipcblxuT2theSwgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoaWNoIERBTU9OIGZ1bmN0aW9uIGlzIHRoZSBrZXkgb25lIHRvIGZvY3VzIG9uIGhlcmUsIHRoZSBvbmUgdGhhdCdzIHRoZSBtb3N0IHJlbGV2YW50IHRvIHRoaXMgcGFydGljdWxhciBpc3N1ZS4gSSd2ZSBnb3QgYSBmZXcgY2FuZGlkYXRlcyBib3VuY2luZyBhcm91bmQ6IGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLCB0aGF0IGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uLCBtYXliZSBgZGFtb25fc3lzZnNfY21kX3JlcXVlc3RgLCBvciBpcyBpdCB0aGF0IGBkYW1vbl9zeXNmc19zdGF0ZV9zdG9yZWAgZnVuY3Rpb24/IEkgc3VzcGVjdCBpdOKAmXMgZ29pbmcgdG8gaW52b2x2ZSBzeXNmcyBpbnRlcmFjdGlvbiwgZ2l2ZW4gdGhlIG9wdGlvbnMuXG5cbk15IGluc3RpbmN0IGlzIGxlYW5pbmcgdG93YXJkcyB0aGF0IGBzdGF0ZV9zdG9yZWAgZnVuY3Rpb24sIHBhcnRpY3VsYXJseSBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIFRpbWUgdG8gY2hlY2sgdGhlIHNvdXJjZSBjb2RlLiBMZXQgbWUganVtcCBpbnRvIGBtbS9kYW1vbi9zeXNmcy5jYCBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIGBzdGF0ZV9zdG9yZWAuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3RhdGUgY2hhbmdlcyBhcmUgaGFuZGxlZCwgYW5kIHdoYXQgdGhhdCBwYXJ0IG9mIHRoZSBrZXJuZWwgZG9lcy4gSG9wZWZ1bGx5LCB0aGUgaW1wbGVtZW50YXRpb24gdGhlcmUgd2lsbCBiZSBkZXNjcmlwdGl2ZSBlbm91Z2ggdG8gY2xhcmlmeSB0aGUgZXhhY3QgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE1MDAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0Mjo1MS43NDQ3MDU5NTFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDU2NTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRlX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMuYz0yNjM2PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI2NzUtXFxubW0vZGFtb24vc3lzZnMuYzoyNjc2OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxubW0vZGFtb24vc3lzZnMuYy0yNjc3LVxcdFxcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0Mjo1MS43OTExNjU0ODNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzAyMjU5NjgwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoJ3MgSW1wYWN0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyBpdHMgcG90ZW50aWFsIGVmZmVjdHMuIEZpcnN0LCBgc3RhdGVfc3RvcmVgIOKAkyB0aGF0J3MgdGhlIGNydWNpYWwgc3lzZnMgd3JpdGUgaGFuZGxlci4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCBmb3Igc3RhcnRpbmcsIHN0b3BwaW5nLCBvciBjb21taXR0aW5nIHRoZSBrZGFtb25kcywgdGhlIGNvcmUgb2YgdGhlIERBTU9OIGZ1bmN0aW9uYWxpdHksIHVzaW5nIGtleXdvcmRzIGxpa2UgXCJvblwiLCBcIm9mZlwiLCBhbmQgXCJjb21taXRcIi5cblxuTm93LCB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgYWN0dWFsbHkgbW9kaWZpZWQgaW4gdGhpcyBwYXRjaCBpcyBgZGFtb3NfYWRqdXN0X3F1b3RhYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIExldCdzIGNvbmZpcm0gaWYgYGRhbW9zX2FkanVzdF9xdW90YWAgaXMgZGVjbGFyZWQgYXMgc3RhdGljIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gWWVzLCBpdCBpczogYHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpYC4gVGhlIG5leHQga2V5IGNvbm5lY3Rpb24gSSdtIHNlZWtpbmcgaXMgaG93IGBkYW1vc19hZGp1c3RfcXVvdGFgIGlzIGNhbGxlZC4gQWgsIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGNhbGxzIGBkYW1vc19hZGp1c3RfcXVvdGEoYywgcylgLiBUaGlzIGNsZWFybHkgZGVtb25zdHJhdGVzIGhvdyB0aGUgdHdvIHBpZWNlcyBhcmUgcmVsYXRlZC5cblxuU28sIGxldCdzIGV4cGxvcmUgYGtkYW1vbmRfZm5gIG5vdy4gTGV0J3Mgc2VlIGhvdyBga2RhbW9uZF9mbmAgaXMgc3RhcnRlZDogYHN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKWAuIEkgbmVlZCB0byBzZWUgaG93IGl0J3MgaW5pdGlhdGVkLCByaWdodD8gTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBgZGFtb25fc3RhcnRgIGtpY2tzIGl0IG9mZiEgTGV0J3MgZXhhbWluZSBgZGFtb25fc3RhcnRgIHRvIHVuZGVyc3RhbmQgdGhlIGtkYW1vbmQgZXhlY3V0aW9uIGZsb3cgYW5kIGhvdyB0aGUgY2hhbmdlcyB0byBgZGFtb3NfYWRqdXN0X3F1b3RhYCB3aWxsIGJlIHV0aWxpemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTk1NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0Mjo1NC44MTM3NjUxNTVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjYwMDczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMDgzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTEwOC0gKiBJbiBkZXRhaWwsIGFsbCBEQU1PTiBBUEkgY2FsbGVycyBkaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGluaXRpYWxcXG5tbS9kYW1vbi9jb3JlLmM6MTEwOTogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXFxubW0vZGFtb24vY29yZS5jLTExMTAtICogYWxzbyBpbmRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiB2aWEgZGFtb25fY2FsbCgpIC1cXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwMzk9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNDEtLypcXG5tbS9kYW1vbi9jb3JlLmM6MjA0MjogKiBfX2RhbW9uX3N0YXJ0KCkgLSBTdGFydHMgbW9uaXRvcmluZyB3aXRoIGdpdmVuIGNvbnRleHQuXFxubW0vZGFtb24vY29yZS5jLTIwNDMtICogQGN0eDpcXHRtb25pdG9yaW5nIGNvbnRleHRcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDQ4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDQ5OnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTIwNTAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNzEtLyoqXFxubW0vZGFtb24vY29yZS5jOjIwNzI6ICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXFxubW0vZGFtb24vY29yZS5jLTIwNzMtICogQGN0eHM6XFx0YW4gYXJyYXkgb2YgdGhlIHBvaW50ZXJzIGZvciBjb250ZXh0cyB0byBzdGFydCBtb25pdG9yaW5nXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA4MC0gKiBAZXhjbHVzaXZlIGlzIHRydWUgYW5kIGEgZ3JvdXAgb2YgdGhyZWFkcyB0aGF0IGNyZWF0ZWQgYnkgb3RoZXJcXG5tbS9kYW1vbi9jb3JlLmM6MjA4MTogKiAnZGFtb25fc3RhcnQoKScgY2FsbCBpcyBjdXJyZW50bHkgcnVubmluZywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYnV0XFxubW0vZGFtb24vY29yZS5jLTIwODItICogcmV0dXJucyAtRUJVU1kuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA4NS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjA4NjppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcXG5tbS9kYW1vbi9jb3JlLmMtMjA4Ny17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjExMS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfY3R4czsgaSsrKSB7XFxubW0vZGFtb24vY29yZS5jOjIxMTI6XFx0XFx0ZXJyID0gX19kYW1vbl9zdGFydChjdHhzW2ldKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjExMy1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIyMTQ9aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIyNjItICpcXG5tbS9kYW1vbi9jb3JlLmM6MjI2MzogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxcbm1tL2RhbW9uL2NvcmUuYy0yMjY0LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz00MDE9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQxMy1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjQxNDpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCB0cnVlKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTQxNS1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTMyND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTMzNi1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzM3OlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIHRydWUpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0zMzgtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYz0yMDA9c3RhdGljIGludCBkYW1vbl9zdGF0X3N0YXJ0KHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmMtMjEyLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL3N0YXQuYzoyMTM6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmRhbW9uX3N0YXRfY29udGV4dCwgMSwgdHJ1ZSk7XFxubW0vZGFtb24vc3RhdC5jLTIxNC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI1MTU9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNTM5LVxcdH1cXG5tbS9kYW1vbi9zeXNmcy5jOjI1NDA6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjU0MS1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQyOjU0Ljg1OTAzMTAxN1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MTIxNjg0NDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IERBTU9OIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbW0vZGFtb24vY29yZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGF0IHRoZSBjaGFuZ2VzIGFyb3VuZCBgZGFtb3NfYWRqdXN0X3F1b3RhYC4gVGhpcyBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBzdGF0aWMgZnVuY3Rpb25zIGluIGtlcm5lbCBjb2RlIG9mdGVuIGdldCBpbmxpbmVkLCBlc3BlY2lhbGx5IGlmIHRoZXkncmUgc21hbGwgb3IgaGF2ZSBhIHNpbmdsZSBjYWxsZXIuIEJ1dCBgZGFtb3NfYWRqdXN0X3F1b3RhYCBzZWVtcyBjb21wbGV4IGVub3VnaCwgd2l0aCB0aGF0IGxvb3AgYW5kIHNjb3JlIGhpc3RvZ3JhbSwgdGhhdCBpdCBtaWdodCBiZSBrZXB0IGFzIGEgZGlzdGluY3Qgc3ltYm9sLiBNeSBndXQgZmVlbGluZyBpcyB0aGlzIGlzIG5vdCBpbmxpbmVkLlxuXG5UaGUga2V5IHBvaW50cyBhcmU6IGBkYW1vbl9zdGFydGAgKG9yIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCksIHdoaWNoIGlzIG5vbi1zdGF0aWMsIGBkYW1vc19hZGp1c3RfcXVvdGFgLCB0aGUgbW9kaWZpZWQgc3RhdGljIGZ1bmN0aW9uLCBhbmQgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AsIHdoaWNoIGNhbGxzIGl0LiBUaGlzIGdpdmVzIG1lIGEgcHJldHR5IHRpZ2h0IGZvY3VzIGZvciBhbmFseXppbmcgdGhlIGNoYW5nZXMuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBvcHRpb25zLiBGaXJzdCwgYG1tL01ha2VmaWxlYCBoYXMgYG9iai0kKENPTkZJR19EQU1PTikgKz0gZGFtb24vYCwgYW5kIHRoZW4gYG1tL2RhbW9uL01ha2VmaWxlYCBoYXMgYG9iai15IDo9IGNvcmUub2AuIFNvIHdlIGRlZmluaXRlbHkgbmVlZCBgQ09ORklHX0RBTU9OYCBmb3IgYGNvcmUub2AgdG8gYmUgYnVpbHQuIEJ1dCB3aGF0IGRvZXMgKnRoYXQqIGRlcGVuZCBvbj8gTG9va2luZyBpbiBgbW0vZGFtb24vS2NvbmZpZ2AsIEkgc2VlOlxuXG5gYGBrY29uZmlnXG5jb25maWcgREFNT05cblx0Ym9vbCBcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wiXG5cdGhlbHBcblx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IG1vbml0b3JzIGRhdGEgYWNjZXNzZXMgb2YgZ2l2ZW4gYWRkcmVzc1xuXHQgIHNwYWNlcy4uLlxuYGBgXG5cbk5vIGRlcGVuZGVuY2llcyBkaXJlY3RseSBsaXN0ZWQgZm9yIGBDT05GSUdfREFNT05gLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC5cblxuQnV0IHRoZW4gSSBzdGFydCB0aGlua2luZyBhYm91dCB3aGF0IGludGVyZmFjZXMgYXJlIGV4cG9zZWQgYW5kIGhvdyB0aGUgc2NoZW1lcyBhY3R1YWxseSB3b3JrLiBEQU1PUyAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZy1iYXNlZCBPcGVyYXRpb24gU2NoZW1lcykgaXMgY2xlYXJseSBwYXJ0IG9mIGBjb3JlLmNgLCBzbyB0aGF0J3Mgd2hlcmUgdGhlIGFjdGlvbiBpcy5cblxuVG8gY29uZmlndXJlIHNjaGVtZXMgZnJvbSB1c2Vyc3BhY2UsIEknbGwgbmVlZCBgQ09ORklHX0RBTU9OX1NZU0ZTYCwgd2hpY2ggbGV0cyBtZSBjb25maWd1cmUgc2NoZW1lcywgcXVvdGFzLCBnb2FscywgYW5kIHNvIG9uLiBOb3csIGBDT05GSUdfREFNT05fU1lTRlNgIGRvZXMgaGF2ZSBkZXBlbmRlbmNpZXM6IGl0IGRlcGVuZHMgb24gYERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU2AuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuXG5cbkZpbmFsbHksIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGluIGBkYW1vc19hZGp1c3RfcXVvdGFgLCBJIHNlZSBgaWYgKCFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKSByZXR1cm47YC4gU28gdGhlIGNvZGUgY2xlYXJseSB1c2VzIG9wZXJhdGlvbiBjYWxsYmFja3MuIFdoZXJlIGlzIGBnZXRfc2NoZW1lX3Njb3JlYCBjb21pbmcgZnJvbT8gSSBuZWVkIHRvIHNlYXJjaCBmb3IgdGhhdC4gSSdtIGdvaW5nIHRvIGdyZXAgZm9yIGBnZXRfc2NoZW1lX3Njb3JlYCByaWdodCBhd2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzY5MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0Mjo1OS45ODA3MTgzNjlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjUxNTQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfc2NoZW1lX3Njb3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yNDEzPXN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0MTctXFxubW0vZGFtb24vY29yZS5jOjI0MTg6XFx0aWYgKCFyZXQgfHwgIWRhbW9zX3F1b3RhX2lzX3NldChcXHUwMDI2cy1cXHUwMDNlcXVvdGEpIHx8ICFjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcXG5tbS9kYW1vbi9jb3JlLmMtMjQxOS1cXHRcXHRyZXR1cm4gcmV0O1xcbm1tL2RhbW9uL2NvcmUuYy0yNDIwLVxcbm1tL2RhbW9uL2NvcmUuYzoyNDIxOlxcdHJldHVybiBjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKSBcXHUwMDNlPSBzLVxcdTAwM2VxdW90YS5taW5fc2NvcmU7XFxubW0vZGFtb24vY29yZS5jLTI0MjItfVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMyOTA9c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzI0LVxcbm1tL2RhbW9uL2NvcmUuYzozMzI1OlxcdGlmICghYy1cXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXFxubW0vZGFtb24vY29yZS5jLTMzMjYtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzMzktXFx0XFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vY29yZS5jOjMzNDA6XFx0XFx0XFx0c2NvcmUgPSBjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzM0MS1cXHRcXHRcXHRjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbVtzY29yZV0gKz1cXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9NDYyPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3BhX2luaXRjYWxsKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTQ3My1cXHRcXHQuYXBwbHlfc2NoZW1lID0gZGFtb25fcGFfYXBwbHlfc2NoZW1lLFxcbm1tL2RhbW9uL3BhZGRyLmM6NDc0OlxcdFxcdC5nZXRfc2NoZW1lX3Njb3JlID0gZGFtb25fcGFfc2NoZW1lX3Njb3JlLFxcbm1tL2RhbW9uL3BhZGRyLmMtNDc1LVxcdH07XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTExNDM9c3RhdGljIGludCBfX2luaXQgZGFtb25fdmFfaW5pdGNhbGwodm9pZClcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMTE1NS1cXHRcXHQuYXBwbHlfc2NoZW1lID0gZGFtb25fdmFfYXBwbHlfc2NoZW1lLFxcbm1tL2RhbW9uL3ZhZGRyLmM6MTE1NjpcXHRcXHQuZ2V0X3NjaGVtZV9zY29yZSA9IGRhbW9uX3ZhX3NjaGVtZV9zY29yZSxcXG5tbS9kYW1vbi92YWRkci5jLTExNTctXFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6MDAuMDk3MjM4OTlaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTAwOTYxNDk4MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gQ29uZmlndXJhdGlvbiBBbmFseXNpcyBhbmQgVG9vbCBDYWxsIFByZXBhcmF0aW9uKipcblxuT2theSwgc28gSSd2ZSBqdXN0IHRyYWNlZCB3aGVyZSBgZ2V0X3NjaGVtZV9zY29yZWAgZ2V0cyBkZWZpbmVkLiBJdCBsb29rcyBsaWtlIGBtbS9kYW1vbi9wYWRkci5jYCBwcm92aWRlcyBgZGFtb25fcGFfc2NoZW1lX3Njb3JlYCB3aGVuIGBDT05GSUdfREFNT05fUEFERFJgIGlzIGVuYWJsZWQsIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AgcHJvdmlkZXMgYGRhbW9uX3ZhX3NjaGVtZV9zY29yZWAgd2hlbiBgQ09ORklHX0RBTU9OX1ZBRERSYCBpcyBlbmFibGVkLiBVc2VyLXNwYWNlIGludGVyYWN0aW9uIHJlcXVpcmVzIGBDT05GSUdfREFNT05fU1lTRlNgLlxuXG5JJ20gc2VlaW5nIHRoYXQgYm90aCBgREFNT05fUEFERFJgIGFuZCBgREFNT05fVkFERFJgIGRlcGVuZCBvbiBgREFNT05gIGFuZCBgTU1VYCwgd2hpbGUgYERBTU9OX1NZU0ZTYCBkZXBlbmRzIG9uIGBEQU1PTmAgYW5kIGBTWVNGU2AuIENvbnNlcXVlbnRseSwgdG8gZW5hYmxlIHRoZSByZWxldmFudCBEQU1PTiBmdW5jdGlvbmFsaXR5LCBJJ20gZ29pbmcgdG8gc2V0IHRoZXNlIGZvdXIgY29uZmlnczogYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1ZBRERSYCwgYW5kIGBEQU1PTl9TWVNGU2AuXG5cbk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgdGhlIHByb21wdCdzIHJlcXVpcmVtZW50cyBhcmUgbWV0LiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyB0cnVlLCBnb29kLiBXZSBoYXZlIG5vbi11YmlxdWl0b3VzIGtlcm5lbCBmdW5jdGlvbnMgZGVmaW5lZCBhcyBgRm9jdXNTeW1ib2xzYCwgd2hpY2ggYXJlIGFwcHJvcHJpYXRlLiBBbmQsIGFzIGRpc2N1c3NlZCBhYm92ZSwgSSd2ZSBnb3QgdGhlIGBFbmFibGVDb25maWdzYCBzZXQgY29ycmVjdGx5LiBJJ3ZlIGFsc28gdmVyaWZpZWQgdGhlIHJlcXVpcmVtZW50cyB3aXRoIHRoZSBwcm92aWRlZCBzb3VyY2UgY29kZSBhbmQgYnVpbGQgY29uZmlnLiBJdCBzZWVtcyBsaWtlIGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTQwMiwiT3V0cHV0VG9rZW5zIjoxNTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6MTAuMTkzMzkyNTY2WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY2NDkyNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1ZBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3NfYWRqdXN0X3F1b3RhXCIsXG4gICAgXCJrZGFtb25kX2FwcGx5X3NjaGVtZXNcIixcbiAgICBcImRhbW9uX3N0YXJ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERBTU9TIHF1b3RhIGFkanVzdG1lbnQgbG9naWMgaW4gbW0vZGFtb24vY29yZS5jIGJ5IGFkZGluZyBhbiBlYXJseSByZXR1cm4gaW4gZGFtb3NfYWRqdXN0X3F1b3RhKCkgd2hlbiBlZmZlY3RpdmUgcXVvdGEgc2l6ZSAoZXN6KSBpcyB6ZXJvLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSwgYWx0ZXJpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCByZWdpb24gc2NvcmluZyBiZWhhdmlvciB3aGVuIHF1b3RhIGlzIGV4aGF1c3RlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiLFxuICAgIFwia2RhbW9uZF9hcHBseV9zY2hlbWVzXCIsXG4gICAgXCJkYW1vbl9zdGFydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PUyBxdW90YSBhZGp1c3RtZW50IGxvZ2ljIGluIG1tL2RhbW9uL2NvcmUuYyBieSBhZGRpbmcgYW4gZWFybHkgcmV0dXJuIGluIGRhbW9zX2FkanVzdF9xdW90YSgpIHdoZW4gZWZmZWN0aXZlIHF1b3RhIHNpemUgKGVzeikgaXMgemVyby4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UsIGFsdGVyaW5nIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgcmVnaW9uIHNjb3JpbmcgYmVoYXZpb3Igd2hlbiBxdW90YSBpcyBleGhhdXN0ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQzOjEwLjI3MDA0OTU1NFoiLCJTZXEiOjUxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3OTAzMTkzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MzoxMC4yNzA1MjI0NTRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0Mzc4OTg0Mjg1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBlYXJseSByZXR1cm4gY2hlY2sgKGBpZiAocXVvdGEtXFx1MDAzZWVzeiA9PSAwKSByZXR1cm47YCkgaW4gYGRhbW9zX2FkanVzdF9xdW90YSgpYCBpbiBgbW0vZGFtb24vY29yZS5jYCB3aGVuIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSBpcyB6ZXJvLlxcblxcblRoZSBjaGVjayBpbnNwZWN0cyBgcXVvdGEtXFx1MDAzZWVzemAsIHdoaWNoIGlzIGRldGVybWluaXN0aWNhbGx5IGluaXRpYWxpemVkIGFuZCBjb21wdXRlZCBieSB0aGUgREFNT04gc3Vic3lzdGVtICh2aWEgYGRhbW9zX3F1b3RhX2luaXQoKWAgYW5kIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKClgKS4gVGhlIHBhdGNoIGludHJvZHVjZXMgbm8gbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGFueSBkYXRhIHRvIHVzZXJzcGFjZSwgZG9lcyBub3QgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMgb3IgYnVmZmVycyB1bmluaXRpYWxpemVkLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLlxcblxcbkJlY2F1c2UgdGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQwYzUwNWIzZjM4MDZkZWE4ZjAxMzJlOGJiYzAyZmJhMTU5MGNhMDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAxMzo0MTowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggMDZjZjJhYjdlOTdkNy4uOGZlMTVmMTdiZTgwZiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMzMyNCw2ICszMzI0LDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbiBcbiBcdGlmICghYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcbiBcdFx0cmV0dXJuO1xuK1x0aWYgKHF1b3RhLVx1MDAzZWVzeiA9PSAwKVxuK1x0XHRyZXR1cm47XG4gXG4gXHQvKiBGaWxsIHVwIHRoZSBzY29yZSBoaXN0b2dyYW0gKi9cbiBcdG1lbXNldChjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtLCAwLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6MTAuMjcwNTIzODc0WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ5MzUwNjI4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gT3B0aW1pemF0aW9uIFRob3VnaHRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBhIERBTU9OIHBhdGNoLCBzcGVjaWZpY2FsbHkgaW4gYG1tL2RhbW9uL2NvcmUuY2AsIGFyb3VuZCBsaW5lIDMzMjQuIFRoZSByZWxldmFudCBwYXJ0IGlzIGluIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBmdW5jdGlvbi4gSSBzZWUgYSBuZXcgY29uZGl0aW9uYWwgY2hlY2sgaGVyZS4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIHNob3J0LWNpcmN1aXRpbmcgdGhlIHF1b3RhIGFkanVzdG1lbnQgaWYgYHF1b3RhLVx1MDAzZWVzemAgaXMgemVyby5cblxuTm93LCB0aGF0J3MgaW50ZXJlc3RpbmcuIGBxdW90YS1cdTAwM2Vlc3pgIGxpa2VseSByZXByZXNlbnRzIHRoZSBlZmZlY3RpdmUgc2l6ZSwgb3IgcGVyaGFwcyB0aGUgZXh0ZW50IHNpemUsIGFzc29jaWF0ZWQgd2l0aCB0aGUgcXVvdGEuIFRoZSBwcmlvciBsb2dpYyB3YXMgY2FsbGluZyBgYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZWAgcmVnYXJkbGVzcywgYW5kIHByZXN1bWFibHkgdGhhdCBmdW5jdGlvbiBkb2VzIHNvbWV0aGluZyB3aXRoIHRoYXQgc2l6ZS4gU28sIHRoZSBxdWVzdGlvbiBiZWNvbWVzOiB3aHkgdGhlIGFkZGVkIGNoZWNrP1xuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBhbiBlc3ogb2YgemVybyBwcm9iYWJseSBtZWFucyB0aGUgcXVvdGEgaXMgaW52YWxpZCBvciB1bmluaXRpYWxpemVkLiBDYWxsaW5nIGBnZXRfc2NoZW1lX3Njb3JlYCBvbiBzb21ldGhpbmcgd2l0aCBubyBlZmZlY3RpdmUgc2l6ZSBjb3VsZCBsZWFkIHRvIGEgZGl2aWRlLWJ5LXplcm8sIG9yIHVuZGVmaW5lZCBiZWhhdmlvciwgb3Igc2ltcGx5IHJldHVybiBnYXJiYWdlIGRhdGEuIEl0J3MgYSBjbGFzc2ljIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBtb3ZlLlxuXG5NeSBuZXh0IGxpbmUgb2YgdGhvdWdodCBpcyB0byBjaGVjayB3aGF0IGBnZXRfc2NoZW1lX3Njb3JlYCBkb2VzIHdpdGggdGhlIGVzei4gTGV0J3Mgc2VlIGlmIHRoZSBjb2RlIGNhbGxzIGBnZXRfc2NoZW1lX3Njb3JlYCBldmVuIGlmIGVzeiBpcyB6ZXJvLiBBbmQsIGFsc28gd2h5IGl0J3Mgbm90IGNoZWNrZWQgZWFybGllciwgaWYgdGhlIHplcm8gY2FzZSBpcyBpbnZhbGlkLiBQZXJoYXBzIHRoaXMgY29uZGl0aW9uYWwgd2FzIG1pc3NlZCBkdXJpbmcgaW5pdGlhbCBkZXZlbG9wbWVudCwgb3IgdGhlIGVkZ2UgY2FzZSB3YXNuJ3QgY29uc2lkZXJlZCBhdCB0aGF0IHRpbWUuXG5cbkl0J3MgYSBnb29kIG9wdGltaXphdGlvbiwgbGlrZWx5IGF2b2lkaW5nIHVubmVjZXNzYXJ5IGNhbGN1bGF0aW9ucyBhbmQgcG90ZW50aWFsIGVycm9ycyB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBlbXB0eSBvciB1bmluaXRpYWxpemVkIHF1b3RhIGVudHJpZXMuIEEgY2xlYW4gYW5kIHNlbnNpYmxlIGFkZGl0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6MTUuMjA1NTkxMDIzWiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzMxMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzMxMDpcXHRcXHRpZiAoIXRpbWVfaW5fcmFuZ2Vfb3BlbihqaWZmaWVzLCBxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tLFxcbjMzMTE6XFx0XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSArXFxuMzMxMjpcXHRcXHRcXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKHF1b3RhLVxcdTAwM2VyZXNldF9pbnRlcnZhbCkpKSB7XFxuMzMxMzpcXHRcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxuMzMxNDpcXHRcXHRcXHRcXHRzLVxcdTAwM2VzdGF0LnF0X2V4Y2VlZHMrKztcXG4zMzE1OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX3N6ICs9IHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6O1xcbjMzMTY6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XFxuMzMxNzpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiA9IDA7XFxuMzMxODpcXHRcXHRcXHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcXG4zMzE5OlxcdFxcdFxcdFxcdGNhY2hlZF9lc3ogPSBxdW90YS1cXHUwMDNlZXN6O1xcbjMzMjA6XFx0XFx0XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG4zMzIxOlxcdFxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2IHF1b3RhLVxcdTAwM2Vlc3ogIT0gY2FjaGVkX2VzeilcXG4zMzIyOlxcdFxcdFxcdFxcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XFxuMzMyMzpcXHRcXHR9XFxuMzMyNDpcXHRcXG4zMzI1OlxcdFxcdGlmICghYy1cXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXFxuMzMyNjpcXHRcXHRcXHRyZXR1cm47XFxuMzMyNzpcXHRcXHRpZiAocXVvdGEtXFx1MDAzZWVzeiA9PSAwKVxcbjMzMjg6XFx0XFx0XFx0cmV0dXJuO1xcbjMzMjk6XFx0XFxuMzMzMDpcXHRcXHQvKiBGaWxsIHVwIHRoZSBzY29yZSBoaXN0b2dyYW0gKi9cXG4zMzMxOlxcdFxcdG1lbXNldChjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSwgMCxcXG4zMzMyOlxcdFxcdFxcdFxcdHNpemVvZigqYy1cXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0pICpcXG4zMzMzOlxcdFxcdFxcdFxcdChEQU1PU19NQVhfU0NPUkUgKyAxKSk7XFxuMzMzNDpcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xcbjMzMzU6XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcXG4zMzM2OlxcdFxcdFxcdFxcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXFxuMzMzNzpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zMzM4OlxcdFxcdFxcdFxcdGlmIChkYW1vc19jb3JlX2ZpbHRlcl9vdXQoYywgdCwgciwgcykpXFxuMzMzOTpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zMzQwOlxcdFxcdFxcdFxcdHNjb3JlID0gYy1cXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcyk7XFxuMzM0MTpcXHRcXHRcXHRcXHRjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbVtzY29yZV0gKz1cXG4zMzQyOlxcdFxcdFxcdFxcdFxcdGRhbW9uX3N6X3JlZ2lvbihyKTtcXG4zMzQzOlxcdFxcdFxcdFxcdGlmIChzY29yZSBcXHUwMDNlIG1heF9zY29yZSlcXG4zMzQ0OlxcdFxcdFxcdFxcdFxcdG1heF9zY29yZSA9IHNjb3JlO1xcbjMzNDU6XFx0XFx0XFx0fVxcbjMzNDY6XFx0XFx0fVxcbjMzNDc6XFx0XFxuMzM0ODpcXHRcXHQvKiBTZXQgdGhlIG1pbiBzY29yZSBsaW1pdCAqL1xcbjMzNDk6XFx0XFx0Zm9yIChjdW11bGF0ZWRfc3ogPSAwLCBzY29yZSA9IG1heF9zY29yZTsgOyBzY29yZS0tKSB7XFxuMzM1MDpcXHRcXHRcXHRjdW11bGF0ZWRfc3ogKz0gYy1cXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1bc2NvcmVdO1xcbjMzNTE6XFx0XFx0XFx0aWYgKGN1bXVsYXRlZF9zeiBcXHUwMDNlPSBxdW90YS1cXHUwMDNlZXN6IHx8ICFzY29yZSlcXG4zMzUyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMzNTM6XFx0XFx0fVxcbjMzNTQ6XFx0XFx0cXVvdGEtXFx1MDAzZW1pbl9zY29yZSA9IHNjb3JlO1xcbjMzNTU6XFx0fVxcbjMzNTY6XFx0XFxuMzM1NzpcXHRzdGF0aWMgdm9pZCBkYW1vc190cmFjZV9zdGF0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4zMzU4OlxcdHtcXG4zMzU5OlxcdFxcdHVuc2lnbmVkIGludCBjaWR4ID0gMCwgc2lkeCA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQzOjE1LjIwNTgzOTg3M1oiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MDIyNjM0NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgSSdtIHRoZSBvbmUgaGF2aW5nIHRoZXNlIHRob3VnaHRzLlxuXG4qKkRpdmluZyBpbnRvIGBkYW1vc19hZGp1c3RfcXVvdGFgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBmb2N1c2luZyBvbiB0aGUgc3RhcnQgb2YgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIG5vdy4gSXQncyB0aW1lIHRvIGFuYWx5emUgdGhlIGZvdW5kYXRpb24sIHRoZSB2ZXJ5IG9wZW5pbmcgb2YgdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBlbnRyeSBwb2ludCBhbmQgaW5pdGlhbCBzZXR1cC4gV2hlcmUgZG9lcyB0aGlzIHByb2Nlc3MgYmVnaW4/IFdoYXQgYXJlIHRoZSBpbW1lZGlhdGUgdmFyaWFibGVzIG9yIGlucHV0cyB0aGF0IGFyZSBiZWluZyBkZWNsYXJlZCBvciBleGFtaW5lZCBhdCB0aGUgdmVyeSBvdXRzZXQ/IFdoYXQgaXMgdGhlIGluaXRpYWwgaW50ZW50aW9uIG9mIHRoaXMgY2h1bmsgb2YgY29kZT8gSSBhbSBsb29raW5nIGF0IHRoZSBpbml0aWFsIHN0YXRlIGFuZCBob3cgdGhhdCBhZmZlY3RzIGFueSBmdXR1cmUgZGV2ZWxvcG1lbnRzLiBJIG5lZWQgdG8gcXVpY2tseSBncmFzcCB0aGUgaGlnaC1sZXZlbCBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gYXMgYSB3aG9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ4NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6MjMuMjI4NDc4NDAzWiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzI5MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzI5MDpcXHRzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbjMyOTE6XFx0e1xcbjMyOTI6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG4zMjkzOlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuMzI5NDpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbjMyOTU6XFx0XFx0dW5zaWduZWQgbG9uZyBjdW11bGF0ZWRfc3osIGNhY2hlZF9lc3o7XFxuMzI5NjpcXHRcXHR1bnNpZ25lZCBpbnQgc2NvcmUsIG1heF9zY29yZSA9IDA7XFxuMzI5NzpcXHRcXG4zMjk4OlxcdFxcdGlmICghcXVvdGEtXFx1MDAzZW1zIFxcdTAwMjZcXHUwMDI2ICFxdW90YS1cXHUwMDNlc3ogXFx1MDAyNlxcdTAwMjYgbGlzdF9lbXB0eShcXHUwMDI2cXVvdGEtXFx1MDAzZWdvYWxzKSlcXG4zMjk5OlxcdFxcdFxcdHJldHVybjtcXG4zMzAwOlxcdFxcbjMzMDE6XFx0XFx0LyogRmlyc3QgY2hhcmdlIHdpbmRvdyAqL1xcbjMzMDI6XFx0XFx0aWYgKCFxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9zeiBcXHUwMDI2XFx1MDAyNiAhcXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSkge1xcbjMzMDM6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XFxuMzMwNDpcXHRcXHRcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbjMzMDU6XFx0XFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkpXFxuMzMwNjpcXHRcXHRcXHRcXHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xcbjMzMDc6XFx0XFx0fVxcbjMzMDg6XFx0XFxuMzMwOTpcXHRcXHQvKiBOZXcgY2hhcmdlIHdpbmRvdyBzdGFydHMgKi9cXG4zMzEwOlxcdFxcdGlmICghdGltZV9pbl9yYW5nZV9vcGVuKGppZmZpZXMsIHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20sXFxuMzMxMTpcXHRcXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tICtcXG4zMzEyOlxcdFxcdFxcdFxcdFxcdG1zZWNzX3RvX2ppZmZpZXMocXVvdGEtXFx1MDAzZXJlc2V0X2ludGVydmFsKSkpIHtcXG4zMzEzOlxcdFxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4zMzE0OlxcdFxcdFxcdFxcdHMtXFx1MDAzZXN0YXQucXRfZXhjZWVkcysrO1xcbjMzMTU6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogKz0gcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3o7XFxuMzMxNjpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcXG4zMzE3OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6ID0gMDtcXG4zMzE4OlxcdFxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxcbjMzMTk6XFx0XFx0XFx0XFx0Y2FjaGVkX2VzeiA9IHF1b3RhLVxcdTAwM2Vlc3o7XFxuMzMyMDpcXHRcXHRcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbjMzMjE6XFx0XFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgcXVvdGEtXFx1MDAzZWVzeiAhPSBjYWNoZWRfZXN6KVxcbjMzMjI6XFx0XFx0XFx0XFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcXG4zMzIzOlxcdFxcdH1cXG4zMzI0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MzoyMy4yMjg3NDAzNjNaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDYwMTY0ODk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFF1b3RhIEFkanVzdG1lbnQgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgc25pcHBldCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHdoYXQgaGFwcGVucyB3aGVuIGBxdW90YS1cdTAwM2Vlc3pgIChlZmZlY3RpdmUgc2l6ZSkgaXMgemVyby4gTGluZSAzMzQ5IGhhcyB0aGlzIGxvb3AgY2FsY3VsYXRpbmcgdGhlIG1pbmltdW0gc2NvcmU6XG5cbmBgYGNcblx0XHQvKiBTZXQgdGhlIG1pbiBzY29yZSBsaW1pdCAqL1xuXHRcdGZvciAoY3VtdWxhdGVkX3N6ID0gMCwgc2NvcmUgPSBtYXhfc2NvcmU7IDsgc2NvcmUtLSkge1xuXHRcdFx0Y3VtdWxhdGVkX3N6ICs9IGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1bc2NvcmVdO1xuXHRcdFx0aWYgKGN1bXVsYXRlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzeiB8fCAhc2NvcmUpXG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRxdW90YS1cdTAwM2VtaW5fc2NvcmUgPSBzY29yZTtcbmBgYFxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCBcIldhaXQsIHdoeSB0aGUgZWFybHkgcmV0dXJuIGlmIGBxdW90YS1cdTAwM2Vlc3pgIGlzIHplcm8/XCIgRGlkIHRoZXkgYWRkIHRoYXQganVzdCB0byBvcHRpbWl6ZSwgYXNzdW1pbmcgdGhlIGhpc3RvZ3JhbSBjYWxjdWxhdGlvbiBpcyB1bm5lY2Vzc2FyeSB3aGVuIHRoZSBlZmZlY3RpdmUgc2l6ZSBpcyB6ZXJvPyBPciBtYXliZSB0aGUgY29uZGl0aW9uIGBjdW11bGF0ZWRfc3ogXHUwMDNlPSAwYCBpcyBhbHdheXMgdHJ1ZSBpZiB0aGUgZWZmZWN0aXZlIHNpemUgaXMgemVybyB3aGljaCBtZWFucyBzY29yZSB3aWxsIGVxdWFsIGBtYXhfc2NvcmVgIGFuZCB0aGVuIGBtaW5fc2NvcmVgIGFsc28gZXF1YWxzIGBtYXhfc2NvcmVgLCB3aGljaCBpcyBmaW5lPyBPciBwZXJoYXBzIGFuIGVmZmVjdGl2ZSBzaXplIG9mIHplcm8gbWVhbnMgdGhlIHF1b3RhIGlzIGVzc2VudGlhbGx5IGNsb3NlZCwgc28gbm8gZnVydGhlciBwcm9jZXNzaW5nIGlzIHJlcXVpcmVkLlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuICBEb2VzIHRoaXMgcGF0Y2ggZXZlbiB0b3VjaCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBhbnkgd2F5PyBUaW1lIHRvIHRoaW5rIGFib3V0IHdoYXQgS01TQU4gd291bGQgcmVwb3J0LiBJIGtub3cgaXQgZmxhZ3MgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb24gdGhlIHN0YWNrLCBoZWFwLCBvciB3aXRoaW4gcGFnZSBhbGxvY2F0aW9ucywgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBsZWFrcy5cblxuTm93LCBsZXQncyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3Q6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8qKiBOb3BlLCBqdXN0IGFuIGVhcmx5IHJldHVybiBpbiBgZGFtb3NfYWRqdXN0X3F1b3RhKClgIHdoZW4gYHF1b3RhLVx1MDAzZWVzeiA9PSAwYC5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLCBgcXVvdGEtXHUwMDNlZXN6YCBpcyBpbml0aWFsaXplZDsgaXQncyBlaXRoZXIgc2V0IGJ5IGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCBvciBpbml0aWFsaXplZCB3aGVuIHRoZSBxdW90YSBpcyBzZXQgdXAuXG4zLiAgKipBbGxvY2F0aW9ucy9jb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLlxuNC4gICoqTW9kaWZpZWQgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcz8qKiBOb3BlLlxuXG5BbHJpZ2h0LCBidXQgd2FpdC4uLiByZXR1cm5pbmcgZWFybHkuLi4gRG9lcyB0aGlzIG1lYW4gdGhlIGNvZGUgY291bGQgcG90ZW50aWFsbHkgbGVhdmUgYHF1b3RhLVx1MDAzZW1pbl9zY29yZWAgdW5pbml0aWFsaXplZCBpbiBzb21lIGNhc2VzPyBOZWVkIHRvIGNvbmZpcm0gd2hlcmUgYHF1b3RhLVx1MDAzZW1pbl9zY29yZWAgaXMgKmFjdHVhbGx5KiB1c2VkLiBUaGF0J3MgdGhlIGtleSBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMTMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MzoyNy44MzAzOTIyODlaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNzA2NjM0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaW5fc2NvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTI0MTM9c3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjQyMC1cXG5tbS9kYW1vbi9jb3JlLmM6MjQyMTpcXHRyZXR1cm4gYy1cXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcykgXFx1MDAzZT0gcy1cXHUwMDNlcXVvdGEubWluX3Njb3JlO1xcbm1tL2RhbW9uL2NvcmUuYy0yNDIyLX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMjkwPXN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzM1My1cXHR9XFxubW0vZGFtb24vY29yZS5jOjMzNTQ6XFx0cXVvdGEtXFx1MDAzZW1pbl9zY29yZSA9IHNjb3JlO1xcbm1tL2RhbW9uL2NvcmUuYy0zMzU1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6MjguMzQ3NDY0NTg1WiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2NzQ3MDEyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBzLVx1MDAzZXF1b3RhYCBvciBqdXN0IHBsYWluIGBzYCBpcyBpbml0aWFsaXplZC4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWJ1Z2dpbmcgc3RlcC4gR290dGEgdHJhY2UgYmFjayB0byB0aGUgc291cmNlIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHZhbHVlcyBhcmUgZ2V0dGluZyBzZXQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcGlucG9pbnRpbmcgdGhlIG9yaWdpbiBvZiBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBJIG1pZ2h0IGJlIHNlZWluZyBsYXRlciBvbi4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUncyBnb3QgdG8gc2F5IVxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDk2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6MzAuMDIyMTY5NjA1WiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDU0NDE4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9uZXdfc2NoZW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz03MzI9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTc0NC1cXG5tbS9kYW1vbi9jb3JlLmM6NzQ1OnN0cnVjdCBkYW1vcyAqZGFtb25fbmV3X3NjaGVtZShzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sXFxubW0vZGFtb24vY29yZS5jLTc0Ni1cXHRcXHRcXHRlbnVtIGRhbW9zX2FjdGlvbiBhY3Rpb24sXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTU2Mz1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE1ODEtXFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vY29yZS5jOjE1ODI6XFx0XFx0bmV3X3NjaGVtZSA9IGRhbW9uX25ld19zY2hlbWUoXFx1MDAyNnNyY19zY2hlbWUtXFx1MDAzZXBhdHRlcm4sXFxubW0vZGFtb24vY29yZS5jLTE1ODMtXFx0XFx0XFx0XFx0c3JjX3NjaGVtZS1cXHUwMDNlYWN0aW9uLFxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0xODg9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fbHJ1X3NvcnRfbmV3X3NjaGVtZShcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTk1LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTk2OlxcdHJldHVybiBkYW1vbl9uZXdfc2NoZW1lKFxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTk3LVxcdFxcdFxcdC8qIGZpbmQgdGhlIHBhdHRlcm4sIGFuZCAqL1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTE2Nz1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9yZWNsYWltX25ld19zY2hlbWUodW5zaWduZWQgbG9uZyBhZ2dyX2ludGVydmFsKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTE4MC1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MTgxOlxcdHJldHVybiBkYW1vbl9uZXdfc2NoZW1lKFxcbm1tL2RhbW9uL3JlY2xhaW0uYy0xODItXFx0XFx0XFx0XFx1MDAyNnBhdHRlcm4sXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjk3ND1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9zeXNmc19ta19zY2hlbWUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzAxMS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzAxMjpcXHRzY2hlbWUgPSBkYW1vbl9uZXdfc2NoZW1lKFxcdTAwMjZwYXR0ZXJuLCBzeXNmc19zY2hlbWUtXFx1MDAzZWFjdGlvbixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzAxMy1cXHRcXHRcXHRzeXNmc19zY2hlbWUtXFx1MDAzZWFwcGx5X2ludGVydmFsX3VzLCBcXHUwMDI2cXVvdGEsIFxcdTAwMjZ3bWFya3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQzOjMwLjA2NjcyMTc4OFoiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTQxNzMwMDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBEQU1PTiBJbml0aWFsaXphdGlvbiBpbiBtbS9kYW1vbi9jb3JlLmMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgREFNT04gaW5pdGlhbGl6ZXMsIHBhcnRpY3VsYXJseSB0aGUgcXVvdGEgc3lzdGVtIGFuZCBob3cgbmV3IHNjaGVtZXMgYXJlIGludGVncmF0ZWQuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgbW0vZGFtb24vY29yZS5jYC4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHR3byBzcGVjaWZpYyBmdW5jdGlvbnM6IGBkYW1vc19xdW90YV9pbml0YCDigJMgdGhhdCdsbCBoYW5kbGUgdGhlIGFsbG9jYXRpb24gYW5kIHNldHVwIG9mIHRoZSBxdW90YSBtZWNoYW5pc20sIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBlbmZvcmNpbmcgbGltaXRzLiBUaGVuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBuZXcgc2NoZW1lcyBhcmUgcGx1Z2dlZCBpbnRvIHRoZSB3aG9sZSBzZXR1cCwgc28gSSdsbCBhbHNvIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBgZGFtb25fbmV3X3NjaGVtZWAuIEknbGwgYmUgbG9va2luZyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zLCBvciBwb3RlbnRpYWwgaW5lZmZpY2llbmNpZXMsIGVzcGVjaWFsbHkgZ2l2ZW4gaG93IERBTU9OIGhhcyBldm9sdmVkLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGR1cmluZyB0aGUgZWFybHkgc3RhZ2VzLiBHb3R0YSBlbnN1cmUgdGhlIHF1b3RhIGlzIHdvcmtpbmcgYXMgZGVzaWduZWQgYW5kIHRoZSBuZXcgc2NoZW1lcyBkb24ndCBoYXZlIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE5NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQzOjMyLjIwODQ1NDE1WiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzI1OlxcdFxcbiA3MjY6XFx0c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfZ29hbHNfZW1wdHkoc3RydWN0IGRhbW9zX3F1b3RhICpxKVxcbiA3Mjc6XFx0e1xcbiA3Mjg6XFx0XFx0cmV0dXJuIGxpc3RfZW1wdHkoXFx1MDAyNnEtXFx1MDAzZWdvYWxzKTtcXG4gNzI5OlxcdH1cXG4gNzMwOlxcdFxcbiA3MzE6XFx0LyogaW5pdGlhbGl6ZSBmaWVsZHMgb2YgQHF1b3RhIHRoYXQgbm9ybWFsbHkgQVBJIHVzZXJzIHdvdWxkbid0IHNldCAqL1xcbiA3MzI6XFx0c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxcbiA3MzM6XFx0e1xcbiA3MzQ6XFx0XFx0cXVvdGEtXFx1MDAzZWVzeiA9IDA7XFxuIDczNTpcXHRcXHRxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9zeiA9IDA7XFxuIDczNjpcXHRcXHRxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9ucyA9IDA7XFxuIDczNzpcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiA9IDA7XFxuIDczODpcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tID0gMDtcXG4gNzM5OlxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbiA3NDA6XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xcbiA3NDE6XFx0XFx0cXVvdGEtXFx1MDAzZWVzel9icCA9IDA7XFxuIDc0MjpcXHRcXHRyZXR1cm4gcXVvdGE7XFxuIDc0MzpcXHR9XFxuIDc0NDpcXHRcXG4gNzQ1OlxcdHN0cnVjdCBkYW1vcyAqZGFtb25fbmV3X3NjaGVtZShzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sXFxuIDc0NjpcXHRcXHRcXHRcXHRlbnVtIGRhbW9zX2FjdGlvbiBhY3Rpb24sXFxuIDc0NzpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzLFxcbiA3NDg6XFx0XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG4gNzQ5OlxcdFxcdFxcdFxcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzICp3bWFya3MsXFxuIDc1MDpcXHRcXHRcXHRcXHRpbnQgdGFyZ2V0X25pZClcXG4gNzUxOlxcdHtcXG4gNzUyOlxcdFxcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xcbiA3NTM6XFx0XFxuIDc1NDpcXHRcXHRzY2hlbWUgPSBrbWFsbG9jX29iaigqc2NoZW1lKTtcXG4gNzU1OlxcdFxcdGlmICghc2NoZW1lKVxcbiA3NTY6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDc1NzpcXHRcXHRzY2hlbWUtXFx1MDAzZXBhdHRlcm4gPSAqcGF0dGVybjtcXG4gNzU4OlxcdFxcdHNjaGVtZS1cXHUwMDNlYWN0aW9uID0gYWN0aW9uO1xcbiA3NTk6XFx0XFx0c2NoZW1lLVxcdTAwM2VhcHBseV9pbnRlcnZhbF91cyA9IGFwcGx5X2ludGVydmFsX3VzO1xcbiA3NjA6XFx0XFx0LypcXG4gNzYxOlxcdFxcdCAqIG5leHRfYXBwbHlfc2lzIHdpbGwgYmUgc2V0IHdoZW4ga2RhbW9uZCBzdGFydHMuICBXaGlsZSBrZGFtb25kIGlzXFxuIDc2MjpcXHRcXHQgKiBydW5uaW5nLCBpdCB3aWxsIGFsc28gdXBkYXRlZCB3aGVuIGl0IGlzIGFkZGVkIHRvIHRoZSBEQU1PTiBjb250ZXh0LFxcbiA3NjM6XFx0XFx0ICogb3IgZGFtb25fYXR0cnMgYXJlIHVwZGF0ZWQuXFxuIDc2NDpcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6MzIuMjA4Njg3MDlaIiwiU2VxIjo2MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzIzMDAyMzg5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIGRpdmUgaW50byB0aGlzLiBMZXQncyBzZWUgaG93IEkgY2FuIHN1bW1hcml6ZSB0aGlzOlxuXG4qKkFuYWx5emluZyB0aGUgTmV4dCBTdGVwcyBpbiBgZGFtb25fbmV3X3NjaGVtZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZmlndXJlIG91dCB3aGF0IHRoZSBuZXh0IG1vdmVzIGFyZSBpbiB0aGlzIGBkYW1vbl9uZXdfc2NoZW1lYC4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIGFuZCBwb3RlbnRpYWwgcm9hZGJsb2NrcyBvZiBlYWNoIHN0ZXAsIGFzc2Vzc2luZyBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIG9iamVjdGl2ZS4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgZGVwZW5kZW5jaWVzIGFuZCB0cnlpbmcgdG8gYW50aWNpcGF0ZSBhbnkgZWRnZSBjYXNlcyBvciB1bmV4cGVjdGVkIG91dGNvbWVzIHRoYXQgbWlnaHQgcmVxdWlyZSBhZGp1c3RtZW50cy4gTXkgZm9jdXMgaXMgb24gdGhlIG1vc3QgZWZmaWNpZW50IGFuZCByb2J1c3QgcGF0aCBmb3J3YXJkLCB3aGlsZSBhbHNvIGJlaW5nIG1pbmRmdWwgb2YgcG90ZW50aWFsIHJpc2tzLiBUaW1lIHRvIHB1dCBvbiBteSB0aGlua2luZyBjYXAgYW5kIHN0cmF0ZWdpemUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwOTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQzOjM1LjQzODcxMzQ1OFoiLCJTZXEiOjY0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzgzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc2NTpcXHRcXHRzY2hlbWUtXFx1MDAzZW5leHRfYXBwbHlfc2lzID0gMDtcXG4gNzY2OlxcdFxcdHNjaGVtZS1cXHUwMDNld2Fsa19jb21wbGV0ZWQgPSBmYWxzZTtcXG4gNzY3OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzY2hlbWUtXFx1MDAzZWNvcmVfZmlsdGVycyk7XFxuIDc2ODpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c2NoZW1lLVxcdTAwM2VvcHNfZmlsdGVycyk7XFxuIDc2OTpcXHRcXHRzY2hlbWUtXFx1MDAzZXN0YXQgPSAoc3RydWN0IGRhbW9zX3N0YXQpe307XFxuIDc3MDpcXHRcXHRzY2hlbWUtXFx1MDAzZW1heF9ucl9zbmFwc2hvdHMgPSAwO1xcbiA3NzE6XFx0XFx0c2NoZW1lLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xcbiA3NzI6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNjaGVtZS1cXHUwMDNlbGlzdCk7XFxuIDc3MzpcXHRcXG4gNzc0OlxcdFxcdHNjaGVtZS1cXHUwMDNlcXVvdGEgPSAqKGRhbW9zX3F1b3RhX2luaXQocXVvdGEpKTtcXG4gNzc1OlxcdFxcdC8qIHF1b3RhLmdvYWxzIHNob3VsZCBiZSBzZXBhcmF0ZWx5IHNldCBieSBjYWxsZXIgKi9cXG4gNzc2OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhLmdvYWxzKTtcXG4gNzc3OlxcdFxcbiA3Nzg6XFx0XFx0c2NoZW1lLVxcdTAwM2V3bWFya3MgPSAqd21hcmtzO1xcbiA3Nzk6XFx0XFx0c2NoZW1lLVxcdTAwM2V3bWFya3MuYWN0aXZhdGVkID0gdHJ1ZTtcXG4gNzgwOlxcdFxcbiA3ODE6XFx0XFx0c2NoZW1lLVxcdTAwM2VtaWdyYXRlX2Rlc3RzID0gKHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzKXt9O1xcbiA3ODI6XFx0XFx0c2NoZW1lLVxcdTAwM2V0YXJnZXRfbmlkID0gdGFyZ2V0X25pZDtcXG4gNzgzOlxcdFxcbiA3ODQ6XFx0XFx0cmV0dXJuIHNjaGVtZTtcXG4gNzg1OlxcdH1cXG4gNzg2OlxcdFxcbiA3ODc6XFx0c3RhdGljIHZvaWQgZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbiA3ODg6XFx0e1xcbiA3ODk6XFx0XFx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXFx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA/XFxuIDc5MDpcXHRcXHRcXHRjdHgtXFx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA6IDE7XFxuIDc5MTpcXHRcXHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsID0gcy1cXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMgP1xcbiA3OTI6XFx0XFx0XFx0cy1cXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMgOiBjdHgtXFx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWw7XFxuIDc5MzpcXHRcXG4gNzk0OlxcdFxcdHMtXFx1MDAzZW5leHRfYXBwbHlfc2lzID0gY3R4LVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscyArXFxuIDc5NTpcXHRcXHRcXHRhcHBseV9pbnRlcnZhbCAvIHNhbXBsZV9pbnRlcnZhbDtcXG4gNzk2OlxcdH1cXG4gNzk3OlxcdFxcbiA3OTg6XFx0dm9pZCBkYW1vbl9hZGRfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxcbiA3OTk6XFx0e1xcbiA4MDA6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cy1cXHUwMDNlbGlzdCwgXFx1MDAyNmN0eC1cXHUwMDNlc2NoZW1lcyk7XFxuIDgwMTpcXHRcXHRkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMocywgY3R4KTtcXG4gODAyOlxcdH1cXG4gODAzOlxcdFxcbiA4MDQ6XFx0c3RhdGljIHZvaWQgZGFtb25fZGVsX3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQzOjM1LjQzODk1ODYwN1oiLCJTZXEiOjY1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTk3MDE1NTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IG1pbmQncyBidXp6aW5nIOKAkyBJJ20gaW4gYGRhbW9uX3N5c2ZzX21rX3NjaGVtZWAgYW5kIEkndmUgaGl0IGEgcG9pbnQgd2hlcmUgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgcXVvdGFgIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkLiBJdCdzIGEga2V5IHBhcnQgb2YgdGhpcyB3aG9sZSBzY2hlbWUsIHNvIEkgY2FuJ3QganVzdCBnbG9zcyBvdmVyIGl0LiBUaW1lIHRvIGRpdmUgYmFjayBpbnRvIHRoZSBjb2RlIGFuZCB2ZXJpZnkgaXRzIHNldHVwLiBHb3R0YSBjaGFzZSB0aGlzIGRvd24gYW5kIG1ha2Ugc3VyZSBpdCdzIGhhbmRsZWQgcHJvcGVybHkgd2l0aGluIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MjgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQzOjM3LjYzNTk3Njg1MloiLCJTZXEiOjY2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5NzQsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5NzQ6XFx0c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fc3lzZnNfbWtfc2NoZW1lKFxcbjI5NzU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc3lzZnNfc2NoZW1lKVxcbjI5NzY6XFx0e1xcbjI5Nzc6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2FjY2Vzc19wYXR0ZXJuICphY2Nlc3NfcGF0dGVybiA9XFxuMjk3ODpcXHRcXHRcXHRzeXNmc19zY2hlbWUtXFx1MDAzZWFjY2Vzc19wYXR0ZXJuO1xcbjI5Nzk6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqc3lzZnNfcXVvdGFzID0gc3lzZnNfc2NoZW1lLVxcdTAwM2VxdW90YXM7XFxuMjk4MDpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfd2VpZ2h0cyAqc3lzZnNfd2VpZ2h0cyA9IHN5c2ZzX3F1b3Rhcy1cXHUwMDNld2VpZ2h0cztcXG4yOTgxOlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc193YXRlcm1hcmtzICpzeXNmc193bWFya3MgPSBzeXNmc19zY2hlbWUtXFx1MDAzZXdhdGVybWFya3M7XFxuMjk4MjpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcXG4yOTgzOlxcdFxcdGludCBlcnI7XFxuMjk4NDpcXHRcXG4yOTg1OlxcdFxcdHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiBwYXR0ZXJuID0ge1xcbjI5ODY6XFx0XFx0XFx0Lm1pbl9zel9yZWdpb24gPSBhY2Nlc3NfcGF0dGVybi1cXHUwMDNlc3otXFx1MDAzZW1pbixcXG4yOTg3OlxcdFxcdFxcdC5tYXhfc3pfcmVnaW9uID0gYWNjZXNzX3BhdHRlcm4tXFx1MDAzZXN6LVxcdTAwM2VtYXgsXFxuMjk4ODpcXHRcXHRcXHQubWluX25yX2FjY2Vzc2VzID0gYWNjZXNzX3BhdHRlcm4tXFx1MDAzZW5yX2FjY2Vzc2VzLVxcdTAwM2VtaW4sXFxuMjk4OTpcXHRcXHRcXHQubWF4X25yX2FjY2Vzc2VzID0gYWNjZXNzX3BhdHRlcm4tXFx1MDAzZW5yX2FjY2Vzc2VzLVxcdTAwM2VtYXgsXFxuMjk5MDpcXHRcXHRcXHQubWluX2FnZV9yZWdpb24gPSBhY2Nlc3NfcGF0dGVybi1cXHUwMDNlYWdlLVxcdTAwM2VtaW4sXFxuMjk5MTpcXHRcXHRcXHQubWF4X2FnZV9yZWdpb24gPSBhY2Nlc3NfcGF0dGVybi1cXHUwMDNlYWdlLVxcdTAwM2VtYXgsXFxuMjk5MjpcXHRcXHR9O1xcbjI5OTM6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0ge1xcbjI5OTQ6XFx0XFx0XFx0Lm1zID0gc3lzZnNfcXVvdGFzLVxcdTAwM2VtcyxcXG4yOTk1OlxcdFxcdFxcdC5zeiA9IHN5c2ZzX3F1b3Rhcy1cXHUwMDNlc3osXFxuMjk5NjpcXHRcXHRcXHQucmVzZXRfaW50ZXJ2YWwgPSBzeXNmc19xdW90YXMtXFx1MDAzZXJlc2V0X2ludGVydmFsX21zLFxcbjI5OTc6XFx0XFx0XFx0LndlaWdodF9zeiA9IHN5c2ZzX3dlaWdodHMtXFx1MDAzZXN6LFxcbjI5OTg6XFx0XFx0XFx0LndlaWdodF9ucl9hY2Nlc3NlcyA9IHN5c2ZzX3dlaWdodHMtXFx1MDAzZW5yX2FjY2Vzc2VzLFxcbjI5OTk6XFx0XFx0XFx0LndlaWdodF9hZ2UgPSBzeXNmc193ZWlnaHRzLVxcdTAwM2VhZ2UsXFxuMzAwMDpcXHRcXHRcXHQuZ29hbF90dW5lciA9IHN5c2ZzX3F1b3Rhcy1cXHUwMDNlZ29hbF90dW5lcixcXG4zMDAxOlxcdFxcdFxcdC5mYWlsX2NoYXJnZV9udW0gPSBzeXNmc19xdW90YXMtXFx1MDAzZWZhaWxfY2hhcmdlX251bSxcXG4zMDAyOlxcdFxcdFxcdC5mYWlsX2NoYXJnZV9kZW5vbSA9IHN5c2ZzX3F1b3Rhcy1cXHUwMDNlZmFpbF9jaGFyZ2VfZGVub20sXFxuMzAwMzpcXHRcXHR9O1xcbjMwMDQ6XFx0XFx0c3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzID0ge1xcbjMwMDU6XFx0XFx0XFx0Lm1ldHJpYyA9IHN5c2ZzX3dtYXJrcy1cXHUwMDNlbWV0cmljLFxcbjMwMDY6XFx0XFx0XFx0LmludGVydmFsID0gc3lzZnNfd21hcmtzLVxcdTAwM2VpbnRlcnZhbF91cyxcXG4zMDA3OlxcdFxcdFxcdC5oaWdoID0gc3lzZnNfd21hcmtzLVxcdTAwM2VoaWdoLFxcbjMwMDg6XFx0XFx0XFx0Lm1pZCA9IHN5c2ZzX3dtYXJrcy1cXHUwMDNlbWlkLFxcbjMwMDk6XFx0XFx0XFx0LmxvdyA9IHN5c2ZzX3dtYXJrcy1cXHUwMDNlbG93LFxcbjMwMTA6XFx0XFx0fTtcXG4zMDExOlxcdFxcbjMwMTI6XFx0XFx0c2NoZW1lID0gZGFtb25fbmV3X3NjaGVtZShcXHUwMDI2cGF0dGVybiwgc3lzZnNfc2NoZW1lLVxcdTAwM2VhY3Rpb24sXFxuMzAxMzpcXHRcXHRcXHRcXHRzeXNmc19zY2hlbWUtXFx1MDAzZWFwcGx5X2ludGVydmFsX3VzLCBcXHUwMDI2cXVvdGEsIFxcdTAwMjZ3bWFya3MsXFxuMzAxNDpcXHRcXHRcXHRcXHRzeXNmc19zY2hlbWUtXFx1MDAzZXRhcmdldF9uaWQpO1xcbjMwMTU6XFx0XFx0aWYgKCFzY2hlbWUpXFxuMzAxNjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4zMDE3OlxcdFxcbjMwMTg6XFx0XFx0ZXJyID0gZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKHN5c2ZzX3F1b3Rhcy1cXHUwMDNlZ29hbHMsIFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6MzcuNjM2MTg2NjMyWiIsIlNlcSI6NjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUxOTg5OTYzMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBUaG91Z2h0cyBvbiBgZGFtb3NfcXVvdGFgIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0geyAuLi4gfWAgY29uc3RydWN0LiAgUmlnaHQsIHRoZSBkZXNpZ25hdGVkIGluaXRpYWxpemVyLiBJdCdzIGluaXRpYWxpemluZyBhbGwgdGhlIHVuc3BlY2lmaWVkIGZpZWxkcyB0byB6ZXJvLiAgQW5kIHRoYXQgaW5jbHVkZXMgYG1pbl9zY29yZWAhIEludGVyZXN0aW5nLiBUaGlzIGNvdWxkIGhhdmUgc29tZSBpbXBsaWNhdGlvbnMgZnVydGhlciBkb3duIHRoZSBsaW5lLCBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoYXQgcGxheXMgb3V0LiAgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGJlaGF2aW9yIGlzIGNvbnNpc3RlbnQgYW5kIGV4cGVjdGVkIHRocm91Z2hvdXQgdGhlIGNvZGUuXG5cbkFscmlnaHQsIG5vdyBJIHNob3VsZCBxdWlja2x5IGNoZWNrIHdoZXJlIGVsc2UgdGhpcyBgcXVvdGFgIHN0cnVjdCBpcyB1c2VkLiBMb29rcyBsaWtlIEkgc2hvdWxkIGZvY3VzIG9uIGByZWNsYWltLmNgIGFuZCBgbHJ1X3NvcnQuY2AgdG8gc2VlIGhvdyB0aG9zZSBpbml0aWFsIHplcm9zIGFyZSBiZWluZyBoYW5kbGVkLiBJJ2xsIG5lZWQgdG8gc2VlIGlmIHRoZSBpbXBsaWNpdCB6ZXJvaW5nIGlzIHJlbGllZCB1cG9uLCBvciBpZiBpdCBtaWdodCBsZWFkIHRvIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIGJhc2VkIG9uIHRoZSBhc3N1bXB0aW9ucyBvZiB0aGUgY2FsbGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk2MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6NDIuODM1MTg1NTJaIiwiU2VxIjo2OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vcmVjbGFpbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NyxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE2NzpcXHRzdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9yZWNsYWltX25ld19zY2hlbWUodW5zaWduZWQgbG9uZyBhZ2dyX2ludGVydmFsKVxcbiAxNjg6XFx0e1xcbiAxNjk6XFx0XFx0c3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuIHBhdHRlcm4gPSB7XFxuIDE3MDpcXHRcXHRcXHQvKiBGaW5kIHJlZ2lvbnMgaGF2aW5nIFBBR0VfU0laRSBvciBsYXJnZXIgc2l6ZSAqL1xcbiAxNzE6XFx0XFx0XFx0Lm1pbl9zel9yZWdpb24gPSBQQUdFX1NJWkUsXFxuIDE3MjpcXHRcXHRcXHQubWF4X3N6X3JlZ2lvbiA9IFVMT05HX01BWCxcXG4gMTczOlxcdFxcdFxcdC8qIGFuZCBub3QgYWNjZXNzZWQgYXQgYWxsICovXFxuIDE3NDpcXHRcXHRcXHQubWluX25yX2FjY2Vzc2VzID0gMCxcXG4gMTc1OlxcdFxcdFxcdC5tYXhfbnJfYWNjZXNzZXMgPSAwLFxcbiAxNzY6XFx0XFx0XFx0LyogZm9yIG1pbl9hZ2Ugb3IgbW9yZSBtaWNyby1zZWNvbmRzICovXFxuIDE3NzpcXHRcXHRcXHQubWluX2FnZV9yZWdpb24gPSBtaW5fYWdlIC8gYWdncl9pbnRlcnZhbCxcXG4gMTc4OlxcdFxcdFxcdC5tYXhfYWdlX3JlZ2lvbiA9IFVJTlRfTUFYLFxcbiAxNzk6XFx0XFx0fTtcXG4gMTgwOlxcdFxcbiAxODE6XFx0XFx0cmV0dXJuIGRhbW9uX25ld19zY2hlbWUoXFxuIDE4MjpcXHRcXHRcXHRcXHRcXHUwMDI2cGF0dGVybixcXG4gMTgzOlxcdFxcdFxcdFxcdC8qIHBhZ2Ugb3V0IHRob3NlLCBhcyBzb29uIGFzIGZvdW5kICovXFxuIDE4NDpcXHRcXHRcXHRcXHREQU1PU19QQUdFT1VULFxcbiAxODU6XFx0XFx0XFx0XFx0LyogZm9yIGVhY2ggYWdncmVnYXRpb24gaW50ZXJ2YWwgKi9cXG4gMTg2OlxcdFxcdFxcdFxcdDAsXFxuIDE4NzpcXHRcXHRcXHRcXHQvKiB1bmRlciB0aGUgcXVvdGEuICovXFxuIDE4ODpcXHRcXHRcXHRcXHRcXHUwMDI2ZGFtb25fcmVjbGFpbV9xdW90YSxcXG4gMTg5OlxcdFxcdFxcdFxcdC8qIChEZSlhY3RpdmF0ZSB0aGlzIGFjY29yZGluZyB0byB0aGUgd2F0ZXJtYXJrcy4gKi9cXG4gMTkwOlxcdFxcdFxcdFxcdFxcdTAwMjZkYW1vbl9yZWNsYWltX3dtYXJrcyxcXG4gMTkxOlxcdFxcdFxcdFxcdE5VTUFfTk9fTk9ERSk7XFxuIDE5MjpcXHR9XFxuIDE5MzpcXHRcXG4gMTk0OlxcdHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuIDE5NTpcXHR7XFxuIDE5NjpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpwYXJhbV9jdHg7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQzOjQyLjgzNTI3Njc4WiIsIlNlcSI6NjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ0MjY3MDU5NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBkYW1vbl9yZWNsYWltX3F1b3RhYCoqXG5cbk9rYXksIHNvIGBkYW1vbl9yZWNsYWltX3F1b3RhYCBpcyBhIGdsb2JhbCB2YXJpYWJsZSwgYW5kIGl0J3MgaW5pdGlhbGl6ZWQgc3RhdGljYWxseS4gVGhhdCB0ZWxscyBtZSBhIGZldyB0aGluZ3MgcmlnaHQgb2ZmIHRoZSBiYXQ6IGl0cyBzY29wZSBpcyBpbXBvcnRhbnQsIHBvdGVudGlhbGx5IGluZmx1ZW5jaW5nIGJlaGF2aW9yIGFjcm9zcyB0aGUgZW50aXJlIHN5c3RlbSBpZiBpdCdzIG5vdCBoYW5kbGVkIGNhcmVmdWxseS4gU3RhdGljIGluaXRpYWxpemF0aW9uIHN1Z2dlc3RzIGl0J3MgbGlrZWx5IHNldCBhdCBjb21waWxlIHRpbWUgb3IgZHVyaW5nIHZlcnkgZWFybHkgYm9vdCwgd2hpY2ggY291bGQgZ2l2ZSB1cyBpbnNpZ2h0cyBpbnRvIHRoZSBzeXN0ZW0ncyBiYXNlbGluZSBtZW1vcnkgcmVjbGFpbSBwb2xpY3kuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgdmFyaWFibGUgaXMgYWN0dWFsbHkgKnVzZWQqLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGxydV9zb3J0LmNgLiBHaXZlbiB0aGUgbmFtZSwgSSBzdXNwZWN0IHRoaXMgdmFyaWFibGUgbWlnaHQgYmUgbGlua2VkIHRvIGhvdyB0aGUgTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBjYWNoZSBpcyBtYW5hZ2VkIGFuZCBob3cgbWVtb3J5IHJlY2xhaW0gaXMgcHJpb3JpdGl6ZWQgd2l0aGluIGl0LiBQZXJoYXBzIGl0J3MgYSB0aHJlc2hvbGQsIGEgZmxhZywgb3IgYSBxdW90YSByZWxhdGVkIHRvIHRoZSBhbW91bnQgb2YgbWVtb3J5IHRoYXQgY2FuIGJlIHJlY2xhaW1lZCB1c2luZyBhIHBhcnRpY3VsYXIgcG9saWN5LiBFeGFtaW5pbmcgdGhpcyBzb3VyY2UgZmlsZSB3aWxsIHRlbGwgdGhlIHRhbGUuIEl0IG1heSB3ZWxsIGJlIHRoZSBsaW5jaHBpbiBpbiBob3cgYWdncmVzc2l2ZWx5IG1lbW9yeSBpcyBmcmVlZCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzA3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0Mzo0Ny4yNjE5ODYwMjRaIiwiU2VxIjo3MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vbHJ1X3NvcnQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODgsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODg6XFx0c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fbHJ1X3NvcnRfbmV3X3NjaGVtZShcXG4gMTg5OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybiwgZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uKVxcbiAxOTA6XFx0e1xcbiAxOTE6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0gZGFtb25fbHJ1X3NvcnRfcXVvdGE7XFxuIDE5MjpcXHRcXG4gMTkzOlxcdFxcdC8qIFVzZSBoYWxmIG9mIHRvdGFsIHF1b3RhIGZvciBob3QvY29sZCBwYWdlcyBzb3J0aW5nICovXFxuIDE5NDpcXHRcXHRxdW90YS5tcyA9IHF1b3RhLm1zIC8gMjtcXG4gMTk1OlxcdFxcbiAxOTY6XFx0XFx0cmV0dXJuIGRhbW9uX25ld19zY2hlbWUoXFxuIDE5NzpcXHRcXHRcXHRcXHQvKiBmaW5kIHRoZSBwYXR0ZXJuLCBhbmQgKi9cXG4gMTk4OlxcdFxcdFxcdFxcdHBhdHRlcm4sXFxuIDE5OTpcXHRcXHRcXHRcXHQvKiAoZGUpcHJpb3JpdGl6ZSBvbiBMUlUtbGlzdHMgKi9cXG4gMjAwOlxcdFxcdFxcdFxcdGFjdGlvbixcXG4gMjAxOlxcdFxcdFxcdFxcdC8qIGZvciBlYWNoIGFnZ3JlZ2F0aW9uIGludGVydmFsICovXFxuIDIwMjpcXHRcXHRcXHRcXHQwLFxcbiAyMDM6XFx0XFx0XFx0XFx0LyogdW5kZXIgdGhlIHF1b3RhLiAqL1xcbiAyMDQ6XFx0XFx0XFx0XFx0XFx1MDAyNnF1b3RhLFxcbiAyMDU6XFx0XFx0XFx0XFx0LyogKERlKWFjdGl2YXRlIHRoaXMgYWNjb3JkaW5nIHRvIHRoZSB3YXRlcm1hcmtzLiAqL1xcbiAyMDY6XFx0XFx0XFx0XFx0XFx1MDAyNmRhbW9uX2xydV9zb3J0X3dtYXJrcyxcXG4gMjA3OlxcdFxcdFxcdFxcdE5VTUFfTk9fTk9ERSk7XFxuIDIwODpcXHR9XFxuIDIwOTpcXHRcXG4gMjEwOlxcdC8qIENyZWF0ZSBhIERBTU9OLWJhc2VkIG9wZXJhdGlvbiBzY2hlbWUgZm9yIGhvdCBtZW1vcnkgcmVnaW9ucyAqL1xcbiAyMTE6XFx0c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fbHJ1X3NvcnRfbmV3X2hvdF9zY2hlbWUodW5zaWduZWQgaW50IGhvdF90aHJlcylcXG4gMjEyOlxcdHtcXG4gMjEzOlxcdFxcdHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiBwYXR0ZXJuID0gZGFtb25fbHJ1X3NvcnRfc3R1Yl9wYXR0ZXJuO1xcbiAyMTQ6XFx0XFxuIDIxNTpcXHRcXHRwYXR0ZXJuLm1pbl9ucl9hY2Nlc3NlcyA9IGhvdF90aHJlcztcXG4gMjE2OlxcdFxcdHJldHVybiBkYW1vbl9scnVfc29ydF9uZXdfc2NoZW1lKFxcdTAwMjZwYXR0ZXJuLCBEQU1PU19MUlVfUFJJTyk7XFxuIDIxNzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQzOjQ3LjI2MjA3NTYyNFoiLCJTZXEiOjcxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2Nzk4MjcxMjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgZGFtb3NfYWRqdXN0X3F1b3RhYCBjb2RlIHNuaXBwZXQuIEZpcnN0LCBJIHNlZSB0aGUgZWFybHkgcmV0dXJuIGNvbmRpdGlvbnM6IGlmIGBjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlYCBpc24ndCBkZWZpbmVkLCBvciBpZiBgcXVvdGEtXHUwMDNlZXN6YCAodGhlIGVmZmVjdGl2ZSBzaXplKSBpcyB6ZXJvLCB0aGUgZnVuY3Rpb24ganVzdCBleGl0cy4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogd2h5IHdhcyB0aGlzIHBhdGNoIHdyaXR0ZW4/IFdoYXQncyB0aGUgY29udGV4dD9cblxuVGhlIGNvcmUgb2YgdGhlIGxvZ2ljIGxpZXMgd2l0aGluIHRoZSBgcXVvdGEtXHUwMDNlZXN6ID09IDBgIGJyYW5jaCwgc3BlY2lmaWNhbGx5IGF0IGxpbmUgMzM0OS4gVGhlIGNvZGUgY2FsY3VsYXRlcyBhIGBtaW5fc2NvcmVgIGJhc2VkIG9uIHRoZSBoaXN0b2dyYW0uIEhvd2V2ZXIsIGlmIGBxdW90YS1cdTAwM2Vlc3pgIGlzIHplcm8sIHRoZSBsb29wIGJyZWFrcyBpbW1lZGlhdGVseS4gYGN1bXVsYXRlZF9zemAgd2hpY2ggaXMgdW5zaWduZWQgbG9uZywgc3RhcnRzIGF0IDAsIGFuZCB0aGUgZmlyc3QgaXRlcmF0aW9uIGNhdXNlcyBgY3VtdWxhdGVkX3N6IFx1MDAzZT0gMGAgYWx3YXlzIHRvIGJlIHRydWUuIFRoaXMgc2V0cyBgcXVvdGEtXHUwMDNlbWluX3Njb3JlYCB0byB0aGUgYG1heF9zY29yZWAuXG5cbk15IGZpcnN0IHRob3VnaHQ6IGlmIGBlc3pgIGlzIHplcm8sIHdlJ3JlIGVzc2VudGlhbGx5IHNheWluZyBubyBxdW90YSBzaG91bGQgYmUgYXBwbGllZC4gIEJ1dCBpcyB0aGlzIGFuIG9wdGltaXphdGlvbj8gUGVyaGFwcyBpZiB0aGUgZWZmZWN0aXZlIHNpemUgaXMgemVybywgd2Ugc2tpcCB0aGUgaGlzdG9ncmFtIGNhbGN1bGF0aW9uIGFsdG9nZXRoZXIsIHdoaWNoIGlzIGEgY29tbW9uIG9wdGltaXphdGlvbi4gT3IgbWF5YmUgdGhlIHByZXZpb3VzIHZhbHVlIG9mIGBtaW5fc2NvcmVgIGlzIG5vIGxvbmdlciByZWxldmFudCwgb3IgaXMganVzdCBpbml0aWFsaXplZCB0byBgbWF4X3Njb3JlYCBzbyB0aGUgdmFsdWUgZG9lc24ndCBtYXR0ZXIuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSAqdW5pbml0aWFsaXplZCBtZW1vcnkqIHZ1bG5lcmFiaWxpdGllcz8gVGhpcyBpcyB3aGVyZSBJIGhhdmUgdG8gYXBwbHkgbXkgS01TQU4ga25vd2xlZGdlLiBMZXQncyBydW4gdGhyb3VnaCB0aGUgY3JpdGVyaWE6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2U/KiogTm9wZS4gTm8gc3RydWN0dXJlcyBhcmUgYmVpbmcgcGFzc2VkIHRvIHVzZXIgc3BhY2UgaGVyZS5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBUaGUgY29uZGl0aW9uIGlzIGJhc2VkIG9uIGBxdW90YS1cdTAwM2Vlc3pgLCB3aGljaCBpcyBwYXJ0IG9mIGBzdHJ1Y3QgZGFtb3NfcXVvdGFgLiBUaGlzIHN0cnVjdHVyZSBpcyAqZnVsbHkgaW5pdGlhbGl6ZWQqIOKAkyBpdCBnZXRzIGEgemVybyB2YWx1ZSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gKGBkYW1vc19xdW90YV9pbml0YCksIG9yIGdldHMgYSBjb21wdXRlZCB2YWx1ZSBkdXJpbmcgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgLiBTbywgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaGVyZS5cbjMuICAqKkRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24/KiogTm8gbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgaGVyZSB0aGF0IGNvdWxkIGhhdmUgdW5pbml0aWFsaXplZCBmaWVsZHMgbGF0ZXIgYWNjZXNzZWQuXG40LiAgKipCb3VuZHMgY2hlY2tzLCBsZW5ndGhzPyoqIE5vIGJ1ZmZlciBhY2Nlc3Nlcy4gTm90aGluZyBoZXJlIHRvIGNhdXNlIGEgbGVhayBvZiB1bmluaXRpYWxpemVkIGRhdGEuXG5cblNvLCBiYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IGluIHNheWluZyB0aGlzIHBhdGNoIGRvZXMgTk9UIGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZSBhcmUgbm8gbWVtb3J5IHNhZmV0eSBidWdzIGhlcmUuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGF0IHBsYXkgaGVyZS5cblxuTm93LCBsZXQncyBzb2xpZGlmeSB0aGUgcmF0aW9uYWxlIGZvciBgTmVlZHNLTVNBTiA9IGZhbHNlYDpcblxuKiAgICoqS0FTQU4vU3RhbmRhcmQgU2FuaXRpemVyczoqKiBUaGlzIGlzIGEgY29udHJvbCBmbG93IG9wdGltaXphdGlvbiwgYW4gZWFybHkgcmV0dXJuIHdoZW4gZWZmZWN0aXZlIHNjaGVtZSBzaXplIGlzIHplcm8uIEl0IGludHJvZHVjZXMgbm8gbWVtb3J5IHNhZmV0eSBidWdzIChPT0IsIFVBRiwgZXRjLilcbiogICAqKktNU0FOOioqIEtNU0FOIGxvb2tzIGZvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gYHF1b3RhLVx1MDAzZWVzemAgaXMgKmV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQqLCBhbmQgdGhlIGVhcmx5IHJldHVybiBkb2Vzbid0IHNraXAgcmVxdWlyZWQgaW5pdGlhbGl6YXRpb24gdGhhdCB3b3VsZCByZXN1bHQgaW4gcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UuXG5cblRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpc24ndCBuZWVkZWQuXG5cbkxldCdzIHN1Ym1pdCB0aGlzIHJlYXNvbmluZyB3aXRoIHRoZSBcInNldC1yZXN1bHRzXCIgY29tbWFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0OTUsIk91dHB1dFRva2VucyI6MjA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6NTQuMDYwMzQ5MTc0WiIsIlNlcSI6NzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIGVhcmx5IHJldHVybiBjaGVjayAoYGlmIChxdW90YS1cXHUwMDNlZXN6ID09IDApIHJldHVybjtgKSBpbiBgZGFtb3NfYWRqdXN0X3F1b3RhKClgIGluIGBtbS9kYW1vbi9jb3JlLmNgIHdoZW4gdGhlIGVmZmVjdGl2ZSBxdW90YSBzaXplIGlzIHplcm8uXFxuXFxuVGhlIGNoZWNrIGluc3BlY3RzIGBxdW90YS1cXHUwMDNlZXN6YCwgd2hpY2ggaXMgZGV0ZXJtaW5pc3RpY2FsbHkgaW5pdGlhbGl6ZWQgYW5kIGNvbXB1dGVkIGJ5IHRoZSBEQU1PTiBzdWJzeXN0ZW0gKHZpYSBgZGFtb3NfcXVvdGFfaW5pdCgpYCBhbmQgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoKWApLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBubyBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcyBvciBidWZmZXJzIHVuaW5pdGlhbGl6ZWQsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMuXFxuXFxuQmVjYXVzZSB0aGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBlYXJseSByZXR1cm4gY2hlY2sgKGBpZiAocXVvdGEtXFx1MDAzZWVzeiA9PSAwKSByZXR1cm47YCkgaW4gYGRhbW9zX2FkanVzdF9xdW90YSgpYCBpbiBgbW0vZGFtb24vY29yZS5jYCB3aGVuIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSBpcyB6ZXJvLlxcblxcblRoZSBjaGVjayBpbnNwZWN0cyBgcXVvdGEtXFx1MDAzZWVzemAsIHdoaWNoIGlzIGRldGVybWluaXN0aWNhbGx5IGluaXRpYWxpemVkIGFuZCBjb21wdXRlZCBieSB0aGUgREFNT04gc3Vic3lzdGVtICh2aWEgYGRhbW9zX3F1b3RhX2luaXQoKWAgYW5kIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKClgKS4gVGhlIHBhdGNoIGludHJvZHVjZXMgbm8gbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGFueSBkYXRhIHRvIHVzZXJzcGFjZSwgZG9lcyBub3QgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMgb3IgYnVmZmVycyB1bmluaXRpYWxpemVkLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLlxcblxcbkJlY2F1c2UgdGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowxvzk7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-12 12:52:11 +0000 UTC FinishedAt: 2026-09-12 13:43:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9958290885035431e2494159f555e332c3c14906", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_VADDR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9958290885035431e2494159f555e332c3c14906", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_VADDR" ], "series_id": "879dd9a7-5506-4e1e-9a4c-37044482705c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damos_adjust_quota", "kdamond_apply_schemes", "damon_start" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "9958290885035431e2494159f555e332c3c14906", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3NfYWRqdXN0X3F1b3RhJiMzNDssCiAgICAmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zdGFydCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gZWFybHkgcmV0dXJuIGNoZWNrIChgaWYgKHF1b3RhLVx1MDAzZWVzeiA9PSAwKSByZXR1cm47YCkgaW4gYGRhbW9zX2FkanVzdF9xdW90YSgpYCBpbiBgbW0vZGFtb24vY29yZS5jYCB3aGVuIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSBpcyB6ZXJvLlxuXG5UaGUgY2hlY2sgaW5zcGVjdHMgYHF1b3RhLVx1MDAzZWVzemAsIHdoaWNoIGlzIGRldGVybWluaXN0aWNhbGx5IGluaXRpYWxpemVkIGFuZCBjb21wdXRlZCBieSB0aGUgREFNT04gc3Vic3lzdGVtICh2aWEgYGRhbW9zX3F1b3RhX2luaXQoKWAgYW5kIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKClgKS4gVGhlIHBhdGNoIGludHJvZHVjZXMgbm8gbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGFueSBkYXRhIHRvIHVzZXJzcGFjZSwgZG9lcyBub3QgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMgb3IgYnVmZmVycyB1bmluaXRpYWxpemVkLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLlxuXG5CZWNhdXNlIHRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERBTU9TIHF1b3RhIGFkanVzdG1lbnQgbG9naWMgaW4gbW0vZGFtb24vY29yZS5jIGJ5IGFkZGluZyBhbiBlYXJseSByZXR1cm4gaW4gZGFtb3NfYWRqdXN0X3F1b3RhKCkgd2hlbiBlZmZlY3RpdmUgcXVvdGEgc2l6ZSAoZXN6KSBpcyB6ZXJvLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSwgYWx0ZXJpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCByZWdpb24gc2NvcmluZyBiZWhhdmlvciB3aGVuIHF1b3RhIGlzIGV4aGF1c3RlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQwYzUwNWIzZjM4MDZkZWE4ZjAxMzJlOGJiYzAyZmJhMTU5MGNhMDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAxMzo0MTowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDA2Y2YyYWI3ZTk3ZDcuLjhmZTE1ZjE3YmU4MGYgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTMzMjQsNiAmIzQzOzMzMjQsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuIFxuIFx0aWYgKCFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuIFx0XHRyZXR1cm47XG4mIzQzO1x0aWYgKHF1b3RhLVx1MDAzZWVzeiA9PSAwKVxuJiM0MztcdFx0cmV0dXJuO1xuIFxuIFx0LyogRmlsbCB1cCB0aGUgc2NvcmUgaGlzdG9ncmFtICovXG4gXHRtZW1zZXQoYy1cdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSwgMCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX2FkanVzdF9xdW90YSYjMzQ7LAogICAgJiMzNDtrZGFtb25kX2FwcGx5X3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERBTU9TIHF1b3RhIGFkanVzdG1lbnQgbG9naWMgaW4gbW0vZGFtb24vY29yZS5jIGJ5IGFkZGluZyBhbiBlYXJseSByZXR1cm4gaW4gZGFtb3NfYWRqdXN0X3F1b3RhKCkgd2hlbiBlZmZlY3RpdmUgcXVvdGEgc2l6ZSAoZXN6KSBpcyB6ZXJvLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSwgYWx0ZXJpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCByZWdpb24gc2NvcmluZyBiZWhhdmlvciB3aGVuIHF1b3RhIGlzIGV4aGF1c3RlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQwYzUwNWIzZjM4MDZkZWE4ZjAxMzJlOGJiYzAyZmJhMTU5MGNhMDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAxMzo0MTowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCAwNmNmMmFiN2U5N2Q3Li44ZmUxNWYxN2JlODBmIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0zMzI0LDYgJiM0MzszMzI0LDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcykKIAogCWlmICghYy0mZ3Q7b3BzLmdldF9zY2hlbWVfc2NvcmUpCiAJCXJldHVybjsKJiM0MzsJaWYgKHF1b3RhLSZndDtlc3ogPT0gMCkKJiM0MzsJCXJldHVybjsKIAogCS8qIEZpbGwgdXAgdGhlIHNjb3JlIGhpc3RvZ3JhbSAqLwogCW1lbXNldChjLSZndDtyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSwgMCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBDb250ZXh0dWFsIEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoaXMgcGF0Y2ggdG8gYG1tL2RhbW9uL2NvcmUuY2AgYXJvdW5kIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBmdW5jdGlvbi4gVGhlIGNvZGUgbWVudGlvbnMgdGhpcyBhZGp1c3RtZW50IG9mIHF1b3RhLCBhbmQsIGtub3dpbmcgREFNT04sIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGFwcGFyZW50IHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBkeW5hbWljIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZy4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyAqd2h5KiB0aGlzIGNoYW5nZSBpcyBoYXBwZW5pbmcuIFRoZSBjcml0aWNhbCBsaW5lIGlzIGBpZiAocXVvdGEtJmd0O2VzeiA9PSAwKSByZXR1cm47YC4gVGhpcyBzdWdnZXN0cyBhbiBlYXJseSBleGl0IGNvbmRpdGlvbiwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgZXN6YCBsaWtlbHkgcmVwcmVzZW50cyB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbi4gQSB6ZXJvIHNpemUgbWVhbnMgZWl0aGVyIGFuIGludmFsaWQgcmVnaW9uIG9yIHRoYXQgdGhlIHJlZ2lvbiBpcyBzb21laG93IGVtcHR5LiBJbiBEQU1PTiYjMzk7cyBjb250ZXh0LCBoYW5kbGluZyB0aGlzIHNpdHVhdGlvbiBpcyBlc3NlbnRpYWwsIHNpbmNlIGFuIGVtcHR5IHJlZ2lvbiB3aWxsIHNrZXcgb3VyIG1ldHJpY3MuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpcyBtb3N0IGxpa2VseSBhZGRpbmcgYSBjaGVjayB0byBwcmV2ZW50IGRpdmlzaW9uIGJ5IHplcm8gb3IgYW55IHVuaW50ZW5kZWQgc2lkZS1lZmZlY3RzIG9uIGVtcHR5IHJlZ2lvbnMuCgpJJiMzOTtkIHdhbnQgdG8gY2hlY2sgaG93IGBxdW90YS0mZ3Q7ZXN6YCBpcyBpbml0aWFsaXplZCBhbmQgaG93IGl0JiMzOTtzIHVzZWQgZWxzZXdoZXJlLCBidXQgaW4gdGhpcyBpc29sYXRlZCBzbmlwcGV0LCB0aGUgaW50ZW50aW9uIGFwcGVhcnMgdG8gYmUgYSBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgbWVhc3VyZS4gVGhlIGBnZXRfc2NoZW1lX3Njb3JlYCBjaGVjayBwcmVjZWRpbmcgaXQgZnVydGhlciBpbXBsaWVzIHRoYXQgd2UmIzM5O3JlIGluIHRoZSByZWFsbSBvZiBzY29yaW5nIG9yIHJhbmtpbmcgbWVtb3J5IHJlZ2lvbnMgZm9yIG9wdGltaXphdGlvbi4gVGhlIGhpc3RvZ3JhbSBhbHNvIGNvbmZpcm1zIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzMTU6XHRcdFx0cXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9zeiAmIzQzOz0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zejtcbjMzMTY6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcbjMzMTc6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiA9IDA7XG4zMzE4Olx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxuMzMxOTpcdFx0XHRcdGNhY2hlZF9lc3ogPSBxdW90YS1cdTAwM2Vlc3o7XG4zMzIwOlx0XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4zMzIxOlx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBxdW90YS1cdTAwM2Vlc3ogIT0gY2FjaGVkX2VzeilcbjMzMjI6XHRcdFx0XHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xuMzMyMzpcdFx0fVxuMzMyNDpcdFxuMzMyNTpcdFx0aWYgKCFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuMzMyNjpcdFx0XHRyZXR1cm47XG4zMzI3Olx0XHRpZiAocXVvdGEtXHUwMDNlZXN6ID09IDApXG4zMzI4Olx0XHRcdHJldHVybjtcbjMzMjk6XHRcbjMzMzA6XHRcdC8qIEZpbGwgdXAgdGhlIHNjb3JlIGhpc3RvZ3JhbSAqL1xuMzMzMTpcdFx0bWVtc2V0KGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0sIDAsXG4zMzMyOlx0XHRcdFx0c2l6ZW9mKCpjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKSAqXG4zMzMzOlx0XHRcdFx0KERBTU9TX01BWF9TQ09SRSAmIzQzOyAxKSk7XG4zMzM0Olx0XHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xuMzMzNTpcdFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuMzMzNjpcdFx0XHRcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXG4zMzM3Olx0XHRcdFx0XHRjb250aW51ZTtcbjMzMzg6XHRcdFx0XHRpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKVxuMzMzOTpcdFx0XHRcdFx0Y29udGludWU7XG4zMzQwOlx0XHRcdFx0c2NvcmUgPSBjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKGMsIHIsIHMpO1xuMzM0MTpcdFx0XHRcdGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1bc2NvcmVdICYjNDM7PVxuMzM0MjpcdFx0XHRcdFx0ZGFtb25fc3pfcmVnaW9uKHIpO1xuMzM0MzpcdFx0XHRcdGlmIChzY29yZSBcdTAwM2UgbWF4X3Njb3JlKVxuMzM0NDpcdFx0XHRcdFx0bWF4X3Njb3JlID0gc2NvcmU7XG4zMzQ1Olx0XHRcdH1cbjMzNDY6XHRcdH1cbjMzNDc6XHRcbjMzNDg6XHRcdC8qIFNldCB0aGUgbWluIHNjb3JlIGxpbWl0ICovXG4zMzQ5Olx0XHRmb3IgKGN1bXVsYXRlZF9zeiA9IDAsIHNjb3JlID0gbWF4X3Njb3JlOyA7IHNjb3JlLS0pIHtcbjMzNTA6XHRcdFx0Y3VtdWxhdGVkX3N6ICYjNDM7PSBjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXTtcbjMzNTE6XHRcdFx0aWYgKGN1bXVsYXRlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzeiB8fCAhc2NvcmUpXG4zMzUyOlx0XHRcdFx0YnJlYWs7XG4zMzUzOlx0XHR9XG4zMzU0Olx0XHRxdW90YS1cdTAwM2VtaW5fc2NvcmUgPSBzY29yZTtcbjMzNTU6XHR9XG4zMzU2Olx0XG4zMzU3Olx0c3RhdGljIHZvaWQgZGFtb3NfdHJhY2Vfc3RhdChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4zMzU4Olx0e1xuMzM1OTpcdFx0dW5zaWduZWQgaW50IGNpZHggPSAwLCBzaWR4ID0gMDtcbjMzNjA6XHRcdHN0cnVjdCBkYW1vcyAqc2l0ZXI7XG4zMzYxOlx0XG4zMzYyOlx0XHRpZiAoIXRyYWNlX2RhbW9zX3N0YXRfYWZ0ZXJfYXBwbHlfaW50ZXJ2YWxfZW5hYmxlZCgpKVxuMzM2MzpcdFx0XHRyZXR1cm47XG4zMzY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE3OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGBkYW1vc19hZGp1c3RfcXVvdGFgIGFuZCBpdHMgQ2FsbGVycyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBgZGFtb3NfYWRqdXN0X3F1b3RhYCBmdW5jdGlvbnMgYW5kIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBleGFtaW5pbmcgdGhlIHJlc3Qgb2YgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIGl0c2VsZi4gSSB3YW50IHRvIHNlZSB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBkZXBlbmRlbmNpZXMsIGFueSBzaWRlIGVmZmVjdHMgd2l0aGluIHRoZSBmdW5jdGlvbiBpdHNlbGYg4oCTIGVzc2VudGlhbGx5LCBpdHMgaW50ZXJuYWwgbG9naWMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGF0b21pY2l0eSBpc3N1ZXMsIG9yIGFueSBvcHRpbWl6YXRpb25zIHRoYXQgY2FuIGJlIG1hZGUuIEFyZSB0aGVyZSBhbnkgcmVzb3VyY2UgbG9ja3MgaW52b2x2ZWQ/IEhvdyBhcmUgcXVvdGFzIG1hbmFnZWQgaW50ZXJuYWxseT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgb3ZlcmZsb3cgaXNzdWVzPyBEb2VzIGl0IGhhbmRsZSBuZWdhdGl2ZSBhZGp1c3RtZW50cyBncmFjZWZ1bGx5PwoKTmV4dCwgSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBhbGwgdGhlIGNhbGxlcnMgb2YgYGRhbW9zX2FkanVzdF9xdW90YWAuIFVuZGVyc3RhbmRpbmcgKndobyogaXMgY2FsbGluZyBpdCBhbmQgKndoeSogaXMgY3J1Y2lhbC4gV2hhdCBhcmUgdGhlIGNhbGxpbmcgY29udGV4dHM/IEFyZSB3ZSBkZWFsaW5nIHdpdGggaGlnaC1mcmVxdWVuY3kgY2FsbHMsIGJhdGNoIHByb2Nlc3NpbmcsIG9yIGluZnJlcXVlbnQgb3BlcmF0aW9ucz8gVGhpcyB3aWxsIHJldmVhbCB0aGUgYWNjZXNzIHBhdHRlcm5zIGFuZCB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gcXVvdGEgbWFuYWdlbWVudC4gSSB3YW50IHRvIGZpbmQgb3V0IGFsbCBvZiB0aGUgZGlmZmVyZW50IHdheXMgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIHV0aWxpemVkLgoKSeKAmWxsIGFsc28gbmVlZCB0byBjb25zaWRlciB0aGUgZGF0YSBmbG93LiBXaGF0IGFyZ3VtZW50cyBhcmUgYmVpbmcgcGFzc2VkIHRvIGBkYW1vc19hZGp1c3RfcXVvdGFgPyBXaGF0IGFyZSB0aGVpciByYW5nZXMgYW5kIHBvc3NpYmxlIHZhbHVlcz8gSG93IGRvZXMgdGhlIGNhbGxlciBwcmVwYXJlIHRoZSBpbnB1dCBxdW90YSBjaGFuZ2VzLCBhbmQgaG93IGRvZXMgaXQgaW50ZXJwcmV0IHRoZSByZXN1bHRzPyBBcmUgdGhlcmUgYW55IGRhdGEgdmFsaWRhdGlvbiBzdGVwcyBiZWluZyBza2lwcGVkLCBvciByZXBlYXRlZCwgYnkgdGhlIGNhbGxlcnMgb3IgaW5zaWRlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGl0c2VsZj8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaW5jb25zaXN0ZW5jaWVzIGFuZCBwb3RlbnRpYWwgYnVncyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gaW5jb3JyZWN0IHVzYWdlLgoKVWx0aW1hdGVseSwgSSYjMzk7bSBhaW1pbmcgZm9yIGEgY29tcHJlaGVuc2l2ZSB2aWV3OiBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uJiMzOTtzIHJlc3BvbnNpYmlsaXR5LCBpdHMgbGltaXRhdGlvbnMsIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmZvcm0gbXkgYXBwcm9hY2ggdG8gYW55IHJlbGF0ZWQgYnVnIHJlcG9ydHMsIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMsIG9yIHJlZmFjdG9yaW5nIGVmZm9ydHMuIEkgbmVlZCB0byBrbm93IHdoZXJlIEkgY2FuIG9wdGltaXplLCBvciBpZiB0aGVyZSBpcyBubyBpbW1lZGlhdGUgYWN0aW9uIHRvIGJlIHRha2VuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzAwOlx0XG4zMzAxOlx0XHQvKiBGaXJzdCBjaGFyZ2Ugd2luZG93ICovXG4zMzAyOlx0XHRpZiAoIXF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogXHUwMDI2XHUwMDI2ICFxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20pIHtcbjMzMDM6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcbjMzMDQ6XHRcdFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbjMzMDU6XHRcdFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkpXG4zMzA2Olx0XHRcdFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcbjMzMDc6XHRcdH1cbjMzMDg6XHRcbjMzMDk6XHRcdC8qIE5ldyBjaGFyZ2Ugd2luZG93IHN0YXJ0cyAqL1xuMzMxMDpcdFx0aWYgKCF0aW1lX2luX3JhbmdlX29wZW4oamlmZmllcywgcXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tLFxuMzMxMTpcdFx0XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tICYjNDM7XG4zMzEyOlx0XHRcdFx0XHRtc2Vjc190b19qaWZmaWVzKHF1b3RhLVx1MDAzZXJlc2V0X2ludGVydmFsKSkpIHtcbjMzMTM6XHRcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4zMzE0Olx0XHRcdFx0cy1cdTAwM2VzdGF0LnF0X2V4Y2VlZHMmIzQzOyYjNDM7O1xuMzMxNTpcdFx0XHRxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX3N6ICYjNDM7PSBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6O1xuMzMxNjpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20gPSBqaWZmaWVzO1xuMzMxNzpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX3N6ID0gMDtcbjMzMTg6XHRcdFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkpXG4zMzE5Olx0XHRcdFx0Y2FjaGVkX2VzeiA9IHF1b3RhLVx1MDAzZWVzejtcbjMzMjA6XHRcdFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbjMzMjE6XHRcdFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkgXHUwMDI2XHUwMDI2IHF1b3RhLVx1MDAzZWVzeiAhPSBjYWNoZWRfZXN6KVxuMzMyMjpcdFx0XHRcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XG4zMzIzOlx0XHR9XG4zMzI0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEyNQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGlzIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhpcyBsb29wLiBUaGUgY29kZSYjMzk7cyB0cnlpbmcgdG8gc2V0IGEgbWluaW11bSBzY29yZSBsaW1pdC4gSXQmIzM5O3MgYWNjdW11bGF0aW5nIHNpemVzIGJhc2VkIG9uIGEgc2NvcmUgaGlzdG9ncmFtLCBhbmQgdGhlIGxvb3AgY29udGludWVzIGFzIGxvbmcgYXMgdGhlIGN1bXVsYXRpdmUgc2l6ZSAoYGN1bXVsYXRlZF9zemApIGlzIGxlc3MgdGhhbiB0aGUgdGFyZ2V0IHNpemUgKGBxdW90YS0mZ3Q7ZXN6YCkgYW5kIHRoZSBzY29yZSBpc24mIzM5O3QgemVyby4KCldhaXQgYSBtaW51dGUsIGlmIGBxdW90YS0mZ3Q7ZXN6YCBpcyB6ZXJvLCBiZWZvcmUgdGhpcyBwYXRjaCwgdGhlIGNvbmRpdGlvbiBgY3VtdWxhdGVkX3N6ICZndDs9IHF1b3RhLSZndDtlc3pgIHdvdWxkIGJlIGltbWVkaWF0ZWx5IHRydWUgYmVjYXVzZSBgY3VtdWxhdGVkX3N6YCBzdGFydHMgYXQgemVyby4gVGhhdCBtZWFucyB0aGUgbG9vcCB3b3VsZCBicmVhayBpbW1lZGlhdGVseSBvbiB0aGUgZmlyc3QgaXRlcmF0aW9uISBXaXRoIGBzY29yZWAgZXF1YWwgdG8gYG1heF9zY29yZWAhIEhtbW0uLi4gQnV0IHdoYXQgaWYgYGMtJmd0O3JlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXWAgaXMgemVybz8gVGhhdCB3b3VsZCByZXN1bHQgaW4gYGN1bXVsYXRlZF9zemAgcmVtYWluaW5nIHplcm8uCgpIb2xkIG9uIGEgc2Vjb25kLCB3aGF0JiMzOTtzIHdpdGggdGhhdCBgaWYgKHF1b3RhLSZndDtlc3ogPT0gMCkgcmV0dXJuO2AgY2hlY2s/IFdoeSB3YXMgdGhhdCBhZGRlZD8gRG9lcyBpdCBtYXR0ZXIgdGhhdCBgcXVvdGEtJmd0O21pbl9zY29yZWAgaXNuJiMzOTt0IHVwZGF0ZWQgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgZWFybHk/IElmIGBxdW90YS0mZ3Q7ZXN6YCBpcyB6ZXJvLCBtYXliZSB0aGUgcXVvdGEmIzM5O3MgZWZmZWN0aXZlbHkgZGlzYWJsZWQgYW5kIG5vIHJlZ2lvbnMgY2FuIGJlIGFwcGxpZWQuIEkgZ3Vlc3MgYHF1b3RhLSZndDttaW5fc2NvcmVgIGlzbiYjMzk7dCB1c2VkIHRoZW4uCgpJIG5lZWQgbW9yZSBjb250ZXh0IGhlcmUuIFdoYXQmIzM5O3MgdGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXRjaD8gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGNoZWNrIHRoZSBnaXQgbG9nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgaXNzdWUgdGhpcyBjb2RlIGlzIGFkZHJlc3NpbmcuIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB3aHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfYWRqdXN0X3F1b3RhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMyNzY9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2VfZXN6KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzI4OS1cbm1tL2RhbW9uL2NvcmUuYzozMjkwOnN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtMzI5MS17XG4tLVxubW0vZGFtb24vY29yZS5jPTMzNzM9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMzODgtXG5tbS9kYW1vbi9jb3JlLmM6MzM4OTpcdFx0ZGFtb3NfYWRqdXN0X3F1b3RhKGMsIHMpO1xubW0vZGFtb24vY29yZS5jLTMzOTAtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAzMgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEQU1PTiBLY29uZmlnIEV4cGxvcmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIERBTU9OLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB1c3VhbGx5IHRvIHVuZGVyc3RhbmQgdGhlIGhpZ2gtbGV2ZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZpcnN0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGVuYWJsaW5nIHN3aXRjaGVzLCB0aGUgb25lcyB0aGF0IGFjdGl2YXRlIHRoZSBmdW5kYW1lbnRhbCBmZWF0dXJlcyBvZiBEQU1PTi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgb3B0aW9ucyBsaWtlIGBDT05GSUdfREFNT05gIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBwcm9iYWJseSB3aXRoIHN1Yi1vcHRpb25zIHRvIGNvbnRyb2wgdGhpbmdzIGxpa2UgdGhlIGRlZmF1bHQgbW9uaXRvcmluZyBncmFudWxhcml0eSBvciBzYW1wbGluZyBpbnRlcnZhbHMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGVzc2VudGlhbCBidWlsZGluZyBibG9ja3MuCgpBZnRlciB0aGF0LCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgZGlmZmVyZW50IG1vbml0b3JpbmcgdGFyZ2V0cy4gSXMgREFNT04gbGltaXRlZCB0byBzcGVjaWZpYyBtZW1vcnkgcmVnaW9ucywgb3IgaXMgaXQgbW9yZSBnZW5lcmFsaXplZD8gSSYjMzk7bGwgZXhwZWN0IHRvIHNlZSBjb25maWd1cmF0aW9ucyBmb3IgdGFyZ2V0aW5nIGRpZmZlcmVudCB0eXBlcyBvZiBtZW1vcnkgKGUuZy4sIHBhZ2UgY2FjaGUsIGFub255bW91cyBtZW1vcnksIGV0Yy4pIGFuZCBwb3RlbnRpYWxseSBmb3Igc3BlY2lmeWluZyBkaWZmZXJlbnQgbW9uaXRvcmluZyB6b25lcyBvciByYW5nZXMuIEhvdyBncmFudWxhciBjYW4gSSBnZXQgaW4gZGVmaW5pbmcgd2hhdCBEQU1PTiBvYnNlcnZlcz8KCk5leHQsIEkmIzM5O2xsIGJlIGludGVyZXN0ZWQgaW4gaG93IERBTU9OIGludGVyYWN0cyB3aXRoIGRpZmZlcmVudCBtZW1vcnkgbWFuYWdlbWVudCBtZWNoYW5pc21zLiBEb2VzIGl0IGhhdmUgc3BlY2lmaWMgb3B0aW9ucyByZWxhdGVkIHRvIE5VTUEsIGh1Z2UgcGFnZXMsIG9yIGFueSBvdGhlciBmZWF0dXJlcyB0aGF0IGFmZmVjdCBtZW1vcnkgYWxsb2NhdGlvbiBvciBhY2Nlc3MgcGF0dGVybnM/IEkmIzM5O2xsIHByb2JhYmx5IGJlIHNlZWtpbmcgc2V0dGluZ3MgdG8gZmluZS10dW5lIERBTU9OJiMzOTtzIGJlaGF2aW9yIGluIHRoZXNlIHNjZW5hcmlvcywgZW5zdXJpbmcgaXQgZG9lc24mIzM5O3QgaW50ZXJmZXJlIHVuZHVseSB3aXRoIG90aGVyIG9wdGltaXphdGlvbnMuCgpQZXJmb3JtYW5jZSBpcyBhbHdheXMga2V5LCBzbyBJJiMzOTtsbCBiZSBleGFtaW5pbmcgdGhlIHZhcmlvdXMga25vYnMgdGhhdCBhbGxvdyBtZSB0byBiYWxhbmNlIHRoZSBvdmVyaGVhZCBvZiBEQU1PTiB3aXRoIGl0cyBtb25pdG9yaW5nIGJlbmVmaXRzLiBBcmUgdGhlcmUgb3B0aW9ucyBmb3IgY29udHJvbGxpbmcgdGhlIHNhbXBsaW5nIGZyZXF1ZW5jeSwgdGhlIHNpemUgb2YgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBvciB0aGUgc2NoZWR1bGluZyBvZiBtb25pdG9yaW5nIHRhc2tzPyBJJiMzOTtsbCB3YW50IHRvIGZpbmQgc2V0dGluZ3MgdGhhdCBsZXQgbWUgbWluaW1pemUgREFNT04mIzM5O3MgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IGluIGxhdGVuY3ktc2Vuc2l0aXZlIGFwcGxpY2F0aW9ucy4KCkZpbmFsbHksIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IGV4cGVyaW1lbnRhbCBvciBhZHZhbmNlZCBmZWF0dXJlcy4gQXJlIHRoZXJlIG9wdGlvbnMgcmVsYXRlZCB0byBzcGVjaWZpYyB1c2UgY2FzZXMsIGxpa2UgbWVtb3J5IHByZXNzdXJlIGRldGVjdGlvbiBvciB3b3JrbG9hZCBjbGFzc2lmaWNhdGlvbj8gSSYjMzk7bSBob3BpbmcgdG8gc2VlIGFueSBmbGFncyB0aGF0IGhpbnQgYXQgZnV0dXJlIERBTU9OIGNhcGFiaWxpdGllcy4gSSYjMzk7bSBleHBlY3RpbmcgYSBjbGVhbiwgbG9naWNhbCBzdHJ1Y3R1cmUgdG8gdGhlIEtjb25maWcsIGFuZCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjb25jaXNlIGFuZCBoZWxwZnVsIGhlbHAgdGV4dHMgdG8gZ3VpZGUgbWUgaW4gdW5kZXJzdGFuZGluZyBlYWNoIG9wdGlvbiYjMzk7cyBwdXJwb3NlIGFuZCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnOjY6XHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy03LVx0aGVscFxuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWc6MTY6XHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjE3Olx0ZGVwZW5kcyBvbiBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy0xOC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MTk6XHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cbm1tL2RhbW9uL0tjb25maWc6MjA6XHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxubW0vZGFtb24vS2NvbmZpZy0yMS1cdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZzoyODpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbm1tL2RhbW9uL0tjb25maWctMjktXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZy0zMC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MzE6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxubW0vZGFtb24vS2NvbmZpZy0zMi1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo0MDpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxubW0vZGFtb24vS2NvbmZpZy00MS1cdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xubW0vZGFtb24vS2NvbmZpZzo0MjpcdGRlZmF1bHQgREFNT05cbm1tL2RhbW9uL0tjb25maWctNDMtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjQ0Olx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTQ1LVx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6NDk6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbm1tL2RhbW9uL0tjb25maWctNTAtXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbm1tL2RhbW9uL0tjb25maWc6NTE6XHRkZWZhdWx0IERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTUyLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo1MzpcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy01NC1cdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZzo1NzpcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjU4Olx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy01OS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnLTYwLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo2MTpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cbm1tL2RhbW9uL0tjb25maWctNjItXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnOjY5Olx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6NzA6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xubW0vZGFtb24vS2NvbmZpZzo3MTpcdGRlZmF1bHQgREFNT05cbm1tL2RhbW9uL0tjb25maWctNzItXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjczOlx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2Vcbm1tL2RhbW9uL0tjb25maWctNzQtXHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjc4Olx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy03OS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnLTgwLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo4MTpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxubW0vZGFtb24vS2NvbmZpZy04Mi1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZzo4OTpcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6OTA6XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTkxLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo5MjpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXG5tbS9kYW1vbi9LY29uZmlnOjkzOlx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXG5tbS9kYW1vbi9LY29uZmlnLTk0LVx0ICB0aG9zZS5cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnOjEwMTpcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzoxMDI6XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTEwMy1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MTA0Olx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cbm1tL2RhbW9uL0tjb25maWctMTA1LVx0ICBwcm90ZWN0IGZyZXF1ZW50bHkgYWNjZXNzZWQgKGhvdCkgcGFnZXMgd2hpbGUgcmFyZWx5IGFjY2Vzc2VkIChjb2xkKVxuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWc6MTA5Olx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjExMDpcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctMTExLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzoxMTI6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cbm1tL2RhbW9uL0tjb25maWc6MTEzOlx0ICBJdCBydW5zIERBTU9OIGFuZCBleHBvc2UgYWNjZXNzIG1vbml0b3JpbmcgcmVzdWx0cyBpbiBzaW1wbGUgc3RhdFxubW0vZGFtb24vS2NvbmZpZy0xMTQtXHQgIG1ldHJpY3MuXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZzoxMTc6XHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTE4Olx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnOjExOTpcdGRlZmF1bHQgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMjAtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjEyMTpcdCAgV2hldGhlciB0byBlbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0LiAgVXNlcnMgY2FuIGRpc2FibGUgaXQgaW5cbm1tL2RhbW9uL0tjb25maWctMTIyLVx0ICBib290IG9yIHJ1bnRpbWUgdXNpbmcgaXRzICYjMzk7ZW5hYmxlZCYjMzk7IHBhcmFtZXRlci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ0MQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgZGVsdmluZyBpbnRvIHRoZSBNYWtlZmlsZSB3aXRoaW4gdGhlIE1lbW9yeSBNYW5hZ2VtZW50JiMzOTtzIERBTU9OIChEeW5hbWljIEFjY2VzcyBNb25pdG9yKSBzdWJzeXN0ZW06CgoqKkRpdmluZyBpbnRvIHRoZSBtbS9kYW1vbiBNYWtlZmlsZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBNYWtlZmlsZSB3aXRoaW4gdGhlIERBTU9OIGRpcmVjdG9yeS4gTXkgaW5pdGlhbCBleHBlY3RhdGlvbiBpcyBhIGZhaXJseSBzdGFuZGFyZCBzdHJ1Y3R1cmUsIGJ1dCB0aGUgc3BlY2lmaWNzIGFyZSB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgYml0cyBsaWUuIEkmIzM5O20ga2VlbiB0byBzZWUgaG93IHRoZSBidWlsZCBwcm9jZXNzIGludGVncmF0ZXMgdGhlIERBTU9OIGNvbXBvbmVudHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOgoKKiAgICoqU291cmNlIEZpbGVzOioqIFRoZSBsaXN0IG9mIHNvdXJjZSBmaWxlcyAoYCouY2AsIGAqLlNgKSB0aGF0IGNvbXByaXNlIERBTU9OLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgREFNT04gZnVuY3Rpb25hbGl0eSBpcyBtb2R1bGFyaXplZC4gV2hhdCBhcmUgdGhlIGNvcmUgY29tcG9uZW50cz8gQXJlIHRoZXkgc3BsaXQgaW50byBtb25pdG9yLCBzY2hlbWUsIG9yIG90aGVyIGFyZWFzPwoqICAgKipEZXBlbmRlbmNpZXM6KiogSG93IGFyZSB0aGUgREFNT04gbW9kdWxlcyBsaW5rZWQgYW5kIGRlcGVuZGVudCB1cG9uIG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGFuZCBsaWJyYXJpZXM/IFNwZWNpZmljYWxseSwgd2hpY2ggaGVhZGVycyBhcmUgaW5jbHVkZWQuIEFyZSB0aGVyZSBhbnkgY3VzdG9tIGNvbXBpbGVyIGZsYWdzIG9yIGxpbmtlciBzY3JpcHRzIHNwZWNpZmljIHRvIERBTU9OJiMzOTtzIG5lZWRzPwoqICAgKipCdWlsZCBSdWxlczoqKiBUaGUgYWN0dWFsIGNvbXBpbGF0aW9uIGFuZCBsaW5raW5nIHJ1bGVzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgbW9kdWxlcyBhcmUgYnVpbHQgYW5kIGludGVncmF0ZWQgaW50byB0aGUga2VybmVsIGltYWdlLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGJ1aWxkcyBvciBmZWF0dXJlcyB0aGF0IGFyZSBzZWxlY3RhYmxlIHZpYSBLY29uZmlnIG9wdGlvbnM/CiogICAqKk9iamVjdCBGaWxlczoqKiBJJiMzOTtsbCBub3RlIHdoZXJlIHRoZSBvdXRwdXQgb2JqZWN0IGZpbGVzIGFyZSBwbGFjZWQuCiogICAqKktidWlsZCBJbnRlZ3JhdGlvbjoqKiBJJiMzOTtsbCBiZSBjaGVja2luZyB0byBzZWUgaG93IERBTU9OIGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIChLYnVpbGQpLiBBcmUgdGhlcmUgYW55IGN1c3RvbSBLYnVpbGQgdmFyaWFibGVzIG9yIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBzcGVjaWZpYyBEQU1PTiByZXF1aXJlbWVudHM/IEhvdyBpcyB0aGUgbW9kdWxlIHByb3Blcmx5IGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgcHJvY2Vzcz8KKiAgICoqRG9jdW1lbnRhdGlvbiBUYXJnZXRzOioqIElkZWFsbHksIHRoZXJlIHdpbGwgYmUgdGFyZ2V0cyBmb3IgZ2VuZXJhdGluZyBkb2N1bWVudGF0aW9uLiBJIG5lZWQgdG8gZ2V0IHF1aWNrbHkgdXAgdG8gc3BlZWQgb24gdGhlIHB1cnBvc2Ugb2YgZWFjaCBmaWxlIGFuZCBjb21wb25lbnQuCgpJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB1c2Ugb2YgbWFjcm9zLCB2YXJpYWJsZXMsIGFuZCBpbmNsdWRlIHBhdGhzLiBBbnkgdHJpY2tzIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGJ1aWxkLXRpbWUgb3B0aW1pemF0aW9uIHdpbGwgYmUgb2YgaW50ZXJlc3QuIE92ZXJhbGwsIHRoaXMgTWFrZWZpbGUgc2hvdWxkIHBhaW50IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgREFNT04gaXMgYXNzZW1ibGVkIGFuZCBpbnRlZ3JhdGVkIGludG8gdGhlIGJyb2FkZXIga2VybmVsIGVudmlyb25tZW50LiBJIHdhbnQgdG8gc2VlIGlmIGl0JiMzOTtzIGZvbGxvd2luZyBiZXN0IHByYWN0aWNlcyBhbmQgaWYgdGhlcmUgYXJlIGFueSBzaWducyBvZiBjb21wbGV4IGJ1aWxkIGxvZ2ljIHRoYXQgbWlnaHQgaW5kaWNhdGUgcG90ZW50aWFsIGJ1aWxkIGlzc3VlcyBvciBtYWludGFpbmFiaWxpdHkgY29uY2VybnMgZG93biB0aGUgbGluZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvcmUubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL01ha2VmaWxlLTItXG5tbS9kYW1vbi9NYWtlZmlsZTozOm9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbm1tL2RhbW9uL01ha2VmaWxlLTQtb2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyB2YWRkci5vXG4tLVxubW0vZGFtb24vY29yZS5jPTMwNT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9tdnN1bSh1bnNpZ25lZCBsb25nIGN1cnJlbnRfbnIsXG4tLVxubW0vZGFtb24vY29yZS5jLTMxOC0gKiBiZSBhY2Nlc3NlZC4gIEhlbmNlIHRoZSB2YWx1ZSBjYW4gYmUgaW50ZXJwcmV0ZWQgYXMgdGhlIHJlbGF0aXZlIGFjY2Vzc1xubW0vZGFtb24vY29yZS5jOjMxOTogKiBmcmVxdWVuY3kgc2NvcmUgb2YgdGhlIHJlZ2lvbiAoQHIpLiAgVGhlIHZhbHVlIGlzIGNhbGN1bGF0ZWQgYXMgYSBwc2V1ZG9cbm1tL2RhbW9uL2NvcmUuYy0zMjAtICogbW92aW5nIHN1bSwgYW5kIGhlbmNlIGl0IGlzIG5vdCBhbiBleGFjdCB2YWx1ZSBidXQganVzdCBhIGJlc3QtZWZmb3J0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNTkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqRXhhbWluaW5nIHRoZSBEQU1PTiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgREFNT04sIHRoZSBEYXRhIEFjY2VzcyBNT05pdG9yLCBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0aGF0IHRoZSBgb2JqLSQoQ09ORklHX0RBTU9OKSAmIzQzOz0gZGFtb24vYCBsaW5lIHdpdGhpbiB0aGUgYG1tL01ha2VmaWxlYCBmaWxlIGlzIHRoZSBrZXkgdG8gaXRzIGluY2x1c2lvbi4gVGhhdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCBwYXR0ZXJuIGZvciBzZWxlY3RpdmVseSBjb21waWxpbmcgbW9kdWxlcyBiYXNlZCBvbiBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUbyBiZSBjZXJ0YWluLCBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gb3BlbiBhbmQgZXhhbWluZSBgbW0vTWFrZWZpbGVgIHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMgaW5kZWVkIHRoZSByZWxldmFudCBsb2NhdGlvbiBmb3IgbWFuYWdpbmcgREFNT04mIzM5O3Mgb2JqZWN0IGZpbGVzIGFuZCB0aGVpciBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gRnJvbSB0aGVyZSwgSSBjYW4gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIGRhdGEgbW9uaXRvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMzY9b2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSAmIzQzOz0gZGVidWdfcGFnZV9yZWYub1xubW0vTWFrZWZpbGU6MTM3Om9iai0kKENPTkZJR19EQU1PTikgJiM0Mzs9IGRhbW9uL1xubW0vTWFrZWZpbGUtMTM4LW9iai0kKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgJiM0Mzs9IHVzZXJjb3B5Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ3MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGRpc3NlY3RpbmcgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIERBTU9OLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHNwZWNpZmljYWxseSBob3cgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCB3aXRoaW4gdGhlIERBTU9OIGNvbnRleHQuIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggdGhhdCBsZWFkcyB0byBpdHMgaW52b2NhdGlvbi4KCk15IGltbWVkaWF0ZSBwbGFuIGlzIHRvIHN0YXJ0IHdpdGggYSBzeXN0ZW1hdGljIGV4YW1pbmF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSYjMzk7cyBhcmNoaXRlY3R1cmUgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGRhbW9zX2FkanVzdF9xdW90YWAgZmlyc3QuIFRoZW4sIEkgd2lsbCBnZW5lcmF0ZSBvciB1c2UgZXhpc3RpbmcgY2FsbCBncmFwaHMgdG8gbWFwIG91dCB0aGUgZXhlY3V0aW9uIGZsb3csIGlkZW50aWZ5aW5nIHRoZSB1cHN0cmVhbSBmdW5jdGlvbnMgdGhhdCBldmVudHVhbGx5IGNhbGwgYGRhbW9zX2FkanVzdF9xdW90YWAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSBjbGVhciBwaWN0dXJlIG9mIHdoZW4sIHdoZXJlLCBhbmQgd2h5IHRoaXMgcXVvdGEgYWRqdXN0bWVudCBpcyB0YWtpbmcgcGxhY2Ugd2l0aGluIHRoZSBicm9hZGVyIERBTU9OIGZyYW1ld29yay4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUga2V5IHRyaWdnZXJzIGFuZCBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGRldGVybWluZSB3aGVuIHRoZSBxdW90YSBuZWVkcyBtb2RpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzcwOlx0XHR0cmFjZV9jYWxsX19kYW1vc19zdGF0X2FmdGVyX2FwcGx5X2ludGVydmFsKGNpZHgsIHNpZHgsIFx1MDAyNnMtXHUwMDNlc3RhdCk7XG4zMzcxOlx0fVxuMzM3MjpcdFxuMzM3MzpcdHN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuMzM3NDpcdHtcbjMzNzU6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4zMzc2Olx0XHRzdHJ1Y3QgZGFtb3MgKnM7XG4zMzc3Olx0XHRib29sIGhhc19zY2hlbWVzX3RvX2FwcGx5ID0gZmFsc2U7XG4zMzc4Olx0XHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3o7XG4zMzc5Olx0XG4zMzgwOlx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xuMzM4MTpcdFx0XHRpZiAodGltZV9iZWZvcmUoYy1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cdTAwM2VuZXh0X2FwcGx5X3NpcykpXG4zMzgyOlx0XHRcdFx0Y29udGludWU7XG4zMzgzOlx0XG4zMzg0Olx0XHRcdGlmICghcy1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuMzM4NTpcdFx0XHRcdGNvbnRpbnVlO1xuMzM4NjpcdFxuMzM4NzpcdFx0XHRoYXNfc2NoZW1lc190b19hcHBseSA9IHRydWU7XG4zMzg4Olx0XG4zMzg5Olx0XHRcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcbjMzOTA6XHRcdH1cbjMzOTE6XHRcbjMzOTI6XHRcdGlmICghaGFzX3NjaGVtZXNfdG9fYXBwbHkpXG4zMzkzOlx0XHRcdHJldHVybjtcbjMzOTQ6XHRcbjMzOTU6XHRcdG1heF9yZWdpb25fc3ogPSBkYW1vbl9yZWdpb25fc3pfbGltaXQoYyk7XG4zMzk2Olx0XHRtdXRleF9sb2NrKFx1MDAyNmMtXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xuMzM5NzpcdFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbjMzOTg6XHRcdFx0aWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcdTAwMjZcdTAwMjYgYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7XG4zMzk5Olx0XHRcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbjM0MDA6XHRcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KVxuMzQwMTpcdFx0XHRcdFx0XHRjb250aW51ZTtcbjM0MDI6XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbjM0MDM6XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4zNDA0Olx0XHRcdFx0fVxuMzQwNTpcdFx0XHRcdGNvbnRpbnVlO1xuMzQwNjpcdFx0XHR9XG4zNDA3Olx0XHRcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcbjM0MDg6XHRcdH1cbjM0MDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzODIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqVHJhY2luZyB0aGUgQ2FsbGVycyBvZiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gVGhlIGltbWVkaWF0ZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBjYWxscyB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgd2l0aCBhIHN0cmFpZ2h0Zm9yd2FyZCBzZWFyY2ggZm9yIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZW50cnkgcG9pbnRzIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIGl0cyBpbXBhY3QuIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gZGVidWdnaW5nIG9yIG1vZGlmaWNhdGlvbjsgd2l0aG91dCBrbm93aW5nIHdobyYjMzk7cyB1c2luZyBpdCwgSSBjYW4mIzM5O3QgYmUgc3VyZSBvZiB3aGF0IHdpbGwgaGFwcGVuIGlmIEkgY2hhbmdlIGl0LiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgbm90IG9ubHkgd2hlcmUgaXQgaXMgY2FsbGVkLCBidXQgaG93IGl0IGlzIGJlaW5nIHVzZWQgaW4gZWFjaCBvZiB0aG9zZSBjb250ZXh0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMzNTc9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2Vfc3RhdChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMzNzItXG5tbS9kYW1vbi9jb3JlLmM6MzM3MzpzdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcbm1tL2RhbW9uL2NvcmUuYy0zMzc0LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzkwNj1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzk4Mi1cdFx0Lypcbm1tL2RhbW9uL2NvcmUuYzozOTgzOlx0XHQgKiBkbyBrZGFtb25kX2NhbGwoKSBhbmQga2RhbW9uZF9hcHBseV9zY2hlbWVzKCkgYWZ0ZXJcbm1tL2RhbW9uL2NvcmUuYy0zOTg0LVx0XHQgKiBrZGFtb25kX21lcmdlX3JlZ2lvbnMoKSBpZiBwb3NzaWJsZSwgdG8gcmVkdWNlIG92ZXJoZWFkXG4tLVxubW0vZGFtb24vY29yZS5jLTM5OTctXHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZjdHgtXHUwMDNlc2NoZW1lcykpXG5tbS9kYW1vbi9jb3JlLmM6Mzk5ODpcdFx0XHRrZGFtb25kX2FwcGx5X3NjaGVtZXMoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0zOTk5LVx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTE5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IERBTU9OIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBrZGFtb25kX2ZuYCwgdGhhdCYjMzk7cyB0aGUga3RocmVhZCBhdCB0aGUgaGVhcnQgb2YgdGhlIERBTU9OIGRhZW1vbiwgcmlnaHQ/IE5vdywgaG93IGV4YWN0bHkgZG9lcyB1c2VyIHNwYWNlIGdldCB0byBjb250cm9sIHRoaXMgYmVhc3Q/IE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgc3lzZnMgaW50ZXJmYWNlLCBzcGVjaWZpY2FsbHkgdGhhdCBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4vLi4uYCBkaXJlY3RvcnkgZXhwb3NlZCBieSBgQ09ORklHX0RBTU9OX1NZU0ZTYC4KCkNvdWxkIHN5emthbGxlciBpbnRlcmFjdCB3aXRoIHRoZXNlIHN5c2ZzIGZpbGVzPyBPZiBjb3Vyc2UhIFN5emthbGxlciBoYXMgdGhvc2UgcHNldWRvLXN5c2NhbGxzIGFuZCBzeXNmcyBkZXNjcmlwdGlvbnMsIG9yIGl0IGNhbiBiZSBtYWRlIHRvIHdyaXRlIGRpcmVjdGx5IHRvIHRoZXNlIGZpbGVzLiBIbW1tLCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIHdlJiMzOTt2ZSBhbHJlYWR5IGdvdCBEQU1PTiBkZXNjcmlwdGlvbnMgaW4gdGhlIHN5emthbGxlciByZXBvLiAoQWN0dWFsbHksIEkgY2FuJiMzOTt0IGdyZXAgdGhlIHN5emthbGxlciByZXBvIGZyb20gaGVyZSwgYmVjYXVzZSB0aGUgdG9vbCBJJiMzOTttIHVzaW5nIGlzIGtlcm5lbCBncmVwLCBidXQgSSYjMzk7bSBwcmV0dHkgc3VyZSBzeXprYWxsZXIgZG9lcyBoYXZlIC9zeXMva2VybmVsL21tL2RhbW9uIHN1cHBvcnQgYW55d2F5LikKCldhaXQgYSBzZWNvbmQsIGJlZm9yZSBJIGdldCB0b28gZmFyIGFoZWFkLCBsZXQgbWUgbWFrZSBzdXJlIHRoZSBzeXNmcyBpbnRlcmZhY2UgaXMgYWN0dWFsbHkgY2FwYWJsZSBvZiBjb25maWd1cmluZyBEQU1PTiwgc2V0dGluZyB1cCBzY2hlbWVzIGFuZCBxdW90YXMsIGFuZCBzdGFydGluZyBga2RhbW9uZGAuCgpPa2F5LCB0aW1lIHRvIGNyYWNrIG9wZW4gYG1tL2RhbW9uL3N5c2ZzLmNgIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tkYW1vbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDI3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIERhbW9uIFN1YnN5c3RlbSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZ2V0IGEgbGF5IG9mIHRoZSBsYW5kIHdpdGhpbiB0aGUgYG1tL2RhbW9uL2AgZGlyZWN0b3J5LiBJIHdhbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgd2hhdCBmaWxlcyBhbmQsIHRoZXJlZm9yZSwgd2hpY2ggY29tcG9uZW50cyBhbmQgZnVuY3Rpb25hbGl0aWVzLCBhcmUgcHJlc2VudC4gVGhpcyB3aWxsIHByb3ZpZGUgYSBjcnVjaWFsIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgZGVlcGVyIGFuYWx5c2lzIG9yIHBvdGVudGlhbCB3b3JrIEkgaGF2ZSB0byBkby4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1hcCBvZiB0aGUgc3lzdGVtIGFuZCBzZWUgaWYgYW55IHJlY2VudCBjaGFuZ2VzIGFyZSBpbW1lZGlhdGVseSBhcHBhcmVudC4gSXQmIzM5O3MgYSBxdWljayBhbmQgZGlydHkgd2F5IHRvIGFzc2VzcyB0aGUgbGFuZHNjYXBlIGJlZm9yZSBJIHN0YXJ0IGRpZ2dpbmcgaW50byBhbnkgc3BlY2lmaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2NvcmUuYyYjMzQ7LAogICAgJiMzNDtscnVfc29ydC5jJiMzNDssCiAgICAmIzM0O21vZHVsZXMtY29tbW9uLmMmIzM0OywKICAgICYjMzQ7bW9kdWxlcy1jb21tb24uaCYjMzQ7LAogICAgJiMzNDtvcHMtY29tbW9uLmMmIzM0OywKICAgICYjMzQ7b3BzLWNvbW1vbi5oJiMzNDssCiAgICAmIzM0O3BhZGRyLmMmIzM0OywKICAgICYjMzQ7cmVjbGFpbS5jJiMzNDssCiAgICAmIzM0O3N0YXQuYyYjMzQ7LAogICAgJiMzNDtzeXNmcy1jb21tb24uYyYjMzQ7LAogICAgJiMzNDtzeXNmcy1jb21tb24uaCYjMzQ7LAogICAgJiMzNDtzeXNmcy1zY2hlbWVzLmMmIzM0OywKICAgICYjMzQ7c3lzZnMuYyYjMzQ7LAogICAgJiMzNDt2YWRkci5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBbCiAgICAmIzM0O3Rlc3RzJiMzNDsKICBdCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NDQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZpbGVzLi4uCgoqKkRpZ2dpbmcgaW50byB0aGUgc3lzZnMgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgc3lzZnMgaW1wbGVtZW50YXRpb24sIGFuZCB0aGUgY29yZSBmaWxlcyBhcmUganVtcGluZyBvdXQgYXQgbWUuIEkgc2VlIGBzeXNmcy5jYCwgd2hpY2ggaXMgcHJvYmFibHkgdGhlIGhlYXJ0IG9mIHRoZSBiZWFzdCwgaGFuZGxpbmcgdGhlIGZ1bmRhbWVudGFsIGludGVyYWN0aW9ucy4gVGhlbiB0aGVyZSYjMzk7cyBgc3lzZnMtc2NoZW1lcy5jYCAtIHRoYXQgb25lJiMzOTtzIGludGVyZXN0aW5nLCBwcm9iYWJseSBkZWZpbmluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBtZXRob2RzIHRoYXQgYXJlIGV4cG9zZWQgdGhyb3VnaCBzeXNmcy4gYHN5c2ZzLWNvbW1vbi5jYCBpcyBsaWtlbHkgY29udGFpbmluZyB1dGlsaXR5IGZ1bmN0aW9ucyBhbmQgc2hhcmVkIGNvZGUgdXNlZCBhY3Jvc3MgdGhlIHN5c3RlbS4gQW5kIG9mIGNvdXJzZSwgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHBpZWNlcywgYHJlY2xhaW0uY2AgYW5kIGBscnVfc29ydC5jYCBhcmUgcHJlc2VudCB0b28uCgpJJiMzOTttIGxlYW5pbmcgdG93YXJkcyBmb2N1c2luZyBvbiB0aGUgJiMzNDtzY2hlbWVzJiMzNDsgZmlsZSBmaXJzdCAtIGBzeXNmcy1zY2hlbWVzLmNgLiBHaXZlbiB0aGUgbmFtaW5nLCB0aGF0JiMzOTtzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlICYjMzQ7Y29udHJhY3QmIzM0OyBvZiB3aGF0IGNhbiBiZSBhY2Nlc3NlZCB2aWEgc3lzZnMsIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBhdHRyaWJ1dGVzLCBvciBtYXliZSB0aGUgbGF5b3V0IG9mIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB0aGVyZSB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSB3aG9sZSB0aGluZy4gTGV0IG1lIHN0YXJ0IHRoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3F1b3RhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1OTggbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjA1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3dhdGVybWFya3Nfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTEtLypcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjEyOiAqIHF1b3RhIGdvYWwgZGlyZWN0b3J5XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIxMy0gKi9cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjE0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMTU6c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTYtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMTc6XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYztcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjE4LVx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWU7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMjMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIyNDpzdGF0aWMgc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjI1LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjI2Olx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjI3LX1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIyOT1zdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMzA6XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYztcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjMxLVx0Y2hhciAqbmFtZTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTI3OD1zdGF0aWMgc3NpemVfdCB0YXJnZXRfbWV0cmljX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyODAte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyODE6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyODI6XHRcdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyODMtXHRpbnQgaTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTI5NT1zdGF0aWMgc3NpemVfdCB0YXJnZXRfbWV0cmljX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjk3LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjk4Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjk5Olx0XHRcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzAwLVx0aW50IGk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEzMTQ9c3RhdGljIHNzaXplX3QgdGFyZ2V0X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMTYte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMTc6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3Rcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzE4Olx0XHRcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMTktXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEzMjM9c3RhdGljIHNzaXplX3QgdGFyZ2V0X3ZhbHVlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzI1LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzI2Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMyNzpcdFx0XHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzI4LVx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2Z29hbC1cdTAwM2V0YXJnZXRfdmFsdWUpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzMzPXN0YXRpYyBzc2l6ZV90IGN1cnJlbnRfdmFsdWVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzNS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzNjpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMzc6XHRcdFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzOC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTM0Mj1zdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzQ0LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzQ1Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM0NjpcdFx0XHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzQ3LVx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTM1Mz1zdGF0aWMgc3NpemVfdCBuaWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM1NS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM1NjpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNTc6XHRcdFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM1OC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTM2Mz1zdGF0aWMgc3NpemVfdCBuaWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNjUte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNjY6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3Rcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzY3Olx0XHRcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNjgtXHRpbnQgZXJyID0ga3N0cnRvaW50KGJ1ZiwgMCwgXHUwMDI2Z29hbC1cdTAwM2VuaWQpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzc0PXN0YXRpYyBzc2l6ZV90IHBhdGhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM3Ni17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM3NzpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM3ODpcdFx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM3OS1cdGludCBsZW47XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEzODg9c3RhdGljIHNzaXplX3QgcGF0aF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM5MC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM5MTpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM5MjpcdFx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM5My1cdGNoYXIgKnBhdGggPSBrbWFsbG9jX2FycmF5KHNpemVfYWRkKGNvdW50LCAxKSwgc2l6ZW9mKCpwYXRoKSxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQwOS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDEwOnN0YXRpYyB2b2lkIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDExLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDEyOlx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDEzOlx0XHRcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDE0LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDE4LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MTk6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX3RhcmdldF9tZXRyaWNfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyMC1cdFx0X19BVFRSX1JXX01PREUodGFyZ2V0X21ldHJpYywgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyMS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDIyOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF90YXJnZXRfdmFsdWVfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyMy1cdFx0X19BVFRSX1JXX01PREUodGFyZ2V0X3ZhbHVlLCAwNjAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDI0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyNi1cdFx0X19BVFRSX1JXX01PREUoY3VycmVudF92YWx1ZSwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyNy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDI4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9uaWRfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyOS1cdFx0X19BVFRSX1JXX01PREUobmlkLCAwNjAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDMwLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MzE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX3BhdGhfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQzMi1cdFx0X19BVFRSX1JXX01PREUocGF0aCwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQzMy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDM0OnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vc19zeXNmc19xdW90YV9nb2FsX2F0dHJzW10gPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzNTpcdFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X21ldHJpY19hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzNjpcdFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDM3Olx0XHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDM4Olx0XHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9uaWRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0Mzk6XHRcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX3BhdGhfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NDAtXHROVUxMLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NDEtfTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDQyOkFUVFJJQlVURV9HUk9VUFMoZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ0My1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDQ0OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ0NTpcdC5yZWxlYXNlID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NDYtXHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ0NzpcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfZ3JvdXBzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NDgtfTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ1MC0vKlxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NTE6ICogcXVvdGEgZ29hbHMgZGlyZWN0b3J5XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ1Mi0gKi9cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDUzLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NTQ6c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDU1LVx0c3RydWN0IGtvYmplY3Qga29iajtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDU2Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKipnb2Fsc19hcnI7XHQvKiBjb3VudGVkIGJ5IG5yICovXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ1Ny1cdGludCBucjtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ1OS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDYwOnN0YXRpYyBzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ2MS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2MjpcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NjMtfVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NjQtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2NTpzdGF0aWMgdm9pZCBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19ybV9kaXJzKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NjY6XHRcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FscyAqZ29hbHMpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ2Ny17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2ODpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICoqZ29hbHNfYXJyID0gZ29hbHMtXHUwMDNlZ29hbHNfYXJyO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NjktXHRpbnQgaTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ3OS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDgwOnN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfYWRkX2RpcnMoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ4MTpcdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpnb2FscywgaW50IG5yX2dvYWxzKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0ODIte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0ODM6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqKmdvYWxzX2FyciwgKmdvYWw7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ4NC1cdGludCBlcnIsIGk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ4NS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDg2Olx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcm1fZGlycyhnb2Fscyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ4Ny1cdGlmICghbnJfZ29hbHMpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0OTYtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9nb2FsczsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDk3Olx0XHRnb2FsID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9hbGxvYygpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0OTgtXHRcdGlmICghZ29hbCkge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0OTk6XHRcdFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcm1fZGlycyhnb2Fscyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUwMC1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUwMy1cdFx0ZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoXHUwMDI2Z29hbC1cdTAwM2Vrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MDQ6XHRcdFx0XHRcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX2t0eXBlLCBcdTAwMjZnb2Fscy1cdTAwM2Vrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MDUtXHRcdFx0XHRcJiMzNDslZFwmIzM0OywgaSk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MDctXHRcdFx0a29iamVjdF9wdXQoXHUwMDI2Z29hbC1cdTAwM2Vrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTA4Olx0XHRcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX3JtX2RpcnMoZ29hbHMpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MDktXHRcdFx0cmV0dXJuIGVycjtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTUxOD1zdGF0aWMgc3NpemVfdCBucl9nb2Fsc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTIwLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTIxOlx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpnb2FscyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MjI6XHRcdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTIzLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNTI3PXN0YXRpYyBzc2l6ZV90IG5yX2dvYWxzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTI5LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTMwOlx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpnb2Fscztcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTMxLVx0aW50IG5yLCBlcnIgPSBrc3RydG9pbnQoYnVmLCAwLCBcdTAwMjZucik7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MzctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTUzODpcdGdvYWxzID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2Fscywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUzOS1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU0MS1cdFx0cmV0dXJuIC1FQlVTWTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTQyOlx0ZXJyID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfYWRkX2RpcnMoZ29hbHMsIG5yKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTQzLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTQ5LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NTA6c3RhdGljIHZvaWQgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTUxLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTUyOlx0a2ZyZWUoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2Fscywga29iaikpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NTMtfVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NTQtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTU1NTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX25yX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NTYtXHRcdF9fQVRUUl9SV19NT0RFKG5yX2dvYWxzLCAwNjAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTU3LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NTg6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2F0dHJzW10gPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTU1OTpcdFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX25yX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTYwLVx0TlVMTCxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTYxLX07XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTU2MjpBVFRSSUJVVEVfR1JPVVBTKGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTYzLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTU2NTpcdC5yZWxlYXNlID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTY2LVx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1Njc6XHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19ncm91cHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU2OC19O1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNjc0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3dlaWdodHNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2ODAtLypcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNjgxOiAqIHF1b3RhcyBkaXJlY3Rvcnlcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjgyLSAqL1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2ODMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTY4NDpzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjg1LVx0c3RydWN0IGtvYmplY3Qga29iajtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjg2LVx0c3RydWN0IGRhbW9uX3N5c2ZzX3dlaWdodHMgKndlaWdodHM7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTY4NzpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FscyAqZ29hbHM7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTY4OC1cdHVuc2lnbmVkIGxvbmcgbXM7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2OTAtXHR1bnNpZ25lZCBsb25nIHJlc2V0X2ludGVydmFsX21zO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2OTE6XHR1bnNpZ25lZCBsb25nIGVmZmVjdGl2ZV9zejtcdC8qIEVmZmVjdGl2ZSBzaXplIHF1b3RhIGluIGJ5dGVzICovXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTY5MjpcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciBnb2FsX3R1bmVyO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2OTMtXHR1bnNpZ25lZCBpbnQgZmFpbF9jaGFyZ2VfbnVtO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjk2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2OTc6c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKmRhbW9uX3N5c2ZzX3F1b3Rhc19hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2OTgte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2OTk6XHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTcwMC19XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTcwMS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzAyOnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcXVvdGFzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKnF1b3Rhcylcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzAzLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzA0LVx0c3RydWN0IGRhbW9uX3N5c2ZzX3dlaWdodHMgKndlaWdodHM7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTcwNTpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FscyAqZ29hbHM7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTcwNi1cdGludCBlcnI7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MTItXHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcdTAwMjZ3ZWlnaHRzLVx1MDAzZWtvYmosIFx1MDAyNmRhbW9uX3N5c2ZzX3dlaWdodHNfa3R5cGUsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTcxMzpcdFx0XHRcdTAwMjZxdW90YXMtXHUwMDNla29iaiwgXCYjMzQ7d2VpZ2h0c1wmIzM0Oyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTcxNC1cdGlmIChlcnIpIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTcxNy1cdH1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzE4Olx0cXVvdGFzLVx1MDAzZXdlaWdodHMgPSB3ZWlnaHRzO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MTktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTcyMDpcdGdvYWxzID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfYWxsb2MoKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzIxLVx0aWYgKCFnb2Fscykge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzI1LVx0ZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoXHUwMDI2Z29hbHMtXHUwMDNla29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzI2Olx0XHRcdFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2t0eXBlLCBcdTAwMjZxdW90YXMtXHUwMDNla29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzI3LVx0XHRcdFwmIzM0O2dvYWxzXCYjMzQ7KTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTczMS1cdH0gZWxzZSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTczMjpcdFx0cXVvdGFzLVx1MDAzZWdvYWxzID0gZ29hbHM7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTczMy1cdH1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTczNy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzM4OnN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3F1b3Rhc19ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKnF1b3Rhcylcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzM5LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzQwOlx0a29iamVjdF9wdXQoXHUwMDI2cXVvdGFzLVx1MDAzZXdlaWdodHMtXHUwMDNla29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc0MTpcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX3JtX2RpcnMocXVvdGFzLVx1MDAzZWdvYWxzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzQyOlx0a29iamVjdF9wdXQoXHUwMDI2cXVvdGFzLVx1MDAzZWdvYWxzLVx1MDAzZWtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3NDMtfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNzQ1PXN0YXRpYyBzc2l6ZV90IG1zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc0Ny17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc0ODpcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKnF1b3RhcyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3NDk6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc1MC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzUxOlx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslbHVcXG5cJiMzNDssIHF1b3Rhcy1cdTAwM2Vtcyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc1Mi19XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE3NTQ9c3RhdGljIHNzaXplX3QgbXNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc1Ni17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc1NzpcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKnF1b3RhcyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3NTg6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc1OTpcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNnF1b3Rhcy1cdTAwM2Vtcyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc2MC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTc2Nj1zdGF0aWMgc3NpemVfdCBieXRlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3Njgte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3Njk6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzcwOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3NzEtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc3MjpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWx1XFxuXCYjMzQ7LCBxdW90YXMtXHUwMDNlc3opO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3NzMtfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNzc1PXN0YXRpYyBzc2l6ZV90IGJ5dGVzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzc3LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzc4Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc3OTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzgwOlx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2cXVvdGFzLVx1MDAzZXN6KTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzgxLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNzg3PXN0YXRpYyBzc2l6ZV90IHJlc2V0X2ludGVydmFsX21zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3ODkte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3OTA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzkxOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3OTItXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc5MzpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWx1XFxuXCYjMzQ7LCBxdW90YXMtXHUwMDNlcmVzZXRfaW50ZXJ2YWxfbXMpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3OTQtfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNzk2PXN0YXRpYyBzc2l6ZV90IHJlc2V0X2ludGVydmFsX21zX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzk4LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzk5Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTgwMDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxODAxOlx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2cXVvdGFzLVx1MDAzZXJlc2V0X2ludGVydmFsX21zKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODAyLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xODA4PXN0YXRpYyBzc2l6ZV90IGVmZmVjdGl2ZV9ieXRlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODEwLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxODExOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTgxMjpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODEzLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4MTQ6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVsdVxcblwmIzM0OywgcXVvdGFzLVx1MDAzZWVmZmVjdGl2ZV9zeik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTgxNS19XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE4MTc9c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX3R1bmVyX25hbWUge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4MTg6XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIgdHVuZXI7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTgxOS1cdGNoYXIgKm5hbWU7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE4MzM9c3RhdGljIHNzaXplX3QgZ29hbF90dW5lcl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODM1LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxODM2Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTgzNzpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODM4LVx0aW50IGk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4NDMtXHRcdHR1bmVyX25hbWUgPSBcdTAwMjZkYW1vc19zeXNmc19xZ29hbF90dW5lcl9uYW1lc1tpXTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxODQ0Olx0XHRpZiAodHVuZXJfbmFtZS1cdTAwM2V0dW5lciA9PSBxdW90YXMtXHUwMDNlZ29hbF90dW5lcilcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODQ1LVx0XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXNcXG5cJiMzNDssIHR1bmVyX25hbWUtXHUwMDNlbmFtZSk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE4NTA9c3RhdGljIHNzaXplX3QgZ29hbF90dW5lcl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTg1Mi17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTg1MzpcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKnF1b3RhcyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4NTQ6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTg1NS1cdGludCBpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODYxLVx0XHRpZiAoc3lzZnNfc3RyZXEoYnVmLCB0dW5lcl9uYW1lLVx1MDAzZW5hbWUpKSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTg2MjpcdFx0XHRxdW90YXMtXHUwMDNlZ29hbF90dW5lciA9IHR1bmVyX25hbWUtXHUwMDNldHVuZXI7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTg2My1cdFx0XHRyZXR1cm4gY291bnQ7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE4Njk9c3RhdGljIHNzaXplX3QgZmFpbF9jaGFyZ2VfbnVtX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4NzEte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4NzI6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxODczOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4NzQtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTg3NTpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXVcXG5cJiMzNDssIHF1b3Rhcy1cdTAwM2VmYWlsX2NoYXJnZV9udW0pO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4NzYtfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xODc4PXN0YXRpYyBzc2l6ZV90IGZhaWxfY2hhcmdlX251bV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTg4MC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTg4MTpcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKnF1b3RhcyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4ODI6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTg4MzpcdGludCBlcnIgPSBrc3RydG91aW50KGJ1ZiwgMCwgXHUwMDI2cXVvdGFzLVx1MDAzZWZhaWxfY2hhcmdlX251bSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTg4NC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTg5MD1zdGF0aWMgc3NpemVfdCBmYWlsX2NoYXJnZV9kZW5vbV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODkyLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxODkzOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTg5NDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODk1LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4OTY6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyV1XFxuXCYjMzQ7LCBxdW90YXMtXHUwMDNlZmFpbF9jaGFyZ2VfZGVub20pO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4OTctfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xODk5PXN0YXRpYyBzc2l6ZV90IGZhaWxfY2hhcmdlX2Rlbm9tX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTAxLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTAyOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTkwMzpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTA0Olx0aW50IGVyciA9IGtzdHJ0b3VpbnQoYnVmLCAwLCBcdTAwMjZxdW90YXMtXHUwMDNlZmFpbF9jaGFyZ2VfZGVub20pO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MDUtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MTAtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTkxMTpzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19xdW90YXNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTEyLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTEzOlx0a2ZyZWUoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMsIGtvYmopKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTE0LX1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTE1LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5MTY6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19xdW90YXNfbXNfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkxNy1cdFx0X19BVFRSX1JXX01PREUobXMsIDA2MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MTgtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTkxOTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3F1b3Rhc19zel9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTIwLVx0XHRfX0FUVFJfUldfTU9ERShieXRlcywgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkyMS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTIyOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfcXVvdGFzX3Jlc2V0X2ludGVydmFsX21zX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MjMtXHRcdF9fQVRUUl9SV19NT0RFKHJlc2V0X2ludGVydmFsX21zLCAwNjAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTI0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5MjU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19xdW90YXNfZWZmZWN0aXZlX2J5dGVzX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MjYtXHRcdF9fQVRUUl9ST19NT0RFKGVmZmVjdGl2ZV9ieXRlcywgMDQwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkyNy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTI4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfcXVvdGFzX2dvYWxfdHVuZXJfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkyOS1cdFx0X19BVFRSX1JXX01PREUoZ29hbF90dW5lciwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkzMC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTMxOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfcXVvdGFzX2ZhaWxfY2hhcmdlX251bV9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTMyLVx0XHRfX0FUVFJfUldfTU9ERShmYWlsX2NoYXJnZV9udW0sIDA2MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MzMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTkzNDpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3F1b3Rhc19mYWlsX2NoYXJnZV9kZW5vbV9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTM1LVx0XHRfX0FUVFJfUldfTU9ERShmYWlsX2NoYXJnZV9kZW5vbSwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkzNi1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTM3OnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19xdW90YXNfYXR0cnNbXSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTM4Olx0XHUwMDI2ZGFtb25fc3lzZnNfcXVvdGFzX21zX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTM5Olx0XHUwMDI2ZGFtb25fc3lzZnNfcXVvdGFzX3N6X2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTQwOlx0XHUwMDI2ZGFtb25fc3lzZnNfcXVvdGFzX3Jlc2V0X2ludGVydmFsX21zX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTQxOlx0XHUwMDI2ZGFtb25fc3lzZnNfcXVvdGFzX2VmZmVjdGl2ZV9ieXRlc19hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTk0MjpcdFx1MDAyNmRhbW9uX3N5c2ZzX3F1b3Rhc19nb2FsX3R1bmVyX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTQzOlx0XHUwMDI2ZGFtb25fc3lzZnNfcXVvdGFzX2ZhaWxfY2hhcmdlX251bV9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTk0NDpcdFx1MDAyNmRhbW9uX3N5c2ZzX3F1b3Rhc19mYWlsX2NoYXJnZV9kZW5vbV9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk0NS1cdE5VTEwsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk0Ni19O1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5NDc6QVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19xdW90YXMpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5NDgtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTk0OTpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19xdW90YXNfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTk1MDpcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfcXVvdGFzX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk1MS1cdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTUyOlx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfcXVvdGFzX2dyb3Vwcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTUzLX07XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIyNTQ9c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyNTgtXHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIyNTk6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXM7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjI2MC1cdHN0cnVjdCBkYW1vbl9zeXNmc193YXRlcm1hcmtzICp3YXRlcm1hcmtzO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMzYxPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfc2V0X2Rlc3RzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnNjaGVtZSlcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjM3Ni1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzc3OnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2NoZW1lX3NldF9xdW90YXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc2NoZW1lKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzNzgte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzNzk6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMgPSBkYW1vbl9zeXNmc19xdW90YXNfYWxsb2MoKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzgwLVx0aW50IGVycjtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzgxLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzODI6XHRpZiAoIXF1b3Rhcylcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzgzLVx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzg0Olx0ZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoXHUwMDI2cXVvdGFzLVx1MDAzZWtvYmosIFx1MDAyNmRhbW9uX3N5c2ZzX3F1b3Rhc19rdHlwZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzg1Olx0XHRcdFx1MDAyNnNjaGVtZS1cdTAwM2Vrb2JqLCBcJiMzNDtxdW90YXNcJiMzNDspO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzODYtXHRpZiAoZXJyKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzODctXHRcdGdvdG8gb3V0O1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzODg6XHRlcnIgPSBkYW1vbl9zeXNmc19xdW90YXNfYWRkX2RpcnMocXVvdGFzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzg5LVx0aWYgKGVycilcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzkwLVx0XHRnb3RvIG91dDtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzkxOlx0c2NoZW1lLVx1MDAzZXF1b3RhcyA9IHF1b3Rhcztcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzkyLVx0cmV0dXJuIDA7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzOTQtb3V0OlxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzOTU6XHRrb2JqZWN0X3B1dChcdTAwMjZxdW90YXMtXHUwMDNla29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjM5Ni1cdHJldHVybiBlcnI7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI1MDI9c3RhdGljIGludCBkYW1vbl9zeXNmc19zY2hlbWVfYWRkX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc2NoZW1lKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTExLVx0XHRnb3RvIHJtZGlyX3B1dF9hY2Nlc3NfcGF0dGVybl9vdXQ7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjUxMjpcdGVyciA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9zZXRfcXVvdGFzKHNjaGVtZSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUxMy1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1MTYtXHRpZiAoZXJyKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1MTc6XHRcdGdvdG8gcm1kaXJfcHV0X3F1b3Rhc19hY2Nlc3NfcGF0dGVybl9vdXQ7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUxOC1cdGVyciA9IGRhbW9zX3N5c2ZzX3NldF9maWx0ZXJfZGlycyhzY2hlbWUpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1MTktXHRpZiAoZXJyKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1MjA6XHRcdGdvdG8gcHV0X3dhdGVybWFya3NfcXVvdGFzX2FjY2Vzc19wYXR0ZXJuX291dDtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTIxLVx0ZXJyID0gZGFtb25fc3lzZnNfc2NoZW1lX3NldF9zdGF0cyhzY2hlbWUpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1MjItXHRpZiAoZXJyKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1MjM6XHRcdGdvdG8gcHV0X2ZpbHRlcnNfd2F0ZXJtYXJrc19xdW90YXNfYWNjZXNzX3BhdHRlcm5fb3V0O1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1MjQtXHRlcnIgPSBkYW1vbl9zeXNmc19zY2hlbWVfc2V0X3RyaWVkX3JlZ2lvbnMoc2NoZW1lKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUzMS1cdHNjaGVtZS1cdTAwM2VzdGF0cyA9IE5VTEw7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjUzMjpwdXRfZmlsdGVyc193YXRlcm1hcmtzX3F1b3Rhc19hY2Nlc3NfcGF0dGVybl9vdXQ6XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUzMy1cdGtvYmplY3RfcHV0KFx1MDAyNnNjaGVtZS1cdTAwM2VvcHNfZmlsdGVycy1cdTAwM2Vrb2JqKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUzOC1cdHNjaGVtZS1cdTAwM2VmaWx0ZXJzID0gTlVMTDtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTM5OnB1dF93YXRlcm1hcmtzX3F1b3Rhc19hY2Nlc3NfcGF0dGVybl9vdXQ6XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjU0MC1cdGtvYmplY3RfcHV0KFx1MDAyNnNjaGVtZS1cdTAwM2V3YXRlcm1hcmtzLVx1MDAzZWtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1NDEtXHRzY2hlbWUtXHUwMDNld2F0ZXJtYXJrcyA9IE5VTEw7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU0MjpybWRpcl9wdXRfcXVvdGFzX2FjY2Vzc19wYXR0ZXJuX291dDpcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTQzOlx0ZGFtb25fc3lzZnNfcXVvdGFzX3JtX2RpcnMoc2NoZW1lLVx1MDAzZXF1b3Rhcyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU0NDpcdGtvYmplY3RfcHV0KFx1MDAyNnNjaGVtZS1cdTAwM2VxdW90YXMtXHUwMDNla29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU0NTpcdHNjaGVtZS1cdTAwM2VxdW90YXMgPSBOVUxMO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1NDYtcHV0X2Rlc3RzX291dDpcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjU1Nj1zdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19zY2hlbWVfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lICpzY2hlbWUpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1NjEtXHRrb2JqZWN0X3B1dChcdTAwMjZzY2hlbWUtXHUwMDNlZGVzdHMtXHUwMDNla29iaik7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2ODUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMzk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggYW5kIGl0cyBRdW90YSBBZGp1c3RtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIERBTU9OIHBhdGNoLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBEQU1PTiBpcyBhY2Nlc3NlZCB2aWEgc3lzZnMsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGNvbmZpZ3VyZWQgd2l0aCBhIGJ1bmNoIG9mIGRpZmZlcmVudCBvcHRpb25zLiYjMzQ7IEJ1dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgZGFtb3NfYWRqdXN0X3F1b3RhYCBmdW5jdGlvbi4gSSBzZWUgdGhlIHBhdGNoIGFkZHMgYSBjaGVjayBmb3IgYHF1b3RhLSZndDtlc3ogPT0gMGAgYW5kIGJhaWxzIG91dCBlYXJseSwgYnV0IEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqLgoKTGV0JiMzOTtzIHRyYWNlOiBJIHJlbWVtYmVyIHRoYXQgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoKWAgc2V0cyBgcXVvdGEtJmd0O2VzemAuIFNvLCBgcXVvdGEtJmd0O2VzemAgY2FuIGJlIHplcm8gaWYgdGhlIHF1b3RhIHNpemUgaXMgemVybyBvciB0aGUgZ29hbCB0dW5lciBzZXRzIGl0IHRvIHplcm8uCgpIZXJlJiMzOTtzIHRoZSBwcm9ibGVtOiBpZiBgcXVvdGEtJmd0O2VzemAgaXMgemVybywgaW5zaWRlIHRoZSBsb29wIGNhbGN1bGF0aW5nIHRoZSBzY29yZTogYGN1bXVsYXRlZF9zemAgd2lsbCBhbHdheXMgYmUgZ3JlYXRlciBvciBlcXVhbCB0aGFuIHRoZSBgcXVvdGEtJmd0O2VzemAgb24gdGhlIGZpcnN0IGl0ZXJhdGlvbiwgd2hpY2ggc2V0cyBgcXVvdGEtJmd0O21pbl9zY29yZWAgdG8gYG1heF9zY29yZWAuIFdoeSBhcmUgd2UgaXRlcmF0aW5nIG92ZXIgYWxsIHRoZXNlIHJlZ2lvbnMsIGNhbGN1bGF0aW5nIHRoZSBzY29yZXMsIGFuZCBidWlsZGluZyB0aGlzIGhpc3RvZ3JhbSBpZiB0aGUgcXVvdGEgc2l6ZSBpcyB6ZXJvIGluIHRoZSBmaXJzdCBwbGFjZT8gSXQmIzM5O3MgaW5lZmZpY2llbnQuCgpIb2xkIG9uLCBpZiB3ZSByZXR1cm4gZWFybHksIGBxdW90YS0mZ3Q7bWluX3Njb3JlYCBpc24mIzM5O3QgdXBkYXRlZCEgSXQgd2lsbCByZXRhaW4gaXRzIHByZXZpb3VzIHZhbHVlLiBJIG5lZWQgdG8ga25vdyB3aGF0IHVzZXMgdGhpcyBgcXVvdGEtJmd0O21pbl9zY29yZWAgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHNraXBwaW5nIHRoZSB1cGRhdGUuIEkgbmVlZCB0byB0cmFjayBkb3duIGFsbCB0aGUgcGxhY2VzIGluIHRoZSBjb2RlIHdoZXJlIGBxdW90YS0mZ3Q7bWluX3Njb3JlYCBpcyB1c2VkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaW5fc2NvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjQxMz1zdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQyMC1cbm1tL2RhbW9uL2NvcmUuYzoyNDIxOlx0cmV0dXJuIGMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcykgXHUwMDNlPSBzLVx1MDAzZXF1b3RhLm1pbl9zY29yZTtcbm1tL2RhbW9uL2NvcmUuYy0yNDIyLX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI5MD1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzUzLVx0fVxubW0vZGFtb24vY29yZS5jOjMzNTQ6XHRxdW90YS1cdTAwM2VtaW5fc2NvcmUgPSBzY29yZTtcbm1tL2RhbW9uL2NvcmUuYy0zMzU1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NTgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWYWxpZGl0eSBDaGVjayBpbiBEQU1PTioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGRhbW9zX3ZhbGlkX3RhcmdldGAgZnVuY3Rpb24uIEkgc2VlIGl0JiMzOTtzIGRldGVybWluaW5nIGlmIGEgcmVnaW9uIGlzIGEgdmFsaWQgdGFyZ2V0IGZvciBEQU1PTiYjMzk7cyBhY3Rpb25zLiBUaGUgY29yZSBjaGVjayBoaW5nZXMgb24gd2hldGhlciB0aGUgYGdldF9zY2hlbWVfc2NvcmVgIGZ1bmN0aW9uIHJldHVybnMgYSBzY29yZSB0aGF0IG1lZXRzIG9yIGV4Y2VlZHMgYHMtJmd0O3F1b3RhLm1pbl9zY29yZWAuIFN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guCgpCdXQgd2FpdCwgaG9sZCBvbiBhIHNlY29uZC4uLiB3aGF0IGhhcHBlbnMgd2hlbiBgcXVvdGEtJmd0O2VzemAgaXMgemVybz8gSW1tZWRpYXRlbHksIGEgcmVkIGZsYWcgZ29lcyB1cC4gSSByZWNhbGwgdGhhdCBgZGFtb3NfYWRqdXN0X3F1b3RhYCBoYXMgYW4gZWFybHkgcmV0dXJuIHBhdGggd2hlbiBgcXVvdGEtJmd0O2VzemAgaXMgemVyby4gQ3J1Y2lhbGx5LCBpbiB0aGlzIHNjZW5hcmlvLCBgcXVvdGEtJmd0O21pbl9zY29yZWAgaXNuJiMzOTt0IHNldCwgd2hpY2ggbWVhbnMgdGhhdCBjb21wYXJpc29uIGlzIHVucmVsaWFibGUuCgpOb3cgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIHF1b3RhIG1lY2hhbmlzbSBwcmV2ZW50cyBjYWxsaW5nIGBkYW1vc192YWxpZF90YXJnZXRgIHdoZW4gYHF1b3RhLSZndDtlc3ogPT0gMGAsIG9yIGRvZXMgaXQganVzdCBhbGxvdyB0aGUgY29tcGFyaXNvbiB0byBoYXBwZW4gd2l0aCBgbWluX3Njb3JlYCB1bmluaXRpYWxpemVkLiBOZWVkIHRvIGNvbmZpcm0gd2hlcmUgYGRhbW9zX3ZhbGlkX3RhcmdldGAgaXMgaW52b2tlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgYW4gYWN0dWFsIHByb2JsZW0gb3Igbm90LiBMZXQmIzM5O3MgdHJhY2UgYmFjayB0aGUgY2FsbCBjaGFpbiBhbmQgZmluZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3ZhbGlkX3RhcmdldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0yMzY0PXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZCBrZGFtb25kX3R1bmVfaW50ZXJ2YWxzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTIzODUtXG5tbS9kYW1vbi9jb3JlLmM6MjM4NjpzdGF0aWMgYm9vbCBfX2RhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG5tbS9kYW1vbi9jb3JlLmMtMjM4Ny1cdFx0c3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjQwNz1zdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19zZXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQxMi1cbm1tL2RhbW9uL2NvcmUuYzoyNDEzOnN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTI0MTQtXHRcdHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy0yNDE1LXtcbm1tL2RhbW9uL2NvcmUuYzoyNDE2Olx0Ym9vbCByZXQgPSBfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKTtcbm1tL2RhbW9uL2NvcmUuYy0yNDE3LVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNzU2PXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjc4MS1cbm1tL2RhbW9uL2NvcmUuYzoyNzgyOlx0XHRpZiAoZGFtb3NfdmFsaWRfdGFyZ2V0KGMsIHIsIHMpKVxubW0vZGFtb24vY29yZS5jLTI3ODMtXHRcdFx0ZGFtb3NfYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMDA4PXN0YXRpYyBwaHlzX2FkZHJfdCBkYW1vc19jYWxjX2VsaWdpYmxlX2J5dGVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMwMTktXG5tbS9kYW1vbi9jb3JlLmM6MzAyMDpcdFx0XHRpZiAoIV9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMsIGMpKVxubW0vZGFtb24vY29yZS5jLTMwMjEtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI5MD1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzM1LVx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xubW0vZGFtb24vY29yZS5jOjMzMzY6XHRcdFx0aWYgKCFfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKSlcbm1tL2RhbW9uL2NvcmUuYy0zMzM3LVx0XHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NzYwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGZvY3VzaW5nIG9uIHdoYXQgSSYjMzk7ZCBiZSBsb29raW5nIGF0IGFzIGEgbWVtb3J5IG1hbmFnZW1lbnQgZXhwZXJ0OgoKKipEaXZpbmcgaW50byBgZGFtb3NfdmFsaWRfdGFyZ2V0YCoqCgpPa2F5LCBzbyBJJiMzOTttIGJlaW5nIGRpcmVjdGVkIHRvIGV4YW1pbmUgYGRhbW9zX3ZhbGlkX3RhcmdldGAuIEkgaW1tZWRpYXRlbHkga25vdyB0aGF0ICYjMzQ7ZGFtb3MmIzM0OyBsaWtlbHkgcmVmZXJzIHRvIER5bmFtaWMgQWRhcHRpdmUgTWVtb3J5IE9wdGltaXplciAoREFNT04pLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gYW5kIGNvbnRleHQsIEkgc3VzcGVjdCB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIHRvIERBTU9OJiMzOTtzIGNvcmUgZGVjaXNpb24tbWFraW5nIHByb2Nlc3M6IHNwZWNpZmljYWxseSwgZGV0ZXJtaW5pbmcgaWYgYSBtZW1vcnkgcmVnaW9uIGlzIGEgdmFsaWQgY2FuZGlkYXRlIHRvIGJlIG9wdGltaXplZC4KCkxldCYjMzk7cyBxdWlja2x5IG5hdmlnYXRlIHRvIGBtbS9kYW1vbi9jb3JlLmNgIGFuZCBmb2N1cyBvbiBsaW5lcyAyNDAwLTI0MzAuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzOgoKKiAgICoqV2hhdCBjcml0ZXJpYSBpcyB0aGlzIGZ1bmN0aW9uIHVzaW5nPyoqIEFyZSB3ZSBsb29raW5nIGZvciByZWdpb25zIHRoYXQgYXJlIGZyZXF1ZW50bHkgYWNjZXNzZWQsIGluZnJlcXVlbnRseSBhY2Nlc3NlZCwgb3IgbWVldGluZyBvdGhlciBzcGVjaWZpYyBhY2Nlc3MgcGF0dGVybnM/IElzIGl0IGNvbnNpZGVyaW5nIHRoaW5ncyBsaWtlIE5VTUEgbm9kZSBsb2NhbGl0eSwgcGFnZSBmbGFncyAoZS5nLiwgZGlydHksIGFjY2Vzc2VkKSwgb3IgdGhlIGFnZSBvZiB0aGUgcGFnZXM/CiogICAqKldoYXQgYXJlIHRoZSBpbnB1dHMgYW5kIG91dHB1dHM/KiogV2hhdCBpcyB0aGUgZnVuY3Rpb24gcmVjZWl2aW5nIGFzIGl0cyBhcmd1bWVudHMgKHByb2JhYmx5IGEgYGRhbW9uX3RhcmdldGAgc3RydWN0dXJlLCBwZXJoYXBzIG90aGVyIHJlbGV2YW50IGRhdGEpPyBXaGF0IGRvZXMgdGhlIGZ1bmN0aW9uIHJldHVybiAobGlrZWx5IGEgYm9vbGVhbiBpbmRpY2F0aW5nIHZhbGlkaXR5KT8KKiAgICoqV2hhdCBpcyB0aGUgbG9naWMgZmxvdz8qKiBJJiMzOTtsbCBiZSB3YXRjaGluZyBmb3IgYW55IGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgb3IgbG9vcHMsIGFzIHRoZXNlIHdpbGwgaW5kaWNhdGUgdGhlIHByaW9yaXRpemF0aW9uIGZvciByZWdpb24gc3VpdGFiaWxpdHkuIElmIGl0IG1ha2VzIGl0IHRocm91Z2ggYSBnYXVudGxldCBvZiBkaWZmZXJlbnQgY2hlY2tzLCBJIHdhbnQgdG8gc2VlIGlmIHRoZSByZWdpb24gaXMgZGV0ZXJtaW5lZCBhcyB2YWxpZCwgb3IgaW52YWxpZCwgYXQgdGhlIGVuZCBvZiB0aGUgcHJvY2Vzcy4KCkkmIzM5O2xsIGJlIHJlYWRpbmcgdGhpcyBzZWN0aW9uIHdpdGggYSBjcml0aWNhbCBleWUsIGNvbnNpZGVyaW5nIGhvdyBhbnkgcGFydGljdWxhciBsb2dpYyBjb3VsZCBpbmZsdWVuY2UgREFNT04mIzM5O3MgcGVyZm9ybWFuY2UgYW5kIGltcGFjdCBvbiB0aGUgd29ya2xvYWRzIGl0JiMzOTtzIGRlc2lnbmVkIHRvIG9wdGltaXplLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSB0eXBpY2FsIHRyYWRlLW9mZnMgaW52b2x2ZWQgaW4gbWVtb3J5IG9wdGltaXphdGlvbiDigJMgcmVzcG9uc2l2ZW5lc3MgdmVyc3VzIG1lbW9yeSByZWNsYWltLCBvdmVyaGVhZCwgYW5kIHBvdGVudGlhbCBmb3IgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHdoZXJlIHRob3NlIHRyYWRlLW9mZnMgYXJlIGJlaW5nIGFjdGl2ZWx5IGNvbnNpZGVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDAwOlx0XG4yNDAxOlx0LypcbjI0MDI6XHQgKiBkYW1vc19xdW90YV9pc19zZXQoKSAtIFJldHVybiBpZiB0aGUgZ2l2ZW4gcXVvdGEgaXMgYWN0dWFsbHkgc2V0LlxuMjQwMzpcdCAqIEBxdW90YTpcdFRoZSBxdW90YSB0byBjaGVjay5cbjI0MDQ6XHQgKlxuMjQwNTpcdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVvdGEgaXMgc2V0LCBmYWxzZSBvdGhlcndpc2UuXG4yNDA2Olx0ICovXG4yNDA3Olx0c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfc2V0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG4yNDA4Olx0e1xuMjQwOTpcdFx0cmV0dXJuIHF1b3RhLVx1MDAzZWVzeiB8fCBxdW90YS1cdTAwM2VzeiB8fCBxdW90YS1cdTAwM2VtcyB8fFxuMjQxMDpcdFx0XHQhZGFtb3NfcXVvdGFfZ29hbHNfZW1wdHkocXVvdGEpO1xuMjQxMTpcdH1cbjI0MTI6XHRcbjI0MTM6XHRzdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbjI0MTQ6XHRcdFx0c3RydWN0IGRhbW9zICpzKVxuMjQxNTpcdHtcbjI0MTY6XHRcdGJvb2wgcmV0ID0gX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYyk7XG4yNDE3Olx0XG4yNDE4Olx0XHRpZiAoIXJldCB8fCAhZGFtb3NfcXVvdGFfaXNfc2V0KFx1MDAyNnMtXHUwMDNlcXVvdGEpIHx8ICFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuMjQxOTpcdFx0XHRyZXR1cm4gcmV0O1xuMjQyMDpcdFxuMjQyMTpcdFx0cmV0dXJuIGMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcykgXHUwMDNlPSBzLVx1MDAzZXF1b3RhLm1pbl9zY29yZTtcbjI0MjI6XHR9XG4yNDIzOlx0XG4yNDI0Olx0LypcbjI0MjU6XHQgKiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcmVnaW9uIG9yIHN0YXJ0aW5nIHBhcnQgb2ZcbjI0MjY6XHQgKiBpdCBpcyBhbHJlYWR5IGNoYXJnZWQgZm9yIHRoZSBEQU1PUyBxdW90YS5cbjI0Mjc6XHQgKiBAdDpcdFRoZSB0YXJnZXQgb2YgdGhlIHJlZ2lvbi5cbjI0Mjg6XHQgKiBAcnA6XHRUaGUgcG9pbnRlciB0byB0aGUgcmVnaW9uLlxuMjQyOTpcdCAqIEBzOlx0VGhlIHNjaGVtZSB0byBiZSBhcHBsaWVkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODcyOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExvZ2ljIG9mIGBkYW1vc192YWxpZF90YXJnZXRgIGFuZCBRdW90YSBBZGp1c3RtZW50KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQhIEkgbmVlZCB0byByZWFsbHkgZGlnIGludG8gaG93IGBkYW1vc192YWxpZF90YXJnZXRgIHdvcmtzLCBwYXJ0aWN1bGFybHkgd2l0aCB0aGlzIHF1b3RhIGxvZ2ljLiBTb21ldGhpbmcmIzM5O3MgbmFnZ2luZyBhdCBtZS4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgbG9vayBhdCB0aGlzIGNvbmRpdGlvbjogYHF1b3RhLSZndDtlc3ogPT0gMGAuIEl0IHNlZW1zIGxpa2UgaWYgYGVzemAgaXMgemVybywgd2UgKm1pZ2h0KiBoYXZlIGEgcHJvYmxlbS4gSWYgYHF1b3RhLSZndDtlc3pgIGlzIHplcm8sIGFuZCB3ZSBoYXZlIGBzemAgb3IgYG1zYCBzZXQgd2hpY2ggaW4gdHVybiByYW4gYGRhbW9zX2FkanVzdF9xdW90YWAsIGhlcmUmIzM5O3MgdGhlIGlzc3VlIEkmIzM5O20gc2VlaW5nOgoKUHJldmlvdXNseSwgYGRhbW9zX2FkanVzdF9xdW90YWAgd291bGQgY2FsY3VsYXRlIGBxdW90YS0mZ3Q7bWluX3Njb3JlID0gc2NvcmVgLCB3aGljaCB3YXMgZXNzZW50aWFsbHkgdGhlIGBtYXhfc2NvcmVgLiBCdXQgd2l0aCB0aGUgY2hhbmdlLCBpZiBgcXVvdGEtJmd0O2VzeiA9PSAwYCwgYGRhbW9zX2FkanVzdF9xdW90YWAganVzdCByZXR1cm5zIGVhcmx5IGFuZCBET0VTTiYjMzk7VCB1cGRhdGUgYHF1b3RhLSZndDttaW5fc2NvcmVgIQoKU28sIHRoZSBleGlzdGluZyB2YWx1ZSBvZiBgbWluX3Njb3JlYCBpcyBwcmVzZXJ2ZWQuIEl0JiMzOTtzIGVpdGhlciB0aGUgemVybyBpbml0aWFsaXplZCBmcm9tIGt6YWxsb2MsIG9yIGl0JiMzOTtzIGFuIG9sZCBzY29yZSBmcm9tIGEgcHJldmlvdXMgY3ljbGUgd2hlcmUgYGVzemAgd2FzIGdyZWF0ZXIgdGhhbiB6ZXJvLgoKQWhhISBOb3cgSSBzZWUgdGhlIHBvdGVudGlhbCBwcm9ibGVtLiBJZiBgbWluX3Njb3JlYCBpcyBzdHVjayBhdCB6ZXJvLCB0aGF0IG1lYW5zIGBnZXRfc2NoZW1lX3Njb3JlKC4uLikgJmd0Oz0gMGAgaXMgQUxXQVlTIGdvaW5nIHRvIGJlIHRydWUsIHJlZ2FyZGxlc3MuIFRoaXMgc2VlbXMgd3JvbmcuIFdoeSB3b3VsZCB3ZSBiZSBhbGxvd2luZyBzY2hlbWVzIHRvIHBhc3MgaWYgYGVzeiA9PSAwYD8gUGVyaGFwcyB0aGUgaW50ZW50aW9uIGlzIHRvIG5vdCBhcHBseSBhbnl0aGluZyB3aGVuIHRoZXJlJiMzOTtzIG5vIGVudHJ5IHNpemUuCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gTm93IEkgbmVlZCB0byBzZWUgd2hhdCBoYXBwZW5zIHdoZW4gYHF1b3RhLSZndDtlc3ogPT0gMGAgd2l0aGluIGBkYW1vc19hcHBseV90YXJnZXRgIG9yIGBkYW1vc19hcHBseV9zY2hlbWVgLiBUaGlzIGZlZWxzIGxpa2UgaXQgbWlnaHQgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbmRlZCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfYXBwbHlfc2NoZW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTI2NzE9c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfZnVsbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNjg0LVxubW0vZGFtb24vY29yZS5jOjI2ODU6c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtMjY4Ni1cdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNzU2PXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjc4Mi1cdFx0aWYgKGRhbW9zX3ZhbGlkX3RhcmdldChjLCByLCBzKSlcbm1tL2RhbW9uL2NvcmUuYzoyNzgzOlx0XHRcdGRhbW9zX2FwcGx5X3NjaGVtZShjLCB0LCByLCBzKTtcbm1tL2RhbW9uL2NvcmUuYy0yNzg0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTYzMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBhaW1pbmcgZm9yIGEgZnVsc29tZSByZW5kZXJpbmc6CgoqKkNoZWNraW5nIEtleSBBcHBsaWNhdGlvbiBQcm9jZWR1cmVzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBydW5uaW5nIHNtb290aGx5LCBhbmQgdGhhdCB0aGUgY29yZSBhcHBsaWNhdGlvbiBmdW5jdGlvbnMgYXJlIG9wZXJhdGluZyBhcyBleHBlY3RlZC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHR3byBjcml0aWNhbCBjb21wb25lbnRzOiBgZGFtb3NfYXBwbHlfdGFyZ2V0YCBhbmQgYGRhbW9zX2FwcGx5X3NjaGVtZWAuIFRoZXNlIGFyZSB0aGUgbGluY2hwaW5zLCB0aGUgZW5naW5lcyB0aGF0IGRyaXZlIHRoZSBlbnRpcmUgcHJvY2Vzcy4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlaXIgbG9naWMgaXMgc291bmQsIHRoYXQgdGhleSYjMzk7cmUgY29ycmVjdGx5IHByb2Nlc3NpbmcgdGhlIGlucHV0IGRhdGEsIGFuZCBwcm9kdWNpbmcgdGhlIGFudGljaXBhdGVkIG91dHB1dHMsIGFzIHdlbGwgYXMgY2hlY2tpbmcgdGhlIHZhcmlvdXMgZmFpbHVyZSBtb2RlcyBmb3IgdGhlc2UgYXBwbGljYXRpb25zLiBJcyB0aGUgdGFyZ2V0IGNvcnJlY3RseSBhc3NpZ25lZCBhbmQgYXBwbGllZD8gSXMgdGhlIGNvcnJlY3Qgc2NoZW1lIGluIHBsYWNlLCBvciBpcyB0aGVyZSBhIGNvbmZsaWN0LCBhIG51bGwgdmFsdWUsIG9yIHNvbWV0aGluZyB1bmV4cGVjdGVkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3IgcGVyZm9ybWFuY2UgY29uY2VybnM/IEEgcXVpY2ssIHRhcmdldGVkIHJldmlldyBvZiB0aGVzZSB3aWxsIGdpdmUgbWUgYSBnb29kIHNlbnNlIG9mIHRoZSBvdmVyYWxsIGFwcGxpY2F0aW9uIGhlYWx0aCBhbmQgYWxsb3cgbWUgdG8gbW92ZSBmb3J3YXJkIHdpdGggY29uZmlkZW5jZS4gQmV0dGVyIHRvIGJlIHByb2FjdGl2ZSBhbmQgY2F0Y2ggcG90ZW50aWFsIGlzc3VlcyBub3cgcmF0aGVyIHRoYW4gaGF2ZSB0aGVtIGVzY2FsYXRlIGxhdGVyLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB3ZSBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY3MDpcdFxuMjY3MTpcdHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbjI2NzI6XHRcdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuMjY3MzpcdHtcbjI2NzQ6XHRcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcbjI2NzU6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMjY3NjpcdFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogXHUwMDNlPSBxdW90YS1cdTAwM2Vlc3opXG4yNjc3Olx0XHRcdHJldHVybiB0cnVlO1xuMjY3ODpcdFx0LypcbjI2Nzk6XHRcdCAqIERBTU9TIGFjdGlvbiBpcyBhcHBsaWVkIHBlciByZWdpb24sIHNvIFx1MDAzY21pbl9yZWdpb25fc3ogcmVtYWluaW5nXG4yNjgwOlx0XHQgKiBxdW90YSBtZWFucyB0aGUgcXVvdGEgaXMgZWZmZWN0aXZlbHkgZnVsbC5cbjI2ODE6XHRcdCAqL1xuMjY4MjpcdFx0cmV0dXJuIHF1b3RhLVx1MDAzZWVzeiAtIHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogXHUwMDNjIG1pbl9yZWdpb25fc3o7XG4yNjgzOlx0fVxuMjY4NDpcdFxuMjY4NTpcdHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuMjY4NjpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMpXG4yNjg3Olx0e1xuMjY4ODpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4yNjg5Olx0XHR1bnNpZ25lZCBsb25nIHN6ID0gZGFtb25fc3pfcmVnaW9uKHIpO1xuMjY5MDpcdFx0c3RydWN0IHRpbWVzcGVjNjQgYmVnaW4sIGVuZDtcbjI2OTE6XHRcdHVuc2lnbmVkIGxvbmcgc3pfYXBwbGllZCA9IDA7XG4yNjkyOlx0XHR1bnNpZ25lZCBsb25nIHN6X29wc19maWx0ZXJfcGFzc2VkID0gMDtcbjI2OTM6XHRcdC8qXG4yNjk0Olx0XHQgKiBXZSBwbGFuIHRvIHN1cHBvcnQgbXVsdGlwbGUgY29udGV4dCBwZXIga2RhbW9uZCwgYXMgREFNT04gc3lzZnNcbjI2OTU6XHRcdCAqIGltcGxpZXMgd2l0aCAmIzM5O25yX2NvbnRleHRzJiMzOTsgZmlsZS4gIE5ldmVydGhlbGVzcywgb25seSBzaW5nbGUgY29udGV4dFxuMjY5NjpcdFx0ICogcGVyIGtkYW1vbmQgaXMgc3VwcG9ydGVkIGZvciBub3cuICBTbywgd2UgY2FuIHNpbXBseSB1c2UgJiMzOTswJiMzOTsgY29udGV4dFxuMjY5NzpcdFx0ICogaW5kZXggaGVyZS5cbjI2OTg6XHRcdCAqL1xuMjY5OTpcdFx0dW5zaWduZWQgaW50IGNpZHggPSAwO1xuMjcwMDpcdFx0c3RydWN0IGRhbW9zICpzaXRlcjtcdFx0Lyogc2NoZW1lcyBpdGVyYXRvciAqL1xuMjcwMTpcdFx0dW5zaWduZWQgaW50IHNpZHggPSAwO1xuMjcwMjpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdGl0ZXI7XHQvKiB0YXJnZXRzIGl0ZXJhdG9yICovXG4yNzAzOlx0XHR1bnNpZ25lZCBpbnQgdGlkeCA9IDAsIG5yX2FjY2Vzc2VzID0gMDtcbjI3MDQ6XHRcdGJvb2wgZG9fdHJhY2UgPSBmYWxzZTtcbjI3MDU6XHRcbjI3MDY6XHRcdC8qIGdldCBpbmRpY2VzIGZvciB0cmFjZV9kYW1vc19iZWZvcmVfYXBwbHkoKSAqL1xuMjcwNzpcdFx0aWYgKHRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseV9lbmFibGVkKCkpIHtcbjI3MDg6XHRcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNpdGVyLCBjKSB7XG4yNzA5Olx0XHRcdFx0aWYgKHNpdGVyID09IHMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTk3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgZGFtb3NfYXBwbHlfdGFyZ2V0YCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QuIEkmIzM5O20gY3VyaW91cyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZnVuY3Rpb24mIzM5O3MgbG9naWMsIHN0ZXAtYnktc3RlcCwgcGVyaGFwcyBieSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIGEgdHlwaWNhbCBleGVjdXRpb24gc2NlbmFyaW8uCgpNYXliZSBJJiMzOTtsbCBzdGFydCBieSBjb25zaWRlcmluZyB0aGUgaW5wdXRzLiBXaGF0IGFyZ3VtZW50cyBkb2VzIGl0IHRha2U/IFdoYXQga2luZCBvZiBkYXRhIGlzIGJlaW5nIGZlZCBpbnRvIHRoaXMgZnVuY3Rpb24/IEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCB0aGVpciBmb3JtYXRzLCBhbmQgYW55IGV4cGVjdGVkIHByZWNvbmRpdGlvbnMuIEkgc2hvdWxkIGtlZXAgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIGVkZ2UgY2FzZXMgYW5kIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGlucHV0IGRhdGEgaXMgbWFsZm9ybWVkIG9yIGludmFsaWQ/IERvZXMgaXQgdGhyb3cgYW4gZXhjZXB0aW9uLCByZXR1cm4gYW4gZXJyb3IgY29kZSwgb3Igc2ltcGx5IHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzPwoKSSBhbHNvIG5lZWQgdG8gZm9jdXMgb24gaXRzIGludGVuZGVkICpvdXRwdXQqIG9yIGVmZmVjdC4gRG9lcyBpdCBtb2RpZnkgc29tZXRoaW5nIGluLXBsYWNlLCByZXR1cm4gYSBuZXcgb2JqZWN0LCBvciB0cmlnZ2VyIHNvbWUgc2lkZSBlZmZlY3RzPyBVbmRlcnN0YW5kaW5nIHRoZSByZXN1bHQmIzM5O3MgaW1wYWN0IGlzIGNydWNpYWwuIEkmIzM5O2xsIG1lbnRhbGx5ICYjMzQ7ZXhlY3V0ZSYjMzQ7IHRoZSBrZXkgb3BlcmF0aW9ucy4gSSBjYW4gbWFwIHdoYXQgdHJhbnNmb3JtYXRpb25zIGFyZSBiZWluZyBhcHBsaWVkIHRvIHRoZSBkYXRhLiBJJiMzOTttIHBhcnRpY3VsYXJseSBrZWVuIHRvIGRpc2Nlcm4gdGhlIGFsZ29yaXRobSBvciBsb2dpYyB0aGF0IHVuZGVybGllcyB0aGUgJiMzOTt0YXJnZXQmIzM5OyBhcHBsaWNhdGlvbi4gV2hhdCBjb25zdGl0dXRlcyB0aGUgJiMzOTt0YXJnZXQmIzM5OywgYW5kIGhvdyBkb2VzIHRoZSBmdW5jdGlvbiBtYWtlIGl0IGhhcHBlbj8KCkkmIzM5O2xsIGJlIG1pbmRmdWwgb2YgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gQXJlIHRoZXJlIGFueSBsb29wcywgcmVjdXJzaXZlIGNhbGxzLCBvciBjb21wbGV4IGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGJlY29tZSBib3R0bGVuZWNrcz8gSWYgSSBzZWUgc29tZXRoaW5nIGluZWZmaWNpZW50LCBJIG1pZ2h0IHN0YXJ0IGJyYWluc3Rvcm1pbmcgcG90ZW50aWFsIG9wdGltaXphdGlvbnMsIG1heWJlIHRocm91Z2ggbWVtb2l6YXRpb24sIHZlY3Rvcml6YXRpb24sIG9yIGFsZ29yaXRobSByZWRlc2lnbi4gSSB3YW50IHRvIGtlZXAgdGhpcyBmdW5jdGlvbiBlZmZpY2llbnQuIEkmIzM5O20gYWxzbyBsb29raW5nIGZvciBhbnkgb3Bwb3J0dW5pdGllcyB0byByZWZhY3RvciBhbmQgY2xhcmlmeSB0aGUgY29kZSB0byBtYWtlIGl0IGNsZWFuZXIgYW5kIG1vcmUgcmVhZGFibGUuIFRoaXMgd2lsbCBoZWxwIHdpdGggZnV0dXJlIG1haW50YWluYWJpbGl0eSBhbmQgZGVidWdnaW5nLCBvZiBjb3Vyc2UuCgpGaW5hbGx5LCBJJiMzOTtsbCB0cnkgdG8gcmVsYXRlIGBkYW1vc19hcHBseV90YXJnZXRgIHRvIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgd2lkZXIgY29kZWJhc2UuIFdoYXQgb3RoZXIgZnVuY3Rpb25zIG9yIG1vZHVsZXMgZG9lcyBpdCBpbnRlcmFjdCB3aXRoPyBIb3cgZG9lcyBpdCBjb250cmlidXRlIHRvIHRoZSBvdmVyYWxsIHdvcmtmbG93IG9yIGdvYWw/IFdoYXQgYXJlIGl0cyBkZXBlbmRlbmNpZXM/IEJ5IHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9ucyBJIGNhbiBiZXR0ZXIgZ3Jhc3AgaXRzIHRydWUgc2lnbmlmaWNhbmNlIGFuZCBlbnN1cmUgaXQmIzM5O3MgaW50ZWdyYXRlZCBhcHByb3ByaWF0ZWx5IHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfYXBwbHlfdGFyZ2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTI3NTY9c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzkwLS8qXG5tbS9kYW1vbi9jb3JlLmM6Mjc5MTogKiBkYW1vc19hcHBseV90YXJnZXQoKSAtIEFwcGx5IERBTU9TIHNjaGVtZXMgdG8gYSBnaXZlbiB0YXJnZXQuXG5tbS9kYW1vbi9jb3JlLmMtMjc5Mi0gKiBAYzpcdFx0XHRtb25pdG9yaW5nIGNvbnRleHQgdG8gYXBwbHkgaXRzIERBTU9TIHNjaGVtZXMgdG8uLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yODA3LSAqL1xubW0vZGFtb24vY29yZS5jOjI4MDg6c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtMjgwOS1cdFx0dW5zaWduZWQgbG9uZyBtYXhfcmVnaW9uX3N6KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMzczPXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDA2LVx0XHR9XG5tbS9kYW1vbi9jb3JlLmM6MzQwNzpcdFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xubW0vZGFtb24vY29yZS5jLTM0MDgtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzkwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlICYjMzQ7ZGFtb3NfYXBwbHlfdGFyZ2V0JiMzNDsgY29uY2VwdCwgZnJhbWluZyBpdCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkFuYWx5emluZyAmIzM0O2RhbW9zX2FwcGx5X3RhcmdldCYjMzQ7KioKCkFscmlnaHQsICYjMzQ7ZGFtb3NfYXBwbHlfdGFyZ2V0LiYjMzQ7IE15IGluaXRpYWwgcmVhY3Rpb24gaXMsIHRoaXMgc291bmRzIGxpa2UgaXQmIzM5O3MgYSBzcGVjaWZpYyBmdW5jdGlvbiBvciBtb2R1bGUgd2l0aGluIGEgYnJvYWRlciBEQU1PUyAoRGF0YSBBY3F1aXNpdGlvbiBhbmQgTW9uaXRvcmluZyBTeXN0ZW0sIGxpa2VseSkgY29udGV4dC4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgb2theSwgd2hhdCYjMzk7cyB0aGUgcHVycG9zZT8gJiMzOTtBcHBseSYjMzk7IGltcGxpZXMgYSB0cmFuc2Zvcm1hdGlvbiBvciBhY3Rpb24gaXMgYmVpbmcgdGFrZW4sIGFuZCAmIzM5O3RhcmdldCYjMzk7IHN1Z2dlc3RzIHdlJiMzOTtyZSBkaXJlY3RpbmcgdGhpcyBhY3Rpb24gdG93YXJkIGEgc3BlY2lmaWMgZGF0YSBwb2ludCwgY2hhbm5lbCwgb3IgcGVyaGFwcyBldmVuIGFuIGVudGlyZSBkYXRhc2V0IHdpdGhpbiB0aGUgREFNT1MgZW52aXJvbm1lbnQuCgpNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0aWNraW5nIHRocm91Z2ggcG90ZW50aWFsIGltcGxlbWVudGF0aW9ucy4gSXMgdGhpcyBhcHBseWluZyBhIGNhbGlicmF0aW9uIGN1cnZlPyBGaWx0ZXJpbmc/IERhdGEgY2xlYW5pbmc/IFBlcmhhcHMgaXQmIzM5O3MgYSBtb3JlIGNvbXBsZXggcHJvY2VkdXJlIGludm9sdmluZyB1bml0IGNvbnZlcnNpb25zIG9yIGFwcGx5aW5nIGEgc3BlY2lmaWMgZm9ybXVsYSB0byBhY2hpZXZlIGEgZmluYWwgcmVzdWx0PyBUaGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaXMgYSBsaXR0bGUgZ2VuZXJpYzsgdG8gdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24gSSB3b3VsZCBuZWVkIGNvbnRleHQuIEFyZSB0aGVyZSB1cHN0cmVhbSBkZXBlbmRlbmNpZXM/IFdoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIGlucHV0IGZvcm1hdCAodGhlICYjMzk7ZGFtb3MmIzM5OyBwYXJ0IGxpa2VseSBzdWdnZXN0cyBhIHNwZWNpZmljIGludGVybmFsIGRhdGEgc3RydWN0dXJlLCBsaWtlIGEgc3RydWN0dXJlZCBldmVudCB3aXRoIHZhcmlvdXMgcGFyYW1ldGVycyBhbmQgbWV0YWRhdGEpPyBJcyBpdCB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgYGRhbW9zXypgIGZ1bmN0aW9ucz8KClRoZSAmIzM0O3RhcmdldCYjMzQ7IGlzIGtleS4gSXMgaXQgYSBzaW5nbGUgY2hhbm5lbCwgb3IgYSBzZWxlY3Rpb24gb2YgY2hhbm5lbHMgKGUuZy4sIGFsbCB0ZW1wZXJhdHVyZSBzZW5zb3JzLCBidXQgbm90IHRoZSBwcmVzc3VyZSBzZW5zb3JzKT8gRG9lcyB0aGUgdGVybSAmIzM0O3RhcmdldCYjMzQ7IGhhdmUgYSBzcGF0aWFsIGNvbXBvbmVudCwgYSB0ZW1wb3JhbCBjb21wb25lbnQgb3IgYm90aD8gSXMgdGhlcmUgYSB0YXJnZXQgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBkYXRhPyBJcyBpdCBhIGxvb2t1cCBvciBjb25maWd1cmF0aW9uIGZpbGU/IFdoYXQgaXMgdGhlIGZ1bmN0aW9uJiMzOTtzIHNjb3BlOiBkb2VzIGl0IG1ha2UgZGlyZWN0IGNoYW5nZXMgdG8gdGhlIHJhdyBkYXRhLCBvciBkb2VzIGl0IG9wZXJhdGUgb24gYSBjb3B5PyBIb3cgZG9lcyBpdCBoYW5kbGUgZXJyb3JzIG9yIG1pc3NpbmcgZGF0YSBwb2ludHM/IEFuZCwgY3J1Y2lhbGx5LCBob3cgaXMgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGVkIGludG8gdGhlIHdpZGVyIERBTU9TIHN5c3RlbS4gVGhpcyBjb3VsZCByYW5nZSBmcm9tIGl0IGJlaW5nIGEgY29yZSBpbnRlcm5hbCBjb21wb25lbnQsIHRvIGEgcGx1Z2luLCBvciBldmVuIGEgcmVtb3RlIHNlcnZpY2UuCgpJJiMzOTtkIG5lZWQgdG8gZXhhbWluZSBpdHMgY29kZSBvciBkb2N1bWVudGF0aW9uIHRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIGZ1bGwgc2lnbmlmaWNhbmNlLiBCdXQgYmFzZWQgc29sZWx5IG9uIHRoZSBuYW1lLCBteSBtaW5kIGlzIGFscmVhZHkgcmFjaW5nIHRocm91Z2ggcG90ZW50aWFsIHNjZW5hcmlvcyBhbmQgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSXQgaGFzIHRoZSBzbWVsbCBvZiBhbiBvcHRpbWl6YXRpb24gc3RlcCwgb3IgYSBzdGVwIHdpdGhpbiBhIHBpcGVsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjgwODpcdHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuMjgwOTpcdFx0XHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3opXG4yODEwOlx0e1xuMjgxMTpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbjI4MTI6XHRcbjI4MTM6XHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XG4yODE0Olx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnByZXZfcjtcbjI4MTU6XHRcbjI4MTY6XHRcdFx0ZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhjLCB0LCByKTtcbjI4MTc6XHRcdFx0LypcbjI4MTg6XHRcdFx0ICogZGFtb25fZG9fYXBwbHlfc2NoZWVtcygpIGNvdWxkIHNwbGl0IHRoZSByZWdpb24gZm9yIHRoZVxuMjgxOTpcdFx0XHQgKiBxdW90YS4gIEtlZXBpbmcgdGhlIG5ldyBzbGljZXMgaXMgYW4gb3ZlcmhlYWQuICBNZXJnZSBiYWNrXG4yODIwOlx0XHRcdCAqIHRoZSBzbGljZXMgaW50byB0aGUgcHJldmlvdXMgcmVnaW9uIGlmIGl0IGRvZXNuJiMzOTt0IGxvc2UgYW55XG4yODIxOlx0XHRcdCAqIGluZm9ybWF0aW9uIGFuZCBub3QgdmlvbGF0aW5nIHRoZSBtYXhfcmVnaW9uX3N6LlxuMjgyMjpcdFx0XHQgKi9cbjI4MjM6XHRcdFx0aWYgKGRhbW9uX2ZpcnN0X3JlZ2lvbih0KSA9PSByKVxuMjgyNDpcdFx0XHRcdGNvbnRpbnVlO1xuMjgyNTpcdFx0XHRwcmV2X3IgPSBkYW1vbl9wcmV2X3JlZ2lvbihyKTtcbjI4MjY6XHRcdFx0aWYgKHByZXZfci1cdTAwM2Vhci5lbmQgIT0gci1cdTAwM2Vhci5zdGFydClcbjI4Mjc6XHRcdFx0XHRjb250aW51ZTtcbjI4Mjg6XHRcdFx0aWYgKHByZXZfci1cdTAwM2VhZ2UgIT0gci1cdTAwM2VhZ2UpXG4yODI5Olx0XHRcdFx0Y29udGludWU7XG4yODMwOlx0XHRcdGlmIChwcmV2X3ItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyAhPSByLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMpXG4yODMxOlx0XHRcdFx0Y29udGludWU7XG4yODMyOlx0XHRcdGlmIChwcmV2X3ItXHUwMDNlbnJfYWNjZXNzZXMgIT0gci1cdTAwM2Vucl9hY2Nlc3NlcylcbjI4MzM6XHRcdFx0XHRjb250aW51ZTtcbjI4MzQ6XHRcdFx0aWYgKHItXHUwMDNlYXIuZW5kIC0gcHJldl9yLVx1MDAzZWFyLnN0YXJ0IFx1MDAzZSBtYXhfcmVnaW9uX3N6KVxuMjgzNTpcdFx0XHRcdGNvbnRpbnVlO1xuMjgzNjpcdFx0XHRwcmV2X3ItXHUwMDNlYXIuZW5kID0gci1cdTAwM2Vhci5lbmQ7XG4yODM3Olx0XHRcdGRhbW9uX2Rlc3Ryb3lfcmVnaW9uKHIsIHQpO1xuMjgzODpcdFx0XHRyID0gcHJldl9yO1xuMjgzOTpcdFx0fVxuMjg0MDpcdH1cbjI4NDE6XHRcbjI4NDI6XHQvKlxuMjg0MzpcdCAqIGRhbW9uX2ZlZWRfbG9vcF9uZXh0X2lucHV0KCkgLSBnZXQgbmV4dCBpbnB1dCB0byBhY2hpZXZlIGEgdGFyZ2V0IHNjb3JlLlxuMjg0NDpcdCAqIEBsYXN0X2lucHV0XHRUaGUgbGFzdCBpbnB1dC5cbjI4NDU6XHQgKiBAc2NvcmVcdEN1cnJlbnQgc2NvcmUgdGhhdCBtYWRlIHdpdGggQGxhc3RfaW5wdXQuXG4yODQ2Olx0ICpcbjI4NDc6XHQgKiBDYWxjdWxhdGUgbmV4dCBpbnB1dCB0byBhY2hpZXZlIHRoZSB0YXJnZXQgc2NvcmUsIGJhc2VkIG9uIHRoZSBsYXN0IGlucHV0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTY5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBmdW5jdGlvbiwgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoYywgdCwgcilgLiBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzLCBzbyB0aGlzIGlzIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiBjYWxsLiBCYXNlZCBvbiB0aGUgbmFtZSBhbmQgdGhlIHBhcmFtZXRlcnMsIG15IGZpcnN0IGd1ZXNzIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiwgbGlrZWx5IG5hbWVkIGFmdGVyIHNvbWVvbmUgb3Igc29tZXRoaW5nLCBpcyBkZXNpZ25lZCB0byBhcHBseSBhIHNldCBvZiAmIzM0O3NjaGVtZXMmIzM0OyB0byBzb21lIGtpbmQgb2YgZGF0YSBvciBjb250ZXh0LiBUaGUgcGFyYW1ldGVycyBgY2AsIGB0YCwgYW5kIGByYCBhcmUgdGhlIGtleS4KCiogICBgY2AgaXMgcHJvYmFibHkgdGhlICpjb250ZXh0Ki4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGEgZ2VuZXJhbCBjb25maWd1cmF0aW9uIG9iamVjdCwgYSBkYXRhIHN0cnVjdHVyZSBob2xkaW5nIHRoZSBjdXJyZW50IHN0YXRlLCBvciB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlc2UgJiMzNDtzY2hlbWVzJiMzNDsgYXJlIGJlaW5nIGFwcGxpZWQuIEl0JiMzOTtzIHRoZSAmIzM0O3doZXJlJiMzNDsgYW5kICYjMzQ7aG93JiMzNDsgb2YgdGhlIG9wZXJhdGlvbnMuCgoqICAgYHRgIGlzIGxpa2VseSB0aGUgKnRhcmdldCouIFdoYXQgYXJlIHdlIGFwcGx5aW5nIHRoZXNlIHNjaGVtZXMgKnRvKj8gSXMgaXQgYSBkYXRhIHN0cnVjdHVyZT8gQSBzcGVjaWZpYyBlbGVtZW50IHdpdGhpbiBhIGxhcmdlciBvYmplY3Q/IEEgc2V0IG9mIHJ1bGVzPyBUaGlzIGlzIHRoZSAmIzM0O3doYXQmIzM0OyB0aGF0IHdlJiMzOTtyZSBhY3RpbmcgdXBvbi4KCiogICBgcmAuLi5obW0sIGByYCBpcyB0aGUgb25lIHRoYXQmIzM5O3MgYSBiaXQgbW9yZSBuZWJ1bG91cyBhdCBmaXJzdCBnbGFuY2UuIEl0IGNvdWxkIGJlICpydWxlcyosICpyZXN1bHRzKiwgb3IgZXZlbiBhICpyZXF1ZXN0KiB0aGF0IGRpY3RhdGVzIGhvdyB0aGUgc2NoZW1lcyBhcmUgYXBwbGllZCB0byB0aGUgdGFyZ2V0IGJhc2VkIG9uIHRoZSBjb250ZXh0LiBNYXliZSBpdCBob2xkcyBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgb3IgdGhlIHBhcmFtZXRlcnMgZm9yIGFwcGxpY2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uJiMzOTtzIGludGVybmFsIGxvZ2ljIHRvIGJlIHN1cmUsIGJ1dCBteSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQmIzM5O3MgYSBndWlkZSB0byB0aGUgb3BlcmF0aW9uLgoKU28sIHRoZSBmdW5jdGlvbiYjMzk7cyBvYmplY3RpdmUgaXMgdG8gYWRhcHQgdGhlIHRhcmdldCAoYHRgKSBiYXNlZCBvbiB0aGUgcnVsZS1zZXQgb3IgcmVxdWVzdCAoYHJgKSBhbmQgdGhlIHRhcmdldCYjMzk7cyBjdXJyZW50IHNpdHVhdGlvbiB3aGljaCBpcyB0aGUgY29udGV4dCAoYGNgKS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgZWFjaCBvZiB0aGUgcGFyYW1ldGVycyB0byBhcHBseSB0aGUgZnVuY3Rpb24gdG8gYW55IGNvbnRleHQuCgpVbHRpbWF0ZWx5LCB0byByZWFsbHkgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBmdW5jdGlvbiYjMzk7cyBpbXBsZW1lbnRhdGlvbi4gV2hhdCBhcmUgdGhlc2UgJiMzNDtzY2hlbWVzJiMzNDs/IFdoYXQgZG8gdGhleSAqZG8qPyBIb3cgaXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYGNgLCBgdGAsIGFuZCBgcmAgaGFuZGxlZD8gSXMgaXQgYSBjb21wb3NpdGlvbiBvZiBkaWZmZXJlbnQgc2NoZW1lcyBvciBzb21lIHNvcnQgb2YgY3VzdG9tIHByb2Nlc3Npbmc/IEkmIzM5O2xsIHByb2JhYmx5IGxvb2sgZm9yIGFueSBjYWxscyB0byBzY2hlbWUgYXBwbHlpbmcgZnVuY3Rpb24gaW4gdGhlIHRhcmdldCB0aGF0IHRha2UgdGhlIHBhcmFtZXRlcnMgYGNgLCBgdGAsIGFuZCBgcmAgdG8gaGF2ZSBtb3JlIGNsYXJpdHkuIE9uY2UgSSBrbm93IHRoZSBzcGVjaWZpY3MsIEkmIzM5O2xsIGJlIGFibGUgdG8gcHJvcGVybHkgZXZhbHVhdGUgaXRzIHBlcmZvcm1hbmNlLCBkZWJ1ZyBhbnkgaXNzdWVzLCBhbmQgc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc1NTpcdFxuMjc1NjpcdHN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbjI3NTc6XHRcdFx0XHRcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4yNzU4Olx0XHRcdFx0XHQgICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuMjc1OTpcdHtcbjI3NjA6XHRcdHN0cnVjdCBkYW1vcyAqcztcbjI3NjE6XHRcbjI3NjI6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4yNzYzOlx0XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuMjc2NDpcdFxuMjc2NTpcdFx0XHRpZiAodGltZV9iZWZvcmUoYy1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cdTAwM2VuZXh0X2FwcGx5X3NpcykpXG4yNzY2Olx0XHRcdFx0Y29udGludWU7XG4yNzY3Olx0XG4yNzY4Olx0XHRcdGlmICghcy1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuMjc2OTpcdFx0XHRcdGNvbnRpbnVlO1xuMjc3MDpcdFxuMjc3MTpcdFx0XHQvKiBDaGVjayB0aGUgcXVvdGEgKi9cbjI3NzI6XHRcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4yNzczOlx0XHRcdFx0Y29udGludWU7XG4yNzc0Olx0XG4yNzc1Olx0XHRcdGlmIChkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHQsIHIsIHMsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4yNzc2Olx0XHRcdFx0Y29udGludWU7XG4yNzc3Olx0XG4yNzc4Olx0XHRcdGlmIChzLVx1MDAzZW1heF9ucl9zbmFwc2hvdHMgXHUwMDI2XHUwMDI2XG4yNzc5Olx0XHRcdFx0XHRzLVx1MDAzZW1heF9ucl9zbmFwc2hvdHMgXHUwMDNjPSBzLVx1MDAzZXN0YXQubnJfc25hcHNob3RzKVxuMjc4MDpcdFx0XHRcdGNvbnRpbnVlO1xuMjc4MTpcdFxuMjc4MjpcdFx0XHRpZiAoZGFtb3NfdmFsaWRfdGFyZ2V0KGMsIHIsIHMpKVxuMjc4MzpcdFx0XHRcdGRhbW9zX2FwcGx5X3NjaGVtZShjLCB0LCByLCBzKTtcbjI3ODQ6XHRcbjI3ODU6XHRcdFx0aWYgKGRhbW9uX2lzX2xhc3RfcmVnaW9uKHIsIHQpKVxuMjc4NjpcdFx0XHRcdHMtXHUwMDNlc3RhdC5ucl9zbmFwc2hvdHMmIzQzOyYjNDM7O1xuMjc4NzpcdFx0fVxuMjc4ODpcdH1cbjI3ODk6XHRcbjI3OTA6XHQvKlxuMjc5MTpcdCAqIGRhbW9zX2FwcGx5X3RhcmdldCgpIC0gQXBwbHkgREFNT1Mgc2NoZW1lcyB0byBhIGdpdmVuIHRhcmdldC5cbjI3OTI6XHQgKiBAYzpcdFx0XHRtb25pdG9yaW5nIGNvbnRleHQgdG8gYXBwbHkgaXRzIERBTU9TIHNjaGVtZXMgdG8uLlxuMjc5MzpcdCAqIEB0Olx0XHRcdG1vbml0b3JpbmcgdGFyZ2V0IHRvIGFwcGx5IHRoZSBzY2hlbWVzIHRvLlxuMjc5NDpcdCAqIEBtYXhfcmVnaW9uX3N6Olx0bWF4aW11bSByZWdpb24gc2l6ZSBmb3IgQGMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNzgxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQW5hbHlzaXMgb2YgREFNT04gUXVvdGEgT3B0aW1pemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGluIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvcikgc3Vic3lzdGVtIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGludm9sdmVzIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBhc3Nlc3NpbmcgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4KCkZpcnN0LCBJIGV4YW1pbmUgdGhlIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGZ1bmN0aW9uLiBUaGUga2V5IGlzIHRoaXMgY2hlY2s6IGBpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy0mZ3Q7bWluX3JlZ2lvbl9zeikpIGNvbnRpbnVlO2AuIFRoZW4gSSBkZWx2ZSBpbnRvIGBkYW1vc19xdW90YV9pc19mdWxsYCBhbmQgc2VlIHRoYXQgaWYgYHF1b3RhLSZndDtlc3pgICh0aGUgcXVvdGEmIzM5O3MgZWZmZWN0aXZlIHNpemUpIGlzIHplcm8sIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSByZXR1cm5zIGB0cnVlYCwgaW5kaWNhdGluZyB0aGUgcXVvdGEgaXMgY29uc2lkZXJlZCBmdWxsLiBUaGlzIGlzIGR1ZSB0byBhIGNvbXBhcmlzb24gaW52b2x2aW5nIGBxdW90YS0mZ3Q7Y2hhcmdlZF9zeiAmZ3Q7PSBxdW90YS0mZ3Q7ZXN6YCB3aGljaCB3aWxsIHJldHVybiB0cnVlIHNpbmNlIGBxdW90YS0mZ3Q7Y2hhcmdlZF9zemAgaXMgJmd0Oz0gMC4KClRoZSBpbXBvcnRhbnQgcG9pbnQgaXMgdGhhdCBpZiBgcXVvdGEtJmd0O2VzemAgaXMgMCwgdGhlIERBTU9OIHNjaGVtZSBhcHBsaWNhdGlvbiBsb2dpYyBiZWNvbWVzIGEgbm8tb3AgZHVlIHRvIGEgcXVvdGEgYmVpbmcgJiMzNDtmdWxsJiMzNDsgYmFzZWQgb24gaXRzIGVmZmVjdGl2ZSBzaXplLCByZXR1cm5pbmcgZWFybHkgaW4gYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuCgpUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBieSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gIFdpdGhvdXQgdGhlIHBhdGNoLCB0aGlzIGZ1bmN0aW9uIHdhcyBwZXJmb3JtaW5nIGEgYnVuY2ggb2YgdW5uZWNlc3Nhcnkgd29yayB3aGVuIGBxdW90YS0mZ3Q7ZXN6YCBpcyAwLiBTcGVjaWZpY2FsbHksIGl0IHdhcyBhbGxvY2F0aW5nIGFuZCB6ZXJvaW5nIGEgaGlzdG9ncmFtLCBpdGVyYXRpbmcgdGhyb3VnaCByZWdpb25zLCBjYWxsaW5nIGBnZXRfc2NoZW1lX3Njb3JlKClgLCBjYWxjdWxhdGluZyBhIHNjb3JlIGhpc3RvZ3JhbSwgYW5kIGRldGVybWluaW5nIGEgbWluaW11bSBzY29yZS4gQWxsIHRoaXMgd2FzIHdhc3RlZCBiZWNhdXNlIHRoZSBxdW90YSB3YXMgZWZmZWN0aXZlbHkgZnVsbCAoZXN6ID09IDApIGFuZCBubyBzY2hlbWVzIGNvdWxkIGJlIGFwcGxpZWQuCgpUaGlzIHBhdGNoIGFkZHMgdHdvIGNoZWNrcyB0byBza2lwIHRoYXQgd29yayBpZiBgcXVvdGEtJmd0O2VzeiA9PSAwYCBvciBpZiBgYy0mZ3Q7b3BzLmdldF9zY2hlbWVfc2NvcmVgIGRvZXMgbm90IGV4aXN0OgpgYGBjCglpZiAoIWMtJmd0O29wcy5nZXRfc2NoZW1lX3Njb3JlKQoJCXJldHVybjsKCWlmIChxdW90YS0mZ3Q7ZXN6ID09IDApCgkJcmV0dXJuOwpgYGAKCk5vdywgYXMgYSBzZWFzb25lZCBrZXJuZWwgZXhwZXJ0LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcuIFRoaXMgaXMgd2hlcmUgbXkgZXhwZXJ0aXNlIGNvbWVzIGludG8gcGxheToKCjEuICAqKlJlYWNoYWJsZSBDb2RlOioqIERBTU9OIGlzIHBhcnQgb2YgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtbS8pLCB3aGljaCBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4gSXQmIzM5O3MgZW5hYmxlZCB0aHJvdWdoIHNldmVyYWwga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU3l6a2FsbGVyIGNhbiBpbnRlcmFjdCB3aXRoIERBTU9OIHZpYSBzeXNmcyBmaWxlcywgc3BlY2lmaWNhbGx5IHVuZGVyIGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi8uLi5gLiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBjb2RlIGlzICpkaXJlY3RseSogZXhwb3NlZCBhbmQgZnV6emFibGUuCjIuICAqKkltcGFjdCBvbiBDb250cm9sIEZsb3c6KiogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb250cm9sIGZsb3cgd2l0aGluIGBkYW1vc19hZGp1c3RfcXVvdGEoKWAsIHdoaWNoIGlzIGNhbGxlZCBieSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gVGhpcyBpcyBub3QgYSB0cml2aWFsIGNoYW5nZTsgaXQmIzM5O3MgYWx0ZXJpbmcgdGhlIGxvZ2ljJiMzOTtzIGV4ZWN1dGlvbiBwYXRoLiAgSXQgaXMgYSBjb3JlIE1NIGZlYXR1cmUgaW4gbW0vZGFtb24vLgozLiAgKipQb3NpdGl2ZSBDcml0ZXJpYToqKiAgVGhpcyBkaXJlY3RseSBoaXRzIGEgJiMzNDtwb3NpdGl2ZSYjMzQ7IGNyaXRlcmlhOiBtb2RpZmljYXRpb24gb2YgbG9naWMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKGBtbS9gKSBjb2RlLgoKNC4gKipOZWdhdGl2ZSBDcml0ZXJpYToqKiBObyBuZWdhdGl2ZSBjcml0ZXJpYSBhcHBseSAobm8gZG9jcywgbm8gdW5yZWFjaGFibGUgaGFyZHdhcmUsIGV0Yy4pLgoKU2luY2UgdGhpcyBpcyBleGVjdXRhYmxlIGtlcm5lbCBjb2RlIGluIGBtbS9kYW1vbi9jb3JlLmNgIGFuZCBpcyByZWFjaGFibGUsIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCkkgbm93IG5lZWQgdG8gaWRlbnRpZnkgd2hhdCBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkOgoqICAgYGRhbW9zX2FkanVzdF9xdW90YWAgaXMgdGhlIG1haW4gdGFyZ2V0LCB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljIGFuZCBwb3RlbnRpYWxseSBpbmxpbmVkICh3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCBpbmxpbmluZykuCiogICBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBpcyB0aGUgY2FsbGVyIG9mIGBkYW1vc19hZGp1c3RfcXVvdGFgLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBrZGFtb25kX2ZuYC4KKiAgIExldCYjMzk7cyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHN5c2ZzIGVudHJ5IHBvaW50cyBvciBwdWJsaWMgREFNT04gQVBJcyB0aGF0IG1pZ2h0IGJlIGVudHJ5IHBvaW50cy4gSSBzaG91bGQgbG9vayBpbnRvIGBtbS9kYW1vbi9zeXNmcy5jYCBhbmQgc2VhcmNoIGZvciBzeXNmcyB3cml0ZSBoYW5kbGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3lzZnNfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtY29tbW9uLmM9OTk9Y29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc191bF9yYW5nZV9rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwMC1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfdWxfcmFuZ2VfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwMTpcdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwMi1cdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3VsX3JhbmdlX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTc9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfcHJvYmVfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTgtXHQucmVsZWFzZSA9IGRhbW9zX3N5c2ZzX3Byb2JlX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTk6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjAtXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vc19zeXNmc19wcm9iZV9ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE0MT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vc19zeXNmc19wcm9iZXNfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyLVx0LnJlbGVhc2UgPSBkYW1vc19zeXNmc19wcm9iZXNfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDM6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ0LX07XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OC1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4OTpcdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTAtXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzU2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM1Ny1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTg6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzU5LVx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfZ3JvdXBzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz01MTA9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc3RhdHNfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTExLVx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zdGF0c19yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUxMjpcdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MTMtXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19zdGF0c19ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTg4Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTg4My1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjg4NDpcdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy04ODUtXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTAxMD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyc19rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDExLVx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyc19yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEwMTI6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTAxMy1cdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJzX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIwNT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc193YXRlcm1hcmtzX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMDYtXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3dhdGVybWFya3NfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjA3Olx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMDgtXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc193YXRlcm1hcmtzX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQ0ND1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NDUtXHQucmVsZWFzZSA9IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDQ2Olx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NDctXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTU2ND1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTY1LVx0LnJlbGVhc2UgPSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NjY6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU2Ny1cdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTY3ND1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc193ZWlnaHRzX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2NzUtXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3dlaWdodHNfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNjc2Olx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2NzctXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc193ZWlnaHRzX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTk0OT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19xdW90YXNfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk1MC1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfcXVvdGFzX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTk1MTpcdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTUyLVx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfcXVvdGFzX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjA0ND1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19hY2Nlc3NfcGF0dGVybl9rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMDQ1LVx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19hY2Nlc3NfcGF0dGVybl9yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIwNDY6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjA0Ny1cdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX2FjY2Vzc19wYXR0ZXJuX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjEyMz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vc19zeXNmc19kZXN0X2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIxMjQtXHQucmVsZWFzZSA9IGRhbW9zX3N5c2ZzX2Rlc3RfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMTI1Olx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIxMjYtXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vc19zeXNmc19kZXN0X2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjI0ND1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vc19zeXNmc19kZXN0c19rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMjQ1LVx0LnJlbGVhc2UgPSBkYW1vc19zeXNmc19kZXN0c19yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIyNDY6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjI0Ny1cdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9zX3N5c2ZzX2Rlc3RzX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjY3ND1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY3NS1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjY3NjpcdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjc3LVx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfc2NoZW1lX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjc5OD1jb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZXNfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjc5OS1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lc19yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4MDA6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjgwMS1cdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3NjaGVtZXNfZ3JvdXBzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9ODE9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcmVnaW9uX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMuYy04Mi1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfcmVnaW9uX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy5jOjgzOlx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMuYy04NC1cdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3JlZ2lvbl9ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMDA9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcmVnaW9uc19rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjAxLVx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19yZWdpb25zX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy5jOjIwMjpcdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLmMtMjAzLVx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfcmVnaW9uc19ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYz0zMDc9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfdGFyZ2V0X2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMuYy0zMDgtXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3RhcmdldF9yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMuYzozMDk6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy5jLTMxMC1cdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3RhcmdldF9ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYz00MzU9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfdGFyZ2V0c19rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLmMtNDM2LVx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc190YXJnZXRzX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy5jOjQzNzpcdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLmMtNDM4LVx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfdGFyZ2V0c19ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYz01OTI9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dvYWxfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy5jLTU5My1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dvYWxfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLmM6NTk0Olx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMuYy01OTUtXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfZ29hbF9ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYz03NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMuYy03NDctXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX2ludGVydmFsc19yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMuYzo3NDg6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy5jLTc0OS1cdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX2ludGVydmFsc19ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYz04NDM9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcHJlcF9rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLmMtODQ0LVx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19wcmVwX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy5jOjg0NTpcdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLmMtODQ2LVx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfcHJlcF9ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYz05NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcHJlcHNfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy5jLTk2My1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfcHJlcHNfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLmM6OTY0Olx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMuYy05NjUtXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19wcmVwc19ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYz0xMTYwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2ZpbHRlcl9rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTE2MS1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfZmlsdGVyX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy5jOjExNjI6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy5jLTExNjMtXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19maWx0ZXJfZ3JvdXBzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTI3OT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19maWx0ZXJzX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMuYy0xMjgwLVx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19maWx0ZXJzX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy5jOjEyODE6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy5jLTEyODItXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19maWx0ZXJzX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTEzODY9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcHJvYmVfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy5jLTEzODctXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3Byb2JlX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy5jOjEzODg6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy5jLTEzODktXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19wcm9iZV9ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYz0xNTE1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3Byb2Jlc19rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTUxNi1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfcHJvYmVzX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy5jOjE1MTc6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy5jLTE1MTgtXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19wcm9iZXNfZ3JvdXBzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTYyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19hdHRyc19rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTYyMi1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfYXR0cnNfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLmM6MTYyMzpcdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLmMtMTYyNC1cdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX2F0dHJzX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE2MzAtXG5tbS9kYW1vbi9zeXNmcy5jOjE2MzE6c3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTYzMi1cdGVudW0gZGFtb25fb3BzX2lkIG9wc19pZDtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE2MzUtXG5tbS9kYW1vbi9zeXNmcy5jOjE2MzY6c3RhdGljIGNvbnN0IHN0cnVjdCBkYW1vbl9zeXNmc19vcHNfbmFtZSBkYW1vbl9zeXNmc19vcHNfbmFtZXNbXSA9IHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTYzNy1cdHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE3Njg9c3RhdGljIHNzaXplX3QgYXZhaWxfb3BlcmF0aW9uc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTc3My1cbm1tL2RhbW9uL3N5c2ZzLmM6MTc3NDpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZGFtb25fc3lzZnNfb3BzX25hbWVzKTsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL3N5c2ZzLmM6MTc3NTpcdFx0Y29uc3Qgc3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lICpvcHNfbmFtZTtcbm1tL2RhbW9uL3N5c2ZzLmMtMTc3Ni1cbm1tL2RhbW9uL3N5c2ZzLmM6MTc3NzpcdFx0b3BzX25hbWUgPSBcdTAwMjZkYW1vbl9zeXNmc19vcHNfbmFtZXNbaV07XG5tbS9kYW1vbi9zeXNmcy5jLTE3NzgtXHRcdGlmICghZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMob3BzX25hbWUtXHUwMDNlb3BzX2lkKSlcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE3ODU9c3RhdGljIHNzaXplX3Qgb3BlcmF0aW9uc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTc5MS1cbm1tL2RhbW9uL3N5c2ZzLmM6MTc5MjpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZGFtb25fc3lzZnNfb3BzX25hbWVzKTsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL3N5c2ZzLmM6MTc5MzpcdFx0Y29uc3Qgc3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lICpvcHNfbmFtZTtcbm1tL2RhbW9uL3N5c2ZzLmMtMTc5NC1cbm1tL2RhbW9uL3N5c2ZzLmM6MTc5NTpcdFx0b3BzX25hbWUgPSBcdTAwMjZkYW1vbl9zeXNmc19vcHNfbmFtZXNbaV07XG5tbS9kYW1vbi9zeXNmcy5jLTE3OTYtXHRcdGlmIChvcHNfbmFtZS1cdTAwM2VvcHNfaWQgPT0gY29udGV4dC1cdTAwM2VvcHNfaWQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0xODAyPXN0YXRpYyBzc2l6ZV90IG9wZXJhdGlvbnNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMuYy0xODA4LVxubW0vZGFtb24vc3lzZnMuYzoxODA5Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShkYW1vbl9zeXNmc19vcHNfbmFtZXMpOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vc3lzZnMuYzoxODEwOlx0XHRjb25zdCBzdHJ1Y3QgZGFtb25fc3lzZnNfb3BzX25hbWUgKm9wc19uYW1lO1xubW0vZGFtb24vc3lzZnMuYy0xODExLVxubW0vZGFtb24vc3lzZnMuYzoxODEyOlx0XHRvcHNfbmFtZSA9IFx1MDAyNmRhbW9uX3N5c2ZzX29wc19uYW1lc1tpXTtcbm1tL2RhbW9uL3N5c2ZzLmMtMTgxMy1cdFx0aWYgKHN5c2ZzX3N0cmVxKGJ1Ziwgb3BzX25hbWUtXHUwMDNlbmFtZSkpIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE4OTc9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfY29udGV4dF9rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTg5OC1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfY29udGV4dF9yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMuYzoxODk5Olx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMuYy0xOTAwLVx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfY29udGV4dF9ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMDI2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2NvbnRleHRzX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMuYy0yMDI3LVx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19jb250ZXh0c19yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMuYzoyMDI4Olx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMuYy0yMDI5LVx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfY29udGV4dHNfZ3JvdXBzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9Mjc3MT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19rZGFtb25kX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMuYy0yNzcyLVx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19rZGFtb25kX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy5jOjI3NzM6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy5jLTI3NzQtXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19rZGFtb25kX2dyb3Vwcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI5MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfa2RhbW9uZHNfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy5jLTI5MTctXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX2tkYW1vbmRzX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy5jOjI5MTg6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy5jLTI5MTktXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19rZGFtb25kc19ncm91cHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yOTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3VpX2Rpcl9rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjk2Ny1cdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfdWlfZGlyX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy5jOjI5Njg6XHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy5jLTI5NjktXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc191aV9kaXJfZ3JvdXBzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTUwMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBLZXJuZWwgQ29kZSoqCgpPa2F5LCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoaWNoIERBTU9OIGZ1bmN0aW9uIGlzIHRoZSBrZXkgb25lIHRvIGZvY3VzIG9uIGhlcmUsIHRoZSBvbmUgdGhhdCYjMzk7cyB0aGUgbW9zdCByZWxldmFudCB0byB0aGlzIHBhcnRpY3VsYXIgaXNzdWUuIEkmIzM5O3ZlIGdvdCBhIGZldyBjYW5kaWRhdGVzIGJvdW5jaW5nIGFyb3VuZDogYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AsIHRoYXQgYGRhbW9zX2FkanVzdF9xdW90YWAgZnVuY3Rpb24sIG1heWJlIGBkYW1vbl9zeXNmc19jbWRfcmVxdWVzdGAsIG9yIGlzIGl0IHRoYXQgYGRhbW9uX3N5c2ZzX3N0YXRlX3N0b3JlYCBmdW5jdGlvbj8gSSBzdXNwZWN0IGl04oCZcyBnb2luZyB0byBpbnZvbHZlIHN5c2ZzIGludGVyYWN0aW9uLCBnaXZlbiB0aGUgb3B0aW9ucy4KCk15IGluc3RpbmN0IGlzIGxlYW5pbmcgdG93YXJkcyB0aGF0IGBzdGF0ZV9zdG9yZWAgZnVuY3Rpb24sIHBhcnRpY3VsYXJseSBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIFRpbWUgdG8gY2hlY2sgdGhlIHNvdXJjZSBjb2RlLiBMZXQgbWUganVtcCBpbnRvIGBtbS9kYW1vbi9zeXNmcy5jYCBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiBgc3RhdGVfc3RvcmVgLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzdGF0ZSBjaGFuZ2VzIGFyZSBoYW5kbGVkLCBhbmQgd2hhdCB0aGF0IHBhcnQgb2YgdGhlIGtlcm5lbCBkb2VzLiBIb3BlZnVsbHksIHRoZSBpbXBsZW1lbnRhdGlvbiB0aGVyZSB3aWxsIGJlIGRlc2NyaXB0aXZlIGVub3VnaCB0byBjbGFyaWZ5IHRoZSBleGFjdCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0ZV9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYz0yNjM2PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yNjc1LVxubW0vZGFtb24vc3lzZnMuYzoyNjc2OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG5tbS9kYW1vbi9zeXNmcy5jLTI2NzctXHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTk1NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoJiMzOTtzIEltcGFjdCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyBpdHMgcG90ZW50aWFsIGVmZmVjdHMuIEZpcnN0LCBgc3RhdGVfc3RvcmVgIOKAkyB0aGF0JiMzOTtzIHRoZSBjcnVjaWFsIHN5c2ZzIHdyaXRlIGhhbmRsZXIuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IGZvciBzdGFydGluZywgc3RvcHBpbmcsIG9yIGNvbW1pdHRpbmcgdGhlIGtkYW1vbmRzLCB0aGUgY29yZSBvZiB0aGUgREFNT04gZnVuY3Rpb25hbGl0eSwgdXNpbmcga2V5d29yZHMgbGlrZSAmIzM0O29uJiMzNDssICYjMzQ7b2ZmJiMzNDssIGFuZCAmIzM0O2NvbW1pdCYjMzQ7LgoKTm93LCB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgYWN0dWFsbHkgbW9kaWZpZWQgaW4gdGhpcyBwYXRjaCBpcyBgZGFtb3NfYWRqdXN0X3F1b3RhYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIExldCYjMzk7cyBjb25maXJtIGlmIGBkYW1vc19hZGp1c3RfcXVvdGFgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYyB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuIFllcywgaXQgaXM6IGBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKWAuIFRoZSBuZXh0IGtleSBjb25uZWN0aW9uIEkmIzM5O20gc2Vla2luZyBpcyBob3cgYGRhbW9zX2FkanVzdF9xdW90YWAgaXMgY2FsbGVkLiBBaCwgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgY2FsbHMgYGRhbW9zX2FkanVzdF9xdW90YShjLCBzKWAuIFRoaXMgY2xlYXJseSBkZW1vbnN0cmF0ZXMgaG93IHRoZSB0d28gcGllY2VzIGFyZSByZWxhdGVkLgoKU28sIGxldCYjMzk7cyBleHBsb3JlIGBrZGFtb25kX2ZuYCBub3cuIExldCYjMzk7cyBzZWUgaG93IGBrZGFtb25kX2ZuYCBpcyBzdGFydGVkOiBgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpYC4gSSBuZWVkIHRvIHNlZSBob3cgaXQmIzM5O3MgaW5pdGlhdGVkLCByaWdodD8gTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBgZGFtb25fc3RhcnRgIGtpY2tzIGl0IG9mZiEgTGV0JiMzOTtzIGV4YW1pbmUgYGRhbW9uX3N0YXJ0YCB0byB1bmRlcnN0YW5kIHRoZSBrZGFtb25kIGV4ZWN1dGlvbiBmbG93IGFuZCBob3cgdGhlIGNoYW5nZXMgdG8gYGRhbW9zX2FkanVzdF9xdW90YWAgd2lsbCBiZSB1dGlsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTA4Mz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTA4LSAqIEluIGRldGFpbCwgYWxsIERBTU9OIEFQSSBjYWxsZXJzIGRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiBmb3IgaW5pdGlhbFxubW0vZGFtb24vY29yZS5jOjExMDk6ICogc2V0dXAgb2YgZGFtb25fY3R4IGJlZm9yZSBjYWxsaW5nIGRhbW9uX3N0YXJ0KCkuICBTb21lIG9mIHRoZSBBUEkgY2FsbGVyc1xubW0vZGFtb24vY29yZS5jLTExMTAtICogYWxzbyBpbmRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiB2aWEgZGFtb25fY2FsbCgpIC1cdTAwM2UgZGFtb25fY29tbWl0KCkgZm9yXG4tLVxubW0vZGFtb24vY29yZS5jPTIwMzk9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDQxLS8qXG5tbS9kYW1vbi9jb3JlLmM6MjA0MjogKiBfX2RhbW9uX3N0YXJ0KCkgLSBTdGFydHMgbW9uaXRvcmluZyB3aXRoIGdpdmVuIGNvbnRleHQuXG5tbS9kYW1vbi9jb3JlLmMtMjA0My0gKiBAY3R4Olx0bW9uaXRvcmluZyBjb250ZXh0XG4tLVxubW0vZGFtb24vY29yZS5jLTIwNDgtICovXG5tbS9kYW1vbi9jb3JlLmM6MjA0OTpzdGF0aWMgaW50IF9fZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTIwNTAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDcxLS8qKlxubW0vZGFtb24vY29yZS5jOjIwNzI6ICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXG5tbS9kYW1vbi9jb3JlLmMtMjA3My0gKiBAY3R4czpcdGFuIGFycmF5IG9mIHRoZSBwb2ludGVycyBmb3IgY29udGV4dHMgdG8gc3RhcnQgbW9uaXRvcmluZ1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDgwLSAqIEBleGNsdXNpdmUgaXMgdHJ1ZSBhbmQgYSBncm91cCBvZiB0aHJlYWRzIHRoYXQgY3JlYXRlZCBieSBvdGhlclxubW0vZGFtb24vY29yZS5jOjIwODE6ICogJiMzOTtkYW1vbl9zdGFydCgpJiMzOTsgY2FsbCBpcyBjdXJyZW50bHkgcnVubmluZywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYnV0XG5tbS9kYW1vbi9jb3JlLmMtMjA4Mi0gKiByZXR1cm5zIC1FQlVTWS5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA4NS0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDg2OmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxubW0vZGFtb24vY29yZS5jLTIwODcte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMTExLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY3R4czsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL2NvcmUuYzoyMTEyOlx0XHRlcnIgPSBfX2RhbW9uX3N0YXJ0KGN0eHNbaV0pO1xubW0vZGFtb24vY29yZS5jLTIxMTMtXHRcdGlmIChlcnIpXG4tLVxubW0vZGFtb24vY29yZS5jPTIyMTQ9aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMjYyLSAqXG5tbS9kYW1vbi9jb3JlLmM6MjI2MzogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxubW0vZGFtb24vY29yZS5jLTIyNjQtICogQGN0eCBoYXMgc3VjY2VlZGVkLiAgT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIGNvdWxkIGZhbGwgaW50byBhbiBpbmRlZmluaXRlXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz00MDE9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF90dXJuKGJvb2wgb24pXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy00MTMtXG5tbS9kYW1vbi9scnVfc29ydC5jOjQxNDpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTQxNS1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTMyND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0zMzYtXG5tbS9kYW1vbi9yZWNsYWltLmM6MzM3Olx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0zMzgtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3N0YXQuYz0yMDA9c3RhdGljIGludCBkYW1vbl9zdGF0X3N0YXJ0KHZvaWQpXG4tLVxubW0vZGFtb24vc3RhdC5jLTIxMi1cdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi9zdGF0LmM6MjEzOlx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2ZGFtb25fc3RhdF9jb250ZXh0LCAxLCB0cnVlKTtcbm1tL2RhbW9uL3N0YXQuYy0yMTQtXHRpZiAoZXJyKSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNTE1PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI1MzktXHR9XG5tbS9kYW1vbi9zeXNmcy5jOjI1NDA6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIGZhbHNlKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjU0MS1cdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM2OTIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgREFNT04gSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG1tL2RhbW9uL2NvcmUuY2AgYW5kIHNwZWNpZmljYWxseSBhdCB0aGUgY2hhbmdlcyBhcm91bmQgYGRhbW9zX2FkanVzdF9xdW90YWAuIFRoaXMgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2Ugc3RhdGljIGZ1bmN0aW9ucyBpbiBrZXJuZWwgY29kZSBvZnRlbiBnZXQgaW5saW5lZCwgZXNwZWNpYWxseSBpZiB0aGV5JiMzOTtyZSBzbWFsbCBvciBoYXZlIGEgc2luZ2xlIGNhbGxlci4gQnV0IGBkYW1vc19hZGp1c3RfcXVvdGFgIHNlZW1zIGNvbXBsZXggZW5vdWdoLCB3aXRoIHRoYXQgbG9vcCBhbmQgc2NvcmUgaGlzdG9ncmFtLCB0aGF0IGl0IG1pZ2h0IGJlIGtlcHQgYXMgYSBkaXN0aW5jdCBzeW1ib2wuIE15IGd1dCBmZWVsaW5nIGlzIHRoaXMgaXMgbm90IGlubGluZWQuCgpUaGUga2V5IHBvaW50cyBhcmU6IGBkYW1vbl9zdGFydGAgKG9yIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCksIHdoaWNoIGlzIG5vbi1zdGF0aWMsIGBkYW1vc19hZGp1c3RfcXVvdGFgLCB0aGUgbW9kaWZpZWQgc3RhdGljIGZ1bmN0aW9uLCBhbmQgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AsIHdoaWNoIGNhbGxzIGl0LiBUaGlzIGdpdmVzIG1lIGEgcHJldHR5IHRpZ2h0IGZvY3VzIGZvciBhbmFseXppbmcgdGhlIGNoYW5nZXMuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIG5lY2Vzc2FyeSBLY29uZmlnIG9wdGlvbnMuIEZpcnN0LCBgbW0vTWFrZWZpbGVgIGhhcyBgb2JqLSQoQ09ORklHX0RBTU9OKSAmIzQzOz0gZGFtb24vYCwgYW5kIHRoZW4gYG1tL2RhbW9uL01ha2VmaWxlYCBoYXMgYG9iai15IDo9IGNvcmUub2AuIFNvIHdlIGRlZmluaXRlbHkgbmVlZCBgQ09ORklHX0RBTU9OYCBmb3IgYGNvcmUub2AgdG8gYmUgYnVpbHQuIEJ1dCB3aGF0IGRvZXMgKnRoYXQqIGRlcGVuZCBvbj8gTG9va2luZyBpbiBgbW0vZGFtb24vS2NvbmZpZ2AsIEkgc2VlOgoKYGBga2NvbmZpZwpjb25maWcgREFNT04KCWJvb2wgJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmsmIzM0OwoJaGVscAoJICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IG1vbml0b3JzIGRhdGEgYWNjZXNzZXMgb2YgZ2l2ZW4gYWRkcmVzcwoJICBzcGFjZXMuLi4KYGBgCgpObyBkZXBlbmRlbmNpZXMgZGlyZWN0bHkgbGlzdGVkIGZvciBgQ09ORklHX0RBTU9OYC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKQnV0IHRoZW4gSSBzdGFydCB0aGlua2luZyBhYm91dCB3aGF0IGludGVyZmFjZXMgYXJlIGV4cG9zZWQgYW5kIGhvdyB0aGUgc2NoZW1lcyBhY3R1YWxseSB3b3JrLiBEQU1PUyAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZy1iYXNlZCBPcGVyYXRpb24gU2NoZW1lcykgaXMgY2xlYXJseSBwYXJ0IG9mIGBjb3JlLmNgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBhY3Rpb24gaXMuCgpUbyBjb25maWd1cmUgc2NoZW1lcyBmcm9tIHVzZXJzcGFjZSwgSSYjMzk7bGwgbmVlZCBgQ09ORklHX0RBTU9OX1NZU0ZTYCwgd2hpY2ggbGV0cyBtZSBjb25maWd1cmUgc2NoZW1lcywgcXVvdGFzLCBnb2FscywgYW5kIHNvIG9uLiBOb3csIGBDT05GSUdfREFNT05fU1lTRlNgIGRvZXMgaGF2ZSBkZXBlbmRlbmNpZXM6IGl0IGRlcGVuZHMgb24gYERBTU9OICZhbXA7JmFtcDsgU1lTRlNgLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLgoKRmluYWxseSwgbG9va2luZyBhdCB0aGUgY29kZSwgaW4gYGRhbW9zX2FkanVzdF9xdW90YWAsIEkgc2VlIGBpZiAoIWMtJmd0O29wcy5nZXRfc2NoZW1lX3Njb3JlKSByZXR1cm47YC4gU28gdGhlIGNvZGUgY2xlYXJseSB1c2VzIG9wZXJhdGlvbiBjYWxsYmFja3MuIFdoZXJlIGlzIGBnZXRfc2NoZW1lX3Njb3JlYCBjb21pbmcgZnJvbT8gSSBuZWVkIHRvIHNlYXJjaCBmb3IgdGhhdC4gSSYjMzk7bSBnb2luZyB0byBncmVwIGZvciBgZ2V0X3NjaGVtZV9zY29yZWAgcmlnaHQgYXdheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X3NjaGVtZV9zY29yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0yNDEzPXN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDE3LVxubW0vZGFtb24vY29yZS5jOjI0MTg6XHRpZiAoIXJldCB8fCAhZGFtb3NfcXVvdGFfaXNfc2V0KFx1MDAyNnMtXHUwMDNlcXVvdGEpIHx8ICFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxubW0vZGFtb24vY29yZS5jLTI0MTktXHRcdHJldHVybiByZXQ7XG5tbS9kYW1vbi9jb3JlLmMtMjQyMC1cbm1tL2RhbW9uL2NvcmUuYzoyNDIxOlx0cmV0dXJuIGMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcykgXHUwMDNlPSBzLVx1MDAzZXF1b3RhLm1pbl9zY29yZTtcbm1tL2RhbW9uL2NvcmUuYy0yNDIyLX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI5MD1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzI0LVxubW0vZGFtb24vY29yZS5jOjMzMjU6XHRpZiAoIWMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXG5tbS9kYW1vbi9jb3JlLmMtMzMyNi1cdFx0cmV0dXJuO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzM5LVx0XHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi9jb3JlLmM6MzM0MDpcdFx0XHRzY29yZSA9IGMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcyk7XG5tbS9kYW1vbi9jb3JlLmMtMzM0MS1cdFx0XHRjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXSAmIzQzOz1cbi0tXG5tbS9kYW1vbi9wYWRkci5jPTQ2Mj1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl9wYV9pbml0Y2FsbCh2b2lkKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDczLVx0XHQuYXBwbHlfc2NoZW1lID0gZGFtb25fcGFfYXBwbHlfc2NoZW1lLFxubW0vZGFtb24vcGFkZHIuYzo0NzQ6XHRcdC5nZXRfc2NoZW1lX3Njb3JlID0gZGFtb25fcGFfc2NoZW1lX3Njb3JlLFxubW0vZGFtb24vcGFkZHIuYy00NzUtXHR9O1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9MTE0Mz1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl92YV9pbml0Y2FsbCh2b2lkKVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMTE1NS1cdFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3ZhX2FwcGx5X3NjaGVtZSxcbm1tL2RhbW9uL3ZhZGRyLmM6MTE1NjpcdFx0LmdldF9zY2hlbWVfc2NvcmUgPSBkYW1vbl92YV9zY2hlbWVfc2NvcmUsXG5tbS9kYW1vbi92YWRkci5jLTExNTctXHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTQwMgoJCQkJCQkJb3V0cHV0OiAxNTYKCQkJCQkJCXRob3VnaHRzOiAzNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gQ29uZmlndXJhdGlvbiBBbmFseXNpcyBhbmQgVG9vbCBDYWxsIFByZXBhcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGp1c3QgdHJhY2VkIHdoZXJlIGBnZXRfc2NoZW1lX3Njb3JlYCBnZXRzIGRlZmluZWQuIEl0IGxvb2tzIGxpa2UgYG1tL2RhbW9uL3BhZGRyLmNgIHByb3ZpZGVzIGBkYW1vbl9wYV9zY2hlbWVfc2NvcmVgIHdoZW4gYENPTkZJR19EQU1PTl9QQUREUmAgaXMgZW5hYmxlZCwgYW5kIGBtbS9kYW1vbi92YWRkci5jYCBwcm92aWRlcyBgZGFtb25fdmFfc2NoZW1lX3Njb3JlYCB3aGVuIGBDT05GSUdfREFNT05fVkFERFJgIGlzIGVuYWJsZWQuIFVzZXItc3BhY2UgaW50ZXJhY3Rpb24gcmVxdWlyZXMgYENPTkZJR19EQU1PTl9TWVNGU2AuCgpJJiMzOTttIHNlZWluZyB0aGF0IGJvdGggYERBTU9OX1BBRERSYCBhbmQgYERBTU9OX1ZBRERSYCBkZXBlbmQgb24gYERBTU9OYCBhbmQgYE1NVWAsIHdoaWxlIGBEQU1PTl9TWVNGU2AgZGVwZW5kcyBvbiBgREFNT05gIGFuZCBgU1lTRlNgLiBDb25zZXF1ZW50bHksIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgREFNT04gZnVuY3Rpb25hbGl0eSwgSSYjMzk7bSBnb2luZyB0byBzZXQgdGhlc2UgZm91ciBjb25maWdzOiBgREFNT05gLCBgREFNT05fUEFERFJgLCBgREFNT05fVkFERFJgLCBhbmQgYERBTU9OX1NZU0ZTYC4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgdGhlIHByb21wdCYjMzk7cyByZXF1aXJlbWVudHMgYXJlIG1ldC4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgdHJ1ZSwgZ29vZC4gV2UgaGF2ZSBub24tdWJpcXVpdG91cyBrZXJuZWwgZnVuY3Rpb25zIGRlZmluZWQgYXMgYEZvY3VzU3ltYm9sc2AsIHdoaWNoIGFyZSBhcHByb3ByaWF0ZS4gQW5kLCBhcyBkaXNjdXNzZWQgYWJvdmUsIEkmIzM5O3ZlIGdvdCB0aGUgYEVuYWJsZUNvbmZpZ3NgIHNldCBjb3JyZWN0bHkuIEkmIzM5O3ZlIGFsc28gdmVyaWZpZWQgdGhlIHJlcXVpcmVtZW50cyB3aXRoIHRoZSBwcm92aWRlZCBzb3VyY2UgY29kZSBhbmQgYnVpbGQgY29uZmlnLiBJdCBzZWVtcyBsaWtlIGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vc19hZGp1c3RfcXVvdGEmIzM0OywKICAgICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PUyBxdW90YSBhZGp1c3RtZW50IGxvZ2ljIGluIG1tL2RhbW9uL2NvcmUuYyBieSBhZGRpbmcgYW4gZWFybHkgcmV0dXJuIGluIGRhbW9zX2FkanVzdF9xdW90YSgpIHdoZW4gZWZmZWN0aXZlIHF1b3RhIHNpemUgKGVzeikgaXMgemVyby4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UsIGFsdGVyaW5nIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgcmVnaW9uIHNjb3JpbmcgYmVoYXZpb3Igd2hlbiBxdW90YSBpcyBleGhhdXN0ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3NfYWRqdXN0X3F1b3RhJiMzNDssCiAgICAmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zdGFydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT1MgcXVvdGEgYWRqdXN0bWVudCBsb2dpYyBpbiBtbS9kYW1vbi9jb3JlLmMgYnkgYWRkaW5nIGFuIGVhcmx5IHJldHVybiBpbiBkYW1vc19hZGp1c3RfcXVvdGEoKSB3aGVuIGVmZmVjdGl2ZSBxdW90YSBzaXplIChlc3opIGlzIHplcm8uIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLCBhbHRlcmluZyB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIHJlZ2lvbiBzY29yaW5nIGJlaGF2aW9yIHdoZW4gcXVvdGEgaXMgZXhoYXVzdGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhbiBlYXJseSByZXR1cm4gY2hlY2sgKGBpZiAocXVvdGEtXHUwMDNlZXN6ID09IDApIHJldHVybjtgKSBpbiBgZGFtb3NfYWRqdXN0X3F1b3RhKClgIGluIGBtbS9kYW1vbi9jb3JlLmNgIHdoZW4gdGhlIGVmZmVjdGl2ZSBxdW90YSBzaXplIGlzIHplcm8uXG5cblRoZSBjaGVjayBpbnNwZWN0cyBgcXVvdGEtXHUwMDNlZXN6YCwgd2hpY2ggaXMgZGV0ZXJtaW5pc3RpY2FsbHkgaW5pdGlhbGl6ZWQgYW5kIGNvbXB1dGVkIGJ5IHRoZSBEQU1PTiBzdWJzeXN0ZW0gKHZpYSBgZGFtb3NfcXVvdGFfaW5pdCgpYCBhbmQgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoKWApLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBubyBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcyBvciBidWZmZXJzIHVuaW5pdGlhbGl6ZWQsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMuXG5cbkJlY2F1c2UgdGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDBjNTA1YjNmMzgwNmRlYThmMDEzMmU4YmJjMDJmYmExNTkwY2EwNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDEyIDEzOjQxOjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jCmluZGV4IDA2Y2YyYWI3ZTk3ZDcuLjhmZTE1ZjE3YmU4MGYgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTMzMjQsNiAmIzQzOzMzMjQsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKQogCiAJaWYgKCFjLSZndDtvcHMuZ2V0X3NjaGVtZV9zY29yZSkKIAkJcmV0dXJuOwomIzQzOwlpZiAocXVvdGEtJmd0O2VzeiA9PSAwKQomIzQzOwkJcmV0dXJuOwogCiAJLyogRmlsbCB1cCB0aGUgc2NvcmUgaGlzdG9ncmFtICovCiAJbWVtc2V0KGMtJmd0O3JlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtLCAwLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBPcHRpbWl6YXRpb24gVGhvdWdodHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGEgREFNT04gcGF0Y2gsIHNwZWNpZmljYWxseSBpbiBgbW0vZGFtb24vY29yZS5jYCwgYXJvdW5kIGxpbmUgMzMyNC4gVGhlIHJlbGV2YW50IHBhcnQgaXMgaW4gdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uLiBJIHNlZSBhIG5ldyBjb25kaXRpb25hbCBjaGVjayBoZXJlLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHNob3J0LWNpcmN1aXRpbmcgdGhlIHF1b3RhIGFkanVzdG1lbnQgaWYgYHF1b3RhLSZndDtlc3pgIGlzIHplcm8uCgpOb3csIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIGBxdW90YS0mZ3Q7ZXN6YCBsaWtlbHkgcmVwcmVzZW50cyB0aGUgZWZmZWN0aXZlIHNpemUsIG9yIHBlcmhhcHMgdGhlIGV4dGVudCBzaXplLCBhc3NvY2lhdGVkIHdpdGggdGhlIHF1b3RhLiBUaGUgcHJpb3IgbG9naWMgd2FzIGNhbGxpbmcgYGMtJmd0O29wcy5nZXRfc2NoZW1lX3Njb3JlYCByZWdhcmRsZXNzLCBhbmQgcHJlc3VtYWJseSB0aGF0IGZ1bmN0aW9uIGRvZXMgc29tZXRoaW5nIHdpdGggdGhhdCBzaXplLiBTbywgdGhlIHF1ZXN0aW9uIGJlY29tZXM6IHdoeSB0aGUgYWRkZWQgY2hlY2s/CgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBhbiBlc3ogb2YgemVybyBwcm9iYWJseSBtZWFucyB0aGUgcXVvdGEgaXMgaW52YWxpZCBvciB1bmluaXRpYWxpemVkLiBDYWxsaW5nIGBnZXRfc2NoZW1lX3Njb3JlYCBvbiBzb21ldGhpbmcgd2l0aCBubyBlZmZlY3RpdmUgc2l6ZSBjb3VsZCBsZWFkIHRvIGEgZGl2aWRlLWJ5LXplcm8sIG9yIHVuZGVmaW5lZCBiZWhhdmlvciwgb3Igc2ltcGx5IHJldHVybiBnYXJiYWdlIGRhdGEuIEl0JiMzOTtzIGEgY2xhc3NpYyBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgbW92ZS4KCk15IG5leHQgbGluZSBvZiB0aG91Z2h0IGlzIHRvIGNoZWNrIHdoYXQgYGdldF9zY2hlbWVfc2NvcmVgIGRvZXMgd2l0aCB0aGUgZXN6LiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb2RlIGNhbGxzIGBnZXRfc2NoZW1lX3Njb3JlYCBldmVuIGlmIGVzeiBpcyB6ZXJvLiBBbmQsIGFsc28gd2h5IGl0JiMzOTtzIG5vdCBjaGVja2VkIGVhcmxpZXIsIGlmIHRoZSB6ZXJvIGNhc2UgaXMgaW52YWxpZC4gUGVyaGFwcyB0aGlzIGNvbmRpdGlvbmFsIHdhcyBtaXNzZWQgZHVyaW5nIGluaXRpYWwgZGV2ZWxvcG1lbnQsIG9yIHRoZSBlZGdlIGNhc2Ugd2FzbiYjMzk7dCBjb25zaWRlcmVkIGF0IHRoYXQgdGltZS4KCkl0JiMzOTtzIGEgZ29vZCBvcHRpbWl6YXRpb24sIGxpa2VseSBhdm9pZGluZyB1bm5lY2Vzc2FyeSBjYWxjdWxhdGlvbnMgYW5kIHBvdGVudGlhbCBlcnJvcnMgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgZW1wdHkgb3IgdW5pbml0aWFsaXplZCBxdW90YSBlbnRyaWVzLiBBIGNsZWFuIGFuZCBzZW5zaWJsZSBhZGRpdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzMTA6XHRcdGlmICghdGltZV9pbl9yYW5nZV9vcGVuKGppZmZpZXMsIHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSxcbjMzMTE6XHRcdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSAmIzQzO1xuMzMxMjpcdFx0XHRcdFx0bXNlY3NfdG9famlmZmllcyhxdW90YS1cdTAwM2VyZXNldF9pbnRlcnZhbCkpKSB7XG4zMzEzOlx0XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMzMxNDpcdFx0XHRcdHMtXHUwMDNlc3RhdC5xdF9leGNlZWRzJiM0MzsmIzQzOztcbjMzMTU6XHRcdFx0cXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9zeiAmIzQzOz0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zejtcbjMzMTY6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcbjMzMTc6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiA9IDA7XG4zMzE4Olx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxuMzMxOTpcdFx0XHRcdGNhY2hlZF9lc3ogPSBxdW90YS1cdTAwM2Vlc3o7XG4zMzIwOlx0XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4zMzIxOlx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBxdW90YS1cdTAwM2Vlc3ogIT0gY2FjaGVkX2VzeilcbjMzMjI6XHRcdFx0XHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xuMzMyMzpcdFx0fVxuMzMyNDpcdFxuMzMyNTpcdFx0aWYgKCFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuMzMyNjpcdFx0XHRyZXR1cm47XG4zMzI3Olx0XHRpZiAocXVvdGEtXHUwMDNlZXN6ID09IDApXG4zMzI4Olx0XHRcdHJldHVybjtcbjMzMjk6XHRcbjMzMzA6XHRcdC8qIEZpbGwgdXAgdGhlIHNjb3JlIGhpc3RvZ3JhbSAqL1xuMzMzMTpcdFx0bWVtc2V0KGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0sIDAsXG4zMzMyOlx0XHRcdFx0c2l6ZW9mKCpjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKSAqXG4zMzMzOlx0XHRcdFx0KERBTU9TX01BWF9TQ09SRSAmIzQzOyAxKSk7XG4zMzM0Olx0XHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xuMzMzNTpcdFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuMzMzNjpcdFx0XHRcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXG4zMzM3Olx0XHRcdFx0XHRjb250aW51ZTtcbjMzMzg6XHRcdFx0XHRpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKVxuMzMzOTpcdFx0XHRcdFx0Y29udGludWU7XG4zMzQwOlx0XHRcdFx0c2NvcmUgPSBjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKGMsIHIsIHMpO1xuMzM0MTpcdFx0XHRcdGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1bc2NvcmVdICYjNDM7PVxuMzM0MjpcdFx0XHRcdFx0ZGFtb25fc3pfcmVnaW9uKHIpO1xuMzM0MzpcdFx0XHRcdGlmIChzY29yZSBcdTAwM2UgbWF4X3Njb3JlKVxuMzM0NDpcdFx0XHRcdFx0bWF4X3Njb3JlID0gc2NvcmU7XG4zMzQ1Olx0XHRcdH1cbjMzNDY6XHRcdH1cbjMzNDc6XHRcbjMzNDg6XHRcdC8qIFNldCB0aGUgbWluIHNjb3JlIGxpbWl0ICovXG4zMzQ5Olx0XHRmb3IgKGN1bXVsYXRlZF9zeiA9IDAsIHNjb3JlID0gbWF4X3Njb3JlOyA7IHNjb3JlLS0pIHtcbjMzNTA6XHRcdFx0Y3VtdWxhdGVkX3N6ICYjNDM7PSBjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXTtcbjMzNTE6XHRcdFx0aWYgKGN1bXVsYXRlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzeiB8fCAhc2NvcmUpXG4zMzUyOlx0XHRcdFx0YnJlYWs7XG4zMzUzOlx0XHR9XG4zMzU0Olx0XHRxdW90YS1cdTAwM2VtaW5fc2NvcmUgPSBzY29yZTtcbjMzNTU6XHR9XG4zMzU2Olx0XG4zMzU3Olx0c3RhdGljIHZvaWQgZGFtb3NfdHJhY2Vfc3RhdChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4zMzU4Olx0e1xuMzM1OTpcdFx0dW5zaWduZWQgaW50IGNpZHggPSAwLCBzaWR4ID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ4NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiBJJiMzOTttIHRoZSBvbmUgaGF2aW5nIHRoZXNlIHRob3VnaHRzLgoKKipEaXZpbmcgaW50byBgZGFtb3NfYWRqdXN0X3F1b3RhYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHN0YXJ0IG9mIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBmdW5jdGlvbiBub3cuIEl0JiMzOTtzIHRpbWUgdG8gYW5hbHl6ZSB0aGUgZm91bmRhdGlvbiwgdGhlIHZlcnkgb3BlbmluZyBvZiB0aGUgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGVudHJ5IHBvaW50IGFuZCBpbml0aWFsIHNldHVwLiBXaGVyZSBkb2VzIHRoaXMgcHJvY2VzcyBiZWdpbj8gV2hhdCBhcmUgdGhlIGltbWVkaWF0ZSB2YXJpYWJsZXMgb3IgaW5wdXRzIHRoYXQgYXJlIGJlaW5nIGRlY2xhcmVkIG9yIGV4YW1pbmVkIGF0IHRoZSB2ZXJ5IG91dHNldD8gV2hhdCBpcyB0aGUgaW5pdGlhbCBpbnRlbnRpb24gb2YgdGhpcyBjaHVuayBvZiBjb2RlPyBJIGFtIGxvb2tpbmcgYXQgdGhlIGluaXRpYWwgc3RhdGUgYW5kIGhvdyB0aGF0IGFmZmVjdHMgYW55IGZ1dHVyZSBkZXZlbG9wbWVudHMuIEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSBoaWdoLWxldmVsIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBhcyBhIHdob2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzI5MDpcdHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4zMjkxOlx0e1xuMzI5MjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4zMjkzOlx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuMzI5NDpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbjMyOTU6XHRcdHVuc2lnbmVkIGxvbmcgY3VtdWxhdGVkX3N6LCBjYWNoZWRfZXN6O1xuMzI5NjpcdFx0dW5zaWduZWQgaW50IHNjb3JlLCBtYXhfc2NvcmUgPSAwO1xuMzI5NzpcdFxuMzI5ODpcdFx0aWYgKCFxdW90YS1cdTAwM2VtcyBcdTAwMjZcdTAwMjYgIXF1b3RhLVx1MDAzZXN6IFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnF1b3RhLVx1MDAzZWdvYWxzKSlcbjMyOTk6XHRcdFx0cmV0dXJuO1xuMzMwMDpcdFxuMzMwMTpcdFx0LyogRmlyc3QgY2hhcmdlIHdpbmRvdyAqL1xuMzMwMjpcdFx0aWYgKCFxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX3N6IFx1MDAyNlx1MDAyNiAhcXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tKSB7XG4zMzAzOlx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XG4zMzA0Olx0XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4zMzA1Olx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxuMzMwNjpcdFx0XHRcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XG4zMzA3Olx0XHR9XG4zMzA4Olx0XG4zMzA5Olx0XHQvKiBOZXcgY2hhcmdlIHdpbmRvdyBzdGFydHMgKi9cbjMzMTA6XHRcdGlmICghdGltZV9pbl9yYW5nZV9vcGVuKGppZmZpZXMsIHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSxcbjMzMTE6XHRcdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSAmIzQzO1xuMzMxMjpcdFx0XHRcdFx0bXNlY3NfdG9famlmZmllcyhxdW90YS1cdTAwM2VyZXNldF9pbnRlcnZhbCkpKSB7XG4zMzEzOlx0XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMzMxNDpcdFx0XHRcdHMtXHUwMDNlc3RhdC5xdF9leGNlZWRzJiM0MzsmIzQzOztcbjMzMTU6XHRcdFx0cXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9zeiAmIzQzOz0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zejtcbjMzMTY6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcbjMzMTc6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiA9IDA7XG4zMzE4Olx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxuMzMxOTpcdFx0XHRcdGNhY2hlZF9lc3ogPSBxdW90YS1cdTAwM2Vlc3o7XG4zMzIwOlx0XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4zMzIxOlx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBxdW90YS1cdTAwM2Vlc3ogIT0gY2FjaGVkX2VzeilcbjMzMjI6XHRcdFx0XHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xuMzMyMzpcdFx0fVxuMzMyNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzEzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUXVvdGEgQWRqdXN0bWVudCBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB3aGF0IGhhcHBlbnMgd2hlbiBgcXVvdGEtJmd0O2VzemAgKGVmZmVjdGl2ZSBzaXplKSBpcyB6ZXJvLiBMaW5lIDMzNDkgaGFzIHRoaXMgbG9vcCBjYWxjdWxhdGluZyB0aGUgbWluaW11bSBzY29yZToKCmBgYGMKCQkvKiBTZXQgdGhlIG1pbiBzY29yZSBsaW1pdCAqLwoJCWZvciAoY3VtdWxhdGVkX3N6ID0gMCwgc2NvcmUgPSBtYXhfc2NvcmU7IDsgc2NvcmUtLSkgewoJCQljdW11bGF0ZWRfc3ogJiM0Mzs9IGMtJmd0O3JlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXTsKCQkJaWYgKGN1bXVsYXRlZF9zeiAmZ3Q7PSBxdW90YS0mZ3Q7ZXN6IHx8ICFzY29yZSkKCQkJCWJyZWFrOwoJCX0KCQlxdW90YS0mZ3Q7bWluX3Njb3JlID0gc2NvcmU7CmBgYAoKTXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtXYWl0LCB3aHkgdGhlIGVhcmx5IHJldHVybiBpZiBgcXVvdGEtJmd0O2VzemAgaXMgemVybz8mIzM0OyBEaWQgdGhleSBhZGQgdGhhdCBqdXN0IHRvIG9wdGltaXplLCBhc3N1bWluZyB0aGUgaGlzdG9ncmFtIGNhbGN1bGF0aW9uIGlzIHVubmVjZXNzYXJ5IHdoZW4gdGhlIGVmZmVjdGl2ZSBzaXplIGlzIHplcm8/IE9yIG1heWJlIHRoZSBjb25kaXRpb24gYGN1bXVsYXRlZF9zeiAmZ3Q7PSAwYCBpcyBhbHdheXMgdHJ1ZSBpZiB0aGUgZWZmZWN0aXZlIHNpemUgaXMgemVybyB3aGljaCBtZWFucyBzY29yZSB3aWxsIGVxdWFsIGBtYXhfc2NvcmVgIGFuZCB0aGVuIGBtaW5fc2NvcmVgIGFsc28gZXF1YWxzIGBtYXhfc2NvcmVgLCB3aGljaCBpcyBmaW5lPyBPciBwZXJoYXBzIGFuIGVmZmVjdGl2ZSBzaXplIG9mIHplcm8gbWVhbnMgdGhlIHF1b3RhIGlzIGVzc2VudGlhbGx5IGNsb3NlZCwgc28gbm8gZnVydGhlciBwcm9jZXNzaW5nIGlzIHJlcXVpcmVkLgoKT2theSwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gIERvZXMgdGhpcyBwYXRjaCBldmVuIHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGFueSB3YXk/IFRpbWUgdG8gdGhpbmsgYWJvdXQgd2hhdCBLTVNBTiB3b3VsZCByZXBvcnQuIEkga25vdyBpdCBmbGFncyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvbiB0aGUgc3RhY2ssIGhlYXAsIG9yIHdpdGhpbiBwYWdlIGFsbG9jYXRpb25zLCBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGxlYWtzLgoKTm93LCBsZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyoqIE5vcGUsIGp1c3QgYW4gZWFybHkgcmV0dXJuIGluIGBkYW1vc19hZGp1c3RfcXVvdGEoKWAgd2hlbiBgcXVvdGEtJmd0O2VzeiA9PSAwYC4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm8sIGBxdW90YS0mZ3Q7ZXN6YCBpcyBpbml0aWFsaXplZDsgaXQmIzM5O3MgZWl0aGVyIHNldCBieSBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAgb3IgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgcXVvdGEgaXMgc2V0IHVwLgozLiAgKipBbGxvY2F0aW9ucy9jb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLgo0LiAgKipNb2RpZmllZCBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzPyoqIE5vcGUuCgpBbHJpZ2h0LCBidXQgd2FpdC4uLiByZXR1cm5pbmcgZWFybHkuLi4gRG9lcyB0aGlzIG1lYW4gdGhlIGNvZGUgY291bGQgcG90ZW50aWFsbHkgbGVhdmUgYHF1b3RhLSZndDttaW5fc2NvcmVgIHVuaW5pdGlhbGl6ZWQgaW4gc29tZSBjYXNlcz8gTmVlZCB0byBjb25maXJtIHdoZXJlIGBxdW90YS0mZ3Q7bWluX3Njb3JlYCBpcyAqYWN0dWFsbHkqIHVzZWQuIFRoYXQmIzM5O3MgdGhlIGtleSBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pbl9zY29yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0yNDEzPXN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDIwLVxubW0vZGFtb24vY29yZS5jOjI0MjE6XHRyZXR1cm4gYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKSBcdTAwM2U9IHMtXHUwMDNlcXVvdGEubWluX3Njb3JlO1xubW0vZGFtb24vY29yZS5jLTI0MjItfVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMjkwPXN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMzNTMtXHR9XG5tbS9kYW1vbi9jb3JlLmM6MzM1NDpcdHF1b3RhLVx1MDAzZW1pbl9zY29yZSA9IHNjb3JlO1xubW0vZGFtb24vY29yZS5jLTMzNTUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDk2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgcy0mZ3Q7cXVvdGFgIG9yIGp1c3QgcGxhaW4gYHNgIGlzIGluaXRpYWxpemVkLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGRlYnVnZ2luZyBzdGVwLiBHb3R0YSB0cmFjZSBiYWNrIHRvIHRoZSBzb3VyY2UgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdmFsdWVzIGFyZSBnZXR0aW5nIHNldC4gVGhpcyBpcyBjcnVjaWFsIGZvciBwaW5wb2ludGluZyB0aGUgb3JpZ2luIG9mIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIEkgbWlnaHQgYmUgc2VlaW5nIGxhdGVyIG9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUmIzM5O3MgZ290IHRvIHNheSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fbmV3X3NjaGVtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz03MzI9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03NDQtXG5tbS9kYW1vbi9jb3JlLmM6NzQ1OnN0cnVjdCBkYW1vcyAqZGFtb25fbmV3X3NjaGVtZShzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sXG5tbS9kYW1vbi9jb3JlLmMtNzQ2LVx0XHRcdGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbixcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTU2Mz1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTgxLVx0XHRcdGNvbnRpbnVlO1xubW0vZGFtb24vY29yZS5jOjE1ODI6XHRcdG5ld19zY2hlbWUgPSBkYW1vbl9uZXdfc2NoZW1lKFx1MDAyNnNyY19zY2hlbWUtXHUwMDNlcGF0dGVybixcbm1tL2RhbW9uL2NvcmUuYy0xNTgzLVx0XHRcdFx0c3JjX3NjaGVtZS1cdTAwM2VhY3Rpb24sXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0xODg9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fbHJ1X3NvcnRfbmV3X3NjaGVtZShcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTE5NS1cbm1tL2RhbW9uL2xydV9zb3J0LmM6MTk2Olx0cmV0dXJuIGRhbW9uX25ld19zY2hlbWUoXG5tbS9kYW1vbi9scnVfc29ydC5jLTE5Ny1cdFx0XHQvKiBmaW5kIHRoZSBwYXR0ZXJuLCBhbmQgKi9cbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTY3PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3JlY2xhaW1fbmV3X3NjaGVtZSh1bnNpZ25lZCBsb25nIGFnZ3JfaW50ZXJ2YWwpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTE4MC1cbm1tL2RhbW9uL3JlY2xhaW0uYzoxODE6XHRyZXR1cm4gZGFtb25fbmV3X3NjaGVtZShcbm1tL2RhbW9uL3JlY2xhaW0uYy0xODItXHRcdFx0XHUwMDI2cGF0dGVybixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjk3ND1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9zeXNmc19ta19zY2hlbWUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMTEtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzAxMjpcdHNjaGVtZSA9IGRhbW9uX25ld19zY2hlbWUoXHUwMDI2cGF0dGVybiwgc3lzZnNfc2NoZW1lLVx1MDAzZWFjdGlvbixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDEzLVx0XHRcdHN5c2ZzX3NjaGVtZS1cdTAwM2VhcHBseV9pbnRlcnZhbF91cywgXHUwMDI2cXVvdGEsIFx1MDAyNndtYXJrcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE5NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgREFNT04gSW5pdGlhbGl6YXRpb24gaW4gbW0vZGFtb24vY29yZS5jKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBEQU1PTiBpbml0aWFsaXplcywgcGFydGljdWxhcmx5IHRoZSBxdW90YSBzeXN0ZW0gYW5kIGhvdyBuZXcgc2NoZW1lcyBhcmUgaW50ZWdyYXRlZC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgbW0vZGFtb24vY29yZS5jYC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiB0d28gc3BlY2lmaWMgZnVuY3Rpb25zOiBgZGFtb3NfcXVvdGFfaW5pdGAg4oCTIHRoYXQmIzM5O2xsIGhhbmRsZSB0aGUgYWxsb2NhdGlvbiBhbmQgc2V0dXAgb2YgdGhlIHF1b3RhIG1lY2hhbmlzbSwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIGVuZm9yY2luZyBsaW1pdHMuIFRoZW4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIG5ldyBzY2hlbWVzIGFyZSBwbHVnZ2VkIGludG8gdGhlIHdob2xlIHNldHVwLCBzbyBJJiMzOTtsbCBhbHNvIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBgZGFtb25fbmV3X3NjaGVtZWAuIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucywgb3IgcG90ZW50aWFsIGluZWZmaWNpZW5jaWVzLCBlc3BlY2lhbGx5IGdpdmVuIGhvdyBEQU1PTiBoYXMgZXZvbHZlZC4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcyBkdXJpbmcgdGhlIGVhcmx5IHN0YWdlcy4gR290dGEgZW5zdXJlIHRoZSBxdW90YSBpcyB3b3JraW5nIGFzIGRlc2lnbmVkIGFuZCB0aGUgbmV3IHNjaGVtZXMgZG9uJiMzOTt0IGhhdmUgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcyNTpcdFxuIDcyNjpcdHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2dvYWxzX2VtcHR5KHN0cnVjdCBkYW1vc19xdW90YSAqcSlcbiA3Mjc6XHR7XG4gNzI4Olx0XHRyZXR1cm4gbGlzdF9lbXB0eShcdTAwMjZxLVx1MDAzZWdvYWxzKTtcbiA3Mjk6XHR9XG4gNzMwOlx0XG4gNzMxOlx0LyogaW5pdGlhbGl6ZSBmaWVsZHMgb2YgQHF1b3RhIHRoYXQgbm9ybWFsbHkgQVBJIHVzZXJzIHdvdWxkbiYjMzk7dCBzZXQgKi9cbiA3MzI6XHRzdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG4gNzMzOlx0e1xuIDczNDpcdFx0cXVvdGEtXHUwMDNlZXN6ID0gMDtcbiA3MzU6XHRcdHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogPSAwO1xuIDczNjpcdFx0cXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9ucyA9IDA7XG4gNzM3Olx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX3N6ID0gMDtcbiA3Mzg6XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IDA7XG4gNzM5Olx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xuIDc0MDpcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4gNzQxOlx0XHRxdW90YS1cdTAwM2Vlc3pfYnAgPSAwO1xuIDc0MjpcdFx0cmV0dXJuIHF1b3RhO1xuIDc0MzpcdH1cbiA3NDQ6XHRcbiA3NDU6XHRzdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxuIDc0NjpcdFx0XHRcdGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbixcbiA3NDc6XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzLFxuIDc0ODpcdFx0XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4gNzQ5Olx0XHRcdFx0c3RydWN0IGRhbW9zX3dhdGVybWFya3MgKndtYXJrcyxcbiA3NTA6XHRcdFx0XHRpbnQgdGFyZ2V0X25pZClcbiA3NTE6XHR7XG4gNzUyOlx0XHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcbiA3NTM6XHRcbiA3NTQ6XHRcdHNjaGVtZSA9IGttYWxsb2Nfb2JqKCpzY2hlbWUpO1xuIDc1NTpcdFx0aWYgKCFzY2hlbWUpXG4gNzU2Olx0XHRcdHJldHVybiBOVUxMO1xuIDc1NzpcdFx0c2NoZW1lLVx1MDAzZXBhdHRlcm4gPSAqcGF0dGVybjtcbiA3NTg6XHRcdHNjaGVtZS1cdTAwM2VhY3Rpb24gPSBhY3Rpb247XG4gNzU5Olx0XHRzY2hlbWUtXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMgPSBhcHBseV9pbnRlcnZhbF91cztcbiA3NjA6XHRcdC8qXG4gNzYxOlx0XHQgKiBuZXh0X2FwcGx5X3NpcyB3aWxsIGJlIHNldCB3aGVuIGtkYW1vbmQgc3RhcnRzLiAgV2hpbGUga2RhbW9uZCBpc1xuIDc2MjpcdFx0ICogcnVubmluZywgaXQgd2lsbCBhbHNvIHVwZGF0ZWQgd2hlbiBpdCBpcyBhZGRlZCB0byB0aGUgREFNT04gY29udGV4dCxcbiA3NjM6XHRcdCAqIG9yIGRhbW9uX2F0dHJzIGFyZSB1cGRhdGVkLlxuIDc2NDpcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwOTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBkaXZlIGludG8gdGhpcy4gTGV0JiMzOTtzIHNlZSBob3cgSSBjYW4gc3VtbWFyaXplIHRoaXM6CgoqKkFuYWx5emluZyB0aGUgTmV4dCBTdGVwcyBpbiBgZGFtb25fbmV3X3NjaGVtZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBmaWd1cmUgb3V0IHdoYXQgdGhlIG5leHQgbW92ZXMgYXJlIGluIHRoaXMgYGRhbW9uX25ld19zY2hlbWVgLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIGFuZCBwb3RlbnRpYWwgcm9hZGJsb2NrcyBvZiBlYWNoIHN0ZXAsIGFzc2Vzc2luZyBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIG9iamVjdGl2ZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGRlcGVuZGVuY2llcyBhbmQgdHJ5aW5nIHRvIGFudGljaXBhdGUgYW55IGVkZ2UgY2FzZXMgb3IgdW5leHBlY3RlZCBvdXRjb21lcyB0aGF0IG1pZ2h0IHJlcXVpcmUgYWRqdXN0bWVudHMuIE15IGZvY3VzIGlzIG9uIHRoZSBtb3N0IGVmZmljaWVudCBhbmQgcm9idXN0IHBhdGggZm9yd2FyZCwgd2hpbGUgYWxzbyBiZWluZyBtaW5kZnVsIG9mIHBvdGVudGlhbCByaXNrcy4gVGltZSB0byBwdXQgb24gbXkgdGhpbmtpbmcgY2FwIGFuZCBzdHJhdGVnaXplIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzY1Olx0XHRzY2hlbWUtXHUwMDNlbmV4dF9hcHBseV9zaXMgPSAwO1xuIDc2NjpcdFx0c2NoZW1lLVx1MDAzZXdhbGtfY29tcGxldGVkID0gZmFsc2U7XG4gNzY3Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzY2hlbWUtXHUwMDNlY29yZV9maWx0ZXJzKTtcbiA3Njg6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnNjaGVtZS1cdTAwM2VvcHNfZmlsdGVycyk7XG4gNzY5Olx0XHRzY2hlbWUtXHUwMDNlc3RhdCA9IChzdHJ1Y3QgZGFtb3Nfc3RhdCl7fTtcbiA3NzA6XHRcdHNjaGVtZS1cdTAwM2VtYXhfbnJfc25hcHNob3RzID0gMDtcbiA3NzE6XHRcdHNjaGVtZS1cdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xuIDc3MjpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2NoZW1lLVx1MDAzZWxpc3QpO1xuIDc3MzpcdFxuIDc3NDpcdFx0c2NoZW1lLVx1MDAzZXF1b3RhID0gKihkYW1vc19xdW90YV9pbml0KHF1b3RhKSk7XG4gNzc1Olx0XHQvKiBxdW90YS5nb2FscyBzaG91bGQgYmUgc2VwYXJhdGVseSBzZXQgYnkgY2FsbGVyICovXG4gNzc2Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzY2hlbWUtXHUwMDNlcXVvdGEuZ29hbHMpO1xuIDc3NzpcdFxuIDc3ODpcdFx0c2NoZW1lLVx1MDAzZXdtYXJrcyA9ICp3bWFya3M7XG4gNzc5Olx0XHRzY2hlbWUtXHUwMDNld21hcmtzLmFjdGl2YXRlZCA9IHRydWU7XG4gNzgwOlx0XG4gNzgxOlx0XHRzY2hlbWUtXHUwMDNlbWlncmF0ZV9kZXN0cyA9IChzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyl7fTtcbiA3ODI6XHRcdHNjaGVtZS1cdTAwM2V0YXJnZXRfbmlkID0gdGFyZ2V0X25pZDtcbiA3ODM6XHRcbiA3ODQ6XHRcdHJldHVybiBzY2hlbWU7XG4gNzg1Olx0fVxuIDc4NjpcdFxuIDc4NzpcdHN0YXRpYyB2b2lkIGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiA3ODg6XHR7XG4gNzg5Olx0XHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbCA9IGN0eC1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgP1xuIDc5MDpcdFx0XHRjdHgtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsIDogMTtcbiA3OTE6XHRcdHVuc2lnbmVkIGxvbmcgYXBwbHlfaW50ZXJ2YWwgPSBzLVx1MDAzZWFwcGx5X2ludGVydmFsX3VzID9cbiA3OTI6XHRcdFx0cy1cdTAwM2VhcHBseV9pbnRlcnZhbF91cyA6IGN0eC1cdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsO1xuIDc5MzpcdFxuIDc5NDpcdFx0cy1cdTAwM2VuZXh0X2FwcGx5X3NpcyA9IGN0eC1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscyAmIzQzO1xuIDc5NTpcdFx0XHRhcHBseV9pbnRlcnZhbCAvIHNhbXBsZV9pbnRlcnZhbDtcbiA3OTY6XHR9XG4gNzk3Olx0XG4gNzk4Olx0dm9pZCBkYW1vbl9hZGRfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxuIDc5OTpcdHtcbiA4MDA6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cy1cdTAwM2VsaXN0LCBcdTAwMjZjdHgtXHUwMDNlc2NoZW1lcyk7XG4gODAxOlx0XHRkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMocywgY3R4KTtcbiA4MDI6XHR9XG4gODAzOlx0XG4gODA0Olx0c3RhdGljIHZvaWQgZGFtb25fZGVsX3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MjgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgbWluZCYjMzk7cyBidXp6aW5nIOKAkyBJJiMzOTttIGluIGBkYW1vbl9zeXNmc19ta19zY2hlbWVgIGFuZCBJJiMzOTt2ZSBoaXQgYSBwb2ludCB3aGVyZSBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBxdW90YWAgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQuIEl0JiMzOTtzIGEga2V5IHBhcnQgb2YgdGhpcyB3aG9sZSBzY2hlbWUsIHNvIEkgY2FuJiMzOTt0IGp1c3QgZ2xvc3Mgb3ZlciBpdC4gVGltZSB0byBkaXZlIGJhY2sgaW50byB0aGUgY29kZSBhbmQgdmVyaWZ5IGl0cyBzZXR1cC4gR290dGEgY2hhc2UgdGhpcyBkb3duIGFuZCBtYWtlIHN1cmUgaXQmIzM5O3MgaGFuZGxlZCBwcm9wZXJseSB3aXRoaW4gdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTc0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5NzQ6XHRzdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9zeXNmc19ta19zY2hlbWUoXG4yOTc1Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnN5c2ZzX3NjaGVtZSlcbjI5NzY6XHR7XG4yOTc3Olx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfYWNjZXNzX3BhdHRlcm4gKmFjY2Vzc19wYXR0ZXJuID1cbjI5Nzg6XHRcdFx0c3lzZnNfc2NoZW1lLVx1MDAzZWFjY2Vzc19wYXR0ZXJuO1xuMjk3OTpcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqc3lzZnNfcXVvdGFzID0gc3lzZnNfc2NoZW1lLVx1MDAzZXF1b3RhcztcbjI5ODA6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc193ZWlnaHRzICpzeXNmc193ZWlnaHRzID0gc3lzZnNfcXVvdGFzLVx1MDAzZXdlaWdodHM7XG4yOTgxOlx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfd2F0ZXJtYXJrcyAqc3lzZnNfd21hcmtzID0gc3lzZnNfc2NoZW1lLVx1MDAzZXdhdGVybWFya3M7XG4yOTgyOlx0XHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcbjI5ODM6XHRcdGludCBlcnI7XG4yOTg0Olx0XG4yOTg1Olx0XHRzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gcGF0dGVybiA9IHtcbjI5ODY6XHRcdFx0Lm1pbl9zel9yZWdpb24gPSBhY2Nlc3NfcGF0dGVybi1cdTAwM2Vzei1cdTAwM2VtaW4sXG4yOTg3Olx0XHRcdC5tYXhfc3pfcmVnaW9uID0gYWNjZXNzX3BhdHRlcm4tXHUwMDNlc3otXHUwMDNlbWF4LFxuMjk4ODpcdFx0XHQubWluX25yX2FjY2Vzc2VzID0gYWNjZXNzX3BhdHRlcm4tXHUwMDNlbnJfYWNjZXNzZXMtXHUwMDNlbWluLFxuMjk4OTpcdFx0XHQubWF4X25yX2FjY2Vzc2VzID0gYWNjZXNzX3BhdHRlcm4tXHUwMDNlbnJfYWNjZXNzZXMtXHUwMDNlbWF4LFxuMjk5MDpcdFx0XHQubWluX2FnZV9yZWdpb24gPSBhY2Nlc3NfcGF0dGVybi1cdTAwM2VhZ2UtXHUwMDNlbWluLFxuMjk5MTpcdFx0XHQubWF4X2FnZV9yZWdpb24gPSBhY2Nlc3NfcGF0dGVybi1cdTAwM2VhZ2UtXHUwMDNlbWF4LFxuMjk5MjpcdFx0fTtcbjI5OTM6XHRcdHN0cnVjdCBkYW1vc19xdW90YSBxdW90YSA9IHtcbjI5OTQ6XHRcdFx0Lm1zID0gc3lzZnNfcXVvdGFzLVx1MDAzZW1zLFxuMjk5NTpcdFx0XHQuc3ogPSBzeXNmc19xdW90YXMtXHUwMDNlc3osXG4yOTk2Olx0XHRcdC5yZXNldF9pbnRlcnZhbCA9IHN5c2ZzX3F1b3Rhcy1cdTAwM2VyZXNldF9pbnRlcnZhbF9tcyxcbjI5OTc6XHRcdFx0LndlaWdodF9zeiA9IHN5c2ZzX3dlaWdodHMtXHUwMDNlc3osXG4yOTk4Olx0XHRcdC53ZWlnaHRfbnJfYWNjZXNzZXMgPSBzeXNmc193ZWlnaHRzLVx1MDAzZW5yX2FjY2Vzc2VzLFxuMjk5OTpcdFx0XHQud2VpZ2h0X2FnZSA9IHN5c2ZzX3dlaWdodHMtXHUwMDNlYWdlLFxuMzAwMDpcdFx0XHQuZ29hbF90dW5lciA9IHN5c2ZzX3F1b3Rhcy1cdTAwM2Vnb2FsX3R1bmVyLFxuMzAwMTpcdFx0XHQuZmFpbF9jaGFyZ2VfbnVtID0gc3lzZnNfcXVvdGFzLVx1MDAzZWZhaWxfY2hhcmdlX251bSxcbjMwMDI6XHRcdFx0LmZhaWxfY2hhcmdlX2Rlbm9tID0gc3lzZnNfcXVvdGFzLVx1MDAzZWZhaWxfY2hhcmdlX2Rlbm9tLFxuMzAwMzpcdFx0fTtcbjMwMDQ6XHRcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcyA9IHtcbjMwMDU6XHRcdFx0Lm1ldHJpYyA9IHN5c2ZzX3dtYXJrcy1cdTAwM2VtZXRyaWMsXG4zMDA2Olx0XHRcdC5pbnRlcnZhbCA9IHN5c2ZzX3dtYXJrcy1cdTAwM2VpbnRlcnZhbF91cyxcbjMwMDc6XHRcdFx0LmhpZ2ggPSBzeXNmc193bWFya3MtXHUwMDNlaGlnaCxcbjMwMDg6XHRcdFx0Lm1pZCA9IHN5c2ZzX3dtYXJrcy1cdTAwM2VtaWQsXG4zMDA5Olx0XHRcdC5sb3cgPSBzeXNmc193bWFya3MtXHUwMDNlbG93LFxuMzAxMDpcdFx0fTtcbjMwMTE6XHRcbjMwMTI6XHRcdHNjaGVtZSA9IGRhbW9uX25ld19zY2hlbWUoXHUwMDI2cGF0dGVybiwgc3lzZnNfc2NoZW1lLVx1MDAzZWFjdGlvbixcbjMwMTM6XHRcdFx0XHRzeXNmc19zY2hlbWUtXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMsIFx1MDAyNnF1b3RhLCBcdTAwMjZ3bWFya3MsXG4zMDE0Olx0XHRcdFx0c3lzZnNfc2NoZW1lLVx1MDAzZXRhcmdldF9uaWQpO1xuMzAxNTpcdFx0aWYgKCFzY2hlbWUpXG4zMDE2Olx0XHRcdHJldHVybiBOVUxMO1xuMzAxNzpcdFxuMzAxODpcdFx0ZXJyID0gZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKHN5c2ZzX3F1b3Rhcy1cdTAwM2Vnb2FscywgXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk2MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgVGhvdWdodHMgb24gYGRhbW9zX3F1b3RhYCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgc3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0geyAuLi4gfWAgY29uc3RydWN0LiAgUmlnaHQsIHRoZSBkZXNpZ25hdGVkIGluaXRpYWxpemVyLiBJdCYjMzk7cyBpbml0aWFsaXppbmcgYWxsIHRoZSB1bnNwZWNpZmllZCBmaWVsZHMgdG8gemVyby4gIEFuZCB0aGF0IGluY2x1ZGVzIGBtaW5fc2NvcmVgISBJbnRlcmVzdGluZy4gVGhpcyBjb3VsZCBoYXZlIHNvbWUgaW1wbGljYXRpb25zIGZ1cnRoZXIgZG93biB0aGUgbGluZSwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgdGhhdCBwbGF5cyBvdXQuICBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgYmVoYXZpb3IgaXMgY29uc2lzdGVudCBhbmQgZXhwZWN0ZWQgdGhyb3VnaG91dCB0aGUgY29kZS4KCkFscmlnaHQsIG5vdyBJIHNob3VsZCBxdWlja2x5IGNoZWNrIHdoZXJlIGVsc2UgdGhpcyBgcXVvdGFgIHN0cnVjdCBpcyB1c2VkLiBMb29rcyBsaWtlIEkgc2hvdWxkIGZvY3VzIG9uIGByZWNsYWltLmNgIGFuZCBgbHJ1X3NvcnQuY2AgdG8gc2VlIGhvdyB0aG9zZSBpbml0aWFsIHplcm9zIGFyZSBiZWluZyBoYW5kbGVkLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiB0aGUgaW1wbGljaXQgemVyb2luZyBpcyByZWxpZWQgdXBvbiwgb3IgaWYgaXQgbWlnaHQgbGVhZCB0byBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbnMgb2YgdGhlIGNhbGxlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vcmVjbGFpbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjc6XHRzdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9yZWNsYWltX25ld19zY2hlbWUodW5zaWduZWQgbG9uZyBhZ2dyX2ludGVydmFsKVxuIDE2ODpcdHtcbiAxNjk6XHRcdHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiBwYXR0ZXJuID0ge1xuIDE3MDpcdFx0XHQvKiBGaW5kIHJlZ2lvbnMgaGF2aW5nIFBBR0VfU0laRSBvciBsYXJnZXIgc2l6ZSAqL1xuIDE3MTpcdFx0XHQubWluX3N6X3JlZ2lvbiA9IFBBR0VfU0laRSxcbiAxNzI6XHRcdFx0Lm1heF9zel9yZWdpb24gPSBVTE9OR19NQVgsXG4gMTczOlx0XHRcdC8qIGFuZCBub3QgYWNjZXNzZWQgYXQgYWxsICovXG4gMTc0Olx0XHRcdC5taW5fbnJfYWNjZXNzZXMgPSAwLFxuIDE3NTpcdFx0XHQubWF4X25yX2FjY2Vzc2VzID0gMCxcbiAxNzY6XHRcdFx0LyogZm9yIG1pbl9hZ2Ugb3IgbW9yZSBtaWNyby1zZWNvbmRzICovXG4gMTc3Olx0XHRcdC5taW5fYWdlX3JlZ2lvbiA9IG1pbl9hZ2UgLyBhZ2dyX2ludGVydmFsLFxuIDE3ODpcdFx0XHQubWF4X2FnZV9yZWdpb24gPSBVSU5UX01BWCxcbiAxNzk6XHRcdH07XG4gMTgwOlx0XG4gMTgxOlx0XHRyZXR1cm4gZGFtb25fbmV3X3NjaGVtZShcbiAxODI6XHRcdFx0XHRcdTAwMjZwYXR0ZXJuLFxuIDE4MzpcdFx0XHRcdC8qIHBhZ2Ugb3V0IHRob3NlLCBhcyBzb29uIGFzIGZvdW5kICovXG4gMTg0Olx0XHRcdFx0REFNT1NfUEFHRU9VVCxcbiAxODU6XHRcdFx0XHQvKiBmb3IgZWFjaCBhZ2dyZWdhdGlvbiBpbnRlcnZhbCAqL1xuIDE4NjpcdFx0XHRcdDAsXG4gMTg3Olx0XHRcdFx0LyogdW5kZXIgdGhlIHF1b3RhLiAqL1xuIDE4ODpcdFx0XHRcdFx1MDAyNmRhbW9uX3JlY2xhaW1fcXVvdGEsXG4gMTg5Olx0XHRcdFx0LyogKERlKWFjdGl2YXRlIHRoaXMgYWNjb3JkaW5nIHRvIHRoZSB3YXRlcm1hcmtzLiAqL1xuIDE5MDpcdFx0XHRcdFx1MDAyNmRhbW9uX3JlY2xhaW1fd21hcmtzLFxuIDE5MTpcdFx0XHRcdE5VTUFfTk9fTk9ERSk7XG4gMTkyOlx0fVxuIDE5MzpcdFxuIDE5NDpcdHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4gMTk1Olx0e1xuIDE5NjpcdFx0c3RydWN0IGRhbW9uX2N0eCAqcGFyYW1fY3R4O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzA3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBkYW1vbl9yZWNsYWltX3F1b3RhYCoqCgpPa2F5LCBzbyBgZGFtb25fcmVjbGFpbV9xdW90YWAgaXMgYSBnbG9iYWwgdmFyaWFibGUsIGFuZCBpdCYjMzk7cyBpbml0aWFsaXplZCBzdGF0aWNhbGx5LiBUaGF0IHRlbGxzIG1lIGEgZmV3IHRoaW5ncyByaWdodCBvZmYgdGhlIGJhdDogaXRzIHNjb3BlIGlzIGltcG9ydGFudCwgcG90ZW50aWFsbHkgaW5mbHVlbmNpbmcgYmVoYXZpb3IgYWNyb3NzIHRoZSBlbnRpcmUgc3lzdGVtIGlmIGl0JiMzOTtzIG5vdCBoYW5kbGVkIGNhcmVmdWxseS4gU3RhdGljIGluaXRpYWxpemF0aW9uIHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBzZXQgYXQgY29tcGlsZSB0aW1lIG9yIGR1cmluZyB2ZXJ5IGVhcmx5IGJvb3QsIHdoaWNoIGNvdWxkIGdpdmUgdXMgaW5zaWdodHMgaW50byB0aGUgc3lzdGVtJiMzOTtzIGJhc2VsaW5lIG1lbW9yeSByZWNsYWltIHBvbGljeS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgdmFyaWFibGUgaXMgYWN0dWFsbHkgKnVzZWQqLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGxydV9zb3J0LmNgLiBHaXZlbiB0aGUgbmFtZSwgSSBzdXNwZWN0IHRoaXMgdmFyaWFibGUgbWlnaHQgYmUgbGlua2VkIHRvIGhvdyB0aGUgTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBjYWNoZSBpcyBtYW5hZ2VkIGFuZCBob3cgbWVtb3J5IHJlY2xhaW0gaXMgcHJpb3JpdGl6ZWQgd2l0aGluIGl0LiBQZXJoYXBzIGl0JiMzOTtzIGEgdGhyZXNob2xkLCBhIGZsYWcsIG9yIGEgcXVvdGEgcmVsYXRlZCB0byB0aGUgYW1vdW50IG9mIG1lbW9yeSB0aGF0IGNhbiBiZSByZWNsYWltZWQgdXNpbmcgYSBwYXJ0aWN1bGFyIHBvbGljeS4gRXhhbWluaW5nIHRoaXMgc291cmNlIGZpbGUgd2lsbCB0ZWxsIHRoZSB0YWxlLiBJdCBtYXkgd2VsbCBiZSB0aGUgbGluY2hwaW4gaW4gaG93IGFnZ3Jlc3NpdmVseSBtZW1vcnkgaXMgZnJlZWQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vbHJ1X3NvcnQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTg4Olx0c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fbHJ1X3NvcnRfbmV3X3NjaGVtZShcbiAxODk6XHRcdFx0c3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLCBlbnVtIGRhbW9zX2FjdGlvbiBhY3Rpb24pXG4gMTkwOlx0e1xuIDE5MTpcdFx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0gZGFtb25fbHJ1X3NvcnRfcXVvdGE7XG4gMTkyOlx0XG4gMTkzOlx0XHQvKiBVc2UgaGFsZiBvZiB0b3RhbCBxdW90YSBmb3IgaG90L2NvbGQgcGFnZXMgc29ydGluZyAqL1xuIDE5NDpcdFx0cXVvdGEubXMgPSBxdW90YS5tcyAvIDI7XG4gMTk1Olx0XG4gMTk2Olx0XHRyZXR1cm4gZGFtb25fbmV3X3NjaGVtZShcbiAxOTc6XHRcdFx0XHQvKiBmaW5kIHRoZSBwYXR0ZXJuLCBhbmQgKi9cbiAxOTg6XHRcdFx0XHRwYXR0ZXJuLFxuIDE5OTpcdFx0XHRcdC8qIChkZSlwcmlvcml0aXplIG9uIExSVS1saXN0cyAqL1xuIDIwMDpcdFx0XHRcdGFjdGlvbixcbiAyMDE6XHRcdFx0XHQvKiBmb3IgZWFjaCBhZ2dyZWdhdGlvbiBpbnRlcnZhbCAqL1xuIDIwMjpcdFx0XHRcdDAsXG4gMjAzOlx0XHRcdFx0LyogdW5kZXIgdGhlIHF1b3RhLiAqL1xuIDIwNDpcdFx0XHRcdFx1MDAyNnF1b3RhLFxuIDIwNTpcdFx0XHRcdC8qIChEZSlhY3RpdmF0ZSB0aGlzIGFjY29yZGluZyB0byB0aGUgd2F0ZXJtYXJrcy4gKi9cbiAyMDY6XHRcdFx0XHRcdTAwMjZkYW1vbl9scnVfc29ydF93bWFya3MsXG4gMjA3Olx0XHRcdFx0TlVNQV9OT19OT0RFKTtcbiAyMDg6XHR9XG4gMjA5Olx0XG4gMjEwOlx0LyogQ3JlYXRlIGEgREFNT04tYmFzZWQgb3BlcmF0aW9uIHNjaGVtZSBmb3IgaG90IG1lbW9yeSByZWdpb25zICovXG4gMjExOlx0c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fbHJ1X3NvcnRfbmV3X2hvdF9zY2hlbWUodW5zaWduZWQgaW50IGhvdF90aHJlcylcbiAyMTI6XHR7XG4gMjEzOlx0XHRzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gcGF0dGVybiA9IGRhbW9uX2xydV9zb3J0X3N0dWJfcGF0dGVybjtcbiAyMTQ6XHRcbiAyMTU6XHRcdHBhdHRlcm4ubWluX25yX2FjY2Vzc2VzID0gaG90X3RocmVzO1xuIDIxNjpcdFx0cmV0dXJuIGRhbW9uX2xydV9zb3J0X25ld19zY2hlbWUoXHUwMDI2cGF0dGVybiwgREFNT1NfTFJVX1BSSU8pO1xuIDIxNzpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0OTUKCQkJCQkJCW91dHB1dDogMjA0CgkJCQkJCQl0aG91Z2h0czogNzQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBkYW1vc19hZGp1c3RfcXVvdGFgIGNvZGUgc25pcHBldC4gRmlyc3QsIEkgc2VlIHRoZSBlYXJseSByZXR1cm4gY29uZGl0aW9uczogaWYgYGMtJmd0O29wcy5nZXRfc2NoZW1lX3Njb3JlYCBpc24mIzM5O3QgZGVmaW5lZCwgb3IgaWYgYHF1b3RhLSZndDtlc3pgICh0aGUgZWZmZWN0aXZlIHNpemUpIGlzIHplcm8sIHRoZSBmdW5jdGlvbiBqdXN0IGV4aXRzLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzOiB3aHkgd2FzIHRoaXMgcGF0Y2ggd3JpdHRlbj8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8KClRoZSBjb3JlIG9mIHRoZSBsb2dpYyBsaWVzIHdpdGhpbiB0aGUgYHF1b3RhLSZndDtlc3ogPT0gMGAgYnJhbmNoLCBzcGVjaWZpY2FsbHkgYXQgbGluZSAzMzQ5LiBUaGUgY29kZSBjYWxjdWxhdGVzIGEgYG1pbl9zY29yZWAgYmFzZWQgb24gdGhlIGhpc3RvZ3JhbS4gSG93ZXZlciwgaWYgYHF1b3RhLSZndDtlc3pgIGlzIHplcm8sIHRoZSBsb29wIGJyZWFrcyBpbW1lZGlhdGVseS4gYGN1bXVsYXRlZF9zemAgd2hpY2ggaXMgdW5zaWduZWQgbG9uZywgc3RhcnRzIGF0IDAsIGFuZCB0aGUgZmlyc3QgaXRlcmF0aW9uIGNhdXNlcyBgY3VtdWxhdGVkX3N6ICZndDs9IDBgIGFsd2F5cyB0byBiZSB0cnVlLiBUaGlzIHNldHMgYHF1b3RhLSZndDttaW5fc2NvcmVgIHRvIHRoZSBgbWF4X3Njb3JlYC4KCk15IGZpcnN0IHRob3VnaHQ6IGlmIGBlc3pgIGlzIHplcm8sIHdlJiMzOTtyZSBlc3NlbnRpYWxseSBzYXlpbmcgbm8gcXVvdGEgc2hvdWxkIGJlIGFwcGxpZWQuICBCdXQgaXMgdGhpcyBhbiBvcHRpbWl6YXRpb24/IFBlcmhhcHMgaWYgdGhlIGVmZmVjdGl2ZSBzaXplIGlzIHplcm8sIHdlIHNraXAgdGhlIGhpc3RvZ3JhbSBjYWxjdWxhdGlvbiBhbHRvZ2V0aGVyLCB3aGljaCBpcyBhIGNvbW1vbiBvcHRpbWl6YXRpb24uIE9yIG1heWJlIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiBgbWluX3Njb3JlYCBpcyBubyBsb25nZXIgcmVsZXZhbnQsIG9yIGlzIGp1c3QgaW5pdGlhbGl6ZWQgdG8gYG1heF9zY29yZWAgc28gdGhlIHZhbHVlIGRvZXNuJiMzOTt0IG1hdHRlci4KCk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSAqdW5pbml0aWFsaXplZCBtZW1vcnkqIHZ1bG5lcmFiaWxpdGllcz8gVGhpcyBpcyB3aGVyZSBJIGhhdmUgdG8gYXBwbHkgbXkgS01TQU4ga25vd2xlZGdlLiBMZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIGNyaXRlcmlhOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZT8qKiBOb3BlLiBObyBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBwYXNzZWQgdG8gdXNlciBzcGFjZSBoZXJlLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogVGhlIGNvbmRpdGlvbiBpcyBiYXNlZCBvbiBgcXVvdGEtJmd0O2VzemAsIHdoaWNoIGlzIHBhcnQgb2YgYHN0cnVjdCBkYW1vc19xdW90YWAuIFRoaXMgc3RydWN0dXJlIGlzICpmdWxseSBpbml0aWFsaXplZCog4oCTIGl0IGdldHMgYSB6ZXJvIHZhbHVlIGR1cmluZyBpbml0aWFsaXphdGlvbiAoYGRhbW9zX3F1b3RhX2luaXRgKSwgb3IgZ2V0cyBhIGNvbXB1dGVkIHZhbHVlIGR1cmluZyBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAuIFNvLCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBoZXJlLgozLiAgKipEYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uPyoqIE5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIGhlcmUgdGhhdCBjb3VsZCBoYXZlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGxhdGVyIGFjY2Vzc2VkLgo0LiAgKipCb3VuZHMgY2hlY2tzLCBsZW5ndGhzPyoqIE5vIGJ1ZmZlciBhY2Nlc3Nlcy4gTm90aGluZyBoZXJlIHRvIGNhdXNlIGEgbGVhayBvZiB1bmluaXRpYWxpemVkIGRhdGEuCgpTbywgYmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2F5aW5nIHRoaXMgcGF0Y2ggZG9lcyBOT1QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlIGFyZSBubyBtZW1vcnkgc2FmZXR5IGJ1Z3MgaGVyZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYXQgcGxheSBoZXJlLgoKTm93LCBsZXQmIzM5O3Mgc29saWRpZnkgdGhlIHJhdGlvbmFsZSBmb3IgYE5lZWRzS01TQU4gPSBmYWxzZWA6CgoqICAgKipLQVNBTi9TdGFuZGFyZCBTYW5pdGl6ZXJzOioqIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgb3B0aW1pemF0aW9uLCBhbiBlYXJseSByZXR1cm4gd2hlbiBlZmZlY3RpdmUgc2NoZW1lIHNpemUgaXMgemVyby4gSXQgaW50cm9kdWNlcyBubyBtZW1vcnkgc2FmZXR5IGJ1Z3MgKE9PQiwgVUFGLCBldGMuKQoqICAgKipLTVNBTjoqKiBLTVNBTiBsb29rcyBmb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIGBxdW90YS0mZ3Q7ZXN6YCBpcyAqZXhwbGljaXRseSBpbml0aWFsaXplZCosIGFuZCB0aGUgZWFybHkgcmV0dXJuIGRvZXNuJiMzOTt0IHNraXAgcmVxdWlyZWQgaW5pdGlhbGl6YXRpb24gdGhhdCB3b3VsZCByZXN1bHQgaW4gcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UuCgpUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXNuJiMzOTt0IG5lZWRlZC4KCkxldCYjMzk7cyBzdWJtaXQgdGhpcyByZWFzb25pbmcgd2l0aCB0aGUgJiMzNDtzZXQtcmVzdWx0cyYjMzQ7IGNvbW1hbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gZWFybHkgcmV0dXJuIGNoZWNrIChgaWYgKHF1b3RhLVx1MDAzZWVzeiA9PSAwKSByZXR1cm47YCkgaW4gYGRhbW9zX2FkanVzdF9xdW90YSgpYCBpbiBgbW0vZGFtb24vY29yZS5jYCB3aGVuIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSBpcyB6ZXJvLlxuXG5UaGUgY2hlY2sgaW5zcGVjdHMgYHF1b3RhLVx1MDAzZWVzemAsIHdoaWNoIGlzIGRldGVybWluaXN0aWNhbGx5IGluaXRpYWxpemVkIGFuZCBjb21wdXRlZCBieSB0aGUgREFNT04gc3Vic3lzdGVtICh2aWEgYGRhbW9zX3F1b3RhX2luaXQoKWAgYW5kIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKClgKS4gVGhlIHBhdGNoIGludHJvZHVjZXMgbm8gbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGFueSBkYXRhIHRvIHVzZXJzcGFjZSwgZG9lcyBub3QgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMgb3IgYnVmZmVycyB1bmluaXRpYWxpemVkLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLlxuXG5CZWNhdXNlIHRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gZWFybHkgcmV0dXJuIGNoZWNrIChgaWYgKHF1b3RhLVx1MDAzZWVzeiA9PSAwKSByZXR1cm47YCkgaW4gYGRhbW9zX2FkanVzdF9xdW90YSgpYCBpbiBgbW0vZGFtb24vY29yZS5jYCB3aGVuIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSBpcyB6ZXJvLlxuXG5UaGUgY2hlY2sgaW5zcGVjdHMgYHF1b3RhLVx1MDAzZWVzemAsIHdoaWNoIGlzIGRldGVybWluaXN0aWNhbGx5IGluaXRpYWxpemVkIGFuZCBjb21wdXRlZCBieSB0aGUgREFNT04gc3Vic3lzdGVtICh2aWEgYGRhbW9zX3F1b3RhX2luaXQoKWAgYW5kIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKClgKS4gVGhlIHBhdGNoIGludHJvZHVjZXMgbm8gbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGFueSBkYXRhIHRvIHVzZXJzcGFjZSwgZG9lcyBub3QgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMgb3IgYnVmZmVycyB1bmluaXRpYWxpemVkLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLlxuXG5CZWNhdXNlIHRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6MDkuNTc2NzU3NTU2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NDgzNjIwMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1ZBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3NfYWRqdXN0X3F1b3RhXCIsXG4gICAgXCJrZGFtb25kX2FwcGx5X3NjaGVtZXNcIixcbiAgICBcImRhbW9uX3N0YXJ0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIGVhcmx5IHJldHVybiBjaGVjayAoYGlmIChxdW90YS1cXHUwMDNlZXN6ID09IDApIHJldHVybjtgKSBpbiBgZGFtb3NfYWRqdXN0X3F1b3RhKClgIGluIGBtbS9kYW1vbi9jb3JlLmNgIHdoZW4gdGhlIGVmZmVjdGl2ZSBxdW90YSBzaXplIGlzIHplcm8uXFxuXFxuVGhlIGNoZWNrIGluc3BlY3RzIGBxdW90YS1cXHUwMDNlZXN6YCwgd2hpY2ggaXMgZGV0ZXJtaW5pc3RpY2FsbHkgaW5pdGlhbGl6ZWQgYW5kIGNvbXB1dGVkIGJ5IHRoZSBEQU1PTiBzdWJzeXN0ZW0gKHZpYSBgZGFtb3NfcXVvdGFfaW5pdCgpYCBhbmQgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoKWApLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBubyBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcyBvciBidWZmZXJzIHVuaW5pdGlhbGl6ZWQsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMuXFxuXFxuQmVjYXVzZSB0aGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERBTU9TIHF1b3RhIGFkanVzdG1lbnQgbG9naWMgaW4gbW0vZGFtb24vY29yZS5jIGJ5IGFkZGluZyBhbiBlYXJseSByZXR1cm4gaW4gZGFtb3NfYWRqdXN0X3F1b3RhKCkgd2hlbiBlZmZlY3RpdmUgcXVvdGEgc2l6ZSAoZXN6KSBpcyB6ZXJvLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSwgYWx0ZXJpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCByZWdpb24gc2NvcmluZyBiZWhhdmlvciB3aGVuIHF1b3RhIGlzIGV4aGF1c3RlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6MDkuNTc2NzYyNzE2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE5MDkyNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDBjNTA1YjNmMzgwNmRlYThmMDEzMmU4YmJjMDJmYmExNTkwY2EwNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCAxMiAxMzo0MTowNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCAwNmNmMmFiN2U5N2Q3Li44ZmUxNWYxN2JlODBmIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC0zMzI0LDYgKzMzMjQsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbiBcXG4gXFx0aWYgKCFjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcXG4gXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAocXVvdGEtXFx1MDAzZWVzeiA9PSAwKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHQvKiBGaWxsIHVwIHRoZSBzY29yZSBoaXN0b2dyYW0gKi9cXG4gXFx0bWVtc2V0KGMtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtLCAwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MToxMC44OTY0OTk0NTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjExOTM3MzU0NTYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiLFxuICAgIFwia2RhbW9uZF9hcHBseV9zY2hlbWVzXCIsXG4gICAgXCJkYW1vbl9zdGFydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PUyBxdW90YSBhZGp1c3RtZW50IGxvZ2ljIGluIG1tL2RhbW9uL2NvcmUuYyBieSBhZGRpbmcgYW4gZWFybHkgcmV0dXJuIGluIGRhbW9zX2FkanVzdF9xdW90YSgpIHdoZW4gZWZmZWN0aXZlIHF1b3RhIHNpemUgKGVzeikgaXMgemVyby4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UsIGFsdGVyaW5nIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgcmVnaW9uIHNjb3JpbmcgYmVoYXZpb3Igd2hlbiBxdW90YSBpcyBleGhhdXN0ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDBjNTA1YjNmMzgwNmRlYThmMDEzMmU4YmJjMDJmYmExNTkwY2EwNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDEzOjQxOjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCAwNmNmMmFiN2U5N2Q3Li44ZmUxNWYxN2JlODBmIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0zMzI0LDYgKzMzMjQsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuIFxuIFx0aWYgKCFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuIFx0XHRyZXR1cm47XG4rXHRpZiAocXVvdGEtXHUwMDNlZXN6ID09IDApXG4rXHRcdHJldHVybjtcbiBcbiBcdC8qIEZpbGwgdXAgdGhlIHNjb3JlIGhpc3RvZ3JhbSAqL1xuIFx0bWVtc2V0KGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0sIDAsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MToxMC44OTY1MDA5MzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDMyMzQ2MzA0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBDb250ZXh0dWFsIEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGlzIHBhdGNoIHRvIGBtbS9kYW1vbi9jb3JlLmNgIGFyb3VuZCB0aGUgYGRhbW9zX2FkanVzdF9xdW90YWAgZnVuY3Rpb24uIFRoZSBjb2RlIG1lbnRpb25zIHRoaXMgYWRqdXN0bWVudCBvZiBxdW90YSwgYW5kLCBrbm93aW5nIERBTU9OLCBpdCdzIGltbWVkaWF0ZWx5IGFwcGFyZW50IHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGR5bmFtaWMgbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgKndoeSogdGhpcyBjaGFuZ2UgaXMgaGFwcGVuaW5nLiBUaGUgY3JpdGljYWwgbGluZSBpcyBgaWYgKHF1b3RhLVx1MDAzZWVzeiA9PSAwKSByZXR1cm47YC4gVGhpcyBzdWdnZXN0cyBhbiBlYXJseSBleGl0IGNvbmRpdGlvbiwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgZXN6YCBsaWtlbHkgcmVwcmVzZW50cyB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbi4gQSB6ZXJvIHNpemUgbWVhbnMgZWl0aGVyIGFuIGludmFsaWQgcmVnaW9uIG9yIHRoYXQgdGhlIHJlZ2lvbiBpcyBzb21laG93IGVtcHR5LiBJbiBEQU1PTidzIGNvbnRleHQsIGhhbmRsaW5nIHRoaXMgc2l0dWF0aW9uIGlzIGVzc2VudGlhbCwgc2luY2UgYW4gZW1wdHkgcmVnaW9uIHdpbGwgc2tldyBvdXIgbWV0cmljcy4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIG1vc3QgbGlrZWx5IGFkZGluZyBhIGNoZWNrIHRvIHByZXZlbnQgZGl2aXNpb24gYnkgemVybyBvciBhbnkgdW5pbnRlbmRlZCBzaWRlLWVmZmVjdHMgb24gZW1wdHkgcmVnaW9ucy5cblxuSSdkIHdhbnQgdG8gY2hlY2sgaG93IGBxdW90YS1cdTAwM2Vlc3pgIGlzIGluaXRpYWxpemVkIGFuZCBob3cgaXQncyB1c2VkIGVsc2V3aGVyZSwgYnV0IGluIHRoaXMgaXNvbGF0ZWQgc25pcHBldCwgdGhlIGludGVudGlvbiBhcHBlYXJzIHRvIGJlIGEgZGVmZW5zaXZlIHByb2dyYW1taW5nIG1lYXN1cmUuIFRoZSBgZ2V0X3NjaGVtZV9zY29yZWAgY2hlY2sgcHJlY2VkaW5nIGl0IGZ1cnRoZXIgaW1wbGllcyB0aGF0IHdlJ3JlIGluIHRoZSByZWFsbSBvZiBzY29yaW5nIG9yIHJhbmtpbmcgbWVtb3J5IHJlZ2lvbnMgZm9yIG9wdGltaXphdGlvbi4gVGhlIGhpc3RvZ3JhbSBhbHNvIGNvbmZpcm1zIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MToyNS4yMTk5NjY4MzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY1NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzMTU6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogKz0gcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3o7XFxuMzMxNjpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcXG4zMzE3OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6ID0gMDtcXG4zMzE4OlxcdFxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxcbjMzMTk6XFx0XFx0XFx0XFx0Y2FjaGVkX2VzeiA9IHF1b3RhLVxcdTAwM2Vlc3o7XFxuMzMyMDpcXHRcXHRcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbjMzMjE6XFx0XFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgcXVvdGEtXFx1MDAzZWVzeiAhPSBjYWNoZWRfZXN6KVxcbjMzMjI6XFx0XFx0XFx0XFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcXG4zMzIzOlxcdFxcdH1cXG4zMzI0OlxcdFxcbjMzMjU6XFx0XFx0aWYgKCFjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcXG4zMzI2OlxcdFxcdFxcdHJldHVybjtcXG4zMzI3OlxcdFxcdGlmIChxdW90YS1cXHUwMDNlZXN6ID09IDApXFxuMzMyODpcXHRcXHRcXHRyZXR1cm47XFxuMzMyOTpcXHRcXG4zMzMwOlxcdFxcdC8qIEZpbGwgdXAgdGhlIHNjb3JlIGhpc3RvZ3JhbSAqL1xcbjMzMzE6XFx0XFx0bWVtc2V0KGMtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtLCAwLFxcbjMzMzI6XFx0XFx0XFx0XFx0c2l6ZW9mKCpjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSkgKlxcbjMzMzM6XFx0XFx0XFx0XFx0KERBTU9TX01BWF9TQ09SRSArIDEpKTtcXG4zMzM0OlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XFxuMzMzNTpcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xcbjMzMzY6XFx0XFx0XFx0XFx0aWYgKCFfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKSlcXG4zMzM3OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMzMzg6XFx0XFx0XFx0XFx0aWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSlcXG4zMzM5OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMzNDA6XFx0XFx0XFx0XFx0c2NvcmUgPSBjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKTtcXG4zMzQxOlxcdFxcdFxcdFxcdGMtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXSArPVxcbjMzNDI6XFx0XFx0XFx0XFx0XFx0ZGFtb25fc3pfcmVnaW9uKHIpO1xcbjMzNDM6XFx0XFx0XFx0XFx0aWYgKHNjb3JlIFxcdTAwM2UgbWF4X3Njb3JlKVxcbjMzNDQ6XFx0XFx0XFx0XFx0XFx0bWF4X3Njb3JlID0gc2NvcmU7XFxuMzM0NTpcXHRcXHRcXHR9XFxuMzM0NjpcXHRcXHR9XFxuMzM0NzpcXHRcXG4zMzQ4OlxcdFxcdC8qIFNldCB0aGUgbWluIHNjb3JlIGxpbWl0ICovXFxuMzM0OTpcXHRcXHRmb3IgKGN1bXVsYXRlZF9zeiA9IDAsIHNjb3JlID0gbWF4X3Njb3JlOyA7IHNjb3JlLS0pIHtcXG4zMzUwOlxcdFxcdFxcdGN1bXVsYXRlZF9zeiArPSBjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbVtzY29yZV07XFxuMzM1MTpcXHRcXHRcXHRpZiAoY3VtdWxhdGVkX3N6IFxcdTAwM2U9IHF1b3RhLVxcdTAwM2Vlc3ogfHwgIXNjb3JlKVxcbjMzNTI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzM1MzpcXHRcXHR9XFxuMzM1NDpcXHRcXHRxdW90YS1cXHUwMDNlbWluX3Njb3JlID0gc2NvcmU7XFxuMzM1NTpcXHR9XFxuMzM1NjpcXHRcXG4zMzU3OlxcdHN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX3N0YXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbjMzNTg6XFx0e1xcbjMzNTk6XFx0XFx0dW5zaWduZWQgaW50IGNpZHggPSAwLCBzaWR4ID0gMDtcXG4zMzYwOlxcdFxcdHN0cnVjdCBkYW1vcyAqc2l0ZXI7XFxuMzM2MTpcXHRcXG4zMzYyOlxcdFxcdGlmICghdHJhY2VfZGFtb3Nfc3RhdF9hZnRlcl9hcHBseV9pbnRlcnZhbF9lbmFibGVkKCkpXFxuMzM2MzpcXHRcXHRcXHRyZXR1cm47XFxuMzM2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6MjUuMjIwMTQ1MjQ3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mzc1MjgwNzg5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgYGRhbW9zX2FkanVzdF9xdW90YWAgYW5kIGl0cyBDYWxsZXJzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBgZGFtb3NfYWRqdXN0X3F1b3RhYCBmdW5jdGlvbnMgYW5kIHdoZXJlIGl0J3MgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSByZXN0IG9mIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBmdW5jdGlvbiBpdHNlbGYuIEkgd2FudCB0byBzZWUgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgZGVwZW5kZW5jaWVzLCBhbnkgc2lkZSBlZmZlY3RzIHdpdGhpbiB0aGUgZnVuY3Rpb24gaXRzZWxmIOKAkyBlc3NlbnRpYWxseSwgaXRzIGludGVybmFsIGxvZ2ljLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGF0b21pY2l0eSBpc3N1ZXMsIG9yIGFueSBvcHRpbWl6YXRpb25zIHRoYXQgY2FuIGJlIG1hZGUuIEFyZSB0aGVyZSBhbnkgcmVzb3VyY2UgbG9ja3MgaW52b2x2ZWQ/IEhvdyBhcmUgcXVvdGFzIG1hbmFnZWQgaW50ZXJuYWxseT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgb3ZlcmZsb3cgaXNzdWVzPyBEb2VzIGl0IGhhbmRsZSBuZWdhdGl2ZSBhZGp1c3RtZW50cyBncmFjZWZ1bGx5P1xuXG5OZXh0LCBJJ2xsIG5lZWQgdG8gdHJhY2UgYWxsIHRoZSBjYWxsZXJzIG9mIGBkYW1vc19hZGp1c3RfcXVvdGFgLiBVbmRlcnN0YW5kaW5nICp3aG8qIGlzIGNhbGxpbmcgaXQgYW5kICp3aHkqIGlzIGNydWNpYWwuIFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnRleHRzPyBBcmUgd2UgZGVhbGluZyB3aXRoIGhpZ2gtZnJlcXVlbmN5IGNhbGxzLCBiYXRjaCBwcm9jZXNzaW5nLCBvciBpbmZyZXF1ZW50IG9wZXJhdGlvbnM/IFRoaXMgd2lsbCByZXZlYWwgdGhlIGFjY2VzcyBwYXR0ZXJucyBhbmQgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyByZWxhdGVkIHRvIHF1b3RhIG1hbmFnZW1lbnQuIEkgd2FudCB0byBmaW5kIG91dCBhbGwgb2YgdGhlIGRpZmZlcmVudCB3YXlzIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyB1dGlsaXplZC5cblxuSeKAmWxsIGFsc28gbmVlZCB0byBjb25zaWRlciB0aGUgZGF0YSBmbG93LiBXaGF0IGFyZ3VtZW50cyBhcmUgYmVpbmcgcGFzc2VkIHRvIGBkYW1vc19hZGp1c3RfcXVvdGFgPyBXaGF0IGFyZSB0aGVpciByYW5nZXMgYW5kIHBvc3NpYmxlIHZhbHVlcz8gSG93IGRvZXMgdGhlIGNhbGxlciBwcmVwYXJlIHRoZSBpbnB1dCBxdW90YSBjaGFuZ2VzLCBhbmQgaG93IGRvZXMgaXQgaW50ZXJwcmV0IHRoZSByZXN1bHRzPyBBcmUgdGhlcmUgYW55IGRhdGEgdmFsaWRhdGlvbiBzdGVwcyBiZWluZyBza2lwcGVkLCBvciByZXBlYXRlZCwgYnkgdGhlIGNhbGxlcnMgb3IgaW5zaWRlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGl0c2VsZj8gSSdsbCBiZSBsb29raW5nIGZvciBpbmNvbnNpc3RlbmNpZXMgYW5kIHBvdGVudGlhbCBidWdzIHRoYXQgY291bGQgYXJpc2UgZnJvbSBpbmNvcnJlY3QgdXNhZ2UuXG5cblVsdGltYXRlbHksIEknbSBhaW1pbmcgZm9yIGEgY29tcHJlaGVuc2l2ZSB2aWV3OiBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uJ3MgcmVzcG9uc2liaWxpdHksIGl0cyBsaW1pdGF0aW9ucywgYW5kIGhvdyBpdCdzIGJlaW5nIGludGVncmF0ZWQgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaW5mb3JtIG15IGFwcHJvYWNoIHRvIGFueSByZWxhdGVkIGJ1ZyByZXBvcnRzLCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLCBvciByZWZhY3RvcmluZyBlZmZvcnRzLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBJIGNhbiBvcHRpbWl6ZSwgb3IgaWYgdGhlcmUgaXMgbm8gaW1tZWRpYXRlIGFjdGlvbiB0byBiZSB0YWtlbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE3OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6MjguOTcyOTU2MTIxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzAwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzAwOlxcdFxcbjMzMDE6XFx0XFx0LyogRmlyc3QgY2hhcmdlIHdpbmRvdyAqL1xcbjMzMDI6XFx0XFx0aWYgKCFxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9zeiBcXHUwMDI2XFx1MDAyNiAhcXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSkge1xcbjMzMDM6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XFxuMzMwNDpcXHRcXHRcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbjMzMDU6XFx0XFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkpXFxuMzMwNjpcXHRcXHRcXHRcXHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xcbjMzMDc6XFx0XFx0fVxcbjMzMDg6XFx0XFxuMzMwOTpcXHRcXHQvKiBOZXcgY2hhcmdlIHdpbmRvdyBzdGFydHMgKi9cXG4zMzEwOlxcdFxcdGlmICghdGltZV9pbl9yYW5nZV9vcGVuKGppZmZpZXMsIHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20sXFxuMzMxMTpcXHRcXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tICtcXG4zMzEyOlxcdFxcdFxcdFxcdFxcdG1zZWNzX3RvX2ppZmZpZXMocXVvdGEtXFx1MDAzZXJlc2V0X2ludGVydmFsKSkpIHtcXG4zMzEzOlxcdFxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4zMzE0OlxcdFxcdFxcdFxcdHMtXFx1MDAzZXN0YXQucXRfZXhjZWVkcysrO1xcbjMzMTU6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogKz0gcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3o7XFxuMzMxNjpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcXG4zMzE3OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6ID0gMDtcXG4zMzE4OlxcdFxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxcbjMzMTk6XFx0XFx0XFx0XFx0Y2FjaGVkX2VzeiA9IHF1b3RhLVxcdTAwM2Vlc3o7XFxuMzMyMDpcXHRcXHRcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbjMzMjE6XFx0XFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgcXVvdGEtXFx1MDAzZWVzeiAhPSBjYWNoZWRfZXN6KVxcbjMzMjI6XFx0XFx0XFx0XFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcXG4zMzIzOlxcdFxcdH1cXG4zMzI0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MToyOC45NzMxMjI4NDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTAwMDkzMTA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCB0aGlzIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGlzIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhpcyBsb29wLiBUaGUgY29kZSdzIHRyeWluZyB0byBzZXQgYSBtaW5pbXVtIHNjb3JlIGxpbWl0LiBJdCdzIGFjY3VtdWxhdGluZyBzaXplcyBiYXNlZCBvbiBhIHNjb3JlIGhpc3RvZ3JhbSwgYW5kIHRoZSBsb29wIGNvbnRpbnVlcyBhcyBsb25nIGFzIHRoZSBjdW11bGF0aXZlIHNpemUgKGBjdW11bGF0ZWRfc3pgKSBpcyBsZXNzIHRoYW4gdGhlIHRhcmdldCBzaXplIChgcXVvdGEtXHUwMDNlZXN6YCkgYW5kIHRoZSBzY29yZSBpc24ndCB6ZXJvLlxuXG5XYWl0IGEgbWludXRlLCBpZiBgcXVvdGEtXHUwMDNlZXN6YCBpcyB6ZXJvLCBiZWZvcmUgdGhpcyBwYXRjaCwgdGhlIGNvbmRpdGlvbiBgY3VtdWxhdGVkX3N6IFx1MDAzZT0gcXVvdGEtXHUwMDNlZXN6YCB3b3VsZCBiZSBpbW1lZGlhdGVseSB0cnVlIGJlY2F1c2UgYGN1bXVsYXRlZF9zemAgc3RhcnRzIGF0IHplcm8uIFRoYXQgbWVhbnMgdGhlIGxvb3Agd291bGQgYnJlYWsgaW1tZWRpYXRlbHkgb24gdGhlIGZpcnN0IGl0ZXJhdGlvbiEgV2l0aCBgc2NvcmVgIGVxdWFsIHRvIGBtYXhfc2NvcmVgISBIbW1tLi4uIEJ1dCB3aGF0IGlmIGBjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXWAgaXMgemVybz8gVGhhdCB3b3VsZCByZXN1bHQgaW4gYGN1bXVsYXRlZF9zemAgcmVtYWluaW5nIHplcm8uXG5cbkhvbGQgb24gYSBzZWNvbmQsIHdoYXQncyB3aXRoIHRoYXQgYGlmIChxdW90YS1cdTAwM2Vlc3ogPT0gMCkgcmV0dXJuO2AgY2hlY2s/IFdoeSB3YXMgdGhhdCBhZGRlZD8gRG9lcyBpdCBtYXR0ZXIgdGhhdCBgcXVvdGEtXHUwMDNlbWluX3Njb3JlYCBpc24ndCB1cGRhdGVkIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGVhcmx5PyBJZiBgcXVvdGEtXHUwMDNlZXN6YCBpcyB6ZXJvLCBtYXliZSB0aGUgcXVvdGEncyBlZmZlY3RpdmVseSBkaXNhYmxlZCBhbmQgbm8gcmVnaW9ucyBjYW4gYmUgYXBwbGllZC4gSSBndWVzcyBgcXVvdGEtXHUwMDNlbWluX3Njb3JlYCBpc24ndCB1c2VkIHRoZW4uXG5cbkkgbmVlZCBtb3JlIGNvbnRleHQgaGVyZS4gV2hhdCdzIHRoZSBwdXJwb3NlIG9mIHRoaXMgcGF0Y2g/IEknbSBnb2luZyB0byBoYXZlIHRvIGNoZWNrIHRoZSBnaXQgbG9nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgaXNzdWUgdGhpcyBjb2RlIGlzIGFkZHJlc3NpbmcuIEkgbmVlZCB0byBzZWUgd2hhdCdzIGNoYW5nZWQgYW5kIHdoeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEyNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQxOjM5Ljk3NDA1Njk3NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTI2MjUxNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfYWRqdXN0X3F1b3RhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zMjc2PXN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX2VzeihzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzI4OS1cXG5tbS9kYW1vbi9jb3JlLmM6MzI5MDpzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy0zMjkxLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzczPXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzODgtXFxubW0vZGFtb24vY29yZS5jOjMzODk6XFx0XFx0ZGFtb3NfYWRqdXN0X3F1b3RhKGMsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMzkwLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6NDAuNzI2Njg3MDkyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDE1MTY0MTM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRBTU9OIEtjb25maWcgRXhwbG9yYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIERBTU9OLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB1c3VhbGx5IHRvIHVuZGVyc3RhbmQgdGhlIGhpZ2gtbGV2ZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZpcnN0LiBJJ20gbG9va2luZyBmb3IgdGhlIGNvcmUgZW5hYmxpbmcgc3dpdGNoZXMsIHRoZSBvbmVzIHRoYXQgYWN0aXZhdGUgdGhlIGZ1bmRhbWVudGFsIGZlYXR1cmVzIG9mIERBTU9OLiBTcGVjaWZpY2FsbHksIEknbSBleHBlY3RpbmcgdG8gc2VlIG9wdGlvbnMgbGlrZSBgQ09ORklHX0RBTU9OYCBvciBzb21ldGhpbmcgc2ltaWxhciwgcHJvYmFibHkgd2l0aCBzdWItb3B0aW9ucyB0byBjb250cm9sIHRoaW5ncyBsaWtlIHRoZSBkZWZhdWx0IG1vbml0b3JpbmcgZ3JhbnVsYXJpdHkgb3Igc2FtcGxpbmcgaW50ZXJ2YWxzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBlc3NlbnRpYWwgYnVpbGRpbmcgYmxvY2tzLlxuXG5BZnRlciB0aGF0LCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBkaWZmZXJlbnQgbW9uaXRvcmluZyB0YXJnZXRzLiBJcyBEQU1PTiBsaW1pdGVkIHRvIHNwZWNpZmljIG1lbW9yeSByZWdpb25zLCBvciBpcyBpdCBtb3JlIGdlbmVyYWxpemVkPyBJJ2xsIGV4cGVjdCB0byBzZWUgY29uZmlndXJhdGlvbnMgZm9yIHRhcmdldGluZyBkaWZmZXJlbnQgdHlwZXMgb2YgbWVtb3J5IChlLmcuLCBwYWdlIGNhY2hlLCBhbm9ueW1vdXMgbWVtb3J5LCBldGMuKSBhbmQgcG90ZW50aWFsbHkgZm9yIHNwZWNpZnlpbmcgZGlmZmVyZW50IG1vbml0b3Jpbmcgem9uZXMgb3IgcmFuZ2VzLiBIb3cgZ3JhbnVsYXIgY2FuIEkgZ2V0IGluIGRlZmluaW5nIHdoYXQgREFNT04gb2JzZXJ2ZXM/XG5cbk5leHQsIEknbGwgYmUgaW50ZXJlc3RlZCBpbiBob3cgREFNT04gaW50ZXJhY3RzIHdpdGggZGlmZmVyZW50IG1lbW9yeSBtYW5hZ2VtZW50IG1lY2hhbmlzbXMuIERvZXMgaXQgaGF2ZSBzcGVjaWZpYyBvcHRpb25zIHJlbGF0ZWQgdG8gTlVNQSwgaHVnZSBwYWdlcywgb3IgYW55IG90aGVyIGZlYXR1cmVzIHRoYXQgYWZmZWN0IG1lbW9yeSBhbGxvY2F0aW9uIG9yIGFjY2VzcyBwYXR0ZXJucz8gSSdsbCBwcm9iYWJseSBiZSBzZWVraW5nIHNldHRpbmdzIHRvIGZpbmUtdHVuZSBEQU1PTidzIGJlaGF2aW9yIGluIHRoZXNlIHNjZW5hcmlvcywgZW5zdXJpbmcgaXQgZG9lc24ndCBpbnRlcmZlcmUgdW5kdWx5IHdpdGggb3RoZXIgb3B0aW1pemF0aW9ucy5cblxuUGVyZm9ybWFuY2UgaXMgYWx3YXlzIGtleSwgc28gSSdsbCBiZSBleGFtaW5pbmcgdGhlIHZhcmlvdXMga25vYnMgdGhhdCBhbGxvdyBtZSB0byBiYWxhbmNlIHRoZSBvdmVyaGVhZCBvZiBEQU1PTiB3aXRoIGl0cyBtb25pdG9yaW5nIGJlbmVmaXRzLiBBcmUgdGhlcmUgb3B0aW9ucyBmb3IgY29udHJvbGxpbmcgdGhlIHNhbXBsaW5nIGZyZXF1ZW5jeSwgdGhlIHNpemUgb2YgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBvciB0aGUgc2NoZWR1bGluZyBvZiBtb25pdG9yaW5nIHRhc2tzPyBJJ2xsIHdhbnQgdG8gZmluZCBzZXR0aW5ncyB0aGF0IGxldCBtZSBtaW5pbWl6ZSBEQU1PTidzIGltcGFjdCBvbiBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBpbiBsYXRlbmN5LXNlbnNpdGl2ZSBhcHBsaWNhdGlvbnMuXG5cbkZpbmFsbHksIEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgZXhwZXJpbWVudGFsIG9yIGFkdmFuY2VkIGZlYXR1cmVzLiBBcmUgdGhlcmUgb3B0aW9ucyByZWxhdGVkIHRvIHNwZWNpZmljIHVzZSBjYXNlcywgbGlrZSBtZW1vcnkgcHJlc3N1cmUgZGV0ZWN0aW9uIG9yIHdvcmtsb2FkIGNsYXNzaWZpY2F0aW9uPyBJJ20gaG9waW5nIHRvIHNlZSBhbnkgZmxhZ3MgdGhhdCBoaW50IGF0IGZ1dHVyZSBEQU1PTiBjYXBhYmlsaXRpZXMuIEknbSBleHBlY3RpbmcgYSBjbGVhbiwgbG9naWNhbCBzdHJ1Y3R1cmUgdG8gdGhlIEtjb25maWcsIGFuZCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNvbmNpc2UgYW5kIGhlbHBmdWwgaGVscCB0ZXh0cyB0byBndWlkZSBtZSBpbiB1bmRlcnN0YW5kaW5nIGVhY2ggb3B0aW9uJ3MgcHVycG9zZSBhbmQgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDMyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6NDQuODc4MzMxNzQxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjM2NDU0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZzo2OlxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTctXFx0aGVscFxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnOjE2OlxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTc6XFx0ZGVwZW5kcyBvbiBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctMTgtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MTk6XFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXFxubW0vZGFtb24vS2NvbmZpZzoyMDpcXHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxcbm1tL2RhbW9uL0tjb25maWctMjEtXFx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6Mjg6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy0yOS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctMzAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MzE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cXG5tbS9kYW1vbi9LY29uZmlnLTMyLVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6NDA6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9kYW1vbi9LY29uZmlnLTQxLVxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbm1tL2RhbW9uL0tjb25maWc6NDI6XFx0ZGVmYXVsdCBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNDMtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NDQ6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy00NS1cXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6NDk6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9kYW1vbi9LY29uZmlnLTUwLVxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbm1tL2RhbW9uL0tjb25maWc6NTE6XFx0ZGVmYXVsdCBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNTItXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NTM6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy01NC1cXHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWc6NTc6XFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6NTg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy01OS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctNjAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NjE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxcbm1tL2RhbW9uL0tjb25maWctNjItXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZzo2OTpcXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo3MDpcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxubW0vZGFtb24vS2NvbmZpZzo3MTpcXHRkZWZhdWx0IERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy03Mi1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo3MzpcXHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxcbm1tL2RhbW9uL0tjb25maWctNzQtXFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6Nzg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy03OS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctODAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6ODE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIEt1bml0IHRlc3Qgc3VpdGUuXFxubW0vZGFtb24vS2NvbmZpZy04Mi1cXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWc6ODk6XFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo5MDpcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy05MS1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo5MjpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xcbm1tL2RhbW9uL0tjb25maWc6OTM6XFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXFxubW0vZGFtb24vS2NvbmZpZy05NC1cXHQgIHRob3NlLlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnOjEwMTpcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTAyOlxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTEwMy1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzoxMDQ6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cXG5tbS9kYW1vbi9LY29uZmlnLTEwNS1cXHQgIHByb3RlY3QgZnJlcXVlbnRseSBhY2Nlc3NlZCAoaG90KSBwYWdlcyB3aGlsZSByYXJlbHkgYWNjZXNzZWQgKGNvbGQpXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWc6MTA5OlxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxubW0vZGFtb24vS2NvbmZpZzoxMTA6XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctMTExLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjExMjpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cXG5tbS9kYW1vbi9LY29uZmlnOjExMzpcXHQgIEl0IHJ1bnMgREFNT04gYW5kIGV4cG9zZSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzIGluIHNpbXBsZSBzdGF0XFxubW0vZGFtb24vS2NvbmZpZy0xMTQtXFx0ICBtZXRyaWNzLlxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWc6MTE3OlxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxubW0vZGFtb24vS2NvbmZpZzoxMTg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZzoxMTk6XFx0ZGVmYXVsdCBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMjAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MTIxOlxcdCAgV2hldGhlciB0byBlbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0LiAgVXNlcnMgY2FuIGRpc2FibGUgaXQgaW5cXG5tbS9kYW1vbi9LY29uZmlnLTEyMi1cXHQgIGJvb3Qgb3IgcnVudGltZSB1c2luZyBpdHMgJ2VuYWJsZWQnIHBhcmFtZXRlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6NDQuOTMwNjk5OTcyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMzNjIxMTQ0NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodHMsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgZGVsdmluZyBpbnRvIHRoZSBNYWtlZmlsZSB3aXRoaW4gdGhlIE1lbW9yeSBNYW5hZ2VtZW50J3MgREFNT04gKER5bmFtaWMgQWNjZXNzIE1vbml0b3IpIHN1YnN5c3RlbTpcblxuKipEaXZpbmcgaW50byB0aGUgbW0vZGFtb24gTWFrZWZpbGUqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIE1ha2VmaWxlIHdpdGhpbiB0aGUgREFNT04gZGlyZWN0b3J5LiBNeSBpbml0aWFsIGV4cGVjdGF0aW9uIGlzIGEgZmFpcmx5IHN0YW5kYXJkIHN0cnVjdHVyZSwgYnV0IHRoZSBzcGVjaWZpY3MgYXJlIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXRzIGxpZS4gSSdtIGtlZW4gdG8gc2VlIGhvdyB0aGUgYnVpbGQgcHJvY2VzcyBpbnRlZ3JhdGVzIHRoZSBEQU1PTiBjb21wb25lbnRzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS5cblxuSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqU291cmNlIEZpbGVzOioqIFRoZSBsaXN0IG9mIHNvdXJjZSBmaWxlcyAoYCouY2AsIGAqLlNgKSB0aGF0IGNvbXByaXNlIERBTU9OLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgREFNT04gZnVuY3Rpb25hbGl0eSBpcyBtb2R1bGFyaXplZC4gV2hhdCBhcmUgdGhlIGNvcmUgY29tcG9uZW50cz8gQXJlIHRoZXkgc3BsaXQgaW50byBtb25pdG9yLCBzY2hlbWUsIG9yIG90aGVyIGFyZWFzP1xuKiAgICoqRGVwZW5kZW5jaWVzOioqIEhvdyBhcmUgdGhlIERBTU9OIG1vZHVsZXMgbGlua2VkIGFuZCBkZXBlbmRlbnQgdXBvbiBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBhbmQgbGlicmFyaWVzPyBTcGVjaWZpY2FsbHksIHdoaWNoIGhlYWRlcnMgYXJlIGluY2x1ZGVkLiBBcmUgdGhlcmUgYW55IGN1c3RvbSBjb21waWxlciBmbGFncyBvciBsaW5rZXIgc2NyaXB0cyBzcGVjaWZpYyB0byBEQU1PTidzIG5lZWRzP1xuKiAgICoqQnVpbGQgUnVsZXM6KiogVGhlIGFjdHVhbCBjb21waWxhdGlvbiBhbmQgbGlua2luZyBydWxlcy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIG1vZHVsZXMgYXJlIGJ1aWx0IGFuZCBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCBpbWFnZS4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBidWlsZHMgb3IgZmVhdHVyZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSB2aWEgS2NvbmZpZyBvcHRpb25zP1xuKiAgICoqT2JqZWN0IEZpbGVzOioqIEknbGwgbm90ZSB3aGVyZSB0aGUgb3V0cHV0IG9iamVjdCBmaWxlcyBhcmUgcGxhY2VkLlxuKiAgICoqS2J1aWxkIEludGVncmF0aW9uOioqIEknbGwgYmUgY2hlY2tpbmcgdG8gc2VlIGhvdyBEQU1PTiBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSAoS2J1aWxkKS4gQXJlIHRoZXJlIGFueSBjdXN0b20gS2J1aWxkIHZhcmlhYmxlcyBvciBmdW5jdGlvbnMgdXNlZCB0byBoYW5kbGUgc3BlY2lmaWMgREFNT04gcmVxdWlyZW1lbnRzPyBIb3cgaXMgdGhlIG1vZHVsZSBwcm9wZXJseSBsaW5rZWQgaW50byB0aGUga2VybmVsJ3MgYnVpbGQgcHJvY2Vzcz9cbiogICAqKkRvY3VtZW50YXRpb24gVGFyZ2V0czoqKiBJZGVhbGx5LCB0aGVyZSB3aWxsIGJlIHRhcmdldHMgZm9yIGdlbmVyYXRpbmcgZG9jdW1lbnRhdGlvbi4gSSBuZWVkIHRvIGdldCBxdWlja2x5IHVwIHRvIHNwZWVkIG9uIHRoZSBwdXJwb3NlIG9mIGVhY2ggZmlsZSBhbmQgY29tcG9uZW50LlxuXG5JJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHVzZSBvZiBtYWNyb3MsIHZhcmlhYmxlcywgYW5kIGluY2x1ZGUgcGF0aHMuIEFueSB0cmlja3MgdXNlZCBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgYnVpbGQtdGltZSBvcHRpbWl6YXRpb24gd2lsbCBiZSBvZiBpbnRlcmVzdC4gT3ZlcmFsbCwgdGhpcyBNYWtlZmlsZSBzaG91bGQgcGFpbnQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBEQU1PTiBpcyBhc3NlbWJsZWQgYW5kIGludGVncmF0ZWQgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgZW52aXJvbm1lbnQuIEkgd2FudCB0byBzZWUgaWYgaXQncyBmb2xsb3dpbmcgYmVzdCBwcmFjdGljZXMgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc2lnbnMgb2YgY29tcGxleCBidWlsZCBsb2dpYyB0aGF0IG1pZ2h0IGluZGljYXRlIHBvdGVudGlhbCBidWlsZCBpc3N1ZXMgb3IgbWFpbnRhaW5hYmlsaXR5IGNvbmNlcm5zIGRvd24gdGhlIGxpbmUuIExldCdzIHNlZSB3aGF0J3MgaW4gaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ0MSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQxOjQ4LjI5MjgxNjY4OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5ODIwMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29yZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL01ha2VmaWxlLTItXFxubW0vZGFtb24vTWFrZWZpbGU6MzpvYmoteVxcdFxcdFxcdFxcdDo9IGNvcmUub1xcbm1tL2RhbW9uL01ha2VmaWxlLTQtb2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVxcdCs9IG9wcy1jb21tb24ubyB2YWRkci5vXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzA1PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX212c3VtKHVuc2lnbmVkIGxvbmcgY3VycmVudF9ucixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMTgtICogYmUgYWNjZXNzZWQuICBIZW5jZSB0aGUgdmFsdWUgY2FuIGJlIGludGVycHJldGVkIGFzIHRoZSByZWxhdGl2ZSBhY2Nlc3NcXG5tbS9kYW1vbi9jb3JlLmM6MzE5OiAqIGZyZXF1ZW5jeSBzY29yZSBvZiB0aGUgcmVnaW9uIChAcikuICBUaGUgdmFsdWUgaXMgY2FsY3VsYXRlZCBhcyBhIHBzZXVkb1xcbm1tL2RhbW9uL2NvcmUuYy0zMjAtICogbW92aW5nIHN1bSwgYW5kIGhlbmNlIGl0IGlzIG5vdCBhbiBleGFjdCB2YWx1ZSBidXQganVzdCBhIGJlc3QtZWZmb3J0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQxOjQ4LjMzNzgwMjUwMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzY5NTI0MDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmc6XG5cbioqRXhhbWluaW5nIHRoZSBEQU1PTiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IERBTU9OLCB0aGUgRGF0YSBBY2Nlc3MgTU9OaXRvciwgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0aGF0IHRoZSBgb2JqLSQoQ09ORklHX0RBTU9OKSArPSBkYW1vbi9gIGxpbmUgd2l0aGluIHRoZSBgbW0vTWFrZWZpbGVgIGZpbGUgaXMgdGhlIGtleSB0byBpdHMgaW5jbHVzaW9uLiBUaGF0J3MgYSBwcmV0dHkgc3RhbmRhcmQgcGF0dGVybiBmb3Igc2VsZWN0aXZlbHkgY29tcGlsaW5nIG1vZHVsZXMgYmFzZWQgb24gYSBjb25maWd1cmF0aW9uIG9wdGlvbi4gVG8gYmUgY2VydGFpbiwgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBJJ2xsIG5lZWQgdG8gb3BlbiBhbmQgZXhhbWluZSBgbW0vTWFrZWZpbGVgIHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMgaW5kZWVkIHRoZSByZWxldmFudCBsb2NhdGlvbiBmb3IgbWFuYWdpbmcgREFNT04ncyBvYmplY3QgZmlsZXMgYW5kIHRoZWlyIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzIGZvciB0aGUgZGF0YSBtb25pdG9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTU5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6NTEuMTA3MzI5MDU0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk0NDYxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMzY9b2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSArPSBkZWJ1Z19wYWdlX3JlZi5vXFxubW0vTWFrZWZpbGU6MTM3Om9iai0kKENPTkZJR19EQU1PTikgKz0gZGFtb24vXFxubW0vTWFrZWZpbGUtMTM4LW9iai0kKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgKz0gdXNlcmNvcHkub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MTo1MS4xNTMyNzc3MjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjIyNDYxNzY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZGlzc2VjdGluZyB0aGUgYGRhbW9zX2FkanVzdF9xdW90YWAgZnVuY3Rpb24gYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gREFNT04sIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHNwZWNpZmljYWxseSBob3cgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCB3aXRoaW4gdGhlIERBTU9OIGNvbnRleHQuIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggdGhhdCBsZWFkcyB0byBpdHMgaW52b2NhdGlvbi5cblxuTXkgaW1tZWRpYXRlIHBsYW4gaXMgdG8gc3RhcnQgd2l0aCBhIHN5c3RlbWF0aWMgZXhhbWluYXRpb24uIEknbSBnb2luZyB0byBsZXZlcmFnZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0ncyBhcmNoaXRlY3R1cmUgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGRhbW9zX2FkanVzdF9xdW90YWAgZmlyc3QuIFRoZW4sIEkgd2lsbCBnZW5lcmF0ZSBvciB1c2UgZXhpc3RpbmcgY2FsbCBncmFwaHMgdG8gbWFwIG91dCB0aGUgZXhlY3V0aW9uIGZsb3csIGlkZW50aWZ5aW5nIHRoZSB1cHN0cmVhbSBmdW5jdGlvbnMgdGhhdCBldmVudHVhbGx5IGNhbGwgYGRhbW9zX2FkanVzdF9xdW90YWAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSBjbGVhciBwaWN0dXJlIG9mIHdoZW4sIHdoZXJlLCBhbmQgd2h5IHRoaXMgcXVvdGEgYWRqdXN0bWVudCBpcyB0YWtpbmcgcGxhY2Ugd2l0aGluIHRoZSBicm9hZGVyIERBTU9OIGZyYW1ld29yay4gSSdtIGxvb2tpbmcgZm9yIHRoZSBrZXkgdHJpZ2dlcnMgYW5kIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGV0ZXJtaW5lIHdoZW4gdGhlIHF1b3RhIG5lZWRzIG1vZGlmaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ3MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQxOjUzLjM3Nzg5ODk5N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk1ODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzcwOlxcdFxcdHRyYWNlX2NhbGxfX2RhbW9zX3N0YXRfYWZ0ZXJfYXBwbHlfaW50ZXJ2YWwoY2lkeCwgc2lkeCwgXFx1MDAyNnMtXFx1MDAzZXN0YXQpO1xcbjMzNzE6XFx0fVxcbjMzNzI6XFx0XFxuMzM3MzpcXHRzdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4zMzc0OlxcdHtcXG4zMzc1OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuMzM3NjpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnM7XFxuMzM3NzpcXHRcXHRib29sIGhhc19zY2hlbWVzX3RvX2FwcGx5ID0gZmFsc2U7XFxuMzM3ODpcXHRcXHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3o7XFxuMzM3OTpcXHRcXG4zMzgwOlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XFxuMzM4MTpcXHRcXHRcXHRpZiAodGltZV9iZWZvcmUoYy1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIHMtXFx1MDAzZW5leHRfYXBwbHlfc2lzKSlcXG4zMzgyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMzODM6XFx0XFxuMzM4NDpcXHRcXHRcXHRpZiAoIXMtXFx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQpXFxuMzM4NTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zMzg2OlxcdFxcbjMzODc6XFx0XFx0XFx0aGFzX3NjaGVtZXNfdG9fYXBwbHkgPSB0cnVlO1xcbjMzODg6XFx0XFxuMzM4OTpcXHRcXHRcXHRkYW1vc19hZGp1c3RfcXVvdGEoYywgcyk7XFxuMzM5MDpcXHRcXHR9XFxuMzM5MTpcXHRcXG4zMzkyOlxcdFxcdGlmICghaGFzX3NjaGVtZXNfdG9fYXBwbHkpXFxuMzM5MzpcXHRcXHRcXHRyZXR1cm47XFxuMzM5NDpcXHRcXG4zMzk1OlxcdFxcdG1heF9yZWdpb25fc3ogPSBkYW1vbl9yZWdpb25fc3pfbGltaXQoYyk7XFxuMzM5NjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjLVxcdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XFxuMzM5NzpcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xcbjMzOTg6XFx0XFx0XFx0aWYgKGMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQgXFx1MDAyNlxcdTAwMjYgYy1cXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSkge1xcbjMzOTk6XFx0XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4zNDAwOlxcdFxcdFxcdFxcdFxcdGlmIChzLVxcdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gIT0gdClcXG4zNDAxOlxcdFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjM0MDI6XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG4zNDAzOlxcdFxcdFxcdFxcdFxcdHMtXFx1MDAzZXF1b3RhLmNoYXJnZV9hZGRyX2Zyb20gPSAwO1xcbjM0MDQ6XFx0XFx0XFx0XFx0fVxcbjM0MDU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzQwNjpcXHRcXHRcXHR9XFxuMzQwNzpcXHRcXHRcXHRkYW1vc19hcHBseV90YXJnZXQoYywgdCwgbWF4X3JlZ2lvbl9zeik7XFxuMzQwODpcXHRcXHR9XFxuMzQwOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6NTMuMzc5NTk4OTY3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzMzU4NTQ1MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKlRyYWNpbmcgdGhlIENhbGxlcnMgb2YgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gVGhlIGltbWVkaWF0ZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGZ1bmN0aW9uJ3MgY2FsbHMgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3Igd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIHNlYXJjaCBmb3IgaXRzIHVzYWdlIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBlbnRyeSBwb2ludHMgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gaXRzIGltcGFjdC4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBkZWJ1Z2dpbmcgb3IgbW9kaWZpY2F0aW9uOyB3aXRob3V0IGtub3dpbmcgd2hvJ3MgdXNpbmcgaXQsIEkgY2FuJ3QgYmUgc3VyZSBvZiB3aGF0IHdpbGwgaGFwcGVuIGlmIEkgY2hhbmdlIGl0LiBJJ2xsIG5lZWQgdG8ga25vdyBub3Qgb25seSB3aGVyZSBpdCBpcyBjYWxsZWQsIGJ1dCBob3cgaXQgaXMgYmVpbmcgdXNlZCBpbiBlYWNoIG9mIHRob3NlIGNvbnRleHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM4MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6NTUuNzE1NDU1OTQ5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM0NDMxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrZGFtb25kX2FwcGx5X3NjaGVtZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTMzNTc9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2Vfc3RhdChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzM3Mi1cXG5tbS9kYW1vbi9jb3JlLmM6MzM3MzpzdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG5tbS9kYW1vbi9jb3JlLmMtMzM3NC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzkwNj1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zOTgyLVxcdFxcdC8qXFxubW0vZGFtb24vY29yZS5jOjM5ODM6XFx0XFx0ICogZG8ga2RhbW9uZF9jYWxsKCkgYW5kIGtkYW1vbmRfYXBwbHlfc2NoZW1lcygpIGFmdGVyXFxubW0vZGFtb24vY29yZS5jLTM5ODQtXFx0XFx0ICoga2RhbW9uZF9tZXJnZV9yZWdpb25zKCkgaWYgcG9zc2libGUsIHRvIHJlZHVjZSBvdmVyaGVhZFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5OTctXFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZjdHgtXFx1MDAzZXNjaGVtZXMpKVxcbm1tL2RhbW9uL2NvcmUuYzozOTk4OlxcdFxcdFxcdGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0zOTk5LVxcdFxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6NTUuNzYxODExNjYyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMyNDc4NDU5MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgREFNT04gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBrZGFtb25kX2ZuYCwgdGhhdCdzIHRoZSBrdGhyZWFkIGF0IHRoZSBoZWFydCBvZiB0aGUgREFNT04gZGFlbW9uLCByaWdodD8gTm93LCBob3cgZXhhY3RseSBkb2VzIHVzZXIgc3BhY2UgZ2V0IHRvIGNvbnRyb2wgdGhpcyBiZWFzdD8gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBzeXNmcyBpbnRlcmZhY2UsIHNwZWNpZmljYWxseSB0aGF0IGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi8uLi5gIGRpcmVjdG9yeSBleHBvc2VkIGJ5IGBDT05GSUdfREFNT05fU1lTRlNgLlxuXG5Db3VsZCBzeXprYWxsZXIgaW50ZXJhY3Qgd2l0aCB0aGVzZSBzeXNmcyBmaWxlcz8gT2YgY291cnNlISBTeXprYWxsZXIgaGFzIHRob3NlIHBzZXVkby1zeXNjYWxscyBhbmQgc3lzZnMgZGVzY3JpcHRpb25zLCBvciBpdCBjYW4gYmUgbWFkZSB0byB3cml0ZSBkaXJlY3RseSB0byB0aGVzZSBmaWxlcy4gSG1tbSwgSSBzaG91bGQgcXVpY2tseSBjaGVjayBpZiB3ZSd2ZSBhbHJlYWR5IGdvdCBEQU1PTiBkZXNjcmlwdGlvbnMgaW4gdGhlIHN5emthbGxlciByZXBvLiAoQWN0dWFsbHksIEkgY2FuJ3QgZ3JlcCB0aGUgc3l6a2FsbGVyIHJlcG8gZnJvbSBoZXJlLCBiZWNhdXNlIHRoZSB0b29sIEknbSB1c2luZyBpcyBrZXJuZWwgZ3JlcCwgYnV0IEknbSBwcmV0dHkgc3VyZSBzeXprYWxsZXIgZG9lcyBoYXZlIC9zeXMva2VybmVsL21tL2RhbW9uIHN1cHBvcnQgYW55d2F5LilcblxuV2FpdCBhIHNlY29uZCwgYmVmb3JlIEkgZ2V0IHRvbyBmYXIgYWhlYWQsIGxldCBtZSBtYWtlIHN1cmUgdGhlIHN5c2ZzIGludGVyZmFjZSBpcyBhY3R1YWxseSBjYXBhYmxlIG9mIGNvbmZpZ3VyaW5nIERBTU9OLCBzZXR0aW5nIHVwIHNjaGVtZXMgYW5kIHF1b3RhcywgYW5kIHN0YXJ0aW5nIGBrZGFtb25kYC5cblxuT2theSwgdGltZSB0byBjcmFjayBvcGVuIGBtbS9kYW1vbi9zeXNmcy5jYCBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkxOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MTo1OS4wMDk2NjAxOTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjQxNTgxMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2RhbW9uZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6NTkuMTE2MDgxMjQ5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4NzA5NjExMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBEYW1vbiBTdWJzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQgd2l0aGluIHRoZSBgbW0vZGFtb24vYCBkaXJlY3RvcnkuIEkgd2FudCB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIERBTU9OIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB3aGF0IGZpbGVzIGFuZCwgdGhlcmVmb3JlLCB3aGljaCBjb21wb25lbnRzIGFuZCBmdW5jdGlvbmFsaXRpZXMsIGFyZSBwcmVzZW50LiBUaGlzIHdpbGwgcHJvdmlkZSBhIGNydWNpYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBkZWVwZXIgYW5hbHlzaXMgb3IgcG90ZW50aWFsIHdvcmsgSSBoYXZlIHRvIGRvLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbWFwIG9mIHRoZSBzeXN0ZW0gYW5kIHNlZSBpZiBhbnkgcmVjZW50IGNoYW5nZXMgYXJlIGltbWVkaWF0ZWx5IGFwcGFyZW50LiBJdCdzIGEgcXVpY2sgYW5kIGRpcnR5IHdheSB0byBhc3Nlc3MgdGhlIGxhbmRzY2FwZSBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gYW55IHNwZWNpZmljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0MjcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MjowMC45ODcwNDU0NjdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImNvcmUuY1wiLFxuICAgIFwibHJ1X3NvcnQuY1wiLFxuICAgIFwibW9kdWxlcy1jb21tb24uY1wiLFxuICAgIFwibW9kdWxlcy1jb21tb24uaFwiLFxuICAgIFwib3BzLWNvbW1vbi5jXCIsXG4gICAgXCJvcHMtY29tbW9uLmhcIixcbiAgICBcInBhZGRyLmNcIixcbiAgICBcInJlY2xhaW0uY1wiLFxuICAgIFwic3RhdC5jXCIsXG4gICAgXCJzeXNmcy1jb21tb24uY1wiLFxuICAgIFwic3lzZnMtY29tbW9uLmhcIixcbiAgICBcInN5c2ZzLXNjaGVtZXMuY1wiLFxuICAgIFwic3lzZnMuY1wiLFxuICAgIFwidmFkZHIuY1wiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBbXG4gICAgXCJ0ZXN0c1wiXG4gIF1cbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQyOjAwLjk4NzExOTc2N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDk2MzA2NjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmaWxlcy4uLlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgc3lzZnMgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHN5c2ZzIGltcGxlbWVudGF0aW9uLCBhbmQgdGhlIGNvcmUgZmlsZXMgYXJlIGp1bXBpbmcgb3V0IGF0IG1lLiBJIHNlZSBgc3lzZnMuY2AsIHdoaWNoIGlzIHByb2JhYmx5IHRoZSBoZWFydCBvZiB0aGUgYmVhc3QsIGhhbmRsaW5nIHRoZSBmdW5kYW1lbnRhbCBpbnRlcmFjdGlvbnMuIFRoZW4gdGhlcmUncyBgc3lzZnMtc2NoZW1lcy5jYCAtIHRoYXQgb25lJ3MgaW50ZXJlc3RpbmcsIHByb2JhYmx5IGRlZmluaW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIG1ldGhvZHMgdGhhdCBhcmUgZXhwb3NlZCB0aHJvdWdoIHN5c2ZzLiBgc3lzZnMtY29tbW9uLmNgIGlzIGxpa2VseSBjb250YWluaW5nIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCBzaGFyZWQgY29kZSB1c2VkIGFjcm9zcyB0aGUgc3lzdGVtLiBBbmQgb2YgY291cnNlLCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgcGllY2VzLCBgcmVjbGFpbS5jYCBhbmQgYGxydV9zb3J0LmNgIGFyZSBwcmVzZW50IHRvby5cblxuSSdtIGxlYW5pbmcgdG93YXJkcyBmb2N1c2luZyBvbiB0aGUgXCJzY2hlbWVzXCIgZmlsZSBmaXJzdCAtIGBzeXNmcy1zY2hlbWVzLmNgLiBHaXZlbiB0aGUgbmFtaW5nLCB0aGF0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCB0aGUgXCJjb250cmFjdFwiIG9mIHdoYXQgY2FuIGJlIGFjY2Vzc2VkIHZpYSBzeXNmcywgdGhlIGRlZmluaXRpb24gb2YgdGhlIGF0dHJpYnV0ZXMsIG9yIG1heWJlIHRoZSBsYXlvdXQgb2YgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuIFVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIHRoZXJlIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHdob2xlIHRoaW5nLiBMZXQgbWUgc3RhcnQgdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3NDQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6MDQuNDgzNDI4NTcyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE1OTQwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxdW90YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1OTggbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjA1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3dhdGVybWFya3Nfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIxMS0vKlxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjEyOiAqIHF1b3RhIGdvYWwgZGlyZWN0b3J5XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTMtICovXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMTU6c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjE2LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMTc6XFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWM7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTgtXFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWU7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIyMy1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIyNDpzdGF0aWMgc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfYWxsb2Modm9pZClcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIyNS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMjY6XFx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIyNy19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIyOT1zdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjMwOlxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjMxLVxcdGNoYXIgKm5hbWU7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTI3OD1zdGF0aWMgc3NpemVfdCB0YXJnZXRfbWV0cmljX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI4MC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyODE6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI4MjpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyODMtXFx0aW50IGk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTI5NT1zdGF0aWMgc3NpemVfdCB0YXJnZXRfbWV0cmljX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyOTcte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjk4OlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyOTk6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzAwLVxcdGludCBpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEzMTQ9c3RhdGljIHNzaXplX3QgdGFyZ2V0X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMxNi17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMTc6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMTg6XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMTktXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTMyMz1zdGF0aWMgc3NpemVfdCB0YXJnZXRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMyNS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMjY6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMjc6XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMjgtXFx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXFx1MDAyNmdvYWwtXFx1MDAzZXRhcmdldF92YWx1ZSk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTMzMz1zdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzNS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMzY6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMzc6XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzgtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTM0Mj1zdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNDQte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzQ1OlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzQ2OlxcdFxcdFxcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzQ3LVxcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFxcdTAwMjZnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzUzPXN0YXRpYyBzc2l6ZV90IG5pZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNTUte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzU2OlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzU3OlxcdFxcdFxcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzU4LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEzNjM9c3RhdGljIHNzaXplX3QgbmlkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNjUte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzY2OlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzY3OlxcdFxcdFxcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzY4LVxcdGludCBlcnIgPSBrc3RydG9pbnQoYnVmLCAwLCBcXHUwMDI2Z29hbC1cXHUwMDNlbmlkKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzc0PXN0YXRpYyBzc2l6ZV90IHBhdGhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzc2LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM3NzpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzc4OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM3OS1cXHRpbnQgbGVuO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEzODg9c3RhdGljIHNzaXplX3QgcGF0aF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzkwLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM5MTpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzkyOlxcdFxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM5My1cXHRjaGFyICpwYXRoID0ga21hbGxvY19hcnJheShzaXplX2FkZChjb3VudCwgMSksIHNpemVvZigqcGF0aCksXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQwOS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQxMDpzdGF0aWMgdm9pZCBkYW1vc19zeXNmc19xdW90YV9nb2FsX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MTEte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDEyOlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MTM6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDE0LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MTgtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MTk6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX3RhcmdldF9tZXRyaWNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjAtXFx0XFx0X19BVFRSX1JXX01PREUodGFyZ2V0X21ldHJpYywgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjEtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjI6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX3RhcmdldF92YWx1ZV9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyMy1cXHRcXHRfX0FUVFJfUldfTU9ERSh0YXJnZXRfdmFsdWUsIDA2MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDI0LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDI1OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDI2LVxcdFxcdF9fQVRUUl9SV19NT0RFKGN1cnJlbnRfdmFsdWUsIDA2MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDI3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDI4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9uaWRfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjktXFx0XFx0X19BVFRSX1JXX01PREUobmlkLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQzMC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzMTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfcGF0aF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQzMi1cXHRcXHRfX0FUVFJfUldfTU9ERShwYXRoLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQzMy1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzNDpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9hdHRyc1tdID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDM1OlxcdFxcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX3RhcmdldF9tZXRyaWNfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDM2OlxcdFxcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX3RhcmdldF92YWx1ZV9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0Mzc6XFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZV9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0Mzg6XFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfbmlkX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzOTpcXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9wYXRoX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ0MC1cXHROVUxMLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDQxLX07XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NDI6QVRUUklCVVRFX0dST1VQUyhkYW1vc19zeXNmc19xdW90YV9nb2FsKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ0My1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ0NDpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDQ1OlxcdC5yZWxlYXNlID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDQ2LVxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NDc6XFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9ncm91cHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NDgtfTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDUwLS8qXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NTE6ICogcXVvdGEgZ29hbHMgZGlyZWN0b3J5XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NTItICovXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NTMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NTQ6c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ1NS1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDU2OlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICoqZ29hbHNfYXJyO1xcdC8qIGNvdW50ZWQgYnkgbnIgKi9cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ1Ny1cXHRpbnQgbnI7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ1OS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2MDpzdGF0aWMgc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpkYW1vc19zeXNmc19xdW90YV9nb2Fsc19hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDYxLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2MjpcXHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ2My19XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NjQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NjU6c3RhdGljIHZvaWQgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcm1fZGlycyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2NjpcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKmdvYWxzKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDY3LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2ODpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqKmdvYWxzX2FyciA9IGdvYWxzLVxcdTAwM2Vnb2Fsc19hcnI7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NjktXFx0aW50IGk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ3OS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ4MDpzdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2FkZF9kaXJzKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDgxOlxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FscyAqZ29hbHMsIGludCBucl9nb2FscylcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ4Mi17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0ODM6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKipnb2Fsc19hcnIsICpnb2FsO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDg0LVxcdGludCBlcnIsIGk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0ODUtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0ODY6XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcm1fZGlycyhnb2Fscyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0ODctXFx0aWYgKCFucl9nb2FscylcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDk2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9nb2FsczsgaSsrKSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0OTc6XFx0XFx0Z29hbCA9IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfYWxsb2MoKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ5OC1cXHRcXHRpZiAoIWdvYWwpIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ5OTpcXHRcXHRcXHRkYW1vc19zeXNmc19xdW90YV9nb2Fsc19ybV9kaXJzKGdvYWxzKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUwMC1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTAzLVxcdFxcdGVyciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFxcdTAwMjZnb2FsLVxcdTAwM2Vrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTA0OlxcdFxcdFxcdFxcdFxcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX2t0eXBlLCBcXHUwMDI2Z29hbHMtXFx1MDAzZWtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MDUtXFx0XFx0XFx0XFx0XFxcIiVkXFxcIiwgaSk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUwNy1cXHRcXHRcXHRrb2JqZWN0X3B1dChcXHUwMDI2Z29hbC1cXHUwMDNla29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MDg6XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcm1fZGlycyhnb2Fscyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MDktXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNTE4PXN0YXRpYyBzc2l6ZV90IG5yX2dvYWxzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUyMC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MjE6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpnb2FscyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTIyOlxcdFxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2Fscywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MjMtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTUyNz1zdGF0aWMgc3NpemVfdCBucl9nb2Fsc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTI5LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTUzMDpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKmdvYWxzO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTMxLVxcdGludCBuciwgZXJyID0ga3N0cnRvaW50KGJ1ZiwgMCwgXFx1MDAyNm5yKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTM3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTM4OlxcdGdvYWxzID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2Fscywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MzktXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU0MS1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTQyOlxcdGVyciA9IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2FkZF9kaXJzKGdvYWxzLCBucik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NDMtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTQ5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTUwOnN0YXRpYyB2b2lkIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NTEte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTUyOlxcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMsIGtvYmopKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU1My19XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NTQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NTU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19ucl9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU1Ni1cXHRcXHRfX0FUVFJfUldfTU9ERShucl9nb2FscywgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NTctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NTg6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2F0dHJzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NTk6XFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX25yX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU2MC1cXHROVUxMLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTYxLX07XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NjI6QVRUUklCVVRFX0dST1VQUyhkYW1vc19zeXNmc19xdW90YV9nb2Fscyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NjMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NjU6XFx0LnJlbGVhc2UgPSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTY2LVxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1Njc6XFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfZ3JvdXBzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTY4LX07XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTY3ND1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc193ZWlnaHRzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2ODAtLypcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTY4MTogKiBxdW90YXMgZGlyZWN0b3J5XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2ODItICovXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2ODMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2ODQ6c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2ODUtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTY4Ni1cXHRzdHJ1Y3QgZGFtb25fc3lzZnNfd2VpZ2h0cyAqd2VpZ2h0cztcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTY4NzpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKmdvYWxzO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjg4LVxcdHVuc2lnbmVkIGxvbmcgbXM7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTY5MC1cXHR1bnNpZ25lZCBsb25nIHJlc2V0X2ludGVydmFsX21zO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNjkxOlxcdHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3N6O1xcdC8qIEVmZmVjdGl2ZSBzaXplIHF1b3RhIGluIGJ5dGVzICovXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2OTI6XFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIGdvYWxfdHVuZXI7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2OTMtXFx0dW5zaWduZWQgaW50IGZhaWxfY2hhcmdlX251bTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjk2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNjk3OnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpkYW1vbl9zeXNmc19xdW90YXNfYWxsb2Modm9pZClcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTY5OC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2OTk6XFx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzAwLX1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTcwMS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTcwMjpzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3F1b3Rhc19hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MDMte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzA0LVxcdHN0cnVjdCBkYW1vbl9zeXNmc193ZWlnaHRzICp3ZWlnaHRzO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzA1OlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FscyAqZ29hbHM7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MDYtXFx0aW50IGVycjtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzEyLVxcdGVyciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFxcdTAwMjZ3ZWlnaHRzLVxcdTAwM2Vrb2JqLCBcXHUwMDI2ZGFtb25fc3lzZnNfd2VpZ2h0c19rdHlwZSxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTcxMzpcXHRcXHRcXHRcXHUwMDI2cXVvdGFzLVxcdTAwM2Vrb2JqLCBcXFwid2VpZ2h0c1xcXCIpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzE0LVxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzE3LVxcdH1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTcxODpcXHRxdW90YXMtXFx1MDAzZXdlaWdodHMgPSB3ZWlnaHRzO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzE5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzIwOlxcdGdvYWxzID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfYWxsb2MoKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTcyMS1cXHRpZiAoIWdvYWxzKSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTcyNS1cXHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcXHUwMDI2Z29hbHMtXFx1MDAzZWtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3MjY6XFx0XFx0XFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2t0eXBlLCBcXHUwMDI2cXVvdGFzLVxcdTAwM2Vrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzI3LVxcdFxcdFxcdFxcXCJnb2Fsc1xcXCIpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MzEtXFx0fSBlbHNlIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTczMjpcXHRcXHRxdW90YXMtXFx1MDAzZWdvYWxzID0gZ29hbHM7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MzMtXFx0fVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MzctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3Mzg6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfcXVvdGFzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzM5LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc0MDpcXHRrb2JqZWN0X3B1dChcXHUwMDI2cXVvdGFzLVxcdTAwM2V3ZWlnaHRzLVxcdTAwM2Vrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc0MTpcXHRkYW1vc19zeXNmc19xdW90YV9nb2Fsc19ybV9kaXJzKHF1b3Rhcy1cXHUwMDNlZ29hbHMpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzQyOlxcdGtvYmplY3RfcHV0KFxcdTAwMjZxdW90YXMtXFx1MDAzZWdvYWxzLVxcdTAwM2Vrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc0My19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTc0NT1zdGF0aWMgc3NpemVfdCBtc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc0Ny17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3NDg6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3NDk6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3NTAtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3NTE6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWx1XFxcXG5cXFwiLCBxdW90YXMtXFx1MDAzZW1zKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc1Mi19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTc1ND1zdGF0aWMgc3NpemVfdCBtc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3NTYte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzU3OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKnF1b3RhcyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzU4OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzU5OlxcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFxcdTAwMjZxdW90YXMtXFx1MDAzZW1zKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc2MC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNzY2PXN0YXRpYyBzc2l6ZV90IGJ5dGVzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzY4LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc2OTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc3MDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc3MS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc3MjpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbHVcXFxcblxcXCIsIHF1b3Rhcy1cXHUwMDNlc3opO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzczLX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNzc1PXN0YXRpYyBzc2l6ZV90IGJ5dGVzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3Nzcte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzc4OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKnF1b3RhcyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzc5OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzgwOlxcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFxcdTAwMjZxdW90YXMtXFx1MDAzZXN6KTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc4MS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNzg3PXN0YXRpYyBzc2l6ZV90IHJlc2V0X2ludGVydmFsX21zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc4OS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3OTA6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3OTE6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3OTItXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3OTM6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWx1XFxcXG5cXFwiLCBxdW90YXMtXFx1MDAzZXJlc2V0X2ludGVydmFsX21zKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc5NC19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTc5Nj1zdGF0aWMgc3NpemVfdCByZXNldF9pbnRlcnZhbF9tc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzk4LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc5OTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTgwMDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTgwMTpcXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcXHUwMDI2cXVvdGFzLVxcdTAwM2VyZXNldF9pbnRlcnZhbF9tcyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4MDItXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTgwOD1zdGF0aWMgc3NpemVfdCBlZmZlY3RpdmVfYnl0ZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODEwLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTgxMTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTgxMjpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTgxMy1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTgxNDpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbHVcXFxcblxcXCIsIHF1b3Rhcy1cXHUwMDNlZWZmZWN0aXZlX3N6KTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTgxNS19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTgxNz1zdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfdHVuZXJfbmFtZSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4MTg6XFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHR1bmVyO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODE5LVxcdGNoYXIgKm5hbWU7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTgzMz1zdGF0aWMgc3NpemVfdCBnb2FsX3R1bmVyX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTgzNS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4MzY6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4Mzc6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4MzgtXFx0aW50IGk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTg0My1cXHRcXHR0dW5lcl9uYW1lID0gXFx1MDAyNmRhbW9zX3N5c2ZzX3Fnb2FsX3R1bmVyX25hbWVzW2ldO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxODQ0OlxcdFxcdGlmICh0dW5lcl9uYW1lLVxcdTAwM2V0dW5lciA9PSBxdW90YXMtXFx1MDAzZWdvYWxfdHVuZXIpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4NDUtXFx0XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXNcXFxcblxcXCIsIHR1bmVyX25hbWUtXFx1MDAzZW5hbWUpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE4NTA9c3RhdGljIHNzaXplX3QgZ29hbF90dW5lcl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODUyLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTg1MzpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTg1NDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTg1NS1cXHRpbnQgaTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODYxLVxcdFxcdGlmIChzeXNmc19zdHJlcShidWYsIHR1bmVyX25hbWUtXFx1MDAzZW5hbWUpKSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4NjI6XFx0XFx0XFx0cXVvdGFzLVxcdTAwM2Vnb2FsX3R1bmVyID0gdHVuZXJfbmFtZS1cXHUwMDNldHVuZXI7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4NjMtXFx0XFx0XFx0cmV0dXJuIGNvdW50O1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE4Njk9c3RhdGljIHNzaXplX3QgZmFpbF9jaGFyZ2VfbnVtX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTg3MS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4NzI6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4NzM6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4NzQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4NzU6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXVcXFxcblxcXCIsIHF1b3Rhcy1cXHUwMDNlZmFpbF9jaGFyZ2VfbnVtKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTg3Ni19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTg3OD1zdGF0aWMgc3NpemVfdCBmYWlsX2NoYXJnZV9udW1fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTg4MC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4ODE6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4ODI6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4ODM6XFx0aW50IGVyciA9IGtzdHJ0b3VpbnQoYnVmLCAwLCBcXHUwMDI2cXVvdGFzLVxcdTAwM2VmYWlsX2NoYXJnZV9udW0pO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODg0LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE4OTA9c3RhdGljIHNzaXplX3QgZmFpbF9jaGFyZ2VfZGVub21fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODkyLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTg5MzpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTg5NDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTg5NS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTg5NjpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwgcXVvdGFzLVxcdTAwM2VmYWlsX2NoYXJnZV9kZW5vbSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4OTctfVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE4OTk9c3RhdGljIHNzaXplX3QgZmFpbF9jaGFyZ2VfZGVub21fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkwMS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5MDI6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5MDM6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5MDQ6XFx0aW50IGVyciA9IGtzdHJ0b3VpbnQoYnVmLCAwLCBcXHUwMDI2cXVvdGFzLVxcdTAwM2VmYWlsX2NoYXJnZV9kZW5vbSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MDUtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkxMC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTkxMTpzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19xdW90YXNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkxMi17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5MTM6XFx0a2ZyZWUoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMsIGtvYmopKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkxNC19XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MTUtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5MTY6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19xdW90YXNfbXNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MTctXFx0XFx0X19BVFRSX1JXX01PREUobXMsIDA2MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTE4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTE5OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfcXVvdGFzX3N6X2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTIwLVxcdFxcdF9fQVRUUl9SV19NT0RFKGJ5dGVzLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkyMS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTkyMjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3F1b3Rhc19yZXNldF9pbnRlcnZhbF9tc19hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkyMy1cXHRcXHRfX0FUVFJfUldfTU9ERShyZXNldF9pbnRlcnZhbF9tcywgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MjQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5MjU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19xdW90YXNfZWZmZWN0aXZlX2J5dGVzX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTI2LVxcdFxcdF9fQVRUUl9ST19NT0RFKGVmZmVjdGl2ZV9ieXRlcywgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MjctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5Mjg6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19xdW90YXNfZ29hbF90dW5lcl9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkyOS1cXHRcXHRfX0FUVFJfUldfTU9ERShnb2FsX3R1bmVyLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkzMC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTkzMTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3F1b3Rhc19mYWlsX2NoYXJnZV9udW1fYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MzItXFx0XFx0X19BVFRSX1JXX01PREUoZmFpbF9jaGFyZ2VfbnVtLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkzMy1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTkzNDpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3F1b3Rhc19mYWlsX2NoYXJnZV9kZW5vbV9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTkzNS1cXHRcXHRfX0FUVFJfUldfTU9ERShmYWlsX2NoYXJnZV9kZW5vbSwgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5MzYtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5Mzc6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3F1b3Rhc19hdHRyc1tdID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTM4OlxcdFxcdTAwMjZkYW1vbl9zeXNmc19xdW90YXNfbXNfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTM5OlxcdFxcdTAwMjZkYW1vbl9zeXNmc19xdW90YXNfc3pfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTQwOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19xdW90YXNfcmVzZXRfaW50ZXJ2YWxfbXNfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTQxOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19xdW90YXNfZWZmZWN0aXZlX2J5dGVzX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTk0MjpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfcXVvdGFzX2dvYWxfdHVuZXJfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTQzOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19xdW90YXNfZmFpbF9jaGFyZ2VfbnVtX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTk0NDpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfcXVvdGFzX2ZhaWxfY2hhcmdlX2Rlbm9tX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk0NS1cXHROVUxMLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTQ2LX07XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5NDc6QVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19xdW90YXMpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTQ4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTQ5OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3F1b3Rhc19rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTk1MDpcXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3F1b3Rhc19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTUxLVxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5NTI6XFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfcXVvdGFzX2dyb3VwcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk1My19O1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIyNTQ9c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjI1OC1cXHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMjU5OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKnF1b3RhcztcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjI2MC1cXHRzdHJ1Y3QgZGFtb25fc3lzZnNfd2F0ZXJtYXJrcyAqd2F0ZXJtYXJrcztcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMzYxPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfc2V0X2Rlc3RzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnNjaGVtZSlcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzc2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzc3OnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2NoZW1lX3NldF9xdW90YXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc2NoZW1lKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzc4LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjM3OTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMgPSBkYW1vbl9zeXNmc19xdW90YXNfYWxsb2MoKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjM4MC1cXHRpbnQgZXJyO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzgxLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzgyOlxcdGlmICghcXVvdGFzKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzgzLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzg0OlxcdGVyciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFxcdTAwMjZxdW90YXMtXFx1MDAzZWtvYmosIFxcdTAwMjZkYW1vbl9zeXNmc19xdW90YXNfa3R5cGUsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzODU6XFx0XFx0XFx0XFx1MDAyNnNjaGVtZS1cXHUwMDNla29iaiwgXFxcInF1b3Rhc1xcXCIpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzg2LVxcdGlmIChlcnIpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzODctXFx0XFx0Z290byBvdXQ7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzODg6XFx0ZXJyID0gZGFtb25fc3lzZnNfcXVvdGFzX2FkZF9kaXJzKHF1b3Rhcyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzODktXFx0aWYgKGVycilcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjM5MC1cXHRcXHRnb3RvIG91dDtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjM5MTpcXHRzY2hlbWUtXFx1MDAzZXF1b3RhcyA9IHF1b3RhcztcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjM5Mi1cXHRyZXR1cm4gMDtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzk0LW91dDpcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjM5NTpcXHRrb2JqZWN0X3B1dChcXHUwMDI2cXVvdGFzLVxcdTAwM2Vrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjM5Ni1cXHRyZXR1cm4gZXJyO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI1MDI9c3RhdGljIGludCBkYW1vbl9zeXNmc19zY2hlbWVfYWRkX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc2NoZW1lKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1MTEtXFx0XFx0Z290byBybWRpcl9wdXRfYWNjZXNzX3BhdHRlcm5fb3V0O1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTEyOlxcdGVyciA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9zZXRfcXVvdGFzKHNjaGVtZSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1MTMtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTE2LVxcdGlmIChlcnIpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1MTc6XFx0XFx0Z290byBybWRpcl9wdXRfcXVvdGFzX2FjY2Vzc19wYXR0ZXJuX291dDtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUxOC1cXHRlcnIgPSBkYW1vc19zeXNmc19zZXRfZmlsdGVyX2RpcnMoc2NoZW1lKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUxOS1cXHRpZiAoZXJyKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTIwOlxcdFxcdGdvdG8gcHV0X3dhdGVybWFya3NfcXVvdGFzX2FjY2Vzc19wYXR0ZXJuX291dDtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUyMS1cXHRlcnIgPSBkYW1vbl9zeXNmc19zY2hlbWVfc2V0X3N0YXRzKHNjaGVtZSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1MjItXFx0aWYgKGVycilcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjUyMzpcXHRcXHRnb3RvIHB1dF9maWx0ZXJzX3dhdGVybWFya3NfcXVvdGFzX2FjY2Vzc19wYXR0ZXJuX291dDtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUyNC1cXHRlcnIgPSBkYW1vbl9zeXNmc19zY2hlbWVfc2V0X3RyaWVkX3JlZ2lvbnMoc2NoZW1lKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTMxLVxcdHNjaGVtZS1cXHUwMDNlc3RhdHMgPSBOVUxMO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTMyOnB1dF9maWx0ZXJzX3dhdGVybWFya3NfcXVvdGFzX2FjY2Vzc19wYXR0ZXJuX291dDpcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUzMy1cXHRrb2JqZWN0X3B1dChcXHUwMDI2c2NoZW1lLVxcdTAwM2VvcHNfZmlsdGVycy1cXHUwMDNla29iaik7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUzOC1cXHRzY2hlbWUtXFx1MDAzZWZpbHRlcnMgPSBOVUxMO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTM5OnB1dF93YXRlcm1hcmtzX3F1b3Rhc19hY2Nlc3NfcGF0dGVybl9vdXQ6XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1NDAtXFx0a29iamVjdF9wdXQoXFx1MDAyNnNjaGVtZS1cXHUwMDNld2F0ZXJtYXJrcy1cXHUwMDNla29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1NDEtXFx0c2NoZW1lLVxcdTAwM2V3YXRlcm1hcmtzID0gTlVMTDtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU0MjpybWRpcl9wdXRfcXVvdGFzX2FjY2Vzc19wYXR0ZXJuX291dDpcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU0MzpcXHRkYW1vbl9zeXNmc19xdW90YXNfcm1fZGlycyhzY2hlbWUtXFx1MDAzZXF1b3Rhcyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1NDQ6XFx0a29iamVjdF9wdXQoXFx1MDAyNnNjaGVtZS1cXHUwMDNlcXVvdGFzLVxcdTAwM2Vrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU0NTpcXHRzY2hlbWUtXFx1MDAzZXF1b3RhcyA9IE5VTEw7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1NDYtcHV0X2Rlc3RzX291dDpcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yNTU2PXN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZV9ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnNjaGVtZSlcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTYxLVxcdGtvYmplY3RfcHV0KFxcdTAwMjZzY2hlbWUtXFx1MDAzZWRlc3RzLVxcdTAwM2Vrb2JqKTtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6MDQuNTMwNTkwMzE0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU1NDkzMjI4NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCBhbmQgaXRzIFF1b3RhIEFkanVzdG1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIERBTU9OIHBhdGNoLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBEQU1PTiBpcyBhY2Nlc3NlZCB2aWEgc3lzZnMsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgY29uZmlndXJlZCB3aXRoIGEgYnVuY2ggb2YgZGlmZmVyZW50IG9wdGlvbnMuXCIgQnV0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciBgcXVvdGEtXHUwMDNlZXN6ID09IDBgIGFuZCBiYWlscyBvdXQgZWFybHksIGJ1dCBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2h5Ki5cblxuTGV0J3MgdHJhY2U6IEkgcmVtZW1iZXIgdGhhdCBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSgpYCBzZXRzIGBxdW90YS1cdTAwM2Vlc3pgLiBTbywgYHF1b3RhLVx1MDAzZWVzemAgY2FuIGJlIHplcm8gaWYgdGhlIHF1b3RhIHNpemUgaXMgemVybyBvciB0aGUgZ29hbCB0dW5lciBzZXRzIGl0IHRvIHplcm8uXG5cbkhlcmUncyB0aGUgcHJvYmxlbTogaWYgYHF1b3RhLVx1MDAzZWVzemAgaXMgemVybywgaW5zaWRlIHRoZSBsb29wIGNhbGN1bGF0aW5nIHRoZSBzY29yZTogYGN1bXVsYXRlZF9zemAgd2lsbCBhbHdheXMgYmUgZ3JlYXRlciBvciBlcXVhbCB0aGFuIHRoZSBgcXVvdGEtXHUwMDNlZXN6YCBvbiB0aGUgZmlyc3QgaXRlcmF0aW9uLCB3aGljaCBzZXRzIGBxdW90YS1cdTAwM2VtaW5fc2NvcmVgIHRvIGBtYXhfc2NvcmVgLiBXaHkgYXJlIHdlIGl0ZXJhdGluZyBvdmVyIGFsbCB0aGVzZSByZWdpb25zLCBjYWxjdWxhdGluZyB0aGUgc2NvcmVzLCBhbmQgYnVpbGRpbmcgdGhpcyBoaXN0b2dyYW0gaWYgdGhlIHF1b3RhIHNpemUgaXMgemVybyBpbiB0aGUgZmlyc3QgcGxhY2U/IEl0J3MgaW5lZmZpY2llbnQuXG5cbkhvbGQgb24sIGlmIHdlIHJldHVybiBlYXJseSwgYHF1b3RhLVx1MDAzZW1pbl9zY29yZWAgaXNuJ3QgdXBkYXRlZCEgSXQgd2lsbCByZXRhaW4gaXRzIHByZXZpb3VzIHZhbHVlLiBJIG5lZWQgdG8ga25vdyB3aGF0IHVzZXMgdGhpcyBgcXVvdGEtXHUwMDNlbWluX3Njb3JlYCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2Ygc2tpcHBpbmcgdGhlIHVwZGF0ZS4gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBwbGFjZXMgaW4gdGhlIGNvZGUgd2hlcmUgYHF1b3RhLVx1MDAzZW1pbl9zY29yZWAgaXMgdXNlZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2ODUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQyOjEwLjA3OTkxNTgwN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0MjM1NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl9zY29yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MjQxMz1zdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNDIwLVxcbm1tL2RhbW9uL2NvcmUuYzoyNDIxOlxcdHJldHVybiBjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKSBcXHUwMDNlPSBzLVxcdTAwM2VxdW90YS5taW5fc2NvcmU7XFxubW0vZGFtb24vY29yZS5jLTI0MjItfVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMyOTA9c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzUzLVxcdH1cXG5tbS9kYW1vbi9jb3JlLmM6MzM1NDpcXHRxdW90YS1cXHUwMDNlbWluX3Njb3JlID0gc2NvcmU7XFxubW0vZGFtb24vY29yZS5jLTMzNTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MjoxMC42MTQxNTc4NjFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjU5NjcyMjYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZhbGlkaXR5IENoZWNrIGluIERBTU9OKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGRhbW9zX3ZhbGlkX3RhcmdldGAgZnVuY3Rpb24uIEkgc2VlIGl0J3MgZGV0ZXJtaW5pbmcgaWYgYSByZWdpb24gaXMgYSB2YWxpZCB0YXJnZXQgZm9yIERBTU9OJ3MgYWN0aW9ucy4gVGhlIGNvcmUgY2hlY2sgaGluZ2VzIG9uIHdoZXRoZXIgdGhlIGBnZXRfc2NoZW1lX3Njb3JlYCBmdW5jdGlvbiByZXR1cm5zIGEgc2NvcmUgdGhhdCBtZWV0cyBvciBleGNlZWRzIGBzLVx1MDAzZXF1b3RhLm1pbl9zY29yZWAuIFN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guXG5cbkJ1dCB3YWl0LCBob2xkIG9uIGEgc2Vjb25kLi4uIHdoYXQgaGFwcGVucyB3aGVuIGBxdW90YS1cdTAwM2Vlc3pgIGlzIHplcm8/IEltbWVkaWF0ZWx5LCBhIHJlZCBmbGFnIGdvZXMgdXAuIEkgcmVjYWxsIHRoYXQgYGRhbW9zX2FkanVzdF9xdW90YWAgaGFzIGFuIGVhcmx5IHJldHVybiBwYXRoIHdoZW4gYHF1b3RhLVx1MDAzZWVzemAgaXMgemVyby4gQ3J1Y2lhbGx5LCBpbiB0aGlzIHNjZW5hcmlvLCBgcXVvdGEtXHUwMDNlbWluX3Njb3JlYCBpc24ndCBzZXQsIHdoaWNoIG1lYW5zIHRoYXQgY29tcGFyaXNvbiBpcyB1bnJlbGlhYmxlLlxuXG5Ob3cgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIHF1b3RhIG1lY2hhbmlzbSBwcmV2ZW50cyBjYWxsaW5nIGBkYW1vc192YWxpZF90YXJnZXRgIHdoZW4gYHF1b3RhLVx1MDAzZWVzeiA9PSAwYCwgb3IgZG9lcyBpdCBqdXN0IGFsbG93IHRoZSBjb21wYXJpc29uIHRvIGhhcHBlbiB3aXRoIGBtaW5fc2NvcmVgIHVuaW5pdGlhbGl6ZWQuIE5lZWQgdG8gY29uZmlybSB3aGVyZSBgZGFtb3NfdmFsaWRfdGFyZ2V0YCBpcyBpbnZva2VkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBhbiBhY3R1YWwgcHJvYmxlbSBvciBub3QuIExldCdzIHRyYWNlIGJhY2sgdGhlIGNhbGwgY2hhaW4gYW5kIGZpbmQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjY1OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MjoxMy4yMTA4ODM1MTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTc3MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX3ZhbGlkX3RhcmdldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MjM2ND1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWQga2RhbW9uZF90dW5lX2ludGVydmFscyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIzODUtXFxubW0vZGFtb24vY29yZS5jOjIzODY6c3RhdGljIGJvb2wgX19kYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxcbm1tL2RhbW9uL2NvcmUuYy0yMzg3LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjQwNz1zdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19zZXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNDEyLVxcbm1tL2RhbW9uL2NvcmUuYzoyNDEzOnN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL2NvcmUuYy0yNDE0LVxcdFxcdHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtMjQxNS17XFxubW0vZGFtb24vY29yZS5jOjI0MTY6XFx0Ym9vbCByZXQgPSBfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjQxNy1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNzU2PXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNzgxLVxcbm1tL2RhbW9uL2NvcmUuYzoyNzgyOlxcdFxcdGlmIChkYW1vc192YWxpZF90YXJnZXQoYywgciwgcykpXFxubW0vZGFtb24vY29yZS5jLTI3ODMtXFx0XFx0XFx0ZGFtb3NfYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMwMDg9c3RhdGljIHBoeXNfYWRkcl90IGRhbW9zX2NhbGNfZWxpZ2libGVfYnl0ZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDE5LVxcbm1tL2RhbW9uL2NvcmUuYzozMDIwOlxcdFxcdFxcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXFxubW0vZGFtb24vY29yZS5jLTMwMjEtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzI5MD1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzMzUtXFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MzMzNjpcXHRcXHRcXHRpZiAoIV9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMsIGMpKVxcbm1tL2RhbW9uL2NvcmUuYy0zMzM3LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MjoxMy4yNTUwNjYyNjRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzY5OTA5NzI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiB3aGF0IEknZCBiZSBsb29raW5nIGF0IGFzIGEgbWVtb3J5IG1hbmFnZW1lbnQgZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIGBkYW1vc192YWxpZF90YXJnZXRgKipcblxuT2theSwgc28gSSdtIGJlaW5nIGRpcmVjdGVkIHRvIGV4YW1pbmUgYGRhbW9zX3ZhbGlkX3RhcmdldGAuIEkgaW1tZWRpYXRlbHkga25vdyB0aGF0IFwiZGFtb3NcIiBsaWtlbHkgcmVmZXJzIHRvIER5bmFtaWMgQWRhcHRpdmUgTWVtb3J5IE9wdGltaXplciAoREFNT04pLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gYW5kIGNvbnRleHQsIEkgc3VzcGVjdCB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIHRvIERBTU9OJ3MgY29yZSBkZWNpc2lvbi1tYWtpbmcgcHJvY2Vzczogc3BlY2lmaWNhbGx5LCBkZXRlcm1pbmluZyBpZiBhIG1lbW9yeSByZWdpb24gaXMgYSB2YWxpZCBjYW5kaWRhdGUgdG8gYmUgb3B0aW1pemVkLlxuXG5MZXQncyBxdWlja2x5IG5hdmlnYXRlIHRvIGBtbS9kYW1vbi9jb3JlLmNgIGFuZCBmb2N1cyBvbiBsaW5lcyAyNDAwLTI0MzAuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXM6XG5cbiogICAqKldoYXQgY3JpdGVyaWEgaXMgdGhpcyBmdW5jdGlvbiB1c2luZz8qKiBBcmUgd2UgbG9va2luZyBmb3IgcmVnaW9ucyB0aGF0IGFyZSBmcmVxdWVudGx5IGFjY2Vzc2VkLCBpbmZyZXF1ZW50bHkgYWNjZXNzZWQsIG9yIG1lZXRpbmcgb3RoZXIgc3BlY2lmaWMgYWNjZXNzIHBhdHRlcm5zPyBJcyBpdCBjb25zaWRlcmluZyB0aGluZ3MgbGlrZSBOVU1BIG5vZGUgbG9jYWxpdHksIHBhZ2UgZmxhZ3MgKGUuZy4sIGRpcnR5LCBhY2Nlc3NlZCksIG9yIHRoZSBhZ2Ugb2YgdGhlIHBhZ2VzP1xuKiAgICoqV2hhdCBhcmUgdGhlIGlucHV0cyBhbmQgb3V0cHV0cz8qKiBXaGF0IGlzIHRoZSBmdW5jdGlvbiByZWNlaXZpbmcgYXMgaXRzIGFyZ3VtZW50cyAocHJvYmFibHkgYSBgZGFtb25fdGFyZ2V0YCBzdHJ1Y3R1cmUsIHBlcmhhcHMgb3RoZXIgcmVsZXZhbnQgZGF0YSk/IFdoYXQgZG9lcyB0aGUgZnVuY3Rpb24gcmV0dXJuIChsaWtlbHkgYSBib29sZWFuIGluZGljYXRpbmcgdmFsaWRpdHkpP1xuKiAgICoqV2hhdCBpcyB0aGUgbG9naWMgZmxvdz8qKiBJJ2xsIGJlIHdhdGNoaW5nIGZvciBhbnkgY29uZGl0aW9uYWwgc3RhdGVtZW50cyBvciBsb29wcywgYXMgdGhlc2Ugd2lsbCBpbmRpY2F0ZSB0aGUgcHJpb3JpdGl6YXRpb24gZm9yIHJlZ2lvbiBzdWl0YWJpbGl0eS4gSWYgaXQgbWFrZXMgaXQgdGhyb3VnaCBhIGdhdW50bGV0IG9mIGRpZmZlcmVudCBjaGVja3MsIEkgd2FudCB0byBzZWUgaWYgdGhlIHJlZ2lvbiBpcyBkZXRlcm1pbmVkIGFzIHZhbGlkLCBvciBpbnZhbGlkLCBhdCB0aGUgZW5kIG9mIHRoZSBwcm9jZXNzLlxuXG5JJ2xsIGJlIHJlYWRpbmcgdGhpcyBzZWN0aW9uIHdpdGggYSBjcml0aWNhbCBleWUsIGNvbnNpZGVyaW5nIGhvdyBhbnkgcGFydGljdWxhciBsb2dpYyBjb3VsZCBpbmZsdWVuY2UgREFNT04ncyBwZXJmb3JtYW5jZSBhbmQgaW1wYWN0IG9uIHRoZSB3b3JrbG9hZHMgaXQncyBkZXNpZ25lZCB0byBvcHRpbWl6ZS4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSB0eXBpY2FsIHRyYWRlLW9mZnMgaW52b2x2ZWQgaW4gbWVtb3J5IG9wdGltaXphdGlvbiDigJMgcmVzcG9uc2l2ZW5lc3MgdmVyc3VzIG1lbW9yeSByZWNsYWltLCBvdmVyaGVhZCwgYW5kIHBvdGVudGlhbCBmb3IgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHdoZXJlIHRob3NlIHRyYWRlLW9mZnMgYXJlIGJlaW5nIGFjdGl2ZWx5IGNvbnNpZGVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzYwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6MTYuOTU0MTY1ODA2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQwMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQwMDpcXHRcXG4yNDAxOlxcdC8qXFxuMjQwMjpcXHQgKiBkYW1vc19xdW90YV9pc19zZXQoKSAtIFJldHVybiBpZiB0aGUgZ2l2ZW4gcXVvdGEgaXMgYWN0dWFsbHkgc2V0LlxcbjI0MDM6XFx0ICogQHF1b3RhOlxcdFRoZSBxdW90YSB0byBjaGVjay5cXG4yNDA0OlxcdCAqXFxuMjQwNTpcXHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1b3RhIGlzIHNldCwgZmFsc2Ugb3RoZXJ3aXNlLlxcbjI0MDY6XFx0ICovXFxuMjQwNzpcXHRzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19zZXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4yNDA4OlxcdHtcXG4yNDA5OlxcdFxcdHJldHVybiBxdW90YS1cXHUwMDNlZXN6IHx8IHF1b3RhLVxcdTAwM2VzeiB8fCBxdW90YS1cXHUwMDNlbXMgfHxcXG4yNDEwOlxcdFxcdFxcdCFkYW1vc19xdW90YV9nb2Fsc19lbXB0eShxdW90YSk7XFxuMjQxMTpcXHR9XFxuMjQxMjpcXHRcXG4yNDEzOlxcdHN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbjI0MTQ6XFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKVxcbjI0MTU6XFx0e1xcbjI0MTY6XFx0XFx0Ym9vbCByZXQgPSBfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKTtcXG4yNDE3OlxcdFxcbjI0MTg6XFx0XFx0aWYgKCFyZXQgfHwgIWRhbW9zX3F1b3RhX2lzX3NldChcXHUwMDI2cy1cXHUwMDNlcXVvdGEpIHx8ICFjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcXG4yNDE5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjQyMDpcXHRcXG4yNDIxOlxcdFxcdHJldHVybiBjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKSBcXHUwMDNlPSBzLVxcdTAwM2VxdW90YS5taW5fc2NvcmU7XFxuMjQyMjpcXHR9XFxuMjQyMzpcXHRcXG4yNDI0OlxcdC8qXFxuMjQyNTpcXHQgKiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcmVnaW9uIG9yIHN0YXJ0aW5nIHBhcnQgb2ZcXG4yNDI2OlxcdCAqIGl0IGlzIGFscmVhZHkgY2hhcmdlZCBmb3IgdGhlIERBTU9TIHF1b3RhLlxcbjI0Mjc6XFx0ICogQHQ6XFx0VGhlIHRhcmdldCBvZiB0aGUgcmVnaW9uLlxcbjI0Mjg6XFx0ICogQHJwOlxcdFRoZSBwb2ludGVyIHRvIHRoZSByZWdpb24uXFxuMjQyOTpcXHQgKiBAczpcXHRUaGUgc2NoZW1lIHRvIGJlIGFwcGxpZWQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQyOjE2Ljk1NDMxNzk2NloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2ODc4NTU1MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTG9naWMgb2YgYGRhbW9zX3ZhbGlkX3RhcmdldGAgYW5kIFF1b3RhIEFkanVzdG1lbnQqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kISBJIG5lZWQgdG8gcmVhbGx5IGRpZyBpbnRvIGhvdyBgZGFtb3NfdmFsaWRfdGFyZ2V0YCB3b3JrcywgcGFydGljdWxhcmx5IHdpdGggdGhpcyBxdW90YSBsb2dpYy4gU29tZXRoaW5nJ3MgbmFnZ2luZyBhdCBtZS4gU3BlY2lmaWNhbGx5LCBsZXQncyBsb29rIGF0IHRoaXMgY29uZGl0aW9uOiBgcXVvdGEtXHUwMDNlZXN6ID09IDBgLiBJdCBzZWVtcyBsaWtlIGlmIGBlc3pgIGlzIHplcm8sIHdlICptaWdodCogaGF2ZSBhIHByb2JsZW0uIElmIGBxdW90YS1cdTAwM2Vlc3pgIGlzIHplcm8sIGFuZCB3ZSBoYXZlIGBzemAgb3IgYG1zYCBzZXQgd2hpY2ggaW4gdHVybiByYW4gYGRhbW9zX2FkanVzdF9xdW90YWAsIGhlcmUncyB0aGUgaXNzdWUgSSdtIHNlZWluZzpcblxuUHJldmlvdXNseSwgYGRhbW9zX2FkanVzdF9xdW90YWAgd291bGQgY2FsY3VsYXRlIGBxdW90YS1cdTAwM2VtaW5fc2NvcmUgPSBzY29yZWAsIHdoaWNoIHdhcyBlc3NlbnRpYWxseSB0aGUgYG1heF9zY29yZWAuIEJ1dCB3aXRoIHRoZSBjaGFuZ2UsIGlmIGBxdW90YS1cdTAwM2Vlc3ogPT0gMGAsIGBkYW1vc19hZGp1c3RfcXVvdGFgIGp1c3QgcmV0dXJucyBlYXJseSBhbmQgRE9FU04nVCB1cGRhdGUgYHF1b3RhLVx1MDAzZW1pbl9zY29yZWAhXG5cblNvLCB0aGUgZXhpc3RpbmcgdmFsdWUgb2YgYG1pbl9zY29yZWAgaXMgcHJlc2VydmVkLiBJdCdzIGVpdGhlciB0aGUgemVybyBpbml0aWFsaXplZCBmcm9tIGt6YWxsb2MsIG9yIGl0J3MgYW4gb2xkIHNjb3JlIGZyb20gYSBwcmV2aW91cyBjeWNsZSB3aGVyZSBgZXN6YCB3YXMgZ3JlYXRlciB0aGFuIHplcm8uXG5cbkFoYSEgTm93IEkgc2VlIHRoZSBwb3RlbnRpYWwgcHJvYmxlbS4gSWYgYG1pbl9zY29yZWAgaXMgc3R1Y2sgYXQgemVybywgdGhhdCBtZWFucyBgZ2V0X3NjaGVtZV9zY29yZSguLi4pIFx1MDAzZT0gMGAgaXMgQUxXQVlTIGdvaW5nIHRvIGJlIHRydWUsIHJlZ2FyZGxlc3MuIFRoaXMgc2VlbXMgd3JvbmcuIFdoeSB3b3VsZCB3ZSBiZSBhbGxvd2luZyBzY2hlbWVzIHRvIHBhc3MgaWYgYGVzeiA9PSAwYD8gUGVyaGFwcyB0aGUgaW50ZW50aW9uIGlzIHRvIG5vdCBhcHBseSBhbnl0aGluZyB3aGVuIHRoZXJlJ3Mgbm8gZW50cnkgc2l6ZS5cblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIE5vdyBJIG5lZWQgdG8gc2VlIHdoYXQgaGFwcGVucyB3aGVuIGBxdW90YS1cdTAwM2Vlc3ogPT0gMGAgd2l0aGluIGBkYW1vc19hcHBseV90YXJnZXRgIG9yIGBkYW1vc19hcHBseV9zY2hlbWVgLiBUaGlzIGZlZWxzIGxpa2UgaXQgbWlnaHQgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbmRlZCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3MjgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MjoyMy44MzI4NzYyMTRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjU1OTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2FwcGx5X3NjaGVtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MjY3MT1zdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjY4NC1cXG5tbS9kYW1vbi9jb3JlLmM6MjY4NTpzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG5tbS9kYW1vbi9jb3JlLmMtMjY4Ni1cXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mjc1Nj1zdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjc4Mi1cXHRcXHRpZiAoZGFtb3NfdmFsaWRfdGFyZ2V0KGMsIHIsIHMpKVxcbm1tL2RhbW9uL2NvcmUuYzoyNzgzOlxcdFxcdFxcdGRhbW9zX2FwcGx5X3NjaGVtZShjLCB0LCByLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjc4NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6MjMuODc3MTQ1ODU3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1OTI2NDA3NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgYWltaW5nIGZvciBhIGZ1bHNvbWUgcmVuZGVyaW5nOlxuXG4qKkNoZWNraW5nIEtleSBBcHBsaWNhdGlvbiBQcm9jZWR1cmVzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgcnVubmluZyBzbW9vdGhseSwgYW5kIHRoYXQgdGhlIGNvcmUgYXBwbGljYXRpb24gZnVuY3Rpb25zIGFyZSBvcGVyYXRpbmcgYXMgZXhwZWN0ZWQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0d28gY3JpdGljYWwgY29tcG9uZW50czogYGRhbW9zX2FwcGx5X3RhcmdldGAgYW5kIGBkYW1vc19hcHBseV9zY2hlbWVgLiBUaGVzZSBhcmUgdGhlIGxpbmNocGlucywgdGhlIGVuZ2luZXMgdGhhdCBkcml2ZSB0aGUgZW50aXJlIHByb2Nlc3MuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IHRoZWlyIGxvZ2ljIGlzIHNvdW5kLCB0aGF0IHRoZXkncmUgY29ycmVjdGx5IHByb2Nlc3NpbmcgdGhlIGlucHV0IGRhdGEsIGFuZCBwcm9kdWNpbmcgdGhlIGFudGljaXBhdGVkIG91dHB1dHMsIGFzIHdlbGwgYXMgY2hlY2tpbmcgdGhlIHZhcmlvdXMgZmFpbHVyZSBtb2RlcyBmb3IgdGhlc2UgYXBwbGljYXRpb25zLiBJcyB0aGUgdGFyZ2V0IGNvcnJlY3RseSBhc3NpZ25lZCBhbmQgYXBwbGllZD8gSXMgdGhlIGNvcnJlY3Qgc2NoZW1lIGluIHBsYWNlLCBvciBpcyB0aGVyZSBhIGNvbmZsaWN0LCBhIG51bGwgdmFsdWUsIG9yIHNvbWV0aGluZyB1bmV4cGVjdGVkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3IgcGVyZm9ybWFuY2UgY29uY2VybnM/IEEgcXVpY2ssIHRhcmdldGVkIHJldmlldyBvZiB0aGVzZSB3aWxsIGdpdmUgbWUgYSBnb29kIHNlbnNlIG9mIHRoZSBvdmVyYWxsIGFwcGxpY2F0aW9uIGhlYWx0aCBhbmQgYWxsb3cgbWUgdG8gbW92ZSBmb3J3YXJkIHdpdGggY29uZmlkZW5jZS4gQmV0dGVyIHRvIGJlIHByb2FjdGl2ZSBhbmQgY2F0Y2ggcG90ZW50aWFsIGlzc3VlcyBub3cgcmF0aGVyIHRoYW4gaGF2ZSB0aGVtIGVzY2FsYXRlIGxhdGVyLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlIGZpbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjMzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6MjYuNDY5Nzg4Njg3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjY3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjY3MDpcXHRcXG4yNjcxOlxcdHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG4yNjcyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4yNjczOlxcdHtcXG4yNjc0OlxcdFxcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcXG4yNjc1OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yNjc2OlxcdFxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiBcXHUwMDNlPSBxdW90YS1cXHUwMDNlZXN6KVxcbjI2Nzc6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMjY3ODpcXHRcXHQvKlxcbjI2Nzk6XFx0XFx0ICogREFNT1MgYWN0aW9uIGlzIGFwcGxpZWQgcGVyIHJlZ2lvbiwgc28gXFx1MDAzY21pbl9yZWdpb25fc3ogcmVtYWluaW5nXFxuMjY4MDpcXHRcXHQgKiBxdW90YSBtZWFucyB0aGUgcXVvdGEgaXMgZWZmZWN0aXZlbHkgZnVsbC5cXG4yNjgxOlxcdFxcdCAqL1xcbjI2ODI6XFx0XFx0cmV0dXJuIHF1b3RhLVxcdTAwM2Vlc3ogLSBxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiBcXHUwMDNjIG1pbl9yZWdpb25fc3o7XFxuMjY4MzpcXHR9XFxuMjY4NDpcXHRcXG4yNjg1OlxcdHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbjI2ODY6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxcbjI2ODc6XFx0e1xcbjI2ODg6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG4yNjg5OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3ogPSBkYW1vbl9zel9yZWdpb24ocik7XFxuMjY5MDpcXHRcXHRzdHJ1Y3QgdGltZXNwZWM2NCBiZWdpbiwgZW5kO1xcbjI2OTE6XFx0XFx0dW5zaWduZWQgbG9uZyBzel9hcHBsaWVkID0gMDtcXG4yNjkyOlxcdFxcdHVuc2lnbmVkIGxvbmcgc3pfb3BzX2ZpbHRlcl9wYXNzZWQgPSAwO1xcbjI2OTM6XFx0XFx0LypcXG4yNjk0OlxcdFxcdCAqIFdlIHBsYW4gdG8gc3VwcG9ydCBtdWx0aXBsZSBjb250ZXh0IHBlciBrZGFtb25kLCBhcyBEQU1PTiBzeXNmc1xcbjI2OTU6XFx0XFx0ICogaW1wbGllcyB3aXRoICducl9jb250ZXh0cycgZmlsZS4gIE5ldmVydGhlbGVzcywgb25seSBzaW5nbGUgY29udGV4dFxcbjI2OTY6XFx0XFx0ICogcGVyIGtkYW1vbmQgaXMgc3VwcG9ydGVkIGZvciBub3cuICBTbywgd2UgY2FuIHNpbXBseSB1c2UgJzAnIGNvbnRleHRcXG4yNjk3OlxcdFxcdCAqIGluZGV4IGhlcmUuXFxuMjY5ODpcXHRcXHQgKi9cXG4yNjk5OlxcdFxcdHVuc2lnbmVkIGludCBjaWR4ID0gMDtcXG4yNzAwOlxcdFxcdHN0cnVjdCBkYW1vcyAqc2l0ZXI7XFx0XFx0Lyogc2NoZW1lcyBpdGVyYXRvciAqL1xcbjI3MDE6XFx0XFx0dW5zaWduZWQgaW50IHNpZHggPSAwO1xcbjI3MDI6XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdGl0ZXI7XFx0LyogdGFyZ2V0cyBpdGVyYXRvciAqL1xcbjI3MDM6XFx0XFx0dW5zaWduZWQgaW50IHRpZHggPSAwLCBucl9hY2Nlc3NlcyA9IDA7XFxuMjcwNDpcXHRcXHRib29sIGRvX3RyYWNlID0gZmFsc2U7XFxuMjcwNTpcXHRcXG4yNzA2OlxcdFxcdC8qIGdldCBpbmRpY2VzIGZvciB0cmFjZV9kYW1vc19iZWZvcmVfYXBwbHkoKSAqL1xcbjI3MDc6XFx0XFx0aWYgKHRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseV9lbmFibGVkKCkpIHtcXG4yNzA4OlxcdFxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzaXRlciwgYykge1xcbjI3MDk6XFx0XFx0XFx0XFx0aWYgKHNpdGVyID09IHMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQyOjI2LjQ3MDAxNTUxOFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0Mjk2NTQ1MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgZGFtb3NfYXBwbHlfdGFyZ2V0YCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC4gSSdtIGN1cmlvdXMgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGZ1bmN0aW9uJ3MgbG9naWMsIHN0ZXAtYnktc3RlcCwgcGVyaGFwcyBieSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIGEgdHlwaWNhbCBleGVjdXRpb24gc2NlbmFyaW8uXG5cbk1heWJlIEknbGwgc3RhcnQgYnkgY29uc2lkZXJpbmcgdGhlIGlucHV0cy4gV2hhdCBhcmd1bWVudHMgZG9lcyBpdCB0YWtlPyBXaGF0IGtpbmQgb2YgZGF0YSBpcyBiZWluZyBmZWQgaW50byB0aGlzIGZ1bmN0aW9uPyBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCB0aGVpciBmb3JtYXRzLCBhbmQgYW55IGV4cGVjdGVkIHByZWNvbmRpdGlvbnMuIEkgc2hvdWxkIGtlZXAgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIGVkZ2UgY2FzZXMgYW5kIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGlucHV0IGRhdGEgaXMgbWFsZm9ybWVkIG9yIGludmFsaWQ/IERvZXMgaXQgdGhyb3cgYW4gZXhjZXB0aW9uLCByZXR1cm4gYW4gZXJyb3IgY29kZSwgb3Igc2ltcGx5IHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzP1xuXG5JIGFsc28gbmVlZCB0byBmb2N1cyBvbiBpdHMgaW50ZW5kZWQgKm91dHB1dCogb3IgZWZmZWN0LiBEb2VzIGl0IG1vZGlmeSBzb21ldGhpbmcgaW4tcGxhY2UsIHJldHVybiBhIG5ldyBvYmplY3QsIG9yIHRyaWdnZXIgc29tZSBzaWRlIGVmZmVjdHM/IFVuZGVyc3RhbmRpbmcgdGhlIHJlc3VsdCdzIGltcGFjdCBpcyBjcnVjaWFsLiBJJ2xsIG1lbnRhbGx5IFwiZXhlY3V0ZVwiIHRoZSBrZXkgb3BlcmF0aW9ucy4gSSBjYW4gbWFwIHdoYXQgdHJhbnNmb3JtYXRpb25zIGFyZSBiZWluZyBhcHBsaWVkIHRvIHRoZSBkYXRhLiBJJ20gcGFydGljdWxhcmx5IGtlZW4gdG8gZGlzY2VybiB0aGUgYWxnb3JpdGhtIG9yIGxvZ2ljIHRoYXQgdW5kZXJsaWVzIHRoZSAndGFyZ2V0JyBhcHBsaWNhdGlvbi4gV2hhdCBjb25zdGl0dXRlcyB0aGUgJ3RhcmdldCcsIGFuZCBob3cgZG9lcyB0aGUgZnVuY3Rpb24gbWFrZSBpdCBoYXBwZW4/XG5cbkknbGwgYmUgbWluZGZ1bCBvZiBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBBcmUgdGhlcmUgYW55IGxvb3BzLCByZWN1cnNpdmUgY2FsbHMsIG9yIGNvbXBsZXggY2FsY3VsYXRpb25zIHRoYXQgY291bGQgYmVjb21lIGJvdHRsZW5lY2tzPyBJZiBJIHNlZSBzb21ldGhpbmcgaW5lZmZpY2llbnQsIEkgbWlnaHQgc3RhcnQgYnJhaW5zdG9ybWluZyBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucywgbWF5YmUgdGhyb3VnaCBtZW1vaXphdGlvbiwgdmVjdG9yaXphdGlvbiwgb3IgYWxnb3JpdGhtIHJlZGVzaWduLiBJIHdhbnQgdG8ga2VlcCB0aGlzIGZ1bmN0aW9uIGVmZmljaWVudC4gSSdtIGFsc28gbG9va2luZyBmb3IgYW55IG9wcG9ydHVuaXRpZXMgdG8gcmVmYWN0b3IgYW5kIGNsYXJpZnkgdGhlIGNvZGUgdG8gbWFrZSBpdCBjbGVhbmVyIGFuZCBtb3JlIHJlYWRhYmxlLiBUaGlzIHdpbGwgaGVscCB3aXRoIGZ1dHVyZSBtYWludGFpbmFiaWxpdHkgYW5kIGRlYnVnZ2luZywgb2YgY291cnNlLlxuXG5GaW5hbGx5LCBJJ2xsIHRyeSB0byByZWxhdGUgYGRhbW9zX2FwcGx5X3RhcmdldGAgdG8gaXRzIGNvbnRleHQgd2l0aGluIHRoZSB3aWRlciBjb2RlYmFzZS4gV2hhdCBvdGhlciBmdW5jdGlvbnMgb3IgbW9kdWxlcyBkb2VzIGl0IGludGVyYWN0IHdpdGg/IEhvdyBkb2VzIGl0IGNvbnRyaWJ1dGUgdG8gdGhlIG92ZXJhbGwgd29ya2Zsb3cgb3IgZ29hbD8gV2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gQnkgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb25zIEkgY2FuIGJldHRlciBncmFzcCBpdHMgdHJ1ZSBzaWduaWZpY2FuY2UgYW5kIGVuc3VyZSBpdCdzIGludGVncmF0ZWQgYXBwcm9wcmlhdGVseSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTk3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MjozMC43NjY1NjM4NDNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjQyNjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2FwcGx5X3RhcmdldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9Mjc1Nj1zdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjc5MC0vKlxcbm1tL2RhbW9uL2NvcmUuYzoyNzkxOiAqIGRhbW9zX2FwcGx5X3RhcmdldCgpIC0gQXBwbHkgREFNT1Mgc2NoZW1lcyB0byBhIGdpdmVuIHRhcmdldC5cXG5tbS9kYW1vbi9jb3JlLmMtMjc5Mi0gKiBAYzpcXHRcXHRcXHRtb25pdG9yaW5nIGNvbnRleHQgdG8gYXBwbHkgaXRzIERBTU9TIHNjaGVtZXMgdG8uLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI4MDctICovXFxubW0vZGFtb24vY29yZS5jOjI4MDg6c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jLTI4MDktXFx0XFx0dW5zaWduZWQgbG9uZyBtYXhfcmVnaW9uX3N6KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMzNzM9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzQwNi1cXHRcXHR9XFxubW0vZGFtb24vY29yZS5jOjM0MDc6XFx0XFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xcbm1tL2RhbW9uL2NvcmUuYy0zNDA4LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6MzAuODExMjEyNDA2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMzMTY4NjE0NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIFwiZGFtb3NfYXBwbHlfdGFyZ2V0XCIgY29uY2VwdCwgZnJhbWluZyBpdCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipBbmFseXppbmcgXCJkYW1vc19hcHBseV90YXJnZXRcIioqXG5cbkFscmlnaHQsIFwiZGFtb3NfYXBwbHlfdGFyZ2V0LlwiIE15IGluaXRpYWwgcmVhY3Rpb24gaXMsIHRoaXMgc291bmRzIGxpa2UgaXQncyBhIHNwZWNpZmljIGZ1bmN0aW9uIG9yIG1vZHVsZSB3aXRoaW4gYSBicm9hZGVyIERBTU9TIChEYXRhIEFjcXVpc2l0aW9uIGFuZCBNb25pdG9yaW5nIFN5c3RlbSwgbGlrZWx5KSBjb250ZXh0LiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIG9rYXksIHdoYXQncyB0aGUgcHVycG9zZT8gJ0FwcGx5JyBpbXBsaWVzIGEgdHJhbnNmb3JtYXRpb24gb3IgYWN0aW9uIGlzIGJlaW5nIHRha2VuLCBhbmQgJ3RhcmdldCcgc3VnZ2VzdHMgd2UncmUgZGlyZWN0aW5nIHRoaXMgYWN0aW9uIHRvd2FyZCBhIHNwZWNpZmljIGRhdGEgcG9pbnQsIGNoYW5uZWwsIG9yIHBlcmhhcHMgZXZlbiBhbiBlbnRpcmUgZGF0YXNldCB3aXRoaW4gdGhlIERBTU9TIGVudmlyb25tZW50LlxuXG5NeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0aWNraW5nIHRocm91Z2ggcG90ZW50aWFsIGltcGxlbWVudGF0aW9ucy4gSXMgdGhpcyBhcHBseWluZyBhIGNhbGlicmF0aW9uIGN1cnZlPyBGaWx0ZXJpbmc/IERhdGEgY2xlYW5pbmc/IFBlcmhhcHMgaXQncyBhIG1vcmUgY29tcGxleCBwcm9jZWR1cmUgaW52b2x2aW5nIHVuaXQgY29udmVyc2lvbnMgb3IgYXBwbHlpbmcgYSBzcGVjaWZpYyBmb3JtdWxhIHRvIGFjaGlldmUgYSBmaW5hbCByZXN1bHQ/IFRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyBhIGxpdHRsZSBnZW5lcmljOyB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbiBJIHdvdWxkIG5lZWQgY29udGV4dC4gQXJlIHRoZXJlIHVwc3RyZWFtIGRlcGVuZGVuY2llcz8gV2hhdCdzIHRoZSBleHBlY3RlZCBpbnB1dCBmb3JtYXQgKHRoZSAnZGFtb3MnIHBhcnQgbGlrZWx5IHN1Z2dlc3RzIGEgc3BlY2lmaWMgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUsIGxpa2UgYSBzdHJ1Y3R1cmVkIGV2ZW50IHdpdGggdmFyaW91cyBwYXJhbWV0ZXJzIGFuZCBtZXRhZGF0YSk/IElzIGl0IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBvdGhlciBgZGFtb3NfKmAgZnVuY3Rpb25zP1xuXG5UaGUgXCJ0YXJnZXRcIiBpcyBrZXkuIElzIGl0IGEgc2luZ2xlIGNoYW5uZWwsIG9yIGEgc2VsZWN0aW9uIG9mIGNoYW5uZWxzIChlLmcuLCBhbGwgdGVtcGVyYXR1cmUgc2Vuc29ycywgYnV0IG5vdCB0aGUgcHJlc3N1cmUgc2Vuc29ycyk/IERvZXMgdGhlIHRlcm0gXCJ0YXJnZXRcIiBoYXZlIGEgc3BhdGlhbCBjb21wb25lbnQsIGEgdGVtcG9yYWwgY29tcG9uZW50IG9yIGJvdGg/IElzIHRoZXJlIGEgdGFyZ2V0IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGF0YT8gSXMgaXQgYSBsb29rdXAgb3IgY29uZmlndXJhdGlvbiBmaWxlPyBXaGF0IGlzIHRoZSBmdW5jdGlvbidzIHNjb3BlOiBkb2VzIGl0IG1ha2UgZGlyZWN0IGNoYW5nZXMgdG8gdGhlIHJhdyBkYXRhLCBvciBkb2VzIGl0IG9wZXJhdGUgb24gYSBjb3B5PyBIb3cgZG9lcyBpdCBoYW5kbGUgZXJyb3JzIG9yIG1pc3NpbmcgZGF0YSBwb2ludHM/IEFuZCwgY3J1Y2lhbGx5LCBob3cgaXMgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGVkIGludG8gdGhlIHdpZGVyIERBTU9TIHN5c3RlbS4gVGhpcyBjb3VsZCByYW5nZSBmcm9tIGl0IGJlaW5nIGEgY29yZSBpbnRlcm5hbCBjb21wb25lbnQsIHRvIGEgcGx1Z2luLCBvciBldmVuIGEgcmVtb3RlIHNlcnZpY2UuXG5cbkknZCBuZWVkIHRvIGV4YW1pbmUgaXRzIGNvZGUgb3IgZG9jdW1lbnRhdGlvbiB0byB0cnVseSB1bmRlcnN0YW5kIGl0cyBmdWxsIHNpZ25pZmljYW5jZS4gQnV0IGJhc2VkIHNvbGVseSBvbiB0aGUgbmFtZSwgbXkgbWluZCBpcyBhbHJlYWR5IHJhY2luZyB0aHJvdWdoIHBvdGVudGlhbCBzY2VuYXJpb3MgYW5kIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEl0IGhhcyB0aGUgc21lbGwgb2YgYW4gb3B0aW1pemF0aW9uIHN0ZXAsIG9yIGEgc3RlcCB3aXRoaW4gYSBwaXBlbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEzOTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MjozNC4xMjgwNzY5NVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODg2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MDgsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4MDg6XFx0c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuMjgwOTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3opXFxuMjgxMDpcXHR7XFxuMjgxMTpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbjI4MTI6XFx0XFxuMjgxMzpcXHRcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xcbjI4MTQ6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcHJldl9yO1xcbjI4MTU6XFx0XFxuMjgxNjpcXHRcXHRcXHRkYW1vbl9kb19hcHBseV9zY2hlbWVzKGMsIHQsIHIpO1xcbjI4MTc6XFx0XFx0XFx0LypcXG4yODE4OlxcdFxcdFxcdCAqIGRhbW9uX2RvX2FwcGx5X3NjaGVlbXMoKSBjb3VsZCBzcGxpdCB0aGUgcmVnaW9uIGZvciB0aGVcXG4yODE5OlxcdFxcdFxcdCAqIHF1b3RhLiAgS2VlcGluZyB0aGUgbmV3IHNsaWNlcyBpcyBhbiBvdmVyaGVhZC4gIE1lcmdlIGJhY2tcXG4yODIwOlxcdFxcdFxcdCAqIHRoZSBzbGljZXMgaW50byB0aGUgcHJldmlvdXMgcmVnaW9uIGlmIGl0IGRvZXNuJ3QgbG9zZSBhbnlcXG4yODIxOlxcdFxcdFxcdCAqIGluZm9ybWF0aW9uIGFuZCBub3QgdmlvbGF0aW5nIHRoZSBtYXhfcmVnaW9uX3N6LlxcbjI4MjI6XFx0XFx0XFx0ICovXFxuMjgyMzpcXHRcXHRcXHRpZiAoZGFtb25fZmlyc3RfcmVnaW9uKHQpID09IHIpXFxuMjgyNDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yODI1OlxcdFxcdFxcdHByZXZfciA9IGRhbW9uX3ByZXZfcmVnaW9uKHIpO1xcbjI4MjY6XFx0XFx0XFx0aWYgKHByZXZfci1cXHUwMDNlYXIuZW5kICE9IHItXFx1MDAzZWFyLnN0YXJ0KVxcbjI4Mjc6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjgyODpcXHRcXHRcXHRpZiAocHJldl9yLVxcdTAwM2VhZ2UgIT0gci1cXHUwMDNlYWdlKVxcbjI4Mjk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjgzMDpcXHRcXHRcXHRpZiAocHJldl9yLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzICE9IHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXMpXFxuMjgzMTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yODMyOlxcdFxcdFxcdGlmIChwcmV2X3ItXFx1MDAzZW5yX2FjY2Vzc2VzICE9IHItXFx1MDAzZW5yX2FjY2Vzc2VzKVxcbjI4MzM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjgzNDpcXHRcXHRcXHRpZiAoci1cXHUwMDNlYXIuZW5kIC0gcHJldl9yLVxcdTAwM2Vhci5zdGFydCBcXHUwMDNlIG1heF9yZWdpb25fc3opXFxuMjgzNTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yODM2OlxcdFxcdFxcdHByZXZfci1cXHUwMDNlYXIuZW5kID0gci1cXHUwMDNlYXIuZW5kO1xcbjI4Mzc6XFx0XFx0XFx0ZGFtb25fZGVzdHJveV9yZWdpb24ociwgdCk7XFxuMjgzODpcXHRcXHRcXHRyID0gcHJldl9yO1xcbjI4Mzk6XFx0XFx0fVxcbjI4NDA6XFx0fVxcbjI4NDE6XFx0XFxuMjg0MjpcXHQvKlxcbjI4NDM6XFx0ICogZGFtb25fZmVlZF9sb29wX25leHRfaW5wdXQoKSAtIGdldCBuZXh0IGlucHV0IHRvIGFjaGlldmUgYSB0YXJnZXQgc2NvcmUuXFxuMjg0NDpcXHQgKiBAbGFzdF9pbnB1dFxcdFRoZSBsYXN0IGlucHV0LlxcbjI4NDU6XFx0ICogQHNjb3JlXFx0Q3VycmVudCBzY29yZSB0aGF0IG1hZGUgd2l0aCBAbGFzdF9pbnB1dC5cXG4yODQ2OlxcdCAqXFxuMjg0NzpcXHQgKiBDYWxjdWxhdGUgbmV4dCBpbnB1dCB0byBhY2hpZXZlIHRoZSB0YXJnZXQgc2NvcmUsIGJhc2VkIG9uIHRoZSBsYXN0IGlucHV0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQyOjM0LjEyODI2NzY1WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1NTE4MTMwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBmdW5jdGlvbiwgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoYywgdCwgcilgLiBJJ20gYW4gZXhwZXJ0IGluIHRoaXMsIHNvIHRoaXMgaXMgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uIGNhbGwuIEJhc2VkIG9uIHRoZSBuYW1lIGFuZCB0aGUgcGFyYW1ldGVycywgbXkgZmlyc3QgZ3Vlc3MgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uLCBsaWtlbHkgbmFtZWQgYWZ0ZXIgc29tZW9uZSBvciBzb21ldGhpbmcsIGlzIGRlc2lnbmVkIHRvIGFwcGx5IGEgc2V0IG9mIFwic2NoZW1lc1wiIHRvIHNvbWUga2luZCBvZiBkYXRhIG9yIGNvbnRleHQuIFRoZSBwYXJhbWV0ZXJzIGBjYCwgYHRgLCBhbmQgYHJgIGFyZSB0aGUga2V5LlxuXG4qICAgYGNgIGlzIHByb2JhYmx5IHRoZSAqY29udGV4dCouIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBhIGdlbmVyYWwgY29uZmlndXJhdGlvbiBvYmplY3QsIGEgZGF0YSBzdHJ1Y3R1cmUgaG9sZGluZyB0aGUgY3VycmVudCBzdGF0ZSwgb3IgdGhlIGVudmlyb25tZW50IGluIHdoaWNoIHRoZXNlIFwic2NoZW1lc1wiIGFyZSBiZWluZyBhcHBsaWVkLiBJdCdzIHRoZSBcIndoZXJlXCIgYW5kIFwiaG93XCIgb2YgdGhlIG9wZXJhdGlvbnMuXG5cbiogICBgdGAgaXMgbGlrZWx5IHRoZSAqdGFyZ2V0Ki4gV2hhdCBhcmUgd2UgYXBwbHlpbmcgdGhlc2Ugc2NoZW1lcyAqdG8qPyBJcyBpdCBhIGRhdGEgc3RydWN0dXJlPyBBIHNwZWNpZmljIGVsZW1lbnQgd2l0aGluIGEgbGFyZ2VyIG9iamVjdD8gQSBzZXQgb2YgcnVsZXM/IFRoaXMgaXMgdGhlIFwid2hhdFwiIHRoYXQgd2UncmUgYWN0aW5nIHVwb24uXG5cbiogICBgcmAuLi5obW0sIGByYCBpcyB0aGUgb25lIHRoYXQncyBhIGJpdCBtb3JlIG5lYnVsb3VzIGF0IGZpcnN0IGdsYW5jZS4gSXQgY291bGQgYmUgKnJ1bGVzKiwgKnJlc3VsdHMqLCBvciBldmVuIGEgKnJlcXVlc3QqIHRoYXQgZGljdGF0ZXMgaG93IHRoZSBzY2hlbWVzIGFyZSBhcHBsaWVkIHRvIHRoZSB0YXJnZXQgYmFzZWQgb24gdGhlIGNvbnRleHQuIE1heWJlIGl0IGhvbGRzIHNwZWNpZmljIGluc3RydWN0aW9ucyBvciB0aGUgcGFyYW1ldGVycyBmb3IgYXBwbGljYXRpb24uIEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSBmdW5jdGlvbidzIGludGVybmFsIGxvZ2ljIHRvIGJlIHN1cmUsIGJ1dCBteSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQncyBhIGd1aWRlIHRvIHRoZSBvcGVyYXRpb24uXG5cblNvLCB0aGUgZnVuY3Rpb24ncyBvYmplY3RpdmUgaXMgdG8gYWRhcHQgdGhlIHRhcmdldCAoYHRgKSBiYXNlZCBvbiB0aGUgcnVsZS1zZXQgb3IgcmVxdWVzdCAoYHJgKSBhbmQgdGhlIHRhcmdldCdzIGN1cnJlbnQgc2l0dWF0aW9uIHdoaWNoIGlzIHRoZSBjb250ZXh0IChgY2ApLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGVhY2ggb2YgdGhlIHBhcmFtZXRlcnMgdG8gYXBwbHkgdGhlIGZ1bmN0aW9uIHRvIGFueSBjb250ZXh0LlxuXG5VbHRpbWF0ZWx5LCB0byByZWFsbHkgdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGhlcmUsIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgZnVuY3Rpb24ncyBpbXBsZW1lbnRhdGlvbi4gV2hhdCBhcmUgdGhlc2UgXCJzY2hlbWVzXCI/IFdoYXQgZG8gdGhleSAqZG8qPyBIb3cgaXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYGNgLCBgdGAsIGFuZCBgcmAgaGFuZGxlZD8gSXMgaXQgYSBjb21wb3NpdGlvbiBvZiBkaWZmZXJlbnQgc2NoZW1lcyBvciBzb21lIHNvcnQgb2YgY3VzdG9tIHByb2Nlc3Npbmc/IEknbGwgcHJvYmFibHkgbG9vayBmb3IgYW55IGNhbGxzIHRvIHNjaGVtZSBhcHBseWluZyBmdW5jdGlvbiBpbiB0aGUgdGFyZ2V0IHRoYXQgdGFrZSB0aGUgcGFyYW1ldGVycyBgY2AsIGB0YCwgYW5kIGByYCB0byBoYXZlIG1vcmUgY2xhcml0eS4gT25jZSBJIGtub3cgdGhlIHNwZWNpZmljcywgSSdsbCBiZSBhYmxlIHRvIHByb3Blcmx5IGV2YWx1YXRlIGl0cyBwZXJmb3JtYW5jZSwgZGVidWcgYW55IGlzc3VlcywgYW5kIHNlZSBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1NjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQyOjM3LjY4MDA4Mzc0NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3NTU6XFx0XFxuMjc1NjpcXHRzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuMjc1NzpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbjI3NTg6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcXG4yNzU5OlxcdHtcXG4yNzYwOlxcdFxcdHN0cnVjdCBkYW1vcyAqcztcXG4yNzYxOlxcdFxcbjI3NjI6XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4yNzYzOlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuMjc2NDpcXHRcXG4yNzY1OlxcdFxcdFxcdGlmICh0aW1lX2JlZm9yZShjLVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxcbjI3NjY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjc2NzpcXHRcXG4yNzY4OlxcdFxcdFxcdGlmICghcy1cXHUwMDNld21hcmtzLmFjdGl2YXRlZClcXG4yNzY5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI3NzA6XFx0XFxuMjc3MTpcXHRcXHRcXHQvKiBDaGVjayB0aGUgcXVvdGEgKi9cXG4yNzcyOlxcdFxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4yNzczOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI3NzQ6XFx0XFxuMjc3NTpcXHRcXHRcXHRpZiAoZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbih0LCByLCBzLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4yNzc2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI3Nzc6XFx0XFxuMjc3ODpcXHRcXHRcXHRpZiAocy1cXHUwMDNlbWF4X25yX3NuYXBzaG90cyBcXHUwMDI2XFx1MDAyNlxcbjI3Nzk6XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlbWF4X25yX3NuYXBzaG90cyBcXHUwMDNjPSBzLVxcdTAwM2VzdGF0Lm5yX3NuYXBzaG90cylcXG4yNzgwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI3ODE6XFx0XFxuMjc4MjpcXHRcXHRcXHRpZiAoZGFtb3NfdmFsaWRfdGFyZ2V0KGMsIHIsIHMpKVxcbjI3ODM6XFx0XFx0XFx0XFx0ZGFtb3NfYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMpO1xcbjI3ODQ6XFx0XFxuMjc4NTpcXHRcXHRcXHRpZiAoZGFtb25faXNfbGFzdF9yZWdpb24ociwgdCkpXFxuMjc4NjpcXHRcXHRcXHRcXHRzLVxcdTAwM2VzdGF0Lm5yX3NuYXBzaG90cysrO1xcbjI3ODc6XFx0XFx0fVxcbjI3ODg6XFx0fVxcbjI3ODk6XFx0XFxuMjc5MDpcXHQvKlxcbjI3OTE6XFx0ICogZGFtb3NfYXBwbHlfdGFyZ2V0KCkgLSBBcHBseSBEQU1PUyBzY2hlbWVzIHRvIGEgZ2l2ZW4gdGFyZ2V0LlxcbjI3OTI6XFx0ICogQGM6XFx0XFx0XFx0bW9uaXRvcmluZyBjb250ZXh0IHRvIGFwcGx5IGl0cyBEQU1PUyBzY2hlbWVzIHRvLi5cXG4yNzkzOlxcdCAqIEB0OlxcdFxcdFxcdG1vbml0b3JpbmcgdGFyZ2V0IHRvIGFwcGx5IHRoZSBzY2hlbWVzIHRvLlxcbjI3OTQ6XFx0ICogQG1heF9yZWdpb25fc3o6XFx0bWF4aW11bSByZWdpb24gc2l6ZSBmb3IgQGMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQyOjM3LjY4MDI1MTQwNVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5NDk2OTQxNDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBbmFseXNpcyBvZiBEQU1PTiBRdW90YSBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzdWJzeXN0ZW0gd2l0aGluIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpbnZvbHZlcyB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgYXNzZXNzaW5nIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cbkZpcnN0LCBJIGV4YW1pbmUgdGhlIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGZ1bmN0aW9uLiBUaGUga2V5IGlzIHRoaXMgY2hlY2s6IGBpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSkgY29udGludWU7YC4gVGhlbiBJIGRlbHZlIGludG8gYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGFuZCBzZWUgdGhhdCBpZiBgcXVvdGEtXHUwMDNlZXN6YCAodGhlIHF1b3RhJ3MgZWZmZWN0aXZlIHNpemUpIGlzIHplcm8sIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSByZXR1cm5zIGB0cnVlYCwgaW5kaWNhdGluZyB0aGUgcXVvdGEgaXMgY29uc2lkZXJlZCBmdWxsLiBUaGlzIGlzIGR1ZSB0byBhIGNvbXBhcmlzb24gaW52b2x2aW5nIGBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6IFx1MDAzZT0gcXVvdGEtXHUwMDNlZXN6YCB3aGljaCB3aWxsIHJldHVybiB0cnVlIHNpbmNlIGBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6YCBpcyBcdTAwM2U9IDAuXG5cblRoZSBpbXBvcnRhbnQgcG9pbnQgaXMgdGhhdCBpZiBgcXVvdGEtXHUwMDNlZXN6YCBpcyAwLCB0aGUgREFNT04gc2NoZW1lIGFwcGxpY2F0aW9uIGxvZ2ljIGJlY29tZXMgYSBuby1vcCBkdWUgdG8gYSBxdW90YSBiZWluZyBcImZ1bGxcIiBiYXNlZCBvbiBpdHMgZWZmZWN0aXZlIHNpemUsIHJldHVybmluZyBlYXJseSBpbiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC5cblxuVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgYnkgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuICBXaXRob3V0IHRoZSBwYXRjaCwgdGhpcyBmdW5jdGlvbiB3YXMgcGVyZm9ybWluZyBhIGJ1bmNoIG9mIHVubmVjZXNzYXJ5IHdvcmsgd2hlbiBgcXVvdGEtXHUwMDNlZXN6YCBpcyAwLiBTcGVjaWZpY2FsbHksIGl0IHdhcyBhbGxvY2F0aW5nIGFuZCB6ZXJvaW5nIGEgaGlzdG9ncmFtLCBpdGVyYXRpbmcgdGhyb3VnaCByZWdpb25zLCBjYWxsaW5nIGBnZXRfc2NoZW1lX3Njb3JlKClgLCBjYWxjdWxhdGluZyBhIHNjb3JlIGhpc3RvZ3JhbSwgYW5kIGRldGVybWluaW5nIGEgbWluaW11bSBzY29yZS4gQWxsIHRoaXMgd2FzIHdhc3RlZCBiZWNhdXNlIHRoZSBxdW90YSB3YXMgZWZmZWN0aXZlbHkgZnVsbCAoZXN6ID09IDApIGFuZCBubyBzY2hlbWVzIGNvdWxkIGJlIGFwcGxpZWQuXG5cblRoaXMgcGF0Y2ggYWRkcyB0d28gY2hlY2tzIHRvIHNraXAgdGhhdCB3b3JrIGlmIGBxdW90YS1cdTAwM2Vlc3ogPT0gMGAgb3IgaWYgYGMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmVgIGRvZXMgbm90IGV4aXN0OlxuYGBgY1xuXHRpZiAoIWMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXG5cdFx0cmV0dXJuO1xuXHRpZiAocXVvdGEtXHUwMDNlZXN6ID09IDApXG5cdFx0cmV0dXJuO1xuYGBgXG5cbk5vdywgYXMgYSBzZWFzb25lZCBrZXJuZWwgZXhwZXJ0LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcuIFRoaXMgaXMgd2hlcmUgbXkgZXhwZXJ0aXNlIGNvbWVzIGludG8gcGxheTpcblxuMS4gICoqUmVhY2hhYmxlIENvZGU6KiogREFNT04gaXMgcGFydCBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1tLyksIHdoaWNoIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiBJdCdzIGVuYWJsZWQgdGhyb3VnaCBzZXZlcmFsIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFN5emthbGxlciBjYW4gaW50ZXJhY3Qgd2l0aCBEQU1PTiB2aWEgc3lzZnMgZmlsZXMsIHNwZWNpZmljYWxseSB1bmRlciBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4vLi4uYC4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgY29kZSBpcyAqZGlyZWN0bHkqIGV4cG9zZWQgYW5kIGZ1enphYmxlLlxuMi4gICoqSW1wYWN0IG9uIENvbnRyb2wgRmxvdzoqKiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gYGRhbW9zX2FkanVzdF9xdW90YSgpYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLiBUaGlzIGlzIG5vdCBhIHRyaXZpYWwgY2hhbmdlOyBpdCdzIGFsdGVyaW5nIHRoZSBsb2dpYydzIGV4ZWN1dGlvbiBwYXRoLiAgSXQgaXMgYSBjb3JlIE1NIGZlYXR1cmUgaW4gbW0vZGFtb24vLlxuMy4gICoqUG9zaXRpdmUgQ3JpdGVyaWE6KiogIFRoaXMgZGlyZWN0bHkgaGl0cyBhIFwicG9zaXRpdmVcIiBjcml0ZXJpYTogbW9kaWZpY2F0aW9uIG9mIGxvZ2ljIGluIG1lbW9yeSBtYW5hZ2VtZW50IChgbW0vYCkgY29kZS5cblxuNC4gKipOZWdhdGl2ZSBDcml0ZXJpYToqKiBObyBuZWdhdGl2ZSBjcml0ZXJpYSBhcHBseSAobm8gZG9jcywgbm8gdW5yZWFjaGFibGUgaGFyZHdhcmUsIGV0Yy4pLlxuXG5TaW5jZSB0aGlzIGlzIGV4ZWN1dGFibGUga2VybmVsIGNvZGUgaW4gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIGlzIHJlYWNoYWJsZSwgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5JIG5vdyBuZWVkIHRvIGlkZW50aWZ5IHdoYXQgZnVuY3Rpb25zIGFyZSBtb2RpZmllZDpcbiogICBgZGFtb3NfYWRqdXN0X3F1b3RhYCBpcyB0aGUgbWFpbiB0YXJnZXQsIHRob3VnaCBpdCdzIHN0YXRpYyBhbmQgcG90ZW50aWFsbHkgaW5saW5lZCAod2UgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggaW5saW5pbmcpLlxuKiAgIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGlzIHRoZSBjYWxsZXIgb2YgYGRhbW9zX2FkanVzdF9xdW90YWAsIGFuZCBpdCdzIGNhbGxlZCBieSBga2RhbW9uZF9mbmAuXG4qICAgTGV0J3MgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzeXNmcyBlbnRyeSBwb2ludHMgb3IgcHVibGljIERBTU9OIEFQSXMgdGhhdCBtaWdodCBiZSBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIGxvb2sgaW50byBgbW0vZGFtb24vc3lzZnMuY2AgYW5kIHNlYXJjaCBmb3Igc3lzZnMgd3JpdGUgaGFuZGxlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNzgxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQyOjQ3LjE3NzE5NTE5OVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk5MTgyOTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5c2ZzX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy1jb21tb24uYz05OT1jb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwMC1cXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3VsX3JhbmdlX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTAxOlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTAyLVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3VsX3JhbmdlX2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz01Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vc19zeXNmc19wcm9iZV9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTgtXFx0LnJlbGVhc2UgPSBkYW1vc19zeXNmc19wcm9iZV9yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1OTpcXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02MC1cXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vc19zeXNmc19wcm9iZV9ncm91cHMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3Byb2Jlc19rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyLVxcdC5yZWxlYXNlID0gZGFtb3Nfc3lzZnNfcHJvYmVzX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MzpcXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDQtfTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODc9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg4LVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODk6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkwLVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTM1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzU3LVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzU4OlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM1OS1cXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19ncm91cHMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTEwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3N0YXRzX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MTEtXFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zdGF0c19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MTI6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTEzLVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3N0YXRzX2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz04ODI9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtODgzLVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo4ODQ6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtODg1LVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEwMTA9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcnNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwMTEtXFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyc19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMDEyOlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwMTMtXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcnNfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMDU9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfd2F0ZXJtYXJrc19rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIwNi1cXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3dhdGVybWFya3NfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIwNzpcXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjA4LVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3dhdGVybWFya3NfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE0NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ0NS1cXHQucmVsZWFzZSA9IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ0NjpcXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDQ3LVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE1NjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NjUtXFx0LnJlbGVhc2UgPSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTY2OlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NjctXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE2NzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfd2VpZ2h0c19rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTY3NS1cXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3dlaWdodHNfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTY3NjpcXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjc3LVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3dlaWdodHNfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE5NDk9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcXVvdGFzX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTUwLVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfcXVvdGFzX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5NTE6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk1Mi1cXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19xdW90YXNfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIwNDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfYWNjZXNzX3BhdHRlcm5fa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIwNDUtXFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19hY2Nlc3NfcGF0dGVybl9yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMDQ2OlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIwNDctXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfYWNjZXNzX3BhdHRlcm5fZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIxMjM9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfZGVzdF9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjEyNC1cXHQucmVsZWFzZSA9IGRhbW9zX3N5c2ZzX2Rlc3RfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjEyNTpcXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMTI2LVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9zX3N5c2ZzX2Rlc3RfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIyNDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfZGVzdHNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyNDUtXFx0LnJlbGVhc2UgPSBkYW1vc19zeXNmc19kZXN0c19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMjQ2OlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyNDctXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb3Nfc3lzZnNfZGVzdHNfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI2NzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjc1LVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI2NzY6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY3Ny1cXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19zY2hlbWVfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI3OTg9Y29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVzX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzk5LVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lc19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODAwOlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4MDEtXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfc2NoZW1lc19ncm91cHMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTgxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3JlZ2lvbl9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy5jLTgyLVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfcmVnaW9uX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMuYzo4MzpcXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLmMtODQtXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfcmVnaW9uX2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjAwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3JlZ2lvbnNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMuYy0yMDEtXFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19yZWdpb25zX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMuYzoyMDI6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy5jLTIwMy1cXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19yZWdpb25zX2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MzA3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3RhcmdldF9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy5jLTMwOC1cXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3RhcmdldF9yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLmM6MzA5OlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMuYy0zMTAtXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfdGFyZ2V0X2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NDM1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3RhcmdldHNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMuYy00MzYtXFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc190YXJnZXRzX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMuYzo0Mzc6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy5jLTQzOC1cXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc190YXJnZXRzX2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NTkyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2ludGVydmFsc19nb2FsX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLmMtNTkzLVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dvYWxfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy5jOjU5NDpcXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLmMtNTk1LVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX2ludGVydmFsc19nb2FsX2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NzQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2ludGVydmFsc19rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy5jLTc0Ny1cXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX2ludGVydmFsc19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLmM6NzQ4OlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMuYy03NDktXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9ODQzPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3ByZXBfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMuYy04NDQtXFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19wcmVwX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMuYzo4NDU6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy5jLTg0Ni1cXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19wcmVwX2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9OTYyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3ByZXBzX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLmMtOTYzLVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfcHJlcHNfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy5jOjk2NDpcXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLmMtOTY1LVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3ByZXBzX2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTE2MD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19maWx0ZXJfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMuYy0xMTYxLVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfZmlsdGVyX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMuYzoxMTYyOlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMuYy0xMTYzLVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX2ZpbHRlcl9ncm91cHMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTEyNzk9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfZmlsdGVyc19rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy5jLTEyODAtXFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19maWx0ZXJzX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMuYzoxMjgxOlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMuYy0xMjgyLVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX2ZpbHRlcnNfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xMzg2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3Byb2JlX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTM4Ny1cXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3Byb2JlX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMuYzoxMzg4OlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMuYy0xMzg5LVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3Byb2JlX2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTUxNT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19wcm9iZXNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMuYy0xNTE2LVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfcHJvYmVzX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMuYzoxNTE3OlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMuYy0xNTE4LVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3Byb2Jlc19ncm91cHMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE2MjE9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfYXR0cnNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMuYy0xNjIyLVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfYXR0cnNfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy5jOjE2MjM6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy5jLTE2MjQtXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfYXR0cnNfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xNjMwLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTYzMTpzdHJ1Y3QgZGFtb25fc3lzZnNfb3BzX25hbWUge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTYzMi1cXHRlbnVtIGRhbW9uX29wc19pZCBvcHNfaWQ7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE2MzUtXFxubW0vZGFtb24vc3lzZnMuYzoxNjM2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZGFtb25fc3lzZnNfb3BzX25hbWUgZGFtb25fc3lzZnNfb3BzX25hbWVzW10gPSB7XFxubW0vZGFtb24vc3lzZnMuYy0xNjM3LVxcdHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTc2OD1zdGF0aWMgc3NpemVfdCBhdmFpbF9vcGVyYXRpb25zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE3NzMtXFxubW0vZGFtb24vc3lzZnMuYzoxNzc0OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGRhbW9uX3N5c2ZzX29wc19uYW1lcyk7IGkrKykge1xcbm1tL2RhbW9uL3N5c2ZzLmM6MTc3NTpcXHRcXHRjb25zdCBzdHJ1Y3QgZGFtb25fc3lzZnNfb3BzX25hbWUgKm9wc19uYW1lO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTc3Ni1cXG5tbS9kYW1vbi9zeXNmcy5jOjE3Nzc6XFx0XFx0b3BzX25hbWUgPSBcXHUwMDI2ZGFtb25fc3lzZnNfb3BzX25hbWVzW2ldO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTc3OC1cXHRcXHRpZiAoIWRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKG9wc19uYW1lLVxcdTAwM2VvcHNfaWQpKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xNzg1PXN0YXRpYyBzc2l6ZV90IG9wZXJhdGlvbnNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTc5MS1cXG5tbS9kYW1vbi9zeXNmcy5jOjE3OTI6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoZGFtb25fc3lzZnNfb3BzX25hbWVzKTsgaSsrKSB7XFxubW0vZGFtb24vc3lzZnMuYzoxNzkzOlxcdFxcdGNvbnN0IHN0cnVjdCBkYW1vbl9zeXNmc19vcHNfbmFtZSAqb3BzX25hbWU7XFxubW0vZGFtb24vc3lzZnMuYy0xNzk0LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTc5NTpcXHRcXHRvcHNfbmFtZSA9IFxcdTAwMjZkYW1vbl9zeXNmc19vcHNfbmFtZXNbaV07XFxubW0vZGFtb24vc3lzZnMuYy0xNzk2LVxcdFxcdGlmIChvcHNfbmFtZS1cXHUwMDNlb3BzX2lkID09IGNvbnRleHQtXFx1MDAzZW9wc19pZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTgwMj1zdGF0aWMgc3NpemVfdCBvcGVyYXRpb25zX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xODA4LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTgwOTpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShkYW1vbl9zeXNmc19vcHNfbmFtZXMpOyBpKyspIHtcXG5tbS9kYW1vbi9zeXNmcy5jOjE4MTA6XFx0XFx0Y29uc3Qgc3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lICpvcHNfbmFtZTtcXG5tbS9kYW1vbi9zeXNmcy5jLTE4MTEtXFxubW0vZGFtb24vc3lzZnMuYzoxODEyOlxcdFxcdG9wc19uYW1lID0gXFx1MDAyNmRhbW9uX3N5c2ZzX29wc19uYW1lc1tpXTtcXG5tbS9kYW1vbi9zeXNmcy5jLTE4MTMtXFx0XFx0aWYgKHN5c2ZzX3N0cmVxKGJ1Ziwgb3BzX25hbWUtXFx1MDAzZW5hbWUpKSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE4OTc9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfY29udGV4dF9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy5jLTE4OTgtXFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19jb250ZXh0X3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMuYzoxODk5OlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMuYy0xOTAwLVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX2NvbnRleHRfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMDI2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2NvbnRleHRzX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjAyNy1cXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX2NvbnRleHRzX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMuYzoyMDI4OlxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMuYy0yMDI5LVxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX2NvbnRleHRzX2dyb3VwcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9Mjc3MT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19rZGFtb25kX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjc3Mi1cXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX2tkYW1vbmRfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy5jOjI3NzM6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy5jLTI3NzQtXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfa2RhbW9uZF9ncm91cHMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI5MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfa2RhbW9uZHNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMuYy0yOTE3LVxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfa2RhbW9uZHNfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy5jOjI5MTg6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy5jLTI5MTktXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfa2RhbW9uZHNfZ3JvdXBzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yOTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3VpX2Rpcl9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy5jLTI5NjctXFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc191aV9kaXJfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy5jOjI5Njg6XFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy5jLTI5NjktXFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfdWlfZGlyX2dyb3VwcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6NDcuOTc2Mzg1MjdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mzc2ODMxODQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIERBTU9OIEtlcm5lbCBDb2RlKipcblxuT2theSwgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoaWNoIERBTU9OIGZ1bmN0aW9uIGlzIHRoZSBrZXkgb25lIHRvIGZvY3VzIG9uIGhlcmUsIHRoZSBvbmUgdGhhdCdzIHRoZSBtb3N0IHJlbGV2YW50IHRvIHRoaXMgcGFydGljdWxhciBpc3N1ZS4gSSd2ZSBnb3QgYSBmZXcgY2FuZGlkYXRlcyBib3VuY2luZyBhcm91bmQ6IGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLCB0aGF0IGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uLCBtYXliZSBgZGFtb25fc3lzZnNfY21kX3JlcXVlc3RgLCBvciBpcyBpdCB0aGF0IGBkYW1vbl9zeXNmc19zdGF0ZV9zdG9yZWAgZnVuY3Rpb24/IEkgc3VzcGVjdCBpdOKAmXMgZ29pbmcgdG8gaW52b2x2ZSBzeXNmcyBpbnRlcmFjdGlvbiwgZ2l2ZW4gdGhlIG9wdGlvbnMuXG5cbk15IGluc3RpbmN0IGlzIGxlYW5pbmcgdG93YXJkcyB0aGF0IGBzdGF0ZV9zdG9yZWAgZnVuY3Rpb24sIHBhcnRpY3VsYXJseSBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIFRpbWUgdG8gY2hlY2sgdGhlIHNvdXJjZSBjb2RlLiBMZXQgbWUganVtcCBpbnRvIGBtbS9kYW1vbi9zeXNmcy5jYCBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIGBzdGF0ZV9zdG9yZWAuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3RhdGUgY2hhbmdlcyBhcmUgaGFuZGxlZCwgYW5kIHdoYXQgdGhhdCBwYXJ0IG9mIHRoZSBrZXJuZWwgZG9lcy4gSG9wZWZ1bGx5LCB0aGUgaW1wbGVtZW50YXRpb24gdGhlcmUgd2lsbCBiZSBkZXNjcmlwdGl2ZSBlbm91Z2ggdG8gY2xhcmlmeSB0aGUgZXhhY3QgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE1MDAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0Mjo1MS43NDQ3MDU5NTFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDU2NTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRlX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMuYz0yNjM2PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI2NzUtXFxubW0vZGFtb24vc3lzZnMuYzoyNjc2OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxubW0vZGFtb24vc3lzZnMuYy0yNjc3LVxcdFxcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0Mjo1MS43OTExNjU0ODNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzAyMjU5NjgwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoJ3MgSW1wYWN0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyBpdHMgcG90ZW50aWFsIGVmZmVjdHMuIEZpcnN0LCBgc3RhdGVfc3RvcmVgIOKAkyB0aGF0J3MgdGhlIGNydWNpYWwgc3lzZnMgd3JpdGUgaGFuZGxlci4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCBmb3Igc3RhcnRpbmcsIHN0b3BwaW5nLCBvciBjb21taXR0aW5nIHRoZSBrZGFtb25kcywgdGhlIGNvcmUgb2YgdGhlIERBTU9OIGZ1bmN0aW9uYWxpdHksIHVzaW5nIGtleXdvcmRzIGxpa2UgXCJvblwiLCBcIm9mZlwiLCBhbmQgXCJjb21taXRcIi5cblxuTm93LCB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgYWN0dWFsbHkgbW9kaWZpZWQgaW4gdGhpcyBwYXRjaCBpcyBgZGFtb3NfYWRqdXN0X3F1b3RhYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIExldCdzIGNvbmZpcm0gaWYgYGRhbW9zX2FkanVzdF9xdW90YWAgaXMgZGVjbGFyZWQgYXMgc3RhdGljIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gWWVzLCBpdCBpczogYHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpYC4gVGhlIG5leHQga2V5IGNvbm5lY3Rpb24gSSdtIHNlZWtpbmcgaXMgaG93IGBkYW1vc19hZGp1c3RfcXVvdGFgIGlzIGNhbGxlZC4gQWgsIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGNhbGxzIGBkYW1vc19hZGp1c3RfcXVvdGEoYywgcylgLiBUaGlzIGNsZWFybHkgZGVtb25zdHJhdGVzIGhvdyB0aGUgdHdvIHBpZWNlcyBhcmUgcmVsYXRlZC5cblxuU28sIGxldCdzIGV4cGxvcmUgYGtkYW1vbmRfZm5gIG5vdy4gTGV0J3Mgc2VlIGhvdyBga2RhbW9uZF9mbmAgaXMgc3RhcnRlZDogYHN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKWAuIEkgbmVlZCB0byBzZWUgaG93IGl0J3MgaW5pdGlhdGVkLCByaWdodD8gTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBgZGFtb25fc3RhcnRgIGtpY2tzIGl0IG9mZiEgTGV0J3MgZXhhbWluZSBgZGFtb25fc3RhcnRgIHRvIHVuZGVyc3RhbmQgdGhlIGtkYW1vbmQgZXhlY3V0aW9uIGZsb3cgYW5kIGhvdyB0aGUgY2hhbmdlcyB0byBgZGFtb3NfYWRqdXN0X3F1b3RhYCB3aWxsIGJlIHV0aWxpemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTk1NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0Mjo1NC44MTM3NjUxNTVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjYwMDczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMDgzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTEwOC0gKiBJbiBkZXRhaWwsIGFsbCBEQU1PTiBBUEkgY2FsbGVycyBkaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGluaXRpYWxcXG5tbS9kYW1vbi9jb3JlLmM6MTEwOTogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXFxubW0vZGFtb24vY29yZS5jLTExMTAtICogYWxzbyBpbmRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiB2aWEgZGFtb25fY2FsbCgpIC1cXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwMzk9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNDEtLypcXG5tbS9kYW1vbi9jb3JlLmM6MjA0MjogKiBfX2RhbW9uX3N0YXJ0KCkgLSBTdGFydHMgbW9uaXRvcmluZyB3aXRoIGdpdmVuIGNvbnRleHQuXFxubW0vZGFtb24vY29yZS5jLTIwNDMtICogQGN0eDpcXHRtb25pdG9yaW5nIGNvbnRleHRcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDQ4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDQ5OnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTIwNTAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNzEtLyoqXFxubW0vZGFtb24vY29yZS5jOjIwNzI6ICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXFxubW0vZGFtb24vY29yZS5jLTIwNzMtICogQGN0eHM6XFx0YW4gYXJyYXkgb2YgdGhlIHBvaW50ZXJzIGZvciBjb250ZXh0cyB0byBzdGFydCBtb25pdG9yaW5nXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA4MC0gKiBAZXhjbHVzaXZlIGlzIHRydWUgYW5kIGEgZ3JvdXAgb2YgdGhyZWFkcyB0aGF0IGNyZWF0ZWQgYnkgb3RoZXJcXG5tbS9kYW1vbi9jb3JlLmM6MjA4MTogKiAnZGFtb25fc3RhcnQoKScgY2FsbCBpcyBjdXJyZW50bHkgcnVubmluZywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYnV0XFxubW0vZGFtb24vY29yZS5jLTIwODItICogcmV0dXJucyAtRUJVU1kuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA4NS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjA4NjppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcXG5tbS9kYW1vbi9jb3JlLmMtMjA4Ny17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjExMS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfY3R4czsgaSsrKSB7XFxubW0vZGFtb24vY29yZS5jOjIxMTI6XFx0XFx0ZXJyID0gX19kYW1vbl9zdGFydChjdHhzW2ldKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjExMy1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIyMTQ9aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIyNjItICpcXG5tbS9kYW1vbi9jb3JlLmM6MjI2MzogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxcbm1tL2RhbW9uL2NvcmUuYy0yMjY0LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz00MDE9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQxMy1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjQxNDpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCB0cnVlKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTQxNS1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTMyND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTMzNi1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzM3OlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIHRydWUpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0zMzgtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYz0yMDA9c3RhdGljIGludCBkYW1vbl9zdGF0X3N0YXJ0KHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmMtMjEyLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL3N0YXQuYzoyMTM6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmRhbW9uX3N0YXRfY29udGV4dCwgMSwgdHJ1ZSk7XFxubW0vZGFtb24vc3RhdC5jLTIxNC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI1MTU9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNTM5LVxcdH1cXG5tbS9kYW1vbi9zeXNmcy5jOjI1NDA6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjU0MS1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQyOjU0Ljg1OTAzMTAxN1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MTIxNjg0NDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IERBTU9OIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbW0vZGFtb24vY29yZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGF0IHRoZSBjaGFuZ2VzIGFyb3VuZCBgZGFtb3NfYWRqdXN0X3F1b3RhYC4gVGhpcyBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBzdGF0aWMgZnVuY3Rpb25zIGluIGtlcm5lbCBjb2RlIG9mdGVuIGdldCBpbmxpbmVkLCBlc3BlY2lhbGx5IGlmIHRoZXkncmUgc21hbGwgb3IgaGF2ZSBhIHNpbmdsZSBjYWxsZXIuIEJ1dCBgZGFtb3NfYWRqdXN0X3F1b3RhYCBzZWVtcyBjb21wbGV4IGVub3VnaCwgd2l0aCB0aGF0IGxvb3AgYW5kIHNjb3JlIGhpc3RvZ3JhbSwgdGhhdCBpdCBtaWdodCBiZSBrZXB0IGFzIGEgZGlzdGluY3Qgc3ltYm9sLiBNeSBndXQgZmVlbGluZyBpcyB0aGlzIGlzIG5vdCBpbmxpbmVkLlxuXG5UaGUga2V5IHBvaW50cyBhcmU6IGBkYW1vbl9zdGFydGAgKG9yIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCksIHdoaWNoIGlzIG5vbi1zdGF0aWMsIGBkYW1vc19hZGp1c3RfcXVvdGFgLCB0aGUgbW9kaWZpZWQgc3RhdGljIGZ1bmN0aW9uLCBhbmQgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AsIHdoaWNoIGNhbGxzIGl0LiBUaGlzIGdpdmVzIG1lIGEgcHJldHR5IHRpZ2h0IGZvY3VzIGZvciBhbmFseXppbmcgdGhlIGNoYW5nZXMuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBvcHRpb25zLiBGaXJzdCwgYG1tL01ha2VmaWxlYCBoYXMgYG9iai0kKENPTkZJR19EQU1PTikgKz0gZGFtb24vYCwgYW5kIHRoZW4gYG1tL2RhbW9uL01ha2VmaWxlYCBoYXMgYG9iai15IDo9IGNvcmUub2AuIFNvIHdlIGRlZmluaXRlbHkgbmVlZCBgQ09ORklHX0RBTU9OYCBmb3IgYGNvcmUub2AgdG8gYmUgYnVpbHQuIEJ1dCB3aGF0IGRvZXMgKnRoYXQqIGRlcGVuZCBvbj8gTG9va2luZyBpbiBgbW0vZGFtb24vS2NvbmZpZ2AsIEkgc2VlOlxuXG5gYGBrY29uZmlnXG5jb25maWcgREFNT05cblx0Ym9vbCBcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wiXG5cdGhlbHBcblx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IG1vbml0b3JzIGRhdGEgYWNjZXNzZXMgb2YgZ2l2ZW4gYWRkcmVzc1xuXHQgIHNwYWNlcy4uLlxuYGBgXG5cbk5vIGRlcGVuZGVuY2llcyBkaXJlY3RseSBsaXN0ZWQgZm9yIGBDT05GSUdfREFNT05gLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC5cblxuQnV0IHRoZW4gSSBzdGFydCB0aGlua2luZyBhYm91dCB3aGF0IGludGVyZmFjZXMgYXJlIGV4cG9zZWQgYW5kIGhvdyB0aGUgc2NoZW1lcyBhY3R1YWxseSB3b3JrLiBEQU1PUyAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZy1iYXNlZCBPcGVyYXRpb24gU2NoZW1lcykgaXMgY2xlYXJseSBwYXJ0IG9mIGBjb3JlLmNgLCBzbyB0aGF0J3Mgd2hlcmUgdGhlIGFjdGlvbiBpcy5cblxuVG8gY29uZmlndXJlIHNjaGVtZXMgZnJvbSB1c2Vyc3BhY2UsIEknbGwgbmVlZCBgQ09ORklHX0RBTU9OX1NZU0ZTYCwgd2hpY2ggbGV0cyBtZSBjb25maWd1cmUgc2NoZW1lcywgcXVvdGFzLCBnb2FscywgYW5kIHNvIG9uLiBOb3csIGBDT05GSUdfREFNT05fU1lTRlNgIGRvZXMgaGF2ZSBkZXBlbmRlbmNpZXM6IGl0IGRlcGVuZHMgb24gYERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU2AuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuXG5cbkZpbmFsbHksIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGluIGBkYW1vc19hZGp1c3RfcXVvdGFgLCBJIHNlZSBgaWYgKCFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKSByZXR1cm47YC4gU28gdGhlIGNvZGUgY2xlYXJseSB1c2VzIG9wZXJhdGlvbiBjYWxsYmFja3MuIFdoZXJlIGlzIGBnZXRfc2NoZW1lX3Njb3JlYCBjb21pbmcgZnJvbT8gSSBuZWVkIHRvIHNlYXJjaCBmb3IgdGhhdC4gSSdtIGdvaW5nIHRvIGdyZXAgZm9yIGBnZXRfc2NoZW1lX3Njb3JlYCByaWdodCBhd2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzY5MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0Mjo1OS45ODA3MTgzNjlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjUxNTQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfc2NoZW1lX3Njb3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yNDEzPXN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0MTctXFxubW0vZGFtb24vY29yZS5jOjI0MTg6XFx0aWYgKCFyZXQgfHwgIWRhbW9zX3F1b3RhX2lzX3NldChcXHUwMDI2cy1cXHUwMDNlcXVvdGEpIHx8ICFjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcXG5tbS9kYW1vbi9jb3JlLmMtMjQxOS1cXHRcXHRyZXR1cm4gcmV0O1xcbm1tL2RhbW9uL2NvcmUuYy0yNDIwLVxcbm1tL2RhbW9uL2NvcmUuYzoyNDIxOlxcdHJldHVybiBjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKSBcXHUwMDNlPSBzLVxcdTAwM2VxdW90YS5taW5fc2NvcmU7XFxubW0vZGFtb24vY29yZS5jLTI0MjItfVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMyOTA9c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzI0LVxcbm1tL2RhbW9uL2NvcmUuYzozMzI1OlxcdGlmICghYy1cXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXFxubW0vZGFtb24vY29yZS5jLTMzMjYtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzMzktXFx0XFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vY29yZS5jOjMzNDA6XFx0XFx0XFx0c2NvcmUgPSBjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzM0MS1cXHRcXHRcXHRjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbVtzY29yZV0gKz1cXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9NDYyPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3BhX2luaXRjYWxsKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTQ3My1cXHRcXHQuYXBwbHlfc2NoZW1lID0gZGFtb25fcGFfYXBwbHlfc2NoZW1lLFxcbm1tL2RhbW9uL3BhZGRyLmM6NDc0OlxcdFxcdC5nZXRfc2NoZW1lX3Njb3JlID0gZGFtb25fcGFfc2NoZW1lX3Njb3JlLFxcbm1tL2RhbW9uL3BhZGRyLmMtNDc1LVxcdH07XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTExNDM9c3RhdGljIGludCBfX2luaXQgZGFtb25fdmFfaW5pdGNhbGwodm9pZClcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMTE1NS1cXHRcXHQuYXBwbHlfc2NoZW1lID0gZGFtb25fdmFfYXBwbHlfc2NoZW1lLFxcbm1tL2RhbW9uL3ZhZGRyLmM6MTE1NjpcXHRcXHQuZ2V0X3NjaGVtZV9zY29yZSA9IGRhbW9uX3ZhX3NjaGVtZV9zY29yZSxcXG5tbS9kYW1vbi92YWRkci5jLTExNTctXFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6MDAuMDk3MjM4OTlaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTAwOTYxNDk4MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gQ29uZmlndXJhdGlvbiBBbmFseXNpcyBhbmQgVG9vbCBDYWxsIFByZXBhcmF0aW9uKipcblxuT2theSwgc28gSSd2ZSBqdXN0IHRyYWNlZCB3aGVyZSBgZ2V0X3NjaGVtZV9zY29yZWAgZ2V0cyBkZWZpbmVkLiBJdCBsb29rcyBsaWtlIGBtbS9kYW1vbi9wYWRkci5jYCBwcm92aWRlcyBgZGFtb25fcGFfc2NoZW1lX3Njb3JlYCB3aGVuIGBDT05GSUdfREFNT05fUEFERFJgIGlzIGVuYWJsZWQsIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AgcHJvdmlkZXMgYGRhbW9uX3ZhX3NjaGVtZV9zY29yZWAgd2hlbiBgQ09ORklHX0RBTU9OX1ZBRERSYCBpcyBlbmFibGVkLiBVc2VyLXNwYWNlIGludGVyYWN0aW9uIHJlcXVpcmVzIGBDT05GSUdfREFNT05fU1lTRlNgLlxuXG5JJ20gc2VlaW5nIHRoYXQgYm90aCBgREFNT05fUEFERFJgIGFuZCBgREFNT05fVkFERFJgIGRlcGVuZCBvbiBgREFNT05gIGFuZCBgTU1VYCwgd2hpbGUgYERBTU9OX1NZU0ZTYCBkZXBlbmRzIG9uIGBEQU1PTmAgYW5kIGBTWVNGU2AuIENvbnNlcXVlbnRseSwgdG8gZW5hYmxlIHRoZSByZWxldmFudCBEQU1PTiBmdW5jdGlvbmFsaXR5LCBJJ20gZ29pbmcgdG8gc2V0IHRoZXNlIGZvdXIgY29uZmlnczogYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1ZBRERSYCwgYW5kIGBEQU1PTl9TWVNGU2AuXG5cbk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgdGhlIHByb21wdCdzIHJlcXVpcmVtZW50cyBhcmUgbWV0LiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyB0cnVlLCBnb29kLiBXZSBoYXZlIG5vbi11YmlxdWl0b3VzIGtlcm5lbCBmdW5jdGlvbnMgZGVmaW5lZCBhcyBgRm9jdXNTeW1ib2xzYCwgd2hpY2ggYXJlIGFwcHJvcHJpYXRlLiBBbmQsIGFzIGRpc2N1c3NlZCBhYm92ZSwgSSd2ZSBnb3QgdGhlIGBFbmFibGVDb25maWdzYCBzZXQgY29ycmVjdGx5LiBJJ3ZlIGFsc28gdmVyaWZpZWQgdGhlIHJlcXVpcmVtZW50cyB3aXRoIHRoZSBwcm92aWRlZCBzb3VyY2UgY29kZSBhbmQgYnVpbGQgY29uZmlnLiBJdCBzZWVtcyBsaWtlIGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTQwMiwiT3V0cHV0VG9rZW5zIjoxNTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6MTAuMTkzMzkyNTY2WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY2NDkyNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1ZBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3NfYWRqdXN0X3F1b3RhXCIsXG4gICAgXCJrZGFtb25kX2FwcGx5X3NjaGVtZXNcIixcbiAgICBcImRhbW9uX3N0YXJ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERBTU9TIHF1b3RhIGFkanVzdG1lbnQgbG9naWMgaW4gbW0vZGFtb24vY29yZS5jIGJ5IGFkZGluZyBhbiBlYXJseSByZXR1cm4gaW4gZGFtb3NfYWRqdXN0X3F1b3RhKCkgd2hlbiBlZmZlY3RpdmUgcXVvdGEgc2l6ZSAoZXN6KSBpcyB6ZXJvLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSwgYWx0ZXJpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCByZWdpb24gc2NvcmluZyBiZWhhdmlvciB3aGVuIHF1b3RhIGlzIGV4aGF1c3RlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiLFxuICAgIFwia2RhbW9uZF9hcHBseV9zY2hlbWVzXCIsXG4gICAgXCJkYW1vbl9zdGFydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PUyBxdW90YSBhZGp1c3RtZW50IGxvZ2ljIGluIG1tL2RhbW9uL2NvcmUuYyBieSBhZGRpbmcgYW4gZWFybHkgcmV0dXJuIGluIGRhbW9zX2FkanVzdF9xdW90YSgpIHdoZW4gZWZmZWN0aXZlIHF1b3RhIHNpemUgKGVzeikgaXMgemVyby4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UsIGFsdGVyaW5nIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgcmVnaW9uIHNjb3JpbmcgYmVoYXZpb3Igd2hlbiBxdW90YSBpcyBleGhhdXN0ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQzOjEwLjI3MDA0OTU1NFoiLCJTZXEiOjUxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3OTAzMTkzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MzoxMC4yNzA1MjI0NTRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0Mzc4OTg0Mjg1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBlYXJseSByZXR1cm4gY2hlY2sgKGBpZiAocXVvdGEtXFx1MDAzZWVzeiA9PSAwKSByZXR1cm47YCkgaW4gYGRhbW9zX2FkanVzdF9xdW90YSgpYCBpbiBgbW0vZGFtb24vY29yZS5jYCB3aGVuIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSBpcyB6ZXJvLlxcblxcblRoZSBjaGVjayBpbnNwZWN0cyBgcXVvdGEtXFx1MDAzZWVzemAsIHdoaWNoIGlzIGRldGVybWluaXN0aWNhbGx5IGluaXRpYWxpemVkIGFuZCBjb21wdXRlZCBieSB0aGUgREFNT04gc3Vic3lzdGVtICh2aWEgYGRhbW9zX3F1b3RhX2luaXQoKWAgYW5kIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKClgKS4gVGhlIHBhdGNoIGludHJvZHVjZXMgbm8gbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGFueSBkYXRhIHRvIHVzZXJzcGFjZSwgZG9lcyBub3QgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMgb3IgYnVmZmVycyB1bmluaXRpYWxpemVkLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLlxcblxcbkJlY2F1c2UgdGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQwYzUwNWIzZjM4MDZkZWE4ZjAxMzJlOGJiYzAyZmJhMTU5MGNhMDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAxMzo0MTowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggMDZjZjJhYjdlOTdkNy4uOGZlMTVmMTdiZTgwZiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMzMyNCw2ICszMzI0LDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbiBcbiBcdGlmICghYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcbiBcdFx0cmV0dXJuO1xuK1x0aWYgKHF1b3RhLVx1MDAzZWVzeiA9PSAwKVxuK1x0XHRyZXR1cm47XG4gXG4gXHQvKiBGaWxsIHVwIHRoZSBzY29yZSBoaXN0b2dyYW0gKi9cbiBcdG1lbXNldChjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtLCAwLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6MTAuMjcwNTIzODc0WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ5MzUwNjI4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gT3B0aW1pemF0aW9uIFRob3VnaHRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBhIERBTU9OIHBhdGNoLCBzcGVjaWZpY2FsbHkgaW4gYG1tL2RhbW9uL2NvcmUuY2AsIGFyb3VuZCBsaW5lIDMzMjQuIFRoZSByZWxldmFudCBwYXJ0IGlzIGluIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBmdW5jdGlvbi4gSSBzZWUgYSBuZXcgY29uZGl0aW9uYWwgY2hlY2sgaGVyZS4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIHNob3J0LWNpcmN1aXRpbmcgdGhlIHF1b3RhIGFkanVzdG1lbnQgaWYgYHF1b3RhLVx1MDAzZWVzemAgaXMgemVyby5cblxuTm93LCB0aGF0J3MgaW50ZXJlc3RpbmcuIGBxdW90YS1cdTAwM2Vlc3pgIGxpa2VseSByZXByZXNlbnRzIHRoZSBlZmZlY3RpdmUgc2l6ZSwgb3IgcGVyaGFwcyB0aGUgZXh0ZW50IHNpemUsIGFzc29jaWF0ZWQgd2l0aCB0aGUgcXVvdGEuIFRoZSBwcmlvciBsb2dpYyB3YXMgY2FsbGluZyBgYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZWAgcmVnYXJkbGVzcywgYW5kIHByZXN1bWFibHkgdGhhdCBmdW5jdGlvbiBkb2VzIHNvbWV0aGluZyB3aXRoIHRoYXQgc2l6ZS4gU28sIHRoZSBxdWVzdGlvbiBiZWNvbWVzOiB3aHkgdGhlIGFkZGVkIGNoZWNrP1xuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBhbiBlc3ogb2YgemVybyBwcm9iYWJseSBtZWFucyB0aGUgcXVvdGEgaXMgaW52YWxpZCBvciB1bmluaXRpYWxpemVkLiBDYWxsaW5nIGBnZXRfc2NoZW1lX3Njb3JlYCBvbiBzb21ldGhpbmcgd2l0aCBubyBlZmZlY3RpdmUgc2l6ZSBjb3VsZCBsZWFkIHRvIGEgZGl2aWRlLWJ5LXplcm8sIG9yIHVuZGVmaW5lZCBiZWhhdmlvciwgb3Igc2ltcGx5IHJldHVybiBnYXJiYWdlIGRhdGEuIEl0J3MgYSBjbGFzc2ljIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBtb3ZlLlxuXG5NeSBuZXh0IGxpbmUgb2YgdGhvdWdodCBpcyB0byBjaGVjayB3aGF0IGBnZXRfc2NoZW1lX3Njb3JlYCBkb2VzIHdpdGggdGhlIGVzei4gTGV0J3Mgc2VlIGlmIHRoZSBjb2RlIGNhbGxzIGBnZXRfc2NoZW1lX3Njb3JlYCBldmVuIGlmIGVzeiBpcyB6ZXJvLiBBbmQsIGFsc28gd2h5IGl0J3Mgbm90IGNoZWNrZWQgZWFybGllciwgaWYgdGhlIHplcm8gY2FzZSBpcyBpbnZhbGlkLiBQZXJoYXBzIHRoaXMgY29uZGl0aW9uYWwgd2FzIG1pc3NlZCBkdXJpbmcgaW5pdGlhbCBkZXZlbG9wbWVudCwgb3IgdGhlIGVkZ2UgY2FzZSB3YXNuJ3QgY29uc2lkZXJlZCBhdCB0aGF0IHRpbWUuXG5cbkl0J3MgYSBnb29kIG9wdGltaXphdGlvbiwgbGlrZWx5IGF2b2lkaW5nIHVubmVjZXNzYXJ5IGNhbGN1bGF0aW9ucyBhbmQgcG90ZW50aWFsIGVycm9ycyB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBlbXB0eSBvciB1bmluaXRpYWxpemVkIHF1b3RhIGVudHJpZXMuIEEgY2xlYW4gYW5kIHNlbnNpYmxlIGFkZGl0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6MTUuMjA1NTkxMDIzWiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzMxMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzMxMDpcXHRcXHRpZiAoIXRpbWVfaW5fcmFuZ2Vfb3BlbihqaWZmaWVzLCBxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tLFxcbjMzMTE6XFx0XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSArXFxuMzMxMjpcXHRcXHRcXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKHF1b3RhLVxcdTAwM2VyZXNldF9pbnRlcnZhbCkpKSB7XFxuMzMxMzpcXHRcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxuMzMxNDpcXHRcXHRcXHRcXHRzLVxcdTAwM2VzdGF0LnF0X2V4Y2VlZHMrKztcXG4zMzE1OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX3N6ICs9IHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6O1xcbjMzMTY6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XFxuMzMxNzpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiA9IDA7XFxuMzMxODpcXHRcXHRcXHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcXG4zMzE5OlxcdFxcdFxcdFxcdGNhY2hlZF9lc3ogPSBxdW90YS1cXHUwMDNlZXN6O1xcbjMzMjA6XFx0XFx0XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG4zMzIxOlxcdFxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2IHF1b3RhLVxcdTAwM2Vlc3ogIT0gY2FjaGVkX2VzeilcXG4zMzIyOlxcdFxcdFxcdFxcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XFxuMzMyMzpcXHRcXHR9XFxuMzMyNDpcXHRcXG4zMzI1OlxcdFxcdGlmICghYy1cXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXFxuMzMyNjpcXHRcXHRcXHRyZXR1cm47XFxuMzMyNzpcXHRcXHRpZiAocXVvdGEtXFx1MDAzZWVzeiA9PSAwKVxcbjMzMjg6XFx0XFx0XFx0cmV0dXJuO1xcbjMzMjk6XFx0XFxuMzMzMDpcXHRcXHQvKiBGaWxsIHVwIHRoZSBzY29yZSBoaXN0b2dyYW0gKi9cXG4zMzMxOlxcdFxcdG1lbXNldChjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSwgMCxcXG4zMzMyOlxcdFxcdFxcdFxcdHNpemVvZigqYy1cXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0pICpcXG4zMzMzOlxcdFxcdFxcdFxcdChEQU1PU19NQVhfU0NPUkUgKyAxKSk7XFxuMzMzNDpcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xcbjMzMzU6XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcXG4zMzM2OlxcdFxcdFxcdFxcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXFxuMzMzNzpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zMzM4OlxcdFxcdFxcdFxcdGlmIChkYW1vc19jb3JlX2ZpbHRlcl9vdXQoYywgdCwgciwgcykpXFxuMzMzOTpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zMzQwOlxcdFxcdFxcdFxcdHNjb3JlID0gYy1cXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcyk7XFxuMzM0MTpcXHRcXHRcXHRcXHRjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbVtzY29yZV0gKz1cXG4zMzQyOlxcdFxcdFxcdFxcdFxcdGRhbW9uX3N6X3JlZ2lvbihyKTtcXG4zMzQzOlxcdFxcdFxcdFxcdGlmIChzY29yZSBcXHUwMDNlIG1heF9zY29yZSlcXG4zMzQ0OlxcdFxcdFxcdFxcdFxcdG1heF9zY29yZSA9IHNjb3JlO1xcbjMzNDU6XFx0XFx0XFx0fVxcbjMzNDY6XFx0XFx0fVxcbjMzNDc6XFx0XFxuMzM0ODpcXHRcXHQvKiBTZXQgdGhlIG1pbiBzY29yZSBsaW1pdCAqL1xcbjMzNDk6XFx0XFx0Zm9yIChjdW11bGF0ZWRfc3ogPSAwLCBzY29yZSA9IG1heF9zY29yZTsgOyBzY29yZS0tKSB7XFxuMzM1MDpcXHRcXHRcXHRjdW11bGF0ZWRfc3ogKz0gYy1cXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1bc2NvcmVdO1xcbjMzNTE6XFx0XFx0XFx0aWYgKGN1bXVsYXRlZF9zeiBcXHUwMDNlPSBxdW90YS1cXHUwMDNlZXN6IHx8ICFzY29yZSlcXG4zMzUyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMzNTM6XFx0XFx0fVxcbjMzNTQ6XFx0XFx0cXVvdGEtXFx1MDAzZW1pbl9zY29yZSA9IHNjb3JlO1xcbjMzNTU6XFx0fVxcbjMzNTY6XFx0XFxuMzM1NzpcXHRzdGF0aWMgdm9pZCBkYW1vc190cmFjZV9zdGF0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4zMzU4OlxcdHtcXG4zMzU5OlxcdFxcdHVuc2lnbmVkIGludCBjaWR4ID0gMCwgc2lkeCA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQzOjE1LjIwNTgzOTg3M1oiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MDIyNjM0NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgSSdtIHRoZSBvbmUgaGF2aW5nIHRoZXNlIHRob3VnaHRzLlxuXG4qKkRpdmluZyBpbnRvIGBkYW1vc19hZGp1c3RfcXVvdGFgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBmb2N1c2luZyBvbiB0aGUgc3RhcnQgb2YgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIG5vdy4gSXQncyB0aW1lIHRvIGFuYWx5emUgdGhlIGZvdW5kYXRpb24sIHRoZSB2ZXJ5IG9wZW5pbmcgb2YgdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBlbnRyeSBwb2ludCBhbmQgaW5pdGlhbCBzZXR1cC4gV2hlcmUgZG9lcyB0aGlzIHByb2Nlc3MgYmVnaW4/IFdoYXQgYXJlIHRoZSBpbW1lZGlhdGUgdmFyaWFibGVzIG9yIGlucHV0cyB0aGF0IGFyZSBiZWluZyBkZWNsYXJlZCBvciBleGFtaW5lZCBhdCB0aGUgdmVyeSBvdXRzZXQ/IFdoYXQgaXMgdGhlIGluaXRpYWwgaW50ZW50aW9uIG9mIHRoaXMgY2h1bmsgb2YgY29kZT8gSSBhbSBsb29raW5nIGF0IHRoZSBpbml0aWFsIHN0YXRlIGFuZCBob3cgdGhhdCBhZmZlY3RzIGFueSBmdXR1cmUgZGV2ZWxvcG1lbnRzLiBJIG5lZWQgdG8gcXVpY2tseSBncmFzcCB0aGUgaGlnaC1sZXZlbCBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gYXMgYSB3aG9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ4NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6MjMuMjI4NDc4NDAzWiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzI5MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzI5MDpcXHRzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbjMyOTE6XFx0e1xcbjMyOTI6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG4zMjkzOlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuMzI5NDpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbjMyOTU6XFx0XFx0dW5zaWduZWQgbG9uZyBjdW11bGF0ZWRfc3osIGNhY2hlZF9lc3o7XFxuMzI5NjpcXHRcXHR1bnNpZ25lZCBpbnQgc2NvcmUsIG1heF9zY29yZSA9IDA7XFxuMzI5NzpcXHRcXG4zMjk4OlxcdFxcdGlmICghcXVvdGEtXFx1MDAzZW1zIFxcdTAwMjZcXHUwMDI2ICFxdW90YS1cXHUwMDNlc3ogXFx1MDAyNlxcdTAwMjYgbGlzdF9lbXB0eShcXHUwMDI2cXVvdGEtXFx1MDAzZWdvYWxzKSlcXG4zMjk5OlxcdFxcdFxcdHJldHVybjtcXG4zMzAwOlxcdFxcbjMzMDE6XFx0XFx0LyogRmlyc3QgY2hhcmdlIHdpbmRvdyAqL1xcbjMzMDI6XFx0XFx0aWYgKCFxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9zeiBcXHUwMDI2XFx1MDAyNiAhcXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSkge1xcbjMzMDM6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XFxuMzMwNDpcXHRcXHRcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbjMzMDU6XFx0XFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkpXFxuMzMwNjpcXHRcXHRcXHRcXHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xcbjMzMDc6XFx0XFx0fVxcbjMzMDg6XFx0XFxuMzMwOTpcXHRcXHQvKiBOZXcgY2hhcmdlIHdpbmRvdyBzdGFydHMgKi9cXG4zMzEwOlxcdFxcdGlmICghdGltZV9pbl9yYW5nZV9vcGVuKGppZmZpZXMsIHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20sXFxuMzMxMTpcXHRcXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tICtcXG4zMzEyOlxcdFxcdFxcdFxcdFxcdG1zZWNzX3RvX2ppZmZpZXMocXVvdGEtXFx1MDAzZXJlc2V0X2ludGVydmFsKSkpIHtcXG4zMzEzOlxcdFxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4zMzE0OlxcdFxcdFxcdFxcdHMtXFx1MDAzZXN0YXQucXRfZXhjZWVkcysrO1xcbjMzMTU6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogKz0gcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3o7XFxuMzMxNjpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcXG4zMzE3OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6ID0gMDtcXG4zMzE4OlxcdFxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxcbjMzMTk6XFx0XFx0XFx0XFx0Y2FjaGVkX2VzeiA9IHF1b3RhLVxcdTAwM2Vlc3o7XFxuMzMyMDpcXHRcXHRcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbjMzMjE6XFx0XFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgcXVvdGEtXFx1MDAzZWVzeiAhPSBjYWNoZWRfZXN6KVxcbjMzMjI6XFx0XFx0XFx0XFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcXG4zMzIzOlxcdFxcdH1cXG4zMzI0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MzoyMy4yMjg3NDAzNjNaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDYwMTY0ODk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFF1b3RhIEFkanVzdG1lbnQgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgc25pcHBldCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHdoYXQgaGFwcGVucyB3aGVuIGBxdW90YS1cdTAwM2Vlc3pgIChlZmZlY3RpdmUgc2l6ZSkgaXMgemVyby4gTGluZSAzMzQ5IGhhcyB0aGlzIGxvb3AgY2FsY3VsYXRpbmcgdGhlIG1pbmltdW0gc2NvcmU6XG5cbmBgYGNcblx0XHQvKiBTZXQgdGhlIG1pbiBzY29yZSBsaW1pdCAqL1xuXHRcdGZvciAoY3VtdWxhdGVkX3N6ID0gMCwgc2NvcmUgPSBtYXhfc2NvcmU7IDsgc2NvcmUtLSkge1xuXHRcdFx0Y3VtdWxhdGVkX3N6ICs9IGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1bc2NvcmVdO1xuXHRcdFx0aWYgKGN1bXVsYXRlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzeiB8fCAhc2NvcmUpXG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRxdW90YS1cdTAwM2VtaW5fc2NvcmUgPSBzY29yZTtcbmBgYFxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCBcIldhaXQsIHdoeSB0aGUgZWFybHkgcmV0dXJuIGlmIGBxdW90YS1cdTAwM2Vlc3pgIGlzIHplcm8/XCIgRGlkIHRoZXkgYWRkIHRoYXQganVzdCB0byBvcHRpbWl6ZSwgYXNzdW1pbmcgdGhlIGhpc3RvZ3JhbSBjYWxjdWxhdGlvbiBpcyB1bm5lY2Vzc2FyeSB3aGVuIHRoZSBlZmZlY3RpdmUgc2l6ZSBpcyB6ZXJvPyBPciBtYXliZSB0aGUgY29uZGl0aW9uIGBjdW11bGF0ZWRfc3ogXHUwMDNlPSAwYCBpcyBhbHdheXMgdHJ1ZSBpZiB0aGUgZWZmZWN0aXZlIHNpemUgaXMgemVybyB3aGljaCBtZWFucyBzY29yZSB3aWxsIGVxdWFsIGBtYXhfc2NvcmVgIGFuZCB0aGVuIGBtaW5fc2NvcmVgIGFsc28gZXF1YWxzIGBtYXhfc2NvcmVgLCB3aGljaCBpcyBmaW5lPyBPciBwZXJoYXBzIGFuIGVmZmVjdGl2ZSBzaXplIG9mIHplcm8gbWVhbnMgdGhlIHF1b3RhIGlzIGVzc2VudGlhbGx5IGNsb3NlZCwgc28gbm8gZnVydGhlciBwcm9jZXNzaW5nIGlzIHJlcXVpcmVkLlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuICBEb2VzIHRoaXMgcGF0Y2ggZXZlbiB0b3VjaCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBhbnkgd2F5PyBUaW1lIHRvIHRoaW5rIGFib3V0IHdoYXQgS01TQU4gd291bGQgcmVwb3J0LiBJIGtub3cgaXQgZmxhZ3MgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb24gdGhlIHN0YWNrLCBoZWFwLCBvciB3aXRoaW4gcGFnZSBhbGxvY2F0aW9ucywgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBsZWFrcy5cblxuTm93LCBsZXQncyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3Q6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8qKiBOb3BlLCBqdXN0IGFuIGVhcmx5IHJldHVybiBpbiBgZGFtb3NfYWRqdXN0X3F1b3RhKClgIHdoZW4gYHF1b3RhLVx1MDAzZWVzeiA9PSAwYC5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLCBgcXVvdGEtXHUwMDNlZXN6YCBpcyBpbml0aWFsaXplZDsgaXQncyBlaXRoZXIgc2V0IGJ5IGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCBvciBpbml0aWFsaXplZCB3aGVuIHRoZSBxdW90YSBpcyBzZXQgdXAuXG4zLiAgKipBbGxvY2F0aW9ucy9jb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLlxuNC4gICoqTW9kaWZpZWQgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcz8qKiBOb3BlLlxuXG5BbHJpZ2h0LCBidXQgd2FpdC4uLiByZXR1cm5pbmcgZWFybHkuLi4gRG9lcyB0aGlzIG1lYW4gdGhlIGNvZGUgY291bGQgcG90ZW50aWFsbHkgbGVhdmUgYHF1b3RhLVx1MDAzZW1pbl9zY29yZWAgdW5pbml0aWFsaXplZCBpbiBzb21lIGNhc2VzPyBOZWVkIHRvIGNvbmZpcm0gd2hlcmUgYHF1b3RhLVx1MDAzZW1pbl9zY29yZWAgaXMgKmFjdHVhbGx5KiB1c2VkLiBUaGF0J3MgdGhlIGtleSBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMTMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MzoyNy44MzAzOTIyODlaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNzA2NjM0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaW5fc2NvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTI0MTM9c3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjQyMC1cXG5tbS9kYW1vbi9jb3JlLmM6MjQyMTpcXHRyZXR1cm4gYy1cXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcykgXFx1MDAzZT0gcy1cXHUwMDNlcXVvdGEubWluX3Njb3JlO1xcbm1tL2RhbW9uL2NvcmUuYy0yNDIyLX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMjkwPXN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzM1My1cXHR9XFxubW0vZGFtb24vY29yZS5jOjMzNTQ6XFx0cXVvdGEtXFx1MDAzZW1pbl9zY29yZSA9IHNjb3JlO1xcbm1tL2RhbW9uL2NvcmUuYy0zMzU1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6MjguMzQ3NDY0NTg1WiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2NzQ3MDEyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBzLVx1MDAzZXF1b3RhYCBvciBqdXN0IHBsYWluIGBzYCBpcyBpbml0aWFsaXplZC4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWJ1Z2dpbmcgc3RlcC4gR290dGEgdHJhY2UgYmFjayB0byB0aGUgc291cmNlIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHZhbHVlcyBhcmUgZ2V0dGluZyBzZXQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcGlucG9pbnRpbmcgdGhlIG9yaWdpbiBvZiBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBJIG1pZ2h0IGJlIHNlZWluZyBsYXRlciBvbi4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUncyBnb3QgdG8gc2F5IVxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDk2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6MzAuMDIyMTY5NjA1WiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDU0NDE4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9uZXdfc2NoZW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz03MzI9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTc0NC1cXG5tbS9kYW1vbi9jb3JlLmM6NzQ1OnN0cnVjdCBkYW1vcyAqZGFtb25fbmV3X3NjaGVtZShzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sXFxubW0vZGFtb24vY29yZS5jLTc0Ni1cXHRcXHRcXHRlbnVtIGRhbW9zX2FjdGlvbiBhY3Rpb24sXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTU2Mz1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE1ODEtXFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vY29yZS5jOjE1ODI6XFx0XFx0bmV3X3NjaGVtZSA9IGRhbW9uX25ld19zY2hlbWUoXFx1MDAyNnNyY19zY2hlbWUtXFx1MDAzZXBhdHRlcm4sXFxubW0vZGFtb24vY29yZS5jLTE1ODMtXFx0XFx0XFx0XFx0c3JjX3NjaGVtZS1cXHUwMDNlYWN0aW9uLFxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0xODg9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fbHJ1X3NvcnRfbmV3X3NjaGVtZShcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTk1LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTk2OlxcdHJldHVybiBkYW1vbl9uZXdfc2NoZW1lKFxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTk3LVxcdFxcdFxcdC8qIGZpbmQgdGhlIHBhdHRlcm4sIGFuZCAqL1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTE2Nz1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9yZWNsYWltX25ld19zY2hlbWUodW5zaWduZWQgbG9uZyBhZ2dyX2ludGVydmFsKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTE4MC1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MTgxOlxcdHJldHVybiBkYW1vbl9uZXdfc2NoZW1lKFxcbm1tL2RhbW9uL3JlY2xhaW0uYy0xODItXFx0XFx0XFx0XFx1MDAyNnBhdHRlcm4sXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjk3ND1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9zeXNmc19ta19zY2hlbWUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzAxMS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzAxMjpcXHRzY2hlbWUgPSBkYW1vbl9uZXdfc2NoZW1lKFxcdTAwMjZwYXR0ZXJuLCBzeXNmc19zY2hlbWUtXFx1MDAzZWFjdGlvbixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzAxMy1cXHRcXHRcXHRzeXNmc19zY2hlbWUtXFx1MDAzZWFwcGx5X2ludGVydmFsX3VzLCBcXHUwMDI2cXVvdGEsIFxcdTAwMjZ3bWFya3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQzOjMwLjA2NjcyMTc4OFoiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTQxNzMwMDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBEQU1PTiBJbml0aWFsaXphdGlvbiBpbiBtbS9kYW1vbi9jb3JlLmMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgREFNT04gaW5pdGlhbGl6ZXMsIHBhcnRpY3VsYXJseSB0aGUgcXVvdGEgc3lzdGVtIGFuZCBob3cgbmV3IHNjaGVtZXMgYXJlIGludGVncmF0ZWQuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgbW0vZGFtb24vY29yZS5jYC4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHR3byBzcGVjaWZpYyBmdW5jdGlvbnM6IGBkYW1vc19xdW90YV9pbml0YCDigJMgdGhhdCdsbCBoYW5kbGUgdGhlIGFsbG9jYXRpb24gYW5kIHNldHVwIG9mIHRoZSBxdW90YSBtZWNoYW5pc20sIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBlbmZvcmNpbmcgbGltaXRzLiBUaGVuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBuZXcgc2NoZW1lcyBhcmUgcGx1Z2dlZCBpbnRvIHRoZSB3aG9sZSBzZXR1cCwgc28gSSdsbCBhbHNvIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBgZGFtb25fbmV3X3NjaGVtZWAuIEknbGwgYmUgbG9va2luZyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zLCBvciBwb3RlbnRpYWwgaW5lZmZpY2llbmNpZXMsIGVzcGVjaWFsbHkgZ2l2ZW4gaG93IERBTU9OIGhhcyBldm9sdmVkLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGR1cmluZyB0aGUgZWFybHkgc3RhZ2VzLiBHb3R0YSBlbnN1cmUgdGhlIHF1b3RhIGlzIHdvcmtpbmcgYXMgZGVzaWduZWQgYW5kIHRoZSBuZXcgc2NoZW1lcyBkb24ndCBoYXZlIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE5NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQzOjMyLjIwODQ1NDE1WiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzI1OlxcdFxcbiA3MjY6XFx0c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfZ29hbHNfZW1wdHkoc3RydWN0IGRhbW9zX3F1b3RhICpxKVxcbiA3Mjc6XFx0e1xcbiA3Mjg6XFx0XFx0cmV0dXJuIGxpc3RfZW1wdHkoXFx1MDAyNnEtXFx1MDAzZWdvYWxzKTtcXG4gNzI5OlxcdH1cXG4gNzMwOlxcdFxcbiA3MzE6XFx0LyogaW5pdGlhbGl6ZSBmaWVsZHMgb2YgQHF1b3RhIHRoYXQgbm9ybWFsbHkgQVBJIHVzZXJzIHdvdWxkbid0IHNldCAqL1xcbiA3MzI6XFx0c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxcbiA3MzM6XFx0e1xcbiA3MzQ6XFx0XFx0cXVvdGEtXFx1MDAzZWVzeiA9IDA7XFxuIDczNTpcXHRcXHRxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9zeiA9IDA7XFxuIDczNjpcXHRcXHRxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9ucyA9IDA7XFxuIDczNzpcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiA9IDA7XFxuIDczODpcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tID0gMDtcXG4gNzM5OlxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbiA3NDA6XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xcbiA3NDE6XFx0XFx0cXVvdGEtXFx1MDAzZWVzel9icCA9IDA7XFxuIDc0MjpcXHRcXHRyZXR1cm4gcXVvdGE7XFxuIDc0MzpcXHR9XFxuIDc0NDpcXHRcXG4gNzQ1OlxcdHN0cnVjdCBkYW1vcyAqZGFtb25fbmV3X3NjaGVtZShzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sXFxuIDc0NjpcXHRcXHRcXHRcXHRlbnVtIGRhbW9zX2FjdGlvbiBhY3Rpb24sXFxuIDc0NzpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzLFxcbiA3NDg6XFx0XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG4gNzQ5OlxcdFxcdFxcdFxcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzICp3bWFya3MsXFxuIDc1MDpcXHRcXHRcXHRcXHRpbnQgdGFyZ2V0X25pZClcXG4gNzUxOlxcdHtcXG4gNzUyOlxcdFxcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xcbiA3NTM6XFx0XFxuIDc1NDpcXHRcXHRzY2hlbWUgPSBrbWFsbG9jX29iaigqc2NoZW1lKTtcXG4gNzU1OlxcdFxcdGlmICghc2NoZW1lKVxcbiA3NTY6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDc1NzpcXHRcXHRzY2hlbWUtXFx1MDAzZXBhdHRlcm4gPSAqcGF0dGVybjtcXG4gNzU4OlxcdFxcdHNjaGVtZS1cXHUwMDNlYWN0aW9uID0gYWN0aW9uO1xcbiA3NTk6XFx0XFx0c2NoZW1lLVxcdTAwM2VhcHBseV9pbnRlcnZhbF91cyA9IGFwcGx5X2ludGVydmFsX3VzO1xcbiA3NjA6XFx0XFx0LypcXG4gNzYxOlxcdFxcdCAqIG5leHRfYXBwbHlfc2lzIHdpbGwgYmUgc2V0IHdoZW4ga2RhbW9uZCBzdGFydHMuICBXaGlsZSBrZGFtb25kIGlzXFxuIDc2MjpcXHRcXHQgKiBydW5uaW5nLCBpdCB3aWxsIGFsc28gdXBkYXRlZCB3aGVuIGl0IGlzIGFkZGVkIHRvIHRoZSBEQU1PTiBjb250ZXh0LFxcbiA3NjM6XFx0XFx0ICogb3IgZGFtb25fYXR0cnMgYXJlIHVwZGF0ZWQuXFxuIDc2NDpcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6MzIuMjA4Njg3MDlaIiwiU2VxIjo2MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzIzMDAyMzg5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIGRpdmUgaW50byB0aGlzLiBMZXQncyBzZWUgaG93IEkgY2FuIHN1bW1hcml6ZSB0aGlzOlxuXG4qKkFuYWx5emluZyB0aGUgTmV4dCBTdGVwcyBpbiBgZGFtb25fbmV3X3NjaGVtZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZmlndXJlIG91dCB3aGF0IHRoZSBuZXh0IG1vdmVzIGFyZSBpbiB0aGlzIGBkYW1vbl9uZXdfc2NoZW1lYC4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIGFuZCBwb3RlbnRpYWwgcm9hZGJsb2NrcyBvZiBlYWNoIHN0ZXAsIGFzc2Vzc2luZyBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIG9iamVjdGl2ZS4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgZGVwZW5kZW5jaWVzIGFuZCB0cnlpbmcgdG8gYW50aWNpcGF0ZSBhbnkgZWRnZSBjYXNlcyBvciB1bmV4cGVjdGVkIG91dGNvbWVzIHRoYXQgbWlnaHQgcmVxdWlyZSBhZGp1c3RtZW50cy4gTXkgZm9jdXMgaXMgb24gdGhlIG1vc3QgZWZmaWNpZW50IGFuZCByb2J1c3QgcGF0aCBmb3J3YXJkLCB3aGlsZSBhbHNvIGJlaW5nIG1pbmRmdWwgb2YgcG90ZW50aWFsIHJpc2tzLiBUaW1lIHRvIHB1dCBvbiBteSB0aGlua2luZyBjYXAgYW5kIHN0cmF0ZWdpemUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwOTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQzOjM1LjQzODcxMzQ1OFoiLCJTZXEiOjY0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzgzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc2NTpcXHRcXHRzY2hlbWUtXFx1MDAzZW5leHRfYXBwbHlfc2lzID0gMDtcXG4gNzY2OlxcdFxcdHNjaGVtZS1cXHUwMDNld2Fsa19jb21wbGV0ZWQgPSBmYWxzZTtcXG4gNzY3OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzY2hlbWUtXFx1MDAzZWNvcmVfZmlsdGVycyk7XFxuIDc2ODpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c2NoZW1lLVxcdTAwM2VvcHNfZmlsdGVycyk7XFxuIDc2OTpcXHRcXHRzY2hlbWUtXFx1MDAzZXN0YXQgPSAoc3RydWN0IGRhbW9zX3N0YXQpe307XFxuIDc3MDpcXHRcXHRzY2hlbWUtXFx1MDAzZW1heF9ucl9zbmFwc2hvdHMgPSAwO1xcbiA3NzE6XFx0XFx0c2NoZW1lLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xcbiA3NzI6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNjaGVtZS1cXHUwMDNlbGlzdCk7XFxuIDc3MzpcXHRcXG4gNzc0OlxcdFxcdHNjaGVtZS1cXHUwMDNlcXVvdGEgPSAqKGRhbW9zX3F1b3RhX2luaXQocXVvdGEpKTtcXG4gNzc1OlxcdFxcdC8qIHF1b3RhLmdvYWxzIHNob3VsZCBiZSBzZXBhcmF0ZWx5IHNldCBieSBjYWxsZXIgKi9cXG4gNzc2OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhLmdvYWxzKTtcXG4gNzc3OlxcdFxcbiA3Nzg6XFx0XFx0c2NoZW1lLVxcdTAwM2V3bWFya3MgPSAqd21hcmtzO1xcbiA3Nzk6XFx0XFx0c2NoZW1lLVxcdTAwM2V3bWFya3MuYWN0aXZhdGVkID0gdHJ1ZTtcXG4gNzgwOlxcdFxcbiA3ODE6XFx0XFx0c2NoZW1lLVxcdTAwM2VtaWdyYXRlX2Rlc3RzID0gKHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzKXt9O1xcbiA3ODI6XFx0XFx0c2NoZW1lLVxcdTAwM2V0YXJnZXRfbmlkID0gdGFyZ2V0X25pZDtcXG4gNzgzOlxcdFxcbiA3ODQ6XFx0XFx0cmV0dXJuIHNjaGVtZTtcXG4gNzg1OlxcdH1cXG4gNzg2OlxcdFxcbiA3ODc6XFx0c3RhdGljIHZvaWQgZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbiA3ODg6XFx0e1xcbiA3ODk6XFx0XFx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXFx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA/XFxuIDc5MDpcXHRcXHRcXHRjdHgtXFx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA6IDE7XFxuIDc5MTpcXHRcXHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsID0gcy1cXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMgP1xcbiA3OTI6XFx0XFx0XFx0cy1cXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMgOiBjdHgtXFx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWw7XFxuIDc5MzpcXHRcXG4gNzk0OlxcdFxcdHMtXFx1MDAzZW5leHRfYXBwbHlfc2lzID0gY3R4LVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscyArXFxuIDc5NTpcXHRcXHRcXHRhcHBseV9pbnRlcnZhbCAvIHNhbXBsZV9pbnRlcnZhbDtcXG4gNzk2OlxcdH1cXG4gNzk3OlxcdFxcbiA3OTg6XFx0dm9pZCBkYW1vbl9hZGRfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxcbiA3OTk6XFx0e1xcbiA4MDA6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cy1cXHUwMDNlbGlzdCwgXFx1MDAyNmN0eC1cXHUwMDNlc2NoZW1lcyk7XFxuIDgwMTpcXHRcXHRkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMocywgY3R4KTtcXG4gODAyOlxcdH1cXG4gODAzOlxcdFxcbiA4MDQ6XFx0c3RhdGljIHZvaWQgZGFtb25fZGVsX3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQzOjM1LjQzODk1ODYwN1oiLCJTZXEiOjY1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTk3MDE1NTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IG1pbmQncyBidXp6aW5nIOKAkyBJJ20gaW4gYGRhbW9uX3N5c2ZzX21rX3NjaGVtZWAgYW5kIEkndmUgaGl0IGEgcG9pbnQgd2hlcmUgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgcXVvdGFgIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkLiBJdCdzIGEga2V5IHBhcnQgb2YgdGhpcyB3aG9sZSBzY2hlbWUsIHNvIEkgY2FuJ3QganVzdCBnbG9zcyBvdmVyIGl0LiBUaW1lIHRvIGRpdmUgYmFjayBpbnRvIHRoZSBjb2RlIGFuZCB2ZXJpZnkgaXRzIHNldHVwLiBHb3R0YSBjaGFzZSB0aGlzIGRvd24gYW5kIG1ha2Ugc3VyZSBpdCdzIGhhbmRsZWQgcHJvcGVybHkgd2l0aGluIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MjgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQzOjM3LjYzNTk3Njg1MloiLCJTZXEiOjY2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5NzQsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5NzQ6XFx0c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fc3lzZnNfbWtfc2NoZW1lKFxcbjI5NzU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc3lzZnNfc2NoZW1lKVxcbjI5NzY6XFx0e1xcbjI5Nzc6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2FjY2Vzc19wYXR0ZXJuICphY2Nlc3NfcGF0dGVybiA9XFxuMjk3ODpcXHRcXHRcXHRzeXNmc19zY2hlbWUtXFx1MDAzZWFjY2Vzc19wYXR0ZXJuO1xcbjI5Nzk6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqc3lzZnNfcXVvdGFzID0gc3lzZnNfc2NoZW1lLVxcdTAwM2VxdW90YXM7XFxuMjk4MDpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfd2VpZ2h0cyAqc3lzZnNfd2VpZ2h0cyA9IHN5c2ZzX3F1b3Rhcy1cXHUwMDNld2VpZ2h0cztcXG4yOTgxOlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc193YXRlcm1hcmtzICpzeXNmc193bWFya3MgPSBzeXNmc19zY2hlbWUtXFx1MDAzZXdhdGVybWFya3M7XFxuMjk4MjpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcXG4yOTgzOlxcdFxcdGludCBlcnI7XFxuMjk4NDpcXHRcXG4yOTg1OlxcdFxcdHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiBwYXR0ZXJuID0ge1xcbjI5ODY6XFx0XFx0XFx0Lm1pbl9zel9yZWdpb24gPSBhY2Nlc3NfcGF0dGVybi1cXHUwMDNlc3otXFx1MDAzZW1pbixcXG4yOTg3OlxcdFxcdFxcdC5tYXhfc3pfcmVnaW9uID0gYWNjZXNzX3BhdHRlcm4tXFx1MDAzZXN6LVxcdTAwM2VtYXgsXFxuMjk4ODpcXHRcXHRcXHQubWluX25yX2FjY2Vzc2VzID0gYWNjZXNzX3BhdHRlcm4tXFx1MDAzZW5yX2FjY2Vzc2VzLVxcdTAwM2VtaW4sXFxuMjk4OTpcXHRcXHRcXHQubWF4X25yX2FjY2Vzc2VzID0gYWNjZXNzX3BhdHRlcm4tXFx1MDAzZW5yX2FjY2Vzc2VzLVxcdTAwM2VtYXgsXFxuMjk5MDpcXHRcXHRcXHQubWluX2FnZV9yZWdpb24gPSBhY2Nlc3NfcGF0dGVybi1cXHUwMDNlYWdlLVxcdTAwM2VtaW4sXFxuMjk5MTpcXHRcXHRcXHQubWF4X2FnZV9yZWdpb24gPSBhY2Nlc3NfcGF0dGVybi1cXHUwMDNlYWdlLVxcdTAwM2VtYXgsXFxuMjk5MjpcXHRcXHR9O1xcbjI5OTM6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0ge1xcbjI5OTQ6XFx0XFx0XFx0Lm1zID0gc3lzZnNfcXVvdGFzLVxcdTAwM2VtcyxcXG4yOTk1OlxcdFxcdFxcdC5zeiA9IHN5c2ZzX3F1b3Rhcy1cXHUwMDNlc3osXFxuMjk5NjpcXHRcXHRcXHQucmVzZXRfaW50ZXJ2YWwgPSBzeXNmc19xdW90YXMtXFx1MDAzZXJlc2V0X2ludGVydmFsX21zLFxcbjI5OTc6XFx0XFx0XFx0LndlaWdodF9zeiA9IHN5c2ZzX3dlaWdodHMtXFx1MDAzZXN6LFxcbjI5OTg6XFx0XFx0XFx0LndlaWdodF9ucl9hY2Nlc3NlcyA9IHN5c2ZzX3dlaWdodHMtXFx1MDAzZW5yX2FjY2Vzc2VzLFxcbjI5OTk6XFx0XFx0XFx0LndlaWdodF9hZ2UgPSBzeXNmc193ZWlnaHRzLVxcdTAwM2VhZ2UsXFxuMzAwMDpcXHRcXHRcXHQuZ29hbF90dW5lciA9IHN5c2ZzX3F1b3Rhcy1cXHUwMDNlZ29hbF90dW5lcixcXG4zMDAxOlxcdFxcdFxcdC5mYWlsX2NoYXJnZV9udW0gPSBzeXNmc19xdW90YXMtXFx1MDAzZWZhaWxfY2hhcmdlX251bSxcXG4zMDAyOlxcdFxcdFxcdC5mYWlsX2NoYXJnZV9kZW5vbSA9IHN5c2ZzX3F1b3Rhcy1cXHUwMDNlZmFpbF9jaGFyZ2VfZGVub20sXFxuMzAwMzpcXHRcXHR9O1xcbjMwMDQ6XFx0XFx0c3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzID0ge1xcbjMwMDU6XFx0XFx0XFx0Lm1ldHJpYyA9IHN5c2ZzX3dtYXJrcy1cXHUwMDNlbWV0cmljLFxcbjMwMDY6XFx0XFx0XFx0LmludGVydmFsID0gc3lzZnNfd21hcmtzLVxcdTAwM2VpbnRlcnZhbF91cyxcXG4zMDA3OlxcdFxcdFxcdC5oaWdoID0gc3lzZnNfd21hcmtzLVxcdTAwM2VoaWdoLFxcbjMwMDg6XFx0XFx0XFx0Lm1pZCA9IHN5c2ZzX3dtYXJrcy1cXHUwMDNlbWlkLFxcbjMwMDk6XFx0XFx0XFx0LmxvdyA9IHN5c2ZzX3dtYXJrcy1cXHUwMDNlbG93LFxcbjMwMTA6XFx0XFx0fTtcXG4zMDExOlxcdFxcbjMwMTI6XFx0XFx0c2NoZW1lID0gZGFtb25fbmV3X3NjaGVtZShcXHUwMDI2cGF0dGVybiwgc3lzZnNfc2NoZW1lLVxcdTAwM2VhY3Rpb24sXFxuMzAxMzpcXHRcXHRcXHRcXHRzeXNmc19zY2hlbWUtXFx1MDAzZWFwcGx5X2ludGVydmFsX3VzLCBcXHUwMDI2cXVvdGEsIFxcdTAwMjZ3bWFya3MsXFxuMzAxNDpcXHRcXHRcXHRcXHRzeXNmc19zY2hlbWUtXFx1MDAzZXRhcmdldF9uaWQpO1xcbjMwMTU6XFx0XFx0aWYgKCFzY2hlbWUpXFxuMzAxNjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4zMDE3OlxcdFxcbjMwMTg6XFx0XFx0ZXJyID0gZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKHN5c2ZzX3F1b3Rhcy1cXHUwMDNlZ29hbHMsIFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6MzcuNjM2MTg2NjMyWiIsIlNlcSI6NjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUxOTg5OTYzMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBUaG91Z2h0cyBvbiBgZGFtb3NfcXVvdGFgIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0geyAuLi4gfWAgY29uc3RydWN0LiAgUmlnaHQsIHRoZSBkZXNpZ25hdGVkIGluaXRpYWxpemVyLiBJdCdzIGluaXRpYWxpemluZyBhbGwgdGhlIHVuc3BlY2lmaWVkIGZpZWxkcyB0byB6ZXJvLiAgQW5kIHRoYXQgaW5jbHVkZXMgYG1pbl9zY29yZWAhIEludGVyZXN0aW5nLiBUaGlzIGNvdWxkIGhhdmUgc29tZSBpbXBsaWNhdGlvbnMgZnVydGhlciBkb3duIHRoZSBsaW5lLCBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoYXQgcGxheXMgb3V0LiAgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGJlaGF2aW9yIGlzIGNvbnNpc3RlbnQgYW5kIGV4cGVjdGVkIHRocm91Z2hvdXQgdGhlIGNvZGUuXG5cbkFscmlnaHQsIG5vdyBJIHNob3VsZCBxdWlja2x5IGNoZWNrIHdoZXJlIGVsc2UgdGhpcyBgcXVvdGFgIHN0cnVjdCBpcyB1c2VkLiBMb29rcyBsaWtlIEkgc2hvdWxkIGZvY3VzIG9uIGByZWNsYWltLmNgIGFuZCBgbHJ1X3NvcnQuY2AgdG8gc2VlIGhvdyB0aG9zZSBpbml0aWFsIHplcm9zIGFyZSBiZWluZyBoYW5kbGVkLiBJJ2xsIG5lZWQgdG8gc2VlIGlmIHRoZSBpbXBsaWNpdCB6ZXJvaW5nIGlzIHJlbGllZCB1cG9uLCBvciBpZiBpdCBtaWdodCBsZWFkIHRvIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIGJhc2VkIG9uIHRoZSBhc3N1bXB0aW9ucyBvZiB0aGUgY2FsbGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk2MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6NDIuODM1MTg1NTJaIiwiU2VxIjo2OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vcmVjbGFpbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NyxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE2NzpcXHRzdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9yZWNsYWltX25ld19zY2hlbWUodW5zaWduZWQgbG9uZyBhZ2dyX2ludGVydmFsKVxcbiAxNjg6XFx0e1xcbiAxNjk6XFx0XFx0c3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuIHBhdHRlcm4gPSB7XFxuIDE3MDpcXHRcXHRcXHQvKiBGaW5kIHJlZ2lvbnMgaGF2aW5nIFBBR0VfU0laRSBvciBsYXJnZXIgc2l6ZSAqL1xcbiAxNzE6XFx0XFx0XFx0Lm1pbl9zel9yZWdpb24gPSBQQUdFX1NJWkUsXFxuIDE3MjpcXHRcXHRcXHQubWF4X3N6X3JlZ2lvbiA9IFVMT05HX01BWCxcXG4gMTczOlxcdFxcdFxcdC8qIGFuZCBub3QgYWNjZXNzZWQgYXQgYWxsICovXFxuIDE3NDpcXHRcXHRcXHQubWluX25yX2FjY2Vzc2VzID0gMCxcXG4gMTc1OlxcdFxcdFxcdC5tYXhfbnJfYWNjZXNzZXMgPSAwLFxcbiAxNzY6XFx0XFx0XFx0LyogZm9yIG1pbl9hZ2Ugb3IgbW9yZSBtaWNyby1zZWNvbmRzICovXFxuIDE3NzpcXHRcXHRcXHQubWluX2FnZV9yZWdpb24gPSBtaW5fYWdlIC8gYWdncl9pbnRlcnZhbCxcXG4gMTc4OlxcdFxcdFxcdC5tYXhfYWdlX3JlZ2lvbiA9IFVJTlRfTUFYLFxcbiAxNzk6XFx0XFx0fTtcXG4gMTgwOlxcdFxcbiAxODE6XFx0XFx0cmV0dXJuIGRhbW9uX25ld19zY2hlbWUoXFxuIDE4MjpcXHRcXHRcXHRcXHRcXHUwMDI2cGF0dGVybixcXG4gMTgzOlxcdFxcdFxcdFxcdC8qIHBhZ2Ugb3V0IHRob3NlLCBhcyBzb29uIGFzIGZvdW5kICovXFxuIDE4NDpcXHRcXHRcXHRcXHREQU1PU19QQUdFT1VULFxcbiAxODU6XFx0XFx0XFx0XFx0LyogZm9yIGVhY2ggYWdncmVnYXRpb24gaW50ZXJ2YWwgKi9cXG4gMTg2OlxcdFxcdFxcdFxcdDAsXFxuIDE4NzpcXHRcXHRcXHRcXHQvKiB1bmRlciB0aGUgcXVvdGEuICovXFxuIDE4ODpcXHRcXHRcXHRcXHRcXHUwMDI2ZGFtb25fcmVjbGFpbV9xdW90YSxcXG4gMTg5OlxcdFxcdFxcdFxcdC8qIChEZSlhY3RpdmF0ZSB0aGlzIGFjY29yZGluZyB0byB0aGUgd2F0ZXJtYXJrcy4gKi9cXG4gMTkwOlxcdFxcdFxcdFxcdFxcdTAwMjZkYW1vbl9yZWNsYWltX3dtYXJrcyxcXG4gMTkxOlxcdFxcdFxcdFxcdE5VTUFfTk9fTk9ERSk7XFxuIDE5MjpcXHR9XFxuIDE5MzpcXHRcXG4gMTk0OlxcdHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuIDE5NTpcXHR7XFxuIDE5NjpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpwYXJhbV9jdHg7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQzOjQyLjgzNTI3Njc4WiIsIlNlcSI6NjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ0MjY3MDU5NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBkYW1vbl9yZWNsYWltX3F1b3RhYCoqXG5cbk9rYXksIHNvIGBkYW1vbl9yZWNsYWltX3F1b3RhYCBpcyBhIGdsb2JhbCB2YXJpYWJsZSwgYW5kIGl0J3MgaW5pdGlhbGl6ZWQgc3RhdGljYWxseS4gVGhhdCB0ZWxscyBtZSBhIGZldyB0aGluZ3MgcmlnaHQgb2ZmIHRoZSBiYXQ6IGl0cyBzY29wZSBpcyBpbXBvcnRhbnQsIHBvdGVudGlhbGx5IGluZmx1ZW5jaW5nIGJlaGF2aW9yIGFjcm9zcyB0aGUgZW50aXJlIHN5c3RlbSBpZiBpdCdzIG5vdCBoYW5kbGVkIGNhcmVmdWxseS4gU3RhdGljIGluaXRpYWxpemF0aW9uIHN1Z2dlc3RzIGl0J3MgbGlrZWx5IHNldCBhdCBjb21waWxlIHRpbWUgb3IgZHVyaW5nIHZlcnkgZWFybHkgYm9vdCwgd2hpY2ggY291bGQgZ2l2ZSB1cyBpbnNpZ2h0cyBpbnRvIHRoZSBzeXN0ZW0ncyBiYXNlbGluZSBtZW1vcnkgcmVjbGFpbSBwb2xpY3kuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgdmFyaWFibGUgaXMgYWN0dWFsbHkgKnVzZWQqLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGxydV9zb3J0LmNgLiBHaXZlbiB0aGUgbmFtZSwgSSBzdXNwZWN0IHRoaXMgdmFyaWFibGUgbWlnaHQgYmUgbGlua2VkIHRvIGhvdyB0aGUgTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBjYWNoZSBpcyBtYW5hZ2VkIGFuZCBob3cgbWVtb3J5IHJlY2xhaW0gaXMgcHJpb3JpdGl6ZWQgd2l0aGluIGl0LiBQZXJoYXBzIGl0J3MgYSB0aHJlc2hvbGQsIGEgZmxhZywgb3IgYSBxdW90YSByZWxhdGVkIHRvIHRoZSBhbW91bnQgb2YgbWVtb3J5IHRoYXQgY2FuIGJlIHJlY2xhaW1lZCB1c2luZyBhIHBhcnRpY3VsYXIgcG9saWN5LiBFeGFtaW5pbmcgdGhpcyBzb3VyY2UgZmlsZSB3aWxsIHRlbGwgdGhlIHRhbGUuIEl0IG1heSB3ZWxsIGJlIHRoZSBsaW5jaHBpbiBpbiBob3cgYWdncmVzc2l2ZWx5IG1lbW9yeSBpcyBmcmVlZCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzA3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0Mzo0Ny4yNjE5ODYwMjRaIiwiU2VxIjo3MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vbHJ1X3NvcnQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODgsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODg6XFx0c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fbHJ1X3NvcnRfbmV3X3NjaGVtZShcXG4gMTg5OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybiwgZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uKVxcbiAxOTA6XFx0e1xcbiAxOTE6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0gZGFtb25fbHJ1X3NvcnRfcXVvdGE7XFxuIDE5MjpcXHRcXG4gMTkzOlxcdFxcdC8qIFVzZSBoYWxmIG9mIHRvdGFsIHF1b3RhIGZvciBob3QvY29sZCBwYWdlcyBzb3J0aW5nICovXFxuIDE5NDpcXHRcXHRxdW90YS5tcyA9IHF1b3RhLm1zIC8gMjtcXG4gMTk1OlxcdFxcbiAxOTY6XFx0XFx0cmV0dXJuIGRhbW9uX25ld19zY2hlbWUoXFxuIDE5NzpcXHRcXHRcXHRcXHQvKiBmaW5kIHRoZSBwYXR0ZXJuLCBhbmQgKi9cXG4gMTk4OlxcdFxcdFxcdFxcdHBhdHRlcm4sXFxuIDE5OTpcXHRcXHRcXHRcXHQvKiAoZGUpcHJpb3JpdGl6ZSBvbiBMUlUtbGlzdHMgKi9cXG4gMjAwOlxcdFxcdFxcdFxcdGFjdGlvbixcXG4gMjAxOlxcdFxcdFxcdFxcdC8qIGZvciBlYWNoIGFnZ3JlZ2F0aW9uIGludGVydmFsICovXFxuIDIwMjpcXHRcXHRcXHRcXHQwLFxcbiAyMDM6XFx0XFx0XFx0XFx0LyogdW5kZXIgdGhlIHF1b3RhLiAqL1xcbiAyMDQ6XFx0XFx0XFx0XFx0XFx1MDAyNnF1b3RhLFxcbiAyMDU6XFx0XFx0XFx0XFx0LyogKERlKWFjdGl2YXRlIHRoaXMgYWNjb3JkaW5nIHRvIHRoZSB3YXRlcm1hcmtzLiAqL1xcbiAyMDY6XFx0XFx0XFx0XFx0XFx1MDAyNmRhbW9uX2xydV9zb3J0X3dtYXJrcyxcXG4gMjA3OlxcdFxcdFxcdFxcdE5VTUFfTk9fTk9ERSk7XFxuIDIwODpcXHR9XFxuIDIwOTpcXHRcXG4gMjEwOlxcdC8qIENyZWF0ZSBhIERBTU9OLWJhc2VkIG9wZXJhdGlvbiBzY2hlbWUgZm9yIGhvdCBtZW1vcnkgcmVnaW9ucyAqL1xcbiAyMTE6XFx0c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fbHJ1X3NvcnRfbmV3X2hvdF9zY2hlbWUodW5zaWduZWQgaW50IGhvdF90aHJlcylcXG4gMjEyOlxcdHtcXG4gMjEzOlxcdFxcdHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiBwYXR0ZXJuID0gZGFtb25fbHJ1X3NvcnRfc3R1Yl9wYXR0ZXJuO1xcbiAyMTQ6XFx0XFxuIDIxNTpcXHRcXHRwYXR0ZXJuLm1pbl9ucl9hY2Nlc3NlcyA9IGhvdF90aHJlcztcXG4gMjE2OlxcdFxcdHJldHVybiBkYW1vbl9scnVfc29ydF9uZXdfc2NoZW1lKFxcdTAwMjZwYXR0ZXJuLCBEQU1PU19MUlVfUFJJTyk7XFxuIDIxNzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQzOjQ3LjI2MjA3NTYyNFoiLCJTZXEiOjcxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2Nzk4MjcxMjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgZGFtb3NfYWRqdXN0X3F1b3RhYCBjb2RlIHNuaXBwZXQuIEZpcnN0LCBJIHNlZSB0aGUgZWFybHkgcmV0dXJuIGNvbmRpdGlvbnM6IGlmIGBjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlYCBpc24ndCBkZWZpbmVkLCBvciBpZiBgcXVvdGEtXHUwMDNlZXN6YCAodGhlIGVmZmVjdGl2ZSBzaXplKSBpcyB6ZXJvLCB0aGUgZnVuY3Rpb24ganVzdCBleGl0cy4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogd2h5IHdhcyB0aGlzIHBhdGNoIHdyaXR0ZW4/IFdoYXQncyB0aGUgY29udGV4dD9cblxuVGhlIGNvcmUgb2YgdGhlIGxvZ2ljIGxpZXMgd2l0aGluIHRoZSBgcXVvdGEtXHUwMDNlZXN6ID09IDBgIGJyYW5jaCwgc3BlY2lmaWNhbGx5IGF0IGxpbmUgMzM0OS4gVGhlIGNvZGUgY2FsY3VsYXRlcyBhIGBtaW5fc2NvcmVgIGJhc2VkIG9uIHRoZSBoaXN0b2dyYW0uIEhvd2V2ZXIsIGlmIGBxdW90YS1cdTAwM2Vlc3pgIGlzIHplcm8sIHRoZSBsb29wIGJyZWFrcyBpbW1lZGlhdGVseS4gYGN1bXVsYXRlZF9zemAgd2hpY2ggaXMgdW5zaWduZWQgbG9uZywgc3RhcnRzIGF0IDAsIGFuZCB0aGUgZmlyc3QgaXRlcmF0aW9uIGNhdXNlcyBgY3VtdWxhdGVkX3N6IFx1MDAzZT0gMGAgYWx3YXlzIHRvIGJlIHRydWUuIFRoaXMgc2V0cyBgcXVvdGEtXHUwMDNlbWluX3Njb3JlYCB0byB0aGUgYG1heF9zY29yZWAuXG5cbk15IGZpcnN0IHRob3VnaHQ6IGlmIGBlc3pgIGlzIHplcm8sIHdlJ3JlIGVzc2VudGlhbGx5IHNheWluZyBubyBxdW90YSBzaG91bGQgYmUgYXBwbGllZC4gIEJ1dCBpcyB0aGlzIGFuIG9wdGltaXphdGlvbj8gUGVyaGFwcyBpZiB0aGUgZWZmZWN0aXZlIHNpemUgaXMgemVybywgd2Ugc2tpcCB0aGUgaGlzdG9ncmFtIGNhbGN1bGF0aW9uIGFsdG9nZXRoZXIsIHdoaWNoIGlzIGEgY29tbW9uIG9wdGltaXphdGlvbi4gT3IgbWF5YmUgdGhlIHByZXZpb3VzIHZhbHVlIG9mIGBtaW5fc2NvcmVgIGlzIG5vIGxvbmdlciByZWxldmFudCwgb3IgaXMganVzdCBpbml0aWFsaXplZCB0byBgbWF4X3Njb3JlYCBzbyB0aGUgdmFsdWUgZG9lc24ndCBtYXR0ZXIuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSAqdW5pbml0aWFsaXplZCBtZW1vcnkqIHZ1bG5lcmFiaWxpdGllcz8gVGhpcyBpcyB3aGVyZSBJIGhhdmUgdG8gYXBwbHkgbXkgS01TQU4ga25vd2xlZGdlLiBMZXQncyBydW4gdGhyb3VnaCB0aGUgY3JpdGVyaWE6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2U/KiogTm9wZS4gTm8gc3RydWN0dXJlcyBhcmUgYmVpbmcgcGFzc2VkIHRvIHVzZXIgc3BhY2UgaGVyZS5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBUaGUgY29uZGl0aW9uIGlzIGJhc2VkIG9uIGBxdW90YS1cdTAwM2Vlc3pgLCB3aGljaCBpcyBwYXJ0IG9mIGBzdHJ1Y3QgZGFtb3NfcXVvdGFgLiBUaGlzIHN0cnVjdHVyZSBpcyAqZnVsbHkgaW5pdGlhbGl6ZWQqIOKAkyBpdCBnZXRzIGEgemVybyB2YWx1ZSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gKGBkYW1vc19xdW90YV9pbml0YCksIG9yIGdldHMgYSBjb21wdXRlZCB2YWx1ZSBkdXJpbmcgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgLiBTbywgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaGVyZS5cbjMuICAqKkRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24/KiogTm8gbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgaGVyZSB0aGF0IGNvdWxkIGhhdmUgdW5pbml0aWFsaXplZCBmaWVsZHMgbGF0ZXIgYWNjZXNzZWQuXG40LiAgKipCb3VuZHMgY2hlY2tzLCBsZW5ndGhzPyoqIE5vIGJ1ZmZlciBhY2Nlc3Nlcy4gTm90aGluZyBoZXJlIHRvIGNhdXNlIGEgbGVhayBvZiB1bmluaXRpYWxpemVkIGRhdGEuXG5cblNvLCBiYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IGluIHNheWluZyB0aGlzIHBhdGNoIGRvZXMgTk9UIGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZSBhcmUgbm8gbWVtb3J5IHNhZmV0eSBidWdzIGhlcmUuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGF0IHBsYXkgaGVyZS5cblxuTm93LCBsZXQncyBzb2xpZGlmeSB0aGUgcmF0aW9uYWxlIGZvciBgTmVlZHNLTVNBTiA9IGZhbHNlYDpcblxuKiAgICoqS0FTQU4vU3RhbmRhcmQgU2FuaXRpemVyczoqKiBUaGlzIGlzIGEgY29udHJvbCBmbG93IG9wdGltaXphdGlvbiwgYW4gZWFybHkgcmV0dXJuIHdoZW4gZWZmZWN0aXZlIHNjaGVtZSBzaXplIGlzIHplcm8uIEl0IGludHJvZHVjZXMgbm8gbWVtb3J5IHNhZmV0eSBidWdzIChPT0IsIFVBRiwgZXRjLilcbiogICAqKktNU0FOOioqIEtNU0FOIGxvb2tzIGZvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gYHF1b3RhLVx1MDAzZWVzemAgaXMgKmV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQqLCBhbmQgdGhlIGVhcmx5IHJldHVybiBkb2Vzbid0IHNraXAgcmVxdWlyZWQgaW5pdGlhbGl6YXRpb24gdGhhdCB3b3VsZCByZXN1bHQgaW4gcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UuXG5cblRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpc24ndCBuZWVkZWQuXG5cbkxldCdzIHN1Ym1pdCB0aGlzIHJlYXNvbmluZyB3aXRoIHRoZSBcInNldC1yZXN1bHRzXCIgY29tbWFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0OTUsIk91dHB1dFRva2VucyI6MjA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6NTQuMDYwMzQ5MTc0WiIsIlNlcSI6NzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIGVhcmx5IHJldHVybiBjaGVjayAoYGlmIChxdW90YS1cXHUwMDNlZXN6ID09IDApIHJldHVybjtgKSBpbiBgZGFtb3NfYWRqdXN0X3F1b3RhKClgIGluIGBtbS9kYW1vbi9jb3JlLmNgIHdoZW4gdGhlIGVmZmVjdGl2ZSBxdW90YSBzaXplIGlzIHplcm8uXFxuXFxuVGhlIGNoZWNrIGluc3BlY3RzIGBxdW90YS1cXHUwMDNlZXN6YCwgd2hpY2ggaXMgZGV0ZXJtaW5pc3RpY2FsbHkgaW5pdGlhbGl6ZWQgYW5kIGNvbXB1dGVkIGJ5IHRoZSBEQU1PTiBzdWJzeXN0ZW0gKHZpYSBgZGFtb3NfcXVvdGFfaW5pdCgpYCBhbmQgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoKWApLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBubyBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcyBvciBidWZmZXJzIHVuaW5pdGlhbGl6ZWQsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMuXFxuXFxuQmVjYXVzZSB0aGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBlYXJseSByZXR1cm4gY2hlY2sgKGBpZiAocXVvdGEtXFx1MDAzZWVzeiA9PSAwKSByZXR1cm47YCkgaW4gYGRhbW9zX2FkanVzdF9xdW90YSgpYCBpbiBgbW0vZGFtb24vY29yZS5jYCB3aGVuIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSBpcyB6ZXJvLlxcblxcblRoZSBjaGVjayBpbnNwZWN0cyBgcXVvdGEtXFx1MDAzZWVzemAsIHdoaWNoIGlzIGRldGVybWluaXN0aWNhbGx5IGluaXRpYWxpemVkIGFuZCBjb21wdXRlZCBieSB0aGUgREFNT04gc3Vic3lzdGVtICh2aWEgYGRhbW9zX3F1b3RhX2luaXQoKWAgYW5kIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKClgKS4gVGhlIHBhdGNoIGludHJvZHVjZXMgbm8gbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGFueSBkYXRhIHRvIHVzZXJzcGFjZSwgZG9lcyBub3QgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMgb3IgYnVmZmVycyB1bmluaXRpYWxpemVkLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLlxcblxcbkJlY2F1c2UgdGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowxvzk7[1] Phase: Succeeded StartedAt: 2026-09-12 13:44:05 +0000 UTC FinishedAt: 2026-09-12 13:44:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvzk7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-12 13:44:05 +0000 UTC FinishedAt: 2026-09-12 13:44:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvzk7[2] Phase: Running StartedAt: 2026-09-12 13:44:05 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvzk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"879dd9a7-5506-4e1e-9a4c-37044482705c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-09-12 13:44:05 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes","damon_start"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"879dd9a7-5506-4e1e-9a4c-37044482705c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxvzk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"879dd9a7-5506-4e1e-9a4c-37044482705c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-12 13:44:05 +0000 UTC FinishedAt: 2026-09-12 13:44:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvzk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"879dd9a7-5506-4e1e-9a4c-37044482705c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-12 13:44:05 +0000 UTC FinishedAt: 2026-09-12 13:44:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxvzk7/series-workflowxvzk7-convert-artifact-2946947999/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxvzk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"879dd9a7-5506-4e1e-9a4c-37044482705c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-12 13:44:15 +0000 UTC FinishedAt: 2026-09-12 14:01:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvzk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"879dd9a7-5506-4e1e-9a4c-37044482705c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-12 13:44:15 +0000 UTC FinishedAt: 2026-09-12 14:01:07 +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:*4d073dcd-8048-412c-84d9-234f4ea38730,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-workflowxvzk7/series-workflowxvzk7-convert-artifact-2946947999/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": "3545a6a9-17cb-4397-81bd-40e0398720a4", "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-workflowxvzk7/series-workflowxvzk7-build-action-1894731173/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxvzk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"879dd9a7-5506-4e1e-9a4c-37044482705c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-12 13:44:15 +0000 UTC FinishedAt: 2026-09-12 14:00:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4d073dcd-8048-412c-84d9-234f4ea38730,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-workflowxvzk7/series-workflowxvzk7-convert-artifact-2946947999/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": "3545a6a9-17cb-4397-81bd-40e0398720a4", "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-workflowxvzk7/series-workflowxvzk7-build-action-1894731173/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxvzk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"879dd9a7-5506-4e1e-9a4c-37044482705c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-12 14:01:07 +0000 UTC FinishedAt: 2026-09-12 14:01:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvzk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"879dd9a7-5506-4e1e-9a4c-37044482705c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-12 14:01:07 +0000 UTC FinishedAt: 2026-09-12 14:01:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvzk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"879dd9a7-5506-4e1e-9a4c-37044482705c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-12 14:01:07 +0000 UTC FinishedAt: 2026-09-12 14:01:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvzk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"879dd9a7-5506-4e1e-9a4c-37044482705c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-12 14:01:07 +0000 UTC FinishedAt: 2026-09-12 14:01:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"879dd9a7-5506-4e1e-9a4c-37044482705c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxvzk7/series-workflowxvzk7-convert-artifact-3920444206/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxvzk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"879dd9a7-5506-4e1e-9a4c-37044482705c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-12 14:01:17 +0000 UTC FinishedAt: 2026-09-12 14:03:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvzk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"879dd9a7-5506-4e1e-9a4c-37044482705c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-12 14:01:17 +0000 UTC FinishedAt: 2026-09-12 14:03:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3545a6a9-17cb-4397-81bd-40e0398720a4,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-workflowxvzk7/series-workflowxvzk7-build-action-1894731173/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-workflowxvzk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"879dd9a7-5506-4e1e-9a4c-37044482705c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-12 14:03:31 +0000 UTC FinishedAt: 2026-09-12 14:03:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvzk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"879dd9a7-5506-4e1e-9a4c-37044482705c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-12 14:03:31 +0000 UTC FinishedAt: 2026-09-12 14:03:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvzk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"879dd9a7-5506-4e1e-9a4c-37044482705c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-12 14:03:31 +0000 UTC FinishedAt: 2026-09-12 14:22:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvzk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"879dd9a7-5506-4e1e-9a4c-37044482705c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-12 14:03:31 +0000 UTC FinishedAt: 2026-09-12 14:22:31 +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:*4d073dcd-8048-412c-84d9-234f4ea38730,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-workflowxvzk7/series-workflowxvzk7-convert-artifact-3920444206/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": "e23d87dc-d1b4-485d-8913-d915ecc31e29", "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-workflowxvzk7/series-workflowxvzk7-build-action-166064706/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxvzk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"879dd9a7-5506-4e1e-9a4c-37044482705c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-12 14:03:31 +0000 UTC FinishedAt: 2026-09-12 14:22:20 +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:*4d073dcd-8048-412c-84d9-234f4ea38730,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-workflowxvzk7/series-workflowxvzk7-convert-artifact-3920444206/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": "e23d87dc-d1b4-485d-8913-d915ecc31e29", "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-workflowxvzk7/series-workflowxvzk7-build-action-166064706/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxvzk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"879dd9a7-5506-4e1e-9a4c-37044482705c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-12 14:22:31 +0000 UTC FinishedAt: 2026-09-12 14:22:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvzk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"879dd9a7-5506-4e1e-9a4c-37044482705c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-12 14:22:31 +0000 UTC FinishedAt: 2026-09-12 14:22:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvzk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"879dd9a7-5506-4e1e-9a4c-37044482705c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Running StartedAt: 2026-09-12 14:22:31 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvzk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"879dd9a7-5506-4e1e-9a4c-37044482705c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Running StartedAt: 2026-09-12 14:22:31 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*e23d87dc-d1b4-485d-8913-d915ecc31e29,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-workflowxvzk7/series-workflowxvzk7-build-action-166064706/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil